diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..3b0e9429388436feb7219ec47552dccafa133898 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +imgs/combination.gif filter=lfs diff=lfs merge=lfs -text +models/glb/merged-saber-maid.glb filter=lfs diff=lfs merge=lfs -text +models/glb/merged-saber-stand.glb filter=lfs diff=lfs merge=lfs -text +models/glb/merged.glb filter=lfs diff=lfs merge=lfs -text +models/gltf/merged-saber-maid/saber-dress-texture.png filter=lfs diff=lfs merge=lfs -text +models/gltf/saber-dress-mixamo/saber-dress-texture.png filter=lfs diff=lfs merge=lfs -text +models/merge/saber-dress-texture.png filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..00cbbdf53f6c487c8392d936ce7225824c11446e --- /dev/null +++ b/.gitignore @@ -0,0 +1,59 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..36bc5e10c7da3d9d647d2c5a370849dfa8dfeb2b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 shrekshao + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000000000000000000000000000000000000..75f88f998ddf8a40f4bb01e72412ac16f2048f84 --- /dev/null +++ b/app.js @@ -0,0 +1,52610 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderTargetCube", function() { return WebGLRenderTargetCube; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderTarget", function() { return WebGLRenderTarget; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderer", function() { return WebGLRenderer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShaderLib", function() { return ShaderLib; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UniformsLib", function() { return UniformsLib; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UniformsUtils", function() { return UniformsUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShaderChunk", function() { return ShaderChunk; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FogExp2", function() { return FogExp2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Fog", function() { return Fog; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scene", function() { return Scene; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LensFlare", function() { return LensFlare; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sprite", function() { return Sprite; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LOD", function() { return LOD; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SkinnedMesh", function() { return SkinnedMesh; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Skeleton", function() { return Skeleton; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Bone", function() { return Bone; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Mesh", function() { return Mesh; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineSegments", function() { return LineSegments; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineLoop", function() { return LineLoop; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Line", function() { return Line; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Points", function() { return Points; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Group", function() { return Group; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VideoTexture", function() { return VideoTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DataTexture", function() { return DataTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompressedTexture", function() { return CompressedTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeTexture", function() { return CubeTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CanvasTexture", function() { return CanvasTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DepthTexture", function() { return DepthTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Texture", function() { return Texture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompressedTextureLoader", function() { return CompressedTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DataTextureLoader", function() { return DataTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeTextureLoader", function() { return CubeTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextureLoader", function() { return TextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObjectLoader", function() { return ObjectLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MaterialLoader", function() { return MaterialLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BufferGeometryLoader", function() { return BufferGeometryLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultLoadingManager", function() { return DefaultLoadingManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadingManager", function() { return LoadingManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "JSONLoader", function() { return JSONLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImageLoader", function() { return ImageLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FontLoader", function() { return FontLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FileLoader", function() { return FileLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Loader", function() { return Loader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cache", function() { return Cache; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioLoader", function() { return AudioLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpotLightShadow", function() { return SpotLightShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpotLight", function() { return SpotLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointLight", function() { return PointLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RectAreaLight", function() { return RectAreaLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HemisphereLight", function() { return HemisphereLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirectionalLightShadow", function() { return DirectionalLightShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirectionalLight", function() { return DirectionalLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AmbientLight", function() { return AmbientLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LightShadow", function() { return LightShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Light", function() { return Light; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StereoCamera", function() { return StereoCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PerspectiveCamera", function() { return PerspectiveCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OrthographicCamera", function() { return OrthographicCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeCamera", function() { return CubeCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArrayCamera", function() { return ArrayCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Camera", function() { return Camera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioListener", function() { return AudioListener; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PositionalAudio", function() { return PositionalAudio; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioContext", function() { return AudioContext; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioAnalyser", function() { return AudioAnalyser; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Audio", function() { return Audio; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VectorKeyframeTrack", function() { return VectorKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StringKeyframeTrack", function() { return StringKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuaternionKeyframeTrack", function() { return QuaternionKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NumberKeyframeTrack", function() { return NumberKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorKeyframeTrack", function() { return ColorKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BooleanKeyframeTrack", function() { return BooleanKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PropertyMixer", function() { return PropertyMixer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PropertyBinding", function() { return PropertyBinding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyframeTrack", function() { return KeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationUtils", function() { return AnimationUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationObjectGroup", function() { return AnimationObjectGroup; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationMixer", function() { return AnimationMixer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationClip", function() { return AnimationClip; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uniform", function() { return Uniform; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InstancedBufferGeometry", function() { return InstancedBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BufferGeometry", function() { return BufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GeometryIdCount", function() { return GeometryIdCount; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Geometry", function() { return Geometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterleavedBufferAttribute", function() { return InterleavedBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InstancedInterleavedBuffer", function() { return InstancedInterleavedBuffer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterleavedBuffer", function() { return InterleavedBuffer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InstancedBufferAttribute", function() { return InstancedBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Face3", function() { return Face3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Object3D", function() { return Object3D; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Raycaster", function() { return Raycaster; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Layers", function() { return Layers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventDispatcher", function() { return EventDispatcher; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Clock", function() { return Clock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuaternionLinearInterpolant", function() { return QuaternionLinearInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearInterpolant", function() { return LinearInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiscreteInterpolant", function() { return DiscreteInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubicInterpolant", function() { return CubicInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Interpolant", function() { return Interpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Triangle", function() { return Triangle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Math", function() { return _Math; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Spherical", function() { return Spherical; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cylindrical", function() { return Cylindrical; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Plane", function() { return Plane; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Frustum", function() { return Frustum; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sphere", function() { return Sphere; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Ray", function() { return Ray; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix4", function() { return Matrix4; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix3", function() { return Matrix3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box3", function() { return Box3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box2", function() { return Box2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Line3", function() { return Line3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Euler", function() { return Euler; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector4", function() { return Vector4; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector3", function() { return Vector3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector2", function() { return Vector2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Quaternion", function() { return Quaternion; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImmediateRenderObject", function() { return ImmediateRenderObject; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VertexNormalsHelper", function() { return VertexNormalsHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpotLightHelper", function() { return SpotLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SkeletonHelper", function() { return SkeletonHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointLightHelper", function() { return PointLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RectAreaLightHelper", function() { return RectAreaLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HemisphereLightHelper", function() { return HemisphereLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridHelper", function() { return GridHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PolarGridHelper", function() { return PolarGridHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaceNormalsHelper", function() { return FaceNormalsHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirectionalLightHelper", function() { return DirectionalLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CameraHelper", function() { return CameraHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoxHelper", function() { return BoxHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box3Helper", function() { return Box3Helper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneHelper", function() { return PlaneHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArrowHelper", function() { return ArrowHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AxisHelper", function() { return AxisHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CatmullRomCurve3", function() { return CatmullRomCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubicBezierCurve3", function() { return CubicBezierCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuadraticBezierCurve3", function() { return QuadraticBezierCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineCurve3", function() { return LineCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArcCurve", function() { return ArcCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EllipseCurve", function() { return EllipseCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplineCurve", function() { return SplineCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubicBezierCurve", function() { return CubicBezierCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuadraticBezierCurve", function() { return QuadraticBezierCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineCurve", function() { return LineCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Shape", function() { return Shape; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Path", function() { return Path; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapePath", function() { return ShapePath; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Font", function() { return Font; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CurvePath", function() { return CurvePath; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Curve", function() { return Curve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapeUtils", function() { return ShapeUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SceneUtils", function() { return SceneUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLUtils", function() { return WebGLUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WireframeGeometry", function() { return WireframeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParametricGeometry", function() { return ParametricGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParametricBufferGeometry", function() { return ParametricBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TetrahedronGeometry", function() { return TetrahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TetrahedronBufferGeometry", function() { return TetrahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OctahedronGeometry", function() { return OctahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OctahedronBufferGeometry", function() { return OctahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IcosahedronGeometry", function() { return IcosahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IcosahedronBufferGeometry", function() { return IcosahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DodecahedronGeometry", function() { return DodecahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DodecahedronBufferGeometry", function() { return DodecahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PolyhedronGeometry", function() { return PolyhedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PolyhedronBufferGeometry", function() { return PolyhedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TubeGeometry", function() { return TubeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TubeBufferGeometry", function() { return TubeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusKnotGeometry", function() { return TorusKnotGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusKnotBufferGeometry", function() { return TorusKnotBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusGeometry", function() { return TorusGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusBufferGeometry", function() { return TorusBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextGeometry", function() { return TextGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextBufferGeometry", function() { return TextBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SphereGeometry", function() { return SphereGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SphereBufferGeometry", function() { return SphereBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RingGeometry", function() { return RingGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RingBufferGeometry", function() { return RingBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneGeometry", function() { return PlaneGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneBufferGeometry", function() { return PlaneBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LatheGeometry", function() { return LatheGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LatheBufferGeometry", function() { return LatheBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapeGeometry", function() { return ShapeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapeBufferGeometry", function() { return ShapeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExtrudeGeometry", function() { return ExtrudeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExtrudeBufferGeometry", function() { return ExtrudeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EdgesGeometry", function() { return EdgesGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConeGeometry", function() { return ConeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConeBufferGeometry", function() { return ConeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderGeometry", function() { return CylinderGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderBufferGeometry", function() { return CylinderBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CircleGeometry", function() { return CircleGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CircleBufferGeometry", function() { return CircleBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoxGeometry", function() { return BoxGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoxBufferGeometry", function() { return BoxBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShadowMaterial", function() { return ShadowMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpriteMaterial", function() { return SpriteMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RawShaderMaterial", function() { return RawShaderMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShaderMaterial", function() { return ShaderMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointsMaterial", function() { return PointsMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshPhysicalMaterial", function() { return MeshPhysicalMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshStandardMaterial", function() { return MeshStandardMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshPhongMaterial", function() { return MeshPhongMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshToonMaterial", function() { return MeshToonMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshNormalMaterial", function() { return MeshNormalMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshLambertMaterial", function() { return MeshLambertMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshDepthMaterial", function() { return MeshDepthMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshDistanceMaterial", function() { return MeshDistanceMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshBasicMaterial", function() { return MeshBasicMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineDashedMaterial", function() { return LineDashedMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineBasicMaterial", function() { return LineBasicMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Material", function() { return Material; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float64BufferAttribute", function() { return Float64BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float32BufferAttribute", function() { return Float32BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint32BufferAttribute", function() { return Uint32BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int32BufferAttribute", function() { return Int32BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint16BufferAttribute", function() { return Uint16BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int16BufferAttribute", function() { return Int16BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8ClampedBufferAttribute", function() { return Uint8ClampedBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8BufferAttribute", function() { return Uint8BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int8BufferAttribute", function() { return Int8BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BufferAttribute", function() { return BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "REVISION", function() { return REVISION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MOUSE", function() { return MOUSE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceNone", function() { return CullFaceNone; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceBack", function() { return CullFaceBack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceFront", function() { return CullFaceFront; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceFrontBack", function() { return CullFaceFrontBack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrontFaceDirectionCW", function() { return FrontFaceDirectionCW; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrontFaceDirectionCCW", function() { return FrontFaceDirectionCCW; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BasicShadowMap", function() { return BasicShadowMap; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PCFShadowMap", function() { return PCFShadowMap; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PCFSoftShadowMap", function() { return PCFSoftShadowMap; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrontSide", function() { return FrontSide; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BackSide", function() { return BackSide; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DoubleSide", function() { return DoubleSide; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FlatShading", function() { return FlatShading; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SmoothShading", function() { return SmoothShading; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoColors", function() { return NoColors; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaceColors", function() { return FaceColors; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VertexColors", function() { return VertexColors; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoBlending", function() { return NoBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NormalBlending", function() { return NormalBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdditiveBlending", function() { return AdditiveBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubtractiveBlending", function() { return SubtractiveBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiplyBlending", function() { return MultiplyBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CustomBlending", function() { return CustomBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddEquation", function() { return AddEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubtractEquation", function() { return SubtractEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReverseSubtractEquation", function() { return ReverseSubtractEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MinEquation", function() { return MinEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MaxEquation", function() { return MaxEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZeroFactor", function() { return ZeroFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneFactor", function() { return OneFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SrcColorFactor", function() { return SrcColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusSrcColorFactor", function() { return OneMinusSrcColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SrcAlphaFactor", function() { return SrcAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusSrcAlphaFactor", function() { return OneMinusSrcAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DstAlphaFactor", function() { return DstAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusDstAlphaFactor", function() { return OneMinusDstAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DstColorFactor", function() { return DstColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusDstColorFactor", function() { return OneMinusDstColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SrcAlphaSaturateFactor", function() { return SrcAlphaSaturateFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NeverDepth", function() { return NeverDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlwaysDepth", function() { return AlwaysDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LessDepth", function() { return LessDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LessEqualDepth", function() { return LessEqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EqualDepth", function() { return EqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GreaterEqualDepth", function() { return GreaterEqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GreaterDepth", function() { return GreaterDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotEqualDepth", function() { return NotEqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiplyOperation", function() { return MultiplyOperation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MixOperation", function() { return MixOperation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddOperation", function() { return AddOperation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoToneMapping", function() { return NoToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearToneMapping", function() { return LinearToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReinhardToneMapping", function() { return ReinhardToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uncharted2ToneMapping", function() { return Uncharted2ToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CineonToneMapping", function() { return CineonToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UVMapping", function() { return UVMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeReflectionMapping", function() { return CubeReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeRefractionMapping", function() { return CubeRefractionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EquirectangularReflectionMapping", function() { return EquirectangularReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EquirectangularRefractionMapping", function() { return EquirectangularRefractionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SphericalReflectionMapping", function() { return SphericalReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeUVReflectionMapping", function() { return CubeUVReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeUVRefractionMapping", function() { return CubeUVRefractionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RepeatWrapping", function() { return RepeatWrapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClampToEdgeWrapping", function() { return ClampToEdgeWrapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MirroredRepeatWrapping", function() { return MirroredRepeatWrapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NearestFilter", function() { return NearestFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NearestMipMapNearestFilter", function() { return NearestMipMapNearestFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NearestMipMapLinearFilter", function() { return NearestMipMapLinearFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearFilter", function() { return LinearFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearMipMapNearestFilter", function() { return LinearMipMapNearestFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearMipMapLinearFilter", function() { return LinearMipMapLinearFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedByteType", function() { return UnsignedByteType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByteType", function() { return ByteType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShortType", function() { return ShortType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShortType", function() { return UnsignedShortType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IntType", function() { return IntType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedIntType", function() { return UnsignedIntType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FloatType", function() { return FloatType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HalfFloatType", function() { return HalfFloatType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShort4444Type", function() { return UnsignedShort4444Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShort5551Type", function() { return UnsignedShort5551Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShort565Type", function() { return UnsignedShort565Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedInt248Type", function() { return UnsignedInt248Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlphaFormat", function() { return AlphaFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBFormat", function() { return RGBFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBAFormat", function() { return RGBAFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LuminanceFormat", function() { return LuminanceFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LuminanceAlphaFormat", function() { return LuminanceAlphaFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBEFormat", function() { return RGBEFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DepthFormat", function() { return DepthFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DepthStencilFormat", function() { return DepthStencilFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_S3TC_DXT1_Format", function() { return RGB_S3TC_DXT1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_S3TC_DXT1_Format", function() { return RGBA_S3TC_DXT1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_S3TC_DXT3_Format", function() { return RGBA_S3TC_DXT3_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_S3TC_DXT5_Format", function() { return RGBA_S3TC_DXT5_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_PVRTC_4BPPV1_Format", function() { return RGB_PVRTC_4BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_PVRTC_2BPPV1_Format", function() { return RGB_PVRTC_2BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_PVRTC_4BPPV1_Format", function() { return RGBA_PVRTC_4BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_PVRTC_2BPPV1_Format", function() { return RGBA_PVRTC_2BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_ETC1_Format", function() { return RGB_ETC1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoopOnce", function() { return LoopOnce; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoopRepeat", function() { return LoopRepeat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoopPingPong", function() { return LoopPingPong; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterpolateDiscrete", function() { return InterpolateDiscrete; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterpolateLinear", function() { return InterpolateLinear; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterpolateSmooth", function() { return InterpolateSmooth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZeroCurvatureEnding", function() { return ZeroCurvatureEnding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZeroSlopeEnding", function() { return ZeroSlopeEnding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WrapAroundEnding", function() { return WrapAroundEnding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TrianglesDrawMode", function() { return TrianglesDrawMode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TriangleStripDrawMode", function() { return TriangleStripDrawMode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TriangleFanDrawMode", function() { return TriangleFanDrawMode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearEncoding", function() { return LinearEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sRGBEncoding", function() { return sRGBEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GammaEncoding", function() { return GammaEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBEEncoding", function() { return RGBEEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LogLuvEncoding", function() { return LogLuvEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBM7Encoding", function() { return RGBM7Encoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBM16Encoding", function() { return RGBM16Encoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBDEncoding", function() { return RGBDEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BasicDepthPacking", function() { return BasicDepthPacking; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBADepthPacking", function() { return RGBADepthPacking; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeGeometry", function() { return BoxGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Face4", function() { return Face4; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineStrip", function() { return LineStrip; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinePieces", function() { return LinePieces; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshFaceMaterial", function() { return MeshFaceMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiMaterial", function() { return MultiMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointCloud", function() { return PointCloud; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Particle", function() { return Particle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParticleSystem", function() { return ParticleSystem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointCloudMaterial", function() { return PointCloudMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParticleBasicMaterial", function() { return ParticleBasicMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParticleSystemMaterial", function() { return ParticleSystemMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vertex", function() { return Vertex; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicBufferAttribute", function() { return DynamicBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int8Attribute", function() { return Int8Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8Attribute", function() { return Uint8Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8ClampedAttribute", function() { return Uint8ClampedAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int16Attribute", function() { return Int16Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint16Attribute", function() { return Uint16Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int32Attribute", function() { return Int32Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint32Attribute", function() { return Uint32Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float32Attribute", function() { return Float32Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float64Attribute", function() { return Float64Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClosedSplineCurve3", function() { return ClosedSplineCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplineCurve3", function() { return SplineCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Spline", function() { return Spline; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoundingBoxHelper", function() { return BoundingBoxHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EdgesHelper", function() { return EdgesHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WireframeHelper", function() { return WireframeHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "XHRLoader", function() { return XHRLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BinaryTextureLoader", function() { return BinaryTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GeometryUtils", function() { return GeometryUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImageUtils", function() { return ImageUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Projector", function() { return Projector; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CanvasRenderer", function() { return CanvasRenderer; }); +// Polyfills + +if ( Number.EPSILON === undefined ) { + + Number.EPSILON = Math.pow( 2, - 52 ); + +} + +if ( Number.isInteger === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger + + Number.isInteger = function ( value ) { + + return typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value; + + }; + +} + +// + +if ( Math.sign === undefined ) { + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign + + Math.sign = function ( x ) { + + return ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x; + + }; + +} + +if ( Function.prototype.name === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + + Object.defineProperty( Function.prototype, 'name', { + + get: function () { + + return this.toString().match( /^\s*function\s*([^\(\s]*)/ )[ 1 ]; + + } + + } ); + +} + +if ( Object.assign === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + + ( function () { + + Object.assign = function ( target ) { + + 'use strict'; + + if ( target === undefined || target === null ) { + + throw new TypeError( 'Cannot convert undefined or null to object' ); + + } + + var output = Object( target ); + + for ( var index = 1; index < arguments.length; index ++ ) { + + var source = arguments[ index ]; + + if ( source !== undefined && source !== null ) { + + for ( var nextKey in source ) { + + if ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) { + + output[ nextKey ] = source[ nextKey ]; + + } + + } + + } + + } + + return output; + + }; + + } )(); + +} + +/** + * https://github.com/mrdoob/eventdispatcher.js/ + */ + +function EventDispatcher() {} + +Object.assign( EventDispatcher.prototype, { + + addEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) this._listeners = {}; + + var listeners = this._listeners; + + if ( listeners[ type ] === undefined ) { + + listeners[ type ] = []; + + } + + if ( listeners[ type ].indexOf( listener ) === - 1 ) { + + listeners[ type ].push( listener ); + + } + + }, + + hasEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return false; + + var listeners = this._listeners; + + return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; + + }, + + removeEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return; + + var listeners = this._listeners; + var listenerArray = listeners[ type ]; + + if ( listenerArray !== undefined ) { + + var index = listenerArray.indexOf( listener ); + + if ( index !== - 1 ) { + + listenerArray.splice( index, 1 ); + + } + + } + + }, + + dispatchEvent: function ( event ) { + + if ( this._listeners === undefined ) return; + + var listeners = this._listeners; + var listenerArray = listeners[ event.type ]; + + if ( listenerArray !== undefined ) { + + event.target = this; + + var array = listenerArray.slice( 0 ); + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + array[ i ].call( this, event ); + + } + + } + + } + +} ); + +var REVISION = '87'; +var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 }; +var CullFaceNone = 0; +var CullFaceBack = 1; +var CullFaceFront = 2; +var CullFaceFrontBack = 3; +var FrontFaceDirectionCW = 0; +var FrontFaceDirectionCCW = 1; +var BasicShadowMap = 0; +var PCFShadowMap = 1; +var PCFSoftShadowMap = 2; +var FrontSide = 0; +var BackSide = 1; +var DoubleSide = 2; +var FlatShading = 1; +var SmoothShading = 2; +var NoColors = 0; +var FaceColors = 1; +var VertexColors = 2; +var NoBlending = 0; +var NormalBlending = 1; +var AdditiveBlending = 2; +var SubtractiveBlending = 3; +var MultiplyBlending = 4; +var CustomBlending = 5; +var AddEquation = 100; +var SubtractEquation = 101; +var ReverseSubtractEquation = 102; +var MinEquation = 103; +var MaxEquation = 104; +var ZeroFactor = 200; +var OneFactor = 201; +var SrcColorFactor = 202; +var OneMinusSrcColorFactor = 203; +var SrcAlphaFactor = 204; +var OneMinusSrcAlphaFactor = 205; +var DstAlphaFactor = 206; +var OneMinusDstAlphaFactor = 207; +var DstColorFactor = 208; +var OneMinusDstColorFactor = 209; +var SrcAlphaSaturateFactor = 210; +var NeverDepth = 0; +var AlwaysDepth = 1; +var LessDepth = 2; +var LessEqualDepth = 3; +var EqualDepth = 4; +var GreaterEqualDepth = 5; +var GreaterDepth = 6; +var NotEqualDepth = 7; +var MultiplyOperation = 0; +var MixOperation = 1; +var AddOperation = 2; +var NoToneMapping = 0; +var LinearToneMapping = 1; +var ReinhardToneMapping = 2; +var Uncharted2ToneMapping = 3; +var CineonToneMapping = 4; +var UVMapping = 300; +var CubeReflectionMapping = 301; +var CubeRefractionMapping = 302; +var EquirectangularReflectionMapping = 303; +var EquirectangularRefractionMapping = 304; +var SphericalReflectionMapping = 305; +var CubeUVReflectionMapping = 306; +var CubeUVRefractionMapping = 307; +var RepeatWrapping = 1000; +var ClampToEdgeWrapping = 1001; +var MirroredRepeatWrapping = 1002; +var NearestFilter = 1003; +var NearestMipMapNearestFilter = 1004; +var NearestMipMapLinearFilter = 1005; +var LinearFilter = 1006; +var LinearMipMapNearestFilter = 1007; +var LinearMipMapLinearFilter = 1008; +var UnsignedByteType = 1009; +var ByteType = 1010; +var ShortType = 1011; +var UnsignedShortType = 1012; +var IntType = 1013; +var UnsignedIntType = 1014; +var FloatType = 1015; +var HalfFloatType = 1016; +var UnsignedShort4444Type = 1017; +var UnsignedShort5551Type = 1018; +var UnsignedShort565Type = 1019; +var UnsignedInt248Type = 1020; +var AlphaFormat = 1021; +var RGBFormat = 1022; +var RGBAFormat = 1023; +var LuminanceFormat = 1024; +var LuminanceAlphaFormat = 1025; +var RGBEFormat = RGBAFormat; +var DepthFormat = 1026; +var DepthStencilFormat = 1027; +var RGB_S3TC_DXT1_Format = 2001; +var RGBA_S3TC_DXT1_Format = 2002; +var RGBA_S3TC_DXT3_Format = 2003; +var RGBA_S3TC_DXT5_Format = 2004; +var RGB_PVRTC_4BPPV1_Format = 2100; +var RGB_PVRTC_2BPPV1_Format = 2101; +var RGBA_PVRTC_4BPPV1_Format = 2102; +var RGBA_PVRTC_2BPPV1_Format = 2103; +var RGB_ETC1_Format = 2151; +var LoopOnce = 2200; +var LoopRepeat = 2201; +var LoopPingPong = 2202; +var InterpolateDiscrete = 2300; +var InterpolateLinear = 2301; +var InterpolateSmooth = 2302; +var ZeroCurvatureEnding = 2400; +var ZeroSlopeEnding = 2401; +var WrapAroundEnding = 2402; +var TrianglesDrawMode = 0; +var TriangleStripDrawMode = 1; +var TriangleFanDrawMode = 2; +var LinearEncoding = 3000; +var sRGBEncoding = 3001; +var GammaEncoding = 3007; +var RGBEEncoding = 3002; +var LogLuvEncoding = 3003; +var RGBM7Encoding = 3004; +var RGBM16Encoding = 3005; +var RGBDEncoding = 3006; +var BasicDepthPacking = 3200; +var RGBADepthPacking = 3201; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +var _Math = { + + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + + generateUUID: function () { + + // http://www.broofa.com/Tools/Math.uuid.htm + + var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' ); + var uuid = new Array( 36 ); + var rnd = 0, r; + + return function generateUUID() { + + for ( var i = 0; i < 36; i ++ ) { + + if ( i === 8 || i === 13 || i === 18 || i === 23 ) { + + uuid[ i ] = '-'; + + } else if ( i === 14 ) { + + uuid[ i ] = '4'; + + } else { + + if ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0; + r = rnd & 0xf; + rnd = rnd >> 4; + uuid[ i ] = chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ]; + + } + + } + + return uuid.join( '' ); + + }; + + }(), + + clamp: function ( value, min, max ) { + + return Math.max( min, Math.min( max, value ) ); + + }, + + // compute euclidian modulo of m % n + // https://en.wikipedia.org/wiki/Modulo_operation + + euclideanModulo: function ( n, m ) { + + return ( ( n % m ) + m ) % m; + + }, + + // Linear mapping from range to range + + mapLinear: function ( x, a1, a2, b1, b2 ) { + + return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); + + }, + + // https://en.wikipedia.org/wiki/Linear_interpolation + + lerp: function ( x, y, t ) { + + return ( 1 - t ) * x + t * y; + + }, + + // http://en.wikipedia.org/wiki/Smoothstep + + smoothstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * ( 3 - 2 * x ); + + }, + + smootherstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); + + }, + + // Random integer from interval + + randInt: function ( low, high ) { + + return low + Math.floor( Math.random() * ( high - low + 1 ) ); + + }, + + // Random float from interval + + randFloat: function ( low, high ) { + + return low + Math.random() * ( high - low ); + + }, + + // Random float from <-range/2, range/2> interval + + randFloatSpread: function ( range ) { + + return range * ( 0.5 - Math.random() ); + + }, + + degToRad: function ( degrees ) { + + return degrees * _Math.DEG2RAD; + + }, + + radToDeg: function ( radians ) { + + return radians * _Math.RAD2DEG; + + }, + + isPowerOfTwo: function ( value ) { + + return ( value & ( value - 1 ) ) === 0 && value !== 0; + + }, + + nearestPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.round( Math.log( value ) / Math.LN2 ) ); + + }, + + nextPowerOfTwo: function ( value ) { + + value --; + value |= value >> 1; + value |= value >> 2; + value |= value >> 4; + value |= value >> 8; + value |= value >> 16; + value ++; + + return value; + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author philogb / http://blog.thejit.org/ + * @author egraether / http://egraether.com/ + * @author zz85 / http://www.lab4games.net/zz85/blog + */ + +function Vector2( x, y ) { + + this.x = x || 0; + this.y = y || 0; + +} + +Object.defineProperties( Vector2.prototype, { + + "width" : { + + get: function () { + + return this.x; + + }, + + set: function ( value ) { + + this.x = value; + + } + + }, + + "height" : { + + get: function () { + + return this.y; + + }, + + set: function ( value ) { + + this.y = value; + + } + + } + +} ); + +Object.assign( Vector2.prototype, { + + isVector2: true, + + set: function ( x, y ) { + + this.x = x; + this.y = y; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + + return this; + + }, + + multiply: function ( v ) { + + this.x *= v.x; + this.y *= v.y; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + + return this; + + }, + + divide: function ( v ) { + + this.x /= v.x; + this.y /= v.y; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + + return this; + + }, + + clampScalar: function () { + + var min = new Vector2(); + var max = new Vector2(); + + return function clampScalar( minVal, maxVal ) { + + min.set( minVal, minVal ); + max.set( maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y; + + }, + + lengthSq: function () { + + return this.x * this.x + this.y * this.y; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + }, + + lengthManhattan: function() { + + return Math.abs( this.x ) + Math.abs( this.y ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + angle: function () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + }, + + distanceTo: function ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }, + + distanceToSquared: function ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y; + return dx * dx + dy * dy; + + }, + + distanceToManhattan: function ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + + return this; + + }, + + rotateAround: function ( center, angle ) { + + var c = Math.cos( angle ), s = Math.sin( angle ); + + var x = this.x - center.x; + var y = this.y - center.y; + + this.x = x * c - y * s + center.x; + this.y = x * s + y * c + center.y; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author szimek / https://github.com/szimek/ + */ + +var textureId = 0; + +function Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + Object.defineProperty( this, 'id', { value: textureId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + + this.image = image !== undefined ? image : Texture.DEFAULT_IMAGE; + this.mipmaps = []; + + this.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING; + + this.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping; + this.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping; + + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + this.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter; + + this.anisotropy = anisotropy !== undefined ? anisotropy : 1; + + this.format = format !== undefined ? format : RGBAFormat; + this.type = type !== undefined ? type : UnsignedByteType; + + this.offset = new Vector2( 0, 0 ); + this.repeat = new Vector2( 1, 1 ); + + this.generateMipmaps = true; + this.premultiplyAlpha = false; + this.flipY = true; + this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) + + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. + // + // Also changing the encoding after already used by a Material will not automatically make the Material + // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. + this.encoding = encoding !== undefined ? encoding : LinearEncoding; + + this.version = 0; + this.onUpdate = null; + +} + +Texture.DEFAULT_IMAGE = undefined; +Texture.DEFAULT_MAPPING = UVMapping; + +Object.defineProperty( Texture.prototype, "needsUpdate", { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( Texture.prototype, EventDispatcher.prototype, { + + constructor: Texture, + + isTexture: true, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.image = source.image; + this.mipmaps = source.mipmaps.slice( 0 ); + + this.mapping = source.mapping; + + this.wrapS = source.wrapS; + this.wrapT = source.wrapT; + + this.magFilter = source.magFilter; + this.minFilter = source.minFilter; + + this.anisotropy = source.anisotropy; + + this.format = source.format; + this.type = source.type; + + this.offset.copy( source.offset ); + this.repeat.copy( source.repeat ); + + this.generateMipmaps = source.generateMipmaps; + this.premultiplyAlpha = source.premultiplyAlpha; + this.flipY = source.flipY; + this.unpackAlignment = source.unpackAlignment; + this.encoding = source.encoding; + + return this; + + }, + + toJSON: function ( meta ) { + + if ( meta.textures[ this.uuid ] !== undefined ) { + + return meta.textures[ this.uuid ]; + + } + + function getDataURL( image ) { + + var canvas; + + if ( image instanceof HTMLCanvasElement ) { + + canvas = image; + + } else { + + canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = image.width; + canvas.height = image.height; + + var context = canvas.getContext( '2d' ); + + if ( image instanceof ImageData ) { + + context.putImageData( image, 0, 0 ); + + } else { + + context.drawImage( image, 0, 0, image.width, image.height ); + + } + + } + + if ( canvas.width > 2048 || canvas.height > 2048 ) { + + return canvas.toDataURL( 'image/jpeg', 0.6 ); + + } else { + + return canvas.toDataURL( 'image/png' ); + + } + + } + + var output = { + metadata: { + version: 4.5, + type: 'Texture', + generator: 'Texture.toJSON' + }, + + uuid: this.uuid, + name: this.name, + + mapping: this.mapping, + + repeat: [ this.repeat.x, this.repeat.y ], + offset: [ this.offset.x, this.offset.y ], + wrap: [ this.wrapS, this.wrapT ], + + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + + flipY: this.flipY + }; + + if ( this.image !== undefined ) { + + // TODO: Move to THREE.Image + + var image = this.image; + + if ( image.uuid === undefined ) { + + image.uuid = _Math.generateUUID(); // UGH + + } + + if ( meta.images[ image.uuid ] === undefined ) { + + meta.images[ image.uuid ] = { + uuid: image.uuid, + url: getDataURL( image ) + }; + + } + + output.image = image.uuid; + + } + + meta.textures[ this.uuid ] = output; + + return output; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + }, + + transformUv: function ( uv ) { + + if ( this.mapping !== UVMapping ) return; + + uv.multiply( this.repeat ); + uv.add( this.offset ); + + if ( uv.x < 0 || uv.x > 1 ) { + + switch ( this.wrapS ) { + + case RepeatWrapping: + + uv.x = uv.x - Math.floor( uv.x ); + break; + + case ClampToEdgeWrapping: + + uv.x = uv.x < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { + + uv.x = Math.ceil( uv.x ) - uv.x; + + } else { + + uv.x = uv.x - Math.floor( uv.x ); + + } + break; + + } + + } + + if ( uv.y < 0 || uv.y > 1 ) { + + switch ( this.wrapT ) { + + case RepeatWrapping: + + uv.y = uv.y - Math.floor( uv.y ); + break; + + case ClampToEdgeWrapping: + + uv.y = uv.y < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { + + uv.y = Math.ceil( uv.y ) - uv.y; + + } else { + + uv.y = uv.y - Math.floor( uv.y ); + + } + break; + + } + + } + + if ( this.flipY ) { + + uv.y = 1 - uv.y; + + } + + } + +} ); + +/** + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author philogb / http://blog.thejit.org/ + * @author mikael emtinger / http://gomo.se/ + * @author egraether / http://egraether.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function Vector4( x, y, z, w ) { + + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + this.w = ( w !== undefined ) ? w : 1; + +} + +Object.assign( Vector4.prototype, { + + isVector4: true, + + set: function ( x, y, z, w ) { + + this.x = x; + this.y = y; + this.z = z; + this.w = w; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + this.w = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setZ: function ( z ) { + + this.z = z; + + return this; + + }, + + setW: function ( w ) { + + this.w = w; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + case 3: this.w = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + case 3: return this.w; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y, this.z, this.w ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + this.w = ( v.w !== undefined ) ? v.w : 1; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + this.w += v.w; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + this.z += s; + this.w += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + this.w = a.w + b.w; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + this.w += v.w * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + this.w -= v.w; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + this.w -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + this.w = a.w - b.w; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + this.w *= scalar; + + return this; + + }, + + applyMatrix4: function ( m ) { + + var x = this.x, y = this.y, z = this.z, w = this.w; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; + this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + setAxisAngleFromQuaternion: function ( q ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm + + // q is assumed to be normalized + + this.w = 2 * Math.acos( q.w ); + + var s = Math.sqrt( 1 - q.w * q.w ); + + if ( s < 0.0001 ) { + + this.x = 1; + this.y = 0; + this.z = 0; + + } else { + + this.x = q.x / s; + this.y = q.y / s; + this.z = q.z / s; + + } + + return this; + + }, + + setAxisAngleFromRotationMatrix: function ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var angle, x, y, z, // variables for result + epsilon = 0.01, // margin to allow for rounding errors + epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees + + te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + if ( ( Math.abs( m12 - m21 ) < epsilon ) && + ( Math.abs( m13 - m31 ) < epsilon ) && + ( Math.abs( m23 - m32 ) < epsilon ) ) { + + // singularity found + // first check for identity matrix which must have +1 for all terms + // in leading diagonal and zero in other terms + + if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && + ( Math.abs( m13 + m31 ) < epsilon2 ) && + ( Math.abs( m23 + m32 ) < epsilon2 ) && + ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { + + // this singularity is identity matrix so angle = 0 + + this.set( 1, 0, 0, 0 ); + + return this; // zero angle, arbitrary axis + + } + + // otherwise this singularity is angle = 180 + + angle = Math.PI; + + var xx = ( m11 + 1 ) / 2; + var yy = ( m22 + 1 ) / 2; + var zz = ( m33 + 1 ) / 2; + var xy = ( m12 + m21 ) / 4; + var xz = ( m13 + m31 ) / 4; + var yz = ( m23 + m32 ) / 4; + + if ( ( xx > yy ) && ( xx > zz ) ) { + + // m11 is the largest diagonal term + + if ( xx < epsilon ) { + + x = 0; + y = 0.707106781; + z = 0.707106781; + + } else { + + x = Math.sqrt( xx ); + y = xy / x; + z = xz / x; + + } + + } else if ( yy > zz ) { + + // m22 is the largest diagonal term + + if ( yy < epsilon ) { + + x = 0.707106781; + y = 0; + z = 0.707106781; + + } else { + + y = Math.sqrt( yy ); + x = xy / y; + z = yz / y; + + } + + } else { + + // m33 is the largest diagonal term so base result on this + + if ( zz < epsilon ) { + + x = 0.707106781; + y = 0.707106781; + z = 0; + + } else { + + z = Math.sqrt( zz ); + x = xz / z; + y = yz / z; + + } + + } + + this.set( x, y, z, angle ); + + return this; // return 180 deg rotation + + } + + // as we have reached here there are no singularities so we can handle normally + + var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + + ( m13 - m31 ) * ( m13 - m31 ) + + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize + + if ( Math.abs( s ) < 0.001 ) s = 1; + + // prevent divide by zero, should not happen if matrix is orthogonal and should be + // caught by singularity test above, but I've left it in just in case + + this.x = ( m32 - m23 ) / s; + this.y = ( m13 - m31 ) / s; + this.z = ( m21 - m12 ) / s; + this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); + + return this; + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + this.w = Math.min( this.w, v.w ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + this.w = Math.max( this.w, v.w ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + this.w = Math.max( min.w, Math.min( max.w, this.w ) ); + + return this; + + }, + + clampScalar: function () { + + var min, max; + + return function clampScalar( minVal, maxVal ) { + + if ( min === undefined ) { + + min = new Vector4(); + max = new Vector4(); + + } + + min.set( minVal, minVal, minVal, minVal ); + max.set( maxVal, maxVal, maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + this.w = Math.floor( this.w ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + this.w = Math.ceil( this.w ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + this.w = Math.round( this.w ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + this.w = - this.w; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; + + }, + + lengthSq: function () { + + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); + + }, + + lengthManhattan: function () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + this.w += ( v.w - this.w ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + this.w = array[ offset + 3 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + array[ offset + 3 ] = this.w; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + this.w = attribute.getW( index ); + + return this; + + } + +} ); + +/** + * @author szimek / https://github.com/szimek/ + * @author alteredq / http://alteredqualia.com/ + * @author Marius Kintel / https://github.com/kintel + */ + +/* + In options, we can specify: + * Texture parameters for an auto-generated target texture + * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers +*/ +function WebGLRenderTarget( width, height, options ) { + + this.uuid = _Math.generateUUID(); + + this.width = width; + this.height = height; + + this.scissor = new Vector4( 0, 0, width, height ); + this.scissorTest = false; + + this.viewport = new Vector4( 0, 0, width, height ); + + options = options || {}; + + if ( options.minFilter === undefined ) options.minFilter = LinearFilter; + + this.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; + this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true; + this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; + +} + +Object.assign( WebGLRenderTarget.prototype, EventDispatcher.prototype, { + + isWebGLRenderTarget: true, + + setSize: function ( width, height ) { + + if ( this.width !== width || this.height !== height ) { + + this.width = width; + this.height = height; + + this.dispose(); + + } + + this.viewport.set( 0, 0, width, height ); + this.scissor.set( 0, 0, width, height ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.width = source.width; + this.height = source.height; + + this.viewport.copy( source.viewport ); + + this.texture = source.texture.clone(); + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com + */ + +function WebGLRenderTargetCube( width, height, options ) { + + WebGLRenderTarget.call( this, width, height, options ); + + this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5 + this.activeMipMapLevel = 0; + +} + +WebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype ); +WebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube; + +WebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + */ + +function Quaternion( x, y, z, w ) { + + this._x = x || 0; + this._y = y || 0; + this._z = z || 0; + this._w = ( w !== undefined ) ? w : 1; + +} + +Object.assign( Quaternion, { + + slerp: function ( qa, qb, qm, t ) { + + return qm.copy( qa ).slerp( qb, t ); + + }, + + slerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { + + // fuzz-free, array-based Quaternion SLERP operation + + var x0 = src0[ srcOffset0 + 0 ], + y0 = src0[ srcOffset0 + 1 ], + z0 = src0[ srcOffset0 + 2 ], + w0 = src0[ srcOffset0 + 3 ], + + x1 = src1[ srcOffset1 + 0 ], + y1 = src1[ srcOffset1 + 1 ], + z1 = src1[ srcOffset1 + 2 ], + w1 = src1[ srcOffset1 + 3 ]; + + if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { + + var s = 1 - t, + + cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, + + dir = ( cos >= 0 ? 1 : - 1 ), + sqrSin = 1 - cos * cos; + + // Skip the Slerp for tiny steps to avoid numeric problems: + if ( sqrSin > Number.EPSILON ) { + + var sin = Math.sqrt( sqrSin ), + len = Math.atan2( sin, cos * dir ); + + s = Math.sin( s * len ) / sin; + t = Math.sin( t * len ) / sin; + + } + + var tDir = t * dir; + + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + + // Normalize in case we just did a lerp: + if ( s === 1 - t ) { + + var f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); + + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + + } + + } + + dst[ dstOffset ] = x0; + dst[ dstOffset + 1 ] = y0; + dst[ dstOffset + 2 ] = z0; + dst[ dstOffset + 3 ] = w0; + + } + +} ); + +Object.defineProperties( Quaternion.prototype, { + + x: { + + get: function () { + + return this._x; + + }, + + set: function ( value ) { + + this._x = value; + this.onChangeCallback(); + + } + + }, + + y: { + + get: function () { + + return this._y; + + }, + + set: function ( value ) { + + this._y = value; + this.onChangeCallback(); + + } + + }, + + z: { + + get: function () { + + return this._z; + + }, + + set: function ( value ) { + + this._z = value; + this.onChangeCallback(); + + } + + }, + + w: { + + get: function () { + + return this._w; + + }, + + set: function ( value ) { + + this._w = value; + this.onChangeCallback(); + + } + + } + +} ); + +Object.assign( Quaternion.prototype, { + + set: function ( x, y, z, w ) { + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + this.onChangeCallback(); + + return this; + + }, + + clone: function () { + + return new this.constructor( this._x, this._y, this._z, this._w ); + + }, + + copy: function ( quaternion ) { + + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + + this.onChangeCallback(); + + return this; + + }, + + setFromEuler: function ( euler, update ) { + + if ( ! ( euler && euler.isEuler ) ) { + + throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + var x = euler._x, y = euler._y, z = euler._z, order = euler.order; + + // http://www.mathworks.com/matlabcentral/fileexchange/ + // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ + // content/SpinCalc.m + + var cos = Math.cos; + var sin = Math.sin; + + var c1 = cos( x / 2 ); + var c2 = cos( y / 2 ); + var c3 = cos( z / 2 ); + + var s1 = sin( x / 2 ); + var s2 = sin( y / 2 ); + var s3 = sin( z / 2 ); + + if ( order === 'XYZ' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'YXZ' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } else if ( order === 'ZXY' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'ZYX' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } else if ( order === 'YZX' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'XZY' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } + + if ( update !== false ) this.onChangeCallback(); + + return this; + + }, + + setFromAxisAngle: function ( axis, angle ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm + + // assumes axis is normalized + + var halfAngle = angle / 2, s = Math.sin( halfAngle ); + + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos( halfAngle ); + + this.onChangeCallback(); + + return this; + + }, + + setFromRotationMatrix: function ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], + + trace = m11 + m22 + m33, + s; + + if ( trace > 0 ) { + + s = 0.5 / Math.sqrt( trace + 1.0 ); + + this._w = 0.25 / s; + this._x = ( m32 - m23 ) * s; + this._y = ( m13 - m31 ) * s; + this._z = ( m21 - m12 ) * s; + + } else if ( m11 > m22 && m11 > m33 ) { + + s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); + + this._w = ( m32 - m23 ) / s; + this._x = 0.25 * s; + this._y = ( m12 + m21 ) / s; + this._z = ( m13 + m31 ) / s; + + } else if ( m22 > m33 ) { + + s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); + + this._w = ( m13 - m31 ) / s; + this._x = ( m12 + m21 ) / s; + this._y = 0.25 * s; + this._z = ( m23 + m32 ) / s; + + } else { + + s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); + + this._w = ( m21 - m12 ) / s; + this._x = ( m13 + m31 ) / s; + this._y = ( m23 + m32 ) / s; + this._z = 0.25 * s; + + } + + this.onChangeCallback(); + + return this; + + }, + + setFromUnitVectors: function () { + + // assumes direction vectors vFrom and vTo are normalized + + var v1 = new Vector3(); + var r; + + var EPS = 0.000001; + + return function setFromUnitVectors( vFrom, vTo ) { + + if ( v1 === undefined ) v1 = new Vector3(); + + r = vFrom.dot( vTo ) + 1; + + if ( r < EPS ) { + + r = 0; + + if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { + + v1.set( - vFrom.y, vFrom.x, 0 ); + + } else { + + v1.set( 0, - vFrom.z, vFrom.y ); + + } + + } else { + + v1.crossVectors( vFrom, vTo ); + + } + + this._x = v1.x; + this._y = v1.y; + this._z = v1.z; + this._w = r; + + return this.normalize(); + + }; + + }(), + + inverse: function () { + + return this.conjugate().normalize(); + + }, + + conjugate: function () { + + this._x *= - 1; + this._y *= - 1; + this._z *= - 1; + + this.onChangeCallback(); + + return this; + + }, + + dot: function ( v ) { + + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + + }, + + lengthSq: function () { + + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + + }, + + length: function () { + + return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); + + }, + + normalize: function () { + + var l = this.length(); + + if ( l === 0 ) { + + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + + } else { + + l = 1 / l; + + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + + } + + this.onChangeCallback(); + + return this; + + }, + + multiply: function ( q, p ) { + + if ( p !== undefined ) { + + console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); + return this.multiplyQuaternions( q, p ); + + } + + return this.multiplyQuaternions( this, q ); + + }, + + premultiply: function ( q ) { + + return this.multiplyQuaternions( q, this ); + + }, + + multiplyQuaternions: function ( a, b ) { + + // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm + + var qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + var qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + + this.onChangeCallback(); + + return this; + + }, + + slerp: function ( qb, t ) { + + if ( t === 0 ) return this; + if ( t === 1 ) return this.copy( qb ); + + var x = this._x, y = this._y, z = this._z, w = this._w; + + // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ + + var cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; + + if ( cosHalfTheta < 0 ) { + + this._w = - qb._w; + this._x = - qb._x; + this._y = - qb._y; + this._z = - qb._z; + + cosHalfTheta = - cosHalfTheta; + + } else { + + this.copy( qb ); + + } + + if ( cosHalfTheta >= 1.0 ) { + + this._w = w; + this._x = x; + this._y = y; + this._z = z; + + return this; + + } + + var sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta ); + + if ( Math.abs( sinHalfTheta ) < 0.001 ) { + + this._w = 0.5 * ( w + this._w ); + this._x = 0.5 * ( x + this._x ); + this._y = 0.5 * ( y + this._y ); + this._z = 0.5 * ( z + this._z ); + + return this; + + } + + var halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); + var ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, + ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; + + this._w = ( w * ratioA + this._w * ratioB ); + this._x = ( x * ratioA + this._x * ratioB ); + this._y = ( y * ratioA + this._y * ratioB ); + this._z = ( z * ratioA + this._z * ratioB ); + + this.onChangeCallback(); + + return this; + + }, + + equals: function ( quaternion ) { + + return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this._x = array[ offset ]; + this._y = array[ offset + 1 ]; + this._z = array[ offset + 2 ]; + this._w = array[ offset + 3 ]; + + this.onChangeCallback(); + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._w; + + return array; + + }, + + onChange: function ( callback ) { + + this.onChangeCallback = callback; + + return this; + + }, + + onChangeCallback: function () {} + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author kile / http://kile.stravaganza.org/ + * @author philogb / http://blog.thejit.org/ + * @author mikael emtinger / http://gomo.se/ + * @author egraether / http://egraether.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function Vector3( x, y, z ) { + + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + +} + +Object.assign( Vector3.prototype, { + + isVector3: true, + + set: function ( x, y, z ) { + + this.x = x; + this.y = y; + this.z = z; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setZ: function ( z ) { + + this.z = z; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y, this.z ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + this.z += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + + return this; + + }, + + multiply: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); + return this.multiplyVectors( v, w ); + + } + + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + + return this; + + }, + + multiplyVectors: function ( a, b ) { + + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + + return this; + + }, + + applyEuler: function () { + + var quaternion = new Quaternion(); + + return function applyEuler( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + return this.applyQuaternion( quaternion.setFromEuler( euler ) ); + + }; + + }(), + + applyAxisAngle: function () { + + var quaternion = new Quaternion(); + + return function applyAxisAngle( axis, angle ) { + + return this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) ); + + }; + + }(), + + applyMatrix3: function ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; + this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; + + return this; + + }, + + applyMatrix4: function ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + var w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); + + this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w; + this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w; + this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w; + + return this; + + }, + + applyQuaternion: function ( q ) { + + var x = this.x, y = this.y, z = this.z; + var qx = q.x, qy = q.y, qz = q.z, qw = q.w; + + // calculate quat * vector + + var ix = qw * x + qy * z - qz * y; + var iy = qw * y + qz * x - qx * z; + var iz = qw * z + qx * y - qy * x; + var iw = - qx * x - qy * y - qz * z; + + // calculate result * inverse quat + + this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; + this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; + this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; + + return this; + + }, + + project: function () { + + var matrix = new Matrix4(); + + return function project( camera ) { + + matrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) ); + return this.applyMatrix4( matrix ); + + }; + + }(), + + unproject: function () { + + var matrix = new Matrix4(); + + return function unproject( camera ) { + + matrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) ); + return this.applyMatrix4( matrix ); + + }; + + }(), + + transformDirection: function ( m ) { + + // input: THREE.Matrix4 affine matrix + // vector interpreted as a direction + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; + + return this.normalize(); + + }, + + divide: function ( v ) { + + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + + return this; + + }, + + clampScalar: function () { + + var min = new Vector3(); + var max = new Vector3(); + + return function clampScalar( minVal, maxVal ) { + + min.set( minVal, minVal, minVal ); + max.set( maxVal, maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z; + + }, + + // TODO lengthSquared? + + lengthSq: function () { + + return this.x * this.x + this.y * this.y + this.z * this.z; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); + + }, + + lengthManhattan: function () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + cross: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); + return this.crossVectors( v, w ); + + } + + var x = this.x, y = this.y, z = this.z; + + this.x = y * v.z - z * v.y; + this.y = z * v.x - x * v.z; + this.z = x * v.y - y * v.x; + + return this; + + }, + + crossVectors: function ( a, b ) { + + var ax = a.x, ay = a.y, az = a.z; + var bx = b.x, by = b.y, bz = b.z; + + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + + return this; + + }, + + projectOnVector: function ( vector ) { + + var scalar = vector.dot( this ) / vector.lengthSq(); + + return this.copy( vector ).multiplyScalar( scalar ); + + }, + + projectOnPlane: function () { + + var v1 = new Vector3(); + + return function projectOnPlane( planeNormal ) { + + v1.copy( this ).projectOnVector( planeNormal ); + + return this.sub( v1 ); + + }; + + }(), + + reflect: function () { + + // reflect incident vector off plane orthogonal to normal + // normal is assumed to have unit length + + var v1 = new Vector3(); + + return function reflect( normal ) { + + return this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); + + }; + + }(), + + angleTo: function ( v ) { + + var theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) ); + + // clamp, to handle numerical problems + + return Math.acos( _Math.clamp( theta, - 1, 1 ) ); + + }, + + distanceTo: function ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }, + + distanceToSquared: function ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + + return dx * dx + dy * dy + dz * dz; + + }, + + distanceToManhattan: function ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); + + }, + + setFromSpherical: function ( s ) { + + var sinPhiRadius = Math.sin( s.phi ) * s.radius; + + this.x = sinPhiRadius * Math.sin( s.theta ); + this.y = Math.cos( s.phi ) * s.radius; + this.z = sinPhiRadius * Math.cos( s.theta ); + + return this; + + }, + + setFromCylindrical: function ( c ) { + + this.x = c.radius * Math.sin( c.theta ); + this.y = c.y; + this.z = c.radius * Math.cos( c.theta ); + + return this; + + }, + + setFromMatrixPosition: function ( m ) { + + var e = m.elements; + + this.x = e[ 12 ]; + this.y = e[ 13 ]; + this.z = e[ 14 ]; + + return this; + + }, + + setFromMatrixScale: function ( m ) { + + var sx = this.setFromMatrixColumn( m, 0 ).length(); + var sy = this.setFromMatrixColumn( m, 1 ).length(); + var sz = this.setFromMatrixColumn( m, 2 ).length(); + + this.x = sx; + this.y = sy; + this.z = sz; + + return this; + + }, + + setFromMatrixColumn: function ( m, index ) { + + return this.fromArray( m.elements, index * 4 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author philogb / http://blog.thejit.org/ + * @author jordi_ros / http://plattsoft.com + * @author D1plo1d / http://github.com/D1plo1d + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author timknip / http://www.floorplanner.com/ + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + */ + +function Matrix4() { + + this.elements = [ + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); + + } + +} + +Object.assign( Matrix4.prototype, { + + isMatrix4: true, + + set: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; + te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; + te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; + te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; + + return this; + + }, + + identity: function () { + + this.set( + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + clone: function () { + + return new Matrix4().fromArray( this.elements ); + + }, + + copy: function ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; + te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; + te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ]; + te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ]; + + return this; + + }, + + copyPosition: function ( m ) { + + var te = this.elements, me = m.elements; + + te[ 12 ] = me[ 12 ]; + te[ 13 ] = me[ 13 ]; + te[ 14 ] = me[ 14 ]; + + return this; + + }, + + extractBasis: function ( xAxis, yAxis, zAxis ) { + + xAxis.setFromMatrixColumn( this, 0 ); + yAxis.setFromMatrixColumn( this, 1 ); + zAxis.setFromMatrixColumn( this, 2 ); + + return this; + + }, + + makeBasis: function ( xAxis, yAxis, zAxis ) { + + this.set( + xAxis.x, yAxis.x, zAxis.x, 0, + xAxis.y, yAxis.y, zAxis.y, 0, + xAxis.z, yAxis.z, zAxis.z, 0, + 0, 0, 0, 1 + ); + + return this; + + }, + + extractRotation: function () { + + var v1 = new Vector3(); + + return function extractRotation( m ) { + + var te = this.elements; + var me = m.elements; + + var scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length(); + var scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length(); + var scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length(); + + te[ 0 ] = me[ 0 ] * scaleX; + te[ 1 ] = me[ 1 ] * scaleX; + te[ 2 ] = me[ 2 ] * scaleX; + + te[ 4 ] = me[ 4 ] * scaleY; + te[ 5 ] = me[ 5 ] * scaleY; + te[ 6 ] = me[ 6 ] * scaleY; + + te[ 8 ] = me[ 8 ] * scaleZ; + te[ 9 ] = me[ 9 ] * scaleZ; + te[ 10 ] = me[ 10 ] * scaleZ; + + return this; + + }; + + }(), + + makeRotationFromEuler: function ( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); + + } + + var te = this.elements; + + var x = euler.x, y = euler.y, z = euler.z; + var a = Math.cos( x ), b = Math.sin( x ); + var c = Math.cos( y ), d = Math.sin( y ); + var e = Math.cos( z ), f = Math.sin( z ); + + if ( euler.order === 'XYZ' ) { + + var ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = - c * f; + te[ 8 ] = d; + + te[ 1 ] = af + be * d; + te[ 5 ] = ae - bf * d; + te[ 9 ] = - b * c; + + te[ 2 ] = bf - ae * d; + te[ 6 ] = be + af * d; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YXZ' ) { + + var ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce + df * b; + te[ 4 ] = de * b - cf; + te[ 8 ] = a * d; + + te[ 1 ] = a * f; + te[ 5 ] = a * e; + te[ 9 ] = - b; + + te[ 2 ] = cf * b - de; + te[ 6 ] = df + ce * b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZXY' ) { + + var ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce - df * b; + te[ 4 ] = - a * f; + te[ 8 ] = de + cf * b; + + te[ 1 ] = cf + de * b; + te[ 5 ] = a * e; + te[ 9 ] = df - ce * b; + + te[ 2 ] = - a * d; + te[ 6 ] = b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZYX' ) { + + var ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = be * d - af; + te[ 8 ] = ae * d + bf; + + te[ 1 ] = c * f; + te[ 5 ] = bf * d + ae; + te[ 9 ] = af * d - be; + + te[ 2 ] = - d; + te[ 6 ] = b * c; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YZX' ) { + + var ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = bd - ac * f; + te[ 8 ] = bc * f + ad; + + te[ 1 ] = f; + te[ 5 ] = a * e; + te[ 9 ] = - b * e; + + te[ 2 ] = - d * e; + te[ 6 ] = ad * f + bc; + te[ 10 ] = ac - bd * f; + + } else if ( euler.order === 'XZY' ) { + + var ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = - f; + te[ 8 ] = d * e; + + te[ 1 ] = ac * f + bd; + te[ 5 ] = a * e; + te[ 9 ] = ad * f - bc; + + te[ 2 ] = bc * f - ad; + te[ 6 ] = b * e; + te[ 10 ] = bd * f + ac; + + } + + // last column + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // bottom row + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }, + + makeRotationFromQuaternion: function ( q ) { + + var te = this.elements; + + var x = q._x, y = q._y, z = q._z, w = q._w; + var x2 = x + x, y2 = y + y, z2 = z + z; + var xx = x * x2, xy = x * y2, xz = x * z2; + var yy = y * y2, yz = y * z2, zz = z * z2; + var wx = w * x2, wy = w * y2, wz = w * z2; + + te[ 0 ] = 1 - ( yy + zz ); + te[ 4 ] = xy - wz; + te[ 8 ] = xz + wy; + + te[ 1 ] = xy + wz; + te[ 5 ] = 1 - ( xx + zz ); + te[ 9 ] = yz - wx; + + te[ 2 ] = xz - wy; + te[ 6 ] = yz + wx; + te[ 10 ] = 1 - ( xx + yy ); + + // last column + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // bottom row + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }, + + lookAt: function () { + + var x = new Vector3(); + var y = new Vector3(); + var z = new Vector3(); + + return function lookAt( eye, target, up ) { + + var te = this.elements; + + z.subVectors( eye, target ); + + if ( z.lengthSq() === 0 ) { + + // eye and target are in the same position + + z.z = 1; + + } + + z.normalize(); + x.crossVectors( up, z ); + + if ( x.lengthSq() === 0 ) { + + // up and z are parallel + + if ( Math.abs( up.z ) === 1 ) { + + z.x += 0.0001; + + } else { + + z.z += 0.0001; + + } + + z.normalize(); + x.crossVectors( up, z ); + + } + + x.normalize(); + y.crossVectors( z, x ); + + te[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x; + te[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y; + te[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z; + + return this; + + }; + + }(), + + multiply: function ( m, n ) { + + if ( n !== undefined ) { + + console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); + return this.multiplyMatrices( m, n ); + + } + + return this.multiplyMatrices( this, m ); + + }, + + premultiply: function ( m ) { + + return this.multiplyMatrices( m, this ); + + }, + + multiplyMatrices: function ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; + var a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; + var a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; + var a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; + + var b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; + var b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; + var b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; + var b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + + te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + + return this; + + }, + + multiplyScalar: function ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; + te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; + te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; + te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; + + return this; + + }, + + applyToBufferAttribute: function () { + + var v1 = new Vector3(); + + return function applyToBufferAttribute( attribute ) { + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + v1.x = attribute.getX( i ); + v1.y = attribute.getY( i ); + v1.z = attribute.getZ( i ); + + v1.applyMatrix4( this ); + + attribute.setXYZ( i, v1.x, v1.y, v1.z ); + + } + + return attribute; + + }; + + }(), + + determinant: function () { + + var te = this.elements; + + var n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; + var n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; + var n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; + var n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; + + //TODO: make this more efficient + //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) + + return ( + n41 * ( + + n14 * n23 * n32 + - n13 * n24 * n32 + - n14 * n22 * n33 + + n12 * n24 * n33 + + n13 * n22 * n34 + - n12 * n23 * n34 + ) + + n42 * ( + + n11 * n23 * n34 + - n11 * n24 * n33 + + n14 * n21 * n33 + - n13 * n21 * n34 + + n13 * n24 * n31 + - n14 * n23 * n31 + ) + + n43 * ( + + n11 * n24 * n32 + - n11 * n22 * n34 + - n14 * n21 * n32 + + n12 * n21 * n34 + + n14 * n22 * n31 + - n12 * n24 * n31 + ) + + n44 * ( + - n13 * n22 * n31 + - n11 * n23 * n32 + + n11 * n22 * n33 + + n13 * n21 * n32 + - n12 * n21 * n33 + + n12 * n23 * n31 + ) + + ); + + }, + + transpose: function () { + + var te = this.elements; + var tmp; + + tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; + tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; + tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; + + tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; + tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; + tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; + + return this; + + }, + + setPosition: function ( v ) { + + var te = this.elements; + + te[ 12 ] = v.x; + te[ 13 ] = v.y; + te[ 14 ] = v.z; + + return this; + + }, + + getInverse: function ( m, throwOnDegenerate ) { + + // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + var te = this.elements, + me = m.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ], + n12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ], + n13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ], + n14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ], + + t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, + t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, + t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, + t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + + var det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + + if ( det === 0 ) { + + var msg = "THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0"; + + if ( throwOnDegenerate === true ) { + + throw new Error( msg ); + + } else { + + console.warn( msg ); + + } + + return this.identity(); + + } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; + te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; + te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; + + te[ 4 ] = t12 * detInv; + te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; + te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; + te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; + + te[ 8 ] = t13 * detInv; + te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; + te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; + te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; + + te[ 12 ] = t14 * detInv; + te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; + te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; + te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; + + return this; + + }, + + scale: function ( v ) { + + var te = this.elements; + var x = v.x, y = v.y, z = v.z; + + te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; + te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; + te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; + te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; + + return this; + + }, + + getMaxScaleOnAxis: function () { + + var te = this.elements; + + var scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; + var scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; + var scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; + + return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); + + }, + + makeTranslation: function ( x, y, z ) { + + this.set( + + 1, 0, 0, x, + 0, 1, 0, y, + 0, 0, 1, z, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationX: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + 1, 0, 0, 0, + 0, c, - s, 0, + 0, s, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationY: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationZ: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, - s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationAxis: function ( axis, angle ) { + + // Based on http://www.gamedev.net/reference/articles/article1199.asp + + var c = Math.cos( angle ); + var s = Math.sin( angle ); + var t = 1 - c; + var x = axis.x, y = axis.y, z = axis.z; + var tx = t * x, ty = t * y; + + this.set( + + tx * x + c, tx * y - s * z, tx * z + s * y, 0, + tx * y + s * z, ty * y + c, ty * z - s * x, 0, + tx * z - s * y, ty * z + s * x, t * z * z + c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeScale: function ( x, y, z ) { + + this.set( + + x, 0, 0, 0, + 0, y, 0, 0, + 0, 0, z, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeShear: function ( x, y, z ) { + + this.set( + + 1, y, z, 0, + x, 1, z, 0, + x, y, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + compose: function ( position, quaternion, scale ) { + + this.makeRotationFromQuaternion( quaternion ); + this.scale( scale ); + this.setPosition( position ); + + return this; + + }, + + decompose: function () { + + var vector = new Vector3(); + var matrix = new Matrix4(); + + return function decompose( position, quaternion, scale ) { + + var te = this.elements; + + var sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); + var sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); + var sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); + + // if determine is negative, we need to invert one scale + var det = this.determinant(); + if ( det < 0 ) sx = - sx; + + position.x = te[ 12 ]; + position.y = te[ 13 ]; + position.z = te[ 14 ]; + + // scale the rotation part + matrix.copy( this ); + + var invSX = 1 / sx; + var invSY = 1 / sy; + var invSZ = 1 / sz; + + matrix.elements[ 0 ] *= invSX; + matrix.elements[ 1 ] *= invSX; + matrix.elements[ 2 ] *= invSX; + + matrix.elements[ 4 ] *= invSY; + matrix.elements[ 5 ] *= invSY; + matrix.elements[ 6 ] *= invSY; + + matrix.elements[ 8 ] *= invSZ; + matrix.elements[ 9 ] *= invSZ; + matrix.elements[ 10 ] *= invSZ; + + quaternion.setFromRotationMatrix( matrix ); + + scale.x = sx; + scale.y = sy; + scale.z = sz; + + return this; + + }; + + }(), + + makePerspective: function ( left, right, top, bottom, near, far ) { + + if ( far === undefined ) { + + console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); + + } + + var te = this.elements; + var x = 2 * near / ( right - left ); + var y = 2 * near / ( top - bottom ); + + var a = ( right + left ) / ( right - left ); + var b = ( top + bottom ) / ( top - bottom ); + var c = - ( far + near ) / ( far - near ); + var d = - 2 * far * near / ( far - near ); + + te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0; + te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0; + + return this; + + }, + + makeOrthographic: function ( left, right, top, bottom, near, far ) { + + var te = this.elements; + var w = 1.0 / ( right - left ); + var h = 1.0 / ( top - bottom ); + var p = 1.0 / ( far - near ); + + var x = ( right + left ) * w; + var y = ( top + bottom ) * h; + var z = ( far + near ) * p; + + te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x; + te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = - 2 * p; te[ 14 ] = - z; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1; + + return this; + + }, + + equals: function ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 16; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + for ( var i = 0; i < 16; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + array[ offset + 3 ] = te[ 3 ]; + + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + + array[ offset + 8 ] = te[ 8 ]; + array[ offset + 9 ] = te[ 9 ]; + array[ offset + 10 ] = te[ 10 ]; + array[ offset + 11 ] = te[ 11 ]; + + array[ offset + 12 ] = te[ 12 ]; + array[ offset + 13 ] = te[ 13 ]; + array[ offset + 14 ] = te[ 14 ]; + array[ offset + 15 ] = te[ 15 ]; + + return array; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { data: data, width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + +} + +DataTexture.prototype = Object.create( Texture.prototype ); +DataTexture.prototype.constructor = DataTexture; + +DataTexture.prototype.isDataTexture = true; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + images = images !== undefined ? images : []; + mapping = mapping !== undefined ? mapping : CubeReflectionMapping; + + Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.flipY = false; + +} + +CubeTexture.prototype = Object.create( Texture.prototype ); +CubeTexture.prototype.constructor = CubeTexture; + +CubeTexture.prototype.isCubeTexture = true; + +Object.defineProperty( CubeTexture.prototype, 'images', { + + get: function () { + + return this.image; + + }, + + set: function ( value ) { + + this.image = value; + + } + +} ); + +/** + * @author tschw + * + * Uniforms of a program. + * Those form a tree structure with a special top-level container for the root, + * which you get by calling 'new WebGLUniforms( gl, program, renderer )'. + * + * + * Properties of inner nodes including the top-level container: + * + * .seq - array of nested uniforms + * .map - nested uniforms by name + * + * + * Methods of all nodes except the top-level container: + * + * .setValue( gl, value, [renderer] ) + * + * uploads a uniform value(s) + * the 'renderer' parameter is needed for sampler uniforms + * + * + * Static methods of the top-level container (renderer factorizations): + * + * .upload( gl, seq, values, renderer ) + * + * sets uniforms in 'seq' to 'values[id].value' + * + * .seqWithValue( seq, values ) : filteredSeq + * + * filters 'seq' entries with corresponding entry in values + * + * + * Methods of the top-level container (renderer factorizations): + * + * .setValue( gl, name, value ) + * + * sets uniform with name 'name' to 'value' + * + * .set( gl, obj, prop ) + * + * sets uniform from object and property with same name than uniform + * + * .setOptional( gl, obj, prop ) + * + * like .set for an optional property of the object + * + */ + +var emptyTexture = new Texture(); +var emptyCubeTexture = new CubeTexture(); + +// --- Base for inner nodes (including the root) --- + +function UniformContainer() { + + this.seq = []; + this.map = {}; + +} + +// --- Utilities --- + +// Array Caches (provide typed arrays for temporary by size) + +var arrayCacheF32 = []; +var arrayCacheI32 = []; + +// Float32Array caches used for uploading Matrix uniforms + +var mat4array = new Float32Array( 16 ); +var mat3array = new Float32Array( 9 ); + +// Flattening for arrays of vectors and matrices + +function flatten( array, nBlocks, blockSize ) { + + var firstElem = array[ 0 ]; + + if ( firstElem <= 0 || firstElem > 0 ) return array; + // unoptimized: ! isNaN( firstElem ) + // see http://jacksondunstan.com/articles/983 + + var n = nBlocks * blockSize, + r = arrayCacheF32[ n ]; + + if ( r === undefined ) { + + r = new Float32Array( n ); + arrayCacheF32[ n ] = r; + + } + + if ( nBlocks !== 0 ) { + + firstElem.toArray( r, 0 ); + + for ( var i = 1, offset = 0; i !== nBlocks; ++ i ) { + + offset += blockSize; + array[ i ].toArray( r, offset ); + + } + + } + + return r; + +} + +// Texture unit allocation + +function allocTexUnits( renderer, n ) { + + var r = arrayCacheI32[ n ]; + + if ( r === undefined ) { + + r = new Int32Array( n ); + arrayCacheI32[ n ] = r; + + } + + for ( var i = 0; i !== n; ++ i ) + r[ i ] = renderer.allocTextureUnit(); + + return r; + +} + +// --- Setters --- + +// Note: Defining these methods externally, because they come in a bunch +// and this way their names minify. + +// Single scalar + +function setValue1f( gl, v ) { gl.uniform1f( this.addr, v ); } +function setValue1i( gl, v ) { gl.uniform1i( this.addr, v ); } + +// Single float vector (from flat array or THREE.VectorN) + +function setValue2fv( gl, v ) { + + if ( v.x === undefined ) gl.uniform2fv( this.addr, v ); + else gl.uniform2f( this.addr, v.x, v.y ); + +} + +function setValue3fv( gl, v ) { + + if ( v.x !== undefined ) + gl.uniform3f( this.addr, v.x, v.y, v.z ); + else if ( v.r !== undefined ) + gl.uniform3f( this.addr, v.r, v.g, v.b ); + else + gl.uniform3fv( this.addr, v ); + +} + +function setValue4fv( gl, v ) { + + if ( v.x === undefined ) gl.uniform4fv( this.addr, v ); + else gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); + +} + +// Single matrix (from flat array or MatrixN) + +function setValue2fm( gl, v ) { + + gl.uniformMatrix2fv( this.addr, false, v.elements || v ); + +} + +function setValue3fm( gl, v ) { + + if ( v.elements === undefined ) { + + gl.uniformMatrix3fv( this.addr, false, v ); + + } else { + + mat3array.set( v.elements ); + gl.uniformMatrix3fv( this.addr, false, mat3array ); + + } + +} + +function setValue4fm( gl, v ) { + + if ( v.elements === undefined ) { + + gl.uniformMatrix4fv( this.addr, false, v ); + + } else { + + mat4array.set( v.elements ); + gl.uniformMatrix4fv( this.addr, false, mat4array ); + + } + +} + +// Single texture (2D / Cube) + +function setValueT1( gl, v, renderer ) { + + var unit = renderer.allocTextureUnit(); + gl.uniform1i( this.addr, unit ); + renderer.setTexture2D( v || emptyTexture, unit ); + +} + +function setValueT6( gl, v, renderer ) { + + var unit = renderer.allocTextureUnit(); + gl.uniform1i( this.addr, unit ); + renderer.setTextureCube( v || emptyCubeTexture, unit ); + +} + +// Integer / Boolean vectors or arrays thereof (always flat arrays) + +function setValue2iv( gl, v ) { gl.uniform2iv( this.addr, v ); } +function setValue3iv( gl, v ) { gl.uniform3iv( this.addr, v ); } +function setValue4iv( gl, v ) { gl.uniform4iv( this.addr, v ); } + +// Helper to pick the right setter for the singular case + +function getSingularSetter( type ) { + + switch ( type ) { + + case 0x1406: return setValue1f; // FLOAT + case 0x8b50: return setValue2fv; // _VEC2 + case 0x8b51: return setValue3fv; // _VEC3 + case 0x8b52: return setValue4fv; // _VEC4 + + case 0x8b5a: return setValue2fm; // _MAT2 + case 0x8b5b: return setValue3fm; // _MAT3 + case 0x8b5c: return setValue4fm; // _MAT4 + + case 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES + case 0x8b60: return setValueT6; // SAMPLER_CUBE + + case 0x1404: case 0x8b56: return setValue1i; // INT, BOOL + case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 + case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 + case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 + + } + +} + +// Array of scalars + +function setValue1fv( gl, v ) { gl.uniform1fv( this.addr, v ); } +function setValue1iv( gl, v ) { gl.uniform1iv( this.addr, v ); } + +// Array of vectors (flat or from THREE classes) + +function setValueV2a( gl, v ) { + + gl.uniform2fv( this.addr, flatten( v, this.size, 2 ) ); + +} + +function setValueV3a( gl, v ) { + + gl.uniform3fv( this.addr, flatten( v, this.size, 3 ) ); + +} + +function setValueV4a( gl, v ) { + + gl.uniform4fv( this.addr, flatten( v, this.size, 4 ) ); + +} + +// Array of matrices (flat or from THREE clases) + +function setValueM2a( gl, v ) { + + gl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) ); + +} + +function setValueM3a( gl, v ) { + + gl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) ); + +} + +function setValueM4a( gl, v ) { + + gl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) ); + +} + +// Array of textures (2D / Cube) + +function setValueT1a( gl, v, renderer ) { + + var n = v.length, + units = allocTexUnits( renderer, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + renderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] ); + + } + +} + +function setValueT6a( gl, v, renderer ) { + + var n = v.length, + units = allocTexUnits( renderer, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + renderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); + + } + +} + +// Helper to pick the right setter for a pure (bottom-level) array + +function getPureArraySetter( type ) { + + switch ( type ) { + + case 0x1406: return setValue1fv; // FLOAT + case 0x8b50: return setValueV2a; // _VEC2 + case 0x8b51: return setValueV3a; // _VEC3 + case 0x8b52: return setValueV4a; // _VEC4 + + case 0x8b5a: return setValueM2a; // _MAT2 + case 0x8b5b: return setValueM3a; // _MAT3 + case 0x8b5c: return setValueM4a; // _MAT4 + + case 0x8b5e: return setValueT1a; // SAMPLER_2D + case 0x8b60: return setValueT6a; // SAMPLER_CUBE + + case 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL + case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 + case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 + case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 + + } + +} + +// --- Uniform Classes --- + +function SingleUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.setValue = getSingularSetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +function PureArrayUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.size = activeInfo.size; + this.setValue = getPureArraySetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +function StructuredUniform( id ) { + + this.id = id; + + UniformContainer.call( this ); // mix-in + +} + +StructuredUniform.prototype.setValue = function ( gl, value ) { + + // Note: Don't need an extra 'renderer' parameter, since samplers + // are not allowed in structured uniforms. + + var seq = this.seq; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + u.setValue( gl, value[ u.id ] ); + + } + +}; + +// --- Top-level --- + +// Parser - builds up the property tree from the path strings + +var RePathPart = /([\w\d_]+)(\])?(\[|\.)?/g; + +// extracts +// - the identifier (member name or array index) +// - followed by an optional right bracket (found when array index) +// - followed by an optional left bracket or dot (type of subscript) +// +// Note: These portions can be read in a non-overlapping fashion and +// allow straightforward parsing of the hierarchy that WebGL encodes +// in the uniform names. + +function addUniform( container, uniformObject ) { + + container.seq.push( uniformObject ); + container.map[ uniformObject.id ] = uniformObject; + +} + +function parseUniform( activeInfo, addr, container ) { + + var path = activeInfo.name, + pathLength = path.length; + + // reset RegExp object, because of the early exit of a previous run + RePathPart.lastIndex = 0; + + for ( ; ; ) { + + var match = RePathPart.exec( path ), + matchEnd = RePathPart.lastIndex, + + id = match[ 1 ], + idIsIndex = match[ 2 ] === ']', + subscript = match[ 3 ]; + + if ( idIsIndex ) id = id | 0; // convert to integer + + if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { + + // bare name or "pure" bottom-level array "[0]" suffix + + addUniform( container, subscript === undefined ? + new SingleUniform( id, activeInfo, addr ) : + new PureArrayUniform( id, activeInfo, addr ) ); + + break; + + } else { + + // step into inner node / create it in case it doesn't exist + + var map = container.map, next = map[ id ]; + + if ( next === undefined ) { + + next = new StructuredUniform( id ); + addUniform( container, next ); + + } + + container = next; + + } + + } + +} + +// Root Container + +function WebGLUniforms( gl, program, renderer ) { + + UniformContainer.call( this ); + + this.renderer = renderer; + + var n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS ); + + for ( var i = 0; i < n; ++ i ) { + + var info = gl.getActiveUniform( program, i ), + path = info.name, + addr = gl.getUniformLocation( program, path ); + + parseUniform( info, addr, this ); + + } + +} + +WebGLUniforms.prototype.setValue = function ( gl, name, value ) { + + var u = this.map[ name ]; + + if ( u !== undefined ) u.setValue( gl, value, this.renderer ); + +}; + +WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { + + var v = object[ name ]; + + if ( v !== undefined ) this.setValue( gl, name, v ); + +}; + + +// Static interface + +WebGLUniforms.upload = function ( gl, seq, values, renderer ) { + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ], + v = values[ u.id ]; + + if ( v.needsUpdate !== false ) { + + // note: always updating when .needsUpdate is undefined + u.setValue( gl, v.value, renderer ); + + } + + } + +}; + +WebGLUniforms.seqWithValue = function ( seq, values ) { + + var r = []; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + if ( u.id in values ) r.push( u ); + + } + + return r; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, + 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, + 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, + 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, + 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, + 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, + 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, + 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, + 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, + 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, + 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, + 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, + 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, + 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, + 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, + 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, + 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, + 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, + 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, + 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, + 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, + 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, + 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, + 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; + +function Color( r, g, b ) { + + if ( g === undefined && b === undefined ) { + + // r is THREE.Color, hex or string + return this.set( r ); + + } + + return this.setRGB( r, g, b ); + +} + +Object.assign( Color.prototype, { + + isColor: true, + + r: 1, g: 1, b: 1, + + set: function ( value ) { + + if ( value && value.isColor ) { + + this.copy( value ); + + } else if ( typeof value === 'number' ) { + + this.setHex( value ); + + } else if ( typeof value === 'string' ) { + + this.setStyle( value ); + + } + + return this; + + }, + + setScalar: function ( scalar ) { + + this.r = scalar; + this.g = scalar; + this.b = scalar; + + return this; + + }, + + setHex: function ( hex ) { + + hex = Math.floor( hex ); + + this.r = ( hex >> 16 & 255 ) / 255; + this.g = ( hex >> 8 & 255 ) / 255; + this.b = ( hex & 255 ) / 255; + + return this; + + }, + + setRGB: function ( r, g, b ) { + + this.r = r; + this.g = g; + this.b = b; + + return this; + + }, + + setHSL: function () { + + function hue2rgb( p, q, t ) { + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + } + + return function setHSL( h, s, l ) { + + // h,s,l ranges are in 0.0 - 1.0 + h = _Math.euclideanModulo( h, 1 ); + s = _Math.clamp( s, 0, 1 ); + l = _Math.clamp( l, 0, 1 ); + + if ( s === 0 ) { + + this.r = this.g = this.b = l; + + } else { + + var p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); + var q = ( 2 * l ) - p; + + this.r = hue2rgb( q, p, h + 1 / 3 ); + this.g = hue2rgb( q, p, h ); + this.b = hue2rgb( q, p, h - 1 / 3 ); + + } + + return this; + + }; + + }(), + + setStyle: function ( style ) { + + function handleAlpha( string ) { + + if ( string === undefined ) return; + + if ( parseFloat( string ) < 1 ) { + + console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); + + } + + } + + + var m; + + if ( m = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { + + // rgb / hsl + + var color; + var name = m[ 1 ]; + var components = m[ 2 ]; + + switch ( name ) { + + case 'rgb': + case 'rgba': + + if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(255,0,0) rgba(255,0,0,0.5) + this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; + this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; + this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) + this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; + this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; + this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + break; + + case 'hsl': + case 'hsla': + + if ( color = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // hsl(120,50%,50%) hsla(120,50%,50%,0.5) + var h = parseFloat( color[ 1 ] ) / 360; + var s = parseInt( color[ 2 ], 10 ) / 100; + var l = parseInt( color[ 3 ], 10 ) / 100; + + handleAlpha( color[ 5 ] ); + + return this.setHSL( h, s, l ); + + } + + break; + + } + + } else if ( m = /^\#([A-Fa-f0-9]+)$/.exec( style ) ) { + + // hex color + + var hex = m[ 1 ]; + var size = hex.length; + + if ( size === 3 ) { + + // #ff0 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; + + return this; + + } else if ( size === 6 ) { + + // #ff0000 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; + + return this; + + } + + } + + if ( style && style.length > 0 ) { + + // color keywords + var hex = ColorKeywords[ style ]; + + if ( hex !== undefined ) { + + // red + this.setHex( hex ); + + } else { + + // unknown color + console.warn( 'THREE.Color: Unknown color ' + style ); + + } + + } + + return this; + + }, + + clone: function () { + + return new this.constructor( this.r, this.g, this.b ); + + }, + + copy: function ( color ) { + + this.r = color.r; + this.g = color.g; + this.b = color.b; + + return this; + + }, + + copyGammaToLinear: function ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) gammaFactor = 2.0; + + this.r = Math.pow( color.r, gammaFactor ); + this.g = Math.pow( color.g, gammaFactor ); + this.b = Math.pow( color.b, gammaFactor ); + + return this; + + }, + + copyLinearToGamma: function ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) gammaFactor = 2.0; + + var safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; + + this.r = Math.pow( color.r, safeInverse ); + this.g = Math.pow( color.g, safeInverse ); + this.b = Math.pow( color.b, safeInverse ); + + return this; + + }, + + convertGammaToLinear: function () { + + var r = this.r, g = this.g, b = this.b; + + this.r = r * r; + this.g = g * g; + this.b = b * b; + + return this; + + }, + + convertLinearToGamma: function () { + + this.r = Math.sqrt( this.r ); + this.g = Math.sqrt( this.g ); + this.b = Math.sqrt( this.b ); + + return this; + + }, + + getHex: function () { + + return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; + + }, + + getHexString: function () { + + return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); + + }, + + getHSL: function ( optionalTarget ) { + + // h,s,l ranges are in 0.0 - 1.0 + + var hsl = optionalTarget || { h: 0, s: 0, l: 0 }; + + var r = this.r, g = this.g, b = this.b; + + var max = Math.max( r, g, b ); + var min = Math.min( r, g, b ); + + var hue, saturation; + var lightness = ( min + max ) / 2.0; + + if ( min === max ) { + + hue = 0; + saturation = 0; + + } else { + + var delta = max - min; + + saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); + + switch ( max ) { + + case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; + case g: hue = ( b - r ) / delta + 2; break; + case b: hue = ( r - g ) / delta + 4; break; + + } + + hue /= 6; + + } + + hsl.h = hue; + hsl.s = saturation; + hsl.l = lightness; + + return hsl; + + }, + + getStyle: function () { + + return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + + }, + + offsetHSL: function ( h, s, l ) { + + var hsl = this.getHSL(); + + hsl.h += h; hsl.s += s; hsl.l += l; + + this.setHSL( hsl.h, hsl.s, hsl.l ); + + return this; + + }, + + add: function ( color ) { + + this.r += color.r; + this.g += color.g; + this.b += color.b; + + return this; + + }, + + addColors: function ( color1, color2 ) { + + this.r = color1.r + color2.r; + this.g = color1.g + color2.g; + this.b = color1.b + color2.b; + + return this; + + }, + + addScalar: function ( s ) { + + this.r += s; + this.g += s; + this.b += s; + + return this; + + }, + + sub: function( color ) { + + this.r = Math.max( 0, this.r - color.r ); + this.g = Math.max( 0, this.g - color.g ); + this.b = Math.max( 0, this.b - color.b ); + + return this; + + }, + + multiply: function ( color ) { + + this.r *= color.r; + this.g *= color.g; + this.b *= color.b; + + return this; + + }, + + multiplyScalar: function ( s ) { + + this.r *= s; + this.g *= s; + this.b *= s; + + return this; + + }, + + lerp: function ( color, alpha ) { + + this.r += ( color.r - this.r ) * alpha; + this.g += ( color.g - this.g ) * alpha; + this.b += ( color.b - this.b ) * alpha; + + return this; + + }, + + equals: function ( c ) { + + return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.r = array[ offset ]; + this.g = array[ offset + 1 ]; + this.b = array[ offset + 2 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.r; + array[ offset + 1 ] = this.g; + array[ offset + 2 ] = this.b; + + return array; + + }, + + toJSON: function () { + + return this.getHex(); + + } + +} ); + +/** + * Uniforms library for shared webgl shaders + */ + +var UniformsLib = { + + common: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + + map: { value: null }, + offsetRepeat: { value: new Vector4( 0, 0, 1, 1 ) }, + + alphaMap: { value: null }, + + }, + + specularmap: { + + specularMap: { value: null }, + + }, + + envmap: { + + envMap: { value: null }, + flipEnvMap: { value: - 1 }, + reflectivity: { value: 1.0 }, + refractionRatio: { value: 0.98 } + + }, + + aomap: { + + aoMap: { value: null }, + aoMapIntensity: { value: 1 } + + }, + + lightmap: { + + lightMap: { value: null }, + lightMapIntensity: { value: 1 } + + }, + + emissivemap: { + + emissiveMap: { value: null } + + }, + + bumpmap: { + + bumpMap: { value: null }, + bumpScale: { value: 1 } + + }, + + normalmap: { + + normalMap: { value: null }, + normalScale: { value: new Vector2( 1, 1 ) } + + }, + + displacementmap: { + + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + + }, + + roughnessmap: { + + roughnessMap: { value: null } + + }, + + metalnessmap: { + + metalnessMap: { value: null } + + }, + + gradientmap: { + + gradientMap: { value: null } + + }, + + fog: { + + fogDensity: { value: 0.00025 }, + fogNear: { value: 1 }, + fogFar: { value: 2000 }, + fogColor: { value: new Color( 0xffffff ) } + + }, + + lights: { + + ambientLightColor: { value: [] }, + + directionalLights: { value: [], properties: { + direction: {}, + color: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } } + + }, + + points: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + size: { value: 1.0 }, + scale: { value: 1.0 }, + map: { value: null }, + offsetRepeat: { value: new Vector4( 0, 0, 1, 1 ) } + + } + +}; + +/** + * Uniform Utilities + */ + +var UniformsUtils = { + + merge: function ( uniforms ) { + + var merged = {}; + + for ( var u = 0; u < uniforms.length; u ++ ) { + + var tmp = this.clone( uniforms[ u ] ); + + for ( var p in tmp ) { + + merged[ p ] = tmp[ p ]; + + } + + } + + return merged; + + }, + + clone: function ( uniforms_src ) { + + var uniforms_dst = {}; + + for ( var u in uniforms_src ) { + + uniforms_dst[ u ] = {}; + + for ( var p in uniforms_src[ u ] ) { + + var parameter_src = uniforms_src[ u ][ p ]; + + if ( parameter_src && ( parameter_src.isColor || + parameter_src.isMatrix3 || parameter_src.isMatrix4 || + parameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 || + parameter_src.isTexture ) ) { + + uniforms_dst[ u ][ p ] = parameter_src.clone(); + + } else if ( Array.isArray( parameter_src ) ) { + + uniforms_dst[ u ][ p ] = parameter_src.slice(); + + } else { + + uniforms_dst[ u ][ p ] = parameter_src; + + } + + } + + } + + return uniforms_dst; + + } + +}; + +var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n"; + +var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n"; + +var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n"; + +var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n"; + +var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; + +var begin_vertex = "\nvec3 transformed = vec3( position );\n"; + +var beginnormal_vertex = "\nvec3 objectNormal = vec3( normal );\n"; + +var bsdfs = "float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.86267 + (0.49788 + 0.01436 * y ) * y;\n\tfloat b = 3.45068 + (4.18814 + y) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = (x > 0.0) ? v : 0.5 * inversesqrt( 1.0 - x * x ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transpose( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tvec3 result = vec3( LTC_ClippedSphereFormFactor( vectorFormFactor ) );\n\treturn result;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n"; + +var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n"; + +var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n"; + +var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n"; + +var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n"; + +var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n"; + +var color_fragment = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; + +var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n"; + +var color_pars_vertex = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; + +var color_vertex = "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif"; + +var common = "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n"; + +var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n"; + +var defaultnormal_vertex = "vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n"; + +var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n"; + +var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n"; + +var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n"; + +var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n"; + +var encodings_fragment = " gl_FragColor = linearToOutputTexel( gl_FragColor );\n"; + +var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n"; + +var envmap_fragment = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n"; + +var envmap_pars_fragment = "#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n"; + +var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n"; + +var envmap_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n"; + +var fog_vertex = "\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif"; + +var fog_pars_vertex = "#ifdef USE_FOG\n varying float fogDepth;\n#endif\n"; + +var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n"; + +var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n"; + +var gradientmap_pars_fragment = "#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n"; + +var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n"; + +var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; + +var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n"; + +var lights_pars = "uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n"; + +var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n"; + +var lights_phong_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n"; + +var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n"; + +var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tfloat norm = texture2D( ltcMag, uv ).a;\n\t\tvec4 t = texture2D( ltcMat, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( 1, 0, t.y ),\n\t\t\tvec3( 0, t.z, 0 ),\n\t\t\tvec3( t.w, 0, t.x )\n\t\t);\n\t\treflectedLight.directSpecular += lightColor * material.specularColor * norm * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; + +var lights_template = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n"; + +var logdepthbuf_fragment = "#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif"; + +var logdepthbuf_pars_fragment = "#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n"; + +var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif"; + +var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n"; + +var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n"; + +var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n"; + +var map_particle_fragment = "#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n"; + +var map_particle_pars_fragment = "#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n"; + +var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n"; + +var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; + +var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n"; + +var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; + +var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n"; + +var normal_fragment = "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n"; + +var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n"; + +var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n"; + +var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n"; + +var project_vertex = "vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n"; + +var dithering_fragment = "#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n"; + +var dithering_pars_fragment = "#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n"; + +var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n"; + +var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; + +var shadowmap_pars_fragment = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n"; + +var shadowmap_pars_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n"; + +var shadowmap_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n"; + +var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n"; + +var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; + +var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n"; + +var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n"; + +var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n"; + +var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif"; + +var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; + +var tonemapping_fragment = "#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n"; + +var tonemapping_pars_fragment = "#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n"; + +var uv_pars_fragment = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif"; + +var uv_pars_vertex = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n"; + +var uv_vertex = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif"; + +var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; + +var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif"; + +var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif"; + +var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n"; + +var cube_frag = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n"; + +var cube_vert = "varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n"; + +var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n"; + +var depth_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var distanceRGBA_frag = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n"; + +var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}\n"; + +var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n"; + +var equirect_vert = "varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n"; + +var linedashed_frag = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n"; + +var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshbasic_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphysical_frag = "#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphysical_vert = "#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n"; + +var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n"; + +var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n"; + +var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var points_vert = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n}\n"; + +var shadow_vert = "#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var ShaderChunk = { + alphamap_fragment: alphamap_fragment, + alphamap_pars_fragment: alphamap_pars_fragment, + alphatest_fragment: alphatest_fragment, + aomap_fragment: aomap_fragment, + aomap_pars_fragment: aomap_pars_fragment, + begin_vertex: begin_vertex, + beginnormal_vertex: beginnormal_vertex, + bsdfs: bsdfs, + bumpmap_pars_fragment: bumpmap_pars_fragment, + clipping_planes_fragment: clipping_planes_fragment, + clipping_planes_pars_fragment: clipping_planes_pars_fragment, + clipping_planes_pars_vertex: clipping_planes_pars_vertex, + clipping_planes_vertex: clipping_planes_vertex, + color_fragment: color_fragment, + color_pars_fragment: color_pars_fragment, + color_pars_vertex: color_pars_vertex, + color_vertex: color_vertex, + common: common, + cube_uv_reflection_fragment: cube_uv_reflection_fragment, + defaultnormal_vertex: defaultnormal_vertex, + displacementmap_pars_vertex: displacementmap_pars_vertex, + displacementmap_vertex: displacementmap_vertex, + emissivemap_fragment: emissivemap_fragment, + emissivemap_pars_fragment: emissivemap_pars_fragment, + encodings_fragment: encodings_fragment, + encodings_pars_fragment: encodings_pars_fragment, + envmap_fragment: envmap_fragment, + envmap_pars_fragment: envmap_pars_fragment, + envmap_pars_vertex: envmap_pars_vertex, + envmap_vertex: envmap_vertex, + fog_vertex: fog_vertex, + fog_pars_vertex: fog_pars_vertex, + fog_fragment: fog_fragment, + fog_pars_fragment: fog_pars_fragment, + gradientmap_pars_fragment: gradientmap_pars_fragment, + lightmap_fragment: lightmap_fragment, + lightmap_pars_fragment: lightmap_pars_fragment, + lights_lambert_vertex: lights_lambert_vertex, + lights_pars: lights_pars, + lights_phong_fragment: lights_phong_fragment, + lights_phong_pars_fragment: lights_phong_pars_fragment, + lights_physical_fragment: lights_physical_fragment, + lights_physical_pars_fragment: lights_physical_pars_fragment, + lights_template: lights_template, + logdepthbuf_fragment: logdepthbuf_fragment, + logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, + logdepthbuf_vertex: logdepthbuf_vertex, + map_fragment: map_fragment, + map_pars_fragment: map_pars_fragment, + map_particle_fragment: map_particle_fragment, + map_particle_pars_fragment: map_particle_pars_fragment, + metalnessmap_fragment: metalnessmap_fragment, + metalnessmap_pars_fragment: metalnessmap_pars_fragment, + morphnormal_vertex: morphnormal_vertex, + morphtarget_pars_vertex: morphtarget_pars_vertex, + morphtarget_vertex: morphtarget_vertex, + normal_fragment: normal_fragment, + normalmap_pars_fragment: normalmap_pars_fragment, + packing: packing, + premultiplied_alpha_fragment: premultiplied_alpha_fragment, + project_vertex: project_vertex, + dithering_fragment: dithering_fragment, + dithering_pars_fragment: dithering_pars_fragment, + roughnessmap_fragment: roughnessmap_fragment, + roughnessmap_pars_fragment: roughnessmap_pars_fragment, + shadowmap_pars_fragment: shadowmap_pars_fragment, + shadowmap_pars_vertex: shadowmap_pars_vertex, + shadowmap_vertex: shadowmap_vertex, + shadowmask_pars_fragment: shadowmask_pars_fragment, + skinbase_vertex: skinbase_vertex, + skinning_pars_vertex: skinning_pars_vertex, + skinning_vertex: skinning_vertex, + skinnormal_vertex: skinnormal_vertex, + specularmap_fragment: specularmap_fragment, + specularmap_pars_fragment: specularmap_pars_fragment, + tonemapping_fragment: tonemapping_fragment, + tonemapping_pars_fragment: tonemapping_pars_fragment, + uv_pars_fragment: uv_pars_fragment, + uv_pars_vertex: uv_pars_vertex, + uv_vertex: uv_vertex, + uv2_pars_fragment: uv2_pars_fragment, + uv2_pars_vertex: uv2_pars_vertex, + uv2_vertex: uv2_vertex, + worldpos_vertex: worldpos_vertex, + + cube_frag: cube_frag, + cube_vert: cube_vert, + depth_frag: depth_frag, + depth_vert: depth_vert, + distanceRGBA_frag: distanceRGBA_frag, + distanceRGBA_vert: distanceRGBA_vert, + equirect_frag: equirect_frag, + equirect_vert: equirect_vert, + linedashed_frag: linedashed_frag, + linedashed_vert: linedashed_vert, + meshbasic_frag: meshbasic_frag, + meshbasic_vert: meshbasic_vert, + meshlambert_frag: meshlambert_frag, + meshlambert_vert: meshlambert_vert, + meshphong_frag: meshphong_frag, + meshphong_vert: meshphong_vert, + meshphysical_frag: meshphysical_frag, + meshphysical_vert: meshphysical_vert, + normal_frag: normal_frag, + normal_vert: normal_vert, + points_frag: points_frag, + points_vert: points_vert, + shadow_frag: shadow_frag, + shadow_vert: shadow_vert +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + */ + +var ShaderLib = { + + basic: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + + }, + + lambert: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + + }, + + phong: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + specular: { value: new Color( 0x111111 ) }, + shininess: { value: 30 } + } + ] ), + + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + + }, + + standard: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + roughness: { value: 0.5 }, + metalness: { value: 0.5 }, + envMapIntensity: { value: 1 } // temporary + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }, + + points: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.points, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + + }, + + dashed: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ] ), + + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + + }, + + depth: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.displacementmap + ] ), + + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + + }, + + normal: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.normal_vert, + fragmentShader: ShaderChunk.normal_frag + + }, + + /* ------------------------------------------------------------------------- + // Cube map shader + ------------------------------------------------------------------------- */ + + cube: { + + uniforms: { + tCube: { value: null }, + tFlip: { value: - 1 }, + opacity: { value: 1.0 } + }, + + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + + }, + + equirect: { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + + }, + + distanceRGBA: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1000 } + } + ] ), + + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + + }, + + shadow: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.lights, + { + color: { value: new Color( 0x00000 ) }, + opacity: { value: 1.0 } + }, + ] ), + + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + + } + +}; + +ShaderLib.physical = { + + uniforms: UniformsUtils.merge( [ + ShaderLib.standard.uniforms, + { + clearCoat: { value: 0 }, + clearCoatRoughness: { value: 0 } + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + +}; + +/** + * @author bhouston / http://clara.io + */ + +function Box2( min, max ) { + + this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); + +} + +Object.assign( Box2.prototype, { + + set: function ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }, + + setFromPoints: function ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }, + + setFromCenterAndSize: function () { + + var v1 = new Vector2(); + + return function setFromCenterAndSize( center, size ) { + + var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }, + + makeEmpty: function () { + + this.min.x = this.min.y = + Infinity; + this.max.x = this.max.y = - Infinity; + + return this; + + }, + + isEmpty: function () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return this.isEmpty() ? result.set( 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }, + + getSize: function ( optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return this.isEmpty() ? result.set( 0, 0 ) : result.subVectors( this.max, this.min ); + + }, + + expandByPoint: function ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }, + + expandByVector: function ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }, + + expandByScalar: function ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }, + + containsPoint: function ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y ? false : true; + + }, + + containsBox: function ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y; + + }, + + getParameter: function ( point, optionalTarget ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + var result = optionalTarget || new Vector2(); + + return result.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ) + ); + + }, + + intersectsBox: function ( box ) { + + // using 4 splitting planes to rule out intersections + + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y ? false : true; + + }, + + clampPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return result.copy( point ).clamp( this.min, this.max ); + + }, + + distanceToPoint: function () { + + var v1 = new Vector2(); + + return function distanceToPoint( point ) { + + var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + }; + + }(), + + intersect: function ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + return this; + + }, + + union: function ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }, + + translate: function ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }, + + equals: function ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function WebGLFlareRenderer( renderer, gl, state, textures, capabilities ) { + + var vertexBuffer, elementBuffer; + var shader, program, attributes, uniforms; + + var tempTexture, occlusionTexture; + + function init() { + + var vertices = new Float32Array( [ + - 1, - 1, 0, 0, + 1, - 1, 1, 0, + 1, 1, 1, 1, + - 1, 1, 0, 1 + ] ); + + var faces = new Uint16Array( [ + 0, 1, 2, + 0, 2, 3 + ] ); + + // buffers + + vertexBuffer = gl.createBuffer(); + elementBuffer = gl.createBuffer(); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); + + // textures + + tempTexture = gl.createTexture(); + occlusionTexture = gl.createTexture(); + + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 16, 16, 0, gl.RGB, gl.UNSIGNED_BYTE, null ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + + state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); + gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + + shader = { + + vertexShader: [ + + "uniform lowp int renderType;", + + "uniform vec3 screenPosition;", + "uniform vec2 scale;", + "uniform float rotation;", + + "uniform sampler2D occlusionMap;", + + "attribute vec2 position;", + "attribute vec2 uv;", + + "varying vec2 vUV;", + "varying float vVisibility;", + + "void main() {", + + "vUV = uv;", + + "vec2 pos = position;", + + "if ( renderType == 2 ) {", + + "vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );", + + "vVisibility = visibility.r / 9.0;", + "vVisibility *= 1.0 - visibility.g / 9.0;", + "vVisibility *= visibility.b / 9.0;", + "vVisibility *= 1.0 - visibility.a / 9.0;", + + "pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;", + "pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;", + + "}", + + "gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );", + + "}" + + ].join( "\n" ), + + fragmentShader: [ + + "uniform lowp int renderType;", + + "uniform sampler2D map;", + "uniform float opacity;", + "uniform vec3 color;", + + "varying vec2 vUV;", + "varying float vVisibility;", + + "void main() {", + + // pink square + + "if ( renderType == 0 ) {", + + "gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );", + + // restore + + "} else if ( renderType == 1 ) {", + + "gl_FragColor = texture2D( map, vUV );", + + // flare + + "} else {", + + "vec4 texture = texture2D( map, vUV );", + "texture.a *= opacity * vVisibility;", + "gl_FragColor = texture;", + "gl_FragColor.rgb *= color;", + + "}", + + "}" + + ].join( "\n" ) + + }; + + program = createProgram( shader ); + + attributes = { + vertex: gl.getAttribLocation ( program, "position" ), + uv: gl.getAttribLocation ( program, "uv" ) + }; + + uniforms = { + renderType: gl.getUniformLocation( program, "renderType" ), + map: gl.getUniformLocation( program, "map" ), + occlusionMap: gl.getUniformLocation( program, "occlusionMap" ), + opacity: gl.getUniformLocation( program, "opacity" ), + color: gl.getUniformLocation( program, "color" ), + scale: gl.getUniformLocation( program, "scale" ), + rotation: gl.getUniformLocation( program, "rotation" ), + screenPosition: gl.getUniformLocation( program, "screenPosition" ) + }; + + } + + /* + * Render lens flares + * Method: renders 16x16 0xff00ff-colored points scattered over the light source area, + * reads these back and calculates occlusion. + */ + + this.render = function ( flares, scene, camera, viewport ) { + + if ( flares.length === 0 ) return; + + var tempPosition = new Vector3(); + + var invAspect = viewport.w / viewport.z, + halfViewportWidth = viewport.z * 0.5, + halfViewportHeight = viewport.w * 0.5; + + var size = 16 / viewport.w, + scale = new Vector2( size * invAspect, size ); + + var screenPosition = new Vector3( 1, 1, 0 ), + screenPositionPixels = new Vector2( 1, 1 ); + + var validArea = new Box2(); + + validArea.min.set( viewport.x, viewport.y ); + validArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) ); + + if ( program === undefined ) { + + init(); + + } + + state.useProgram( program ); + + state.initAttributes(); + state.enableAttribute( attributes.vertex ); + state.enableAttribute( attributes.uv ); + state.disableUnusedAttributes(); + + // loop through all lens flares to update their occlusion and positions + // setup gl and common used attribs/uniforms + + gl.uniform1i( uniforms.occlusionMap, 0 ); + gl.uniform1i( uniforms.map, 1 ); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.vertexAttribPointer( attributes.vertex, 2, gl.FLOAT, false, 2 * 8, 0 ); + gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + + state.disable( gl.CULL_FACE ); + state.buffers.depth.setMask( false ); + + for ( var i = 0, l = flares.length; i < l; i ++ ) { + + size = 16 / viewport.w; + scale.set( size * invAspect, size ); + + // calc object screen position + + var flare = flares[ i ]; + + tempPosition.set( flare.matrixWorld.elements[ 12 ], flare.matrixWorld.elements[ 13 ], flare.matrixWorld.elements[ 14 ] ); + + tempPosition.applyMatrix4( camera.matrixWorldInverse ); + tempPosition.applyMatrix4( camera.projectionMatrix ); + + // setup arrays for gl programs + + screenPosition.copy( tempPosition ); + + // horizontal and vertical coordinate of the lower left corner of the pixels to copy + + screenPositionPixels.x = viewport.x + ( screenPosition.x * halfViewportWidth ) + halfViewportWidth - 8; + screenPositionPixels.y = viewport.y + ( screenPosition.y * halfViewportHeight ) + halfViewportHeight - 8; + + // screen cull + + if ( validArea.containsPoint( screenPositionPixels ) === true ) { + + // save current RGB to temp texture + + state.activeTexture( gl.TEXTURE0 ); + state.bindTexture( gl.TEXTURE_2D, null ); + state.activeTexture( gl.TEXTURE1 ); + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGB, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); + + + // render pink quad + + gl.uniform1i( uniforms.renderType, 0 ); + gl.uniform2f( uniforms.scale, scale.x, scale.y ); + gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); + + state.disable( gl.BLEND ); + state.enable( gl.DEPTH_TEST ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + + // copy result to occlusionMap + + state.activeTexture( gl.TEXTURE0 ); + state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); + gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); + + + // restore graphics + + gl.uniform1i( uniforms.renderType, 1 ); + state.disable( gl.DEPTH_TEST ); + + state.activeTexture( gl.TEXTURE1 ); + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + + // update object positions + + flare.positionScreen.copy( screenPosition ); + + if ( flare.customUpdateCallback ) { + + flare.customUpdateCallback( flare ); + + } else { + + flare.updateLensFlares(); + + } + + // render flares + + gl.uniform1i( uniforms.renderType, 2 ); + state.enable( gl.BLEND ); + + for ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) { + + var sprite = flare.lensFlares[ j ]; + + if ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) { + + screenPosition.x = sprite.x; + screenPosition.y = sprite.y; + screenPosition.z = sprite.z; + + size = sprite.size * sprite.scale / viewport.w; + + scale.x = size * invAspect; + scale.y = size; + + gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); + gl.uniform2f( uniforms.scale, scale.x, scale.y ); + gl.uniform1f( uniforms.rotation, sprite.rotation ); + + gl.uniform1f( uniforms.opacity, sprite.opacity ); + gl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b ); + + state.setBlending( sprite.blending, sprite.blendEquation, sprite.blendSrc, sprite.blendDst ); + + textures.setTexture2D( sprite.texture, 1 ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + } + + } + + } + + } + + // restore gl + + state.enable( gl.CULL_FACE ); + state.enable( gl.DEPTH_TEST ); + state.buffers.depth.setMask( true ); + + state.reset(); + + }; + + function createProgram( shader ) { + + var program = gl.createProgram(); + + var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); + var vertexShader = gl.createShader( gl.VERTEX_SHADER ); + + var prefix = "precision " + capabilities.precision + " float;\n"; + + gl.shaderSource( fragmentShader, prefix + shader.fragmentShader ); + gl.shaderSource( vertexShader, prefix + shader.vertexShader ); + + gl.compileShader( fragmentShader ); + gl.compileShader( vertexShader ); + + gl.attachShader( program, fragmentShader ); + gl.attachShader( program, vertexShader ); + + gl.linkProgram( program ); + + return program; + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.needsUpdate = true; + +} + +CanvasTexture.prototype = Object.create( Texture.prototype ); +CanvasTexture.prototype.constructor = CanvasTexture; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) { + + var vertexBuffer, elementBuffer; + var program, attributes, uniforms; + + var texture; + + // decompose matrixWorld + + var spritePosition = new Vector3(); + var spriteRotation = new Quaternion(); + var spriteScale = new Vector3(); + + function init() { + + var vertices = new Float32Array( [ + - 0.5, - 0.5, 0, 0, + 0.5, - 0.5, 1, 0, + 0.5, 0.5, 1, 1, + - 0.5, 0.5, 0, 1 + ] ); + + var faces = new Uint16Array( [ + 0, 1, 2, + 0, 2, 3 + ] ); + + vertexBuffer = gl.createBuffer(); + elementBuffer = gl.createBuffer(); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); + + program = createProgram(); + + attributes = { + position: gl.getAttribLocation ( program, 'position' ), + uv: gl.getAttribLocation ( program, 'uv' ) + }; + + uniforms = { + uvOffset: gl.getUniformLocation( program, 'uvOffset' ), + uvScale: gl.getUniformLocation( program, 'uvScale' ), + + rotation: gl.getUniformLocation( program, 'rotation' ), + scale: gl.getUniformLocation( program, 'scale' ), + + color: gl.getUniformLocation( program, 'color' ), + map: gl.getUniformLocation( program, 'map' ), + opacity: gl.getUniformLocation( program, 'opacity' ), + + modelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ), + projectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ), + + fogType: gl.getUniformLocation( program, 'fogType' ), + fogDensity: gl.getUniformLocation( program, 'fogDensity' ), + fogNear: gl.getUniformLocation( program, 'fogNear' ), + fogFar: gl.getUniformLocation( program, 'fogFar' ), + fogColor: gl.getUniformLocation( program, 'fogColor' ), + + alphaTest: gl.getUniformLocation( program, 'alphaTest' ) + }; + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = 8; + canvas.height = 8; + + var context = canvas.getContext( '2d' ); + context.fillStyle = 'white'; + context.fillRect( 0, 0, 8, 8 ); + + texture = new CanvasTexture( canvas ); + + } + + this.render = function ( sprites, scene, camera ) { + + if ( sprites.length === 0 ) return; + + // setup gl + + if ( program === undefined ) { + + init(); + + } + + state.useProgram( program ); + + state.initAttributes(); + state.enableAttribute( attributes.position ); + state.enableAttribute( attributes.uv ); + state.disableUnusedAttributes(); + + state.disable( gl.CULL_FACE ); + state.enable( gl.BLEND ); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 ); + gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + + gl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements ); + + state.activeTexture( gl.TEXTURE0 ); + gl.uniform1i( uniforms.map, 0 ); + + var oldFogType = 0; + var sceneFogType = 0; + var fog = scene.fog; + + if ( fog ) { + + gl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b ); + + if ( fog.isFog ) { + + gl.uniform1f( uniforms.fogNear, fog.near ); + gl.uniform1f( uniforms.fogFar, fog.far ); + + gl.uniform1i( uniforms.fogType, 1 ); + oldFogType = 1; + sceneFogType = 1; + + } else if ( fog.isFogExp2 ) { + + gl.uniform1f( uniforms.fogDensity, fog.density ); + + gl.uniform1i( uniforms.fogType, 2 ); + oldFogType = 2; + sceneFogType = 2; + + } + + } else { + + gl.uniform1i( uniforms.fogType, 0 ); + oldFogType = 0; + sceneFogType = 0; + + } + + + // update positions and sort + + for ( var i = 0, l = sprites.length; i < l; i ++ ) { + + var sprite = sprites[ i ]; + + sprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld ); + sprite.z = - sprite.modelViewMatrix.elements[ 14 ]; + + } + + sprites.sort( painterSortStable ); + + // render all sprites + + var scale = []; + + for ( var i = 0, l = sprites.length; i < l; i ++ ) { + + var sprite = sprites[ i ]; + var material = sprite.material; + + if ( material.visible === false ) continue; + + sprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined ); + + gl.uniform1f( uniforms.alphaTest, material.alphaTest ); + gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements ); + + sprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale ); + + scale[ 0 ] = spriteScale.x; + scale[ 1 ] = spriteScale.y; + + var fogType = 0; + + if ( scene.fog && material.fog ) { + + fogType = sceneFogType; + + } + + if ( oldFogType !== fogType ) { + + gl.uniform1i( uniforms.fogType, fogType ); + oldFogType = fogType; + + } + + if ( material.map !== null ) { + + gl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y ); + gl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y ); + + } else { + + gl.uniform2f( uniforms.uvOffset, 0, 0 ); + gl.uniform2f( uniforms.uvScale, 1, 1 ); + + } + + gl.uniform1f( uniforms.opacity, material.opacity ); + gl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b ); + + gl.uniform1f( uniforms.rotation, material.rotation ); + gl.uniform2fv( uniforms.scale, scale ); + + state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); + state.buffers.depth.setTest( material.depthTest ); + state.buffers.depth.setMask( material.depthWrite ); + + textures.setTexture2D( material.map || texture, 0 ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + sprite.onAfterRender( renderer, scene, camera, undefined, material, undefined ); + + } + + // restore gl + + state.enable( gl.CULL_FACE ); + + state.reset(); + + }; + + function createProgram() { + + var program = gl.createProgram(); + + var vertexShader = gl.createShader( gl.VERTEX_SHADER ); + var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); + + gl.shaderSource( vertexShader, [ + + 'precision ' + capabilities.precision + ' float;', + + '#define SHADER_NAME ' + 'SpriteMaterial', + + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform float rotation;', + 'uniform vec2 scale;', + 'uniform vec2 uvOffset;', + 'uniform vec2 uvScale;', + + 'attribute vec2 position;', + 'attribute vec2 uv;', + + 'varying vec2 vUV;', + + 'void main() {', + + 'vUV = uvOffset + uv * uvScale;', + + 'vec2 alignedPosition = position * scale;', + + 'vec2 rotatedPosition;', + 'rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;', + 'rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;', + + 'vec4 finalPosition;', + + 'finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );', + 'finalPosition.xy += rotatedPosition;', + 'finalPosition = projectionMatrix * finalPosition;', + + 'gl_Position = finalPosition;', + + '}' + + ].join( '\n' ) ); + + gl.shaderSource( fragmentShader, [ + + 'precision ' + capabilities.precision + ' float;', + + '#define SHADER_NAME ' + 'SpriteMaterial', + + 'uniform vec3 color;', + 'uniform sampler2D map;', + 'uniform float opacity;', + + 'uniform int fogType;', + 'uniform vec3 fogColor;', + 'uniform float fogDensity;', + 'uniform float fogNear;', + 'uniform float fogFar;', + 'uniform float alphaTest;', + + 'varying vec2 vUV;', + + 'void main() {', + + 'vec4 texture = texture2D( map, vUV );', + + 'if ( texture.a < alphaTest ) discard;', + + 'gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );', + + 'if ( fogType > 0 ) {', + + 'float depth = gl_FragCoord.z / gl_FragCoord.w;', + 'float fogFactor = 0.0;', + + 'if ( fogType == 1 ) {', + + 'fogFactor = smoothstep( fogNear, fogFar, depth );', + + '} else {', + + 'const float LOG2 = 1.442695;', + 'fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );', + 'fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );', + + '}', + + 'gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );', + + '}', + + '}' + + ].join( '\n' ) ); + + gl.compileShader( vertexShader ); + gl.compileShader( fragmentShader ); + + gl.attachShader( program, vertexShader ); + gl.attachShader( program, fragmentShader ); + + gl.linkProgram( program ); + + return program; + + } + + function painterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return b.id - a.id; + + } + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +var materialId = 0; + +function Material() { + + Object.defineProperty( this, 'id', { value: materialId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Material'; + + this.fog = true; + this.lights = true; + + this.blending = NormalBlending; + this.side = FrontSide; + this.flatShading = false; + this.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors + + this.opacity = 1; + this.transparent = false; + + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + + this.depthFunc = LessEqualDepth; + this.depthTest = true; + this.depthWrite = true; + + this.clippingPlanes = null; + this.clipIntersection = false; + this.clipShadows = false; + + this.colorWrite = true; + + this.precision = null; // override the renderer's default precision for this material + + this.polygonOffset = false; + this.polygonOffsetFactor = 0; + this.polygonOffsetUnits = 0; + + this.dithering = false; + + this.alphaTest = 0; + this.premultipliedAlpha = false; + + this.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer + + this.visible = true; + + this.userData = {}; + + this.needsUpdate = true; + +} + +Object.assign( Material.prototype, EventDispatcher.prototype, { + + isMaterial: true, + + onBeforeCompile: function () {}, + + setValues: function ( values ) { + + if ( values === undefined ) return; + + for ( var key in values ) { + + var newValue = values[ key ]; + + if ( newValue === undefined ) { + + console.warn( "THREE.Material: '" + key + "' parameter is undefined." ); + continue; + + } + + // for backward compatability if shading is set in the constructor + if ( key === 'shading' ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( newValue === FlatShading ) ? true : false; + continue; + + } + + var currentValue = this[ key ]; + + if ( currentValue === undefined ) { + + console.warn( "THREE." + this.type + ": '" + key + "' is not a property of this material." ); + continue; + + } + + if ( currentValue && currentValue.isColor ) { + + currentValue.set( newValue ); + + } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { + + currentValue.copy( newValue ); + + } else if ( key === 'overdraw' ) { + + // ensure overdraw is backwards-compatible with legacy boolean type + this[ key ] = Number( newValue ); + + } else { + + this[ key ] = newValue; + + } + + } + + }, + + toJSON: function ( meta ) { + + var isRoot = meta === undefined; + + if ( isRoot ) { + + meta = { + textures: {}, + images: {} + }; + + } + + var data = { + metadata: { + version: 4.5, + type: 'Material', + generator: 'Material.toJSON' + } + }; + + // standard Material serialization + data.uuid = this.uuid; + data.type = this.type; + + if ( this.name !== '' ) data.name = this.name; + + if ( this.color && this.color.isColor ) data.color = this.color.getHex(); + + if ( this.roughness !== undefined ) data.roughness = this.roughness; + if ( this.metalness !== undefined ) data.metalness = this.metalness; + + if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); + if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex(); + if ( this.shininess !== undefined ) data.shininess = this.shininess; + if ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat; + if ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness; + + if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid; + if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid; + if ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid; + if ( this.bumpMap && this.bumpMap.isTexture ) { + + data.bumpMap = this.bumpMap.toJSON( meta ).uuid; + data.bumpScale = this.bumpScale; + + } + if ( this.normalMap && this.normalMap.isTexture ) { + + data.normalMap = this.normalMap.toJSON( meta ).uuid; + data.normalScale = this.normalScale.toArray(); + + } + if ( this.displacementMap && this.displacementMap.isTexture ) { + + data.displacementMap = this.displacementMap.toJSON( meta ).uuid; + data.displacementScale = this.displacementScale; + data.displacementBias = this.displacementBias; + + } + if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; + if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; + + if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; + if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid; + + if ( this.envMap && this.envMap.isTexture ) { + + data.envMap = this.envMap.toJSON( meta ).uuid; + data.reflectivity = this.reflectivity; // Scale behind envMap + + } + + if ( this.gradientMap && this.gradientMap.isTexture ) { + + data.gradientMap = this.gradientMap.toJSON( meta ).uuid; + + } + + if ( this.size !== undefined ) data.size = this.size; + if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; + + if ( this.blending !== NormalBlending ) data.blending = this.blending; + if ( this.flatShading === true ) data.flatShading = this.flatShading; + if ( this.side !== FrontSide ) data.side = this.side; + if ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors; + + if ( this.opacity < 1 ) data.opacity = this.opacity; + if ( this.transparent === true ) data.transparent = this.transparent; + + data.depthFunc = this.depthFunc; + data.depthTest = this.depthTest; + data.depthWrite = this.depthWrite; + + if ( this.dithering === true ) data.dithering = true; + + if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest; + if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; + + if ( this.wireframe === true ) data.wireframe = this.wireframe; + if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth; + if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap; + if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin; + + if ( this.morphTargets === true ) data.morphTargets = true; + if ( this.skinning === true ) data.skinning = true; + + if ( this.visible === false ) data.visible = false; + if ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData; + + // TODO: Copied from Object3D.toJSON + + function extractFromCache( cache ) { + + var values = []; + + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + + return values; + + } + + if ( isRoot ) { + + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + + if ( textures.length > 0 ) data.textures = textures; + if ( images.length > 0 ) data.images = images; + + } + + return data; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.fog = source.fog; + this.lights = source.lights; + + this.blending = source.blending; + this.side = source.side; + this.flatShading = source.flatShading; + this.vertexColors = source.vertexColors; + + this.opacity = source.opacity; + this.transparent = source.transparent; + + this.blendSrc = source.blendSrc; + this.blendDst = source.blendDst; + this.blendEquation = source.blendEquation; + this.blendSrcAlpha = source.blendSrcAlpha; + this.blendDstAlpha = source.blendDstAlpha; + this.blendEquationAlpha = source.blendEquationAlpha; + + this.depthFunc = source.depthFunc; + this.depthTest = source.depthTest; + this.depthWrite = source.depthWrite; + + this.colorWrite = source.colorWrite; + + this.precision = source.precision; + + this.polygonOffset = source.polygonOffset; + this.polygonOffsetFactor = source.polygonOffsetFactor; + this.polygonOffsetUnits = source.polygonOffsetUnits; + + this.dithering = source.dithering; + + this.alphaTest = source.alphaTest; + this.premultipliedAlpha = source.premultipliedAlpha; + + this.overdraw = source.overdraw; + + this.visible = source.visible; + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + this.clipShadows = source.clipShadows; + this.clipIntersection = source.clipIntersection; + + var srcPlanes = source.clippingPlanes, + dstPlanes = null; + + if ( srcPlanes !== null ) { + + var n = srcPlanes.length; + dstPlanes = new Array( n ); + + for ( var i = 0; i !== n; ++ i ) + dstPlanes[ i ] = srcPlanes[ i ].clone(); + + } + + this.clippingPlanes = dstPlanes; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * defines: { "label" : "value" }, + * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, + * + * fragmentShader: , + * vertexShader: , + * + * wireframe: , + * wireframeLinewidth: , + * + * lights: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function ShaderMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShaderMaterial'; + + this.defines = {}; + this.uniforms = {}; + + this.vertexShader = 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'; + this.fragmentShader = 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'; + + this.linewidth = 1; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; // set to use scene fog + this.lights = false; // set to use scene lights + this.clipping = false; // set to use user-defined clipping planes + + this.skinning = false; // set to use skinning attribute streams + this.morphTargets = false; // set to use morph targets + this.morphNormals = false; // set to use morph normals + + this.extensions = { + derivatives: false, // set to use derivatives + fragDepth: false, // set to use fragment depth values + drawBuffers: false, // set to use draw buffers + shaderTextureLOD: false // set to use shader texture LOD + }; + + // When rendered geometry doesn't include these attributes but the material does, + // use these default values in WebGL. This avoids errors when buffer data is missing. + this.defaultAttributeValues = { + 'color': [ 1, 1, 1 ], + 'uv': [ 0, 0 ], + 'uv2': [ 0, 0 ] + }; + + this.index0AttributeName = undefined; + + if ( parameters !== undefined ) { + + if ( parameters.attributes !== undefined ) { + + console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); + + } + + this.setValues( parameters ); + + } + +} + +ShaderMaterial.prototype = Object.create( Material.prototype ); +ShaderMaterial.prototype.constructor = ShaderMaterial; + +ShaderMaterial.prototype.isShaderMaterial = true; + +ShaderMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + + this.uniforms = UniformsUtils.clone( source.uniforms ); + + this.defines = source.defines; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.lights = source.lights; + this.clipping = source.clipping; + + this.skinning = source.skinning; + + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.extensions = source.extensions; + + return this; + +}; + +ShaderMaterial.prototype.toJSON = function ( meta ) { + + var data = Material.prototype.toJSON.call( this, meta ); + + data.uniforms = this.uniforms; + data.vertexShader = this.vertexShader; + data.fragmentShader = this.fragmentShader; + + return data; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author bhouston / https://clara.io + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * + * opacity: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * } + */ + +function MeshDepthMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDepthMaterial'; + + this.depthPacking = BasicDepthPacking; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +MeshDepthMaterial.prototype = Object.create( Material.prototype ); +MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; + +MeshDepthMaterial.prototype.isMeshDepthMaterial = true; + +MeshDepthMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.depthPacking = source.depthPacking; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * + * referencePosition: , + * nearDistance: , + * farDistance: , + * + * skinning: , + * morphTargets: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: + * + * } + */ + +function MeshDistanceMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDistanceMaterial'; + + this.referencePosition = new Vector3(); + this.nearDistance = 1; + this.farDistance = 1000; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +MeshDistanceMaterial.prototype = Object.create( Material.prototype ); +MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; + +MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; + +MeshDistanceMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.referencePosition.copy( source.referencePosition ); + this.nearDistance = source.nearDistance; + this.farDistance = source.farDistance; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + return this; + +}; + +/** + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + */ + +function Box3( min, max ) { + + this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); + +} + +Object.assign( Box3.prototype, { + + isBox3: true, + + set: function ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }, + + setFromArray: function ( array ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var x = array[ i ]; + var y = array[ i + 1 ]; + var z = array[ i + 2 ]; + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }, + + setFromBufferAttribute: function ( attribute ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + var x = attribute.getX( i ); + var y = attribute.getY( i ); + var z = attribute.getZ( i ); + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }, + + setFromPoints: function ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }, + + setFromCenterAndSize: function () { + + var v1 = new Vector3(); + + return function setFromCenterAndSize( center, size ) { + + var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); + + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + }(), + + setFromObject: function ( object ) { + + this.makeEmpty(); + + return this.expandByObject( object ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }, + + makeEmpty: function () { + + this.min.x = this.min.y = this.min.z = + Infinity; + this.max.x = this.max.y = this.max.z = - Infinity; + + return this; + + }, + + isEmpty: function () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return this.isEmpty() ? result.set( 0, 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }, + + getSize: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return this.isEmpty() ? result.set( 0, 0, 0 ) : result.subVectors( this.max, this.min ); + + }, + + expandByPoint: function ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }, + + expandByVector: function ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }, + + expandByScalar: function ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }, + + expandByObject: function () { + + // Computes the world-axis-aligned bounding box of an object (including its children), + // accounting for both the object's, and children's, world transforms + + var v1 = new Vector3(); + + return function expandByObject( object ) { + + var scope = this; + + object.updateMatrixWorld( true ); + + object.traverse( function ( node ) { + + var i, l; + + var geometry = node.geometry; + + if ( geometry !== undefined ) { + + if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + + for ( i = 0, l = vertices.length; i < l; i ++ ) { + + v1.copy( vertices[ i ] ); + v1.applyMatrix4( node.matrixWorld ); + + scope.expandByPoint( v1 ); + + } + + } else if ( geometry.isBufferGeometry ) { + + var attribute = geometry.attributes.position; + + if ( attribute !== undefined ) { + + for ( i = 0, l = attribute.count; i < l; i ++ ) { + + v1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld ); + + scope.expandByPoint( v1 ); + + } + + } + + } + + } + + } ); + + return this; + + }; + + }(), + + containsPoint: function ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y || + point.z < this.min.z || point.z > this.max.z ? false : true; + + }, + + containsBox: function ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y && + this.min.z <= box.min.z && box.max.z <= this.max.z; + + }, + + getParameter: function ( point, optionalTarget ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + var result = optionalTarget || new Vector3(); + + return result.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ), + ( point.z - this.min.z ) / ( this.max.z - this.min.z ) + ); + + }, + + intersectsBox: function ( box ) { + + // using 6 splitting planes to rule out intersections. + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y || + box.max.z < this.min.z || box.min.z > this.max.z ? false : true; + + }, + + intersectsSphere: ( function () { + + var closestPoint = new Vector3(); + + return function intersectsSphere( sphere ) { + + // Find the point on the AABB closest to the sphere center. + this.clampPoint( sphere.center, closestPoint ); + + // If that point is inside the sphere, the AABB and sphere intersect. + return closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); + + }; + + } )(), + + intersectsPlane: function ( plane ) { + + // We compute the minimum and maximum dot product values. If those values + // are on the same side (back or front) of the plane, then there is no intersection. + + var min, max; + + if ( plane.normal.x > 0 ) { + + min = plane.normal.x * this.min.x; + max = plane.normal.x * this.max.x; + + } else { + + min = plane.normal.x * this.max.x; + max = plane.normal.x * this.min.x; + + } + + if ( plane.normal.y > 0 ) { + + min += plane.normal.y * this.min.y; + max += plane.normal.y * this.max.y; + + } else { + + min += plane.normal.y * this.max.y; + max += plane.normal.y * this.min.y; + + } + + if ( plane.normal.z > 0 ) { + + min += plane.normal.z * this.min.z; + max += plane.normal.z * this.max.z; + + } else { + + min += plane.normal.z * this.max.z; + max += plane.normal.z * this.min.z; + + } + + return ( min <= plane.constant && max >= plane.constant ); + + }, + + clampPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.copy( point ).clamp( this.min, this.max ); + + }, + + distanceToPoint: function () { + + var v1 = new Vector3(); + + return function distanceToPoint( point ) { + + var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + }; + + }(), + + getBoundingSphere: function () { + + var v1 = new Vector3(); + + return function getBoundingSphere( optionalTarget ) { + + var result = optionalTarget || new Sphere(); + + this.getCenter( result.center ); + + result.radius = this.getSize( v1 ).length() * 0.5; + + return result; + + }; + + }(), + + intersect: function ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. + if( this.isEmpty() ) this.makeEmpty(); + + return this; + + }, + + union: function ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }, + + applyMatrix4: function () { + + var points = [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ]; + + return function applyMatrix4( matrix ) { + + // transform of empty box is an empty box. + if( this.isEmpty() ) return this; + + // NOTE: I am using a binary pattern to specify all 2^3 combinations below + points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 + points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 + points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 + points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 + points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 + points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 + points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 + points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 + + this.setFromPoints( points ); + + return this; + + }; + + }(), + + translate: function ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }, + + equals: function ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author mrdoob / http://mrdoob.com/ + */ + +function Sphere( center, radius ) { + + this.center = ( center !== undefined ) ? center : new Vector3(); + this.radius = ( radius !== undefined ) ? radius : 0; + +} + +Object.assign( Sphere.prototype, { + + set: function ( center, radius ) { + + this.center.copy( center ); + this.radius = radius; + + return this; + + }, + + setFromPoints: function () { + + var box = new Box3(); + + return function setFromPoints( points, optionalCenter ) { + + var center = this.center; + + if ( optionalCenter !== undefined ) { + + center.copy( optionalCenter ); + + } else { + + box.setFromPoints( points ).getCenter( center ); + + } + + var maxRadiusSq = 0; + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); + + } + + this.radius = Math.sqrt( maxRadiusSq ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( sphere ) { + + this.center.copy( sphere.center ); + this.radius = sphere.radius; + + return this; + + }, + + empty: function () { + + return ( this.radius <= 0 ); + + }, + + containsPoint: function ( point ) { + + return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); + + }, + + distanceToPoint: function ( point ) { + + return ( point.distanceTo( this.center ) - this.radius ); + + }, + + intersectsSphere: function ( sphere ) { + + var radiusSum = this.radius + sphere.radius; + + return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); + + }, + + intersectsBox: function ( box ) { + + return box.intersectsSphere( this ); + + }, + + intersectsPlane: function ( plane ) { + + return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; + + }, + + clampPoint: function ( point, optionalTarget ) { + + var deltaLengthSq = this.center.distanceToSquared( point ); + + var result = optionalTarget || new Vector3(); + + result.copy( point ); + + if ( deltaLengthSq > ( this.radius * this.radius ) ) { + + result.sub( this.center ).normalize(); + result.multiplyScalar( this.radius ).add( this.center ); + + } + + return result; + + }, + + getBoundingBox: function ( optionalTarget ) { + + var box = optionalTarget || new Box3(); + + box.set( this.center, this.center ); + box.expandByScalar( this.radius ); + + return box; + + }, + + applyMatrix4: function ( matrix ) { + + this.center.applyMatrix4( matrix ); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + + return this; + + }, + + translate: function ( offset ) { + + this.center.add( offset ); + + return this; + + }, + + equals: function ( sphere ) { + + return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + * @author tschw + */ + +function Matrix3() { + + this.elements = [ + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); + + } + +} + +Object.assign( Matrix3.prototype, { + + isMatrix3: true, + + set: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; + te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; + te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; + + return this; + + }, + + identity: function () { + + this.set( + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ); + + return this; + + }, + + clone: function () { + + return new this.constructor().fromArray( this.elements ); + + }, + + copy: function ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; + te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; + te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; + + return this; + + }, + + setFromMatrix4: function ( m ) { + + var me = m.elements; + + this.set( + + me[ 0 ], me[ 4 ], me[ 8 ], + me[ 1 ], me[ 5 ], me[ 9 ], + me[ 2 ], me[ 6 ], me[ 10 ] + + ); + + return this; + + }, + + applyToBufferAttribute: function () { + + var v1 = new Vector3(); + + return function applyToBufferAttribute( attribute ) { + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + v1.x = attribute.getX( i ); + v1.y = attribute.getY( i ); + v1.z = attribute.getZ( i ); + + v1.applyMatrix3( this ); + + attribute.setXYZ( i, v1.x, v1.y, v1.z ); + + } + + return attribute; + + }; + + }(), + + multiply: function ( m ) { + + return this.multiplyMatrices( this, m ); + + }, + + premultiply: function ( m ) { + + return this.multiplyMatrices( m, this ); + + }, + + multiplyMatrices: function ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ]; + var a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ]; + var a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ]; + + var b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ]; + var b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ]; + var b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31; + te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32; + te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31; + te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32; + te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31; + te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32; + te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33; + + return this; + + }, + + multiplyScalar: function ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; + te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; + te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; + + return this; + + }, + + determinant: function () { + + var te = this.elements; + + var a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], + d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], + g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; + + return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; + + }, + + getInverse: function ( matrix, throwOnDegenerate ) { + + if ( matrix && matrix.isMatrix4 ) { + + console.error( "THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument." ); + + } + + var me = matrix.elements, + te = this.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], + n12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ], + n13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ], + + t11 = n33 * n22 - n32 * n23, + t12 = n32 * n13 - n33 * n12, + t13 = n23 * n12 - n22 * n13, + + det = n11 * t11 + n21 * t12 + n31 * t13; + + if ( det === 0 ) { + + var msg = "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0"; + + if ( throwOnDegenerate === true ) { + + throw new Error( msg ); + + } else { + + console.warn( msg ); + + } + + return this.identity(); + + } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; + te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; + + te[ 3 ] = t12 * detInv; + te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; + te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; + + te[ 6 ] = t13 * detInv; + te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; + te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; + + return this; + + }, + + transpose: function () { + + var tmp, m = this.elements; + + tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; + tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; + tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; + + return this; + + }, + + getNormalMatrix: function ( matrix4 ) { + + return this.setFromMatrix4( matrix4 ).getInverse( this ).transpose(); + + }, + + transposeIntoArray: function ( r ) { + + var m = this.elements; + + r[ 0 ] = m[ 0 ]; + r[ 1 ] = m[ 3 ]; + r[ 2 ] = m[ 6 ]; + r[ 3 ] = m[ 1 ]; + r[ 4 ] = m[ 4 ]; + r[ 5 ] = m[ 7 ]; + r[ 6 ] = m[ 2 ]; + r[ 7 ] = m[ 5 ]; + r[ 8 ] = m[ 8 ]; + + return this; + + }, + + equals: function ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 9; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + for ( var i = 0; i < 9; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + + array[ offset + 3 ] = te[ 3 ]; + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + array[ offset + 8 ] = te[ 8 ]; + + return array; + + } + +} ); + +/** + * @author bhouston / http://clara.io + */ + +function Plane( normal, constant ) { + + // normal is assumed to be normalized + + this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); + this.constant = ( constant !== undefined ) ? constant : 0; + +} + +Object.assign( Plane.prototype, { + + set: function ( normal, constant ) { + + this.normal.copy( normal ); + this.constant = constant; + + return this; + + }, + + setComponents: function ( x, y, z, w ) { + + this.normal.set( x, y, z ); + this.constant = w; + + return this; + + }, + + setFromNormalAndCoplanarPoint: function ( normal, point ) { + + this.normal.copy( normal ); + this.constant = - point.dot( this.normal ); + + return this; + + }, + + setFromCoplanarPoints: function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function setFromCoplanarPoints( a, b, c ) { + + var normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize(); + + // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? + + this.setFromNormalAndCoplanarPoint( normal, a ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( plane ) { + + this.normal.copy( plane.normal ); + this.constant = plane.constant; + + return this; + + }, + + normalize: function () { + + // Note: will lead to a divide by zero if the plane is invalid. + + var inverseNormalLength = 1.0 / this.normal.length(); + this.normal.multiplyScalar( inverseNormalLength ); + this.constant *= inverseNormalLength; + + return this; + + }, + + negate: function () { + + this.constant *= - 1; + this.normal.negate(); + + return this; + + }, + + distanceToPoint: function ( point ) { + + return this.normal.dot( point ) + this.constant; + + }, + + distanceToSphere: function ( sphere ) { + + return this.distanceToPoint( sphere.center ) - sphere.radius; + + }, + + projectPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); + + }, + + intersectLine: function () { + + var v1 = new Vector3(); + + return function intersectLine( line, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + var direction = line.delta( v1 ); + + var denominator = this.normal.dot( direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( this.distanceToPoint( line.start ) === 0 ) { + + return result.copy( line.start ); + + } + + // Unsure if this is the correct method to handle this case. + return undefined; + + } + + var t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; + + if ( t < 0 || t > 1 ) { + + return undefined; + + } + + return result.copy( direction ).multiplyScalar( t ).add( line.start ); + + }; + + }(), + + intersectsLine: function ( line ) { + + // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. + + var startSign = this.distanceToPoint( line.start ); + var endSign = this.distanceToPoint( line.end ); + + return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); + + }, + + intersectsBox: function ( box ) { + + return box.intersectsPlane( this ); + + }, + + intersectsSphere: function ( sphere ) { + + return sphere.intersectsPlane( this ); + + }, + + coplanarPoint: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.normal ).multiplyScalar( - this.constant ); + + }, + + applyMatrix4: function () { + + var v1 = new Vector3(); + var m1 = new Matrix3(); + + return function applyMatrix4( matrix, optionalNormalMatrix ) { + + var normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix ); + + var referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix ); + + var normal = this.normal.applyMatrix3( normalMatrix ).normalize(); + + this.constant = - referencePoint.dot( normal ); + + return this; + + }; + + }(), + + translate: function ( offset ) { + + this.constant -= offset.dot( this.normal ); + + return this; + + }, + + equals: function ( plane ) { + + return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author bhouston / http://clara.io + */ + +function Frustum( p0, p1, p2, p3, p4, p5 ) { + + this.planes = [ + + ( p0 !== undefined ) ? p0 : new Plane(), + ( p1 !== undefined ) ? p1 : new Plane(), + ( p2 !== undefined ) ? p2 : new Plane(), + ( p3 !== undefined ) ? p3 : new Plane(), + ( p4 !== undefined ) ? p4 : new Plane(), + ( p5 !== undefined ) ? p5 : new Plane() + + ]; + +} + +Object.assign( Frustum.prototype, { + + set: function ( p0, p1, p2, p3, p4, p5 ) { + + var planes = this.planes; + + planes[ 0 ].copy( p0 ); + planes[ 1 ].copy( p1 ); + planes[ 2 ].copy( p2 ); + planes[ 3 ].copy( p3 ); + planes[ 4 ].copy( p4 ); + planes[ 5 ].copy( p5 ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( frustum ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + planes[ i ].copy( frustum.planes[ i ] ); + + } + + return this; + + }, + + setFromMatrix: function ( m ) { + + var planes = this.planes; + var me = m.elements; + var me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; + var me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; + var me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; + var me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; + + planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); + planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); + planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); + planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); + planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); + planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); + + return this; + + }, + + intersectsObject: function () { + + var sphere = new Sphere(); + + return function intersectsObject( object ) { + + var geometry = object.geometry; + + if ( geometry.boundingSphere === null ) + geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ) + .applyMatrix4( object.matrixWorld ); + + return this.intersectsSphere( sphere ); + + }; + + }(), + + intersectsSprite: function () { + + var sphere = new Sphere(); + + return function intersectsSprite( sprite ) { + + sphere.center.set( 0, 0, 0 ); + sphere.radius = 0.7071067811865476; + sphere.applyMatrix4( sprite.matrixWorld ); + + return this.intersectsSphere( sphere ); + + }; + + }(), + + intersectsSphere: function ( sphere ) { + + var planes = this.planes; + var center = sphere.center; + var negRadius = - sphere.radius; + + for ( var i = 0; i < 6; i ++ ) { + + var distance = planes[ i ].distanceToPoint( center ); + + if ( distance < negRadius ) { + + return false; + + } + + } + + return true; + + }, + + intersectsBox: function () { + + var p1 = new Vector3(), + p2 = new Vector3(); + + return function intersectsBox( box ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + var plane = planes[ i ]; + + p1.x = plane.normal.x > 0 ? box.min.x : box.max.x; + p2.x = plane.normal.x > 0 ? box.max.x : box.min.x; + p1.y = plane.normal.y > 0 ? box.min.y : box.max.y; + p2.y = plane.normal.y > 0 ? box.max.y : box.min.y; + p1.z = plane.normal.z > 0 ? box.min.z : box.max.z; + p2.z = plane.normal.z > 0 ? box.max.z : box.min.z; + + var d1 = plane.distanceToPoint( p1 ); + var d2 = plane.distanceToPoint( p2 ); + + // if both outside plane, no intersection + + if ( d1 < 0 && d2 < 0 ) { + + return false; + + } + + } + + return true; + + }; + + }(), + + containsPoint: function ( point ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + if ( planes[ i ].distanceToPoint( point ) < 0 ) { + + return false; + + } + + } + + return true; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { + + var _frustum = new Frustum(), + _projScreenMatrix = new Matrix4(), + + _shadowMapSize = new Vector2(), + _maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ), + + _lookTarget = new Vector3(), + _lightPositionWorld = new Vector3(), + + _MorphingFlag = 1, + _SkinningFlag = 2, + + _NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1, + + _depthMaterials = new Array( _NumberOfMaterialVariants ), + _distanceMaterials = new Array( _NumberOfMaterialVariants ), + + _materialCache = {}; + + var cubeDirections = [ + new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), + new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) + ]; + + var cubeUps = [ + new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), + new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) + ]; + + var cube2DViewPorts = [ + new Vector4(), new Vector4(), new Vector4(), + new Vector4(), new Vector4(), new Vector4() + ]; + + // init + + for ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) { + + var useMorphing = ( i & _MorphingFlag ) !== 0; + var useSkinning = ( i & _SkinningFlag ) !== 0; + + var depthMaterial = new MeshDepthMaterial( { + + depthPacking: RGBADepthPacking, + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _depthMaterials[ i ] = depthMaterial; + + // + + var distanceMaterial = new MeshDistanceMaterial( { + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _distanceMaterials[ i ] = distanceMaterial; + + } + + // + + var scope = this; + + this.enabled = false; + + this.autoUpdate = true; + this.needsUpdate = false; + + this.type = PCFShadowMap; + + this.renderReverseSided = true; + this.renderSingleSided = true; + + this.render = function ( lights, scene, camera ) { + + if ( scope.enabled === false ) return; + if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; + + if ( lights.length === 0 ) return; + + // TODO Clean up (needed in case of contextlost) + var _gl = _renderer.context; + var _state = _renderer.state; + + // Set GL state for depth map. + _state.disable( _gl.BLEND ); + _state.buffers.color.setClear( 1, 1, 1, 1 ); + _state.buffers.depth.setTest( true ); + _state.setScissorTest( false ); + + // render depth map + + var faceCount; + + for ( var i = 0, il = lights.length; i < il; i ++ ) { + + var light = lights[ i ]; + var shadow = light.shadow; + var isPointLight = light && light.isPointLight; + + if ( shadow === undefined ) { + + console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); + continue; + + } + + var shadowCamera = shadow.camera; + + _shadowMapSize.copy( shadow.mapSize ); + _shadowMapSize.min( _maxShadowMapSize ); + + if ( isPointLight ) { + + var vpWidth = _shadowMapSize.x; + var vpHeight = _shadowMapSize.y; + + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + + // positive X + cube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight ); + // negative X + cube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight ); + // positive Z + cube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight ); + // negative Z + cube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight ); + // positive Y + cube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight ); + // negative Y + cube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight ); + + _shadowMapSize.x *= 4.0; + _shadowMapSize.y *= 2.0; + + } + + if ( shadow.map === null ) { + + var pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + ".shadowMap"; + + shadowCamera.updateProjectionMatrix(); + + } + + if ( shadow.isSpotLightShadow ) { + + shadow.update( light ); + + } + + var shadowMap = shadow.map; + var shadowMatrix = shadow.matrix; + + _lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + shadowCamera.position.copy( _lightPositionWorld ); + + if ( isPointLight ) { + + faceCount = 6; + + // for point lights we set the shadow matrix to be a translation-only matrix + // equal to inverse of the light's position + + shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z ); + + } else { + + faceCount = 1; + + _lookTarget.setFromMatrixPosition( light.target.matrixWorld ); + shadowCamera.lookAt( _lookTarget ); + shadowCamera.updateMatrixWorld(); + + // compute shadow matrix + + shadowMatrix.set( + 0.5, 0.0, 0.0, 0.5, + 0.0, 0.5, 0.0, 0.5, + 0.0, 0.0, 0.5, 0.5, + 0.0, 0.0, 0.0, 1.0 + ); + + shadowMatrix.multiply( shadowCamera.projectionMatrix ); + shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); + + } + + _renderer.setRenderTarget( shadowMap ); + _renderer.clear(); + + // render shadow map for each cube face (if omni-directional) or + // run a single pass if not + + for ( var face = 0; face < faceCount; face ++ ) { + + if ( isPointLight ) { + + _lookTarget.copy( shadowCamera.position ); + _lookTarget.add( cubeDirections[ face ] ); + shadowCamera.up.copy( cubeUps[ face ] ); + shadowCamera.lookAt( _lookTarget ); + shadowCamera.updateMatrixWorld(); + + var vpDimensions = cube2DViewPorts[ face ]; + _state.viewport( vpDimensions ); + + } + + // update camera matrices and frustum + + _projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); + _frustum.setFromMatrix( _projScreenMatrix ); + + // set object matrices & frustum culling + + renderObject( scene, camera, shadowCamera, isPointLight ); + + } + + } + + scope.needsUpdate = false; + + }; + + function getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) { + + var geometry = object.geometry; + + var result = null; + + var materialVariants = _depthMaterials; + var customMaterial = object.customDepthMaterial; + + if ( isPointLight ) { + + materialVariants = _distanceMaterials; + customMaterial = object.customDistanceMaterial; + + } + + if ( ! customMaterial ) { + + var useMorphing = false; + + if ( material.morphTargets ) { + + if ( geometry && geometry.isBufferGeometry ) { + + useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; + + } else if ( geometry && geometry.isGeometry ) { + + useMorphing = geometry.morphTargets && geometry.morphTargets.length > 0; + + } + + } + + if ( object.isSkinnedMesh && material.skinning === false ) { + + console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); + + } + + var useSkinning = object.isSkinnedMesh && material.skinning; + + var variantIndex = 0; + + if ( useMorphing ) variantIndex |= _MorphingFlag; + if ( useSkinning ) variantIndex |= _SkinningFlag; + + result = materialVariants[ variantIndex ]; + + } else { + + result = customMaterial; + + } + + if ( _renderer.localClippingEnabled && + material.clipShadows === true && + material.clippingPlanes.length !== 0 ) { + + // in this case we need a unique material instance reflecting the + // appropriate state + + var keyA = result.uuid, keyB = material.uuid; + + var materialsForVariant = _materialCache[ keyA ]; + + if ( materialsForVariant === undefined ) { + + materialsForVariant = {}; + _materialCache[ keyA ] = materialsForVariant; + + } + + var cachedMaterial = materialsForVariant[ keyB ]; + + if ( cachedMaterial === undefined ) { + + cachedMaterial = result.clone(); + materialsForVariant[ keyB ] = cachedMaterial; + + } + + result = cachedMaterial; + + } + + result.visible = material.visible; + result.wireframe = material.wireframe; + + var side = material.side; + + if ( scope.renderSingleSided && side == DoubleSide ) { + + side = FrontSide; + + } + + if ( scope.renderReverseSided ) { + + if ( side === FrontSide ) side = BackSide; + else if ( side === BackSide ) side = FrontSide; + + } + + result.side = side; + + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + + if ( isPointLight && result.isMeshDistanceMaterial ) { + + result.referencePosition.copy( lightPositionWorld ); + result.nearDistance = shadowCameraNear; + result.farDistance = shadowCameraFar; + + } + + return result; + + } + + function renderObject( object, camera, shadowCamera, isPointLight ) { + + if ( object.visible === false ) return; + + var visible = object.layers.test( camera.layers ); + + if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { + + if ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { + + object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); + + var geometry = _objects.update( object ); + var material = object.material; + + if ( Array.isArray( material ) ) { + + var groups = geometry.groups; + + for ( var k = 0, kl = groups.length; k < kl; k ++ ) { + + var group = groups[ k ]; + var groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far ); + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); + + } + + } + + } else if ( material.visible ) { + + var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far ); + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); + + } + + } + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + renderObject( children[ i ], camera, shadowCamera, isPointLight ); + + } + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLAttributes( gl ) { + + var buffers = {}; + + function createBuffer( attribute, bufferType ) { + + var array = attribute.array; + var usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW; + + var buffer = gl.createBuffer(); + + gl.bindBuffer( bufferType, buffer ); + gl.bufferData( bufferType, array, usage ); + + attribute.onUploadCallback(); + + var type = gl.FLOAT; + + if ( array instanceof Float32Array ) { + + type = gl.FLOAT; + + } else if ( array instanceof Float64Array ) { + + console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); + + } else if ( array instanceof Uint16Array ) { + + type = gl.UNSIGNED_SHORT; + + } else if ( array instanceof Int16Array ) { + + type = gl.SHORT; + + } else if ( array instanceof Uint32Array ) { + + type = gl.UNSIGNED_INT; + + } else if ( array instanceof Int32Array ) { + + type = gl.INT; + + } else if ( array instanceof Int8Array ) { + + type = gl.BYTE; + + } else if ( array instanceof Uint8Array ) { + + type = gl.UNSIGNED_BYTE; + + } + + return { + buffer: buffer, + type: type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version + }; + + } + + function updateBuffer( buffer, attribute, bufferType ) { + + var array = attribute.array; + var updateRange = attribute.updateRange; + + gl.bindBuffer( bufferType, buffer ); + + if ( attribute.dynamic === false ) { + + gl.bufferData( bufferType, array, gl.STATIC_DRAW ); + + } else if ( updateRange.count === - 1 ) { + + // Not using update ranges + + gl.bufferSubData( bufferType, 0, array ); + + } else if ( updateRange.count === 0 ) { + + console.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' ); + + } else { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); + + updateRange.count = -1; // reset range + + } + + } + + // + + function get( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + return buffers[ attribute.uuid ]; + + } + + function remove( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + var data = buffers[ attribute.uuid ]; + + if ( data ) { + + gl.deleteBuffer( data.buffer ); + + delete buffers[ attribute.uuid ]; + + } + + } + + function update( attribute, bufferType ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + var data = buffers[ attribute.uuid ]; + + if ( data === undefined ) { + + buffers[ attribute.uuid ] = createBuffer( attribute, bufferType ); + + } else if ( data.version < attribute.version ) { + + updateBuffer( data.buffer, attribute, bufferType ); + + data.version = attribute.version; + + } + + } + + return { + + get: get, + remove: remove, + update: update + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + */ + +function Euler( x, y, z, order ) { + + this._x = x || 0; + this._y = y || 0; + this._z = z || 0; + this._order = order || Euler.DefaultOrder; + +} + +Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; + +Euler.DefaultOrder = 'XYZ'; + +Object.defineProperties( Euler.prototype, { + + x: { + + get: function () { + + return this._x; + + }, + + set: function ( value ) { + + this._x = value; + this.onChangeCallback(); + + } + + }, + + y: { + + get: function () { + + return this._y; + + }, + + set: function ( value ) { + + this._y = value; + this.onChangeCallback(); + + } + + }, + + z: { + + get: function () { + + return this._z; + + }, + + set: function ( value ) { + + this._z = value; + this.onChangeCallback(); + + } + + }, + + order: { + + get: function () { + + return this._order; + + }, + + set: function ( value ) { + + this._order = value; + this.onChangeCallback(); + + } + + } + +} ); + +Object.assign( Euler.prototype, { + + isEuler: true, + + set: function ( x, y, z, order ) { + + this._x = x; + this._y = y; + this._z = z; + this._order = order || this._order; + + this.onChangeCallback(); + + return this; + + }, + + clone: function () { + + return new this.constructor( this._x, this._y, this._z, this._order ); + + }, + + copy: function ( euler ) { + + this._x = euler._x; + this._y = euler._y; + this._z = euler._z; + this._order = euler._order; + + this.onChangeCallback(); + + return this; + + }, + + setFromRotationMatrix: function ( m, order, update ) { + + var clamp = _Math.clamp; + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements; + var m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; + var m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; + var m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + order = order || this._order; + + if ( order === 'XYZ' ) { + + this._y = Math.asin( clamp( m13, - 1, 1 ) ); + + if ( Math.abs( m13 ) < 0.99999 ) { + + this._x = Math.atan2( - m23, m33 ); + this._z = Math.atan2( - m12, m11 ); + + } else { + + this._x = Math.atan2( m32, m22 ); + this._z = 0; + + } + + } else if ( order === 'YXZ' ) { + + this._x = Math.asin( - clamp( m23, - 1, 1 ) ); + + if ( Math.abs( m23 ) < 0.99999 ) { + + this._y = Math.atan2( m13, m33 ); + this._z = Math.atan2( m21, m22 ); + + } else { + + this._y = Math.atan2( - m31, m11 ); + this._z = 0; + + } + + } else if ( order === 'ZXY' ) { + + this._x = Math.asin( clamp( m32, - 1, 1 ) ); + + if ( Math.abs( m32 ) < 0.99999 ) { + + this._y = Math.atan2( - m31, m33 ); + this._z = Math.atan2( - m12, m22 ); + + } else { + + this._y = 0; + this._z = Math.atan2( m21, m11 ); + + } + + } else if ( order === 'ZYX' ) { + + this._y = Math.asin( - clamp( m31, - 1, 1 ) ); + + if ( Math.abs( m31 ) < 0.99999 ) { + + this._x = Math.atan2( m32, m33 ); + this._z = Math.atan2( m21, m11 ); + + } else { + + this._x = 0; + this._z = Math.atan2( - m12, m22 ); + + } + + } else if ( order === 'YZX' ) { + + this._z = Math.asin( clamp( m21, - 1, 1 ) ); + + if ( Math.abs( m21 ) < 0.99999 ) { + + this._x = Math.atan2( - m23, m22 ); + this._y = Math.atan2( - m31, m11 ); + + } else { + + this._x = 0; + this._y = Math.atan2( m13, m33 ); + + } + + } else if ( order === 'XZY' ) { + + this._z = Math.asin( - clamp( m12, - 1, 1 ) ); + + if ( Math.abs( m12 ) < 0.99999 ) { + + this._x = Math.atan2( m32, m22 ); + this._y = Math.atan2( m13, m11 ); + + } else { + + this._x = Math.atan2( - m23, m33 ); + this._y = 0; + + } + + } else { + + console.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order ); + + } + + this._order = order; + + if ( update !== false ) this.onChangeCallback(); + + return this; + + }, + + setFromQuaternion: function () { + + var matrix = new Matrix4(); + + return function setFromQuaternion( q, order, update ) { + + matrix.makeRotationFromQuaternion( q ); + + return this.setFromRotationMatrix( matrix, order, update ); + + }; + + }(), + + setFromVector3: function ( v, order ) { + + return this.set( v.x, v.y, v.z, order || this._order ); + + }, + + reorder: function () { + + // WARNING: this discards revolution information -bhouston + + var q = new Quaternion(); + + return function reorder( newOrder ) { + + q.setFromEuler( this ); + + return this.setFromQuaternion( q, newOrder ); + + }; + + }(), + + equals: function ( euler ) { + + return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); + + }, + + fromArray: function ( array ) { + + this._x = array[ 0 ]; + this._y = array[ 1 ]; + this._z = array[ 2 ]; + if ( array[ 3 ] !== undefined ) this._order = array[ 3 ]; + + this.onChangeCallback(); + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._order; + + return array; + + }, + + toVector3: function ( optionalResult ) { + + if ( optionalResult ) { + + return optionalResult.set( this._x, this._y, this._z ); + + } else { + + return new Vector3( this._x, this._y, this._z ); + + } + + }, + + onChange: function ( callback ) { + + this.onChangeCallback = callback; + + return this; + + }, + + onChangeCallback: function () {} + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Layers() { + + this.mask = 1 | 0; + +} + +Object.assign( Layers.prototype, { + + set: function ( channel ) { + + this.mask = 1 << channel | 0; + + }, + + enable: function ( channel ) { + + this.mask |= 1 << channel | 0; + + }, + + toggle: function ( channel ) { + + this.mask ^= 1 << channel | 0; + + }, + + disable: function ( channel ) { + + this.mask &= ~ ( 1 << channel | 0 ); + + }, + + test: function ( layers ) { + + return ( this.mask & layers.mask ) !== 0; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author elephantatwork / www.elephantatwork.ch + */ + +var object3DId = 0; + +function Object3D() { + + Object.defineProperty( this, 'id', { value: object3DId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Object3D'; + + this.parent = null; + this.children = []; + + this.up = Object3D.DefaultUp.clone(); + + var position = new Vector3(); + var rotation = new Euler(); + var quaternion = new Quaternion(); + var scale = new Vector3( 1, 1, 1 ); + + function onRotationChange() { + + quaternion.setFromEuler( rotation, false ); + + } + + function onQuaternionChange() { + + rotation.setFromQuaternion( quaternion, undefined, false ); + + } + + rotation.onChange( onRotationChange ); + quaternion.onChange( onQuaternionChange ); + + Object.defineProperties( this, { + position: { + enumerable: true, + value: position + }, + rotation: { + enumerable: true, + value: rotation + }, + quaternion: { + enumerable: true, + value: quaternion + }, + scale: { + enumerable: true, + value: scale + }, + modelViewMatrix: { + value: new Matrix4() + }, + normalMatrix: { + value: new Matrix3() + } + } ); + + this.matrix = new Matrix4(); + this.matrixWorld = new Matrix4(); + + this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate; + this.matrixWorldNeedsUpdate = false; + + this.layers = new Layers(); + this.visible = true; + + this.castShadow = false; + this.receiveShadow = false; + + this.frustumCulled = true; + this.renderOrder = 0; + + this.userData = {}; +} + +Object3D.DefaultUp = new Vector3( 0, 1, 0 ); +Object3D.DefaultMatrixAutoUpdate = true; + +Object.assign( Object3D.prototype, EventDispatcher.prototype, { + + isObject3D: true, + + onBeforeRender: function () {}, + onAfterRender: function () {}, + + applyMatrix: function ( matrix ) { + + this.matrix.multiplyMatrices( matrix, this.matrix ); + + this.matrix.decompose( this.position, this.quaternion, this.scale ); + + }, + + applyQuaternion: function ( q ) { + + this.quaternion.premultiply( q ); + + return this; + + }, + + setRotationFromAxisAngle: function ( axis, angle ) { + + // assumes axis is normalized + + this.quaternion.setFromAxisAngle( axis, angle ); + + }, + + setRotationFromEuler: function ( euler ) { + + this.quaternion.setFromEuler( euler, true ); + + }, + + setRotationFromMatrix: function ( m ) { + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + this.quaternion.setFromRotationMatrix( m ); + + }, + + setRotationFromQuaternion: function ( q ) { + + // assumes q is normalized + + this.quaternion.copy( q ); + + }, + + rotateOnAxis: function () { + + // rotate object on axis in object space + // axis is assumed to be normalized + + var q1 = new Quaternion(); + + return function rotateOnAxis( axis, angle ) { + + q1.setFromAxisAngle( axis, angle ); + + this.quaternion.multiply( q1 ); + + return this; + + }; + + }(), + + rotateX: function () { + + var v1 = new Vector3( 1, 0, 0 ); + + return function rotateX( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + rotateY: function () { + + var v1 = new Vector3( 0, 1, 0 ); + + return function rotateY( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + rotateZ: function () { + + var v1 = new Vector3( 0, 0, 1 ); + + return function rotateZ( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + translateOnAxis: function () { + + // translate object by distance along axis in object space + // axis is assumed to be normalized + + var v1 = new Vector3(); + + return function translateOnAxis( axis, distance ) { + + v1.copy( axis ).applyQuaternion( this.quaternion ); + + this.position.add( v1.multiplyScalar( distance ) ); + + return this; + + }; + + }(), + + translateX: function () { + + var v1 = new Vector3( 1, 0, 0 ); + + return function translateX( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + translateY: function () { + + var v1 = new Vector3( 0, 1, 0 ); + + return function translateY( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + translateZ: function () { + + var v1 = new Vector3( 0, 0, 1 ); + + return function translateZ( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + localToWorld: function ( vector ) { + + return vector.applyMatrix4( this.matrixWorld ); + + }, + + worldToLocal: function () { + + var m1 = new Matrix4(); + + return function worldToLocal( vector ) { + + return vector.applyMatrix4( m1.getInverse( this.matrixWorld ) ); + + }; + + }(), + + lookAt: function () { + + // This method does not support objects with rotated and/or translated parent(s) + + var m1 = new Matrix4(); + + return function lookAt( vector ) { + + if ( this.isCamera ) { + + m1.lookAt( this.position, vector, this.up ); + + } else { + + m1.lookAt( vector, this.position, this.up ); + + } + + this.quaternion.setFromRotationMatrix( m1 ); + + }; + + }(), + + add: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.add( arguments[ i ] ); + + } + + return this; + + } + + if ( object === this ) { + + console.error( "THREE.Object3D.add: object can't be added as a child of itself.", object ); + return this; + + } + + if ( ( object && object.isObject3D ) ) { + + if ( object.parent !== null ) { + + object.parent.remove( object ); + + } + + object.parent = this; + object.dispatchEvent( { type: 'added' } ); + + this.children.push( object ); + + } else { + + console.error( "THREE.Object3D.add: object not an instance of THREE.Object3D.", object ); + + } + + return this; + + }, + + remove: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.remove( arguments[ i ] ); + + } + + return this; + + } + + var index = this.children.indexOf( object ); + + if ( index !== - 1 ) { + + object.parent = null; + + object.dispatchEvent( { type: 'removed' } ); + + this.children.splice( index, 1 ); + + } + + return this; + + }, + + getObjectById: function ( id ) { + + return this.getObjectByProperty( 'id', id ); + + }, + + getObjectByName: function ( name ) { + + return this.getObjectByProperty( 'name', name ); + + }, + + getObjectByProperty: function ( name, value ) { + + if ( this[ name ] === value ) return this; + + for ( var i = 0, l = this.children.length; i < l; i ++ ) { + + var child = this.children[ i ]; + var object = child.getObjectByProperty( name, value ); + + if ( object !== undefined ) { + + return object; + + } + + } + + return undefined; + + }, + + getWorldPosition: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.updateMatrixWorld( true ); + + return result.setFromMatrixPosition( this.matrixWorld ); + + }, + + getWorldQuaternion: function () { + + var position = new Vector3(); + var scale = new Vector3(); + + return function getWorldQuaternion( optionalTarget ) { + + var result = optionalTarget || new Quaternion(); + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( position, result, scale ); + + return result; + + }; + + }(), + + getWorldRotation: function () { + + var quaternion = new Quaternion(); + + return function getWorldRotation( optionalTarget ) { + + var result = optionalTarget || new Euler(); + + this.getWorldQuaternion( quaternion ); + + return result.setFromQuaternion( quaternion, this.rotation.order, false ); + + }; + + }(), + + getWorldScale: function () { + + var position = new Vector3(); + var quaternion = new Quaternion(); + + return function getWorldScale( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( position, quaternion, result ); + + return result; + + }; + + }(), + + getWorldDirection: function () { + + var quaternion = new Quaternion(); + + return function getWorldDirection( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.getWorldQuaternion( quaternion ); + + return result.set( 0, 0, 1 ).applyQuaternion( quaternion ); + + }; + + }(), + + raycast: function () {}, + + traverse: function ( callback ) { + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverse( callback ); + + } + + }, + + traverseVisible: function ( callback ) { + + if ( this.visible === false ) return; + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverseVisible( callback ); + + } + + }, + + traverseAncestors: function ( callback ) { + + var parent = this.parent; + + if ( parent !== null ) { + + callback( parent ); + + parent.traverseAncestors( callback ); + + } + + }, + + updateMatrix: function () { + + this.matrix.compose( this.position, this.quaternion, this.scale ); + + this.matrixWorldNeedsUpdate = true; + + }, + + updateMatrixWorld: function ( force ) { + + if ( this.matrixAutoUpdate ) this.updateMatrix(); + + if ( this.matrixWorldNeedsUpdate || force ) { + + if ( this.parent === null ) { + + this.matrixWorld.copy( this.matrix ); + + } else { + + this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); + + } + + this.matrixWorldNeedsUpdate = false; + + force = true; + + } + + // update children + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( force ); + + } + + }, + + toJSON: function ( meta ) { + + // meta is '' when called from JSON.stringify + var isRootObject = ( meta === undefined || meta === '' ); + + var output = {}; + + // meta is a hash used to collect geometries, materials. + // not providing it implies that this is the root object + // being serialized. + if ( isRootObject ) { + + // initialize meta obj + meta = { + geometries: {}, + materials: {}, + textures: {}, + images: {} + }; + + output.metadata = { + version: 4.5, + type: 'Object', + generator: 'Object3D.toJSON' + }; + + } + + // standard Object3D serialization + + var object = {}; + + object.uuid = this.uuid; + object.type = this.type; + + if ( this.name !== '' ) object.name = this.name; + if ( this.castShadow === true ) object.castShadow = true; + if ( this.receiveShadow === true ) object.receiveShadow = true; + if ( this.visible === false ) object.visible = false; + if ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; + + object.matrix = this.matrix.toArray(); + + // + + function serialize( library, element ) { + + if ( library[ element.uuid ] === undefined ) { + + library[ element.uuid ] = element.toJSON( meta ); + + } + + return element.uuid; + + } + + if ( this.geometry !== undefined ) { + + object.geometry = serialize( meta.geometries, this.geometry ); + + } + + if ( this.material !== undefined ) { + + if ( Array.isArray( this.material ) ) { + + var uuids = []; + + for ( var i = 0, l = this.material.length; i < l; i ++ ) { + + uuids.push( serialize( meta.materials, this.material[ i ] ) ); + + } + + object.material = uuids; + + } else { + + object.material = serialize( meta.materials, this.material ); + + } + + } + + // + + if ( this.children.length > 0 ) { + + object.children = []; + + for ( var i = 0; i < this.children.length; i ++ ) { + + object.children.push( this.children[ i ].toJSON( meta ).object ); + + } + + } + + if ( isRootObject ) { + + var geometries = extractFromCache( meta.geometries ); + var materials = extractFromCache( meta.materials ); + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + + if ( geometries.length > 0 ) output.geometries = geometries; + if ( materials.length > 0 ) output.materials = materials; + if ( textures.length > 0 ) output.textures = textures; + if ( images.length > 0 ) output.images = images; + + } + + output.object = object; + + return output; + + // extract data from the cache hash + // remove metadata on each item + // and return as array + function extractFromCache( cache ) { + + var values = []; + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + return values; + + } + + }, + + clone: function ( recursive ) { + + return new this.constructor().copy( this, recursive ); + + }, + + copy: function ( source, recursive ) { + + if ( recursive === undefined ) recursive = true; + + this.name = source.name; + + this.up.copy( source.up ); + + this.position.copy( source.position ); + this.quaternion.copy( source.quaternion ); + this.scale.copy( source.scale ); + + this.matrix.copy( source.matrix ); + this.matrixWorld.copy( source.matrixWorld ); + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; + + this.layers.mask = source.layers.mask; + this.visible = source.visible; + + this.castShadow = source.castShadow; + this.receiveShadow = source.receiveShadow; + + this.frustumCulled = source.frustumCulled; + this.renderOrder = source.renderOrder; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + if ( recursive === true ) { + + for ( var i = 0; i < source.children.length; i ++ ) { + + var child = source.children[ i ]; + this.add( child.clone() ); + + } + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + * @author WestLangley / http://github.com/WestLangley +*/ + +function Camera() { + + Object3D.call( this ); + + this.type = 'Camera'; + + this.matrixWorldInverse = new Matrix4(); + this.projectionMatrix = new Matrix4(); + +} + +Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Camera, + + isCamera: true, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + this.matrixWorldInverse.copy( source.matrixWorldInverse ); + this.projectionMatrix.copy( source.projectionMatrix ); + + return this; + + }, + + getWorldDirection: function () { + + var quaternion = new Quaternion(); + + return function getWorldDirection( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.getWorldQuaternion( quaternion ); + + return result.set( 0, 0, - 1 ).applyQuaternion( quaternion ); + + }; + + }(), + + updateMatrixWorld: function ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + this.matrixWorldInverse.getInverse( this.matrixWorld ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author arose / http://github.com/arose + */ + +function OrthographicCamera( left, right, top, bottom, near, far ) { + + Camera.call( this ); + + this.type = 'OrthographicCamera'; + + this.zoom = 1; + this.view = null; + + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + + this.near = ( near !== undefined ) ? near : 0.1; + this.far = ( far !== undefined ) ? far : 2000; + + this.updateProjectionMatrix(); + +} + +OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: OrthographicCamera, + + isOrthographicCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + return this; + + }, + + setViewOffset: function( fullWidth, fullHeight, x, y, width, height ) { + + this.view = { + fullWidth: fullWidth, + fullHeight: fullHeight, + offsetX: x, + offsetY: y, + width: width, + height: height + }; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function() { + + this.view = null; + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var dx = ( this.right - this.left ) / ( 2 * this.zoom ); + var dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); + var cx = ( this.right + this.left ) / 2; + var cy = ( this.top + this.bottom ) / 2; + + var left = cx - dx; + var right = cx + dx; + var top = cy + dy; + var bottom = cy - dy; + + if ( this.view !== null ) { + + var zoomW = this.zoom / ( this.view.width / this.view.fullWidth ); + var zoomH = this.zoom / ( this.view.height / this.view.fullHeight ); + var scaleW = ( this.right - this.left ) / this.view.width; + var scaleH = ( this.top - this.bottom ) / this.view.height; + + left += scaleW * ( this.view.offsetX / zoomW ); + right = left + scaleW * ( this.view.width / zoomW ); + top -= scaleH * ( this.view.offsetY / zoomH ); + bottom = top - scaleH * ( this.view.height / zoomH ); + + } + + this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + return data; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author greggman / http://games.greggman.com/ + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author tschw + */ + +function PerspectiveCamera( fov, aspect, near, far ) { + + Camera.call( this ); + + this.type = 'PerspectiveCamera'; + + this.fov = fov !== undefined ? fov : 50; + this.zoom = 1; + + this.near = near !== undefined ? near : 0.1; + this.far = far !== undefined ? far : 2000; + this.focus = 10; + + this.aspect = aspect !== undefined ? aspect : 1; + this.view = null; + + this.filmGauge = 35; // width of the film (default in millimeters) + this.filmOffset = 0; // horizontal film offset (same unit as gauge) + + this.updateProjectionMatrix(); + +} + +PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: PerspectiveCamera, + + isPerspectiveCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.fov = source.fov; + this.zoom = source.zoom; + + this.near = source.near; + this.far = source.far; + this.focus = source.focus; + + this.aspect = source.aspect; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + this.filmGauge = source.filmGauge; + this.filmOffset = source.filmOffset; + + return this; + + }, + + /** + * Sets the FOV by focal length in respect to the current .filmGauge. + * + * The default film gauge is 35, so that the focal length can be specified for + * a 35mm (full frame) camera. + * + * Values for focal length and film gauge must have the same unit. + */ + setFocalLength: function ( focalLength ) { + + // see http://www.bobatkins.com/photography/technical/field_of_view.html + var vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + + this.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope ); + this.updateProjectionMatrix(); + + }, + + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength: function () { + + var vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov ); + + return 0.5 * this.getFilmHeight() / vExtentSlope; + + }, + + getEffectiveFOV: function () { + + return _Math.RAD2DEG * 2 * Math.atan( + Math.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom ); + + }, + + getFilmWidth: function () { + + // film not completely covered in portrait format (aspect < 1) + return this.filmGauge * Math.min( this.aspect, 1 ); + + }, + + getFilmHeight: function () { + + // film not completely covered in landscape format (aspect > 1) + return this.filmGauge / Math.max( this.aspect, 1 ); + + }, + + /** + * Sets an offset in a larger frustum. This is useful for multi-window or + * multi-monitor/multi-machine setups. + * + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and + * the monitors are in grid like this + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this + * + * var w = 1920; + * var h = 1080; + * var fullWidth = w * 3; + * var fullHeight = h * 2; + * + * --A-- + * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * --B-- + * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * --C-- + * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * --D-- + * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * --E-- + * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * --F-- + * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); + * + * Note there is no reason monitors have to be the same size or in a grid. + */ + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + this.aspect = fullWidth / fullHeight; + + this.view = { + fullWidth: fullWidth, + fullHeight: fullHeight, + offsetX: x, + offsetY: y, + width: width, + height: height + }; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + this.view = null; + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var near = this.near, + top = near * Math.tan( + _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom, + height = 2 * top, + width = this.aspect * height, + left = - 0.5 * width, + view = this.view; + + if ( view !== null ) { + + var fullWidth = view.fullWidth, + fullHeight = view.fullHeight; + + left += view.offsetX * width / fullWidth; + top -= view.offsetY * height / fullHeight; + width *= view.width / fullWidth; + height *= view.height / fullHeight; + + } + + var skew = this.filmOffset; + if ( skew !== 0 ) left += near * skew / this.getFilmWidth(); + + this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.fov = this.fov; + data.object.zoom = this.zoom; + + data.object.near = this.near; + data.object.far = this.far; + data.object.focus = this.focus; + + data.object.aspect = this.aspect; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + data.object.filmGauge = this.filmGauge; + data.object.filmOffset = this.filmOffset; + + return data; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Face3( a, b, c, normal, color, materialIndex ) { + + this.a = a; + this.b = b; + this.c = c; + + this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); + this.vertexNormals = Array.isArray( normal ) ? normal : []; + + this.color = ( color && color.isColor ) ? color : new Color(); + this.vertexColors = Array.isArray( color ) ? color : []; + + this.materialIndex = materialIndex !== undefined ? materialIndex : 0; + +} + +Object.assign( Face3.prototype, { + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.a = source.a; + this.b = source.b; + this.c = source.c; + + this.normal.copy( source.normal ); + this.color.copy( source.color ); + + this.materialIndex = source.materialIndex; + + for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) { + + this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); + + } + + for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) { + + this.vertexColors[ i ] = source.vertexColors[ i ].clone(); + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author kile / http://kile.stravaganza.org/ + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author bhouston / http://clara.io + */ + +var count = 0; +function GeometryIdCount() { return count++; } + +function Geometry() { + + Object.defineProperty( this, 'id', { value: GeometryIdCount() } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Geometry'; + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + + this.morphTargets = []; + this.morphNormals = []; + + this.skinWeights = []; + this.skinIndices = []; + + this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.elementsNeedUpdate = false; + this.verticesNeedUpdate = false; + this.uvsNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.lineDistancesNeedUpdate = false; + this.groupsNeedUpdate = false; + +} + +Object.assign( Geometry.prototype, EventDispatcher.prototype, { + + isGeometry: true, + + applyMatrix: function ( matrix ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + for ( var i = 0, il = this.vertices.length; i < il; i ++ ) { + + var vertex = this.vertices[ i ]; + vertex.applyMatrix4( matrix ); + + } + + for ( var i = 0, il = this.faces.length; i < il; i ++ ) { + + var face = this.faces[ i ]; + face.normal.applyMatrix3( normalMatrix ).normalize(); + + for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); + + } + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + this.verticesNeedUpdate = true; + this.normalsNeedUpdate = true; + + return this; + + }, + + rotateX: function () { + + // rotate geometry around world x-axis + + var m1 = new Matrix4(); + + return function rotateX( angle ) { + + m1.makeRotationX( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateY: function () { + + // rotate geometry around world y-axis + + var m1 = new Matrix4(); + + return function rotateY( angle ) { + + m1.makeRotationY( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateZ: function () { + + // rotate geometry around world z-axis + + var m1 = new Matrix4(); + + return function rotateZ( angle ) { + + m1.makeRotationZ( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + translate: function () { + + // translate geometry + + var m1 = new Matrix4(); + + return function translate( x, y, z ) { + + m1.makeTranslation( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + scale: function () { + + // scale geometry + + var m1 = new Matrix4(); + + return function scale( x, y, z ) { + + m1.makeScale( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + lookAt: function () { + + var obj = new Object3D(); + + return function lookAt( vector ) { + + obj.lookAt( vector ); + + obj.updateMatrix(); + + this.applyMatrix( obj.matrix ); + + }; + + }(), + + fromBufferGeometry: function ( geometry ) { + + var scope = this; + + var indices = geometry.index !== null ? geometry.index.array : undefined; + var attributes = geometry.attributes; + + var positions = attributes.position.array; + var normals = attributes.normal !== undefined ? attributes.normal.array : undefined; + var colors = attributes.color !== undefined ? attributes.color.array : undefined; + var uvs = attributes.uv !== undefined ? attributes.uv.array : undefined; + var uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined; + + if ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = []; + + var tempNormals = []; + var tempUVs = []; + var tempUVs2 = []; + + for ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) { + + scope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) ); + + if ( normals !== undefined ) { + + tempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) ); + + } + + if ( colors !== undefined ) { + + scope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) ); + + } + + if ( uvs !== undefined ) { + + tempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) ); + + } + + if ( uvs2 !== undefined ) { + + tempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) ); + + } + + } + + function addFace( a, b, c, materialIndex ) { + + var vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : []; + var vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : []; + + var face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); + + scope.faces.push( face ); + + if ( uvs !== undefined ) { + + scope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] ); + + } + + if ( uvs2 !== undefined ) { + + scope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] ); + + } + + } + + var groups = geometry.groups; + + if ( groups.length > 0 ) { + + for ( var i = 0; i < groups.length; i ++ ) { + + var group = groups[ i ]; + + var start = group.start; + var count = group.count; + + for ( var j = start, jl = start + count; j < jl; j += 3 ) { + + if ( indices !== undefined ) { + + addFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex ); + + } else { + + addFace( j, j + 1, j + 2, group.materialIndex ); + + } + + } + + } + + } else { + + if ( indices !== undefined ) { + + for ( var i = 0; i < indices.length; i += 3 ) { + + addFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] ); + + } + + } else { + + for ( var i = 0; i < positions.length / 3; i += 3 ) { + + addFace( i, i + 1, i + 2 ); + + } + + } + + } + + this.computeFaceNormals(); + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + var offset = this.boundingBox.getCenter().negate(); + + this.translate( offset.x, offset.y, offset.z ); + + return offset; + + }, + + normalize: function () { + + this.computeBoundingSphere(); + + var center = this.boundingSphere.center; + var radius = this.boundingSphere.radius; + + var s = radius === 0 ? 1 : 1.0 / radius; + + var matrix = new Matrix4(); + matrix.set( + s, 0, 0, - s * center.x, + 0, s, 0, - s * center.y, + 0, 0, s, - s * center.z, + 0, 0, 0, 1 + ); + + this.applyMatrix( matrix ); + + return this; + + }, + + computeFaceNormals: function () { + + var cb = new Vector3(), ab = new Vector3(); + + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { + + var face = this.faces[ f ]; + + var vA = this.vertices[ face.a ]; + var vB = this.vertices[ face.b ]; + var vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + cb.normalize(); + + face.normal.copy( cb ); + + } + + }, + + computeVertexNormals: function ( areaWeighted ) { + + if ( areaWeighted === undefined ) areaWeighted = true; + + var v, vl, f, fl, face, vertices; + + vertices = new Array( this.vertices.length ); + + for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ] = new Vector3(); + + } + + if ( areaWeighted ) { + + // vertex normals weighted by triangle areas + // http://www.iquilezles.org/www/articles/normals/normals.htm + + var vA, vB, vC; + var cb = new Vector3(), ab = new Vector3(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + vA = this.vertices[ face.a ]; + vB = this.vertices[ face.b ]; + vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + vertices[ face.a ].add( cb ); + vertices[ face.b ].add( cb ); + vertices[ face.c ].add( cb ); + + } + + } else { + + this.computeFaceNormals(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + vertices[ face.a ].add( face.normal ); + vertices[ face.b ].add( face.normal ); + vertices[ face.c ].add( face.normal ); + + } + + } + + for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ].normalize(); + + } + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( vertices[ face.a ] ); + vertexNormals[ 1 ].copy( vertices[ face.b ] ); + vertexNormals[ 2 ].copy( vertices[ face.c ] ); + + } else { + + vertexNormals[ 0 ] = vertices[ face.a ].clone(); + vertexNormals[ 1 ] = vertices[ face.b ].clone(); + vertexNormals[ 2 ] = vertices[ face.c ].clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeFlatVertexNormals: function () { + + var f, fl, face; + + this.computeFaceNormals(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( face.normal ); + vertexNormals[ 1 ].copy( face.normal ); + vertexNormals[ 2 ].copy( face.normal ); + + } else { + + vertexNormals[ 0 ] = face.normal.clone(); + vertexNormals[ 1 ] = face.normal.clone(); + vertexNormals[ 2 ] = face.normal.clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeMorphNormals: function () { + + var i, il, f, fl, face; + + // save original normals + // - create temp variables on first access + // otherwise just copy (for faster repeated calls) + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + if ( ! face.__originalFaceNormal ) { + + face.__originalFaceNormal = face.normal.clone(); + + } else { + + face.__originalFaceNormal.copy( face.normal ); + + } + + if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; + + for ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) { + + if ( ! face.__originalVertexNormals[ i ] ) { + + face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); + + } else { + + face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); + + } + + } + + } + + // use temp geometry to compute face and vertex normals for each morph + + var tmpGeo = new Geometry(); + tmpGeo.faces = this.faces; + + for ( i = 0, il = this.morphTargets.length; i < il; i ++ ) { + + // create on first access + + if ( ! this.morphNormals[ i ] ) { + + this.morphNormals[ i ] = {}; + this.morphNormals[ i ].faceNormals = []; + this.morphNormals[ i ].vertexNormals = []; + + var dstNormalsFace = this.morphNormals[ i ].faceNormals; + var dstNormalsVertex = this.morphNormals[ i ].vertexNormals; + + var faceNormal, vertexNormals; + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + faceNormal = new Vector3(); + vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; + + dstNormalsFace.push( faceNormal ); + dstNormalsVertex.push( vertexNormals ); + + } + + } + + var morphNormals = this.morphNormals[ i ]; + + // set vertices to morph target + + tmpGeo.vertices = this.morphTargets[ i ].vertices; + + // compute morph normals + + tmpGeo.computeFaceNormals(); + tmpGeo.computeVertexNormals(); + + // store morph normals + + var faceNormal, vertexNormals; + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + faceNormal = morphNormals.faceNormals[ f ]; + vertexNormals = morphNormals.vertexNormals[ f ]; + + faceNormal.copy( face.normal ); + + vertexNormals.a.copy( face.vertexNormals[ 0 ] ); + vertexNormals.b.copy( face.vertexNormals[ 1 ] ); + vertexNormals.c.copy( face.vertexNormals[ 2 ] ); + + } + + } + + // restore original normals + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + face.normal = face.__originalFaceNormal; + face.vertexNormals = face.__originalVertexNormals; + + } + + }, + + computeLineDistances: function () { + + var d = 0; + var vertices = this.vertices; + + for ( var i = 0, il = vertices.length; i < il; i ++ ) { + + if ( i > 0 ) { + + d += vertices[ i ].distanceTo( vertices[ i - 1 ] ); + + } + + this.lineDistances[ i ] = d; + + } + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + this.boundingBox.setFromPoints( this.vertices ); + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + this.boundingSphere.setFromPoints( this.vertices ); + + }, + + merge: function ( geometry, matrix, materialIndexOffset ) { + + if ( ! ( geometry && geometry.isGeometry ) ) { + + console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); + return; + + } + + var normalMatrix, + vertexOffset = this.vertices.length, + vertices1 = this.vertices, + vertices2 = geometry.vertices, + faces1 = this.faces, + faces2 = geometry.faces, + uvs1 = this.faceVertexUvs[ 0 ], + uvs2 = geometry.faceVertexUvs[ 0 ], + colors1 = this.colors, + colors2 = geometry.colors; + + if ( materialIndexOffset === undefined ) materialIndexOffset = 0; + + if ( matrix !== undefined ) { + + normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + } + + // vertices + + for ( var i = 0, il = vertices2.length; i < il; i ++ ) { + + var vertex = vertices2[ i ]; + + var vertexCopy = vertex.clone(); + + if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); + + vertices1.push( vertexCopy ); + + } + + // colors + + for ( var i = 0, il = colors2.length; i < il; i ++ ) { + + colors1.push( colors2[ i ].clone() ); + + } + + // faces + + for ( i = 0, il = faces2.length; i < il; i ++ ) { + + var face = faces2[ i ], faceCopy, normal, color, + faceVertexNormals = face.vertexNormals, + faceVertexColors = face.vertexColors; + + faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); + faceCopy.normal.copy( face.normal ); + + if ( normalMatrix !== undefined ) { + + faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); + + } + + for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { + + normal = faceVertexNormals[ j ].clone(); + + if ( normalMatrix !== undefined ) { + + normal.applyMatrix3( normalMatrix ).normalize(); + + } + + faceCopy.vertexNormals.push( normal ); + + } + + faceCopy.color.copy( face.color ); + + for ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { + + color = faceVertexColors[ j ]; + faceCopy.vertexColors.push( color.clone() ); + + } + + faceCopy.materialIndex = face.materialIndex + materialIndexOffset; + + faces1.push( faceCopy ); + + } + + // uvs + + for ( i = 0, il = uvs2.length; i < il; i ++ ) { + + var uv = uvs2[ i ], uvCopy = []; + + if ( uv === undefined ) { + + continue; + + } + + for ( var j = 0, jl = uv.length; j < jl; j ++ ) { + + uvCopy.push( uv[ j ].clone() ); + + } + + uvs1.push( uvCopy ); + + } + + }, + + mergeMesh: function ( mesh ) { + + if ( ! ( mesh && mesh.isMesh ) ) { + + console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); + return; + + } + + mesh.matrixAutoUpdate && mesh.updateMatrix(); + + this.merge( mesh.geometry, mesh.matrix ); + + }, + + /* + * Checks for duplicate vertices with hashmap. + * Duplicated vertices are removed + * and faces' vertices are updated. + */ + + mergeVertices: function () { + + var verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) + var unique = [], changes = []; + + var v, key; + var precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001 + var precision = Math.pow( 10, precisionPoints ); + var i, il, face; + var indices, j, jl; + + for ( i = 0, il = this.vertices.length; i < il; i ++ ) { + + v = this.vertices[ i ]; + key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); + + if ( verticesMap[ key ] === undefined ) { + + verticesMap[ key ] = i; + unique.push( this.vertices[ i ] ); + changes[ i ] = unique.length - 1; + + } else { + + //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); + changes[ i ] = changes[ verticesMap[ key ] ]; + + } + + } + + + // if faces are completely degenerate after merging vertices, we + // have to remove them from the geometry. + var faceIndicesToRemove = []; + + for ( i = 0, il = this.faces.length; i < il; i ++ ) { + + face = this.faces[ i ]; + + face.a = changes[ face.a ]; + face.b = changes[ face.b ]; + face.c = changes[ face.c ]; + + indices = [ face.a, face.b, face.c ]; + + // if any duplicate vertices are found in a Face3 + // we have to remove the face as nothing can be saved + for ( var n = 0; n < 3; n ++ ) { + + if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { + + faceIndicesToRemove.push( i ); + break; + + } + + } + + } + + for ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { + + var idx = faceIndicesToRemove[ i ]; + + this.faces.splice( idx, 1 ); + + for ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { + + this.faceVertexUvs[ j ].splice( idx, 1 ); + + } + + } + + // Use unique set of vertices + + var diff = this.vertices.length - unique.length; + this.vertices = unique; + return diff; + + }, + + sortFacesByMaterialIndex: function () { + + var faces = this.faces; + var length = faces.length; + + // tag faces + + for ( var i = 0; i < length; i ++ ) { + + faces[ i ]._id = i; + + } + + // sort faces + + function materialIndexSort( a, b ) { + + return a.materialIndex - b.materialIndex; + + } + + faces.sort( materialIndexSort ); + + // sort uvs + + var uvs1 = this.faceVertexUvs[ 0 ]; + var uvs2 = this.faceVertexUvs[ 1 ]; + + var newUvs1, newUvs2; + + if ( uvs1 && uvs1.length === length ) newUvs1 = []; + if ( uvs2 && uvs2.length === length ) newUvs2 = []; + + for ( var i = 0; i < length; i ++ ) { + + var id = faces[ i ]._id; + + if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); + if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); + + } + + if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; + if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'Geometry', + generator: 'Geometry.toJSON' + } + }; + + // standard Geometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + var vertices = []; + + for ( var i = 0; i < this.vertices.length; i ++ ) { + + var vertex = this.vertices[ i ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + var faces = []; + var normals = []; + var normalsHash = {}; + var colors = []; + var colorsHash = {}; + var uvs = []; + var uvsHash = {}; + + for ( var i = 0; i < this.faces.length; i ++ ) { + + var face = this.faces[ i ]; + + var hasMaterial = true; + var hasFaceUv = false; // deprecated + var hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; + var hasFaceNormal = face.normal.length() > 0; + var hasFaceVertexNormal = face.vertexNormals.length > 0; + var hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; + var hasFaceVertexColor = face.vertexColors.length > 0; + + var faceType = 0; + + faceType = setBit( faceType, 0, 0 ); // isQuad + faceType = setBit( faceType, 1, hasMaterial ); + faceType = setBit( faceType, 2, hasFaceUv ); + faceType = setBit( faceType, 3, hasFaceVertexUv ); + faceType = setBit( faceType, 4, hasFaceNormal ); + faceType = setBit( faceType, 5, hasFaceVertexNormal ); + faceType = setBit( faceType, 6, hasFaceColor ); + faceType = setBit( faceType, 7, hasFaceVertexColor ); + + faces.push( faceType ); + faces.push( face.a, face.b, face.c ); + faces.push( face.materialIndex ); + + if ( hasFaceVertexUv ) { + + var faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; + + faces.push( + getUvIndex( faceVertexUvs[ 0 ] ), + getUvIndex( faceVertexUvs[ 1 ] ), + getUvIndex( faceVertexUvs[ 2 ] ) + ); + + } + + if ( hasFaceNormal ) { + + faces.push( getNormalIndex( face.normal ) ); + + } + + if ( hasFaceVertexNormal ) { + + var vertexNormals = face.vertexNormals; + + faces.push( + getNormalIndex( vertexNormals[ 0 ] ), + getNormalIndex( vertexNormals[ 1 ] ), + getNormalIndex( vertexNormals[ 2 ] ) + ); + + } + + if ( hasFaceColor ) { + + faces.push( getColorIndex( face.color ) ); + + } + + if ( hasFaceVertexColor ) { + + var vertexColors = face.vertexColors; + + faces.push( + getColorIndex( vertexColors[ 0 ] ), + getColorIndex( vertexColors[ 1 ] ), + getColorIndex( vertexColors[ 2 ] ) + ); + + } + + } + + function setBit( value, position, enabled ) { + + return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); + + } + + function getNormalIndex( normal ) { + + var hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); + + if ( normalsHash[ hash ] !== undefined ) { + + return normalsHash[ hash ]; + + } + + normalsHash[ hash ] = normals.length / 3; + normals.push( normal.x, normal.y, normal.z ); + + return normalsHash[ hash ]; + + } + + function getColorIndex( color ) { + + var hash = color.r.toString() + color.g.toString() + color.b.toString(); + + if ( colorsHash[ hash ] !== undefined ) { + + return colorsHash[ hash ]; + + } + + colorsHash[ hash ] = colors.length; + colors.push( color.getHex() ); + + return colorsHash[ hash ]; + + } + + function getUvIndex( uv ) { + + var hash = uv.x.toString() + uv.y.toString(); + + if ( uvsHash[ hash ] !== undefined ) { + + return uvsHash[ hash ]; + + } + + uvsHash[ hash ] = uvs.length / 2; + uvs.push( uv.x, uv.y ); + + return uvsHash[ hash ]; + + } + + data.data = {}; + + data.data.vertices = vertices; + data.data.normals = normals; + if ( colors.length > 0 ) data.data.colors = colors; + if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility + data.data.faces = faces; + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + var parameters = this.parameters; + + if ( parameters !== undefined ) { + + var values = []; + + for ( var key in parameters ) { + + values.push( parameters[ key ] ); + + } + + var geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new Geometry().copy( this ); + + }, + + copy: function ( source ) { + + var i, il, j, jl, k, kl; + + // reset + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + this.morphTargets = []; + this.morphNormals = []; + this.skinWeights = []; + this.skinIndices = []; + this.lineDistances = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // vertices + + var vertices = source.vertices; + + for ( i = 0, il = vertices.length; i < il; i ++ ) { + + this.vertices.push( vertices[ i ].clone() ); + + } + + // colors + + var colors = source.colors; + + for ( i = 0, il = colors.length; i < il; i ++ ) { + + this.colors.push( colors[ i ].clone() ); + + } + + // faces + + var faces = source.faces; + + for ( i = 0, il = faces.length; i < il; i ++ ) { + + this.faces.push( faces[ i ].clone() ); + + } + + // face vertex uvs + + for ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { + + var faceVertexUvs = source.faceVertexUvs[ i ]; + + if ( this.faceVertexUvs[ i ] === undefined ) { + + this.faceVertexUvs[ i ] = []; + + } + + for ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { + + var uvs = faceVertexUvs[ j ], uvsCopy = []; + + for ( k = 0, kl = uvs.length; k < kl; k ++ ) { + + var uv = uvs[ k ]; + + uvsCopy.push( uv.clone() ); + + } + + this.faceVertexUvs[ i ].push( uvsCopy ); + + } + + } + + // morph targets + + var morphTargets = source.morphTargets; + + for ( i = 0, il = morphTargets.length; i < il; i ++ ) { + + var morphTarget = {}; + morphTarget.name = morphTargets[ i ].name; + + // vertices + + if ( morphTargets[ i ].vertices !== undefined ) { + + morphTarget.vertices = []; + + for ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) { + + morphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() ); + + } + + } + + // normals + + if ( morphTargets[ i ].normals !== undefined ) { + + morphTarget.normals = []; + + for ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) { + + morphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() ); + + } + + } + + this.morphTargets.push( morphTarget ); + + } + + // morph normals + + var morphNormals = source.morphNormals; + + for ( i = 0, il = morphNormals.length; i < il; i ++ ) { + + var morphNormal = {}; + + // vertex normals + + if ( morphNormals[ i ].vertexNormals !== undefined ) { + + morphNormal.vertexNormals = []; + + for ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) { + + var srcVertexNormal = morphNormals[ i ].vertexNormals[ j ]; + var destVertexNormal = {}; + + destVertexNormal.a = srcVertexNormal.a.clone(); + destVertexNormal.b = srcVertexNormal.b.clone(); + destVertexNormal.c = srcVertexNormal.c.clone(); + + morphNormal.vertexNormals.push( destVertexNormal ); + + } + + } + + // face normals + + if ( morphNormals[ i ].faceNormals !== undefined ) { + + morphNormal.faceNormals = []; + + for ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) { + + morphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() ); + + } + + } + + this.morphNormals.push( morphNormal ); + + } + + // skin weights + + var skinWeights = source.skinWeights; + + for ( i = 0, il = skinWeights.length; i < il; i ++ ) { + + this.skinWeights.push( skinWeights[ i ].clone() ); + + } + + // skin indices + + var skinIndices = source.skinIndices; + + for ( i = 0, il = skinIndices.length; i < il; i ++ ) { + + this.skinIndices.push( skinIndices[ i ].clone() ); + + } + + // line distances + + var lineDistances = source.lineDistances; + + for ( i = 0, il = lineDistances.length; i < il; i ++ ) { + + this.lineDistances.push( lineDistances[ i ] ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // update flags + + this.elementsNeedUpdate = source.elementsNeedUpdate; + this.verticesNeedUpdate = source.verticesNeedUpdate; + this.uvsNeedUpdate = source.uvsNeedUpdate; + this.normalsNeedUpdate = source.normalsNeedUpdate; + this.colorsNeedUpdate = source.colorsNeedUpdate; + this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; + this.groupsNeedUpdate = source.groupsNeedUpdate; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferAttribute( array, itemSize, normalized ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.uuid = _Math.generateUUID(); + this.name = ''; + + this.array = array; + this.itemSize = itemSize; + this.count = array !== undefined ? array.length / itemSize : 0; + this.normalized = normalized === true; + + this.dynamic = false; + this.updateRange = { offset: 0, count: - 1 }; + + this.onUploadCallback = function () {}; + + this.version = 0; + +} + +Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( BufferAttribute.prototype, { + + isBufferAttribute: true, + + setArray: function ( array ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.count = array !== undefined ? array.length / this.itemSize : 0; + this.array = array; + + }, + + setDynamic: function ( value ) { + + this.dynamic = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.itemSize = source.itemSize; + this.count = source.count; + this.normalized = source.normalized; + + this.dynamic = source.dynamic; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.itemSize; + index2 *= attribute.itemSize; + + for ( var i = 0, l = this.itemSize; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + copyArray: function ( array ) { + + this.array.set( array ); + + return this; + + }, + + copyColorsArray: function ( colors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = colors.length; i < l; i ++ ) { + + var color = colors[ i ]; + + if ( color === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); + color = new Color(); + + } + + array[ offset ++ ] = color.r; + array[ offset ++ ] = color.g; + array[ offset ++ ] = color.b; + + } + + return this; + + }, + + copyIndicesArray: function ( indices ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = indices.length; i < l; i ++ ) { + + var index = indices[ i ]; + + array[ offset ++ ] = index.a; + array[ offset ++ ] = index.b; + array[ offset ++ ] = index.c; + + } + + return this; + + }, + + copyVector2sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); + vector = new Vector2(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + + } + + return this; + + }, + + copyVector3sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); + vector = new Vector3(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + + } + + return this; + + }, + + copyVector4sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); + vector = new Vector4(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + array[ offset ++ ] = vector.w; + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) offset = 0; + + this.array.set( value, offset ); + + return this; + + }, + + getX: function ( index ) { + + return this.array[ index * this.itemSize ]; + + }, + + setX: function ( index, x ) { + + this.array[ index * this.itemSize ] = x; + + return this; + + }, + + getY: function ( index ) { + + return this.array[ index * this.itemSize + 1 ]; + + }, + + setY: function ( index, y ) { + + this.array[ index * this.itemSize + 1 ] = y; + + return this; + + }, + + getZ: function ( index ) { + + return this.array[ index * this.itemSize + 2 ]; + + }, + + setZ: function ( index, z ) { + + this.array[ index * this.itemSize + 2 ] = z; + + return this; + + }, + + getW: function ( index ) { + + return this.array[ index * this.itemSize + 3 ]; + + }, + + setW: function ( index, w ) { + + this.array[ index * this.itemSize + 3 ] = w; + + return this; + + }, + + setXY: function ( index, x, y ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + this.array[ index + 3 ] = w; + + return this; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + clone: function () { + + return new this.constructor( this.array, this.itemSize ).copy( this ); + + } + +} ); + +// + +function Int8BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Int8Array( array ), itemSize ); + +} + +Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; + + +function Uint8BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint8Array( array ), itemSize ); + +} + +Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; + + +function Uint8ClampedBufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize ); + +} + +Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; + + +function Int16BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Int16Array( array ), itemSize ); + +} + +Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; + + +function Uint16BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize ); + +} + +Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; + + +function Int32BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Int32Array( array ), itemSize ); + +} + +Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; + + +function Uint32BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint32Array( array ), itemSize ); + +} + +Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; + + +function Float32BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Float32Array( array ), itemSize ); + +} + +Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; + + +function Float64BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Float64Array( array ), itemSize ); + +} + +Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function DirectGeometry() { + + this.indices = []; + this.vertices = []; + this.normals = []; + this.colors = []; + this.uvs = []; + this.uvs2 = []; + + this.groups = []; + + this.morphTargets = {}; + + this.skinWeights = []; + this.skinIndices = []; + + // this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.verticesNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.uvsNeedUpdate = false; + this.groupsNeedUpdate = false; + +} + +Object.assign( DirectGeometry.prototype, { + + computeGroups: function ( geometry ) { + + var group; + var groups = []; + var materialIndex = undefined; + + var faces = geometry.faces; + + for ( var i = 0; i < faces.length; i ++ ) { + + var face = faces[ i ]; + + // materials + + if ( face.materialIndex !== materialIndex ) { + + materialIndex = face.materialIndex; + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + group = { + start: i * 3, + materialIndex: materialIndex + }; + + } + + } + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + this.groups = groups; + + }, + + fromGeometry: function ( geometry ) { + + var faces = geometry.faces; + var vertices = geometry.vertices; + var faceVertexUvs = geometry.faceVertexUvs; + + var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; + var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; + + // morphs + + var morphTargets = geometry.morphTargets; + var morphTargetsLength = morphTargets.length; + + var morphTargetsPosition; + + if ( morphTargetsLength > 0 ) { + + morphTargetsPosition = []; + + for ( var i = 0; i < morphTargetsLength; i ++ ) { + + morphTargetsPosition[ i ] = []; + + } + + this.morphTargets.position = morphTargetsPosition; + + } + + var morphNormals = geometry.morphNormals; + var morphNormalsLength = morphNormals.length; + + var morphTargetsNormal; + + if ( morphNormalsLength > 0 ) { + + morphTargetsNormal = []; + + for ( var i = 0; i < morphNormalsLength; i ++ ) { + + morphTargetsNormal[ i ] = []; + + } + + this.morphTargets.normal = morphTargetsNormal; + + } + + // skins + + var skinIndices = geometry.skinIndices; + var skinWeights = geometry.skinWeights; + + var hasSkinIndices = skinIndices.length === vertices.length; + var hasSkinWeights = skinWeights.length === vertices.length; + + // + + for ( var i = 0; i < faces.length; i ++ ) { + + var face = faces[ i ]; + + this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); + + } else { + + var normal = face.normal; + + this.normals.push( normal, normal, normal ); + + } + + var vertexColors = face.vertexColors; + + if ( vertexColors.length === 3 ) { + + this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); + + } else { + + var color = face.color; + + this.colors.push( color, color, color ); + + } + + if ( hasFaceVertexUv === true ) { + + var vertexUvs = faceVertexUvs[ 0 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); + + this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + if ( hasFaceVertexUv2 === true ) { + + var vertexUvs = faceVertexUvs[ 1 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); + + this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + // morphs + + for ( var j = 0; j < morphTargetsLength; j ++ ) { + + var morphTarget = morphTargets[ j ].vertices; + + morphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); + + } + + for ( var j = 0; j < morphNormalsLength; j ++ ) { + + var morphNormal = morphNormals[ j ].vertexNormals[ i ]; + + morphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c ); + + } + + // skins + + if ( hasSkinIndices ) { + + this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); + + } + + if ( hasSkinWeights ) { + + this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); + + } + + } + + this.computeGroups( geometry ); + + this.verticesNeedUpdate = geometry.verticesNeedUpdate; + this.normalsNeedUpdate = geometry.normalsNeedUpdate; + this.colorsNeedUpdate = geometry.colorsNeedUpdate; + this.uvsNeedUpdate = geometry.uvsNeedUpdate; + this.groupsNeedUpdate = geometry.groupsNeedUpdate; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function arrayMax( array ) { + + if ( array.length === 0 ) return - Infinity; + + var max = array[ 0 ]; + + for ( var i = 1, l = array.length; i < l; ++ i ) { + + if ( array[ i ] > max ) max = array[ i ]; + + } + + return max; + +} + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferGeometry() { + + Object.defineProperty( this, 'id', { value: GeometryIdCount() } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'BufferGeometry'; + + this.index = null; + this.attributes = {}; + + this.morphAttributes = {}; + + this.groups = []; + + this.boundingBox = null; + this.boundingSphere = null; + + this.drawRange = { start: 0, count: Infinity }; + +} + +BufferGeometry.MaxIndex = 65535; + +Object.assign( BufferGeometry.prototype, EventDispatcher.prototype, { + + isBufferGeometry: true, + + getIndex: function () { + + return this.index; + + }, + + setIndex: function ( index ) { + + if ( Array.isArray( index ) ) { + + this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); + + } else { + + this.index = index; + + } + + }, + + addAttribute: function ( name, attribute ) { + + if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); + + this.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); + + return; + + } + + if ( name === 'index' ) { + + console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); + this.setIndex( attribute ); + + return; + + } + + this.attributes[ name ] = attribute; + + return this; + + }, + + getAttribute: function ( name ) { + + return this.attributes[ name ]; + + }, + + removeAttribute: function ( name ) { + + delete this.attributes[ name ]; + + return this; + + }, + + addGroup: function ( start, count, materialIndex ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex !== undefined ? materialIndex : 0 + + } ); + + }, + + clearGroups: function () { + + this.groups = []; + + }, + + setDrawRange: function ( start, count ) { + + this.drawRange.start = start; + this.drawRange.count = count; + + }, + + applyMatrix: function ( matrix ) { + + var position = this.attributes.position; + + if ( position !== undefined ) { + + matrix.applyToBufferAttribute( position ); + position.needsUpdate = true; + + } + + var normal = this.attributes.normal; + + if ( normal !== undefined ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + normalMatrix.applyToBufferAttribute( normal ); + normal.needsUpdate = true; + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + return this; + + }, + + rotateX: function () { + + // rotate geometry around world x-axis + + var m1 = new Matrix4(); + + return function rotateX( angle ) { + + m1.makeRotationX( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateY: function () { + + // rotate geometry around world y-axis + + var m1 = new Matrix4(); + + return function rotateY( angle ) { + + m1.makeRotationY( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateZ: function () { + + // rotate geometry around world z-axis + + var m1 = new Matrix4(); + + return function rotateZ( angle ) { + + m1.makeRotationZ( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + translate: function () { + + // translate geometry + + var m1 = new Matrix4(); + + return function translate( x, y, z ) { + + m1.makeTranslation( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + scale: function () { + + // scale geometry + + var m1 = new Matrix4(); + + return function scale( x, y, z ) { + + m1.makeScale( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + lookAt: function () { + + var obj = new Object3D(); + + return function lookAt( vector ) { + + obj.lookAt( vector ); + + obj.updateMatrix(); + + this.applyMatrix( obj.matrix ); + + }; + + }(), + + center: function () { + + this.computeBoundingBox(); + + var offset = this.boundingBox.getCenter().negate(); + + this.translate( offset.x, offset.y, offset.z ); + + return offset; + + }, + + setFromObject: function ( object ) { + + // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); + + var geometry = object.geometry; + + if ( object.isPoints || object.isLine ) { + + var positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); + var colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); + + this.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); + this.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); + + if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { + + var lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); + + this.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + } else if ( object.isMesh ) { + + if ( geometry && geometry.isGeometry ) { + + this.fromGeometry( geometry ); + + } + + } + + return this; + + }, + + updateFromObject: function ( object ) { + + var geometry = object.geometry; + + if ( object.isMesh ) { + + var direct = geometry.__directGeometry; + + if ( geometry.elementsNeedUpdate === true ) { + + direct = undefined; + geometry.elementsNeedUpdate = false; + + } + + if ( direct === undefined ) { + + return this.fromGeometry( geometry ); + + } + + direct.verticesNeedUpdate = geometry.verticesNeedUpdate; + direct.normalsNeedUpdate = geometry.normalsNeedUpdate; + direct.colorsNeedUpdate = geometry.colorsNeedUpdate; + direct.uvsNeedUpdate = geometry.uvsNeedUpdate; + direct.groupsNeedUpdate = geometry.groupsNeedUpdate; + + geometry.verticesNeedUpdate = false; + geometry.normalsNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.uvsNeedUpdate = false; + geometry.groupsNeedUpdate = false; + + geometry = direct; + + } + + var attribute; + + if ( geometry.verticesNeedUpdate === true ) { + + attribute = this.attributes.position; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.vertices ); + attribute.needsUpdate = true; + + } + + geometry.verticesNeedUpdate = false; + + } + + if ( geometry.normalsNeedUpdate === true ) { + + attribute = this.attributes.normal; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.normals ); + attribute.needsUpdate = true; + + } + + geometry.normalsNeedUpdate = false; + + } + + if ( geometry.colorsNeedUpdate === true ) { + + attribute = this.attributes.color; + + if ( attribute !== undefined ) { + + attribute.copyColorsArray( geometry.colors ); + attribute.needsUpdate = true; + + } + + geometry.colorsNeedUpdate = false; + + } + + if ( geometry.uvsNeedUpdate ) { + + attribute = this.attributes.uv; + + if ( attribute !== undefined ) { + + attribute.copyVector2sArray( geometry.uvs ); + attribute.needsUpdate = true; + + } + + geometry.uvsNeedUpdate = false; + + } + + if ( geometry.lineDistancesNeedUpdate ) { + + attribute = this.attributes.lineDistance; + + if ( attribute !== undefined ) { + + attribute.copyArray( geometry.lineDistances ); + attribute.needsUpdate = true; + + } + + geometry.lineDistancesNeedUpdate = false; + + } + + if ( geometry.groupsNeedUpdate ) { + + geometry.computeGroups( object.geometry ); + this.groups = geometry.groups; + + geometry.groupsNeedUpdate = false; + + } + + return this; + + }, + + fromGeometry: function ( geometry ) { + + geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); + + return this.fromDirectGeometry( geometry.__directGeometry ); + + }, + + fromDirectGeometry: function ( geometry ) { + + var positions = new Float32Array( geometry.vertices.length * 3 ); + this.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); + + if ( geometry.normals.length > 0 ) { + + var normals = new Float32Array( geometry.normals.length * 3 ); + this.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); + + } + + if ( geometry.colors.length > 0 ) { + + var colors = new Float32Array( geometry.colors.length * 3 ); + this.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); + + } + + if ( geometry.uvs.length > 0 ) { + + var uvs = new Float32Array( geometry.uvs.length * 2 ); + this.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); + + } + + if ( geometry.uvs2.length > 0 ) { + + var uvs2 = new Float32Array( geometry.uvs2.length * 2 ); + this.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); + + } + + if ( geometry.indices.length > 0 ) { + + var TypeArray = arrayMax( geometry.indices ) > 65535 ? Uint32Array : Uint16Array; + var indices = new TypeArray( geometry.indices.length * 3 ); + this.setIndex( new BufferAttribute( indices, 1 ).copyIndicesArray( geometry.indices ) ); + + } + + // groups + + this.groups = geometry.groups; + + // morphs + + for ( var name in geometry.morphTargets ) { + + var array = []; + var morphTargets = geometry.morphTargets[ name ]; + + for ( var i = 0, l = morphTargets.length; i < l; i ++ ) { + + var morphTarget = morphTargets[ i ]; + + var attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 ); + + array.push( attribute.copyVector3sArray( morphTarget ) ); + + } + + this.morphAttributes[ name ] = array; + + } + + // skinning + + if ( geometry.skinIndices.length > 0 ) { + + var skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); + this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); + + } + + if ( geometry.skinWeights.length > 0 ) { + + var skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); + this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); + + } + + // + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + var position = this.attributes.position; + + if ( position !== undefined ) { + + this.boundingBox.setFromBufferAttribute( position ); + + } else { + + this.boundingBox.makeEmpty(); + + } + + if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); + + } + + }, + + computeBoundingSphere: function () { + + var box = new Box3(); + var vector = new Vector3(); + + return function computeBoundingSphere() { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + var position = this.attributes.position; + + if ( position ) { + + var center = this.boundingSphere.center; + + box.setFromBufferAttribute( position ); + box.getCenter( center ); + + // hoping to find a boundingSphere with a radius smaller than the + // boundingSphere of the boundingBox: sqrt(3) smaller in the best case + + var maxRadiusSq = 0; + + for ( var i = 0, il = position.count; i < il; i ++ ) { + + vector.x = position.getX( i ); + vector.y = position.getY( i ); + vector.z = position.getZ( i ); + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); + + } + + this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); + + if ( isNaN( this.boundingSphere.radius ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); + + } + + } + + }; + + }(), + + computeFaceNormals: function () { + + // backwards compatibility + + }, + + computeVertexNormals: function () { + + var index = this.index; + var attributes = this.attributes; + var groups = this.groups; + + if ( attributes.position ) { + + var positions = attributes.position.array; + + if ( attributes.normal === undefined ) { + + this.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) ); + + } else { + + // reset existing normals to zero + + var array = attributes.normal.array; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + array[ i ] = 0; + + } + + } + + var normals = attributes.normal.array; + + var vA, vB, vC; + var pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); + var cb = new Vector3(), ab = new Vector3(); + + // indexed elements + + if ( index ) { + + var indices = index.array; + + if ( groups.length === 0 ) { + + this.addGroup( 0, indices.length ); + + } + + for ( var j = 0, jl = groups.length; j < jl; ++ j ) { + + var group = groups[ j ]; + + var start = group.start; + var count = group.count; + + for ( var i = start, il = start + count; i < il; i += 3 ) { + + vA = indices[ i + 0 ] * 3; + vB = indices[ i + 1 ] * 3; + vC = indices[ i + 2 ] * 3; + + pA.fromArray( positions, vA ); + pB.fromArray( positions, vB ); + pC.fromArray( positions, vC ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normals[ vA ] += cb.x; + normals[ vA + 1 ] += cb.y; + normals[ vA + 2 ] += cb.z; + + normals[ vB ] += cb.x; + normals[ vB + 1 ] += cb.y; + normals[ vB + 2 ] += cb.z; + + normals[ vC ] += cb.x; + normals[ vC + 1 ] += cb.y; + normals[ vC + 2 ] += cb.z; + + } + + } + + } else { + + // non-indexed elements (unconnected triangle soup) + + for ( var i = 0, il = positions.length; i < il; i += 9 ) { + + pA.fromArray( positions, i ); + pB.fromArray( positions, i + 3 ); + pC.fromArray( positions, i + 6 ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normals[ i ] = cb.x; + normals[ i + 1 ] = cb.y; + normals[ i + 2 ] = cb.z; + + normals[ i + 3 ] = cb.x; + normals[ i + 4 ] = cb.y; + normals[ i + 5 ] = cb.z; + + normals[ i + 6 ] = cb.x; + normals[ i + 7 ] = cb.y; + normals[ i + 8 ] = cb.z; + + } + + } + + this.normalizeNormals(); + + attributes.normal.needsUpdate = true; + + } + + }, + + merge: function ( geometry, offset ) { + + if ( ! ( geometry && geometry.isBufferGeometry ) ) { + + console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); + return; + + } + + if ( offset === undefined ) offset = 0; + + var attributes = this.attributes; + + for ( var key in attributes ) { + + if ( geometry.attributes[ key ] === undefined ) continue; + + var attribute1 = attributes[ key ]; + var attributeArray1 = attribute1.array; + + var attribute2 = geometry.attributes[ key ]; + var attributeArray2 = attribute2.array; + + var attributeSize = attribute2.itemSize; + + for ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) { + + attributeArray1[ j ] = attributeArray2[ i ]; + + } + + } + + return this; + + }, + + normalizeNormals: function () { + + var vector = new Vector3(); + + return function normalizeNormals() { + + var normals = this.attributes.normal; + + for ( var i = 0, il = normals.count; i < il; i ++ ) { + + vector.x = normals.getX( i ); + vector.y = normals.getY( i ); + vector.z = normals.getZ( i ); + + vector.normalize(); + + normals.setXYZ( i, vector.x, vector.y, vector.z ); + + } + + }; + + }(), + + toNonIndexed: function () { + + if ( this.index === null ) { + + console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' ); + return this; + + } + + var geometry2 = new BufferGeometry(); + + var indices = this.index.array; + var attributes = this.attributes; + + for ( var name in attributes ) { + + var attribute = attributes[ name ]; + + var array = attribute.array; + var itemSize = attribute.itemSize; + + var array2 = new array.constructor( indices.length * itemSize ); + + var index = 0, index2 = 0; + + for ( var i = 0, l = indices.length; i < l; i ++ ) { + + index = indices[ i ] * itemSize; + + for ( var j = 0; j < itemSize; j ++ ) { + + array2[ index2 ++ ] = array[ index ++ ]; + + } + + } + + geometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) ); + + } + + return geometry2; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'BufferGeometry', + generator: 'BufferGeometry.toJSON' + } + }; + + // standard BufferGeometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + data.data = { attributes: {} }; + + var index = this.index; + + if ( index !== null ) { + + var array = Array.prototype.slice.call( index.array ); + + data.data.index = { + type: index.array.constructor.name, + array: array + }; + + } + + var attributes = this.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + + var array = Array.prototype.slice.call( attribute.array ); + + data.data.attributes[ key ] = { + itemSize: attribute.itemSize, + type: attribute.array.constructor.name, + array: array, + normalized: attribute.normalized + }; + + } + + var groups = this.groups; + + if ( groups.length > 0 ) { + + data.data.groups = JSON.parse( JSON.stringify( groups ) ); + + } + + var boundingSphere = this.boundingSphere; + + if ( boundingSphere !== null ) { + + data.data.boundingSphere = { + center: boundingSphere.center.toArray(), + radius: boundingSphere.radius + }; + + } + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + var parameters = this.parameters; + + if ( parameters !== undefined ) { + + var values = []; + + for ( var key in parameters ) { + + values.push( parameters[ key ] ); + + } + + var geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new BufferGeometry().copy( this ); + + }, + + copy: function ( source ) { + + var name, i, l; + + // reset + + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // index + + var index = source.index; + + if ( index !== null ) { + + this.setIndex( index.clone() ); + + } + + // attributes + + var attributes = source.attributes; + + for ( name in attributes ) { + + var attribute = attributes[ name ]; + this.addAttribute( name, attribute.clone() ); + + } + + // morph attributes + + var morphAttributes = source.morphAttributes; + + for ( name in morphAttributes ) { + + var array = []; + var morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes + + for ( i = 0, l = morphAttribute.length; i < l; i ++ ) { + + array.push( morphAttribute[ i ].clone() ); + + } + + this.morphAttributes[ name ] = array; + + } + + // groups + + var groups = source.groups; + + for ( i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + this.addGroup( group.start, group.count, group.materialIndex ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // draw range + + this.drawRange.start = source.drawRange.start; + this.drawRange.count = source.drawRange.count; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// BoxGeometry + +function BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + Geometry.call( this ); + + this.type = 'BoxGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + this.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) ); + this.mergeVertices(); + +} + +BoxGeometry.prototype = Object.create( Geometry.prototype ); +BoxGeometry.prototype.constructor = BoxGeometry; + +// BoxBufferGeometry + +function BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + BufferGeometry.call( this ); + + this.type = 'BoxBufferGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + var scope = this; + + // segments + + widthSegments = Math.floor( widthSegments ) || 1; + heightSegments = Math.floor( heightSegments ) || 1; + depthSegments = Math.floor( depthSegments ) || 1; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var numberOfVertices = 0; + var groupStart = 0; + + // build each side of the box geometry + + buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px + buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx + buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py + buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny + buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz + buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { + + var segmentWidth = width / gridX; + var segmentHeight = height / gridY; + + var widthHalf = width / 2; + var heightHalf = height / 2; + var depthHalf = depth / 2; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var vertexCounter = 0; + var groupCount = 0; + + var ix, iy; + + var vector = new Vector3(); + + // generate vertices, normals and uvs + + for ( iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segmentHeight - heightHalf; + + for ( ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segmentWidth - widthHalf; + + // set values to correct vector component + + vector[ u ] = x * udir; + vector[ v ] = y * vdir; + vector[ w ] = depthHalf; + + // now apply vector to vertex buffer + + vertices.push( vector.x, vector.y, vector.z ); + + // set values to correct vector component + + vector[ u ] = 0; + vector[ v ] = 0; + vector[ w ] = depth > 0 ? 1 : - 1; + + // now apply vector to normal buffer + + normals.push( vector.x, vector.y, vector.z ); + + // uvs + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + // counters + + vertexCounter += 1; + + } + + } + + // indices + + // 1. you need three indices to draw a single face + // 2. a single segment consists of two faces + // 3. so we need to generate six (2*3) indices per segment + + for ( iy = 0; iy < gridY; iy ++ ) { + + for ( ix = 0; ix < gridX; ix ++ ) { + + var a = numberOfVertices + ix + gridX1 * iy; + var b = numberOfVertices + ix + gridX1 * ( iy + 1 ); + var c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 ); + var d = numberOfVertices + ( ix + 1 ) + gridX1 * iy; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // increase counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, materialIndex ); + + // calculate new start value for groups + + groupStart += groupCount; + + // update total number of vertices + + numberOfVertices += vertexCounter; + + } + +} + +BoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +BoxBufferGeometry.prototype.constructor = BoxBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// PlaneGeometry + +function PlaneGeometry( width, height, widthSegments, heightSegments ) { + + Geometry.call( this ); + + this.type = 'PlaneGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + this.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); + this.mergeVertices(); + +} + +PlaneGeometry.prototype = Object.create( Geometry.prototype ); +PlaneGeometry.prototype.constructor = PlaneGeometry; + +// PlaneBufferGeometry + +function PlaneBufferGeometry( width, height, widthSegments, heightSegments ) { + + BufferGeometry.call( this ); + + this.type = 'PlaneBufferGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + var width_half = width / 2; + var height_half = height / 2; + + var gridX = Math.floor( widthSegments ) || 1; + var gridY = Math.floor( heightSegments ) || 1; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var segment_width = width / gridX; + var segment_height = height / gridY; + + var ix, iy; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segment_height - height_half; + + for ( ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segment_width - width_half; + + vertices.push( x, - y, 0 ); + + normals.push( 0, 0, 1 ); + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + } + + } + + // indices + + for ( iy = 0; iy < gridY; iy ++ ) { + + for ( ix = 0; ix < gridX; ix ++ ) { + + var a = ix + gridX1 * iy; + var b = ix + gridX1 * ( iy + 1 ); + var c = ( ix + 1 ) + gridX1 * ( iy + 1 ); + var d = ( ix + 1 ) + gridX1 * iy; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +PlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +PlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * depthTest: , + * depthWrite: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: + * } + */ + +function MeshBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshBasicMaterial'; + + this.color = new Color( 0xffffff ); // emissive + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + + this.lights = false; + + this.setValues( parameters ); + +} + +MeshBasicMaterial.prototype = Object.create( Material.prototype ); +MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; + +MeshBasicMaterial.prototype.isMeshBasicMaterial = true; + +MeshBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + return this; + +}; + +/** + * @author bhouston / http://clara.io + */ + +function Ray( origin, direction ) { + + this.origin = ( origin !== undefined ) ? origin : new Vector3(); + this.direction = ( direction !== undefined ) ? direction : new Vector3(); + +} + +Object.assign( Ray.prototype, { + + set: function ( origin, direction ) { + + this.origin.copy( origin ); + this.direction.copy( direction ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( ray ) { + + this.origin.copy( ray.origin ); + this.direction.copy( ray.direction ); + + return this; + + }, + + at: function ( t, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.direction ).multiplyScalar( t ).add( this.origin ); + + }, + + lookAt: function ( v ) { + + this.direction.copy( v ).sub( this.origin ).normalize(); + + return this; + + }, + + recast: function () { + + var v1 = new Vector3(); + + return function recast( t ) { + + this.origin.copy( this.at( t, v1 ) ); + + return this; + + }; + + }(), + + closestPointToPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + result.subVectors( point, this.origin ); + var directionDistance = result.dot( this.direction ); + + if ( directionDistance < 0 ) { + + return result.copy( this.origin ); + + } + + return result.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + }, + + distanceToPoint: function ( point ) { + + return Math.sqrt( this.distanceSqToPoint( point ) ); + + }, + + distanceSqToPoint: function () { + + var v1 = new Vector3(); + + return function distanceSqToPoint( point ) { + + var directionDistance = v1.subVectors( point, this.origin ).dot( this.direction ); + + // point behind the ray + + if ( directionDistance < 0 ) { + + return this.origin.distanceToSquared( point ); + + } + + v1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + return v1.distanceToSquared( point ); + + }; + + }(), + + distanceSqToSegment: function () { + + var segCenter = new Vector3(); + var segDir = new Vector3(); + var diff = new Vector3(); + + return function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h + // It returns the min distance between the ray and the segment + // defined by v0 and v1 + // It can also set two optional targets : + // - The closest point on the ray + // - The closest point on the segment + + segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); + segDir.copy( v1 ).sub( v0 ).normalize(); + diff.copy( this.origin ).sub( segCenter ); + + var segExtent = v0.distanceTo( v1 ) * 0.5; + var a01 = - this.direction.dot( segDir ); + var b0 = diff.dot( this.direction ); + var b1 = - diff.dot( segDir ); + var c = diff.lengthSq(); + var det = Math.abs( 1 - a01 * a01 ); + var s0, s1, sqrDist, extDet; + + if ( det > 0 ) { + + // The ray and segment are not parallel. + + s0 = a01 * b1 - b0; + s1 = a01 * b0 - b1; + extDet = segExtent * det; + + if ( s0 >= 0 ) { + + if ( s1 >= - extDet ) { + + if ( s1 <= extDet ) { + + // region 0 + // Minimum at interior points of ray and segment. + + var invDet = 1 / det; + s0 *= invDet; + s1 *= invDet; + sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; + + } else { + + // region 1 + + s1 = segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + // region 5 + + s1 = - segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + if ( s1 <= - extDet ) { + + // region 4 + + s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } else if ( s1 <= extDet ) { + + // region 3 + + s0 = 0; + s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = s1 * ( s1 + 2 * b1 ) + c; + + } else { + + // region 2 + + s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } + + } else { + + // Ray and segment are parallel. + + s1 = ( a01 > 0 ) ? - segExtent : segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + if ( optionalPointOnRay ) { + + optionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin ); + + } + + if ( optionalPointOnSegment ) { + + optionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter ); + + } + + return sqrDist; + + }; + + }(), + + intersectSphere: function () { + + var v1 = new Vector3(); + + return function intersectSphere( sphere, optionalTarget ) { + + v1.subVectors( sphere.center, this.origin ); + var tca = v1.dot( this.direction ); + var d2 = v1.dot( v1 ) - tca * tca; + var radius2 = sphere.radius * sphere.radius; + + if ( d2 > radius2 ) return null; + + var thc = Math.sqrt( radius2 - d2 ); + + // t0 = first intersect point - entrance on front of sphere + var t0 = tca - thc; + + // t1 = second intersect point - exit point on back of sphere + var t1 = tca + thc; + + // test to see if both t0 and t1 are behind the ray - if so, return null + if ( t0 < 0 && t1 < 0 ) return null; + + // test to see if t0 is behind the ray: + // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, + // in order to always return an intersect point that is in front of the ray. + if ( t0 < 0 ) return this.at( t1, optionalTarget ); + + // else t0 is in front of the ray, so return the first collision point scaled by t0 + return this.at( t0, optionalTarget ); + + }; + + }(), + + intersectsSphere: function ( sphere ) { + + return this.distanceToPoint( sphere.center ) <= sphere.radius; + + }, + + distanceToPlane: function ( plane ) { + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( plane.distanceToPoint( this.origin ) === 0 ) { + + return 0; + + } + + // Null is preferable to undefined since undefined means.... it is undefined + + return null; + + } + + var t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; + + // Return if the ray never intersects the plane + + return t >= 0 ? t : null; + + }, + + intersectPlane: function ( plane, optionalTarget ) { + + var t = this.distanceToPlane( plane ); + + if ( t === null ) { + + return null; + + } + + return this.at( t, optionalTarget ); + + }, + + intersectsPlane: function ( plane ) { + + // check if the ray lies on the plane first + + var distToPoint = plane.distanceToPoint( this.origin ); + + if ( distToPoint === 0 ) { + + return true; + + } + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator * distToPoint < 0 ) { + + return true; + + } + + // ray origin is behind the plane (and is pointing behind it) + + return false; + + }, + + intersectBox: function ( box, optionalTarget ) { + + var tmin, tmax, tymin, tymax, tzmin, tzmax; + + var invdirx = 1 / this.direction.x, + invdiry = 1 / this.direction.y, + invdirz = 1 / this.direction.z; + + var origin = this.origin; + + if ( invdirx >= 0 ) { + + tmin = ( box.min.x - origin.x ) * invdirx; + tmax = ( box.max.x - origin.x ) * invdirx; + + } else { + + tmin = ( box.max.x - origin.x ) * invdirx; + tmax = ( box.min.x - origin.x ) * invdirx; + + } + + if ( invdiry >= 0 ) { + + tymin = ( box.min.y - origin.y ) * invdiry; + tymax = ( box.max.y - origin.y ) * invdiry; + + } else { + + tymin = ( box.max.y - origin.y ) * invdiry; + tymax = ( box.min.y - origin.y ) * invdiry; + + } + + if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null; + + // These lines also handle the case where tmin or tmax is NaN + // (result of 0 * Infinity). x !== x returns true if x is NaN + + if ( tymin > tmin || tmin !== tmin ) tmin = tymin; + + if ( tymax < tmax || tmax !== tmax ) tmax = tymax; + + if ( invdirz >= 0 ) { + + tzmin = ( box.min.z - origin.z ) * invdirz; + tzmax = ( box.max.z - origin.z ) * invdirz; + + } else { + + tzmin = ( box.max.z - origin.z ) * invdirz; + tzmax = ( box.min.z - origin.z ) * invdirz; + + } + + if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null; + + if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; + + if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax; + + //return point closest to the ray (positive side) + + if ( tmax < 0 ) return null; + + return this.at( tmin >= 0 ? tmin : tmax, optionalTarget ); + + }, + + intersectsBox: ( function () { + + var v = new Vector3(); + + return function intersectsBox( box ) { + + return this.intersectBox( box, v ) !== null; + + }; + + } )(), + + intersectTriangle: function () { + + // Compute the offset origin, edges, and normal. + var diff = new Vector3(); + var edge1 = new Vector3(); + var edge2 = new Vector3(); + var normal = new Vector3(); + + return function intersectTriangle( a, b, c, backfaceCulling, optionalTarget ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h + + edge1.subVectors( b, a ); + edge2.subVectors( c, a ); + normal.crossVectors( edge1, edge2 ); + + // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, + // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by + // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) + // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) + // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) + var DdN = this.direction.dot( normal ); + var sign; + + if ( DdN > 0 ) { + + if ( backfaceCulling ) return null; + sign = 1; + + } else if ( DdN < 0 ) { + + sign = - 1; + DdN = - DdN; + + } else { + + return null; + + } + + diff.subVectors( this.origin, a ); + var DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) ); + + // b1 < 0, no intersection + if ( DdQxE2 < 0 ) { + + return null; + + } + + var DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) ); + + // b2 < 0, no intersection + if ( DdE1xQ < 0 ) { + + return null; + + } + + // b1+b2 > 1, no intersection + if ( DdQxE2 + DdE1xQ > DdN ) { + + return null; + + } + + // Line intersects triangle, check if ray does. + var QdN = - sign * diff.dot( normal ); + + // t < 0, no intersection + if ( QdN < 0 ) { + + return null; + + } + + // Ray intersects triangle. + return this.at( QdN / DdN, optionalTarget ); + + }; + + }(), + + applyMatrix4: function ( matrix4 ) { + + this.origin.applyMatrix4( matrix4 ); + this.direction.transformDirection( matrix4 ); + + return this; + + }, + + equals: function ( ray ) { + + return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + */ + +function Line3( start, end ) { + + this.start = ( start !== undefined ) ? start : new Vector3(); + this.end = ( end !== undefined ) ? end : new Vector3(); + +} + +Object.assign( Line3.prototype, { + + set: function ( start, end ) { + + this.start.copy( start ); + this.end.copy( end ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( line ) { + + this.start.copy( line.start ); + this.end.copy( line.end ); + + return this; + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); + + }, + + delta: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.subVectors( this.end, this.start ); + + }, + + distanceSq: function () { + + return this.start.distanceToSquared( this.end ); + + }, + + distance: function () { + + return this.start.distanceTo( this.end ); + + }, + + at: function ( t, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return this.delta( result ).multiplyScalar( t ).add( this.start ); + + }, + + closestPointToPointParameter: function () { + + var startP = new Vector3(); + var startEnd = new Vector3(); + + return function closestPointToPointParameter( point, clampToLine ) { + + startP.subVectors( point, this.start ); + startEnd.subVectors( this.end, this.start ); + + var startEnd2 = startEnd.dot( startEnd ); + var startEnd_startP = startEnd.dot( startP ); + + var t = startEnd_startP / startEnd2; + + if ( clampToLine ) { + + t = _Math.clamp( t, 0, 1 ); + + } + + return t; + + }; + + }(), + + closestPointToPoint: function ( point, clampToLine, optionalTarget ) { + + var t = this.closestPointToPointParameter( point, clampToLine ); + + var result = optionalTarget || new Vector3(); + + return this.delta( result ).multiplyScalar( t ).add( this.start ); + + }, + + applyMatrix4: function ( matrix ) { + + this.start.applyMatrix4( matrix ); + this.end.applyMatrix4( matrix ); + + return this; + + }, + + equals: function ( line ) { + + return line.start.equals( this.start ) && line.end.equals( this.end ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author mrdoob / http://mrdoob.com/ + */ + +function Triangle( a, b, c ) { + + this.a = ( a !== undefined ) ? a : new Vector3(); + this.b = ( b !== undefined ) ? b : new Vector3(); + this.c = ( c !== undefined ) ? c : new Vector3(); + +} + +Object.assign( Triangle, { + + normal: function () { + + var v0 = new Vector3(); + + return function normal( a, b, c, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + result.subVectors( c, b ); + v0.subVectors( a, b ); + result.cross( v0 ); + + var resultLengthSq = result.lengthSq(); + if ( resultLengthSq > 0 ) { + + return result.multiplyScalar( 1 / Math.sqrt( resultLengthSq ) ); + + } + + return result.set( 0, 0, 0 ); + + }; + + }(), + + // static/instance method to calculate barycentric coordinates + // based on: http://www.blackpawn.com/texts/pointinpoly/default.html + barycoordFromPoint: function () { + + var v0 = new Vector3(); + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function barycoordFromPoint( point, a, b, c, optionalTarget ) { + + v0.subVectors( c, a ); + v1.subVectors( b, a ); + v2.subVectors( point, a ); + + var dot00 = v0.dot( v0 ); + var dot01 = v0.dot( v1 ); + var dot02 = v0.dot( v2 ); + var dot11 = v1.dot( v1 ); + var dot12 = v1.dot( v2 ); + + var denom = ( dot00 * dot11 - dot01 * dot01 ); + + var result = optionalTarget || new Vector3(); + + // collinear or singular triangle + if ( denom === 0 ) { + + // arbitrary location outside of triangle? + // not sure if this is the best idea, maybe should be returning undefined + return result.set( - 2, - 1, - 1 ); + + } + + var invDenom = 1 / denom; + var u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; + var v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; + + // barycentric coordinates must always sum to 1 + return result.set( 1 - u - v, v, u ); + + }; + + }(), + + containsPoint: function () { + + var v1 = new Vector3(); + + return function containsPoint( point, a, b, c ) { + + var result = Triangle.barycoordFromPoint( point, a, b, c, v1 ); + + return ( result.x >= 0 ) && ( result.y >= 0 ) && ( ( result.x + result.y ) <= 1 ); + + }; + + }() + +} ); + +Object.assign( Triangle.prototype, { + + set: function ( a, b, c ) { + + this.a.copy( a ); + this.b.copy( b ); + this.c.copy( c ); + + return this; + + }, + + setFromPointsAndIndices: function ( points, i0, i1, i2 ) { + + this.a.copy( points[ i0 ] ); + this.b.copy( points[ i1 ] ); + this.c.copy( points[ i2 ] ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( triangle ) { + + this.a.copy( triangle.a ); + this.b.copy( triangle.b ); + this.c.copy( triangle.c ); + + return this; + + }, + + area: function () { + + var v0 = new Vector3(); + var v1 = new Vector3(); + + return function area() { + + v0.subVectors( this.c, this.b ); + v1.subVectors( this.a, this.b ); + + return v0.cross( v1 ).length() * 0.5; + + }; + + }(), + + midpoint: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); + + }, + + normal: function ( optionalTarget ) { + + return Triangle.normal( this.a, this.b, this.c, optionalTarget ); + + }, + + plane: function ( optionalTarget ) { + + var result = optionalTarget || new Plane(); + + return result.setFromCoplanarPoints( this.a, this.b, this.c ); + + }, + + barycoordFromPoint: function ( point, optionalTarget ) { + + return Triangle.barycoordFromPoint( point, this.a, this.b, this.c, optionalTarget ); + + }, + + containsPoint: function ( point ) { + + return Triangle.containsPoint( point, this.a, this.b, this.c ); + + }, + + closestPointToPoint: function () { + + var plane = new Plane(); + var edgeList = [ new Line3(), new Line3(), new Line3() ]; + var projectedPoint = new Vector3(); + var closestPoint = new Vector3(); + + return function closestPointToPoint( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + var minDistance = Infinity; + + // project the point onto the plane of the triangle + + plane.setFromCoplanarPoints( this.a, this.b, this.c ); + plane.projectPoint( point, projectedPoint ); + + // check if the projection lies within the triangle + + if( this.containsPoint( projectedPoint ) === true ) { + + // if so, this is the closest point + + result.copy( projectedPoint ); + + } else { + + // if not, the point falls outside the triangle. the result is the closest point to the triangle's edges or vertices + + edgeList[ 0 ].set( this.a, this.b ); + edgeList[ 1 ].set( this.b, this.c ); + edgeList[ 2 ].set( this.c, this.a ); + + for( var i = 0; i < edgeList.length; i ++ ) { + + edgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint ); + + var distance = projectedPoint.distanceToSquared( closestPoint ); + + if( distance < minDistance ) { + + minDistance = distance; + + result.copy( closestPoint ); + + } + + } + + } + + return result; + + }; + + }(), + + equals: function ( triangle ) { + + return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author jonobr1 / http://jonobr1.com/ + */ + +function Mesh( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Mesh'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } ); + + this.drawMode = TrianglesDrawMode; + + this.updateMorphTargets(); + +} + +Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Mesh, + + isMesh: true, + + setDrawMode: function ( value ) { + + this.drawMode = value; + + }, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.drawMode = source.drawMode; + + return this; + + }, + + updateMorphTargets: function () { + + var geometry = this.geometry; + var m, ml, name; + + if ( geometry.isBufferGeometry ) { + + var morphAttributes = geometry.morphAttributes; + var keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + var morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + var morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( m = 0, ml = morphTargets.length; m < ml; m ++ ) { + + name = morphTargets[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + }, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + var vA = new Vector3(); + var vB = new Vector3(); + var vC = new Vector3(); + + var tempA = new Vector3(); + var tempB = new Vector3(); + var tempC = new Vector3(); + + var uvA = new Vector2(); + var uvB = new Vector2(); + var uvC = new Vector2(); + + var barycoord = new Vector3(); + + var intersectionPoint = new Vector3(); + var intersectionPointWorld = new Vector3(); + + function uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) { + + Triangle.barycoordFromPoint( point, p1, p2, p3, barycoord ); + + uv1.multiplyScalar( barycoord.x ); + uv2.multiplyScalar( barycoord.y ); + uv3.multiplyScalar( barycoord.z ); + + uv1.add( uv2 ).add( uv3 ); + + return uv1.clone(); + + } + + function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { + + var intersect; + + if ( material.side === BackSide ) { + + intersect = ray.intersectTriangle( pC, pB, pA, true, point ); + + } else { + + intersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point ); + + } + + if ( intersect === null ) return null; + + intersectionPointWorld.copy( point ); + intersectionPointWorld.applyMatrix4( object.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( intersectionPointWorld ); + + if ( distance < raycaster.near || distance > raycaster.far ) return null; + + return { + distance: distance, + point: intersectionPointWorld.clone(), + object: object + }; + + } + + function checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) { + + vA.fromBufferAttribute( position, a ); + vB.fromBufferAttribute( position, b ); + vC.fromBufferAttribute( position, c ); + + var intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint ); + + if ( intersection ) { + + if ( uv ) { + + uvA.fromBufferAttribute( uv, a ); + uvB.fromBufferAttribute( uv, b ); + uvC.fromBufferAttribute( uv, c ); + + intersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC ); + + } + + intersection.face = new Face3( a, b, c, Triangle.normal( vA, vB, vC ) ); + intersection.faceIndex = a; + + } + + return intersection; + + } + + return function raycast( raycaster, intersects ) { + + var geometry = this.geometry; + var material = this.material; + var matrixWorld = this.matrixWorld; + + if ( material === undefined ) return; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + // Check boundingBox before continuing + + if ( geometry.boundingBox !== null ) { + + if ( ray.intersectsBox( geometry.boundingBox ) === false ) return; + + } + + var intersection; + + if ( geometry.isBufferGeometry ) { + + var a, b, c; + var index = geometry.index; + var position = geometry.attributes.position; + var uv = geometry.attributes.uv; + var i, l; + + if ( index !== null ) { + + // indexed buffer geometry + + for ( i = 0, l = index.count; i < l; i += 3 ) { + + a = index.getX( i ); + b = index.getX( i + 1 ); + c = index.getX( i + 2 ); + + intersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics + intersects.push( intersection ); + + } + + } + + } else { + + // non-indexed buffer geometry + + for ( i = 0, l = position.count; i < l; i += 3 ) { + + a = i; + b = i + 1; + c = i + 2; + + intersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c ); + + if ( intersection ) { + + intersection.index = a; // triangle number in positions buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } else if ( geometry.isGeometry ) { + + var fvA, fvB, fvC; + var isMultiMaterial = Array.isArray( material ); + + var vertices = geometry.vertices; + var faces = geometry.faces; + var uvs; + + var faceVertexUvs = geometry.faceVertexUvs[ 0 ]; + if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; + + for ( var f = 0, fl = faces.length; f < fl; f ++ ) { + + var face = faces[ f ]; + var faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; + + if ( faceMaterial === undefined ) continue; + + fvA = vertices[ face.a ]; + fvB = vertices[ face.b ]; + fvC = vertices[ face.c ]; + + if ( faceMaterial.morphTargets === true ) { + + var morphTargets = geometry.morphTargets; + var morphInfluences = this.morphTargetInfluences; + + vA.set( 0, 0, 0 ); + vB.set( 0, 0, 0 ); + vC.set( 0, 0, 0 ); + + for ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) { + + var influence = morphInfluences[ t ]; + + if ( influence === 0 ) continue; + + var targets = morphTargets[ t ].vertices; + + vA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence ); + vB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence ); + vC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence ); + + } + + vA.add( fvA ); + vB.add( fvB ); + vC.add( fvC ); + + fvA = vA; + fvB = vB; + fvC = vC; + + } + + intersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint ); + + if ( intersection ) { + + if ( uvs && uvs[ f ] ) { + + var uvs_f = uvs[ f ]; + uvA.copy( uvs_f[ 0 ] ); + uvB.copy( uvs_f[ 1 ] ); + uvC.copy( uvs_f[ 2 ] ); + + intersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC ); + + } + + intersection.face = face; + intersection.faceIndex = f; + intersects.push( intersection ); + + } + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLBackground( renderer, state, geometries, premultipliedAlpha ) { + + var clearColor = new Color( 0x000000 ); + var clearAlpha = 0; + + var planeCamera, planeMesh; + var boxMesh; + + function render( renderList, scene, camera, forceClear ) { + + var background = scene.background; + + if ( background === null ) { + + setClear( clearColor, clearAlpha ); + + } else if ( background && background.isColor ) { + + setClear( background, 1 ); + forceClear = true; + + } + + if ( renderer.autoClear || forceClear ) { + + renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + + } + + if ( background && background.isCubeTexture ) { + + if ( boxMesh === undefined ) { + + boxMesh = new Mesh( + new BoxBufferGeometry( 1, 1, 1 ), + new ShaderMaterial( { + uniforms: ShaderLib.cube.uniforms, + vertexShader: ShaderLib.cube.vertexShader, + fragmentShader: ShaderLib.cube.fragmentShader, + side: BackSide, + depthTest: true, + depthWrite: false, + polygonOffset: true, + fog: false + } ) + ); + + boxMesh.geometry.removeAttribute( 'normal' ); + boxMesh.geometry.removeAttribute( 'uv' ); + + boxMesh.onBeforeRender = function ( renderer, scene, camera ) { + + var scale = camera.far; + + this.matrixWorld.makeScale( scale, scale, scale ); + this.matrixWorld.copyPosition( camera.matrixWorld ); + + this.material.polygonOffsetUnits = scale * 10; + + }; + + geometries.update( boxMesh.geometry ); + + } + + boxMesh.material.uniforms.tCube.value = background; + + renderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null ); + + } else if ( background && background.isTexture ) { + + if ( planeCamera === undefined ) { + + planeCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); + + planeMesh = new Mesh( + new PlaneBufferGeometry( 2, 2 ), + new MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } ) + ); + + geometries.update( planeMesh.geometry ); + + } + + planeMesh.material.map = background; + + // TODO Push this to renderList + + renderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null ); + + } + + } + + function setClear( color, alpha ) { + + state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + + } + + return { + + getClearColor: function () { + + return clearColor; + + }, + setClearColor: function ( color, alpha ) { + + clearColor.set( color ); + clearAlpha = alpha !== undefined ? alpha : 1; + setClear( clearColor, clearAlpha ); + + }, + getClearAlpha: function () { + + return clearAlpha; + + }, + setClearAlpha: function ( alpha ) { + + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + render: render + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function painterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.program && b.program && a.program !== b.program ) { + + return a.program.id - b.program.id; + + } else if ( a.material.id !== b.material.id ) { + + return a.material.id - b.material.id; + + } else if ( a.z !== b.z ) { + + return a.z - b.z; + + } else { + + return a.id - b.id; + + } + +} + +function reversePainterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return a.id - b.id; + + } + +} + +function WebGLRenderList() { + + var renderItems = []; + var renderItemsIndex = 0; + + var opaque = []; + var transparent = []; + + function init() { + + renderItemsIndex = 0; + + opaque.length = 0; + transparent.length = 0; + + } + + function push( object, geometry, material, z, group ) { + + var renderItem = renderItems[ renderItemsIndex ]; + + if ( renderItem === undefined ) { + + renderItem = { + id: object.id, + object: object, + geometry: geometry, + material: material, + program: material.program, + renderOrder: object.renderOrder, + z: z, + group: group + }; + + renderItems[ renderItemsIndex ] = renderItem; + + } else { + + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.program = material.program; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + + } + + ( material.transparent === true ? transparent : opaque ).push( renderItem ); + + renderItemsIndex ++; + + } + + function sort() { + + if ( opaque.length > 1 ) opaque.sort( painterSortStable ); + if ( transparent.length > 1 ) transparent.sort( reversePainterSortStable ); + + } + + return { + opaque: opaque, + transparent: transparent, + + init: init, + push: push, + + sort: sort + }; + +} + +function WebGLRenderLists() { + + var lists = {}; + + function get( scene, camera ) { + + var hash = scene.id + ',' + camera.id; + var list = lists[ hash ]; + + if ( list === undefined ) { + + // console.log( 'THREE.WebGLRenderLists:', hash ); + + list = new WebGLRenderList(); + lists[ hash ] = list; + + } + + return list; + + } + + function dispose() { + + lists = {}; + + } + + return { + get: get, + dispose: dispose + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function absNumericalSort( a, b ) { + + return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); + +} + +function WebGLMorphtargets( gl ) { + + var influencesList = {}; + var morphInfluences = new Float32Array( 8 ); + + function update( object, geometry, material, program ) { + + var objectInfluences = object.morphTargetInfluences; + + var length = objectInfluences.length; + + var influences = influencesList[ geometry.id ]; + + if ( influences === undefined ) { + + // initialise list + + influences = []; + + for ( var i = 0; i < length; i ++ ) { + + influences[ i ] = [ i, 0 ]; + + } + + influencesList[ geometry.id ] = influences; + + } + + var morphTargets = material.morphTargets && geometry.morphAttributes.position; + var morphNormals = material.morphNormals && geometry.morphAttributes.normal; + + // Remove current morphAttributes + + for ( var i = 0; i < length; i ++ ) { + + var influence = influences[ i ]; + + if ( influence[ 1 ] !== 0 ) { + + if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i ); + if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i ); + + } + + } + + // Collect influences + + for ( var i = 0; i < length; i ++ ) { + + var influence = influences[ i ]; + + influence[ 0 ] = i; + influence[ 1 ] = objectInfluences[ i ]; + + } + + influences.sort( absNumericalSort ); + + // Add morphAttributes + + for ( var i = 0; i < 8; i ++ ) { + + var influence = influences[ i ]; + + if ( influence ) { + + var index = influence[ 0 ]; + var value = influence[ 1 ]; + + if ( value ) { + + if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] ); + if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] ); + + morphInfluences[ i ] = value; + continue; + + } + + } + + morphInfluences[ i ] = 0; + + } + + program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); + + } + + return { + + update: update + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLIndexedBufferRenderer( gl, extensions, infoRender ) { + + var mode; + + function setMode( value ) { + + mode = value; + + } + + var type, bytesPerElement; + + function setIndex( value ) { + + type = value.type; + bytesPerElement = value.bytesPerElement; + + } + + function render( start, count ) { + + gl.drawElements( mode, count, type, start * bytesPerElement ); + + infoRender.calls ++; + infoRender.vertices += count; + + if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3; + else if ( mode === gl.POINTS ) infoRender.points += count; + + } + + function renderInstances( geometry, start, count ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extension === null ) { + + console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + extension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount ); + + infoRender.calls ++; + infoRender.vertices += count * geometry.maxInstancedCount; + + if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3; + else if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count; + + } + + // + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLBufferRenderer( gl, extensions, infoRender ) { + + var mode; + + function setMode( value ) { + + mode = value; + + } + + function render( start, count ) { + + gl.drawArrays( mode, start, count ); + + infoRender.calls ++; + infoRender.vertices += count; + + if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3; + else if ( mode === gl.POINTS ) infoRender.points += count; + + } + + function renderInstances( geometry, start, count ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extension === null ) { + + console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + var position = geometry.attributes.position; + + if ( position.isInterleavedBufferAttribute ) { + + count = position.data.count; + + extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount ); + + } else { + + extension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount ); + + } + + infoRender.calls ++; + infoRender.vertices += count * geometry.maxInstancedCount; + + if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3; + else if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count; + + } + + // + + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLGeometries( gl, attributes, infoMemory ) { + + var geometries = {}; + var wireframeAttributes = {}; + + function onGeometryDispose( event ) { + + var geometry = event.target; + var buffergeometry = geometries[ geometry.id ]; + + if ( buffergeometry.index !== null ) { + + attributes.remove( buffergeometry.index ); + + } + + for ( var name in buffergeometry.attributes ) { + + attributes.remove( buffergeometry.attributes[ name ] ); + + } + + geometry.removeEventListener( 'dispose', onGeometryDispose ); + + delete geometries[ geometry.id ]; + + // TODO Remove duplicate code + + var attribute = wireframeAttributes[ geometry.id ]; + + if ( attribute ) { + + attributes.remove( attribute ); + delete wireframeAttributes[ geometry.id ]; + + } + + attribute = wireframeAttributes[ buffergeometry.id ]; + + if ( attribute ) { + + attributes.remove( attribute ); + delete wireframeAttributes[ buffergeometry.id ]; + + } + + // + + infoMemory.geometries --; + + } + + function get( object, geometry ) { + + var buffergeometry = geometries[ geometry.id ]; + + if ( buffergeometry ) return buffergeometry; + + geometry.addEventListener( 'dispose', onGeometryDispose ); + + if ( geometry.isBufferGeometry ) { + + buffergeometry = geometry; + + } else if ( geometry.isGeometry ) { + + if ( geometry._bufferGeometry === undefined ) { + + geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); + + } + + buffergeometry = geometry._bufferGeometry; + + } + + geometries[ geometry.id ] = buffergeometry; + + infoMemory.geometries ++; + + return buffergeometry; + + } + + function update( geometry ) { + + var index = geometry.index; + var geometryAttributes = geometry.attributes; + + if ( index !== null ) { + + attributes.update( index, gl.ELEMENT_ARRAY_BUFFER ); + + } + + for ( var name in geometryAttributes ) { + + attributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER ); + + } + + // morph targets + + var morphAttributes = geometry.morphAttributes; + + for ( var name in morphAttributes ) { + + var array = morphAttributes[ name ]; + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + attributes.update( array[ i ], gl.ARRAY_BUFFER ); + + } + + } + + } + + function getWireframeAttribute( geometry ) { + + var attribute = wireframeAttributes[ geometry.id ]; + + if ( attribute ) return attribute; + + var indices = []; + + var geometryIndex = geometry.index; + var geometryAttributes = geometry.attributes; + + // console.time( 'wireframe' ); + + if ( geometryIndex !== null ) { + + var array = geometryIndex.array; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var a = array[ i + 0 ]; + var b = array[ i + 1 ]; + var c = array[ i + 2 ]; + + indices.push( a, b, b, c, c, a ); + + } + + } else { + + var array = geometryAttributes.position.array; + + for ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { + + var a = i + 0; + var b = i + 1; + var c = i + 2; + + indices.push( a, b, b, c, c, a ); + + } + + } + + // console.timeEnd( 'wireframe' ); + + attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); + + attributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER ); + + wireframeAttributes[ geometry.id ] = attribute; + + return attribute; + + } + + return { + + get: get, + update: update, + + getWireframeAttribute: getWireframeAttribute + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function UniformsCache() { + + var lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + var uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + direction: new Vector3(), + color: new Color(), + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'SpotLight': + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0, + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'PointLight': + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0, + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1000 + }; + break; + + case 'HemisphereLight': + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + + case 'RectAreaLight': + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + // TODO (abelnation): set RectAreaLight shadow uniforms + }; + break; + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + +} + +function WebGLLights() { + + var cache = new UniformsCache(); + + var state = { + + hash: '', + + ambient: [ 0, 0, 0 ], + directional: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + point: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + + }; + + var vector3 = new Vector3(); + var matrix4 = new Matrix4(); + var matrix42 = new Matrix4(); + + function setup( lights, shadows, camera ) { + + var r = 0, g = 0, b = 0; + + var directionalLength = 0; + var pointLength = 0; + var spotLength = 0; + var rectAreaLength = 0; + var hemiLength = 0; + + var viewMatrix = camera.matrixWorldInverse; + + for ( var i = 0, l = lights.length; i < l; i ++ ) { + + var light = lights[ i ]; + + var color = light.color; + var intensity = light.intensity; + var distance = light.distance; + + var shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; + + if ( light.isAmbientLight ) { + + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + + } else if ( light.isDirectionalLight ) { + + var uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + + } + + state.directionalShadowMap[ directionalLength ] = shadowMap; + state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; + state.directional[ directionalLength ] = uniforms; + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + var uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( color ).multiplyScalar( intensity ); + uniforms.distance = distance; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + uniforms.coneCos = Math.cos( light.angle ); + uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); + uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + + } + + state.spotShadowMap[ spotLength ] = shadowMap; + state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; + state.spot[ spotLength ] = uniforms; + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + var uniforms = cache.get( light ); + + // (a) intensity controls irradiance of entire light + uniforms.color + .copy( color ) + .multiplyScalar( intensity / ( light.width * light.height ) ); + + // (b) intensity controls the radiance per light area + // uniforms.color.copy( color ).multiplyScalar( intensity ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + // extract local rotation of light to derive width/height half vectors + matrix42.identity(); + matrix4.copy( light.matrixWorld ); + matrix4.premultiply( viewMatrix ); + matrix42.extractRotation( matrix4 ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + uniforms.halfWidth.applyMatrix4( matrix42 ); + uniforms.halfHeight.applyMatrix4( matrix42 ); + + // TODO (abelnation): RectAreaLight distance? + // uniforms.distance = distance; + + state.rectArea[ rectAreaLength ] = uniforms; + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + var uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.distance = light.distance; + uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + uniforms.shadowCameraNear = shadow.camera.near; + uniforms.shadowCameraFar = shadow.camera.far; + + } + + state.pointShadowMap[ pointLength ] = shadowMap; + state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; + state.point[ pointLength ] = uniforms; + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + var uniforms = cache.get( light ); + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + uniforms.direction.transformDirection( viewMatrix ); + uniforms.direction.normalize(); + + uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); + uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); + + state.hemi[ hemiLength ] = uniforms; + + hemiLength ++; + + } + + } + + state.ambient[ 0 ] = r; + state.ambient[ 1 ] = g; + state.ambient[ 2 ] = b; + + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + + // TODO (sam-g-steel) why aren't we using join + state.hash = directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length; + + } + + return { + setup: setup, + state: state + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLObjects( geometries, infoRender ) { + + var updateList = {}; + + function update( object ) { + + var frame = infoRender.frame; + + var geometry = object.geometry; + var buffergeometry = geometries.get( object, geometry ); + + // Update once per frame + + if ( updateList[ buffergeometry.id ] !== frame ) { + + if ( geometry.isGeometry ) { + + buffergeometry.updateFromObject( object ); + + } + + geometries.update( buffergeometry ); + + updateList[ buffergeometry.id ] = frame; + + } + + return buffergeometry; + + } + + function clear() { + + updateList = {}; + + } + + return { + + update: update, + clear: clear + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function addLineNumbers( string ) { + + var lines = string.split( '\n' ); + + for ( var i = 0; i < lines.length; i ++ ) { + + lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; + + } + + return lines.join( '\n' ); + +} + +function WebGLShader( gl, type, string ) { + + var shader = gl.createShader( type ); + + gl.shaderSource( shader, string ); + gl.compileShader( shader ); + + if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) { + + console.error( 'THREE.WebGLShader: Shader couldn\'t compile.' ); + + } + + if ( gl.getShaderInfoLog( shader ) !== '' ) { + + console.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) ); + + } + + // --enable-privileged-webgl-extension + // console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); + + return shader; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var programIdCount = 0; + +function getEncodingComponents( encoding ) { + + switch ( encoding ) { + + case LinearEncoding: + return [ 'Linear','( value )' ]; + case sRGBEncoding: + return [ 'sRGB','( value )' ]; + case RGBEEncoding: + return [ 'RGBE','( value )' ]; + case RGBM7Encoding: + return [ 'RGBM','( value, 7.0 )' ]; + case RGBM16Encoding: + return [ 'RGBM','( value, 16.0 )' ]; + case RGBDEncoding: + return [ 'RGBD','( value, 256.0 )' ]; + case GammaEncoding: + return [ 'Gamma','( value, float( GAMMA_FACTOR ) )' ]; + default: + throw new Error( 'unsupported encoding: ' + encoding ); + + } + +} + +function getTexelDecodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return "vec4 " + functionName + "( vec4 value ) { return " + components[ 0 ] + "ToLinear" + components[ 1 ] + "; }"; + +} + +function getTexelEncodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return "vec4 " + functionName + "( vec4 value ) { return LinearTo" + components[ 0 ] + components[ 1 ] + "; }"; + +} + +function getToneMappingFunction( functionName, toneMapping ) { + + var toneMappingName; + + switch ( toneMapping ) { + + case LinearToneMapping: + toneMappingName = "Linear"; + break; + + case ReinhardToneMapping: + toneMappingName = "Reinhard"; + break; + + case Uncharted2ToneMapping: + toneMappingName = "Uncharted2"; + break; + + case CineonToneMapping: + toneMappingName = "OptimizedCineon"; + break; + + default: + throw new Error( 'unsupported toneMapping: ' + toneMapping ); + + } + + return "vec3 " + functionName + "( vec3 color ) { return " + toneMappingName + "ToneMapping( color ); }"; + +} + +function generateExtensions( extensions, parameters, rendererExtensions ) { + + extensions = extensions || {}; + + var chunks = [ + ( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '', + ( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '', + ( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '', + ( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : '' + ]; + + return chunks.filter( filterEmptyLine ).join( '\n' ); + +} + +function generateDefines( defines ) { + + var chunks = []; + + for ( var name in defines ) { + + var value = defines[ name ]; + + if ( value === false ) continue; + + chunks.push( '#define ' + name + ' ' + value ); + + } + + return chunks.join( '\n' ); + +} + +function fetchAttributeLocations( gl, program, identifiers ) { + + var attributes = {}; + + var n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES ); + + for ( var i = 0; i < n; i ++ ) { + + var info = gl.getActiveAttrib( program, i ); + var name = info.name; + + // console.log("THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:", name, i ); + + attributes[ name ] = gl.getAttribLocation( program, name ); + + } + + return attributes; + +} + +function filterEmptyLine( string ) { + + return string !== ''; + +} + +function replaceLightNums( string, parameters ) { + + return string + .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) + .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) + .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) + .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) + .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ); + +} + +function parseIncludes( string ) { + + var pattern = /^[ \t]*#include +<([\w\d.]+)>/gm; + + function replace( match, include ) { + + var replace = ShaderChunk[ include ]; + + if ( replace === undefined ) { + + throw new Error( 'Can not resolve #include <' + include + '>' ); + + } + + return parseIncludes( replace ); + + } + + return string.replace( pattern, replace ); + +} + +function unrollLoops( string ) { + + var pattern = /for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; + + function replace( match, start, end, snippet ) { + + var unroll = ''; + + for ( var i = parseInt( start ); i < parseInt( end ); i ++ ) { + + unroll += snippet.replace( /\[ i \]/g, '[ ' + i + ' ]' ); + + } + + return unroll; + + } + + return string.replace( pattern, replace ); + +} + +function WebGLProgram( renderer, extensions, code, material, shader, parameters ) { + + var gl = renderer.context; + + var defines = material.defines; + + var vertexShader = shader.vertexShader; + var fragmentShader = shader.fragmentShader; + + var shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; + + if ( parameters.shadowMapType === PCFShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; + + } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; + + } + + var envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + var envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; + var envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + + if ( parameters.envMap ) { + + switch ( material.envMap.mapping ) { + + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + break; + + case CubeUVReflectionMapping: + case CubeUVRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; + break; + + case EquirectangularReflectionMapping: + case EquirectangularRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_EQUIREC'; + break; + + case SphericalReflectionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_SPHERE'; + break; + + } + + switch ( material.envMap.mapping ) { + + case CubeRefractionMapping: + case EquirectangularRefractionMapping: + envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; + break; + + } + + switch ( material.combine ) { + + case MultiplyOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + break; + + case MixOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; + break; + + case AddOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; + break; + + } + + } + + var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; + + // console.log( 'building new program ' ); + + // + + var customExtensions = generateExtensions( material.extensions, parameters, extensions ); + + var customDefines = generateDefines( defines ); + + // + + var program = gl.createProgram(); + + var prefixVertex, prefixFragment; + + if ( material.isRawShaderMaterial ) { + + prefixVertex = [ + + customDefines, + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + customDefines, + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } else { + + prefixVertex = [ + + 'precision ' + parameters.precision + ' float;', + 'precision ' + parameters.precision + ' int;', + + '#define SHADER_NAME ' + shader.name, + + customDefines, + + parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + '#define MAX_BONES ' + parameters.maxBones, + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.skinning ? '#define USE_SKINNING' : '', + parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', + + parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', + parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + parameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + + '#ifdef USE_COLOR', + + ' attribute vec3 color;', + + '#endif', + + '#ifdef USE_MORPHTARGETS', + + ' attribute vec3 morphTarget0;', + ' attribute vec3 morphTarget1;', + ' attribute vec3 morphTarget2;', + ' attribute vec3 morphTarget3;', + + ' #ifdef USE_MORPHNORMALS', + + ' attribute vec3 morphNormal0;', + ' attribute vec3 morphNormal1;', + ' attribute vec3 morphNormal2;', + ' attribute vec3 morphNormal3;', + + ' #else', + + ' attribute vec3 morphTarget4;', + ' attribute vec3 morphTarget5;', + ' attribute vec3 morphTarget6;', + ' attribute vec3 morphTarget7;', + + ' #endif', + + '#endif', + + '#ifdef USE_SKINNING', + + ' attribute vec4 skinIndex;', + ' attribute vec4 skinWeight;', + + '#endif', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + + 'precision ' + parameters.precision + ' float;', + 'precision ' + parameters.precision + ' int;', + + '#define SHADER_NAME ' + shader.name, + + customDefines, + + parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapTypeDefine : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.envMap ? '#define ' + envMapBlendingDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + + parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, + '#define UNION_CLIPPING_PLANES ' + (parameters.numClippingPlanes - parameters.numClipIntersection), + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : '', + + parameters.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + parameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + parameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '', + + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + + ( parameters.toneMapping !== NoToneMapping ) ? "#define TONE_MAPPING" : '', + ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below + ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( "toneMapping", parameters.toneMapping ) : '', + + parameters.dithering ? '#define DITHERING' : '', + + ( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below + parameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', + parameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', + parameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', + parameters.outputEncoding ? getTexelEncodingFunction( "linearToOutputTexel", parameters.outputEncoding ) : '', + + parameters.depthPacking ? "#define DEPTH_PACKING " + material.depthPacking : '', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } + + vertexShader = parseIncludes( vertexShader ); + vertexShader = replaceLightNums( vertexShader, parameters ); + + fragmentShader = parseIncludes( fragmentShader ); + fragmentShader = replaceLightNums( fragmentShader, parameters ); + + if ( ! material.isShaderMaterial ) { + + vertexShader = unrollLoops( vertexShader ); + fragmentShader = unrollLoops( fragmentShader ); + + } + + var vertexGlsl = prefixVertex + vertexShader; + var fragmentGlsl = prefixFragment + fragmentShader; + + // console.log( '*VERTEX*', vertexGlsl ); + // console.log( '*FRAGMENT*', fragmentGlsl ); + + var glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl ); + var glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl ); + + gl.attachShader( program, glVertexShader ); + gl.attachShader( program, glFragmentShader ); + + // Force a particular attribute to index 0. + + if ( material.index0AttributeName !== undefined ) { + + gl.bindAttribLocation( program, 0, material.index0AttributeName ); + + } else if ( parameters.morphTargets === true ) { + + // programs with morphTargets displace position out of attribute 0 + gl.bindAttribLocation( program, 0, 'position' ); + + } + + gl.linkProgram( program ); + + var programLog = gl.getProgramInfoLog( program ); + var vertexLog = gl.getShaderInfoLog( glVertexShader ); + var fragmentLog = gl.getShaderInfoLog( glFragmentShader ); + + var runnable = true; + var haveDiagnostics = true; + + // console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) ); + // console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) ); + + if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) { + + runnable = false; + + console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog ); + + } else if ( programLog !== '' ) { + + console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); + + } else if ( vertexLog === '' || fragmentLog === '' ) { + + haveDiagnostics = false; + + } + + if ( haveDiagnostics ) { + + this.diagnostics = { + + runnable: runnable, + material: material, + + programLog: programLog, + + vertexShader: { + + log: vertexLog, + prefix: prefixVertex + + }, + + fragmentShader: { + + log: fragmentLog, + prefix: prefixFragment + + } + + }; + + } + + // clean up + + gl.deleteShader( glVertexShader ); + gl.deleteShader( glFragmentShader ); + + // set up caching for uniform locations + + var cachedUniforms; + + this.getUniforms = function () { + + if ( cachedUniforms === undefined ) { + + cachedUniforms = new WebGLUniforms( gl, program, renderer ); + + } + + return cachedUniforms; + + }; + + // set up caching for attribute locations + + var cachedAttributes; + + this.getAttributes = function () { + + if ( cachedAttributes === undefined ) { + + cachedAttributes = fetchAttributeLocations( gl, program ); + + } + + return cachedAttributes; + + }; + + // free resource + + this.destroy = function() { + + gl.deleteProgram( program ); + this.program = undefined; + + }; + + // DEPRECATED + + Object.defineProperties( this, { + + uniforms: { + get: function() { + + console.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' ); + return this.getUniforms(); + + } + }, + + attributes: { + get: function() { + + console.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' ); + return this.getAttributes(); + + } + } + + } ); + + + // + + this.id = programIdCount ++; + this.code = code; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + + return this; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLPrograms( renderer, extensions, capabilities ) { + + var programs = []; + + var shaderIDs = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'phong', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow' + }; + + var parameterNames = [ + "precision", "supportsVertexTextures", "map", "mapEncoding", "envMap", "envMapMode", "envMapEncoding", + "lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "displacementMap", "specularMap", + "roughnessMap", "metalnessMap", "gradientMap", + "alphaMap", "combine", "vertexColors", "fog", "useFog", "fogExp", + "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", + "maxBones", "useVertexTexture", "morphTargets", "morphNormals", + "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", + "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", + "shadowMapEnabled", "shadowMapType", "toneMapping", 'physicallyCorrectLights', + "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering" + ]; + + + function allocateBones( object ) { + + var skeleton = object.skeleton; + var bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + return 1024; + + } else { + + // default for when object is not specified + // ( for example when prebuilding shader to be used with multiple objects ) + // + // - leave some extra space for other uniforms + // - limit here is ANGLE's 254 max uniform vectors + // (up to 54 should be safe) + + var nVertexUniforms = capabilities.maxVertexUniforms; + var nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); + + var maxBones = Math.min( nVertexMatrices, bones.length ); + + if ( maxBones < bones.length ) { + + console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); + return 0; + + } + + return maxBones; + + } + + } + + function getTextureEncodingFromMap( map, gammaOverrideLinear ) { + + var encoding; + + if ( ! map ) { + + encoding = LinearEncoding; + + } else if ( map.isTexture ) { + + encoding = map.encoding; + + } else if ( map.isWebGLRenderTarget ) { + + console.warn( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ); + encoding = map.texture.encoding; + + } + + // add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point. + if ( encoding === LinearEncoding && gammaOverrideLinear ) { + + encoding = GammaEncoding; + + } + + return encoding; + + } + + this.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) { + + var shaderID = shaderIDs[ material.type ]; + + // heuristics to create shader parameters according to lights in the scene + // (not to blow over maxLights budget) + + var maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0; + var precision = capabilities.precision; + + if ( material.precision !== null ) { + + precision = capabilities.getMaxPrecision( material.precision ); + + if ( precision !== material.precision ) { + + console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); + + } + + } + + var currentRenderTarget = renderer.getRenderTarget(); + + var parameters = { + + shaderID: shaderID, + + precision: precision, + supportsVertexTextures: capabilities.vertexTextures, + outputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ), + map: !! material.map, + mapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ), + envMap: !! material.envMap, + envMapMode: material.envMap && material.envMap.mapping, + envMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ), + envMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ), + lightMap: !! material.lightMap, + aoMap: !! material.aoMap, + emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ), + bumpMap: !! material.bumpMap, + normalMap: !! material.normalMap, + displacementMap: !! material.displacementMap, + roughnessMap: !! material.roughnessMap, + metalnessMap: !! material.metalnessMap, + specularMap: !! material.specularMap, + alphaMap: !! material.alphaMap, + + gradientMap: !! material.gradientMap, + + combine: material.combine, + + vertexColors: material.vertexColors, + + fog: !! fog, + useFog: material.fog, + fogExp: ( fog && fog.isFogExp2 ), + + flatShading: material.flatShading, + + sizeAttenuation: material.sizeAttenuation, + logarithmicDepthBuffer: capabilities.logarithmicDepthBuffer, + + skinning: material.skinning && maxBones > 0, + maxBones: maxBones, + useVertexTexture: capabilities.floatVertexTextures, + + morphTargets: material.morphTargets, + morphNormals: material.morphNormals, + maxMorphTargets: renderer.maxMorphTargets, + maxMorphNormals: renderer.maxMorphNormals, + + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + + numClippingPlanes: nClipPlanes, + numClipIntersection: nClipIntersection, + + dithering: material.dithering, + + shadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + + toneMapping: renderer.toneMapping, + physicallyCorrectLights: renderer.physicallyCorrectLights, + + premultipliedAlpha: material.premultipliedAlpha, + + alphaTest: material.alphaTest, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + + depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false + + }; + + return parameters; + + }; + + this.getProgramCode = function ( material, parameters ) { + + var array = []; + + if ( parameters.shaderID ) { + + array.push( parameters.shaderID ); + + } else { + + array.push( material.fragmentShader ); + array.push( material.vertexShader ); + + } + + if ( material.defines !== undefined ) { + + for ( var name in material.defines ) { + + array.push( name ); + array.push( material.defines[ name ] ); + + } + + } + + for ( var i = 0; i < parameterNames.length; i ++ ) { + + array.push( parameters[ parameterNames[ i ] ] ); + + } + + array.push( material.onBeforeCompile.toString() ); + + array.push( renderer.gammaOutput ); + + return array.join(); + + }; + + this.acquireProgram = function ( material, shader, parameters, code ) { + + var program; + + // Check if code has been already compiled + for ( var p = 0, pl = programs.length; p < pl; p ++ ) { + + var programInfo = programs[ p ]; + + if ( programInfo.code === code ) { + + program = programInfo; + ++ program.usedTimes; + + break; + + } + + } + + if ( program === undefined ) { + + program = new WebGLProgram( renderer, extensions, code, material, shader, parameters ); + programs.push( program ); + + } + + return program; + + }; + + this.releaseProgram = function ( program ) { + + if ( -- program.usedTimes === 0 ) { + + // Remove from unordered set + var i = programs.indexOf( program ); + programs[ i ] = programs[ programs.length - 1 ]; + programs.pop(); + + // Free WebGL resources + program.destroy(); + + } + + }; + + // Exposed for resource monitoring & error feedback via renderer.info: + this.programs = programs; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, infoMemory ) { + + var _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); + + // + + function clampToMaxSize( image, maxSize ) { + + if ( image.width > maxSize || image.height > maxSize ) { + + // Warning: Scaling through the canvas will only work with images that use + // premultiplied alpha. + + var scale = maxSize / Math.max( image.width, image.height ); + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = Math.floor( image.width * scale ); + canvas.height = Math.floor( image.height * scale ); + + var context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height ); + + console.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); + + return canvas; + + } + + return image; + + } + + function isPowerOfTwo( image ) { + + return _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height ); + + } + + function makePowerOfTwo( image ) { + + if ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement ) { + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = _Math.nearestPowerOfTwo( image.width ); + canvas.height = _Math.nearestPowerOfTwo( image.height ); + + var context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, canvas.width, canvas.height ); + + console.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); + + return canvas; + + } + + return image; + + } + + function textureNeedsPowerOfTwo( texture ) { + + return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || + ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); + + } + + function textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) { + + return texture.generateMipmaps && isPowerOfTwo && + texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + + } + + // Fallback filters for non-power-of-2 textures + + function filterFallback( f ) { + + if ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) { + + return _gl.NEAREST; + + } + + return _gl.LINEAR; + + } + + // + + function onTextureDispose( event ) { + + var texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + deallocateTexture( texture ); + + infoMemory.textures --; + + + } + + function onRenderTargetDispose( event ) { + + var renderTarget = event.target; + + renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); + + deallocateRenderTarget( renderTarget ); + + infoMemory.textures --; + + } + + // + + function deallocateTexture( texture ) { + + var textureProperties = properties.get( texture ); + + if ( texture.image && textureProperties.__image__webglTextureCube ) { + + // cube texture + + _gl.deleteTexture( textureProperties.__image__webglTextureCube ); + + } else { + + // 2D texture + + if ( textureProperties.__webglInit === undefined ) return; + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + // remove all webgl properties + properties.remove( texture ); + + } + + function deallocateRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + if ( ! renderTarget ) return; + + if ( textureProperties.__webglTexture !== undefined ) { + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + if ( renderTarget.depthTexture ) { + + renderTarget.depthTexture.dispose(); + + } + + if ( renderTarget.isWebGLRenderTargetCube ) { + + for ( var i = 0; i < 6; i ++ ) { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); + + } + + } else { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); + + } + + properties.remove( renderTarget.texture ); + properties.remove( renderTarget ); + + } + + // + + + + function setTexture2D( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + var image = texture.image; + + if ( image === undefined ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture ); + + } else if ( image.complete === false ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture ); + + } else { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + + } + + function setTextureCube( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.image.length === 6 ) { + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + if ( ! textureProperties.__image__webglTextureCube ) { + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__image__webglTextureCube = _gl.createTexture(); + + infoMemory.textures ++; + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); + + _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); + + var isCompressed = ( texture && texture.isCompressedTexture ); + var isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); + + var cubeImage = []; + + for ( var i = 0; i < 6; i ++ ) { + + if ( ! isCompressed && ! isDataTexture ) { + + cubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize ); + + } else { + + cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; + + } + + } + + var image = cubeImage[ 0 ], + isPowerOfTwoImage = isPowerOfTwo( image ), + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ); + + setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage ); + + for ( var i = 0; i < 6; i ++ ) { + + if ( ! isCompressed ) { + + if ( isDataTexture ) { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); + + } else { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] ); + + } + + } else { + + var mipmap, mipmaps = cubeImage[ i ].mipmaps; + + for ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) { + + mipmap = mipmaps[ j ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { + + state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); + + } + + } else { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) { + + _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } else { + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); + + } + + } + + } + + function setTextureCubeDynamic( texture, slot ) { + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture ); + + } + + function setTextureParameters( textureType, texture, isPowerOfTwoImage ) { + + var extension; + + if ( isPowerOfTwoImage ) { + + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) ); + + _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) ); + + } else { + + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE ); + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE ); + + if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture ); + + } + + _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) ); + + if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture ); + + } + + } + + extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension ) { + + if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; + if ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return; + + if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { + + _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); + properties.get( texture ).__currentAnisotropy = texture.anisotropy; + + } + + } + + } + + function uploadTexture( textureProperties, texture, slot ) { + + if ( textureProperties.__webglInit === undefined ) { + + textureProperties.__webglInit = true; + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + infoMemory.textures ++; + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + + _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); + _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha ); + _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment ); + + var image = clampToMaxSize( texture.image, capabilities.maxTextureSize ); + + if ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) { + + image = makePowerOfTwo( image ); + + } + + var isPowerOfTwoImage = isPowerOfTwo( image ), + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ); + + setTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage ); + + var mipmap, mipmaps = texture.mipmaps; + + if ( texture.isDepthTexture ) { + + // populate depth texture with dummy data + + var internalFormat = _gl.DEPTH_COMPONENT; + + if ( texture.type === FloatType ) { + + if ( !_isWebGL2 ) throw new Error('Float Depth Texture only supported in WebGL2.0'); + internalFormat = _gl.DEPTH_COMPONENT32F; + + } else if ( _isWebGL2 ) { + + // WebGL 2.0 requires signed internalformat for glTexImage2D + internalFormat = _gl.DEPTH_COMPONENT16; + + } + + if ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) { + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); + + texture.type = UnsignedShortType; + glType = utils.convert( texture.type ); + + } + + } + + // Depth stencil textures need the DEPTH_STENCIL internal format + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.format === DepthStencilFormat ) { + + internalFormat = _gl.DEPTH_STENCIL; + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedInt248Type ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); + + texture.type = UnsignedInt248Type; + glType = utils.convert( texture.type ); + + } + + } + + state.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null ); + + } else if ( texture.isDataTexture ) { + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && isPowerOfTwoImage ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + texture.generateMipmaps = false; + + } else { + + state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data ); + + } + + } else if ( texture.isCompressedTexture ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { + + state.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); + + } + + } else { + + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } else { + + // regular Texture (image, video, canvas) + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && isPowerOfTwoImage ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap ); + + } + + texture.generateMipmaps = false; + + } else { + + state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image ); + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) _gl.generateMipmap( _gl.TEXTURE_2D ); + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + // Render targets + + // Setup storage for target texture and bind it to correct framebuffer + function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { + + var glFormat = utils.convert( renderTarget.texture.format ); + var glType = utils.convert( renderTarget.texture.type ); + state.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + + } + + // Setup storage for internal depth/stencil buffers and bind to correct framebuffer + function setupRenderBufferStorage( renderbuffer, renderTarget ) { + + _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer ); + + if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { + + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height ); + _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); + + } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { + + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height ); + _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); + + } else { + + // FIXME: We don't support !depth !stencil + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height ); + + } + + _gl.bindRenderbuffer( _gl.RENDERBUFFER, null ); + + } + + // Setup resources for a Depth Texture for a FBO (needs an extension) + function setupDepthTexture( framebuffer, renderTarget ) { + + var isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube ); + if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + + if ( !( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { + + throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); + + } + + // upload an empty depth texture with framebuffer size + if ( !properties.get( renderTarget.depthTexture ).__webglTexture || + renderTarget.depthTexture.image.width !== renderTarget.width || + renderTarget.depthTexture.image.height !== renderTarget.height ) { + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + } + + setTexture2D( renderTarget.depthTexture, 0 ); + + var webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; + + if ( renderTarget.depthTexture.format === DepthFormat ) { + + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); + + } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { + + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); + + } else { + + throw new Error( 'Unknown depthTexture format' ); + + } + + } + + // Setup GL resources for a non-texture depth buffer + function setupDepthRenderbuffer( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + + var isCube = ( renderTarget.isWebGLRenderTargetCube === true ); + + if ( renderTarget.depthTexture ) { + + if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); + + setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); + + } else { + + if ( isCube ) { + + renderTargetProperties.__webglDepthbuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] ); + renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget ); + + } + + } else { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget ); + + } + + } + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + + } + + // Set up GL resources for the render target + function setupRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + infoMemory.textures ++; + + var isCube = ( renderTarget.isWebGLRenderTargetCube === true ); + var isTargetPowerOfTwo = isPowerOfTwo( renderTarget ); + + // Setup framebuffer + + if ( isCube ) { + + renderTargetProperties.__webglFramebuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + + } + + } else { + + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + + } + + // Setup color buffer + + if ( isCube ) { + + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture ); + setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo ); + + for ( var i = 0; i < 6; i ++ ) { + + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i ); + + } + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, null ); + + } else { + + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + setTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D ); + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_2D ); + state.bindTexture( _gl.TEXTURE_2D, null ); + + } + + // Setup depth and stencil buffers + + if ( renderTarget.depthBuffer ) { + + setupDepthRenderbuffer( renderTarget ); + + } + + } + + function updateRenderTargetMipmap( renderTarget ) { + + var texture = renderTarget.texture; + var isTargetPowerOfTwo = isPowerOfTwo( renderTarget ); + + if ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) { + + var target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; + var webglTexture = properties.get( texture ).__webglTexture; + + state.bindTexture( target, webglTexture ); + _gl.generateMipmap( target ); + state.bindTexture( target, null ); + + } + + } + + this.setTexture2D = setTexture2D; + this.setTextureCube = setTextureCube; + this.setTextureCubeDynamic = setTextureCubeDynamic; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + +} + +/** + * @author fordacious / fordacious.github.io + */ + +function WebGLProperties() { + + var properties = {}; + + function get( object ) { + + var uuid = object.uuid; + var map = properties[ uuid ]; + + if ( map === undefined ) { + + map = {}; + properties[ uuid ] = map; + + } + + return map; + + } + + function remove( object ) { + + delete properties[ object.uuid ]; + + } + + function clear() { + + properties = {}; + + } + + return { + get: get, + remove: remove, + clear: clear + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLState( gl, extensions, utils ) { + + function ColorBuffer() { + + var locked = false; + + var color = new Vector4(); + var currentColorMask = null; + var currentColorClear = new Vector4( 0, 0, 0, 0 ); + + return { + + setMask: function ( colorMask ) { + + if ( currentColorMask !== colorMask && ! locked ) { + + gl.colorMask( colorMask, colorMask, colorMask, colorMask ); + currentColorMask = colorMask; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( r, g, b, a, premultipliedAlpha ) { + + if ( premultipliedAlpha === true ) { + + r *= a; g *= a; b *= a; + + } + + color.set( r, g, b, a ); + + if ( currentColorClear.equals( color ) === false ) { + + gl.clearColor( r, g, b, a ); + currentColorClear.copy( color ); + + } + + }, + + reset: function () { + + locked = false; + + currentColorMask = null; + currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state + + } + + }; + + } + + function DepthBuffer() { + + var locked = false; + + var currentDepthMask = null; + var currentDepthFunc = null; + var currentDepthClear = null; + + return { + + setTest: function ( depthTest ) { + + if ( depthTest ) { + + enable( gl.DEPTH_TEST ); + + } else { + + disable( gl.DEPTH_TEST ); + + } + + }, + + setMask: function ( depthMask ) { + + if ( currentDepthMask !== depthMask && ! locked ) { + + gl.depthMask( depthMask ); + currentDepthMask = depthMask; + + } + + }, + + setFunc: function ( depthFunc ) { + + if ( currentDepthFunc !== depthFunc ) { + + if ( depthFunc ) { + + switch ( depthFunc ) { + + case NeverDepth: + + gl.depthFunc( gl.NEVER ); + break; + + case AlwaysDepth: + + gl.depthFunc( gl.ALWAYS ); + break; + + case LessDepth: + + gl.depthFunc( gl.LESS ); + break; + + case LessEqualDepth: + + gl.depthFunc( gl.LEQUAL ); + break; + + case EqualDepth: + + gl.depthFunc( gl.EQUAL ); + break; + + case GreaterEqualDepth: + + gl.depthFunc( gl.GEQUAL ); + break; + + case GreaterDepth: + + gl.depthFunc( gl.GREATER ); + break; + + case NotEqualDepth: + + gl.depthFunc( gl.NOTEQUAL ); + break; + + default: + + gl.depthFunc( gl.LEQUAL ); + + } + + } else { + + gl.depthFunc( gl.LEQUAL ); + + } + + currentDepthFunc = depthFunc; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( depth ) { + + if ( currentDepthClear !== depth ) { + + gl.clearDepth( depth ); + currentDepthClear = depth; + + } + + }, + + reset: function () { + + locked = false; + + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + + } + + }; + + } + + function StencilBuffer() { + + var locked = false; + + var currentStencilMask = null; + var currentStencilFunc = null; + var currentStencilRef = null; + var currentStencilFuncMask = null; + var currentStencilFail = null; + var currentStencilZFail = null; + var currentStencilZPass = null; + var currentStencilClear = null; + + return { + + setTest: function ( stencilTest ) { + + if ( stencilTest ) { + + enable( gl.STENCIL_TEST ); + + } else { + + disable( gl.STENCIL_TEST ); + + } + + }, + + setMask: function ( stencilMask ) { + + if ( currentStencilMask !== stencilMask && ! locked ) { + + gl.stencilMask( stencilMask ); + currentStencilMask = stencilMask; + + } + + }, + + setFunc: function ( stencilFunc, stencilRef, stencilMask ) { + + if ( currentStencilFunc !== stencilFunc || + currentStencilRef !== stencilRef || + currentStencilFuncMask !== stencilMask ) { + + gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); + + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + + } + + }, + + setOp: function ( stencilFail, stencilZFail, stencilZPass ) { + + if ( currentStencilFail !== stencilFail || + currentStencilZFail !== stencilZFail || + currentStencilZPass !== stencilZPass ) { + + gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); + + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( stencil ) { + + if ( currentStencilClear !== stencil ) { + + gl.clearStencil( stencil ); + currentStencilClear = stencil; + + } + + }, + + reset: function () { + + locked = false; + + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + + } + + }; + + } + + // + + var colorBuffer = new ColorBuffer(); + var depthBuffer = new DepthBuffer(); + var stencilBuffer = new StencilBuffer(); + + var maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); + var newAttributes = new Uint8Array( maxVertexAttributes ); + var enabledAttributes = new Uint8Array( maxVertexAttributes ); + var attributeDivisors = new Uint8Array( maxVertexAttributes ); + + var capabilities = {}; + + var compressedTextureFormats = null; + + var currentProgram = null; + + var currentBlending = null; + var currentBlendEquation = null; + var currentBlendSrc = null; + var currentBlendDst = null; + var currentBlendEquationAlpha = null; + var currentBlendSrcAlpha = null; + var currentBlendDstAlpha = null; + var currentPremultipledAlpha = false; + + var currentFlipSided = null; + var currentCullFace = null; + + var currentLineWidth = null; + + var currentPolygonOffsetFactor = null; + var currentPolygonOffsetUnits = null; + + var maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS ); + + var version = parseFloat( /^WebGL\ ([0-9])/.exec( gl.getParameter( gl.VERSION ) )[ 1 ] ); + var lineWidthAvailable = parseFloat( version ) >= 1.0; + + var currentTextureSlot = null; + var currentBoundTextures = {}; + + var currentScissor = new Vector4(); + var currentViewport = new Vector4(); + + function createTexture( type, target, count ) { + + var data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. + var texture = gl.createTexture(); + + gl.bindTexture( type, texture ); + gl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + gl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + + for ( var i = 0; i < count; i ++ ) { + + gl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data ); + + } + + return texture; + + } + + var emptyTextures = {}; + emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 ); + emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 ); + + // init + + colorBuffer.setClear( 0, 0, 0, 1 ); + depthBuffer.setClear( 1 ); + stencilBuffer.setClear( 0 ); + + enable( gl.DEPTH_TEST ); + depthBuffer.setFunc( LessEqualDepth ); + + setFlipSided( false ); + setCullFace( CullFaceBack ); + enable( gl.CULL_FACE ); + + enable( gl.BLEND ); + setBlending( NormalBlending ); + + // + + function initAttributes() { + + for ( var i = 0, l = newAttributes.length; i < l; i ++ ) { + + newAttributes[ i ] = 0; + + } + + } + + function enableAttribute( attribute ) { + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== 0 ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + extension.vertexAttribDivisorANGLE( attribute, 0 ); + attributeDivisors[ attribute ] = 0; + + } + + } + + function enableAttributeAndDivisor( attribute, meshPerAttribute ) { + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + extension.vertexAttribDivisorANGLE( attribute, meshPerAttribute ); + attributeDivisors[ attribute ] = meshPerAttribute; + + } + + } + + function disableUnusedAttributes() { + + for ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) { + + if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + } + + function enable( id ) { + + if ( capabilities[ id ] !== true ) { + + gl.enable( id ); + capabilities[ id ] = true; + + } + + } + + function disable( id ) { + + if ( capabilities[ id ] !== false ) { + + gl.disable( id ); + capabilities[ id ] = false; + + } + + } + + function getCompressedTextureFormats() { + + if ( compressedTextureFormats === null ) { + + compressedTextureFormats = []; + + if ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) || + extensions.get( 'WEBGL_compressed_texture_s3tc' ) || + extensions.get( 'WEBGL_compressed_texture_etc1' ) ) { + + var formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS ); + + for ( var i = 0; i < formats.length; i ++ ) { + + compressedTextureFormats.push( formats[ i ] ); + + } + + } + + } + + return compressedTextureFormats; + + } + + function useProgram( program ) { + + if ( currentProgram !== program ) { + + gl.useProgram( program ); + + currentProgram = program; + + return true; + + } + + return false; + + } + + function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { + + if ( blending !== NoBlending ) { + + enable( gl.BLEND ); + + } else { + + disable( gl.BLEND ); + + } + + if ( blending !== CustomBlending ) { + + if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { + + switch ( blending ) { + + case AdditiveBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.SRC_ALPHA, gl.ONE ); + + } + break; + + case SubtractiveBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR ); + + } + break; + + case MultiplyBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.ZERO, gl.SRC_COLOR ); + + } + break; + + default: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); + + } else { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); + + } + + } + + } + + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + + } else { + + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + + if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { + + gl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) ); + + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + + } + + if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { + + gl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) ); + + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + + } + + } + + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + + } + + function setMaterial( material ) { + + material.side === DoubleSide + ? disable( gl.CULL_FACE ) + : enable( gl.CULL_FACE ); + + setFlipSided( material.side === BackSide ); + + material.transparent === true + ? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ) + : setBlending( NoBlending ); + + depthBuffer.setFunc( material.depthFunc ); + depthBuffer.setTest( material.depthTest ); + depthBuffer.setMask( material.depthWrite ); + colorBuffer.setMask( material.colorWrite ); + + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + + } + + // + + function setFlipSided( flipSided ) { + + if ( currentFlipSided !== flipSided ) { + + if ( flipSided ) { + + gl.frontFace( gl.CW ); + + } else { + + gl.frontFace( gl.CCW ); + + } + + currentFlipSided = flipSided; + + } + + } + + function setCullFace( cullFace ) { + + if ( cullFace !== CullFaceNone ) { + + enable( gl.CULL_FACE ); + + if ( cullFace !== currentCullFace ) { + + if ( cullFace === CullFaceBack ) { + + gl.cullFace( gl.BACK ); + + } else if ( cullFace === CullFaceFront ) { + + gl.cullFace( gl.FRONT ); + + } else { + + gl.cullFace( gl.FRONT_AND_BACK ); + + } + + } + + } else { + + disable( gl.CULL_FACE ); + + } + + currentCullFace = cullFace; + + } + + function setLineWidth( width ) { + + if ( width !== currentLineWidth ) { + + if ( lineWidthAvailable ) gl.lineWidth( width ); + + currentLineWidth = width; + + } + + } + + function setPolygonOffset( polygonOffset, factor, units ) { + + if ( polygonOffset ) { + + enable( gl.POLYGON_OFFSET_FILL ); + + if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { + + gl.polygonOffset( factor, units ); + + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + + } + + } else { + + disable( gl.POLYGON_OFFSET_FILL ); + + } + + } + + function setScissorTest( scissorTest ) { + + if ( scissorTest ) { + + enable( gl.SCISSOR_TEST ); + + } else { + + disable( gl.SCISSOR_TEST ); + + } + + } + + // texture + + function activeTexture( webglSlot ) { + + if ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1; + + if ( currentTextureSlot !== webglSlot ) { + + gl.activeTexture( webglSlot ); + currentTextureSlot = webglSlot; + + } + + } + + function bindTexture( webglType, webglTexture ) { + + if ( currentTextureSlot === null ) { + + activeTexture(); + + } + + var boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture === undefined ) { + + boundTexture = { type: undefined, texture: undefined }; + currentBoundTextures[ currentTextureSlot ] = boundTexture; + + } + + if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { + + gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); + + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + + } + + } + + function compressedTexImage2D() { + + try { + + gl.compressedTexImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage2D() { + + try { + + gl.texImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + // + + function scissor( scissor ) { + + if ( currentScissor.equals( scissor ) === false ) { + + gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); + currentScissor.copy( scissor ); + + } + + } + + function viewport( viewport ) { + + if ( currentViewport.equals( viewport ) === false ) { + + gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); + currentViewport.copy( viewport ); + + } + + } + + // + + function reset() { + + for ( var i = 0; i < enabledAttributes.length; i ++ ) { + + if ( enabledAttributes[ i ] === 1 ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + capabilities = {}; + + compressedTextureFormats = null; + + currentTextureSlot = null; + currentBoundTextures = {}; + + currentProgram = null; + + currentBlending = null; + + currentFlipSided = null; + currentCullFace = null; + + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + + } + + return { + + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + + initAttributes: initAttributes, + enableAttribute: enableAttribute, + enableAttributeAndDivisor: enableAttributeAndDivisor, + disableUnusedAttributes: disableUnusedAttributes, + enable: enable, + disable: disable, + getCompressedTextureFormats: getCompressedTextureFormats, + + useProgram: useProgram, + + setBlending: setBlending, + setMaterial: setMaterial, + + setFlipSided: setFlipSided, + setCullFace: setCullFace, + + setLineWidth: setLineWidth, + setPolygonOffset: setPolygonOffset, + + setScissorTest: setScissorTest, + + activeTexture: activeTexture, + bindTexture: bindTexture, + compressedTexImage2D: compressedTexImage2D, + texImage2D: texImage2D, + + scissor: scissor, + viewport: viewport, + + reset: reset + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLCapabilities( gl, extensions, parameters ) { + + var maxAnisotropy; + + function getMaxAnisotropy() { + + if ( maxAnisotropy !== undefined ) return maxAnisotropy; + + var extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension !== null ) { + + maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); + + } else { + + maxAnisotropy = 0; + + } + + return maxAnisotropy; + + } + + function getMaxPrecision( precision ) { + + if ( precision === 'highp' ) { + + if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 && + gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) { + + return 'highp'; + + } + + precision = 'mediump'; + + } + + if ( precision === 'mediump' ) { + + if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 && + gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) { + + return 'mediump'; + + } + + } + + return 'lowp'; + + } + + var precision = parameters.precision !== undefined ? parameters.precision : 'highp'; + var maxPrecision = getMaxPrecision( precision ); + + if ( maxPrecision !== precision ) { + + console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); + precision = maxPrecision; + + } + + var logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true && !! extensions.get( 'EXT_frag_depth' ); + + var maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ); + var maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ); + var maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE ); + var maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE ); + + var maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); + var maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS ); + var maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS ); + var maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS ); + + var vertexTextures = maxVertexTextures > 0; + var floatFragmentTextures = !! extensions.get( 'OES_texture_float' ); + var floatVertexTextures = vertexTextures && floatFragmentTextures; + + return { + + getMaxAnisotropy: getMaxAnisotropy, + getMaxPrecision: getMaxPrecision, + + precision: precision, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + maxTextures: maxTextures, + maxVertexTextures: maxVertexTextures, + maxTextureSize: maxTextureSize, + maxCubemapSize: maxCubemapSize, + + maxAttributes: maxAttributes, + maxVertexUniforms: maxVertexUniforms, + maxVaryings: maxVaryings, + maxFragmentUniforms: maxFragmentUniforms, + + vertexTextures: vertexTextures, + floatFragmentTextures: floatFragmentTextures, + floatVertexTextures: floatVertexTextures + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ArrayCamera( array ) { + + PerspectiveCamera.call( this ); + + this.cameras = array || []; + +} + +ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { + + constructor: ArrayCamera, + + isArrayCamera: true + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebVRManager( renderer ) { + + var scope = this; + + var device = null; + var frameData = null; + + if ( 'VRFrameData' in window ) { + + frameData = new window.VRFrameData(); + + } + + var matrixWorldInverse = new Matrix4(); + + var standingMatrix = new Matrix4(); + var standingMatrixInverse = new Matrix4(); + + var cameraL = new PerspectiveCamera(); + cameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 ); + cameraL.layers.enable( 1 ); + + var cameraR = new PerspectiveCamera(); + cameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 ); + cameraR.layers.enable( 2 ); + + var cameraVR = new ArrayCamera( [ cameraL, cameraR ] ); + cameraVR.layers.enable( 1 ); + cameraVR.layers.enable( 2 ); + + // + + var currentSize, currentPixelRatio; + + function onVRDisplayPresentChange() { + + if ( device !== null && device.isPresenting ) { + + var eyeParameters = device.getEyeParameters( 'left' ); + var renderWidth = eyeParameters.renderWidth; + var renderHeight = eyeParameters.renderHeight; + + currentPixelRatio = renderer.getPixelRatio(); + currentSize = renderer.getSize(); + + renderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 ); + + } else if ( scope.enabled ) { + + renderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio ); + + } + + } + + window.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false ); + + // + + this.enabled = false; + this.standing = false; + + this.getDevice = function () { + + return device; + + }; + + this.setDevice = function ( value ) { + + if ( value !== undefined ) device = value; + + }; + + this.getCamera = function ( camera ) { + + if ( device === null ) return camera; + + device.depthNear = camera.near; + device.depthFar = camera.far; + + device.getFrameData( frameData ); + + // + + var pose = frameData.pose; + + if ( pose.position !== null ) { + + camera.position.fromArray( pose.position ); + + } else { + + camera.position.set( 0, 0, 0 ); + + } + + if ( pose.orientation !== null ) { + + camera.quaternion.fromArray( pose.orientation ); + + } + + camera.updateMatrixWorld(); + + var stageParameters = device.stageParameters; + + if ( this.standing && stageParameters ) { + + standingMatrix.fromArray( stageParameters.sittingToStandingTransform ); + standingMatrixInverse.getInverse( standingMatrix ); + + camera.matrixWorld.multiply( standingMatrix ); + camera.matrixWorldInverse.multiply( standingMatrixInverse ); + + } + + if ( device.isPresenting === false ) return camera; + + // + + cameraL.near = camera.near; + cameraR.near = camera.near; + + cameraL.far = camera.far; + cameraR.far = camera.far; + + cameraVR.matrixWorld.copy( camera.matrixWorld ); + cameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse ); + + cameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix ); + cameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix ); + + if ( this.standing && stageParameters ) { + + cameraL.matrixWorldInverse.multiply( standingMatrixInverse ); + cameraR.matrixWorldInverse.multiply( standingMatrixInverse ); + + } + + var parent = camera.parent; + + if ( parent !== null ) { + + matrixWorldInverse.getInverse( parent.matrixWorld ); + + cameraL.matrixWorldInverse.multiply( matrixWorldInverse ); + cameraR.matrixWorldInverse.multiply( matrixWorldInverse ); + + } + + // envMap and Mirror needs camera.matrixWorld + + cameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse ); + cameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse ); + + cameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix ); + cameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix ); + + // HACK @mrdoob + // https://github.com/w3c/webvr/issues/203 + + cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); + + // + + var layers = device.getLayers(); + + if ( layers.length ) { + + var layer = layers[ 0 ]; + + if ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) { + + cameraL.bounds.fromArray( layer.leftBounds ); + + } + + if ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) { + + cameraR.bounds.fromArray( layer.rightBounds ); + + } + + } + + return cameraVR; + + }; + + this.getStandingMatrix = function () { + + return standingMatrix; + + }; + + this.submitFrame = function () { + + if ( device && device.isPresenting ) device.submitFrame(); + + }; + + this.dispose = function() { + + window.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange ); + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLExtensions( gl ) { + + var extensions = {}; + + return { + + get: function ( name ) { + + if ( extensions[ name ] !== undefined ) { + + return extensions[ name ]; + + } + + var extension; + + switch ( name ) { + + case 'WEBGL_depth_texture': + extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); + break; + + case 'EXT_texture_filter_anisotropic': + extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); + break; + + case 'WEBGL_compressed_texture_s3tc': + extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); + break; + + case 'WEBGL_compressed_texture_pvrtc': + extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + break; + + case 'WEBGL_compressed_texture_etc1': + extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' ); + break; + + default: + extension = gl.getExtension( name ); + + } + + if ( extension === null ) { + + console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); + + } + + extensions[ name ] = extension; + + return extension; + + } + + }; + +} + +/** + * @author tschw + */ + +function WebGLClipping() { + + var scope = this, + + globalState = null, + numGlobalPlanes = 0, + localClippingEnabled = false, + renderingShadows = false, + + plane = new Plane(), + viewNormalMatrix = new Matrix3(), + + uniform = { value: null, needsUpdate: false }; + + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + + this.init = function( planes, enableLocalClipping, camera ) { + + var enabled = + planes.length !== 0 || + enableLocalClipping || + // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || + localClippingEnabled; + + localClippingEnabled = enableLocalClipping; + + globalState = projectPlanes( planes, camera, 0 ); + numGlobalPlanes = planes.length; + + return enabled; + + }; + + this.beginShadows = function() { + + renderingShadows = true; + projectPlanes( null ); + + }; + + this.endShadows = function() { + + renderingShadows = false; + resetGlobalState(); + + }; + + this.setState = function( planes, clipIntersection, clipShadows, camera, cache, fromCache ) { + + if ( ! localClippingEnabled || + planes === null || planes.length === 0 || + renderingShadows && ! clipShadows ) { + // there's no local clipping + + if ( renderingShadows ) { + // there's no global clipping + + projectPlanes( null ); + + } else { + + resetGlobalState(); + } + + } else { + + var nGlobal = renderingShadows ? 0 : numGlobalPlanes, + lGlobal = nGlobal * 4, + + dstArray = cache.clippingState || null; + + uniform.value = dstArray; // ensure unique state + + dstArray = projectPlanes( planes, camera, lGlobal, fromCache ); + + for ( var i = 0; i !== lGlobal; ++ i ) { + + dstArray[ i ] = globalState[ i ]; + + } + + cache.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + + } + + + }; + + function resetGlobalState() { + + if ( uniform.value !== globalState ) { + + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + + } + + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + + } + + function projectPlanes( planes, camera, dstOffset, skipTransform ) { + + var nPlanes = planes !== null ? planes.length : 0, + dstArray = null; + + if ( nPlanes !== 0 ) { + + dstArray = uniform.value; + + if ( skipTransform !== true || dstArray === null ) { + + var flatSize = dstOffset + nPlanes * 4, + viewMatrix = camera.matrixWorldInverse; + + viewNormalMatrix.getNormalMatrix( viewMatrix ); + + if ( dstArray === null || dstArray.length < flatSize ) { + + dstArray = new Float32Array( flatSize ); + + } + + for ( var i = 0, i4 = dstOffset; + i !== nPlanes; ++ i, i4 += 4 ) { + + plane.copy( planes[ i ] ). + applyMatrix4( viewMatrix, viewNormalMatrix ); + + plane.normal.toArray( dstArray, i4 ); + dstArray[ i4 + 3 ] = plane.constant; + + } + + } + + uniform.value = dstArray; + uniform.needsUpdate = true; + + } + + scope.numPlanes = nPlanes; + + return dstArray; + + } + +} + +/** + * @author thespite / http://www.twitter.com/thespite + */ + +function WebGLUtils ( gl, extensions ) { + + function convert ( p ) { + + var extension; + + if ( p === RepeatWrapping ) return gl.REPEAT; + if ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE; + if ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT; + + if ( p === NearestFilter ) return gl.NEAREST; + if ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST; + if ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR; + + if ( p === LinearFilter ) return gl.LINEAR; + if ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST; + if ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR; + + if ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE; + if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4; + if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1; + if ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5; + + if ( p === ByteType ) return gl.BYTE; + if ( p === ShortType ) return gl.SHORT; + if ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT; + if ( p === IntType ) return gl.INT; + if ( p === UnsignedIntType ) return gl.UNSIGNED_INT; + if ( p === FloatType ) return gl.FLOAT; + + if ( p === HalfFloatType ) { + + extension = extensions.get( 'OES_texture_half_float' ); + + if ( extension !== null ) return extension.HALF_FLOAT_OES; + + } + + if ( p === AlphaFormat ) return gl.ALPHA; + if ( p === RGBFormat ) return gl.RGB; + if ( p === RGBAFormat ) return gl.RGBA; + if ( p === LuminanceFormat ) return gl.LUMINANCE; + if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA; + if ( p === DepthFormat ) return gl.DEPTH_COMPONENT; + if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL; + + if ( p === AddEquation ) return gl.FUNC_ADD; + if ( p === SubtractEquation ) return gl.FUNC_SUBTRACT; + if ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT; + + if ( p === ZeroFactor ) return gl.ZERO; + if ( p === OneFactor ) return gl.ONE; + if ( p === SrcColorFactor ) return gl.SRC_COLOR; + if ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR; + if ( p === SrcAlphaFactor ) return gl.SRC_ALPHA; + if ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA; + if ( p === DstAlphaFactor ) return gl.DST_ALPHA; + if ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA; + + if ( p === DstColorFactor ) return gl.DST_COLOR; + if ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR; + if ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE; + + if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + if ( extension !== null ) { + + if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + + } + + } + + if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + if ( extension !== null ) { + + if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + + } + + } + + if ( p === RGB_ETC1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); + + if ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } + + if ( p === MinEquation || p === MaxEquation ) { + + extension = extensions.get( 'EXT_blend_minmax' ); + + if ( extension !== null ) { + + if ( p === MinEquation ) return extension.MIN_EXT; + if ( p === MaxEquation ) return extension.MAX_EXT; + + } + + } + + if ( p === UnsignedInt248Type ) { + + extension = extensions.get( 'WEBGL_depth_texture' ); + + if ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL; + + } + + return 0; + + } + + return { convert: convert } + +} + +// import { Sphere } from '../math/Sphere'; +/** + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author szimek / https://github.com/szimek/ + * @author tschw + */ + +function WebGLRenderer( parameters ) { + + console.log( 'THREE.WebGLRenderer', REVISION ); + + parameters = parameters || {}; + + var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ), + _context = parameters.context !== undefined ? parameters.context : null, + + _alpha = parameters.alpha !== undefined ? parameters.alpha : false, + _depth = parameters.depth !== undefined ? parameters.depth : true, + _stencil = parameters.stencil !== undefined ? parameters.stencil : true, + _antialias = parameters.antialias !== undefined ? parameters.antialias : false, + _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, + _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false; + + var lightsArray = []; + var shadowsArray = []; + + var currentRenderList = null; + + var spritesArray = []; + var flaresArray = []; + + // public properties + + this.domElement = _canvas; + this.context = null; + + // clearing + + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + + // scene graph + + this.sortObjects = true; + + // user-defined clipping + + this.clippingPlanes = []; + this.localClippingEnabled = false; + + // physically based shading + + this.gammaFactor = 2.0; // for backwards compatibility + this.gammaInput = false; + this.gammaOutput = false; + + // physical lights + + this.physicallyCorrectLights = false; + + // tone mapping + + this.toneMapping = LinearToneMapping; + this.toneMappingExposure = 1.0; + this.toneMappingWhitePoint = 1.0; + + // morphs + + this.maxMorphTargets = 8; + this.maxMorphNormals = 4; + + // internal properties + + var _this = this, + + _isContextLost = false, + + // internal state cache + + _currentRenderTarget = null, + _currentFramebuffer = null, + _currentMaterialId = - 1, + _currentGeometryProgram = '', + + _currentCamera = null, + _currentArrayCamera = null, + + _currentViewport = new Vector4(), + _currentScissor = new Vector4(), + _currentScissorTest = null, + + // + + _usedTextureUnits = 0, + + // + + _width = _canvas.width, + _height = _canvas.height, + + _pixelRatio = 1, + + _viewport = new Vector4( 0, 0, _width, _height ), + _scissor = new Vector4( 0, 0, _width, _height ), + _scissorTest = false, + + // frustum + + _frustum = new Frustum(), + + // clipping + + _clipping = new WebGLClipping(), + _clippingEnabled = false, + _localClippingEnabled = false, + + // camera matrices cache + + _projScreenMatrix = new Matrix4(), + + _vector3 = new Vector3(), + + // info + + _infoMemory = { + geometries: 0, + textures: 0 + }, + + _infoRender = { + + frame: 0, + calls: 0, + vertices: 0, + faces: 0, + points: 0 + + }; + + this.info = { + + render: _infoRender, + memory: _infoMemory, + programs: null + + }; + + function getTargetPixelRatio() { + + return _currentRenderTarget === null ? _pixelRatio : 1; + + } + + // initialize + + var _gl; + + try { + + var contextAttributes = { + alpha: _alpha, + depth: _depth, + stencil: _stencil, + antialias: _antialias, + premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: _preserveDrawingBuffer + }; + + _gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes ); + + if ( _gl === null ) { + + if ( _canvas.getContext( 'webgl' ) !== null ) { + + throw 'Error creating WebGL context with your selected attributes.'; + + } else { + + throw 'Error creating WebGL context.'; + + } + + } + + // Some experimental-webgl implementations do not have getShaderPrecisionFormat + + if ( _gl.getShaderPrecisionFormat === undefined ) { + + _gl.getShaderPrecisionFormat = function () { + + return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; + + }; + + } + + _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); + + } catch ( error ) { + + console.error( 'THREE.WebGLRenderer: ' + error ); + + } + + var extensions, capabilities, state; + var properties, textures, attributes, geometries, objects, lights; + var programCache, renderLists; + + var background, morphtargets, bufferRenderer, indexedBufferRenderer; + var flareRenderer, spriteRenderer; + + var utils; + + function initGLContext() { + + extensions = new WebGLExtensions( _gl ); + extensions.get( 'WEBGL_depth_texture' ); + extensions.get( 'OES_texture_float' ); + extensions.get( 'OES_texture_float_linear' ); + extensions.get( 'OES_texture_half_float' ); + extensions.get( 'OES_texture_half_float_linear' ); + extensions.get( 'OES_standard_derivatives' ); + extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extensions.get( 'OES_element_index_uint' ) ) { + + BufferGeometry.MaxIndex = 4294967296; + + } + + utils = new WebGLUtils( _gl, extensions ); + + capabilities = new WebGLCapabilities( _gl, extensions, parameters ); + + state = new WebGLState( _gl, extensions, utils ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) ); + + properties = new WebGLProperties(); + textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, _infoMemory ); + attributes = new WebGLAttributes( _gl ); + geometries = new WebGLGeometries( _gl, attributes, _infoMemory ); + objects = new WebGLObjects( geometries, _infoRender ); + morphtargets = new WebGLMorphtargets( _gl ); + programCache = new WebGLPrograms( _this, extensions, capabilities ); + lights = new WebGLLights(); + renderLists = new WebGLRenderLists(); + + background = new WebGLBackground( _this, state, geometries, _premultipliedAlpha ); + + bufferRenderer = new WebGLBufferRenderer( _gl, extensions, _infoRender ); + indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, _infoRender ); + + flareRenderer = new WebGLFlareRenderer( _this, _gl, state, textures, capabilities ); + spriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities ); + + _this.info.programs = programCache.programs; + + _this.context = _gl; + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.state = state; + + } + + initGLContext(); + + // vr + + var vr = new WebVRManager( _this ); + + this.vr = vr; + + // shadow map + + var shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); + + this.shadowMap = shadowMap; + + // API + + this.getContext = function () { + + return _gl; + + }; + + this.getContextAttributes = function () { + + return _gl.getContextAttributes(); + + }; + + this.forceContextLoss = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.loseContext(); + + }; + + this.forceContextRestore = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.restoreContext(); + + }; + + this.getPixelRatio = function () { + + return _pixelRatio; + + }; + + this.setPixelRatio = function ( value ) { + + if ( value === undefined ) return; + + _pixelRatio = value; + + this.setSize( _width, _height, false ); + + }; + + this.getSize = function () { + + return { + width: _width, + height: _height + }; + + }; + + this.setSize = function ( width, height, updateStyle ) { + + var device = vr.getDevice(); + + if ( device && device.isPresenting ) { + + console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); + return; + + } + + _width = width; + _height = height; + + _canvas.width = width * _pixelRatio; + _canvas.height = height * _pixelRatio; + + if ( updateStyle !== false ) { + + _canvas.style.width = width + 'px'; + _canvas.style.height = height + 'px'; + + } + + this.setViewport( 0, 0, width, height ); + + }; + + this.getDrawingBufferSize = function () { + + return { + width: _width * _pixelRatio, + height: _height * _pixelRatio + }; + + }; + + this.setDrawingBufferSize = function ( width, height, pixelRatio ) { + + _width = width; + _height = height; + + _pixelRatio = pixelRatio; + + _canvas.width = width * pixelRatio; + _canvas.height = height * pixelRatio; + + this.setViewport( 0, 0, width, height ); + + }; + + this.setViewport = function ( x, y, width, height ) { + + _viewport.set( x, _height - y - height, width, height ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) ); + + }; + + this.setScissor = function ( x, y, width, height ) { + + _scissor.set( x, _height - y - height, width, height ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) ); + + }; + + this.setScissorTest = function ( boolean ) { + + state.setScissorTest( _scissorTest = boolean ); + + }; + + // Clearing + + this.getClearColor = background.getClearColor; + this.setClearColor = background.setClearColor; + this.getClearAlpha = background.getClearAlpha; + this.setClearAlpha = background.setClearAlpha; + + this.clear = function ( color, depth, stencil ) { + + var bits = 0; + + if ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT; + if ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT; + if ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT; + + _gl.clear( bits ); + + }; + + this.clearColor = function () { + + this.clear( true, false, false ); + + }; + + this.clearDepth = function () { + + this.clear( false, true, false ); + + }; + + this.clearStencil = function () { + + this.clear( false, false, true ); + + }; + + this.clearTarget = function ( renderTarget, color, depth, stencil ) { + + this.setRenderTarget( renderTarget ); + this.clear( color, depth, stencil ); + + }; + + // + + this.dispose = function () { + + _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); + + renderLists.dispose(); + + vr.dispose(); + + }; + + // Events + + function onContextLost( event ) { + + event.preventDefault(); + + console.log( 'THREE.WebGLRenderer: Context Lost.' ); + + _isContextLost = true; + + } + + function onContextRestore( event ) { + + console.log( 'THREE.WebGLRenderer: Context Restored.' ); + + _isContextLost = false; + + initGLContext(); + + } + + function onMaterialDispose( event ) { + + var material = event.target; + + material.removeEventListener( 'dispose', onMaterialDispose ); + + deallocateMaterial( material ); + + } + + // Buffer deallocation + + function deallocateMaterial( material ) { + + releaseMaterialProgramReference( material ); + + properties.remove( material ); + + } + + + function releaseMaterialProgramReference( material ) { + + var programInfo = properties.get( material ).program; + + material.program = undefined; + + if ( programInfo !== undefined ) { + + programCache.releaseProgram( programInfo ); + + } + + } + + // Buffer rendering + + function renderObjectImmediate( object, program, material ) { + + object.render( function ( object ) { + + _this.renderBufferImmediate( object, program, material ); + + } ); + + } + + this.renderBufferImmediate = function ( object, program, material ) { + + state.initAttributes(); + + var buffers = properties.get( object ); + + if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); + if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); + if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); + if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); + + var programAttributes = program.getAttributes(); + + if ( object.hasPositions ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.position ); + _gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasNormals ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal ); + + if ( ! material.isMeshPhongMaterial && + ! material.isMeshStandardMaterial && + ! material.isMeshNormalMaterial && + material.flatShading === true ) { + + for ( var i = 0, l = object.count * 3; i < l; i += 9 ) { + + var array = object.normalArray; + + var nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3; + var ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3; + var nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3; + + array[ i + 0 ] = nx; + array[ i + 1 ] = ny; + array[ i + 2 ] = nz; + + array[ i + 3 ] = nx; + array[ i + 4 ] = ny; + array[ i + 5 ] = nz; + + array[ i + 6 ] = nx; + array[ i + 7 ] = ny; + array[ i + 8 ] = nz; + + } + + } + + _gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.normal ); + + _gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasUvs && material.map ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.uv ); + + _gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasColors && material.vertexColors !== NoColors ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.color ); + + _gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 ); + + } + + state.disableUnusedAttributes(); + + _gl.drawArrays( _gl.TRIANGLES, 0, object.count ); + + object.count = 0; + + }; + + this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) { + + state.setMaterial( material ); + + var program = setProgram( camera, fog, material, object ); + var geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true ); + + var updateBuffers = false; + + if ( geometryProgram !== _currentGeometryProgram ) { + + _currentGeometryProgram = geometryProgram; + updateBuffers = true; + + } + + if ( object.morphTargetInfluences ) { + + morphtargets.update( object, geometry, material, program ); + + updateBuffers = true; + + } + + // + + var index = geometry.index; + var position = geometry.attributes.position; + var rangeFactor = 1; + + if ( material.wireframe === true ) { + + index = geometries.getWireframeAttribute( geometry ); + rangeFactor = 2; + + } + + var attribute; + var renderer = bufferRenderer; + + if ( index !== null ) { + + attribute = attributes.get( index ); + + renderer = indexedBufferRenderer; + renderer.setIndex( attribute ); + + } + + if ( updateBuffers ) { + + setupVertexAttributes( material, program, geometry ); + + if ( index !== null ) { + + _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer ); + + } + + } + + // + + var dataCount = 0; + + if ( index !== null ) { + + dataCount = index.count; + + } else if ( position !== undefined ) { + + dataCount = position.count; + + } + + var rangeStart = geometry.drawRange.start * rangeFactor; + var rangeCount = geometry.drawRange.count * rangeFactor; + + var groupStart = group !== null ? group.start * rangeFactor : 0; + var groupCount = group !== null ? group.count * rangeFactor : Infinity; + + var drawStart = Math.max( rangeStart, groupStart ); + var drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; + + var drawCount = Math.max( 0, drawEnd - drawStart + 1 ); + + if ( drawCount === 0 ) return; + + // + + if ( object.isMesh ) { + + if ( material.wireframe === true ) { + + state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); + renderer.setMode( _gl.LINES ); + + } else { + + switch ( object.drawMode ) { + + case TrianglesDrawMode: + renderer.setMode( _gl.TRIANGLES ); + break; + + case TriangleStripDrawMode: + renderer.setMode( _gl.TRIANGLE_STRIP ); + break; + + case TriangleFanDrawMode: + renderer.setMode( _gl.TRIANGLE_FAN ); + break; + + } + + } + + + } else if ( object.isLine ) { + + var lineWidth = material.linewidth; + + if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material + + state.setLineWidth( lineWidth * getTargetPixelRatio() ); + + if ( object.isLineSegments ) { + + renderer.setMode( _gl.LINES ); + + } else if ( object.isLineLoop ) { + + renderer.setMode( _gl.LINE_LOOP ); + + } else { + + renderer.setMode( _gl.LINE_STRIP ); + + } + + } else if ( object.isPoints ) { + + renderer.setMode( _gl.POINTS ); + + } + + if ( geometry && geometry.isInstancedBufferGeometry ) { + + if ( geometry.maxInstancedCount > 0 ) { + + renderer.renderInstances( geometry, drawStart, drawCount ); + + } + + } else { + + renderer.render( drawStart, drawCount ); + + } + + }; + + function setupVertexAttributes( material, program, geometry, startIndex ) { + + if ( geometry && geometry.isInstancedBufferGeometry ) { + + if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) { + + console.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + if ( startIndex === undefined ) startIndex = 0; + + state.initAttributes(); + + var geometryAttributes = geometry.attributes; + + var programAttributes = program.getAttributes(); + + var materialDefaultAttributeValues = material.defaultAttributeValues; + + for ( var name in programAttributes ) { + + var programAttribute = programAttributes[ name ]; + + if ( programAttribute >= 0 ) { + + var geometryAttribute = geometryAttributes[ name ]; + + if ( geometryAttribute !== undefined ) { + + var normalized = geometryAttribute.normalized; + var size = geometryAttribute.itemSize; + + var attribute = attributes.get( geometryAttribute ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + var buffer = attribute.buffer; + var type = attribute.type; + var bytesPerElement = attribute.bytesPerElement; + + if ( geometryAttribute.isInterleavedBufferAttribute ) { + + var data = geometryAttribute.data; + var stride = data.stride; + var offset = geometryAttribute.offset; + + if ( data && data.isInstancedInterleavedBuffer ) { + + state.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); + + if ( geometry.maxInstancedCount === undefined ) { + + geometry.maxInstancedCount = data.meshPerAttribute * data.count; + + } + + } else { + + state.enableAttribute( programAttribute ); + + } + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); + _gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, ( startIndex * stride + offset ) * bytesPerElement ); + + } else { + + if ( geometryAttribute.isInstancedBufferAttribute ) { + + state.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); + + if ( geometry.maxInstancedCount === undefined ) { + + geometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + + } + + } else { + + state.enableAttribute( programAttribute ); + + } + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); + _gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, startIndex * size * bytesPerElement ); + + } + + } else if ( materialDefaultAttributeValues !== undefined ) { + + var value = materialDefaultAttributeValues[ name ]; + + if ( value !== undefined ) { + + switch ( value.length ) { + + case 2: + _gl.vertexAttrib2fv( programAttribute, value ); + break; + + case 3: + _gl.vertexAttrib3fv( programAttribute, value ); + break; + + case 4: + _gl.vertexAttrib4fv( programAttribute, value ); + break; + + default: + _gl.vertexAttrib1fv( programAttribute, value ); + + } + + } + + } + + } + + } + + state.disableUnusedAttributes(); + + } + + // Compile + + this.compile = function ( scene, camera ) { + + lightsArray.length = 0; + shadowsArray.length = 0; + + scene.traverse( function ( object ) { + + if ( object.isLight ) { + + lightsArray.push( object ); + + if ( object.castShadow ) { + + shadowsArray.push( object ); + + } + + } + + } ); + + lights.setup( lightsArray, shadowsArray, camera ); + + scene.traverse( function ( object ) { + + if ( object.material ) { + + if ( Array.isArray( object.material ) ) { + + for ( var i = 0; i < object.material.length; i ++ ) { + + initMaterial( object.material[ i ], scene.fog, object ); + + } + + } else { + + initMaterial( object.material, scene.fog, object ); + + } + + } + + } ); + + }; + + // Animation Loop + + var isAnimating = false; + var onAnimationFrame = null; + + function start() { + + if ( isAnimating ) return; + ( vr.getDevice() || window ).requestAnimationFrame( loop ); + isAnimating = true; + + } + + function loop( time ) { + + if ( onAnimationFrame !== null ) onAnimationFrame( time ); + ( vr.getDevice() || window ).requestAnimationFrame( loop ); + + } + + this.animate = function ( callback ) { + + onAnimationFrame = callback; + start(); + + }; + + // Rendering + + this.render = function ( scene, camera, renderTarget, forceClear ) { + + if ( ! ( camera && camera.isCamera ) ) { + + console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); + return; + + } + + if ( _isContextLost ) return; + + // reset caching for this frame + + _currentGeometryProgram = ''; + _currentMaterialId = - 1; + _currentCamera = null; + + // update scene graph + + if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); + + // update camera matrices and frustum + + if ( camera.parent === null ) camera.updateMatrixWorld(); + + if ( vr.enabled ) { + + camera = vr.getCamera( camera ); + + } + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + _frustum.setFromMatrix( _projScreenMatrix ); + + lightsArray.length = 0; + shadowsArray.length = 0; + + spritesArray.length = 0; + flaresArray.length = 0; + + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); + + currentRenderList = renderLists.get( scene, camera ); + currentRenderList.init(); + + projectObject( scene, camera, _this.sortObjects ); + + if ( _this.sortObjects === true ) { + + currentRenderList.sort(); + + } + + // + + if ( _clippingEnabled ) _clipping.beginShadows(); + + shadowMap.render( shadowsArray, scene, camera ); + + lights.setup( lightsArray, shadowsArray, camera ); + + if ( _clippingEnabled ) _clipping.endShadows(); + + // + + _infoRender.frame ++; + _infoRender.calls = 0; + _infoRender.vertices = 0; + _infoRender.faces = 0; + _infoRender.points = 0; + + if ( renderTarget === undefined ) { + + renderTarget = null; + + } + + this.setRenderTarget( renderTarget ); + + // + + background.render( currentRenderList, scene, camera, forceClear ); + + // render scene + + var opaqueObjects = currentRenderList.opaque; + var transparentObjects = currentRenderList.transparent; + + if ( scene.overrideMaterial ) { + + var overrideMaterial = scene.overrideMaterial; + + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial ); + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial ); + + } else { + + // opaque pass (front-to-back order) + + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera ); + + // transparent pass (back-to-front order) + + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera ); + + } + + // custom renderers + + spriteRenderer.render( spritesArray, scene, camera ); + flareRenderer.render( flaresArray, scene, camera, _currentViewport ); + + // Generate mipmap if we're using any kind of mipmap filtering + + if ( renderTarget ) { + + textures.updateRenderTargetMipmap( renderTarget ); + + } + + // Ensure depth buffer writing is enabled so it can be cleared on next render + + state.buffers.depth.setTest( true ); + state.buffers.depth.setMask( true ); + state.buffers.color.setMask( true ); + + state.setPolygonOffset( false ); + + if ( vr.enabled ) { + + vr.submitFrame(); + + } + + // _gl.finish(); + + }; + + /* + // TODO Duplicated code (Frustum) + + var _sphere = new Sphere(); + + function isObjectViewable( object ) { + + var geometry = object.geometry; + + if ( geometry.boundingSphere === null ) + geometry.computeBoundingSphere(); + + _sphere.copy( geometry.boundingSphere ). + applyMatrix4( object.matrixWorld ); + + return isSphereViewable( _sphere ); + + } + + function isSpriteViewable( sprite ) { + + _sphere.center.set( 0, 0, 0 ); + _sphere.radius = 0.7071067811865476; + _sphere.applyMatrix4( sprite.matrixWorld ); + + return isSphereViewable( _sphere ); + + } + + function isSphereViewable( sphere ) { + + if ( ! _frustum.intersectsSphere( sphere ) ) return false; + + var numPlanes = _clipping.numPlanes; + + if ( numPlanes === 0 ) return true; + + var planes = _this.clippingPlanes, + + center = sphere.center, + negRad = - sphere.radius, + i = 0; + + do { + + // out when deeper than radius in the negative halfspace + if ( planes[ i ].distanceToPoint( center ) < negRad ) return false; + + } while ( ++ i !== numPlanes ); + + return true; + + } + */ + + function projectObject( object, camera, sortObjects ) { + + if ( ! object.visible ) return; + + var visible = object.layers.test( camera.layers ); + + if ( visible ) { + + if ( object.isLight ) { + + lightsArray.push( object ); + + if ( object.castShadow ) { + + shadowsArray.push( object ); + + } + + } else if ( object.isSprite ) { + + if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { + + spritesArray.push( object ); + + } + + } else if ( object.isLensFlare ) { + + flaresArray.push( object ); + + } else if ( object.isImmediateRenderObject ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + currentRenderList.push( object, null, object.material, _vector3.z, null ); + + } else if ( object.isMesh || object.isLine || object.isPoints ) { + + if ( object.isSkinnedMesh ) { + + object.skeleton.update(); + + } + + if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + var geometry = objects.update( object ); + var material = object.material; + + if ( Array.isArray( material ) ) { + + var groups = geometry.groups; + + for ( var i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + var groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + currentRenderList.push( object, geometry, groupMaterial, _vector3.z, group ); + + } + + } + + } else if ( material.visible ) { + + currentRenderList.push( object, geometry, material, _vector3.z, null ); + + } + + } + + } + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + projectObject( children[ i ], camera, sortObjects ); + + } + + } + + function renderObjects( renderList, scene, camera, overrideMaterial ) { + + for ( var i = 0, l = renderList.length; i < l; i ++ ) { + + var renderItem = renderList[ i ]; + + var object = renderItem.object; + var geometry = renderItem.geometry; + var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial; + var group = renderItem.group; + + if ( camera.isArrayCamera ) { + + _currentArrayCamera = camera; + + var cameras = camera.cameras; + + for ( var j = 0, jl = cameras.length; j < jl; j ++ ) { + + var camera2 = cameras[ j ]; + + if ( object.layers.test( camera2.layers ) ) { + + var bounds = camera2.bounds; + + var x = bounds.x * _width; + var y = bounds.y * _height; + var width = bounds.z * _width; + var height = bounds.w * _height; + + state.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) ); + + renderObject( object, scene, camera2, geometry, material, group ); + + } + + } + + } else { + + _currentArrayCamera = null; + + renderObject( object, scene, camera, geometry, material, group ); + + } + + } + + } + + function renderObject( object, scene, camera, geometry, material, group ) { + + object.onBeforeRender( _this, scene, camera, geometry, material, group ); + + object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); + object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); + + if ( object.isImmediateRenderObject ) { + + state.setMaterial( material ); + + var program = setProgram( camera, scene.fog, material, object ); + + _currentGeometryProgram = ''; + + renderObjectImmediate( object, program, material ); + + } else { + + _this.renderBufferDirect( camera, scene.fog, geometry, material, object, group ); + + } + + object.onAfterRender( _this, scene, camera, geometry, material, group ); + + } + + function initMaterial( material, fog, object ) { + + var materialProperties = properties.get( material ); + + var parameters = programCache.getParameters( + material, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object ); + + var code = programCache.getProgramCode( material, parameters ); + + var program = materialProperties.program; + var programChange = true; + + if ( program === undefined ) { + + // new material + material.addEventListener( 'dispose', onMaterialDispose ); + + } else if ( program.code !== code ) { + + // changed glsl or parameters + releaseMaterialProgramReference( material ); + + } else if ( parameters.shaderID !== undefined ) { + + // same glsl and uniform list + return; + + } else { + + // only rebuild uniform list + programChange = false; + + } + + if ( programChange ) { + + if ( parameters.shaderID ) { + + var shader = ShaderLib[ parameters.shaderID ]; + + materialProperties.shader = { + name: material.type, + uniforms: UniformsUtils.clone( shader.uniforms ), + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader + }; + + } else { + + materialProperties.shader = { + name: material.type, + uniforms: material.uniforms, + vertexShader: material.vertexShader, + fragmentShader: material.fragmentShader + }; + + } + + material.onBeforeCompile( materialProperties.shader ); + + program = programCache.acquireProgram( material, materialProperties.shader, parameters, code ); + + materialProperties.program = program; + material.program = program; + + } + + var programAttributes = program.getAttributes(); + + if ( material.morphTargets ) { + + material.numSupportedMorphTargets = 0; + + for ( var i = 0; i < _this.maxMorphTargets; i ++ ) { + + if ( programAttributes[ 'morphTarget' + i ] >= 0 ) { + + material.numSupportedMorphTargets ++; + + } + + } + + } + + if ( material.morphNormals ) { + + material.numSupportedMorphNormals = 0; + + for ( var i = 0; i < _this.maxMorphNormals; i ++ ) { + + if ( programAttributes[ 'morphNormal' + i ] >= 0 ) { + + material.numSupportedMorphNormals ++; + + } + + } + + } + + var uniforms = materialProperties.shader.uniforms; + + if ( ! material.isShaderMaterial && + ! material.isRawShaderMaterial || + material.clipping === true ) { + + materialProperties.numClippingPlanes = _clipping.numPlanes; + materialProperties.numIntersection = _clipping.numIntersection; + uniforms.clippingPlanes = _clipping.uniform; + + } + + materialProperties.fog = fog; + + // store the light setup it was created for + + materialProperties.lightsHash = lights.state.hash; + + if ( material.lights ) { + + // wire up the material to this renderer's lighting state + + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.directionalLights.value = lights.state.directional; + uniforms.spotLights.value = lights.state.spot; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.pointLights.value = lights.state.point; + uniforms.hemisphereLights.value = lights.state.hemi; + + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + // TODO (abelnation): add area lights shadow info to uniforms + + } + + var progUniforms = materialProperties.program.getUniforms(), + uniformsList = + WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); + + materialProperties.uniformsList = uniformsList; + + } + + function setProgram( camera, fog, material, object ) { + + _usedTextureUnits = 0; + + var materialProperties = properties.get( material ); + + if ( _clippingEnabled ) { + + if ( _localClippingEnabled || camera !== _currentCamera ) { + + var useCache = + camera === _currentCamera && + material.id === _currentMaterialId; + + // we might want to call this function with some ClippingGroup + // object instead of the material, once it becomes feasible + // (#8465, #8379) + _clipping.setState( + material.clippingPlanes, material.clipIntersection, material.clipShadows, + camera, materialProperties, useCache ); + + } + + } + + if ( material.needsUpdate === false ) { + + if ( materialProperties.program === undefined ) { + + material.needsUpdate = true; + + } else if ( material.fog && materialProperties.fog !== fog ) { + + material.needsUpdate = true; + + } else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) { + + material.needsUpdate = true; + + } else if ( materialProperties.numClippingPlanes !== undefined && + ( materialProperties.numClippingPlanes !== _clipping.numPlanes || + materialProperties.numIntersection !== _clipping.numIntersection ) ) { + + material.needsUpdate = true; + + } + + } + + if ( material.needsUpdate ) { + + initMaterial( material, fog, object ); + material.needsUpdate = false; + + } + + var refreshProgram = false; + var refreshMaterial = false; + var refreshLights = false; + + var program = materialProperties.program, + p_uniforms = program.getUniforms(), + m_uniforms = materialProperties.shader.uniforms; + + if ( state.useProgram( program.program ) ) { + + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + + } + + if ( material.id !== _currentMaterialId ) { + + _currentMaterialId = material.id; + + refreshMaterial = true; + + } + + if ( refreshProgram || camera !== _currentCamera ) { + + p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); + + if ( capabilities.logarithmicDepthBuffer ) { + + p_uniforms.setValue( _gl, 'logDepthBufFC', + 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); + + } + + // Avoid unneeded uniform updates per ArrayCamera's sub-camera + + if ( _currentCamera !== ( _currentArrayCamera || camera ) ) { + + _currentCamera = ( _currentArrayCamera || camera ); + + // lighting uniforms depend on the camera so enforce an update + // now, in case this material supports lights - or later, when + // the next material that does gets activated: + + refreshMaterial = true; // set to true on material change + refreshLights = true; // remains set until update done + + } + + // load material specific uniforms + // (shader material also gets them for the sake of genericity) + + if ( material.isShaderMaterial || + material.isMeshPhongMaterial || + material.isMeshStandardMaterial || + material.envMap ) { + + var uCamPos = p_uniforms.map.cameraPosition; + + if ( uCamPos !== undefined ) { + + uCamPos.setValue( _gl, + _vector3.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + } + + if ( material.isMeshPhongMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial || + material.skinning ) { + + p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); + + } + + } + + // skinning uniforms must be set even if material didn't change + // auto-setting of texture unit for bone texture must go before other textures + // not sure why, but otherwise weird things happen + + if ( material.skinning ) { + + p_uniforms.setOptional( _gl, object, 'bindMatrix' ); + p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); + + var skeleton = object.skeleton; + + if ( skeleton ) { + + var bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + if ( skeleton.boneTexture === undefined ) { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) + + + var size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix + size = _Math.nextPowerOfTwo( Math.ceil( size ) ); + size = Math.max( size, 4 ); + + var boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + boneMatrices.set( skeleton.boneMatrices ); // copy current values + + var boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); + + skeleton.boneMatrices = boneMatrices; + skeleton.boneTexture = boneTexture; + skeleton.boneTextureSize = size; + + } + + p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture ); + p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); + + } else { + + p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); + + } + + } + + } + + if ( refreshMaterial ) { + + p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); + p_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint ); + + if ( material.lights ) { + + // the current material requires lighting info + + // note: all lighting uniforms are always set correctly + // they simply reference the renderer's state for their + // values + // + // use the current material's .needsUpdate flags to set + // the GL state when required + + markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); + + } + + // refresh uniforms common to several materials + + if ( fog && material.fog ) { + + refreshUniformsFog( m_uniforms, fog ); + + } + + if ( material.isMeshBasicMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + } else if ( material.isMeshLambertMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsLambert( m_uniforms, material ); + + } else if ( material.isMeshPhongMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + if ( material.isMeshToonMaterial ) { + + refreshUniformsToon( m_uniforms, material ); + + } else { + + refreshUniformsPhong( m_uniforms, material ); + + } + + } else if ( material.isMeshStandardMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + if ( material.isMeshPhysicalMaterial ) { + + refreshUniformsPhysical( m_uniforms, material ); + + } else { + + refreshUniformsStandard( m_uniforms, material ); + + } + + } else if ( material.isMeshDepthMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsDepth( m_uniforms, material ); + + } else if ( material.isMeshDistanceMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsDistance( m_uniforms, material ); + + } else if ( material.isMeshNormalMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsNormal( m_uniforms, material ); + + } else if ( material.isLineBasicMaterial ) { + + refreshUniformsLine( m_uniforms, material ); + + if ( material.isLineDashedMaterial ) { + + refreshUniformsDash( m_uniforms, material ); + + } + + } else if ( material.isPointsMaterial ) { + + refreshUniformsPoints( m_uniforms, material ); + + } else if ( material.isShadowMaterial ) { + + m_uniforms.color.value = material.color; + m_uniforms.opacity.value = material.opacity; + + } + + // RectAreaLight Texture + // TODO (mrdoob): Find a nicer implementation + + if ( m_uniforms.ltcMat !== undefined ) m_uniforms.ltcMat.value = UniformsLib.LTC_MAT_TEXTURE; + if ( m_uniforms.ltcMag !== undefined ) m_uniforms.ltcMag.value = UniformsLib.LTC_MAG_TEXTURE; + + WebGLUniforms.upload( + _gl, materialProperties.uniformsList, m_uniforms, _this ); + + } + + + // common matrices + + p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); + p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); + p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); + + return program; + + } + + // Uniforms (refresh uniforms objects) + + function refreshUniformsCommon( uniforms, material ) { + + uniforms.opacity.value = material.opacity; + + if ( material.color ) { + + uniforms.diffuse.value = material.color; + + } + + if ( material.emissive ) { + + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + } + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + if ( material.specularMap ) { + + uniforms.specularMap.value = material.specularMap; + + } + + if ( material.envMap ) { + + uniforms.envMap.value = material.envMap; + + // don't flip CubeTexture envMaps, flip everything else: + // WebGLRenderTargetCube will be flipped for backwards compatibility + // WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture + // this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future + uniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1; + + uniforms.reflectivity.value = material.reflectivity; + uniforms.refractionRatio.value = material.refractionRatio; + + } + + if ( material.lightMap ) { + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + } + + if ( material.aoMap ) { + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. normal map + // 4. bump map + // 5. alpha map + // 6. emissive map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.roughnessMap ) { + + uvScaleMap = material.roughnessMap; + + } else if ( material.metalnessMap ) { + + uvScaleMap = material.metalnessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + var offset = uvScaleMap.offset; + var repeat = uvScaleMap.repeat; + + uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); + + } + + } + + function refreshUniformsLine( uniforms, material ) { + + uniforms.diffuse.value = material.color; + uniforms.opacity.value = material.opacity; + + } + + function refreshUniformsDash( uniforms, material ) { + + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + + } + + function refreshUniformsPoints( uniforms, material ) { + + uniforms.diffuse.value = material.color; + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * _pixelRatio; + uniforms.scale.value = _height * 0.5; + + uniforms.map.value = material.map; + + if ( material.map !== null ) { + + var offset = material.map.offset; + var repeat = material.map.repeat; + + uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); + + } + + } + + function refreshUniformsFog( uniforms, fog ) { + + uniforms.fogColor.value = fog.color; + + if ( fog.isFog ) { + + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + + } else if ( fog.isFogExp2 ) { + + uniforms.fogDensity.value = fog.density; + + } + + } + + function refreshUniformsLambert( uniforms, material ) { + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + } + + function refreshUniformsPhong( uniforms, material ) { + + uniforms.specular.value = material.specular; + uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsToon( uniforms, material ) { + + refreshUniformsPhong( uniforms, material ); + + if ( material.gradientMap ) { + + uniforms.gradientMap.value = material.gradientMap; + + } + + } + + function refreshUniformsStandard( uniforms, material ) { + + uniforms.roughness.value = material.roughness; + uniforms.metalness.value = material.metalness; + + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + } + + if ( material.metalnessMap ) { + + uniforms.metalnessMap.value = material.metalnessMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + if ( material.envMap ) { + + //uniforms.envMap.value = material.envMap; // part of uniforms common + uniforms.envMapIntensity.value = material.envMapIntensity; + + } + + } + + function refreshUniformsPhysical( uniforms, material ) { + + uniforms.clearCoat.value = material.clearCoat; + uniforms.clearCoatRoughness.value = material.clearCoatRoughness; + + refreshUniformsStandard( uniforms, material ); + + } + + function refreshUniformsDepth( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDistance( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + uniforms.referencePosition.value.copy( material.referencePosition ); + uniforms.nearDistance.value = material.nearDistance; + uniforms.farDistance.value = material.farDistance; + + } + + function refreshUniformsNormal( uniforms, material ) { + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + // If uniforms are marked as clean, they don't need to be loaded to the GPU. + + function markUniformsLightsNeedsUpdate( uniforms, value ) { + + uniforms.ambientLightColor.needsUpdate = value; + + uniforms.directionalLights.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + + } + + // GL state setting + + this.setFaceCulling = function ( cullFace, frontFaceDirection ) { + + state.setCullFace( cullFace ); + state.setFlipSided( frontFaceDirection === FrontFaceDirectionCW ); + + }; + + // Textures + + function allocTextureUnit() { + + var textureUnit = _usedTextureUnits; + + if ( textureUnit >= capabilities.maxTextures ) { + + console.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures ); + + } + + _usedTextureUnits += 1; + + return textureUnit; + + } + + this.allocTextureUnit = allocTextureUnit; + + // this.setTexture2D = setTexture2D; + this.setTexture2D = ( function () { + + var warned = false; + + // backwards compatibility: peel texture.texture + return function setTexture2D( texture, slot ) { + + if ( texture && texture.isWebGLRenderTarget ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead." ); + warned = true; + + } + + texture = texture.texture; + + } + + textures.setTexture2D( texture, slot ); + + }; + + }() ); + + this.setTexture = ( function () { + + var warned = false; + + return function setTexture( texture, slot ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead." ); + warned = true; + + } + + textures.setTexture2D( texture, slot ); + + }; + + }() ); + + this.setTextureCube = ( function () { + + var warned = false; + + return function setTextureCube( texture, slot ) { + + // backwards compatibility: peel texture.texture + if ( texture && texture.isWebGLRenderTargetCube ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead." ); + warned = true; + + } + + texture = texture.texture; + + } + + // currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture + // TODO: unify these code paths + if ( ( texture && texture.isCubeTexture ) || + ( Array.isArray( texture.image ) && texture.image.length === 6 ) ) { + + // CompressedTexture can have Array in image :/ + + // this function alone should take care of cube textures + textures.setTextureCube( texture, slot ); + + } else { + + // assumed: texture property of THREE.WebGLRenderTargetCube + + textures.setTextureCubeDynamic( texture, slot ); + + } + + }; + + }() ); + + this.getRenderTarget = function () { + + return _currentRenderTarget; + + }; + + this.setRenderTarget = function ( renderTarget ) { + + _currentRenderTarget = renderTarget; + + if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { + + textures.setupRenderTarget( renderTarget ); + + } + + var framebuffer = null; + var isCube = false; + + if ( renderTarget ) { + + var __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLRenderTargetCube ) { + + framebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ]; + isCube = true; + + } else { + + framebuffer = __webglFramebuffer; + + } + + _currentViewport.copy( renderTarget.viewport ); + _currentScissor.copy( renderTarget.scissor ); + _currentScissorTest = renderTarget.scissorTest; + + } else { + + _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ); + _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ); + _currentScissorTest = _scissorTest; + + } + + if ( _currentFramebuffer !== framebuffer ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + _currentFramebuffer = framebuffer; + + } + + state.viewport( _currentViewport ); + state.scissor( _currentScissor ); + state.setScissorTest( _currentScissorTest ); + + if ( isCube ) { + + var textureProperties = properties.get( renderTarget.texture ); + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel ); + + } + + }; + + this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) { + + if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); + return; + + } + + var framebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( framebuffer ) { + + var restore = false; + + if ( framebuffer !== _currentFramebuffer ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + + restore = true; + + } + + try { + + var texture = renderTarget.texture; + var textureFormat = texture.format; + var textureType = texture.type; + + if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); + return; + + } + + if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513) + ! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox + ! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); + return; + + } + + if ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) { + + // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) + + if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { + + _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); + + } + + } else { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); + + } + + } finally { + + if ( restore ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer ); + + } + + } + + } + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function FogExp2 ( color, density ) { + + this.name = ''; + + this.color = new Color( color ); + this.density = ( density !== undefined ) ? density : 0.00025; + +} + +FogExp2.prototype.isFogExp2 = true; + +FogExp2.prototype.clone = function () { + + return new FogExp2( this.color.getHex(), this.density ); + +}; + +FogExp2.prototype.toJSON = function ( meta ) { + + return { + type: 'FogExp2', + color: this.color.getHex(), + density: this.density + }; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Fog ( color, near, far ) { + + this.name = ''; + + this.color = new Color( color ); + + this.near = ( near !== undefined ) ? near : 1; + this.far = ( far !== undefined ) ? far : 1000; + +} + +Fog.prototype.isFog = true; + +Fog.prototype.clone = function () { + + return new Fog( this.color.getHex(), this.near, this.far ); + +}; + +Fog.prototype.toJSON = function ( meta ) { + + return { + type: 'Fog', + color: this.color.getHex(), + near: this.near, + far: this.far + }; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Scene () { + + Object3D.call( this ); + + this.type = 'Scene'; + + this.background = null; + this.fog = null; + this.overrideMaterial = null; + + this.autoUpdate = true; // checked by the renderer + +} + +Scene.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Scene, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + if ( source.background !== null ) this.background = source.background.clone(); + if ( source.fog !== null ) this.fog = source.fog.clone(); + if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); + + this.autoUpdate = source.autoUpdate; + this.matrixAutoUpdate = source.matrixAutoUpdate; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + if ( this.background !== null ) data.object.background = this.background.toJSON( meta ); + if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); + + return data; + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function LensFlare( texture, size, distance, blending, color ) { + + Object3D.call( this ); + + this.lensFlares = []; + + this.positionScreen = new Vector3(); + this.customUpdateCallback = undefined; + + if ( texture !== undefined ) { + + this.add( texture, size, distance, blending, color ); + + } + +} + +LensFlare.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LensFlare, + + isLensFlare: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.positionScreen.copy( source.positionScreen ); + this.customUpdateCallback = source.customUpdateCallback; + + for ( var i = 0, l = source.lensFlares.length; i < l; i ++ ) { + + this.lensFlares.push( source.lensFlares[ i ] ); + + } + + return this; + + }, + + add: function ( texture, size, distance, blending, color, opacity ) { + + if ( size === undefined ) size = - 1; + if ( distance === undefined ) distance = 0; + if ( opacity === undefined ) opacity = 1; + if ( color === undefined ) color = new Color( 0xffffff ); + if ( blending === undefined ) blending = NormalBlending; + + distance = Math.min( distance, Math.max( 0, distance ) ); + + this.lensFlares.push( { + texture: texture, // THREE.Texture + size: size, // size in pixels (-1 = use texture.width) + distance: distance, // distance (0-1) from light source (0=at light source) + x: 0, y: 0, z: 0, // screen position (-1 => 1) z = 0 is in front z = 1 is back + scale: 1, // scale + rotation: 0, // rotation + opacity: opacity, // opacity + color: color, // color + blending: blending // blending + } ); + + }, + + /* + * Update lens flares update positions on all flares based on the screen position + * Set myLensFlare.customUpdateCallback to alter the flares in your project specific way. + */ + + updateLensFlares: function () { + + var f, fl = this.lensFlares.length; + var flare; + var vecX = - this.positionScreen.x * 2; + var vecY = - this.positionScreen.y * 2; + + for ( f = 0; f < fl; f ++ ) { + + flare = this.lensFlares[ f ]; + + flare.x = this.positionScreen.x + vecX * flare.distance; + flare.y = this.positionScreen.y + vecY * flare.distance; + + flare.wantedRotation = flare.x * Math.PI * 0.25; + flare.rotation += ( flare.wantedRotation - flare.rotation ) * 0.25; + + } + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * uvOffset: new THREE.Vector2(), + * uvScale: new THREE.Vector2() + * } + */ + +function SpriteMaterial( parameters ) { + + Material.call( this ); + + this.type = 'SpriteMaterial'; + + this.color = new Color( 0xffffff ); + this.map = null; + + this.rotation = 0; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +SpriteMaterial.prototype = Object.create( Material.prototype ); +SpriteMaterial.prototype.constructor = SpriteMaterial; +SpriteMaterial.prototype.isSpriteMaterial = true; + +SpriteMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.map = source.map; + + this.rotation = source.rotation; + + return this; + +}; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Sprite( material ) { + + Object3D.call( this ); + + this.type = 'Sprite'; + + this.material = ( material !== undefined ) ? material : new SpriteMaterial(); + +} + +Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Sprite, + + isSprite: true, + + raycast: ( function () { + + var intersectPoint = new Vector3(); + var worldPosition = new Vector3(); + var worldScale = new Vector3(); + + return function raycast( raycaster, intersects ) { + + worldPosition.setFromMatrixPosition( this.matrixWorld ); + raycaster.ray.closestPointToPoint( worldPosition, intersectPoint ); + + worldScale.setFromMatrixScale( this.matrixWorld ); + var guessSizeSq = worldScale.x * worldScale.y / 4; + + if ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return; + + var distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + point: intersectPoint.clone(), + face: null, + object: this + + } ); + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.material ).copy( this ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function LOD() { + + Object3D.call( this ); + + this.type = 'LOD'; + + Object.defineProperties( this, { + levels: { + enumerable: true, + value: [] + } + } ); + +} + +LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LOD, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source, false ); + + var levels = source.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + this.addLevel( level.object.clone(), level.distance ); + + } + + return this; + + }, + + addLevel: function ( object, distance ) { + + if ( distance === undefined ) distance = 0; + + distance = Math.abs( distance ); + + var levels = this.levels; + + for ( var l = 0; l < levels.length; l ++ ) { + + if ( distance < levels[ l ].distance ) { + + break; + + } + + } + + levels.splice( l, 0, { distance: distance, object: object } ); + + this.add( object ); + + }, + + getObjectForDistance: function ( distance ) { + + var levels = this.levels; + + for ( var i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance < levels[ i ].distance ) { + + break; + + } + + } + + return levels[ i - 1 ].object; + + }, + + raycast: ( function () { + + var matrixPosition = new Vector3(); + + return function raycast( raycaster, intersects ) { + + matrixPosition.setFromMatrixPosition( this.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( matrixPosition ); + + this.getObjectForDistance( distance ).raycast( raycaster, intersects ); + + }; + + }() ), + + update: function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function update( camera ) { + + var levels = this.levels; + + if ( levels.length > 1 ) { + + v1.setFromMatrixPosition( camera.matrixWorld ); + v2.setFromMatrixPosition( this.matrixWorld ); + + var distance = v1.distanceTo( v2 ); + + levels[ 0 ].object.visible = true; + + for ( var i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance >= levels[ i ].distance ) { + + levels[ i - 1 ].object.visible = false; + levels[ i ].object.visible = true; + + } else { + + break; + + } + + } + + for ( ; i < l; i ++ ) { + + levels[ i ].object.visible = false; + + } + + } + + }; + + }(), + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.levels = []; + + var levels = this.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + data.object.levels.push( { + object: level.object.uuid, + distance: level.distance + } ); + + } + + return data; + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author michael guerrero / http://realitymeltdown.com + * @author ikerr / http://verold.com + */ + +function Skeleton( bones, boneInverses ) { + + // copy the bone array + + bones = bones || []; + + this.bones = bones.slice( 0 ); + this.boneMatrices = new Float32Array( this.bones.length * 16 ); + + // use the supplied bone inverses or calculate the inverses + + if ( boneInverses === undefined ) { + + this.calculateInverses(); + + } else { + + if ( this.bones.length === boneInverses.length ) { + + this.boneInverses = boneInverses.slice( 0 ); + + } else { + + console.warn( 'THREE.Skeleton boneInverses is the wrong length.' ); + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + this.boneInverses.push( new Matrix4() ); + + } + + } + + } + +} + +Object.assign( Skeleton.prototype, { + + calculateInverses: function () { + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + var inverse = new Matrix4(); + + if ( this.bones[ i ] ) { + + inverse.getInverse( this.bones[ i ].matrixWorld ); + + } + + this.boneInverses.push( inverse ); + + } + + }, + + pose: function () { + + var bone, i, il; + + // recover the bind-time world matrices + + for ( i = 0, il = this.bones.length; i < il; i ++ ) { + + bone = this.bones[ i ]; + + if ( bone ) { + + bone.matrixWorld.getInverse( this.boneInverses[ i ] ); + + } + + } + + // compute the local matrices, positions, rotations and scales + + for ( i = 0, il = this.bones.length; i < il; i ++ ) { + + bone = this.bones[ i ]; + + if ( bone ) { + + if ( bone.parent && bone.parent.isBone ) { + + bone.matrix.getInverse( bone.parent.matrixWorld ); + bone.matrix.multiply( bone.matrixWorld ); + + } else { + + bone.matrix.copy( bone.matrixWorld ); + + } + + bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); + + } + + } + + }, + + update: ( function () { + + var offsetMatrix = new Matrix4(); + var identityMatrix = new Matrix4(); + + return function update() { + + var bones = this.bones; + var boneInverses = this.boneInverses; + var boneMatrices = this.boneMatrices; + var boneTexture = this.boneTexture; + + // flatten bone matrices to array + + for ( var i = 0, il = bones.length; i < il; i ++ ) { + + // compute the offset between the current and the original transform + + var matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix; + + offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); + offsetMatrix.toArray( boneMatrices, i * 16 ); + + } + + if ( boneTexture !== undefined ) { + + boneTexture.needsUpdate = true; + + } + + }; + + } )(), + + clone: function () { + + return new Skeleton( this.bones, this.boneInverses ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author ikerr / http://verold.com + */ + +function Bone() { + + Object3D.call( this ); + + this.type = 'Bone'; + +} + +Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Bone, + + isBone: true + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author ikerr / http://verold.com + */ + +function SkinnedMesh( geometry, material ) { + + Mesh.call( this, geometry, material ); + + this.type = 'SkinnedMesh'; + + this.bindMode = 'attached'; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + + var bones = this.initBones(); + var skeleton = new Skeleton( bones ); + + this.bind( skeleton, this.matrixWorld ); + + this.normalizeSkinWeights(); + +} + +SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: SkinnedMesh, + + isSkinnedMesh: true, + + initBones: function () { + + var bones = [], bone, gbone; + var i, il; + + if ( this.geometry && this.geometry.bones !== undefined ) { + + // first, create array of 'Bone' objects from geometry data + + for ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) { + + gbone = this.geometry.bones[ i ]; + + // create new 'Bone' object + + bone = new Bone(); + bones.push( bone ); + + // apply values + + bone.name = gbone.name; + bone.position.fromArray( gbone.pos ); + bone.quaternion.fromArray( gbone.rotq ); + if ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl ); + + } + + // second, create bone hierarchy + + for ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) { + + gbone = this.geometry.bones[ i ]; + + if ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) { + + // subsequent bones in the hierarchy + + bones[ gbone.parent ].add( bones[ i ] ); + + } else { + + // topmost bone, immediate child of the skinned mesh + + this.add( bones[ i ] ); + + } + + } + + } + + // now the bones are part of the scene graph and children of the skinned mesh. + // let's update the corresponding matrices + + this.updateMatrixWorld( true ); + + return bones; + + }, + + bind: function ( skeleton, bindMatrix ) { + + this.skeleton = skeleton; + + if ( bindMatrix === undefined ) { + + this.updateMatrixWorld( true ); + + this.skeleton.calculateInverses(); + + bindMatrix = this.matrixWorld; + + } + + this.bindMatrix.copy( bindMatrix ); + this.bindMatrixInverse.getInverse( bindMatrix ); + + }, + + pose: function () { + + this.skeleton.pose(); + + }, + + normalizeSkinWeights: function () { + + var scale, i; + + if ( this.geometry && this.geometry.isGeometry ) { + + for ( i = 0; i < this.geometry.skinWeights.length; i ++ ) { + + var sw = this.geometry.skinWeights[ i ]; + + scale = 1.0 / sw.lengthManhattan(); + + if ( scale !== Infinity ) { + + sw.multiplyScalar( scale ); + + } else { + + sw.set( 1, 0, 0, 0 ); // do something reasonable + + } + + } + + } else if ( this.geometry && this.geometry.isBufferGeometry ) { + + var vec = new Vector4(); + + var skinWeight = this.geometry.attributes.skinWeight; + + for ( i = 0; i < skinWeight.count; i ++ ) { + + vec.x = skinWeight.getX( i ); + vec.y = skinWeight.getY( i ); + vec.z = skinWeight.getZ( i ); + vec.w = skinWeight.getW( i ); + + scale = 1.0 / vec.lengthManhattan(); + + if ( scale !== Infinity ) { + + vec.multiplyScalar( scale ); + + } else { + + vec.set( 1, 0, 0, 0 ); // do something reasonable + + } + + skinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w ); + + } + + } + + }, + + updateMatrixWorld: function ( force ) { + + Mesh.prototype.updateMatrixWorld.call( this, force ); + + if ( this.bindMode === 'attached' ) { + + this.bindMatrixInverse.getInverse( this.matrixWorld ); + + } else if ( this.bindMode === 'detached' ) { + + this.bindMatrixInverse.getInverse( this.bindMatrix ); + + } else { + + console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); + + } + + }, + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * linecap: "round", + * linejoin: "round" + * } + */ + +function LineBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'LineBasicMaterial'; + + this.color = new Color( 0xffffff ); + + this.linewidth = 1; + this.linecap = 'round'; + this.linejoin = 'round'; + + this.lights = false; + + this.setValues( parameters ); + +} + +LineBasicMaterial.prototype = Object.create( Material.prototype ); +LineBasicMaterial.prototype.constructor = LineBasicMaterial; + +LineBasicMaterial.prototype.isLineBasicMaterial = true; + +LineBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Line( geometry, material, mode ) { + + if ( mode === 1 ) { + + console.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' ); + return new LineSegments( geometry, material ); + + } + + Object3D.call( this ); + + this.type = 'Line'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } ); + +} + +Line.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Line, + + isLine: true, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + return function raycast( raycaster, intersects ) { + + var precision = raycaster.linePrecision; + var precisionSq = precision * precision; + + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + var vStart = new Vector3(); + var vEnd = new Vector3(); + var interSegment = new Vector3(); + var interRay = new Vector3(); + var step = (this && this.isLineSegments) ? 2 : 1; + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, l = indices.length - 1; i < l; i += step ) { + + var a = indices[ i ]; + var b = indices[ i + 1 ]; + + vStart.fromArray( positions, a * 3 ); + vEnd.fromArray( positions, b * 3 ); + + var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } else { + + for ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) { + + vStart.fromArray( positions, 3 * i ); + vEnd.fromArray( positions, 3 * i + 3 ); + + var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + } else if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + var nbVertices = vertices.length; + + for ( var i = 0; i < nbVertices - 1; i += step ) { + + var distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LineSegments( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineSegments'; + +} + +LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineSegments, + + isLineSegments: true + +} ); + +/** + * @author mgreter / http://github.com/mgreter + */ + +function LineLoop( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineLoop'; + +} + +LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineLoop, + + isLineLoop: true, + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * size: , + * sizeAttenuation: + * } + */ + +function PointsMaterial( parameters ) { + + Material.call( this ); + + this.type = 'PointsMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.size = 1; + this.sizeAttenuation = true; + + this.lights = false; + + this.setValues( parameters ); + +} + +PointsMaterial.prototype = Object.create( Material.prototype ); +PointsMaterial.prototype.constructor = PointsMaterial; + +PointsMaterial.prototype.isPointsMaterial = true; + +PointsMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + + return this; + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Points( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Points'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } ); + +} + +Points.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Points, + + isPoints: true, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + return function raycast( raycaster, intersects ) { + + var object = this; + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + var threshold = raycaster.params.Points.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + sphere.radius += threshold; + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + var localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + var localThresholdSq = localThreshold * localThreshold; + var position = new Vector3(); + + function testPoint( point, index ) { + + var rayPointDistanceSq = ray.distanceSqToPoint( point ); + + if ( rayPointDistanceSq < localThresholdSq ) { + + var intersectPoint = ray.closestPointToPoint( point ); + intersectPoint.applyMatrix4( matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + distanceToRay: Math.sqrt( rayPointDistanceSq ), + point: intersectPoint.clone(), + index: index, + face: null, + object: object + + } ); + + } + + } + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, il = indices.length; i < il; i ++ ) { + + var a = indices[ i ]; + + position.fromArray( positions, a * 3 ); + + testPoint( position, a ); + + } + + } else { + + for ( var i = 0, l = positions.length / 3; i < l; i ++ ) { + + position.fromArray( positions, i * 3 ); + + testPoint( position, i ); + + } + + } + + } else { + + var vertices = geometry.vertices; + + for ( var i = 0, l = vertices.length; i < l; i ++ ) { + + testPoint( vertices[ i ], i ); + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Group() { + + Object3D.call( this ); + + this.type = 'Group'; + +} + +Group.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Group + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.generateMipmaps = false; + + var scope = this; + + function update() { + + requestAnimationFrame( update ); + + if ( video.readyState >= video.HAVE_CURRENT_DATA ) { + + scope.needsUpdate = true; + + } + + } + + update(); + +} + +VideoTexture.prototype = Object.create( Texture.prototype ); +VideoTexture.prototype.constructor = VideoTexture; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { width: width, height: height }; + this.mipmaps = mipmaps; + + // no flipping for cube textures + // (also flipping doesn't work for compressed textures ) + + this.flipY = false; + + // can't generate mipmaps for compressed textures + // mips must be embedded in DDS files + + this.generateMipmaps = false; + +} + +CompressedTexture.prototype = Object.create( Texture.prototype ); +CompressedTexture.prototype.constructor = CompressedTexture; + +CompressedTexture.prototype.isCompressedTexture = true; + +/** + * @author Matt DesLauriers / @mattdesl + * @author atix / arthursilber.de + */ + +function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { + + format = format !== undefined ? format : DepthFormat; + + if ( format !== DepthFormat && format !== DepthStencilFormat ) { + + throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); + + } + + if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; + if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type; + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.image = { width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.flipY = false; + this.generateMipmaps = false; + +} + +DepthTexture.prototype = Object.create( Texture.prototype ); +DepthTexture.prototype.constructor = DepthTexture; +DepthTexture.prototype.isDepthTexture = true; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +function WireframeGeometry( geometry ) { + + BufferGeometry.call( this ); + + this.type = 'WireframeGeometry'; + + // buffer + + var vertices = []; + + // helper variables + + var i, j, l, o, ol; + var edge = [ 0, 0 ], edges = {}, e, edge1, edge2; + var key, keys = [ 'a', 'b', 'c' ]; + var vertex; + + // different logic for Geometry and BufferGeometry + + if ( geometry && geometry.isGeometry ) { + + // create a data structure that contains all edges without duplicates + + var faces = geometry.faces; + + for ( i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( j = 0; j < 3; j ++ ) { + + edge1 = face[ keys[ j ] ]; + edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + e = edges[ key ]; + + vertex = geometry.vertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = geometry.vertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else if ( geometry && geometry.isBufferGeometry ) { + + var position, indices, groups; + var group, start, count; + var index1, index2; + + vertex = new Vector3(); + + if ( geometry.index !== null ) { + + // indexed BufferGeometry + + position = geometry.attributes.position; + indices = geometry.index; + groups = geometry.groups; + + if ( groups.length === 0 ) { + + groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; + + } + + // create a data structure that contains all eges without duplicates + + for ( o = 0, ol = groups.length; o < ol; ++ o ) { + + group = groups[ o ]; + + start = group.start; + count = group.count; + + for ( i = start, l = ( start + count ); i < l; i += 3 ) { + + for ( j = 0; j < 3; j ++ ) { + + edge1 = indices.getX( i + j ); + edge2 = indices.getX( i + ( j + 1 ) % 3 ); + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + e = edges[ key ]; + + vertex.fromBufferAttribute( position, e.index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex.fromBufferAttribute( position, e.index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else { + + // non-indexed BufferGeometry + + position = geometry.attributes.position; + + for ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) { + + for ( j = 0; j < 3; j ++ ) { + + // three edges per triangle, an edge is represented as (index1, index2) + // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) + + index1 = 3 * i + j; + vertex.fromBufferAttribute( position, index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + index2 = 3 * i + ( ( j + 1 ) % 3 ); + vertex.fromBufferAttribute( position, index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + } + + } + + // build geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + +} + +WireframeGeometry.prototype = Object.create( BufferGeometry.prototype ); +WireframeGeometry.prototype.constructor = WireframeGeometry; + +/** + * @author zz85 / https://github.com/zz85 + * @author Mugen87 / https://github.com/Mugen87 + * + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout http://prideout.net/blog/?p=44 + */ + +// ParametricGeometry + +function ParametricGeometry( func, slices, stacks ) { + + Geometry.call( this ); + + this.type = 'ParametricGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); + this.mergeVertices(); + +} + +ParametricGeometry.prototype = Object.create( Geometry.prototype ); +ParametricGeometry.prototype.constructor = ParametricGeometry; + +// ParametricBufferGeometry + +function ParametricBufferGeometry( func, slices, stacks ) { + + BufferGeometry.call( this ); + + this.type = 'ParametricBufferGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + var EPS = 0.00001; + + var normal = new Vector3(); + + var p0 = new Vector3(), p1 = new Vector3(); + var pu = new Vector3(), pv = new Vector3(); + + var i, j; + + // generate vertices, normals and uvs + + var sliceCount = slices + 1; + + for ( i = 0; i <= stacks; i ++ ) { + + var v = i / stacks; + + for ( j = 0; j <= slices; j ++ ) { + + var u = j / slices; + + // vertex + + p0 = func( u, v, p0 ); + vertices.push( p0.x, p0.y, p0.z ); + + // normal + + // approximate tangent vectors via finite differences + + if ( u - EPS >= 0 ) { + + p1 = func( u - EPS, v, p1 ); + pu.subVectors( p0, p1 ); + + } else { + + p1 = func( u + EPS, v, p1 ); + pu.subVectors( p1, p0 ); + + } + + if ( v - EPS >= 0 ) { + + p1 = func( u, v - EPS, p1 ); + pv.subVectors( p0, p1 ); + + } else { + + p1 = func( u, v + EPS, p1 ); + pv.subVectors( p1, p0 ); + + } + + // cross product of tangent vectors returns surface normal + + normal.crossVectors( pu, pv ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, v ); + + } + + } + + // generate indices + + for ( i = 0; i < stacks; i ++ ) { + + for ( j = 0; j < slices; j ++ ) { + + var a = i * sliceCount + j; + var b = i * sliceCount + j + 1; + var c = ( i + 1 ) * sliceCount + j + 1; + var d = ( i + 1 ) * sliceCount + j; + + // faces one and two + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; + +/** + * @author clockworkgeek / https://github.com/clockworkgeek + * @author timothypratley / https://github.com/timothypratley + * @author WestLangley / http://github.com/WestLangley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// PolyhedronGeometry + +function PolyhedronGeometry( vertices, indices, radius, detail ) { + + Geometry.call( this ); + + this.type = 'PolyhedronGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) ); + this.mergeVertices(); + +} + +PolyhedronGeometry.prototype = Object.create( Geometry.prototype ); +PolyhedronGeometry.prototype.constructor = PolyhedronGeometry; + +// PolyhedronBufferGeometry + +function PolyhedronBufferGeometry( vertices, indices, radius, detail ) { + + BufferGeometry.call( this ); + + this.type = 'PolyhedronBufferGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + radius = radius || 1; + detail = detail || 0; + + // default buffer data + + var vertexBuffer = []; + var uvBuffer = []; + + // the subdivision creates the vertex buffer data + + subdivide( detail ); + + // all vertices should lie on a conceptual sphere with a given radius + + appplyRadius( radius ); + + // finally, create the uv data + + generateUVs(); + + // build non-indexed geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); + + if ( detail === 0 ) { + + this.computeVertexNormals(); // flat normals + + } else { + + this.normalizeNormals(); // smooth normals + + } + + // helper functions + + function subdivide( detail ) { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + // iterate over all faces and apply a subdivison with the given detail value + + for ( var i = 0; i < indices.length; i += 3 ) { + + // get the vertices of the face + + getVertexByIndex( indices[ i + 0 ], a ); + getVertexByIndex( indices[ i + 1 ], b ); + getVertexByIndex( indices[ i + 2 ], c ); + + // perform subdivision + + subdivideFace( a, b, c, detail ); + + } + + } + + function subdivideFace( a, b, c, detail ) { + + var cols = Math.pow( 2, detail ); + + // we use this multidimensional array as a data structure for creating the subdivision + + var v = []; + + var i, j; + + // construct all of the vertices for this subdivision + + for ( i = 0; i <= cols; i ++ ) { + + v[ i ] = []; + + var aj = a.clone().lerp( c, i / cols ); + var bj = b.clone().lerp( c, i / cols ); + + var rows = cols - i; + + for ( j = 0; j <= rows; j ++ ) { + + if ( j === 0 && i === cols ) { + + v[ i ][ j ] = aj; + + } else { + + v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); + + } + + } + + } + + // construct all of the faces + + for ( i = 0; i < cols; i ++ ) { + + for ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { + + var k = Math.floor( j / 2 ); + + if ( j % 2 === 0 ) { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + pushVertex( v[ i ][ k ] ); + + } else { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + + } + + } + + } + + } + + function appplyRadius( radius ) { + + var vertex = new Vector3(); + + // iterate over the entire buffer and apply the radius to each vertex + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + vertex.normalize().multiplyScalar( radius ); + + vertexBuffer[ i + 0 ] = vertex.x; + vertexBuffer[ i + 1 ] = vertex.y; + vertexBuffer[ i + 2 ] = vertex.z; + + } + + } + + function generateUVs() { + + var vertex = new Vector3(); + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + var u = azimuth( vertex ) / 2 / Math.PI + 0.5; + var v = inclination( vertex ) / Math.PI + 0.5; + uvBuffer.push( u, 1 - v ); + + } + + correctUVs(); + + correctSeam(); + + } + + function correctSeam() { + + // handle case when face straddles the seam, see #3269 + + for ( var i = 0; i < uvBuffer.length; i += 6 ) { + + // uv data of a single face + + var x0 = uvBuffer[ i + 0 ]; + var x1 = uvBuffer[ i + 2 ]; + var x2 = uvBuffer[ i + 4 ]; + + var max = Math.max( x0, x1, x2 ); + var min = Math.min( x0, x1, x2 ); + + // 0.9 is somewhat arbitrary + + if ( max > 0.9 && min < 0.1 ) { + + if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1; + if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1; + if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1; + + } + + } + + } + + function pushVertex( vertex ) { + + vertexBuffer.push( vertex.x, vertex.y, vertex.z ); + + } + + function getVertexByIndex( index, vertex ) { + + var stride = index * 3; + + vertex.x = vertices[ stride + 0 ]; + vertex.y = vertices[ stride + 1 ]; + vertex.z = vertices[ stride + 2 ]; + + } + + function correctUVs() { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + var centroid = new Vector3(); + + var uvA = new Vector2(); + var uvB = new Vector2(); + var uvC = new Vector2(); + + for ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { + + a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); + b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); + c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); + + uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); + uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); + uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); + + centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); + + var azi = azimuth( centroid ); + + correctUV( uvA, j + 0, a, azi ); + correctUV( uvB, j + 2, b, azi ); + correctUV( uvC, j + 4, c, azi ); + + } + + } + + function correctUV( uv, stride, vector, azimuth ) { + + if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { + + uvBuffer[ stride ] = uv.x - 1; + + } + + if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { + + uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; + + } + + } + + // Angle around the Y axis, counter-clockwise when looking from above. + + function azimuth( vector ) { + + return Math.atan2( vector.z, - vector.x ); + + } + + + // Angle above the XZ plane. + + function inclination( vector ) { + + return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); + + } + +} + +PolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +PolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// TetrahedronGeometry + +function TetrahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'TetrahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +TetrahedronGeometry.prototype = Object.create( Geometry.prototype ); +TetrahedronGeometry.prototype.constructor = TetrahedronGeometry; + +// TetrahedronBufferGeometry + +function TetrahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 + ]; + + var indices = [ + 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'TetrahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +TetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +TetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// OctahedronGeometry + +function OctahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'OctahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +OctahedronGeometry.prototype = Object.create( Geometry.prototype ); +OctahedronGeometry.prototype.constructor = OctahedronGeometry; + +// OctahedronBufferGeometry + +function OctahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1 + ]; + + var indices = [ + 0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'OctahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +OctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +OctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// IcosahedronGeometry + +function IcosahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'IcosahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +IcosahedronGeometry.prototype = Object.create( Geometry.prototype ); +IcosahedronGeometry.prototype.constructor = IcosahedronGeometry; + +// IcosahedronBufferGeometry + +function IcosahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + + var vertices = [ + - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, + 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, + t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 + ]; + + var indices = [ + 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, + 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, + 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, + 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'IcosahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +IcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +IcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry; + +/** + * @author Abe Pazos / https://hamoid.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +// DodecahedronGeometry + +function DodecahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'DodecahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +DodecahedronGeometry.prototype = Object.create( Geometry.prototype ); +DodecahedronGeometry.prototype.constructor = DodecahedronGeometry; + +// DodecahedronBufferGeometry + +function DodecahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + var r = 1 / t; + + var vertices = [ + + // (±1, ±1, ±1) + - 1, - 1, - 1, - 1, - 1, 1, + - 1, 1, - 1, - 1, 1, 1, + 1, - 1, - 1, 1, - 1, 1, + 1, 1, - 1, 1, 1, 1, + + // (0, ±1/φ, ±φ) + 0, - r, - t, 0, - r, t, + 0, r, - t, 0, r, t, + + // (±1/φ, ±φ, 0) + - r, - t, 0, - r, t, 0, + r, - t, 0, r, t, 0, + + // (±φ, 0, ±1/φ) + - t, 0, - r, t, 0, - r, + - t, 0, r, t, 0, r + ]; + + var indices = [ + 3, 11, 7, 3, 7, 15, 3, 15, 13, + 7, 19, 17, 7, 17, 6, 7, 6, 15, + 17, 4, 8, 17, 8, 10, 17, 10, 6, + 8, 0, 16, 8, 16, 2, 8, 2, 10, + 0, 12, 1, 0, 1, 18, 0, 18, 16, + 6, 10, 2, 6, 2, 13, 6, 13, 15, + 2, 16, 18, 2, 18, 3, 2, 3, 13, + 18, 1, 9, 18, 9, 11, 18, 11, 3, + 4, 14, 12, 4, 12, 0, 4, 0, 8, + 11, 9, 5, 11, 5, 19, 11, 19, 7, + 19, 5, 14, 19, 14, 4, 19, 4, 17, + 1, 12, 14, 1, 14, 5, 1, 5, 9 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'DodecahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +DodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +DodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry; + +/** + * @author oosmoxiecode / https://github.com/oosmoxiecode + * @author WestLangley / https://github.com/WestLangley + * @author zz85 / https://github.com/zz85 + * @author miningold / https://github.com/miningold + * @author jonobr1 / https://github.com/jonobr1 + * @author Mugen87 / https://github.com/Mugen87 + * + */ + +// TubeGeometry + +function TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) { + + Geometry.call( this ); + + this.type = 'TubeGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + if ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' ); + + var bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ); + + // expose internals + + this.tangents = bufferGeometry.tangents; + this.normals = bufferGeometry.normals; + this.binormals = bufferGeometry.binormals; + + // create geometry + + this.fromBufferGeometry( bufferGeometry ); + this.mergeVertices(); + +} + +TubeGeometry.prototype = Object.create( Geometry.prototype ); +TubeGeometry.prototype.constructor = TubeGeometry; + +// TubeBufferGeometry + +function TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) { + + BufferGeometry.call( this ); + + this.type = 'TubeBufferGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + tubularSegments = tubularSegments || 64; + radius = radius || 1; + radialSegments = radialSegments || 8; + closed = closed || false; + + var frames = path.computeFrenetFrames( tubularSegments, closed ); + + // expose internals + + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + + // helper variables + + var vertex = new Vector3(); + var normal = new Vector3(); + var uv = new Vector2(); + + var i, j; + + // buffer + + var vertices = []; + var normals = []; + var uvs = []; + var indices = []; + + // create buffer data + + generateBufferData(); + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // functions + + function generateBufferData() { + + for ( i = 0; i < tubularSegments; i ++ ) { + + generateSegment( i ); + + } + + // if the geometry is not closed, generate the last row of vertices and normals + // at the regular position on the given path + // + // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) + + generateSegment( ( closed === false ) ? tubularSegments : 0 ); + + // uvs are generated in a separate function. + // this makes it easy compute correct values for closed geometries + + generateUVs(); + + // finally create faces + + generateIndices(); + + } + + function generateSegment( i ) { + + // we use getPointAt to sample evenly distributed points from the given path + + var P = path.getPointAt( i / tubularSegments ); + + // retrieve corresponding normal and binormal + + var N = frames.normals[ i ]; + var B = frames.binormals[ i ]; + + // generate normals and vertices for the current segment + + for ( j = 0; j <= radialSegments; j ++ ) { + + var v = j / radialSegments * Math.PI * 2; + + var sin = Math.sin( v ); + var cos = - Math.cos( v ); + + // normal + + normal.x = ( cos * N.x + sin * B.x ); + normal.y = ( cos * N.y + sin * B.y ); + normal.z = ( cos * N.z + sin * B.z ); + normal.normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // vertex + + vertex.x = P.x + radius * normal.x; + vertex.y = P.y + radius * normal.y; + vertex.z = P.z + radius * normal.z; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + function generateIndices() { + + for ( j = 1; j <= tubularSegments; j ++ ) { + + for ( i = 1; i <= radialSegments; i ++ ) { + + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + } + + function generateUVs() { + + for ( i = 0; i <= tubularSegments; i ++ ) { + + for ( j = 0; j <= radialSegments; j ++ ) { + + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + + uvs.push( uv.x, uv.y ); + + } + + } + + } + +} + +TubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TubeBufferGeometry.prototype.constructor = TubeBufferGeometry; + +/** + * @author oosmoxiecode + * @author Mugen87 / https://github.com/Mugen87 + * + * based on http://www.blackpawn.com/texts/pqtorus/ + */ + +// TorusKnotGeometry + +function TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { + + Geometry.call( this ); + + this.type = 'TorusKnotGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + if ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); + + this.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); + this.mergeVertices(); + +} + +TorusKnotGeometry.prototype = Object.create( Geometry.prototype ); +TorusKnotGeometry.prototype.constructor = TorusKnotGeometry; + +// TorusKnotBufferGeometry + +function TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) { + + BufferGeometry.call( this ); + + this.type = 'TorusKnotBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + radius = radius || 100; + tube = tube || 40; + tubularSegments = Math.floor( tubularSegments ) || 64; + radialSegments = Math.floor( radialSegments ) || 8; + p = p || 2; + q = q || 3; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var i, j; + + var vertex = new Vector3(); + var normal = new Vector3(); + + var P1 = new Vector3(); + var P2 = new Vector3(); + + var B = new Vector3(); + var T = new Vector3(); + var N = new Vector3(); + + // generate vertices, normals and uvs + + for ( i = 0; i <= tubularSegments; ++ i ) { + + // the radian "u" is used to calculate the position on the torus curve of the current tubular segement + + var u = i / tubularSegments * p * Math.PI * 2; + + // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. + // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions + + calculatePositionOnCurve( u, p, q, radius, P1 ); + calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); + + // calculate orthonormal basis + + T.subVectors( P2, P1 ); + N.addVectors( P2, P1 ); + B.crossVectors( T, N ); + N.crossVectors( B, T ); + + // normalize B, N. T can be ignored, we don't use it + + B.normalize(); + N.normalize(); + + for ( j = 0; j <= radialSegments; ++ j ) { + + // now calculate the vertices. they are nothing more than an extrusion of the torus curve. + // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. + + var v = j / radialSegments * Math.PI * 2; + var cx = - tube * Math.cos( v ); + var cy = tube * Math.sin( v ); + + // now calculate the final vertex position. + // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve + + vertex.x = P1.x + ( cx * N.x + cy * B.x ); + vertex.y = P1.y + ( cx * N.y + cy * B.y ); + vertex.z = P1.z + ( cx * N.z + cy * B.z ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) + + normal.subVectors( vertex, P1 ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( j = 1; j <= tubularSegments; j ++ ) { + + for ( i = 1; i <= radialSegments; i ++ ) { + + // indices + + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // this function calculates the current position on the torus curve + + function calculatePositionOnCurve( u, p, q, radius, position ) { + + var cu = Math.cos( u ); + var su = Math.sin( u ); + var quOverP = q / p * u; + var cs = Math.cos( quOverP ); + + position.x = radius * ( 2 + cs ) * 0.5 * cu; + position.y = radius * ( 2 + cs ) * su * 0.5; + position.z = radius * Math.sin( quOverP ) * 0.5; + + } + +} + +TorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry; + +/** + * @author oosmoxiecode + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// TorusGeometry + +function TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + Geometry.call( this ); + + this.type = 'TorusGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + this.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) ); + this.mergeVertices(); + +} + +TorusGeometry.prototype = Object.create( Geometry.prototype ); +TorusGeometry.prototype.constructor = TorusGeometry; + +// TorusBufferGeometry + +function TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + BufferGeometry.call( this ); + + this.type = 'TorusBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + radius = radius || 100; + tube = tube || 40; + radialSegments = Math.floor( radialSegments ) || 8; + tubularSegments = Math.floor( tubularSegments ) || 6; + arc = arc || Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var center = new Vector3(); + var vertex = new Vector3(); + var normal = new Vector3(); + + var j, i; + + // generate vertices, normals and uvs + + for ( j = 0; j <= radialSegments; j ++ ) { + + for ( i = 0; i <= tubularSegments; i ++ ) { + + var u = i / tubularSegments * arc; + var v = j / radialSegments * Math.PI * 2; + + // vertex + + vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); + vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); + vertex.z = tube * Math.sin( v ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + center.x = radius * Math.cos( u ); + center.y = radius * Math.sin( u ); + normal.subVectors( vertex, center ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( j = 1; j <= radialSegments; j ++ ) { + + for ( i = 1; i <= tubularSegments; i ++ ) { + + // indices + + var a = ( tubularSegments + 1 ) * j + i - 1; + var b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; + var c = ( tubularSegments + 1 ) * ( j - 1 ) + i; + var d = ( tubularSegments + 1 ) * j + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +TorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TorusBufferGeometry.prototype.constructor = TorusBufferGeometry; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + */ + +var ShapeUtils = { + + // calculate area of the contour polygon + + area: function ( contour ) { + + var n = contour.length; + var a = 0.0; + + for ( var p = n - 1, q = 0; q < n; p = q ++ ) { + + a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; + + } + + return a * 0.5; + + }, + + triangulate: ( function () { + + /** + * This code is a quick port of code written in C++ which was submitted to + * flipcode.com by John W. Ratcliff // July 22, 2000 + * See original code and more information here: + * http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml + * + * ported to actionscript by Zevan Rosser + * www.actionsnippet.com + * + * ported to javascript by Joshua Koo + * http://www.lab4games.net/zz85/blog + * + */ + + function snip( contour, u, v, w, n, verts ) { + + var p; + var ax, ay, bx, by; + var cx, cy, px, py; + + ax = contour[ verts[ u ] ].x; + ay = contour[ verts[ u ] ].y; + + bx = contour[ verts[ v ] ].x; + by = contour[ verts[ v ] ].y; + + cx = contour[ verts[ w ] ].x; + cy = contour[ verts[ w ] ].y; + + if ( ( bx - ax ) * ( cy - ay ) - ( by - ay ) * ( cx - ax ) <= 0 ) return false; + + var aX, aY, bX, bY, cX, cY; + var apx, apy, bpx, bpy, cpx, cpy; + var cCROSSap, bCROSScp, aCROSSbp; + + aX = cx - bx; aY = cy - by; + bX = ax - cx; bY = ay - cy; + cX = bx - ax; cY = by - ay; + + for ( p = 0; p < n; p ++ ) { + + px = contour[ verts[ p ] ].x; + py = contour[ verts[ p ] ].y; + + if ( ( ( px === ax ) && ( py === ay ) ) || + ( ( px === bx ) && ( py === by ) ) || + ( ( px === cx ) && ( py === cy ) ) ) continue; + + apx = px - ax; apy = py - ay; + bpx = px - bx; bpy = py - by; + cpx = px - cx; cpy = py - cy; + + // see if p is inside triangle abc + + aCROSSbp = aX * bpy - aY * bpx; + cCROSSap = cX * apy - cY * apx; + bCROSScp = bX * cpy - bY * cpx; + + if ( ( aCROSSbp >= - Number.EPSILON ) && ( bCROSScp >= - Number.EPSILON ) && ( cCROSSap >= - Number.EPSILON ) ) return false; + + } + + return true; + + } + + // takes in an contour array and returns + + return function triangulate( contour, indices ) { + + var n = contour.length; + + if ( n < 3 ) return null; + + var result = [], + verts = [], + vertIndices = []; + + /* we want a counter-clockwise polygon in verts */ + + var u, v, w; + + if ( ShapeUtils.area( contour ) > 0.0 ) { + + for ( v = 0; v < n; v ++ ) verts[ v ] = v; + + } else { + + for ( v = 0; v < n; v ++ ) verts[ v ] = ( n - 1 ) - v; + + } + + var nv = n; + + /* remove nv - 2 vertices, creating 1 triangle every time */ + + var count = 2 * nv; /* error detection */ + + for ( v = nv - 1; nv > 2; ) { + + /* if we loop, it is probably a non-simple polygon */ + + if ( ( count -- ) <= 0 ) { + + //** Triangulate: ERROR - probable bad polygon! + + //throw ( "Warning, unable to triangulate polygon!" ); + //return null; + // Sometimes warning is fine, especially polygons are triangulated in reverse. + console.warn( 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()' ); + + if ( indices ) return vertIndices; + return result; + + } + + /* three consecutive vertices in current polygon, */ + + u = v; if ( nv <= u ) u = 0; /* previous */ + v = u + 1; if ( nv <= v ) v = 0; /* new v */ + w = v + 1; if ( nv <= w ) w = 0; /* next */ + + if ( snip( contour, u, v, w, nv, verts ) ) { + + var a, b, c, s, t; + + /* true names of the vertices */ + + a = verts[ u ]; + b = verts[ v ]; + c = verts[ w ]; + + /* output Triangle */ + + result.push( [ contour[ a ], + contour[ b ], + contour[ c ] ] ); + + + vertIndices.push( [ verts[ u ], verts[ v ], verts[ w ] ] ); + + /* remove v from the remaining polygon */ + + for ( s = v, t = v + 1; t < nv; s ++, t ++ ) { + + verts[ s ] = verts[ t ]; + + } + + nv --; + + /* reset error detection counter */ + + count = 2 * nv; + + } + + } + + if ( indices ) return vertIndices; + return result; + + }; + + } )(), + + triangulateShape: function ( contour, holes ) { + + function removeDupEndPts(points) { + + var l = points.length; + + if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { + + points.pop(); + + } + + } + + removeDupEndPts( contour ); + holes.forEach( removeDupEndPts ); + + function point_in_segment_2D_colin( inSegPt1, inSegPt2, inOtherPt ) { + + // inOtherPt needs to be collinear to the inSegment + if ( inSegPt1.x !== inSegPt2.x ) { + + if ( inSegPt1.x < inSegPt2.x ) { + + return ( ( inSegPt1.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt2.x ) ); + + } else { + + return ( ( inSegPt2.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt1.x ) ); + + } + + } else { + + if ( inSegPt1.y < inSegPt2.y ) { + + return ( ( inSegPt1.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt2.y ) ); + + } else { + + return ( ( inSegPt2.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt1.y ) ); + + } + + } + + } + + function intersect_segments_2D( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1, inSeg2Pt2, inExcludeAdjacentSegs ) { + + var seg1dx = inSeg1Pt2.x - inSeg1Pt1.x, seg1dy = inSeg1Pt2.y - inSeg1Pt1.y; + var seg2dx = inSeg2Pt2.x - inSeg2Pt1.x, seg2dy = inSeg2Pt2.y - inSeg2Pt1.y; + + var seg1seg2dx = inSeg1Pt1.x - inSeg2Pt1.x; + var seg1seg2dy = inSeg1Pt1.y - inSeg2Pt1.y; + + var limit = seg1dy * seg2dx - seg1dx * seg2dy; + var perpSeg1 = seg1dy * seg1seg2dx - seg1dx * seg1seg2dy; + + if ( Math.abs( limit ) > Number.EPSILON ) { + + // not parallel + + var perpSeg2; + if ( limit > 0 ) { + + if ( ( perpSeg1 < 0 ) || ( perpSeg1 > limit ) ) return []; + perpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy; + if ( ( perpSeg2 < 0 ) || ( perpSeg2 > limit ) ) return []; + + } else { + + if ( ( perpSeg1 > 0 ) || ( perpSeg1 < limit ) ) return []; + perpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy; + if ( ( perpSeg2 > 0 ) || ( perpSeg2 < limit ) ) return []; + + } + + // i.e. to reduce rounding errors + // intersection at endpoint of segment#1? + if ( perpSeg2 === 0 ) { + + if ( ( inExcludeAdjacentSegs ) && + ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) ) return []; + return [ inSeg1Pt1 ]; + + } + if ( perpSeg2 === limit ) { + + if ( ( inExcludeAdjacentSegs ) && + ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) ) return []; + return [ inSeg1Pt2 ]; + + } + // intersection at endpoint of segment#2? + if ( perpSeg1 === 0 ) return [ inSeg2Pt1 ]; + if ( perpSeg1 === limit ) return [ inSeg2Pt2 ]; + + // return real intersection point + var factorSeg1 = perpSeg2 / limit; + return [ { x: inSeg1Pt1.x + factorSeg1 * seg1dx, + y: inSeg1Pt1.y + factorSeg1 * seg1dy } ]; + + } else { + + // parallel or collinear + if ( ( perpSeg1 !== 0 ) || + ( seg2dy * seg1seg2dx !== seg2dx * seg1seg2dy ) ) return []; + + // they are collinear or degenerate + var seg1Pt = ( ( seg1dx === 0 ) && ( seg1dy === 0 ) ); // segment1 is just a point? + var seg2Pt = ( ( seg2dx === 0 ) && ( seg2dy === 0 ) ); // segment2 is just a point? + // both segments are points + if ( seg1Pt && seg2Pt ) { + + if ( ( inSeg1Pt1.x !== inSeg2Pt1.x ) || + ( inSeg1Pt1.y !== inSeg2Pt1.y ) ) return []; // they are distinct points + return [ inSeg1Pt1 ]; // they are the same point + + } + // segment#1 is a single point + if ( seg1Pt ) { + + if ( ! point_in_segment_2D_colin( inSeg2Pt1, inSeg2Pt2, inSeg1Pt1 ) ) return []; // but not in segment#2 + return [ inSeg1Pt1 ]; + + } + // segment#2 is a single point + if ( seg2Pt ) { + + if ( ! point_in_segment_2D_colin( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1 ) ) return []; // but not in segment#1 + return [ inSeg2Pt1 ]; + + } + + // they are collinear segments, which might overlap + var seg1min, seg1max, seg1minVal, seg1maxVal; + var seg2min, seg2max, seg2minVal, seg2maxVal; + if ( seg1dx !== 0 ) { + + // the segments are NOT on a vertical line + if ( inSeg1Pt1.x < inSeg1Pt2.x ) { + + seg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.x; + seg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.x; + + } else { + + seg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.x; + seg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.x; + + } + if ( inSeg2Pt1.x < inSeg2Pt2.x ) { + + seg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.x; + seg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.x; + + } else { + + seg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.x; + seg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.x; + + } + + } else { + + // the segments are on a vertical line + if ( inSeg1Pt1.y < inSeg1Pt2.y ) { + + seg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.y; + seg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.y; + + } else { + + seg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.y; + seg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.y; + + } + if ( inSeg2Pt1.y < inSeg2Pt2.y ) { + + seg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.y; + seg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.y; + + } else { + + seg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.y; + seg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.y; + + } + + } + if ( seg1minVal <= seg2minVal ) { + + if ( seg1maxVal < seg2minVal ) return []; + if ( seg1maxVal === seg2minVal ) { + + if ( inExcludeAdjacentSegs ) return []; + return [ seg2min ]; + + } + if ( seg1maxVal <= seg2maxVal ) return [ seg2min, seg1max ]; + return [ seg2min, seg2max ]; + + } else { + + if ( seg1minVal > seg2maxVal ) return []; + if ( seg1minVal === seg2maxVal ) { + + if ( inExcludeAdjacentSegs ) return []; + return [ seg1min ]; + + } + if ( seg1maxVal <= seg2maxVal ) return [ seg1min, seg1max ]; + return [ seg1min, seg2max ]; + + } + + } + + } + + function isPointInsideAngle( inVertex, inLegFromPt, inLegToPt, inOtherPt ) { + + // The order of legs is important + + // translation of all points, so that Vertex is at (0,0) + var legFromPtX = inLegFromPt.x - inVertex.x, legFromPtY = inLegFromPt.y - inVertex.y; + var legToPtX = inLegToPt.x - inVertex.x, legToPtY = inLegToPt.y - inVertex.y; + var otherPtX = inOtherPt.x - inVertex.x, otherPtY = inOtherPt.y - inVertex.y; + + // main angle >0: < 180 deg.; 0: 180 deg.; <0: > 180 deg. + var from2toAngle = legFromPtX * legToPtY - legFromPtY * legToPtX; + var from2otherAngle = legFromPtX * otherPtY - legFromPtY * otherPtX; + + if ( Math.abs( from2toAngle ) > Number.EPSILON ) { + + // angle != 180 deg. + + var other2toAngle = otherPtX * legToPtY - otherPtY * legToPtX; + // console.log( "from2to: " + from2toAngle + ", from2other: " + from2otherAngle + ", other2to: " + other2toAngle ); + + if ( from2toAngle > 0 ) { + + // main angle < 180 deg. + return ( ( from2otherAngle >= 0 ) && ( other2toAngle >= 0 ) ); + + } else { + + // main angle > 180 deg. + return ( ( from2otherAngle >= 0 ) || ( other2toAngle >= 0 ) ); + + } + + } else { + + // angle == 180 deg. + // console.log( "from2to: 180 deg., from2other: " + from2otherAngle ); + return ( from2otherAngle > 0 ); + + } + + } + + + function removeHoles( contour, holes ) { + + var shape = contour.concat(); // work on this shape + var hole; + + function isCutLineInsideAngles( inShapeIdx, inHoleIdx ) { + + // Check if hole point lies within angle around shape point + var lastShapeIdx = shape.length - 1; + + var prevShapeIdx = inShapeIdx - 1; + if ( prevShapeIdx < 0 ) prevShapeIdx = lastShapeIdx; + + var nextShapeIdx = inShapeIdx + 1; + if ( nextShapeIdx > lastShapeIdx ) nextShapeIdx = 0; + + var insideAngle = isPointInsideAngle( shape[ inShapeIdx ], shape[ prevShapeIdx ], shape[ nextShapeIdx ], hole[ inHoleIdx ] ); + if ( ! insideAngle ) { + + // console.log( "Vertex (Shape): " + inShapeIdx + ", Point: " + hole[inHoleIdx].x + "/" + hole[inHoleIdx].y ); + return false; + + } + + // Check if shape point lies within angle around hole point + var lastHoleIdx = hole.length - 1; + + var prevHoleIdx = inHoleIdx - 1; + if ( prevHoleIdx < 0 ) prevHoleIdx = lastHoleIdx; + + var nextHoleIdx = inHoleIdx + 1; + if ( nextHoleIdx > lastHoleIdx ) nextHoleIdx = 0; + + insideAngle = isPointInsideAngle( hole[ inHoleIdx ], hole[ prevHoleIdx ], hole[ nextHoleIdx ], shape[ inShapeIdx ] ); + if ( ! insideAngle ) { + + // console.log( "Vertex (Hole): " + inHoleIdx + ", Point: " + shape[inShapeIdx].x + "/" + shape[inShapeIdx].y ); + return false; + + } + + return true; + + } + + function intersectsShapeEdge( inShapePt, inHolePt ) { + + // checks for intersections with shape edges + var sIdx, nextIdx, intersection; + for ( sIdx = 0; sIdx < shape.length; sIdx ++ ) { + + nextIdx = sIdx + 1; nextIdx %= shape.length; + intersection = intersect_segments_2D( inShapePt, inHolePt, shape[ sIdx ], shape[ nextIdx ], true ); + if ( intersection.length > 0 ) return true; + + } + + return false; + + } + + var indepHoles = []; + + function intersectsHoleEdge( inShapePt, inHolePt ) { + + // checks for intersections with hole edges + var ihIdx, chkHole, + hIdx, nextIdx, intersection; + for ( ihIdx = 0; ihIdx < indepHoles.length; ihIdx ++ ) { + + chkHole = holes[ indepHoles[ ihIdx ] ]; + for ( hIdx = 0; hIdx < chkHole.length; hIdx ++ ) { + + nextIdx = hIdx + 1; nextIdx %= chkHole.length; + intersection = intersect_segments_2D( inShapePt, inHolePt, chkHole[ hIdx ], chkHole[ nextIdx ], true ); + if ( intersection.length > 0 ) return true; + + } + + } + return false; + + } + + var holeIndex, shapeIndex, + shapePt, holePt, + holeIdx, cutKey, failedCuts = [], + tmpShape1, tmpShape2, + tmpHole1, tmpHole2; + + for ( var h = 0, hl = holes.length; h < hl; h ++ ) { + + indepHoles.push( h ); + + } + + var minShapeIndex = 0; + var counter = indepHoles.length * 2; + while ( indepHoles.length > 0 ) { + + counter --; + if ( counter < 0 ) { + + console.log( 'THREE.ShapeUtils: Infinite Loop! Holes left:" + indepHoles.length + ", Probably Hole outside Shape!' ); + break; + + } + + // search for shape-vertex and hole-vertex, + // which can be connected without intersections + for ( shapeIndex = minShapeIndex; shapeIndex < shape.length; shapeIndex ++ ) { + + shapePt = shape[ shapeIndex ]; + holeIndex = - 1; + + // search for hole which can be reached without intersections + for ( var h = 0; h < indepHoles.length; h ++ ) { + + holeIdx = indepHoles[ h ]; + + // prevent multiple checks + cutKey = shapePt.x + ':' + shapePt.y + ':' + holeIdx; + if ( failedCuts[ cutKey ] !== undefined ) continue; + + hole = holes[ holeIdx ]; + for ( var h2 = 0; h2 < hole.length; h2 ++ ) { + + holePt = hole[ h2 ]; + if ( ! isCutLineInsideAngles( shapeIndex, h2 ) ) continue; + if ( intersectsShapeEdge( shapePt, holePt ) ) continue; + if ( intersectsHoleEdge( shapePt, holePt ) ) continue; + + holeIndex = h2; + indepHoles.splice( h, 1 ); + + tmpShape1 = shape.slice( 0, shapeIndex + 1 ); + tmpShape2 = shape.slice( shapeIndex ); + tmpHole1 = hole.slice( holeIndex ); + tmpHole2 = hole.slice( 0, holeIndex + 1 ); + + shape = tmpShape1.concat( tmpHole1 ).concat( tmpHole2 ).concat( tmpShape2 ); + + minShapeIndex = shapeIndex; + + // Debug only, to show the selected cuts + // glob_CutLines.push( [ shapePt, holePt ] ); + + break; + + } + if ( holeIndex >= 0 ) break; // hole-vertex found + + failedCuts[ cutKey ] = true; // remember failure + + } + if ( holeIndex >= 0 ) break; // hole-vertex found + + } + + } + + return shape; /* shape with no holes */ + + } + + + var i, il, f, face, + key, index, + allPointsMap = {}; + + // To maintain reference to old shape, one must match coordinates, or offset the indices from original arrays. It's probably easier to do the first. + + var allpoints = contour.concat(); + + for ( var h = 0, hl = holes.length; h < hl; h ++ ) { + + Array.prototype.push.apply( allpoints, holes[ h ] ); + + } + + //console.log( "allpoints",allpoints, allpoints.length ); + + // prepare all points map + + for ( i = 0, il = allpoints.length; i < il; i ++ ) { + + key = allpoints[ i ].x + ':' + allpoints[ i ].y; + + if ( allPointsMap[ key ] !== undefined ) { + + console.warn( 'THREE.ShapeUtils: Duplicate point', key, i ); + + } + + allPointsMap[ key ] = i; + + } + + // remove holes by cutting paths to holes and adding them to the shape + var shapeWithoutHoles = removeHoles( contour, holes ); + + var triangles = ShapeUtils.triangulate( shapeWithoutHoles, false ); // True returns indices for points of spooled shape + //console.log( "triangles",triangles, triangles.length ); + + // check all face vertices against all points map + + for ( i = 0, il = triangles.length; i < il; i ++ ) { + + face = triangles[ i ]; + + for ( f = 0; f < 3; f ++ ) { + + key = face[ f ].x + ':' + face[ f ].y; + + index = allPointsMap[ key ]; + + if ( index !== undefined ) { + + face[ f ] = index; + + } + + } + + } + + return triangles.concat(); + + }, + + isClockWise: function ( pts ) { + + return ShapeUtils.area( pts ) < 0; + + } + +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * amount: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline is bevel + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * frames: // containing arrays of tangents, normals, binormals + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + +// ExtrudeGeometry + +function ExtrudeGeometry( shapes, options ) { + + Geometry.call( this ); + + this.type = 'ExtrudeGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); + this.mergeVertices(); + +} + +ExtrudeGeometry.prototype = Object.create( Geometry.prototype ); +ExtrudeGeometry.prototype.constructor = ExtrudeGeometry; + +// ExtrudeBufferGeometry + +function ExtrudeBufferGeometry( shapes, options ) { + + if ( typeof ( shapes ) === "undefined" ) { + + return; + + } + + BufferGeometry.call( this ); + + this.type = 'ExtrudeBufferGeometry'; + + shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; + + this.addShapeList( shapes, options ); + + this.computeVertexNormals(); + + // can't really use automatic vertex normals + // as then front and back sides get smoothed too + // should do separate smoothing just for sides + + //this.computeVertexNormals(); + + //console.log( "took", ( Date.now() - startTime ) ); + +} + +ExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry; + +ExtrudeBufferGeometry.prototype.getArrays = function () { + + var positionAttribute = this.getAttribute( "position" ); + var verticesArray = positionAttribute ? Array.prototype.slice.call( positionAttribute.array ) : []; + + var uvAttribute = this.getAttribute( "uv" ); + var uvArray = uvAttribute ? Array.prototype.slice.call( uvAttribute.array ) : []; + + var IndexAttribute = this.index; + var indicesArray = IndexAttribute ? Array.prototype.slice.call( IndexAttribute.array ) : []; + + return { + position: verticesArray, + uv: uvArray, + index: indicesArray + }; + +}; + +ExtrudeBufferGeometry.prototype.addShapeList = function ( shapes, options ) { + + var sl = shapes.length; + options.arrays = this.getArrays(); + + for ( var s = 0; s < sl; s ++ ) { + + var shape = shapes[ s ]; + this.addShape( shape, options ); + + } + + this.setIndex( options.arrays.index ); + this.addAttribute( 'position', new Float32BufferAttribute( options.arrays.position, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) ); + +}; + +ExtrudeBufferGeometry.prototype.addShape = function ( shape, options ) { + + var arrays = options.arrays ? options.arrays : this.getArrays(); + var verticesArray = arrays.position; + var indicesArray = arrays.index; + var uvArray = arrays.uv; + + var placeholder = []; + + + var amount = options.amount !== undefined ? options.amount : 100; + + var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10 + var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8 + var bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + + var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false + + var curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; + + var steps = options.steps !== undefined ? options.steps : 1; + + var extrudePath = options.extrudePath; + var extrudePts, extrudeByPath = false; + + // Use default WorldUVGenerator if no UV generators are specified. + var uvgen = options.UVGenerator !== undefined ? options.UVGenerator : ExtrudeGeometry.WorldUVGenerator; + + var splineTube, binormal, normal, position2; + if ( extrudePath ) { + + extrudePts = extrudePath.getSpacedPoints( steps ); + + extrudeByPath = true; + bevelEnabled = false; // bevels not supported for path extrusion + + // SETUP TNB variables + + // TODO1 - have a .isClosed in spline? + + splineTube = options.frames !== undefined ? options.frames : extrudePath.computeFrenetFrames( steps, false ); + + // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); + + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + + } + + // Safeguards if bevels are not enabled + + if ( ! bevelEnabled ) { + + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + + } + + // Variables initialization + + var ahole, h, hl; // looping of holes + var scope = this; + + var shapePoints = shape.extractPoints( curveSegments ); + + var vertices = shapePoints.shape; + var holes = shapePoints.holes; + + var reverse = ! ShapeUtils.isClockWise( vertices ); + + if ( reverse ) { + + vertices = vertices.reverse(); + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + if ( ShapeUtils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + + } + + } + + } + + + var faces = ShapeUtils.triangulateShape( vertices, holes ); + + /* Vertices */ + + var contour = vertices; // vertices has all points but contour has only points of circumference + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + vertices = vertices.concat( ahole ); + + } + + + function scalePt2( pt, vec, size ) { + + if ( ! vec ) console.error( "THREE.ExtrudeGeometry: vec does not exist" ); + + return vec.clone().multiplyScalar( size ).add( pt ); + + } + + var b, bs, t, z, + vert, vlen = vertices.length, + face, flen = faces.length; + + + // Find directions for point movement + + + function getBevelVec( inPt, inPrev, inNext ) { + + // computes for inPt the corresponding point inPt' on a new contour + // shifted by 1 unit (length of normalized vector) to the left + // if we walk along contour clockwise, this new contour is outside the old one + // + // inPt' is the intersection of the two lines parallel to the two + // adjacent edges of inPt at a distance of 1 unit on the left side. + + var v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt + + // good reading for geometry algorithms (here: line-line intersection) + // http://geomalgorithms.com/a05-_intersect-1.html + + var v_prev_x = inPt.x - inPrev.x, + v_prev_y = inPt.y - inPrev.y; + var v_next_x = inNext.x - inPt.x, + v_next_y = inNext.y - inPt.y; + + var v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); + + // check for collinear edges + var collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + if ( Math.abs( collinear0 ) > Number.EPSILON ) { + + // not collinear + + // length of vectors for normalizing + + var v_prev_len = Math.sqrt( v_prev_lensq ); + var v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); + + // shift adjacent points by unit vectors to the left + + var ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); + var ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); + + var ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); + var ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); + + // scaling factor for v_prev to intersection point + + var sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - + ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / + ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + // vector from inPt to intersection point + + v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); + v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); + + // Don't normalize!, otherwise sharp corners become ugly + // but prevent crazy spikes + var v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); + if ( v_trans_lensq <= 2 ) { + + return new Vector2( v_trans_x, v_trans_y ); + + } else { + + shrink_by = Math.sqrt( v_trans_lensq / 2 ); + + } + + } else { + + // handle special case of collinear edges + + var direction_eq = false; // assumes: opposite + if ( v_prev_x > Number.EPSILON ) { + + if ( v_next_x > Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( v_prev_x < - Number.EPSILON ) { + + if ( v_next_x < - Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { + + direction_eq = true; + + } + + } + + } + + if ( direction_eq ) { + + // console.log("Warning: lines are a straight sequence"); + v_trans_x = - v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt( v_prev_lensq ); + + } else { + + // console.log("Warning: lines are a straight spike"); + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt( v_prev_lensq / 2 ); + + } + + } + + return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); + + } + + + var contourMovements = []; + + for ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + // console.log('i,j,k', i, j , k) + + contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); + + } + + var holesMovements = [], + oneHoleMovements, verticesMovements = contourMovements.concat(); + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + oneHoleMovements = []; + + for ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); + + } + + holesMovements.push( oneHoleMovements ); + verticesMovements = verticesMovements.concat( oneHoleMovements ); + + } + + + // Loop bevelSegments, 1 for the front, 1 for the back + + for ( b = 0; b < bevelSegments; b ++ ) { + + //for ( b = bevelSegments; b > 0; b -- ) { + + t = b / bevelSegments; + z = bevelThickness * Math.cos( t * Math.PI / 2 ); + bs = bevelSize * Math.sin( t * Math.PI / 2 ); + + // contract shape + + for ( i = 0, il = contour.length; i < il; i ++ ) { + + vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + // expand holes + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( i = 0, il = ahole.length; i < il; i ++ ) { + + vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + } + + } + + bs = bevelSize; + + // Back facing vertices + + for ( i = 0; i < vlen; i ++ ) { + + vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, 0 ); + + } else { + + // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); + + normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + // Add stepped vertices... + // Including front facing vertices + + var s; + + for ( s = 1; s <= steps; s ++ ) { + + for ( i = 0; i < vlen; i ++ ) { + + vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, amount / steps * s ); + + } else { + + // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); + + normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + } + + + // Add bevel segments planes + + //for ( b = 1; b <= bevelSegments; b ++ ) { + for ( b = bevelSegments - 1; b >= 0; b -- ) { + + t = b / bevelSegments; + z = bevelThickness * Math.cos( t * Math.PI / 2 ); + bs = bevelSize * Math.sin( t * Math.PI / 2 ); + + // contract shape + + for ( i = 0, il = contour.length; i < il; i ++ ) { + + vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + v( vert.x, vert.y, amount + z ); + + } + + // expand holes + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( i = 0, il = ahole.length; i < il; i ++ ) { + + vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, amount + z ); + + } else { + + v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); + + } + + } + + } + + } + + /* Faces */ + + // Top and bottom faces + + buildLidFaces(); + + // Sides faces + + buildSideFaces(); + + + ///// Internal functions + + function buildLidFaces() { + + var start = verticesArray.length/3; + + if ( bevelEnabled ) { + + var layer = 0; // steps + 1 + var offset = vlen * layer; + + // Bottom faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); + + } + + layer = steps + bevelSegments * 2; + offset = vlen * layer; + + // Top faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); + + } + + } else { + + // Bottom faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 2 ], face[ 1 ], face[ 0 ] ); + + } + + // Top faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); + + } + + } + + scope.addGroup( start, verticesArray.length/3 -start, options.material !== undefined ? options.material : 0); + + } + + // Create faces for the z-sides of the shape + + function buildSideFaces() { + + var start = verticesArray.length/3; + var layeroffset = 0; + sidewalls( contour, layeroffset ); + layeroffset += contour.length; + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + sidewalls( ahole, layeroffset ); + + //, true + layeroffset += ahole.length; + + } + + + scope.addGroup( start, verticesArray.length/3 -start, options.extrudeMaterial !== undefined ? options.extrudeMaterial : 1); + + + } + + function sidewalls( contour, layeroffset ) { + + var j, k; + i = contour.length; + + while ( -- i >= 0 ) { + + j = i; + k = i - 1; + if ( k < 0 ) k = contour.length - 1; + + //console.log('b', i,j, i-1, k,vertices.length); + + var s = 0, + sl = steps + bevelSegments * 2; + + for ( s = 0; s < sl; s ++ ) { + + var slen1 = vlen * s; + var slen2 = vlen * ( s + 1 ); + + var a = layeroffset + j + slen1, + b = layeroffset + k + slen1, + c = layeroffset + k + slen2, + d = layeroffset + j + slen2; + + f4( a, b, c, d, contour, s, sl, j, k ); + + } + + } + + } + + function v( x, y, z ) { + + placeholder.push( x ); + placeholder.push( y ); + placeholder.push( z ); + + } + + + function f3( a, b, c ) { + + addVertex( a ); + addVertex( b ); + addVertex( c ); + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + + } + + function f4( a, b, c, d, wallContour, stepIndex, stepsLength, contourIndex1, contourIndex2 ) { + + addVertex( a ); + addVertex( b ); + addVertex( d ); + + addVertex( b ); + addVertex( c ); + addVertex( d ); + + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 3 ] ); + + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + addUV( uvs[ 3 ] ); + + } + + function addVertex( index ) { + + indicesArray.push( verticesArray.length / 3 ); + verticesArray.push( placeholder[ index * 3 + 0 ] ); + verticesArray.push( placeholder[ index * 3 + 1 ] ); + verticesArray.push( placeholder[ index * 3 + 2 ] ); + + } + + + function addUV( vector2 ) { + + uvArray.push( vector2.x ); + uvArray.push( vector2.y ); + + } + + if ( ! options.arrays ) { + + this.setIndex( indicesArray ); + this.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) ); + + } + +}; + +ExtrudeGeometry.WorldUVGenerator = { + + generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + + return [ + new Vector2( a_x, a_y ), + new Vector2( b_x, b_y ), + new Vector2( c_x, c_y ) + ]; + + }, + + generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var a_z = vertices[ indexA * 3 + 2 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var b_z = vertices[ indexB * 3 + 2 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + var c_z = vertices[ indexC * 3 + 2 ]; + var d_x = vertices[ indexD * 3 ]; + var d_y = vertices[ indexD * 3 + 1 ]; + var d_z = vertices[ indexD * 3 + 2 ]; + + if ( Math.abs( a_y - b_y ) < 0.01 ) { + + return [ + new Vector2( a_x, 1 - a_z ), + new Vector2( b_x, 1 - b_z ), + new Vector2( c_x, 1 - c_z ), + new Vector2( d_x, 1 - d_z ) + ]; + + } else { + + return [ + new Vector2( a_y, 1 - a_z ), + new Vector2( b_y, 1 - b_z ), + new Vector2( c_y, 1 - c_z ), + new Vector2( d_y, 1 - d_z ) + ]; + + } + + } +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author alteredq / http://alteredqualia.com/ + * + * Text = 3D Text + * + * parameters = { + * font: , // font + * + * size: , // size of the text + * height: , // thickness to extrude text + * curveSegments: , // number of points on the curves + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into text bevel goes + * bevelSize: // how far from text outline is bevel + * } + */ + +// TextGeometry + +function TextGeometry( text, parameters ) { + + Geometry.call( this ); + + this.type = 'TextGeometry'; + + this.parameters = { + text: text, + parameters: parameters + }; + + this.fromBufferGeometry( new TextBufferGeometry( text, parameters ) ); + this.mergeVertices(); + +} + +TextGeometry.prototype = Object.create( Geometry.prototype ); +TextGeometry.prototype.constructor = TextGeometry; + +// TextBufferGeometry + +function TextBufferGeometry( text, parameters ) { + + parameters = parameters || {}; + + var font = parameters.font; + + if ( ! ( font && font.isFont ) ) { + + console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); + return new Geometry(); + + } + + var shapes = font.generateShapes( text, parameters.size, parameters.curveSegments ); + + // translate parameters to ExtrudeGeometry API + + parameters.amount = parameters.height !== undefined ? parameters.height : 50; + + // defaults + + if ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10; + if ( parameters.bevelSize === undefined ) parameters.bevelSize = 8; + if ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false; + + ExtrudeBufferGeometry.call( this, shapes, parameters ); + + this.type = 'TextBufferGeometry'; + +} + +TextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype ); +TextBufferGeometry.prototype.constructor = TextBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author benaadams / https://twitter.com/ben_a_adams + * @author Mugen87 / https://github.com/Mugen87 + */ + +// SphereGeometry + +function SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'SphereGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +SphereGeometry.prototype = Object.create( Geometry.prototype ); +SphereGeometry.prototype.constructor = SphereGeometry; + +// SphereBufferGeometry + +function SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'SphereBufferGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 50; + + widthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 ); + heightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 ); + + phiStart = phiStart !== undefined ? phiStart : 0; + phiLength = phiLength !== undefined ? phiLength : Math.PI * 2; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI; + + var thetaEnd = thetaStart + thetaLength; + + var ix, iy; + + var index = 0; + var grid = []; + + var vertex = new Vector3(); + var normal = new Vector3(); + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( iy = 0; iy <= heightSegments; iy ++ ) { + + var verticesRow = []; + + var v = iy / heightSegments; + + for ( ix = 0; ix <= widthSegments; ix ++ ) { + + var u = ix / widthSegments; + + // vertex + + vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); + vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( vertex.x, vertex.y, vertex.z ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + verticesRow.push( index ++ ); + + } + + grid.push( verticesRow ); + + } + + // indices + + for ( iy = 0; iy < heightSegments; iy ++ ) { + + for ( ix = 0; ix < widthSegments; ix ++ ) { + + var a = grid[ iy ][ ix + 1 ]; + var b = grid[ iy ][ ix ]; + var c = grid[ iy + 1 ][ ix ]; + var d = grid[ iy + 1 ][ ix + 1 ]; + + if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); + if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +SphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +SphereBufferGeometry.prototype.constructor = SphereBufferGeometry; + +/** + * @author Kaleb Murphy + * @author Mugen87 / https://github.com/Mugen87 + */ + +// RingGeometry + +function RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'RingGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +RingGeometry.prototype = Object.create( Geometry.prototype ); +RingGeometry.prototype.constructor = RingGeometry; + +// RingBufferGeometry + +function RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'RingBufferGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + innerRadius = innerRadius || 20; + outerRadius = outerRadius || 50; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + thetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8; + phiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // some helper variables + + var segment; + var radius = innerRadius; + var radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); + var vertex = new Vector3(); + var uv = new Vector2(); + var j, i; + + // generate vertices, normals and uvs + + for ( j = 0; j <= phiSegments; j ++ ) { + + for ( i = 0; i <= thetaSegments; i ++ ) { + + // values are generate from the inside of the ring to the outside + + segment = thetaStart + i / thetaSegments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uv + + uv.x = ( vertex.x / outerRadius + 1 ) / 2; + uv.y = ( vertex.y / outerRadius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // increase the radius for next row of vertices + + radius += radiusStep; + + } + + // indices + + for ( j = 0; j < phiSegments; j ++ ) { + + var thetaSegmentLevel = j * ( thetaSegments + 1 ); + + for ( i = 0; i < thetaSegments; i ++ ) { + + segment = i + thetaSegmentLevel; + + var a = segment; + var b = segment + thetaSegments + 1; + var c = segment + thetaSegments + 2; + var d = segment + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +RingBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +RingBufferGeometry.prototype.constructor = RingBufferGeometry; + +/** + * @author astrodud / http://astrodud.isgreat.org/ + * @author zz85 / https://github.com/zz85 + * @author bhouston / http://clara.io + * @author Mugen87 / https://github.com/Mugen87 + */ + +// LatheGeometry + +function LatheGeometry( points, segments, phiStart, phiLength ) { + + Geometry.call( this ); + + this.type = 'LatheGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + this.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) ); + this.mergeVertices(); + +} + +LatheGeometry.prototype = Object.create( Geometry.prototype ); +LatheGeometry.prototype.constructor = LatheGeometry; + +// LatheBufferGeometry + +function LatheBufferGeometry( points, segments, phiStart, phiLength ) { + + BufferGeometry.call( this ); + + this.type = 'LatheBufferGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + segments = Math.floor( segments ) || 12; + phiStart = phiStart || 0; + phiLength = phiLength || Math.PI * 2; + + // clamp phiLength so it's in range of [ 0, 2PI ] + + phiLength = _Math.clamp( phiLength, 0, Math.PI * 2 ); + + + // buffers + + var indices = []; + var vertices = []; + var uvs = []; + + // helper variables + + var base; + var inverseSegments = 1.0 / segments; + var vertex = new Vector3(); + var uv = new Vector2(); + var i, j; + + // generate vertices and uvs + + for ( i = 0; i <= segments; i ++ ) { + + var phi = phiStart + i * inverseSegments * phiLength; + + var sin = Math.sin( phi ); + var cos = Math.cos( phi ); + + for ( j = 0; j <= ( points.length - 1 ); j ++ ) { + + // vertex + + vertex.x = points[ j ].x * sin; + vertex.y = points[ j ].y; + vertex.z = points[ j ].x * cos; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // uv + + uv.x = i / segments; + uv.y = j / ( points.length - 1 ); + + uvs.push( uv.x, uv.y ); + + + } + + } + + // indices + + for ( i = 0; i < segments; i ++ ) { + + for ( j = 0; j < ( points.length - 1 ); j ++ ) { + + base = j + i * points.length; + + var a = base; + var b = base + points.length; + var c = base + points.length + 1; + var d = base + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // generate normals + + this.computeVertexNormals(); + + // if the geometry is closed, we need to average the normals along the seam. + // because the corresponding vertices are identical (but still have different UVs). + + if ( phiLength === Math.PI * 2 ) { + + var normals = this.attributes.normal.array; + var n1 = new Vector3(); + var n2 = new Vector3(); + var n = new Vector3(); + + // this is the buffer offset for the last line of vertices + + base = segments * points.length * 3; + + for ( i = 0, j = 0; i < points.length; i ++, j += 3 ) { + + // select the normal of the vertex in the first line + + n1.x = normals[ j + 0 ]; + n1.y = normals[ j + 1 ]; + n1.z = normals[ j + 2 ]; + + // select the normal of the vertex in the last line + + n2.x = normals[ base + j + 0 ]; + n2.y = normals[ base + j + 1 ]; + n2.z = normals[ base + j + 2 ]; + + // average normals + + n.addVectors( n1, n2 ).normalize(); + + // assign the new values to both normals + + normals[ j + 0 ] = normals[ base + j + 0 ] = n.x; + normals[ j + 1 ] = normals[ base + j + 1 ] = n.y; + normals[ j + 2 ] = normals[ base + j + 2 ] = n.z; + + } + + } + +} + +LatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +LatheBufferGeometry.prototype.constructor = LatheBufferGeometry; + +/** + * @author jonobr1 / http://jonobr1.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +// ShapeGeometry + +function ShapeGeometry( shapes, curveSegments ) { + + Geometry.call( this ); + + this.type = 'ShapeGeometry'; + + if ( typeof curveSegments === 'object' ) { + + console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); + + curveSegments = curveSegments.curveSegments; + + } + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); + this.mergeVertices(); + +} + +ShapeGeometry.prototype = Object.create( Geometry.prototype ); +ShapeGeometry.prototype.constructor = ShapeGeometry; + +// ShapeBufferGeometry + +function ShapeBufferGeometry( shapes, curveSegments ) { + + BufferGeometry.call( this ); + + this.type = 'ShapeBufferGeometry'; + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + curveSegments = curveSegments || 12; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var groupStart = 0; + var groupCount = 0; + + // allow single and array values for "shapes" parameter + + if ( Array.isArray( shapes ) === false ) { + + addShape( shapes ); + + } else { + + for ( var i = 0; i < shapes.length; i ++ ) { + + addShape( shapes[ i ] ); + + this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support + + groupStart += groupCount; + groupCount = 0; + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + + // helper functions + + function addShape( shape ) { + + var i, l, shapeHole; + + var indexOffset = vertices.length / 3; + var points = shape.extractPoints( curveSegments ); + + var shapeVertices = points.shape; + var shapeHoles = points.holes; + + // check direction of vertices + + if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { + + shapeVertices = shapeVertices.reverse(); + + // also check if holes are in the opposite direction + + for ( i = 0, l = shapeHoles.length; i < l; i ++ ) { + + shapeHole = shapeHoles[ i ]; + + if ( ShapeUtils.isClockWise( shapeHole ) === true ) { + + shapeHoles[ i ] = shapeHole.reverse(); + + } + + } + + } + + var faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); + + // join vertices of inner and outer paths to a single array + + for ( i = 0, l = shapeHoles.length; i < l; i ++ ) { + + shapeHole = shapeHoles[ i ]; + shapeVertices = shapeVertices.concat( shapeHole ); + + } + + // vertices, normals, uvs + + for ( i = 0, l = shapeVertices.length; i < l; i ++ ) { + + var vertex = shapeVertices[ i ]; + + vertices.push( vertex.x, vertex.y, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( vertex.x, vertex.y ); // world uvs + + } + + // incides + + for ( i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + var a = face[ 0 ] + indexOffset; + var b = face[ 1 ] + indexOffset; + var c = face[ 2 ] + indexOffset; + + indices.push( a, b, c ); + groupCount += 3; + + } + + } + +} + +ShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry; + +/** + * @author WestLangley / http://github.com/WestLangley + * @author Mugen87 / https://github.com/Mugen87 + */ + +function EdgesGeometry( geometry, thresholdAngle ) { + + BufferGeometry.call( this ); + + this.type = 'EdgesGeometry'; + + this.parameters = { + thresholdAngle: thresholdAngle + }; + + thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; + + // buffer + + var vertices = []; + + // helper variables + + var thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle ); + var edge = [ 0, 0 ], edges = {}, edge1, edge2; + var key, keys = [ 'a', 'b', 'c' ]; + + // prepare source geometry + + var geometry2; + + if ( geometry.isBufferGeometry ) { + + geometry2 = new Geometry(); + geometry2.fromBufferGeometry( geometry ); + + } else { + + geometry2 = geometry.clone(); + + } + + geometry2.mergeVertices(); + geometry2.computeFaceNormals(); + + var sourceVertices = geometry2.vertices; + var faces = geometry2.faces; + + // now create a data structure where each entry represents an edge with its adjoining faces + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0; j < 3; j ++ ) { + + edge1 = face[ keys[ j ] ]; + edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined }; + + } else { + + edges[ key ].face2 = i; + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + var e = edges[ key ]; + + // an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree. + + if ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) { + + var vertex = sourceVertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = sourceVertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + // build geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + +} + +EdgesGeometry.prototype = Object.create( BufferGeometry.prototype ); +EdgesGeometry.prototype.constructor = EdgesGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// CylinderGeometry + +function CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'CylinderGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +CylinderGeometry.prototype = Object.create( Geometry.prototype ); +CylinderGeometry.prototype.constructor = CylinderGeometry; + +// CylinderBufferGeometry + +function CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'CylinderBufferGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + var scope = this; + + radiusTop = radiusTop !== undefined ? radiusTop : 20; + radiusBottom = radiusBottom !== undefined ? radiusBottom : 20; + height = height !== undefined ? height : 100; + + radialSegments = Math.floor( radialSegments ) || 8; + heightSegments = Math.floor( heightSegments ) || 1; + + openEnded = openEnded !== undefined ? openEnded : false; + thetaStart = thetaStart !== undefined ? thetaStart : 0.0; + thetaLength = thetaLength !== undefined ? thetaLength : 2.0 * Math.PI; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var index = 0; + var indexArray = []; + var halfHeight = height / 2; + var groupStart = 0; + + // generate geometry + + generateTorso(); + + if ( openEnded === false ) { + + if ( radiusTop > 0 ) generateCap( true ); + if ( radiusBottom > 0 ) generateCap( false ); + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function generateTorso() { + + var x, y; + var normal = new Vector3(); + var vertex = new Vector3(); + + var groupCount = 0; + + // this will be used to calculate the normal + var slope = ( radiusBottom - radiusTop ) / height; + + // generate vertices, normals and uvs + + for ( y = 0; y <= heightSegments; y ++ ) { + + var indexRow = []; + + var v = y / heightSegments; + + // calculate the radius of the current row + + var radius = v * ( radiusBottom - radiusTop ) + radiusTop; + + for ( x = 0; x <= radialSegments; x ++ ) { + + var u = x / radialSegments; + + var theta = u * thetaLength + thetaStart; + + var sinTheta = Math.sin( theta ); + var cosTheta = Math.cos( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = - v * height + halfHeight; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( sinTheta, slope, cosTheta ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + // save index of vertex in respective row + + indexRow.push( index ++ ); + + } + + // now save vertices of the row in our index array + + indexArray.push( indexRow ); + + } + + // generate indices + + for ( x = 0; x < radialSegments; x ++ ) { + + for ( y = 0; y < heightSegments; y ++ ) { + + // we use the index array to access the correct indices + + var a = indexArray[ y ][ x ]; + var b = indexArray[ y + 1 ][ x ]; + var c = indexArray[ y + 1 ][ x + 1 ]; + var d = indexArray[ y ][ x + 1 ]; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // update group counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, 0 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + function generateCap( top ) { + + var x, centerIndexStart, centerIndexEnd; + + var uv = new Vector2(); + var vertex = new Vector3(); + + var groupCount = 0; + + var radius = ( top === true ) ? radiusTop : radiusBottom; + var sign = ( top === true ) ? 1 : - 1; + + // save the index of the first center vertex + centerIndexStart = index; + + // first we generate the center vertex data of the cap. + // because the geometry needs one set of uvs per face, + // we must generate a center vertex per face/segment + + for ( x = 1; x <= radialSegments; x ++ ) { + + // vertex + + vertices.push( 0, halfHeight * sign, 0 ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uvs.push( 0.5, 0.5 ); + + // increase index + + index ++; + + } + + // save the index of the last center vertex + + centerIndexEnd = index; + + // now we generate the surrounding vertices, normals and uvs + + for ( x = 0; x <= radialSegments; x ++ ) { + + var u = x / radialSegments; + var theta = u * thetaLength + thetaStart; + + var cosTheta = Math.cos( theta ); + var sinTheta = Math.sin( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = halfHeight * sign; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uv.x = ( cosTheta * 0.5 ) + 0.5; + uv.y = ( sinTheta * 0.5 * sign ) + 0.5; + uvs.push( uv.x, uv.y ); + + // increase index + + index ++; + + } + + // generate indices + + for ( x = 0; x < radialSegments; x ++ ) { + + var c = centerIndexStart + x; + var i = centerIndexEnd + x; + + if ( top === true ) { + + // face top + + indices.push( i, i + 1, c ); + + } else { + + // face bottom + + indices.push( i + 1, i, c ); + + } + + groupCount += 3; + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + +} + +CylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +CylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry; + +/** + * @author abelnation / http://github.com/abelnation + */ + +// ConeGeometry + +function ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + +} + +ConeGeometry.prototype = Object.create( CylinderGeometry.prototype ); +ConeGeometry.prototype.constructor = ConeGeometry; + +// ConeBufferGeometry + +function ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeBufferGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + +} + +ConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype ); +ConeBufferGeometry.prototype.constructor = ConeBufferGeometry; + +/** + * @author benaadams / https://twitter.com/ben_a_adams + * @author Mugen87 / https://github.com/Mugen87 + * @author hughes + */ + +// CircleGeometry + +function CircleGeometry( radius, segments, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'CircleGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +CircleGeometry.prototype = Object.create( Geometry.prototype ); +CircleGeometry.prototype.constructor = CircleGeometry; + +// CircleBufferGeometry + +function CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'CircleBufferGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 50; + segments = segments !== undefined ? Math.max( 3, segments ) : 8; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var i, s; + var vertex = new Vector3(); + var uv = new Vector2(); + + // center point + + vertices.push( 0, 0, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( 0.5, 0.5 ); + + for ( s = 0, i = 3; s <= segments; s ++, i += 3 ) { + + var segment = thetaStart + s / segments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uvs + + uv.x = ( vertices[ i ] / radius + 1 ) / 2; + uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // indices + + for ( i = 1; i <= segments; i ++ ) { + + indices.push( i, i + 1, 0 ); + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +CircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +CircleBufferGeometry.prototype.constructor = CircleBufferGeometry; + + + +var Geometries = Object.freeze({ + WireframeGeometry: WireframeGeometry, + ParametricGeometry: ParametricGeometry, + ParametricBufferGeometry: ParametricBufferGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TetrahedronBufferGeometry: TetrahedronBufferGeometry, + OctahedronGeometry: OctahedronGeometry, + OctahedronBufferGeometry: OctahedronBufferGeometry, + IcosahedronGeometry: IcosahedronGeometry, + IcosahedronBufferGeometry: IcosahedronBufferGeometry, + DodecahedronGeometry: DodecahedronGeometry, + DodecahedronBufferGeometry: DodecahedronBufferGeometry, + PolyhedronGeometry: PolyhedronGeometry, + PolyhedronBufferGeometry: PolyhedronBufferGeometry, + TubeGeometry: TubeGeometry, + TubeBufferGeometry: TubeBufferGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TorusKnotBufferGeometry: TorusKnotBufferGeometry, + TorusGeometry: TorusGeometry, + TorusBufferGeometry: TorusBufferGeometry, + TextGeometry: TextGeometry, + TextBufferGeometry: TextBufferGeometry, + SphereGeometry: SphereGeometry, + SphereBufferGeometry: SphereBufferGeometry, + RingGeometry: RingGeometry, + RingBufferGeometry: RingBufferGeometry, + PlaneGeometry: PlaneGeometry, + PlaneBufferGeometry: PlaneBufferGeometry, + LatheGeometry: LatheGeometry, + LatheBufferGeometry: LatheBufferGeometry, + ShapeGeometry: ShapeGeometry, + ShapeBufferGeometry: ShapeBufferGeometry, + ExtrudeGeometry: ExtrudeGeometry, + ExtrudeBufferGeometry: ExtrudeBufferGeometry, + EdgesGeometry: EdgesGeometry, + ConeGeometry: ConeGeometry, + ConeBufferGeometry: ConeBufferGeometry, + CylinderGeometry: CylinderGeometry, + CylinderBufferGeometry: CylinderBufferGeometry, + CircleGeometry: CircleGeometry, + CircleBufferGeometry: CircleBufferGeometry, + BoxGeometry: BoxGeometry, + BoxBufferGeometry: BoxBufferGeometry +}); + +/** + * @author mrdoob / http://mrdoob.com/ + * + * parameters = { + * color: , + * opacity: + * } + */ + +function ShadowMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShadowMaterial'; + + this.color = new Color( 0x000000 ); + this.opacity = 1.0; + + this.lights = true; + this.transparent = true; + + this.setValues( parameters ); + +} + +ShadowMaterial.prototype = Object.create( Material.prototype ); +ShadowMaterial.prototype.constructor = ShadowMaterial; + +ShadowMaterial.prototype.isShadowMaterial = true; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function RawShaderMaterial( parameters ) { + + ShaderMaterial.call( this, parameters ); + + this.type = 'RawShaderMaterial'; + +} + +RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); +RawShaderMaterial.prototype.constructor = RawShaderMaterial; + +RawShaderMaterial.prototype.isRawShaderMaterial = true; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * color: , + * roughness: , + * metalness: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * roughnessMap: new THREE.Texture( ), + * + * metalnessMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * envMapIntensity: + * + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshStandardMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'STANDARD': '' }; + + this.type = 'MeshStandardMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.roughness = 0.5; + this.metalness = 0.5; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.roughnessMap = null; + + this.metalnessMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.envMapIntensity = 1.0; + + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshStandardMaterial.prototype = Object.create( Material.prototype ); +MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; + +MeshStandardMaterial.prototype.isMeshStandardMaterial = true; + +MeshStandardMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'STANDARD': '' }; + + this.color.copy( source.color ); + this.roughness = source.roughness; + this.metalness = source.metalness; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.roughnessMap = source.roughnessMap; + + this.metalnessMap = source.metalnessMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.envMapIntensity = source.envMapIntensity; + + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * reflectivity: + * } + */ + +function MeshPhysicalMaterial( parameters ) { + + MeshStandardMaterial.call( this ); + + this.defines = { 'PHYSICAL': '' }; + + this.type = 'MeshPhysicalMaterial'; + + this.reflectivity = 0.5; // maps to F0 = 0.04 + + this.clearCoat = 0.0; + this.clearCoatRoughness = 0.0; + + this.setValues( parameters ); + +} + +MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); +MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; + +MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; + +MeshPhysicalMaterial.prototype.copy = function ( source ) { + + MeshStandardMaterial.prototype.copy.call( this, source ); + + this.defines = { 'PHYSICAL': '' }; + + this.reflectivity = source.reflectivity; + + this.clearCoat = source.clearCoat; + this.clearCoatRoughness = source.clearCoatRoughness; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * specular: , + * shininess: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshPhongMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshPhongMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.specular = new Color( 0x111111 ); + this.shininess = 30; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshPhongMaterial.prototype = Object.create( Material.prototype ); +MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; + +MeshPhongMaterial.prototype.isMeshPhongMaterial = true; + +MeshPhongMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.specular.copy( source.specular ); + this.shininess = source.shininess; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author takahirox / http://github.com/takahirox + * + * parameters = { + * gradientMap: new THREE.Texture( ) + * } + */ + +function MeshToonMaterial( parameters ) { + + MeshPhongMaterial.call( this ); + + this.defines = { 'TOON': '' }; + + this.type = 'MeshToonMaterial'; + + this.gradientMap = null; + + this.setValues( parameters ); + +} + +MeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype ); +MeshToonMaterial.prototype.constructor = MeshToonMaterial; + +MeshToonMaterial.prototype.isMeshToonMaterial = true; + +MeshToonMaterial.prototype.copy = function ( source ) { + + MeshPhongMaterial.prototype.copy.call( this, source ); + + this.gradientMap = source.gradientMap; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * opacity: , + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshNormalMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshNormalMaterial'; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + this.lights = false; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshNormalMaterial.prototype = Object.create( Material.prototype ); +MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; + +MeshNormalMaterial.prototype.isMeshNormalMaterial = true; + +MeshNormalMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshLambertMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshLambertMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshLambertMaterial.prototype = Object.create( Material.prototype ); +MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; + +MeshLambertMaterial.prototype.isMeshLambertMaterial = true; + +MeshLambertMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * + * scale: , + * dashSize: , + * gapSize: + * } + */ + +function LineDashedMaterial( parameters ) { + + LineBasicMaterial.call( this ); + + this.type = 'LineDashedMaterial'; + + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + + this.setValues( parameters ); + +} + +LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); +LineDashedMaterial.prototype.constructor = LineDashedMaterial; + +LineDashedMaterial.prototype.isLineDashedMaterial = true; + +LineDashedMaterial.prototype.copy = function ( source ) { + + LineBasicMaterial.prototype.copy.call( this, source ); + + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + + return this; + +}; + + + +var Materials = Object.freeze({ + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material +}); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var Cache = { + + enabled: false, + + files: {}, + + add: function ( key, file ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Adding key:', key ); + + this.files[ key ] = file; + + }, + + get: function ( key ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Checking key:', key ); + + return this.files[ key ]; + + }, + + remove: function ( key ) { + + delete this.files[ key ]; + + }, + + clear: function () { + + this.files = {}; + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LoadingManager( onLoad, onProgress, onError ) { + + var scope = this; + + var isLoading = false, itemsLoaded = 0, itemsTotal = 0; + + this.onStart = undefined; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + + this.itemStart = function ( url ) { + + itemsTotal ++; + + if ( isLoading === false ) { + + if ( scope.onStart !== undefined ) { + + scope.onStart( url, itemsLoaded, itemsTotal ); + + } + + } + + isLoading = true; + + }; + + this.itemEnd = function ( url ) { + + itemsLoaded ++; + + if ( scope.onProgress !== undefined ) { + + scope.onProgress( url, itemsLoaded, itemsTotal ); + + } + + if ( itemsLoaded === itemsTotal ) { + + isLoading = false; + + if ( scope.onLoad !== undefined ) { + + scope.onLoad(); + + } + + } + + }; + + this.itemError = function ( url ) { + + if ( scope.onError !== undefined ) { + + scope.onError( url ); + + } + + }; + +} + +var DefaultLoadingManager = new LoadingManager(); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function FileLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( FileLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + // Check for data: URI + var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; + var dataUriRegexResult = url.match( dataUriRegex ); + + // Safari can not handle Data URIs through XMLHttpRequest so process manually + if ( dataUriRegexResult ) { + + var mimeType = dataUriRegexResult[ 1 ]; + var isBase64 = !! dataUriRegexResult[ 2 ]; + var data = dataUriRegexResult[ 3 ]; + + data = window.decodeURIComponent( data ); + + if ( isBase64 ) data = window.atob( data ); + + try { + + var response; + var responseType = ( this.responseType || '' ).toLowerCase(); + + switch ( responseType ) { + + case 'arraybuffer': + case 'blob': + + response = new ArrayBuffer( data.length ); + + var view = new Uint8Array( response ); + + for ( var i = 0; i < data.length; i ++ ) { + + view[ i ] = data.charCodeAt( i ); + + } + + if ( responseType === 'blob' ) { + + response = new Blob( [ response ], { type: mimeType } ); + + } + + break; + + case 'document': + + var parser = new DOMParser(); + response = parser.parseFromString( data, mimeType ); + + break; + + case 'json': + + response = JSON.parse( data ); + + break; + + default: // 'text' or other + + response = data; + + break; + + } + + // Wait for next browser tick + window.setTimeout( function () { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + } catch ( error ) { + + // Wait for next browser tick + window.setTimeout( function () { + + if ( onError ) onError( error ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, 0 ); + + } + + } else { + + var request = new XMLHttpRequest(); + request.open( 'GET', url, true ); + + request.addEventListener( 'load', function ( event ) { + + var response = event.target.response; + + Cache.add( url, response ); + + if ( this.status === 200 ) { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + } else if ( this.status === 0 ) { + + // Some browsers return HTTP Status 0 when using non-http protocol + // e.g. 'file://' or 'data://'. Handle as success. + + console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + } else { + + if ( onError ) onError( event ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + } + + }, false ); + + if ( onProgress !== undefined ) { + + request.addEventListener( 'progress', function ( event ) { + + onProgress( event ); + + }, false ); + + } + + request.addEventListener( 'error', function ( event ) { + + if ( onError ) onError( event ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, false ); + + if ( this.responseType !== undefined ) request.responseType = this.responseType; + if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; + + if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); + + for ( var header in this.requestHeader ) { + + request.setRequestHeader( header, this.requestHeader[ header ] ); + + } + + request.send( null ); + + } + + scope.manager.itemStart( url ); + + return request; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + }, + + setResponseType: function ( value ) { + + this.responseType = value; + return this; + + }, + + setWithCredentials: function ( value ) { + + this.withCredentials = value; + return this; + + }, + + setMimeType: function ( value ) { + + this.mimeType = value; + return this; + + }, + + setRequestHeader: function ( value ) { + + this.requestHeader = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * + * Abstract Base class to block based textures loader (dds, pvr, ...) + */ + +function CompressedTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + // override in sub classes + this._parser = null; + +} + +Object.assign( CompressedTextureLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var images = []; + + var texture = new CompressedTexture(); + texture.image = images; + + var loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + + function loadTexture( i ) { + + loader.load( url[ i ], function ( buffer ) { + + var texDatas = scope._parser( buffer, true ); + + images[ i ] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + + loaded += 1; + + if ( loaded === 6 ) { + + if ( texDatas.mipmapCount === 1 ) + texture.minFilter = LinearFilter; + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, onProgress, onError ); + + } + + if ( Array.isArray( url ) ) { + + var loaded = 0; + + for ( var i = 0, il = url.length; i < il; ++ i ) { + + loadTexture( i ); + + } + + } else { + + // compressed cubemap texture stored in a single DDS file + + loader.load( url, function ( buffer ) { + + var texDatas = scope._parser( buffer, true ); + + if ( texDatas.isCubemap ) { + + var faces = texDatas.mipmaps.length / texDatas.mipmapCount; + + for ( var f = 0; f < faces; f ++ ) { + + images[ f ] = { mipmaps : [] }; + + for ( var i = 0; i < texDatas.mipmapCount; i ++ ) { + + images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); + images[ f ].format = texDatas.format; + images[ f ].width = texDatas.width; + images[ f ].height = texDatas.height; + + } + + } + + } else { + + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + + } + + if ( texDatas.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + }, onProgress, onError ); + + } + + return texture; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author Nikos M. / https://github.com/foo123/ + * + * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) + */ + +function DataTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + // override in sub classes + this._parser = null; + +} + +Object.assign( DataTextureLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var texture = new DataTexture(); + + var loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + + loader.load( url, function ( buffer ) { + + var texData = scope._parser( buffer ); + + if ( ! texData ) return; + + if ( undefined !== texData.image ) { + + texture.image = texData.image; + + } else if ( undefined !== texData.data ) { + + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + + } + + texture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping; + + texture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter; + texture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter; + + texture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1; + + if ( undefined !== texData.format ) { + + texture.format = texData.format; + + } + if ( undefined !== texData.type ) { + + texture.type = texData.type; + + } + + if ( undefined !== texData.mipmaps ) { + + texture.mipmaps = texData.mipmaps; + + } + + if ( 1 === texData.mipmapCount ) { + + texture.minFilter = LinearFilter; + + } + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture, texData ); + + }, onProgress, onError ); + + + return texture; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ImageLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( ImageLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); + + image.addEventListener( 'load', function () { + + Cache.add( url, this ); + + if ( onLoad ) onLoad( this ); + + scope.manager.itemEnd( url ); + + }, false ); + + /* + image.addEventListener( 'progress', function ( event ) { + + if ( onProgress ) onProgress( event ); + + }, false ); + */ + + image.addEventListener( 'error', function ( event ) { + + if ( onError ) onError( event ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, false ); + + if ( url.substr( 0, 5 ) !== 'data:' ) { + + if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; + + } + + scope.manager.itemStart( url ); + + image.src = url; + + return image; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CubeTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( CubeTextureLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( urls, onLoad, onProgress, onError ) { + + var texture = new CubeTexture(); + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + var loaded = 0; + + function loadTexture( i ) { + + loader.load( urls[ i ], function ( image ) { + + texture.images[ i ] = image; + + loaded ++; + + if ( loaded === 6 ) { + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, undefined, onError ); + + } + + for ( var i = 0; i < urls.length; ++ i ) { + + loadTexture( i ); + + } + + return texture; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function TextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( TextureLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( url, onLoad, onProgress, onError ) { + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + var texture = new Texture(); + texture.image = loader.load( url, function () { + + // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. + var isJPEG = url.search( /\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; + + texture.format = isJPEG ? RGBFormat : RGBAFormat; + texture.needsUpdate = true; + + if ( onLoad !== undefined ) { + + onLoad( texture ); + + } + + }, onProgress, onError ); + + return texture; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Light( color, intensity ) { + + Object3D.call( this ); + + this.type = 'Light'; + + this.color = new Color( color ); + this.intensity = intensity !== undefined ? intensity : 1; + + this.receiveShadow = undefined; + +} + +Light.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Light, + + isLight: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.intensity = source.intensity; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + + if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); + + if ( this.distance !== undefined ) data.object.distance = this.distance; + if ( this.angle !== undefined ) data.object.angle = this.angle; + if ( this.decay !== undefined ) data.object.decay = this.decay; + if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; + + if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); + + return data; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function HemisphereLight( skyColor, groundColor, intensity ) { + + Light.call( this, skyColor, intensity ); + + this.type = 'HemisphereLight'; + + this.castShadow = undefined; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.groundColor = new Color( groundColor ); + +} + +HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: HemisphereLight, + + isHemisphereLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.groundColor.copy( source.groundColor ); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LightShadow( camera ) { + + this.camera = camera; + + this.bias = 0; + this.radius = 1; + + this.mapSize = new Vector2( 512, 512 ); + + this.map = null; + this.matrix = new Matrix4(); + +} + +Object.assign( LightShadow.prototype, { + + copy: function ( source ) { + + this.camera = source.camera.clone(); + + this.bias = source.bias; + this.radius = source.radius; + + this.mapSize.copy( source.mapSize ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + var object = {}; + + if ( this.bias !== 0 ) object.bias = this.bias; + if ( this.radius !== 1 ) object.radius = this.radius; + if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); + + object.camera = this.camera.toJSON( false ).object; + delete object.camera.matrix; + + return object; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function SpotLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); + +} + +SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: SpotLightShadow, + + isSpotLightShadow: true, + + update: function ( light ) { + + var camera = this.camera; + + var fov = _Math.RAD2DEG * 2 * light.angle; + var aspect = this.mapSize.width / this.mapSize.height; + var far = light.distance || camera.far; + + if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { + + camera.fov = fov; + camera.aspect = aspect; + camera.far = far; + camera.updateProjectionMatrix(); + + } + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function SpotLight( color, intensity, distance, angle, penumbra, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'SpotLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + Object.defineProperty( this, 'power', { + get: function () { + // intensity = power per solid angle. + // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + return this.intensity * Math.PI; + }, + set: function ( power ) { + // intensity = power per solid angle. + // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + this.intensity = power / Math.PI; + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; + this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new SpotLightShadow(); + +} + +SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: SpotLight, + + isSpotLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + + +function PointLight( color, intensity, distance, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'PointLight'; + + Object.defineProperty( this, 'power', { + get: function () { + // intensity = power per solid angle. + // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + return this.intensity * 4 * Math.PI; + + }, + set: function ( power ) { + // intensity = power per solid angle. + // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + this.intensity = power / ( 4 * Math.PI ); + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) ); + +} + +PointLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: PointLight, + + isPointLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.decay = source.decay; + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function DirectionalLightShadow( ) { + + LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); + +} + +DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: DirectionalLightShadow + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function DirectionalLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'DirectionalLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.shadow = new DirectionalLightShadow(); + +} + +DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: DirectionalLight, + + isDirectionalLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AmbientLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'AmbientLight'; + + this.castShadow = undefined; + +} + +AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: AmbientLight, + + isAmbientLight: true + +} ); + +/** + * @author abelnation / http://github.com/abelnation + */ + +function RectAreaLight( color, intensity, width, height ) { + + Light.call( this, color, intensity ); + + this.type = 'RectAreaLight'; + + this.position.set( 0, 1, 0 ); + this.updateMatrix(); + + this.width = ( width !== undefined ) ? width : 10; + this.height = ( height !== undefined ) ? height : 10; + + // TODO (abelnation): distance/decay + + // TODO (abelnation): update method for RectAreaLight to update transform to lookat target + + // TODO (abelnation): shadows + +} + +// TODO (abelnation): RectAreaLight update when light shape is changed +RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: RectAreaLight, + + isRectAreaLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.width = source.width; + this.height = source.height; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Light.prototype.toJSON.call( this, meta ); + + data.object.width = this.width; + data.object.height = this.height; + + return data; + + } + +} ); + +/** + * @author tschw + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + */ + +var AnimationUtils = { + + // same as Array.prototype.slice, but also works on typed arrays + arraySlice: function ( array, from, to ) { + + if ( AnimationUtils.isTypedArray( array ) ) { + + // in ios9 array.subarray(from, undefined) will return empty array + // but array.subarray(from) or array.subarray(from, len) is correct + return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); + + } + + return array.slice( from, to ); + + }, + + // converts an array to a specific type + convertArray: function ( array, type, forceClone ) { + + if ( ! array || // let 'undefined' and 'null' pass + ! forceClone && array.constructor === type ) return array; + + if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { + + return new type( array ); // create typed array + + } + + return Array.prototype.slice.call( array ); // create Array + + }, + + isTypedArray: function ( object ) { + + return ArrayBuffer.isView( object ) && + ! ( object instanceof DataView ); + + }, + + // returns an array by which times and values can be sorted + getKeyframeOrder: function ( times ) { + + function compareTime( i, j ) { + + return times[ i ] - times[ j ]; + + } + + var n = times.length; + var result = new Array( n ); + for ( var i = 0; i !== n; ++ i ) result[ i ] = i; + + result.sort( compareTime ); + + return result; + + }, + + // uses the array previously returned by 'getKeyframeOrder' to sort data + sortedArray: function ( values, stride, order ) { + + var nValues = values.length; + var result = new values.constructor( nValues ); + + for ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { + + var srcOffset = order[ i ] * stride; + + for ( var j = 0; j !== stride; ++ j ) { + + result[ dstOffset ++ ] = values[ srcOffset + j ]; + + } + + } + + return result; + + }, + + // function for parsing AOS keyframe formats + flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { + + var i = 1, key = jsonKeys[ 0 ]; + + while ( key !== undefined && key[ valuePropertyName ] === undefined ) { + + key = jsonKeys[ i ++ ]; + + } + + if ( key === undefined ) return; // no data + + var value = key[ valuePropertyName ]; + if ( value === undefined ) return; // no data + + if ( Array.isArray( value ) ) { + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push.apply( values, value ); // push all elements + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else if ( value.toArray !== undefined ) { + + // ...assume THREE.Math-ish + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + value.toArray( values, values.length ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else { + + // otherwise push as-is + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push( value ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } + + } + +}; + +/** + * Abstract base class of interpolants over parametric samples. + * + * The parameter domain is one dimensional, typically the time or a path + * along a curve defined by the data. + * + * The sample values can have any dimensionality and derived classes may + * apply special interpretations to the data. + * + * This class provides the interval seek in a Template Method, deferring + * the actual interpolation to derived classes. + * + * Time complexity is O(1) for linear access crossing at most two points + * and O(log N) for random access, where N is the number of positions. + * + * References: + * + * http://www.oodesign.com/template-method-pattern.html + * + * @author tschw + */ + +function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + + this.resultBuffer = resultBuffer !== undefined ? + resultBuffer : new sampleValues.constructor( sampleSize ); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + +} + +Object.assign( Interpolant.prototype, { + + evaluate: function( t ) { + + var pp = this.parameterPositions, + i1 = this._cachedIndex, + + t1 = pp[ i1 ], + t0 = pp[ i1 - 1 ]; + + validate_interval: { + + seek: { + + var right; + + linear_scan: { + //- See http://jsperf.com/comparison-to-undefined/3 + //- slower code: + //- + //- if ( t >= t1 || t1 === undefined ) { + forward_scan: if ( ! ( t < t1 ) ) { + + for ( var giveUpAt = i1 + 2; ;) { + + if ( t1 === undefined ) { + + if ( t < t0 ) break forward_scan; + + // after end + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t, t0 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t0 = t1; + t1 = pp[ ++ i1 ]; + + if ( t < t1 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the right side of the index + right = pp.length; + break linear_scan; + + } + + //- slower code: + //- if ( t < t0 || t0 === undefined ) { + if ( ! ( t >= t0 ) ) { + + // looping? + + var t1global = pp[ 1 ]; + + if ( t < t1global ) { + + i1 = 2; // + 1, using the scan for the details + t0 = t1global; + + } + + // linear reverse scan + + for ( var giveUpAt = i1 - 2; ;) { + + if ( t0 === undefined ) { + + // before start + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t1 = t0; + t0 = pp[ -- i1 - 1 ]; + + if ( t >= t0 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the left side of the index + right = i1; + i1 = 0; + break linear_scan; + + } + + // the interval is valid + + break validate_interval; + + } // linear scan + + // binary search + + while ( i1 < right ) { + + var mid = ( i1 + right ) >>> 1; + + if ( t < pp[ mid ] ) { + + right = mid; + + } else { + + i1 = mid + 1; + + } + + } + + t1 = pp[ i1 ]; + t0 = pp[ i1 - 1 ]; + + // check boundary cases, again + + if ( t0 === undefined ) { + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( t1 === undefined ) { + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t0, t ); + + } + + } // seek + + this._cachedIndex = i1; + + this.intervalChanged_( i1, t0, t1 ); + + } // validate_interval + + return this.interpolate_( i1, t0, t, t1 ); + + }, + + settings: null, // optional, subclass-specific settings structure + // Note: The indirection allows central control of many interpolants. + + // --- Protected interface + + DefaultSettings_: {}, + + getSettings_: function() { + + return this.settings || this.DefaultSettings_; + + }, + + copySampleValue_: function( index ) { + + // copies a sample value to the result buffer + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + offset = index * stride; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + }, + + // Template methods for derived classes: + + interpolate_: function( i1, t0, t, t1 ) { + + throw new Error( "call to abstract method" ); + // implementations shall return this.resultBuffer + + }, + + intervalChanged_: function( i1, t0, t1 ) { + + // empty + + } + +} ); + +//!\ DECLARE ALIAS AFTER assign prototype ! +Object.assign( Interpolant.prototype, { + + //( 0, t, t0 ), returns this.resultBuffer + beforeStart_: Interpolant.prototype.copySampleValue_, + + //( N-1, tN-1, t ), returns this.resultBuffer + afterEnd_: Interpolant.prototype.copySampleValue_, + +} ); + +/** + * Fast and simple cubic spline interpolant. + * + * It was derived from a Hermitian construction setting the first derivative + * at each sample position to the linear slope between neighboring positions + * over their parameter interval. + * + * @author tschw + */ + +function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( + this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + this._weightPrev = -0; + this._offsetPrev = -0; + this._weightNext = -0; + this._offsetNext = -0; + +} + +CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: CubicInterpolant, + + DefaultSettings_: { + + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + + }, + + intervalChanged_: function( i1, t0, t1 ) { + + var pp = this.parameterPositions, + iPrev = i1 - 2, + iNext = i1 + 1, + + tPrev = pp[ iPrev ], + tNext = pp[ iNext ]; + + if ( tPrev === undefined ) { + + switch ( this.getSettings_().endingStart ) { + + case ZeroSlopeEnding: + + // f'(t0) = 0 + iPrev = i1; + tPrev = 2 * t0 - t1; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iPrev = pp.length - 2; + tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(t0) = 0 a.k.a. Natural Spline + iPrev = i1; + tPrev = t1; + + } + + } + + if ( tNext === undefined ) { + + switch ( this.getSettings_().endingEnd ) { + + case ZeroSlopeEnding: + + // f'(tN) = 0 + iNext = i1; + tNext = 2 * t1 - t0; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iNext = 1; + tNext = t1 + pp[ 1 ] - pp[ 0 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(tN) = 0, a.k.a. Natural Spline + iNext = i1 - 1; + tNext = t0; + + } + + } + + var halfDt = ( t1 - t0 ) * 0.5, + stride = this.valueSize; + + this._weightPrev = halfDt / ( t0 - tPrev ); + this._weightNext = halfDt / ( tNext - t1 ); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + + }, + + interpolate_: function( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + o1 = i1 * stride, o0 = o1 - stride, + oP = this._offsetPrev, oN = this._offsetNext, + wP = this._weightPrev, wN = this._weightNext, + + p = ( t - t0 ) / ( t1 - t0 ), + pp = p * p, + ppp = pp * p; + + // evaluate polynomials + + var sP = - wP * ppp + 2 * wP * pp - wP * p; + var s0 = ( 1 + wP ) * ppp + (-1.5 - 2 * wP ) * pp + ( -0.5 + wP ) * p + 1; + var s1 = (-1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; + var sN = wN * ppp - wN * pp; + + // combine data linearly + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + sP * values[ oP + i ] + + s0 * values[ o0 + i ] + + s1 * values[ o1 + i ] + + sN * values[ oN + i ]; + + } + + return result; + + } + +} ); + +/** + * @author tschw + */ + +function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: LinearInterpolant, + + interpolate_: function( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset1 = i1 * stride, + offset0 = offset1 - stride, + + weight1 = ( t - t0 ) / ( t1 - t0 ), + weight0 = 1 - weight1; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + values[ offset0 + i ] * weight0 + + values[ offset1 + i ] * weight1; + + } + + return result; + + } + +} ); + +/** + * + * Interpolant that evaluates to the sample value at the position preceeding + * the parameter. + * + * @author tschw + */ + +function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: DiscreteInterpolant, + + interpolate_: function( i1, t0, t, t1 ) { + + return this.copySampleValue_( i1 - 1 ); + + } + +} ); + +var KeyframeTrackPrototype; + +KeyframeTrackPrototype = { + + TimeBufferType: Float32Array, + ValueBufferType: Float32Array, + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodDiscrete: function ( result ) { + + return new DiscreteInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new LinearInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: function ( result ) { + + return new CubicInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + setInterpolation: function ( interpolation ) { + + var factoryMethod; + + switch ( interpolation ) { + + case InterpolateDiscrete: + + factoryMethod = this.InterpolantFactoryMethodDiscrete; + + break; + + case InterpolateLinear: + + factoryMethod = this.InterpolantFactoryMethodLinear; + + break; + + case InterpolateSmooth: + + factoryMethod = this.InterpolantFactoryMethodSmooth; + + break; + + } + + if ( factoryMethod === undefined ) { + + var message = "unsupported interpolation for " + + this.ValueTypeName + " keyframe track named " + this.name; + + if ( this.createInterpolant === undefined ) { + + // fall back to default, unless the default itself is messed up + if ( interpolation !== this.DefaultInterpolation ) { + + this.setInterpolation( this.DefaultInterpolation ); + + } else { + + throw new Error( message ); // fatal, in this case + + } + + } + + console.warn( 'THREE.KeyframeTrackPrototype:', message ); + return; + + } + + this.createInterpolant = factoryMethod; + + }, + + getInterpolation: function () { + + switch ( this.createInterpolant ) { + + case this.InterpolantFactoryMethodDiscrete: + + return InterpolateDiscrete; + + case this.InterpolantFactoryMethodLinear: + + return InterpolateLinear; + + case this.InterpolantFactoryMethodSmooth: + + return InterpolateSmooth; + + } + + }, + + getValueSize: function () { + + return this.values.length / this.times.length; + + }, + + // move all keyframes either forwards or backwards in time + shift: function ( timeOffset ) { + + if ( timeOffset !== 0.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] += timeOffset; + + } + + } + + return this; + + }, + + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale: function ( timeScale ) { + + if ( timeScale !== 1.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] *= timeScale; + + } + + } + + return this; + + }, + + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim: function ( startTime, endTime ) { + + var times = this.times, + nKeys = times.length, + from = 0, + to = nKeys - 1; + + while ( from !== nKeys && times[ from ] < startTime ) ++ from; + while ( to !== - 1 && times[ to ] > endTime ) -- to; + + ++ to; // inclusive -> exclusive bound + + if ( from !== 0 || to !== nKeys ) { + + // empty tracks are forbidden, so keep at least one keyframe + if ( from >= to ) to = Math.max( to, 1 ), from = to - 1; + + var stride = this.getValueSize(); + this.times = AnimationUtils.arraySlice( times, from, to ); + this.values = AnimationUtils. + arraySlice( this.values, from * stride, to * stride ); + + } + + return this; + + }, + + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate: function () { + + var valid = true; + + var valueSize = this.getValueSize(); + if ( valueSize - Math.floor( valueSize ) !== 0 ) { + + console.error( 'THREE.KeyframeTrackPrototype: Invalid value size in track.', this ); + valid = false; + + } + + var times = this.times, + values = this.values, + + nKeys = times.length; + + if ( nKeys === 0 ) { + + console.error( 'THREE.KeyframeTrackPrototype: Track is empty.', this ); + valid = false; + + } + + var prevTime = null; + + for ( var i = 0; i !== nKeys; i ++ ) { + + var currTime = times[ i ]; + + if ( typeof currTime === 'number' && isNaN( currTime ) ) { + + console.error( 'THREE.KeyframeTrackPrototype: Time is not a valid number.', this, i, currTime ); + valid = false; + break; + + } + + if ( prevTime !== null && prevTime > currTime ) { + + console.error( 'THREE.KeyframeTrackPrototype: Out of order keys.', this, i, currTime, prevTime ); + valid = false; + break; + + } + + prevTime = currTime; + + } + + if ( values !== undefined ) { + + if ( AnimationUtils.isTypedArray( values ) ) { + + for ( var i = 0, n = values.length; i !== n; ++ i ) { + + var value = values[ i ]; + + if ( isNaN( value ) ) { + + console.error( 'THREE.KeyframeTrackPrototype: Value is not a valid number.', this, i, value ); + valid = false; + break; + + } + + } + + } + + } + + return valid; + + }, + + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize: function () { + + var times = this.times, + values = this.values, + stride = this.getValueSize(), + + smoothInterpolation = this.getInterpolation() === InterpolateSmooth, + + writeIndex = 1, + lastIndex = times.length - 1; + + for ( var i = 1; i < lastIndex; ++ i ) { + + var keep = false; + + var time = times[ i ]; + var timeNext = times[ i + 1 ]; + + // remove adjacent keyframes scheduled at the same time + + if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { + + if ( ! smoothInterpolation ) { + + // remove unnecessary keyframes same as their neighbors + + var offset = i * stride, + offsetP = offset - stride, + offsetN = offset + stride; + + for ( var j = 0; j !== stride; ++ j ) { + + var value = values[ offset + j ]; + + if ( value !== values[ offsetP + j ] || + value !== values[ offsetN + j ] ) { + + keep = true; + break; + + } + + } + + } else keep = true; + + } + + // in-place compaction + + if ( keep ) { + + if ( i !== writeIndex ) { + + times[ writeIndex ] = times[ i ]; + + var readOffset = i * stride, + writeOffset = writeIndex * stride; + + for ( var j = 0; j !== stride; ++ j ) + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + ++ writeIndex; + + } + + } + + // flush last keyframe (compaction looks ahead) + + if ( lastIndex > 0 ) { + + times[ writeIndex ] = times[ lastIndex ]; + + for ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) + + values[ writeOffset + j ] = values[ readOffset + j ]; + + ++ writeIndex; + + } + + if ( writeIndex !== times.length ) { + + this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); + this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); + + } + + return this; + + } + +}; + +function KeyframeTrackConstructor( name, times, values, interpolation ) { + + if ( name === undefined ) throw new Error( "track name is undefined" ); + + if ( times === undefined || times.length === 0 ) { + + throw new Error( "no keyframes in track named " + name ); + + } + + this.name = name; + + this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); + this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); + + this.setInterpolation( interpolation || this.DefaultInterpolation ); + + this.validate(); + this.optimize(); + +} + +/** + * + * A Track of vectored keyframe values. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function VectorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +VectorKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: VectorKeyframeTrack, + + ValueTypeName: 'vector' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + +} ); + +/** + * Spherical linear unit quaternion interpolant. + * + * @author tschw + */ + +function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: QuaternionLinearInterpolant, + + interpolate_: function( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset = i1 * stride, + + alpha = ( t - t0 ) / ( t1 - t0 ); + + for ( var end = offset + stride; offset !== end; offset += 4 ) { + + Quaternion.slerpFlat( result, 0, + values, offset - stride, values, offset, alpha ); + + } + + return result; + + } + +} ); + +/** + * + * A Track of quaternion keyframe values. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function QuaternionKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +QuaternionKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: QuaternionKeyframeTrack, + + ValueTypeName: 'quaternion', + + // ValueBufferType is inherited + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodLinear: function( result ) { + + return new QuaternionLinearInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: undefined // not yet implemented + +} ); + +/** + * + * A Track of numeric keyframe values. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function NumberKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +NumberKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: NumberKeyframeTrack, + + ValueTypeName: 'number' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + +} ); + +/** + * + * A Track that interpolates Strings + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function StringKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +StringKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: StringKeyframeTrack, + + ValueTypeName: 'string', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + + InterpolantFactoryMethodSmooth: undefined + +} ); + +/** + * + * A Track of Boolean keyframe values. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function BooleanKeyframeTrack( name, times, values ) { + + KeyframeTrackConstructor.call( this, name, times, values ); + +} + +BooleanKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: BooleanKeyframeTrack, + + ValueTypeName: 'bool', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + InterpolantFactoryMethodSmooth: undefined + + // Note: Actually this track could have a optimized / compressed + // representation of a single value and a custom interpolant that + // computes "firstValue ^ isOdd( index )". + +} ); + +/** + * + * A Track of keyframe values that represent color. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function ColorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +ColorKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: ColorKeyframeTrack, + + ValueTypeName: 'color' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + + // Note: Very basic implementation and nothing special yet. + // However, this is the place for color space parameterization. + +} ); + +/** + * + * A timed sequence of keyframes for a specific property. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function KeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.apply( this, arguments ); + +} + +KeyframeTrack.prototype = KeyframeTrackPrototype; +KeyframeTrackPrototype.constructor = KeyframeTrack; + +// Static methods: + +Object.assign( KeyframeTrack, { + + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + + parse: function( json ) { + + if( json.type === undefined ) { + + throw new Error( "track type undefined, can not parse" ); + + } + + var trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type ); + + if ( json.times === undefined ) { + + var times = [], values = []; + + AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); + + json.times = times; + json.values = values; + + } + + // derived classes can define a static parse method + if ( trackType.parse !== undefined ) { + + return trackType.parse( json ); + + } else { + + // by default, we assume a constructor compatible with the base + return new trackType( + json.name, json.times, json.values, json.interpolation ); + + } + + }, + + toJSON: function( track ) { + + var trackType = track.constructor; + + var json; + + // derived classes can define a static toJSON method + if ( trackType.toJSON !== undefined ) { + + json = trackType.toJSON( track ); + + } else { + + // by default, we assume the data can be serialized as-is + json = { + + 'name': track.name, + 'times': AnimationUtils.convertArray( track.times, Array ), + 'values': AnimationUtils.convertArray( track.values, Array ) + + }; + + var interpolation = track.getInterpolation(); + + if ( interpolation !== track.DefaultInterpolation ) { + + json.interpolation = interpolation; + + } + + } + + json.type = track.ValueTypeName; // mandatory + + return json; + + }, + + _getTrackTypeForValueTypeName: function( typeName ) { + + switch( typeName.toLowerCase() ) { + + case "scalar": + case "double": + case "float": + case "number": + case "integer": + + return NumberKeyframeTrack; + + case "vector": + case "vector2": + case "vector3": + case "vector4": + + return VectorKeyframeTrack; + + case "color": + + return ColorKeyframeTrack; + + case "quaternion": + + return QuaternionKeyframeTrack; + + case "bool": + case "boolean": + + return BooleanKeyframeTrack; + + case "string": + + return StringKeyframeTrack; + + } + + throw new Error( "Unsupported typeName: " + typeName ); + + } + +} ); + +/** + * + * Reusable set of Tracks that represent an animation. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + */ + +function AnimationClip( name, duration, tracks ) { + + this.name = name; + this.tracks = tracks; + this.duration = ( duration !== undefined ) ? duration : - 1; + + this.uuid = _Math.generateUUID(); + + // this means it should figure out its duration by scanning the tracks + if ( this.duration < 0 ) { + + this.resetDuration(); + + } + + this.optimize(); + +} + +Object.assign( AnimationClip, { + + parse: function ( json ) { + + var tracks = [], + jsonTracks = json.tracks, + frameTime = 1.0 / ( json.fps || 1.0 ); + + for ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) ); + + } + + return new AnimationClip( json.name, json.duration, tracks ); + + }, + + toJSON: function ( clip ) { + + var tracks = [], + clipTracks = clip.tracks; + + var json = { + + 'name': clip.name, + 'duration': clip.duration, + 'tracks': tracks + + }; + + for ( var i = 0, n = clipTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); + + } + + return json; + + }, + + CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { + + var numMorphTargets = morphTargetSequence.length; + var tracks = []; + + for ( var i = 0; i < numMorphTargets; i ++ ) { + + var times = []; + var values = []; + + times.push( + ( i + numMorphTargets - 1 ) % numMorphTargets, + i, + ( i + 1 ) % numMorphTargets ); + + values.push( 0, 1, 0 ); + + var order = AnimationUtils.getKeyframeOrder( times ); + times = AnimationUtils.sortedArray( times, 1, order ); + values = AnimationUtils.sortedArray( values, 1, order ); + + // if there is a key at the first frame, duplicate it as the + // last frame as well for perfect loop. + if ( ! noLoop && times[ 0 ] === 0 ) { + + times.push( numMorphTargets ); + values.push( values[ 0 ] ); + + } + + tracks.push( + new NumberKeyframeTrack( + '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', + times, values + ).scale( 1.0 / fps ) ); + + } + + return new AnimationClip( name, - 1, tracks ); + + }, + + findByName: function ( objectOrClipArray, name ) { + + var clipArray = objectOrClipArray; + + if ( ! Array.isArray( objectOrClipArray ) ) { + + var o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + + } + + for ( var i = 0; i < clipArray.length; i ++ ) { + + if ( clipArray[ i ].name === name ) { + + return clipArray[ i ]; + + } + + } + + return null; + + }, + + CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { + + var animationToMorphTargets = {}; + + // tested with https://regex101.com/ on trick sequences + // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 + var pattern = /^([\w-]*?)([\d]+)$/; + + // sort morph target names into animation groups based + // patterns like Walk_001, Walk_002, Run_001, Run_002 + for ( var i = 0, il = morphTargets.length; i < il; i ++ ) { + + var morphTarget = morphTargets[ i ]; + var parts = morphTarget.name.match( pattern ); + + if ( parts && parts.length > 1 ) { + + var name = parts[ 1 ]; + + var animationMorphTargets = animationToMorphTargets[ name ]; + if ( ! animationMorphTargets ) { + + animationToMorphTargets[ name ] = animationMorphTargets = []; + + } + + animationMorphTargets.push( morphTarget ); + + } + + } + + var clips = []; + + for ( var name in animationToMorphTargets ) { + + clips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); + + } + + return clips; + + }, + + // parse the animation.hierarchy format + parseAnimation: function ( animation, bones ) { + + if ( ! animation ) { + + console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); + return null; + + } + + var addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { + + // only return track if there are actually keys. + if ( animationKeys.length !== 0 ) { + + var times = []; + var values = []; + + AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); + + // empty keys are filtered out, so check again + if ( times.length !== 0 ) { + + destTracks.push( new trackType( trackName, times, values ) ); + + } + + } + + }; + + var tracks = []; + + var clipName = animation.name || 'default'; + // automatic length determination in AnimationClip. + var duration = animation.length || - 1; + var fps = animation.fps || 30; + + var hierarchyTracks = animation.hierarchy || []; + + for ( var h = 0; h < hierarchyTracks.length; h ++ ) { + + var animationKeys = hierarchyTracks[ h ].keys; + + // skip empty tracks + if ( ! animationKeys || animationKeys.length === 0 ) continue; + + // process morph targets + if ( animationKeys[ 0 ].morphTargets ) { + + // figure out all morph targets used in this track + var morphTargetNames = {}; + + for ( var k = 0; k < animationKeys.length; k ++ ) { + + if ( animationKeys[ k ].morphTargets ) { + + for ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { + + morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; + + } + + } + + } + + // create a track for each morph target with all zero + // morphTargetInfluences except for the keys in which + // the morphTarget is named. + for ( var morphTargetName in morphTargetNames ) { + + var times = []; + var values = []; + + for ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { + + var animationKey = animationKeys[ k ]; + + times.push( animationKey.time ); + values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); + + } + + tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); + + } + + duration = morphTargetNames.length * ( fps || 1.0 ); + + } else { + + // ...assume skeletal animation + + var boneName = '.bones[' + bones[ h ].name + ']'; + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.position', + animationKeys, 'pos', tracks ); + + addNonemptyTrack( + QuaternionKeyframeTrack, boneName + '.quaternion', + animationKeys, 'rot', tracks ); + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.scale', + animationKeys, 'scl', tracks ); + + } + + } + + if ( tracks.length === 0 ) { + + return null; + + } + + var clip = new AnimationClip( clipName, duration, tracks ); + + return clip; + + } + +} ); + +Object.assign( AnimationClip.prototype, { + + resetDuration: function () { + + var tracks = this.tracks, duration = 0; + + for ( var i = 0, n = tracks.length; i !== n; ++ i ) { + + var track = this.tracks[ i ]; + + duration = Math.max( duration, track.times[ track.times.length - 1 ] ); + + } + + this.duration = duration; + + }, + + trim: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].trim( 0, this.duration ); + + } + + return this; + + }, + + optimize: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].optimize(); + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function MaterialLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + this.textures = {}; + +} + +Object.assign( MaterialLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + }, onProgress, onError ); + + }, + + setTextures: function ( value ) { + + this.textures = value; + + }, + + parse: function ( json ) { + + var textures = this.textures; + + function getTexture( name ) { + + if ( textures[ name ] === undefined ) { + + console.warn( 'THREE.MaterialLoader: Undefined texture', name ); + + } + + return textures[ name ]; + + } + + var material = new Materials[ json.type ](); + + if ( json.uuid !== undefined ) material.uuid = json.uuid; + if ( json.name !== undefined ) material.name = json.name; + if ( json.color !== undefined ) material.color.setHex( json.color ); + if ( json.roughness !== undefined ) material.roughness = json.roughness; + if ( json.metalness !== undefined ) material.metalness = json.metalness; + if ( json.emissive !== undefined ) material.emissive.setHex( json.emissive ); + if ( json.specular !== undefined ) material.specular.setHex( json.specular ); + if ( json.shininess !== undefined ) material.shininess = json.shininess; + if ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat; + if ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness; + if ( json.uniforms !== undefined ) material.uniforms = json.uniforms; + if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; + if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; + if ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors; + if ( json.fog !== undefined ) material.fog = json.fog; + if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; + if ( json.blending !== undefined ) material.blending = json.blending; + if ( json.side !== undefined ) material.side = json.side; + if ( json.opacity !== undefined ) material.opacity = json.opacity; + if ( json.transparent !== undefined ) material.transparent = json.transparent; + if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; + if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; + if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; + if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; + if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; + if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; + if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; + if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; + + if ( json.skinning !== undefined ) material.skinning = json.skinning; + if ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets; + if ( json.dithering !== undefined ) material.dithering = json.dithering; + + if ( json.visible !== undefined ) material.visible = json.visible; + if ( json.userData !== undefined ) material.userData = json.userData; + + // Deprecated + + if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading + + // for PointsMaterial + + if ( json.size !== undefined ) material.size = json.size; + if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; + + // maps + + if ( json.map !== undefined ) material.map = getTexture( json.map ); + + if ( json.alphaMap !== undefined ) { + + material.alphaMap = getTexture( json.alphaMap ); + material.transparent = true; + + } + + if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); + if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; + + if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); + if ( json.normalScale !== undefined ) { + + var normalScale = json.normalScale; + + if ( Array.isArray( normalScale ) === false ) { + + // Blender exporter used to export a scalar. See #7459 + + normalScale = [ normalScale, normalScale ]; + + } + + material.normalScale = new Vector2().fromArray( normalScale ); + + } + + if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); + if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; + if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; + + if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); + if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); + + if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); + if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; + + if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); + + if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); + + if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; + + if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); + if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; + + if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); + if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; + + if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); + + return material; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferGeometryLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( BufferGeometryLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + var geometry = new BufferGeometry(); + + var index = json.data.index; + + if ( index !== undefined ) { + + var typedArray = new TYPED_ARRAYS[ index.type ]( index.array ); + geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); + + } + + var attributes = json.data.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + var typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array ); + + geometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) ); + + } + + var groups = json.data.groups || json.data.drawcalls || json.data.offsets; + + if ( groups !== undefined ) { + + for ( var i = 0, n = groups.length; i !== n; ++ i ) { + + var group = groups[ i ]; + + geometry.addGroup( group.start, group.count, group.materialIndex ); + + } + + } + + var boundingSphere = json.data.boundingSphere; + + if ( boundingSphere !== undefined ) { + + var center = new Vector3(); + + if ( boundingSphere.center !== undefined ) { + + center.fromArray( boundingSphere.center ); + + } + + geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); + + } + + return geometry; + + } + +} ); + +var TYPED_ARRAYS = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + // Workaround for IE11 pre KB2929437. See #11440 + Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array +}; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Loader() { + + this.onLoadStart = function () {}; + this.onLoadProgress = function () {}; + this.onLoadComplete = function () {}; + +} + +Loader.Handlers = { + + handlers: [], + + add: function ( regex, loader ) { + + this.handlers.push( regex, loader ); + + }, + + get: function ( file ) { + + var handlers = this.handlers; + + for ( var i = 0, l = handlers.length; i < l; i += 2 ) { + + var regex = handlers[ i ]; + var loader = handlers[ i + 1 ]; + + if ( regex.test( file ) ) { + + return loader; + + } + + } + + return null; + + } + +}; + +Object.assign( Loader.prototype, { + + crossOrigin: undefined, + + extractUrlBase: function ( url ) { + + var parts = url.split( '/' ); + + if ( parts.length === 1 ) return './'; + + parts.pop(); + + return parts.join( '/' ) + '/'; + + }, + + initMaterials: function ( materials, texturePath, crossOrigin ) { + + var array = []; + + for ( var i = 0; i < materials.length; ++ i ) { + + array[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin ); + + } + + return array; + + }, + + createMaterial: ( function () { + + var BlendingMode = { + NoBlending: NoBlending, + NormalBlending: NormalBlending, + AdditiveBlending: AdditiveBlending, + SubtractiveBlending: SubtractiveBlending, + MultiplyBlending: MultiplyBlending, + CustomBlending: CustomBlending + }; + + var color = new Color(); + var textureLoader = new TextureLoader(); + var materialLoader = new MaterialLoader(); + + return function createMaterial( m, texturePath, crossOrigin ) { + + // convert from old material format + + var textures = {}; + + function loadTexture( path, repeat, offset, wrap, anisotropy ) { + + var fullPath = texturePath + path; + var loader = Loader.Handlers.get( fullPath ); + + var texture; + + if ( loader !== null ) { + + texture = loader.load( fullPath ); + + } else { + + textureLoader.setCrossOrigin( crossOrigin ); + texture = textureLoader.load( fullPath ); + + } + + if ( repeat !== undefined ) { + + texture.repeat.fromArray( repeat ); + + if ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping; + if ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping; + + } + + if ( offset !== undefined ) { + + texture.offset.fromArray( offset ); + + } + + if ( wrap !== undefined ) { + + if ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping; + if ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping; + + if ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping; + if ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping; + + } + + if ( anisotropy !== undefined ) { + + texture.anisotropy = anisotropy; + + } + + var uuid = _Math.generateUUID(); + + textures[ uuid ] = texture; + + return uuid; + + } + + // + + var json = { + uuid: _Math.generateUUID(), + type: 'MeshLambertMaterial' + }; + + for ( var name in m ) { + + var value = m[ name ]; + + switch ( name ) { + + case 'DbgColor': + case 'DbgIndex': + case 'opticalDensity': + case 'illumination': + break; + case 'DbgName': + json.name = value; + break; + case 'blending': + json.blending = BlendingMode[ value ]; + break; + case 'colorAmbient': + case 'mapAmbient': + console.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' ); + break; + case 'colorDiffuse': + json.color = color.fromArray( value ).getHex(); + break; + case 'colorSpecular': + json.specular = color.fromArray( value ).getHex(); + break; + case 'colorEmissive': + json.emissive = color.fromArray( value ).getHex(); + break; + case 'specularCoef': + json.shininess = value; + break; + case 'shading': + if ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial'; + if ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial'; + if ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial'; + break; + case 'mapDiffuse': + json.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy ); + break; + case 'mapDiffuseRepeat': + case 'mapDiffuseOffset': + case 'mapDiffuseWrap': + case 'mapDiffuseAnisotropy': + break; + case 'mapEmissive': + json.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy ); + break; + case 'mapEmissiveRepeat': + case 'mapEmissiveOffset': + case 'mapEmissiveWrap': + case 'mapEmissiveAnisotropy': + break; + case 'mapLight': + json.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy ); + break; + case 'mapLightRepeat': + case 'mapLightOffset': + case 'mapLightWrap': + case 'mapLightAnisotropy': + break; + case 'mapAO': + json.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy ); + break; + case 'mapAORepeat': + case 'mapAOOffset': + case 'mapAOWrap': + case 'mapAOAnisotropy': + break; + case 'mapBump': + json.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy ); + break; + case 'mapBumpScale': + json.bumpScale = value; + break; + case 'mapBumpRepeat': + case 'mapBumpOffset': + case 'mapBumpWrap': + case 'mapBumpAnisotropy': + break; + case 'mapNormal': + json.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy ); + break; + case 'mapNormalFactor': + json.normalScale = [ value, value ]; + break; + case 'mapNormalRepeat': + case 'mapNormalOffset': + case 'mapNormalWrap': + case 'mapNormalAnisotropy': + break; + case 'mapSpecular': + json.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy ); + break; + case 'mapSpecularRepeat': + case 'mapSpecularOffset': + case 'mapSpecularWrap': + case 'mapSpecularAnisotropy': + break; + case 'mapMetalness': + json.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy ); + break; + case 'mapMetalnessRepeat': + case 'mapMetalnessOffset': + case 'mapMetalnessWrap': + case 'mapMetalnessAnisotropy': + break; + case 'mapRoughness': + json.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy ); + break; + case 'mapRoughnessRepeat': + case 'mapRoughnessOffset': + case 'mapRoughnessWrap': + case 'mapRoughnessAnisotropy': + break; + case 'mapAlpha': + json.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy ); + break; + case 'mapAlphaRepeat': + case 'mapAlphaOffset': + case 'mapAlphaWrap': + case 'mapAlphaAnisotropy': + break; + case 'flipSided': + json.side = BackSide; + break; + case 'doubleSided': + json.side = DoubleSide; + break; + case 'transparency': + console.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' ); + json.opacity = value; + break; + case 'depthTest': + case 'depthWrite': + case 'colorWrite': + case 'opacity': + case 'reflectivity': + case 'transparent': + case 'visible': + case 'wireframe': + json[ name ] = value; + break; + case 'vertexColors': + if ( value === true ) json.vertexColors = VertexColors; + if ( value === 'face' ) json.vertexColors = FaceColors; + break; + default: + console.error( 'THREE.Loader.createMaterial: Unsupported', name, value ); + break; + + } + + } + + if ( json.type === 'MeshBasicMaterial' ) delete json.emissive; + if ( json.type !== 'MeshPhongMaterial' ) delete json.specular; + + if ( json.opacity < 1 ) json.transparent = true; + + materialLoader.setTextures( textures ); + + return materialLoader.parse( json ); + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function JSONLoader( manager ) { + + if ( typeof manager === 'boolean' ) { + + console.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' ); + manager = undefined; + + } + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + this.withCredentials = false; + +} + +Object.assign( JSONLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var texturePath = this.texturePath && ( typeof this.texturePath === "string" ) ? this.texturePath : Loader.prototype.extractUrlBase( url ); + + var loader = new FileLoader( this.manager ); + loader.setWithCredentials( this.withCredentials ); + loader.load( url, function ( text ) { + + var json = JSON.parse( text ); + var metadata = json.metadata; + + if ( metadata !== undefined ) { + + var type = metadata.type; + + if ( type !== undefined ) { + + if ( type.toLowerCase() === 'object' ) { + + console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' ); + return; + + } + + if ( type.toLowerCase() === 'scene' ) { + + console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.SceneLoader instead.' ); + return; + + } + + } + + } + + var object = scope.parse( json, texturePath ); + onLoad( object.geometry, object.materials ); + + }, onProgress, onError ); + + }, + + setTexturePath: function ( value ) { + + this.texturePath = value; + + }, + + parse: ( function () { + + function parseModel( json, geometry ) { + + function isBitSet( value, position ) { + + return value & ( 1 << position ); + + } + + var i, j, fi, + + offset, zLength, + + colorIndex, normalIndex, uvIndex, materialIndex, + + type, + isQuad, + hasMaterial, + hasFaceVertexUv, + hasFaceNormal, hasFaceVertexNormal, + hasFaceColor, hasFaceVertexColor, + + vertex, face, faceA, faceB, hex, normal, + + uvLayer, uv, u, v, + + faces = json.faces, + vertices = json.vertices, + normals = json.normals, + colors = json.colors, + + scale = json.scale, + + nUvLayers = 0; + + + if ( json.uvs !== undefined ) { + + // disregard empty arrays + + for ( i = 0; i < json.uvs.length; i ++ ) { + + if ( json.uvs[ i ].length ) nUvLayers ++; + + } + + for ( i = 0; i < nUvLayers; i ++ ) { + + geometry.faceVertexUvs[ i ] = []; + + } + + } + + offset = 0; + zLength = vertices.length; + + while ( offset < zLength ) { + + vertex = new Vector3(); + + vertex.x = vertices[ offset ++ ] * scale; + vertex.y = vertices[ offset ++ ] * scale; + vertex.z = vertices[ offset ++ ] * scale; + + geometry.vertices.push( vertex ); + + } + + offset = 0; + zLength = faces.length; + + while ( offset < zLength ) { + + type = faces[ offset ++ ]; + + isQuad = isBitSet( type, 0 ); + hasMaterial = isBitSet( type, 1 ); + hasFaceVertexUv = isBitSet( type, 3 ); + hasFaceNormal = isBitSet( type, 4 ); + hasFaceVertexNormal = isBitSet( type, 5 ); + hasFaceColor = isBitSet( type, 6 ); + hasFaceVertexColor = isBitSet( type, 7 ); + + // console.log("type", type, "bits", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor); + + if ( isQuad ) { + + faceA = new Face3(); + faceA.a = faces[ offset ]; + faceA.b = faces[ offset + 1 ]; + faceA.c = faces[ offset + 3 ]; + + faceB = new Face3(); + faceB.a = faces[ offset + 1 ]; + faceB.b = faces[ offset + 2 ]; + faceB.c = faces[ offset + 3 ]; + + offset += 4; + + if ( hasMaterial ) { + + materialIndex = faces[ offset ++ ]; + faceA.materialIndex = materialIndex; + faceB.materialIndex = materialIndex; + + } + + // to get face <=> uv index correspondence + + fi = geometry.faces.length; + + if ( hasFaceVertexUv ) { + + for ( i = 0; i < nUvLayers; i ++ ) { + + uvLayer = json.uvs[ i ]; + + geometry.faceVertexUvs[ i ][ fi ] = []; + geometry.faceVertexUvs[ i ][ fi + 1 ] = []; + + for ( j = 0; j < 4; j ++ ) { + + uvIndex = faces[ offset ++ ]; + + u = uvLayer[ uvIndex * 2 ]; + v = uvLayer[ uvIndex * 2 + 1 ]; + + uv = new Vector2( u, v ); + + if ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv ); + if ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv ); + + } + + } + + } + + if ( hasFaceNormal ) { + + normalIndex = faces[ offset ++ ] * 3; + + faceA.normal.set( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + faceB.normal.copy( faceA.normal ); + + } + + if ( hasFaceVertexNormal ) { + + for ( i = 0; i < 4; i ++ ) { + + normalIndex = faces[ offset ++ ] * 3; + + normal = new Vector3( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + + if ( i !== 2 ) faceA.vertexNormals.push( normal ); + if ( i !== 0 ) faceB.vertexNormals.push( normal ); + + } + + } + + + if ( hasFaceColor ) { + + colorIndex = faces[ offset ++ ]; + hex = colors[ colorIndex ]; + + faceA.color.setHex( hex ); + faceB.color.setHex( hex ); + + } + + + if ( hasFaceVertexColor ) { + + for ( i = 0; i < 4; i ++ ) { + + colorIndex = faces[ offset ++ ]; + hex = colors[ colorIndex ]; + + if ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) ); + if ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) ); + + } + + } + + geometry.faces.push( faceA ); + geometry.faces.push( faceB ); + + } else { + + face = new Face3(); + face.a = faces[ offset ++ ]; + face.b = faces[ offset ++ ]; + face.c = faces[ offset ++ ]; + + if ( hasMaterial ) { + + materialIndex = faces[ offset ++ ]; + face.materialIndex = materialIndex; + + } + + // to get face <=> uv index correspondence + + fi = geometry.faces.length; + + if ( hasFaceVertexUv ) { + + for ( i = 0; i < nUvLayers; i ++ ) { + + uvLayer = json.uvs[ i ]; + + geometry.faceVertexUvs[ i ][ fi ] = []; + + for ( j = 0; j < 3; j ++ ) { + + uvIndex = faces[ offset ++ ]; + + u = uvLayer[ uvIndex * 2 ]; + v = uvLayer[ uvIndex * 2 + 1 ]; + + uv = new Vector2( u, v ); + + geometry.faceVertexUvs[ i ][ fi ].push( uv ); + + } + + } + + } + + if ( hasFaceNormal ) { + + normalIndex = faces[ offset ++ ] * 3; + + face.normal.set( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + } + + if ( hasFaceVertexNormal ) { + + for ( i = 0; i < 3; i ++ ) { + + normalIndex = faces[ offset ++ ] * 3; + + normal = new Vector3( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + face.vertexNormals.push( normal ); + + } + + } + + + if ( hasFaceColor ) { + + colorIndex = faces[ offset ++ ]; + face.color.setHex( colors[ colorIndex ] ); + + } + + + if ( hasFaceVertexColor ) { + + for ( i = 0; i < 3; i ++ ) { + + colorIndex = faces[ offset ++ ]; + face.vertexColors.push( new Color( colors[ colorIndex ] ) ); + + } + + } + + geometry.faces.push( face ); + + } + + } + + } + + function parseSkin( json, geometry ) { + + var influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2; + + if ( json.skinWeights ) { + + for ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) { + + var x = json.skinWeights[ i ]; + var y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0; + var z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0; + var w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0; + + geometry.skinWeights.push( new Vector4( x, y, z, w ) ); + + } + + } + + if ( json.skinIndices ) { + + for ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) { + + var a = json.skinIndices[ i ]; + var b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0; + var c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0; + var d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0; + + geometry.skinIndices.push( new Vector4( a, b, c, d ) ); + + } + + } + + geometry.bones = json.bones; + + if ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) { + + console.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' + + geometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' ); + + } + + } + + function parseMorphing( json, geometry ) { + + var scale = json.scale; + + if ( json.morphTargets !== undefined ) { + + for ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) { + + geometry.morphTargets[ i ] = {}; + geometry.morphTargets[ i ].name = json.morphTargets[ i ].name; + geometry.morphTargets[ i ].vertices = []; + + var dstVertices = geometry.morphTargets[ i ].vertices; + var srcVertices = json.morphTargets[ i ].vertices; + + for ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) { + + var vertex = new Vector3(); + vertex.x = srcVertices[ v ] * scale; + vertex.y = srcVertices[ v + 1 ] * scale; + vertex.z = srcVertices[ v + 2 ] * scale; + + dstVertices.push( vertex ); + + } + + } + + } + + if ( json.morphColors !== undefined && json.morphColors.length > 0 ) { + + console.warn( 'THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.' ); + + var faces = geometry.faces; + var morphColors = json.morphColors[ 0 ].colors; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + faces[ i ].color.fromArray( morphColors, i * 3 ); + + } + + } + + } + + function parseAnimations( json, geometry ) { + + var outputAnimations = []; + + // parse old style Bone/Hierarchy animations + var animations = []; + + if ( json.animation !== undefined ) { + + animations.push( json.animation ); + + } + + if ( json.animations !== undefined ) { + + if ( json.animations.length ) { + + animations = animations.concat( json.animations ); + + } else { + + animations.push( json.animations ); + + } + + } + + for ( var i = 0; i < animations.length; i ++ ) { + + var clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones ); + if ( clip ) outputAnimations.push( clip ); + + } + + // parse implicit morph animations + if ( geometry.morphTargets ) { + + // TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary. + var morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 ); + outputAnimations = outputAnimations.concat( morphAnimationClips ); + + } + + if ( outputAnimations.length > 0 ) geometry.animations = outputAnimations; + + } + + return function ( json, texturePath ) { + + if ( json.data !== undefined ) { + + // Geometry 4.0 spec + json = json.data; + + } + + if ( json.scale !== undefined ) { + + json.scale = 1.0 / json.scale; + + } else { + + json.scale = 1.0; + + } + + var geometry = new Geometry(); + + parseModel( json, geometry ); + parseSkin( json, geometry ); + parseMorphing( json, geometry ); + parseAnimations( json, geometry ); + + geometry.computeFaceNormals(); + geometry.computeBoundingSphere(); + + if ( json.materials === undefined || json.materials.length === 0 ) { + + return { geometry: geometry }; + + } else { + + var materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin ); + + return { geometry: geometry, materials: materials }; + + } + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ObjectLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + this.texturePath = ''; + +} + +Object.assign( ObjectLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + if ( this.texturePath === '' ) { + + this.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 ); + + } + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + var json = null; + + try { + + json = JSON.parse( text ); + + } catch ( error ) { + + if ( onError !== undefined ) onError( error ); + + console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); + + return; + + } + + var metadata = json.metadata; + + if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { + + console.error( 'THREE.ObjectLoader: Can\'t load ' + url + '. Use THREE.JSONLoader instead.' ); + return; + + } + + scope.parse( json, onLoad ); + + }, onProgress, onError ); + + }, + + setTexturePath: function ( value ) { + + this.texturePath = value; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + + }, + + parse: function ( json, onLoad ) { + + var geometries = this.parseGeometries( json.geometries ); + + var images = this.parseImages( json.images, function () { + + if ( onLoad !== undefined ) onLoad( object ); + + } ); + + var textures = this.parseTextures( json.textures, images ); + var materials = this.parseMaterials( json.materials, textures ); + + var object = this.parseObject( json.object, geometries, materials ); + + if ( json.animations ) { + + object.animations = this.parseAnimations( json.animations ); + + } + + if ( json.images === undefined || json.images.length === 0 ) { + + if ( onLoad !== undefined ) onLoad( object ); + + } + + return object; + + }, + + parseGeometries: function ( json ) { + + var geometries = {}; + + if ( json !== undefined ) { + + var geometryLoader = new JSONLoader(); + var bufferGeometryLoader = new BufferGeometryLoader(); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var geometry; + var data = json[ i ]; + + switch ( data.type ) { + + case 'PlaneGeometry': + case 'PlaneBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.widthSegments, + data.heightSegments + ); + + break; + + case 'BoxGeometry': + case 'BoxBufferGeometry': + case 'CubeGeometry': // backwards compatible + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.depth, + data.widthSegments, + data.heightSegments, + data.depthSegments + ); + + break; + + case 'CircleGeometry': + case 'CircleBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.segments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'CylinderGeometry': + case 'CylinderBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radiusTop, + data.radiusBottom, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'ConeGeometry': + case 'ConeBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'SphereGeometry': + case 'SphereBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.widthSegments, + data.heightSegments, + data.phiStart, + data.phiLength, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'DodecahedronGeometry': + case 'IcosahedronGeometry': + case 'OctahedronGeometry': + case 'TetrahedronGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.detail + ); + + break; + + case 'RingGeometry': + case 'RingBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.innerRadius, + data.outerRadius, + data.thetaSegments, + data.phiSegments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'TorusGeometry': + case 'TorusBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.radialSegments, + data.tubularSegments, + data.arc + ); + + break; + + case 'TorusKnotGeometry': + case 'TorusKnotBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.tubularSegments, + data.radialSegments, + data.p, + data.q + ); + + break; + + case 'LatheGeometry': + case 'LatheBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.points, + data.segments, + data.phiStart, + data.phiLength + ); + + break; + + case 'BufferGeometry': + + geometry = bufferGeometryLoader.parse( data ); + + break; + + case 'Geometry': + + geometry = geometryLoader.parse( data, this.texturePath ).geometry; + + break; + + default: + + console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); + + continue; + + } + + geometry.uuid = data.uuid; + + if ( data.name !== undefined ) geometry.name = data.name; + + geometries[ data.uuid ] = geometry; + + } + + } + + return geometries; + + }, + + parseMaterials: function ( json, textures ) { + + var materials = {}; + + if ( json !== undefined ) { + + var loader = new MaterialLoader(); + loader.setTextures( textures ); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.type === 'MultiMaterial' ) { + + // Deprecated + + var array = []; + + for ( var j = 0; j < data.materials.length; j ++ ) { + + array.push( loader.parse( data.materials[ j ] ) ); + + } + + materials[ data.uuid ] = array; + + } else { + + materials[ data.uuid ] = loader.parse( data ); + + } + + } + + } + + return materials; + + }, + + parseAnimations: function ( json ) { + + var animations = []; + + for ( var i = 0; i < json.length; i ++ ) { + + var clip = AnimationClip.parse( json[ i ] ); + + animations.push( clip ); + + } + + return animations; + + }, + + parseImages: function ( json, onLoad ) { + + var scope = this; + var images = {}; + + function loadImage( url ) { + + scope.manager.itemStart( url ); + + return loader.load( url, function () { + + scope.manager.itemEnd( url ); + + }, undefined, function () { + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + } ); + + } + + if ( json !== undefined && json.length > 0 ) { + + var manager = new LoadingManager( onLoad ); + + var loader = new ImageLoader( manager ); + loader.setCrossOrigin( this.crossOrigin ); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var image = json[ i ]; + var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url; + + images[ image.uuid ] = loadImage( path ); + + } + + } + + return images; + + }, + + parseTextures: function ( json, images ) { + + function parseConstant( value, type ) { + + if ( typeof( value ) === 'number' ) return value; + + console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); + + return type[ value ]; + + } + + var textures = {}; + + if ( json !== undefined ) { + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.image === undefined ) { + + console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); + + } + + if ( images[ data.image ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); + + } + + var texture = new Texture( images[ data.image ] ); + texture.needsUpdate = true; + + texture.uuid = data.uuid; + + if ( data.name !== undefined ) texture.name = data.name; + + if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); + + if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); + if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); + if ( data.wrap !== undefined ) { + + texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); + texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); + + } + + if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); + if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); + if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; + + if ( data.flipY !== undefined ) texture.flipY = data.flipY; + + textures[ data.uuid ] = texture; + + } + + } + + return textures; + + }, + + parseObject: function () { + + var matrix = new Matrix4(); + + return function parseObject( data, geometries, materials ) { + + var object; + + function getGeometry( name ) { + + if ( geometries[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); + + } + + return geometries[ name ]; + + } + + function getMaterial( name ) { + + if ( name === undefined ) return undefined; + + if ( Array.isArray( name ) ) { + + var array = []; + + for ( var i = 0, l = name.length; i < l; i ++ ) { + + var uuid = name[ i ]; + + if ( materials[ uuid ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); + + } + + array.push( materials[ uuid ] ); + + } + + return array; + + } + + if ( materials[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', name ); + + } + + return materials[ name ]; + + } + + switch ( data.type ) { + + case 'Scene': + + object = new Scene(); + + if ( data.background !== undefined ) { + + if ( Number.isInteger( data.background ) ) { + + object.background = new Color( data.background ); + + } + + } + + if ( data.fog !== undefined ) { + + if ( data.fog.type === 'Fog' ) { + + object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); + + } else if ( data.fog.type === 'FogExp2' ) { + + object.fog = new FogExp2( data.fog.color, data.fog.density ); + + } + + } + + break; + + case 'PerspectiveCamera': + + object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); + + if ( data.focus !== undefined ) object.focus = data.focus; + if ( data.zoom !== undefined ) object.zoom = data.zoom; + if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; + if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; + if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); + + break; + + case 'OrthographicCamera': + + object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); + + break; + + case 'AmbientLight': + + object = new AmbientLight( data.color, data.intensity ); + + break; + + case 'DirectionalLight': + + object = new DirectionalLight( data.color, data.intensity ); + + break; + + case 'PointLight': + + object = new PointLight( data.color, data.intensity, data.distance, data.decay ); + + break; + + case 'RectAreaLight': + + object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); + + break; + + case 'SpotLight': + + object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); + + break; + + case 'HemisphereLight': + + object = new HemisphereLight( data.color, data.groundColor, data.intensity ); + + break; + + case 'SkinnedMesh': + + console.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' ); + + case 'Mesh': + + var geometry = getGeometry( data.geometry ); + var material = getMaterial( data.material ); + + if ( geometry.bones && geometry.bones.length > 0 ) { + + object = new SkinnedMesh( geometry, material ); + + } else { + + object = new Mesh( geometry, material ); + + } + + break; + + case 'LOD': + + object = new LOD(); + + break; + + case 'Line': + + object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode ); + + break; + + case 'LineLoop': + + object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineSegments': + + object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'PointCloud': + case 'Points': + + object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'Sprite': + + object = new Sprite( getMaterial( data.material ) ); + + break; + + case 'Group': + + object = new Group(); + + break; + + default: + + object = new Object3D(); + + } + + object.uuid = data.uuid; + + if ( data.name !== undefined ) object.name = data.name; + if ( data.matrix !== undefined ) { + + matrix.fromArray( data.matrix ); + matrix.decompose( object.position, object.quaternion, object.scale ); + + } else { + + if ( data.position !== undefined ) object.position.fromArray( data.position ); + if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); + if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); + if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); + + } + + if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; + if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; + + if ( data.shadow ) { + + if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; + if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; + if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); + if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); + + } + + if ( data.visible !== undefined ) object.visible = data.visible; + if ( data.userData !== undefined ) object.userData = data.userData; + + if ( data.children !== undefined ) { + + var children = data.children; + + for ( var i = 0; i < children.length; i ++ ) { + + object.add( this.parseObject( children[ i ], geometries, materials ) ); + + } + + } + + if ( data.type === 'LOD' ) { + + var levels = data.levels; + + for ( var l = 0; l < levels.length; l ++ ) { + + var level = levels[ l ]; + var child = object.getObjectByProperty( 'uuid', level.object ); + + if ( child !== undefined ) { + + object.addLevel( child, level.distance ); + + } + + } + + } + + return object; + + }; + + }() + +} ); + +var TEXTURE_MAPPING = { + UVMapping: UVMapping, + CubeReflectionMapping: CubeReflectionMapping, + CubeRefractionMapping: CubeRefractionMapping, + EquirectangularReflectionMapping: EquirectangularReflectionMapping, + EquirectangularRefractionMapping: EquirectangularRefractionMapping, + SphericalReflectionMapping: SphericalReflectionMapping, + CubeUVReflectionMapping: CubeUVReflectionMapping, + CubeUVRefractionMapping: CubeUVRefractionMapping +}; + +var TEXTURE_WRAPPING = { + RepeatWrapping: RepeatWrapping, + ClampToEdgeWrapping: ClampToEdgeWrapping, + MirroredRepeatWrapping: MirroredRepeatWrapping +}; + +var TEXTURE_FILTER = { + NearestFilter: NearestFilter, + NearestMipMapNearestFilter: NearestMipMapNearestFilter, + NearestMipMapLinearFilter: NearestMipMapLinearFilter, + LinearFilter: LinearFilter, + LinearMipMapNearestFilter: LinearMipMapNearestFilter, + LinearMipMapLinearFilter: LinearMipMapLinearFilter +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + * Bezier Curves formulas obtained from + * http://en.wikipedia.org/wiki/Bézier_curve + */ + +function CatmullRom( t, p0, p1, p2, p3 ) { + + var v0 = ( p2 - p0 ) * 0.5; + var v1 = ( p3 - p1 ) * 0.5; + var t2 = t * t; + var t3 = t * t2; + return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; + +} + +// + +function QuadraticBezierP0( t, p ) { + + var k = 1 - t; + return k * k * p; + +} + +function QuadraticBezierP1( t, p ) { + + return 2 * ( 1 - t ) * t * p; + +} + +function QuadraticBezierP2( t, p ) { + + return t * t * p; + +} + +function QuadraticBezier( t, p0, p1, p2 ) { + + return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + + QuadraticBezierP2( t, p2 ); + +} + +// + +function CubicBezierP0( t, p ) { + + var k = 1 - t; + return k * k * k * p; + +} + +function CubicBezierP1( t, p ) { + + var k = 1 - t; + return 3 * k * k * t * p; + +} + +function CubicBezierP2( t, p ) { + + return 3 * ( 1 - t ) * t * t * p; + +} + +function CubicBezierP3( t, p ) { + + return t * t * t * p; + +} + +function CubicBezier( t, p0, p1, p2, p3 ) { + + return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + + CubicBezierP3( t, p3 ); + +} + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Extensible curve object + * + * Some common of curve methods: + * .getPoint(t), getTangent(t) + * .getPointAt(u), getTangentAt(u) + * .getPoints(), .getSpacedPoints() + * .getLength() + * .updateArcLengths() + * + * This following curves inherit from THREE.Curve: + * + * -- 2D curves -- + * THREE.ArcCurve + * THREE.CubicBezierCurve + * THREE.EllipseCurve + * THREE.LineCurve + * THREE.QuadraticBezierCurve + * THREE.SplineCurve + * + * -- 3D curves -- + * THREE.CatmullRomCurve3 + * THREE.CubicBezierCurve3 + * THREE.LineCurve3 + * THREE.QuadraticBezierCurve3 + * + * A series of curves can be represented as a THREE.CurvePath. + * + **/ + +/************************************************************** + * Abstract Curve base class + **************************************************************/ + +function Curve() { + + this.arcLengthDivisions = 200; + +} + +Object.assign( Curve.prototype, { + + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + + getPoint: function () { + + console.warn( 'THREE.Curve: .getPoint() not implemented.' ); + return null; + + }, + + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + + getPointAt: function ( u ) { + + var t = this.getUtoTmapping( u ); + return this.getPoint( t ); + + }, + + // Get sequence of points using getPoint( t ) + + getPoints: function ( divisions ) { + + if ( divisions === undefined ) divisions = 5; + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPoint( d / divisions ) ); + + } + + return points; + + }, + + // Get sequence of points using getPointAt( u ) + + getSpacedPoints: function ( divisions ) { + + if ( divisions === undefined ) divisions = 5; + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPointAt( d / divisions ) ); + + } + + return points; + + }, + + // Get total curve arc length + + getLength: function () { + + var lengths = this.getLengths(); + return lengths[ lengths.length - 1 ]; + + }, + + // Get list of cumulative segment lengths + + getLengths: function ( divisions ) { + + if ( divisions === undefined ) divisions = this.arcLengthDivisions; + + if ( this.cacheArcLengths && + ( this.cacheArcLengths.length === divisions + 1 ) && + ! this.needsUpdate ) { + + return this.cacheArcLengths; + + } + + this.needsUpdate = false; + + var cache = []; + var current, last = this.getPoint( 0 ); + var p, sum = 0; + + cache.push( 0 ); + + for ( p = 1; p <= divisions; p ++ ) { + + current = this.getPoint( p / divisions ); + sum += current.distanceTo( last ); + cache.push( sum ); + last = current; + + } + + this.cacheArcLengths = cache; + + return cache; // { sums: cache, sum: sum }; Sum is in the last element. + + }, + + updateArcLengths: function () { + + this.needsUpdate = true; + this.getLengths(); + + }, + + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + + getUtoTmapping: function ( u, distance ) { + + var arcLengths = this.getLengths(); + + var i = 0, il = arcLengths.length; + + var targetArcLength; // The targeted u distance value to get + + if ( distance ) { + + targetArcLength = distance; + + } else { + + targetArcLength = u * arcLengths[ il - 1 ]; + + } + + // binary search for the index with largest value smaller than target u distance + + var low = 0, high = il - 1, comparison; + + while ( low <= high ) { + + i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats + + comparison = arcLengths[ i ] - targetArcLength; + + if ( comparison < 0 ) { + + low = i + 1; + + } else if ( comparison > 0 ) { + + high = i - 1; + + } else { + + high = i; + break; + + // DONE + + } + + } + + i = high; + + if ( arcLengths[ i ] === targetArcLength ) { + + return i / ( il - 1 ); + + } + + // we could get finer grain at lengths, or use simple interpolation between two points + + var lengthBefore = arcLengths[ i ]; + var lengthAfter = arcLengths[ i + 1 ]; + + var segmentLength = lengthAfter - lengthBefore; + + // determine where we are between the 'before' and 'after' points + + var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; + + // add that fractional amount to t + + var t = ( i + segmentFraction ) / ( il - 1 ); + + return t; + + }, + + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + + getTangent: function ( t ) { + + var delta = 0.0001; + var t1 = t - delta; + var t2 = t + delta; + + // Capping in case of danger + + if ( t1 < 0 ) t1 = 0; + if ( t2 > 1 ) t2 = 1; + + var pt1 = this.getPoint( t1 ); + var pt2 = this.getPoint( t2 ); + + var vec = pt2.clone().sub( pt1 ); + return vec.normalize(); + + }, + + getTangentAt: function ( u ) { + + var t = this.getUtoTmapping( u ); + return this.getTangent( t ); + + }, + + computeFrenetFrames: function ( segments, closed ) { + + // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf + + var normal = new Vector3(); + + var tangents = []; + var normals = []; + var binormals = []; + + var vec = new Vector3(); + var mat = new Matrix4(); + + var i, u, theta; + + // compute the tangent vectors for each segment on the curve + + for ( i = 0; i <= segments; i ++ ) { + + u = i / segments; + + tangents[ i ] = this.getTangentAt( u ); + tangents[ i ].normalize(); + + } + + // select an initial normal vector perpendicular to the first tangent vector, + // and in the direction of the minimum tangent xyz component + + normals[ 0 ] = new Vector3(); + binormals[ 0 ] = new Vector3(); + var min = Number.MAX_VALUE; + var tx = Math.abs( tangents[ 0 ].x ); + var ty = Math.abs( tangents[ 0 ].y ); + var tz = Math.abs( tangents[ 0 ].z ); + + if ( tx <= min ) { + + min = tx; + normal.set( 1, 0, 0 ); + + } + + if ( ty <= min ) { + + min = ty; + normal.set( 0, 1, 0 ); + + } + + if ( tz <= min ) { + + normal.set( 0, 0, 1 ); + + } + + vec.crossVectors( tangents[ 0 ], normal ).normalize(); + + normals[ 0 ].crossVectors( tangents[ 0 ], vec ); + binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); + + + // compute the slowly-varying normal and binormal vectors for each segment on the curve + + for ( i = 1; i <= segments; i ++ ) { + + normals[ i ] = normals[ i - 1 ].clone(); + + binormals[ i ] = binormals[ i - 1 ].clone(); + + vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); + + if ( vec.length() > Number.EPSILON ) { + + vec.normalize(); + + theta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors + + normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); + + } + + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same + + if ( closed === true ) { + + theta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); + theta /= segments; + + if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { + + theta = - theta; + + } + + for ( i = 1; i <= segments; i ++ ) { + + // twist a little... + normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + } + + return { + tangents: tangents, + normals: normals, + binormals: binormals + }; + + } + +} ); + +function LineCurve( v1, v2 ) { + + Curve.call( this ); + + this.v1 = v1; + this.v2 = v2; + +} + +LineCurve.prototype = Object.create( Curve.prototype ); +LineCurve.prototype.constructor = LineCurve; + +LineCurve.prototype.isLineCurve = true; + +LineCurve.prototype.getPoint = function ( t ) { + + if ( t === 1 ) { + + return this.v2.clone(); + + } + + var point = this.v2.clone().sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + return point; + +}; + +// Line curve is linear, so we can overwrite default getPointAt + +LineCurve.prototype.getPointAt = function ( u ) { + + return this.getPoint( u ); + +}; + +LineCurve.prototype.getTangent = function ( t ) { + + var tangent = this.v2.clone().sub( this.v1 ); + + return tangent.normalize(); + +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + **/ + +/************************************************************** + * Curved Path - a curve path is simply a array of connected + * curves, but retains the api of a curve + **************************************************************/ + +function CurvePath() { + + Curve.call( this ); + + this.curves = []; + + this.autoClose = false; // Automatically closes the path + +} + +CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { + + constructor: CurvePath, + + add: function ( curve ) { + + this.curves.push( curve ); + + }, + + closePath: function () { + + // Add a line curve if start and end of lines are not connected + var startPoint = this.curves[ 0 ].getPoint( 0 ); + var endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); + + if ( ! startPoint.equals( endPoint ) ) { + + this.curves.push( new LineCurve( endPoint, startPoint ) ); + + } + + }, + + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + + getPoint: function ( t ) { + + var d = t * this.getLength(); + var curveLengths = this.getCurveLengths(); + var i = 0; + + // To think about boundaries points. + + while ( i < curveLengths.length ) { + + if ( curveLengths[ i ] >= d ) { + + var diff = curveLengths[ i ] - d; + var curve = this.curves[ i ]; + + var segmentLength = curve.getLength(); + var u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + + return curve.getPointAt( u ); + + } + + i ++; + + } + + return null; + + // loop where sum != 0, sum > d , sum+1 1 && !points[ points.length - 1 ].equals( points[ 0 ] ) ) { + + points.push( points[ 0 ] ); + + } + + return points; + + }, + + /************************************************************** + * Create Geometries Helpers + **************************************************************/ + + /// Generate geometry from path points (for Line or Points objects) + + createPointsGeometry: function ( divisions ) { + + var pts = this.getPoints( divisions ); + return this.createGeometry( pts ); + + }, + + // Generate geometry from equidistant sampling along the path + + createSpacedPointsGeometry: function ( divisions ) { + + var pts = this.getSpacedPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createGeometry: function ( points ) { + + var geometry = new Geometry(); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return geometry; + + } + +} ); + +function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + Curve.call( this ); + + this.aX = aX; + this.aY = aY; + + this.xRadius = xRadius; + this.yRadius = yRadius; + + this.aStartAngle = aStartAngle; + this.aEndAngle = aEndAngle; + + this.aClockwise = aClockwise; + + this.aRotation = aRotation || 0; + +} + +EllipseCurve.prototype = Object.create( Curve.prototype ); +EllipseCurve.prototype.constructor = EllipseCurve; + +EllipseCurve.prototype.isEllipseCurve = true; + +EllipseCurve.prototype.getPoint = function ( t ) { + + var twoPi = Math.PI * 2; + var deltaAngle = this.aEndAngle - this.aStartAngle; + var samePoints = Math.abs( deltaAngle ) < Number.EPSILON; + + // ensures that deltaAngle is 0 .. 2 PI + while ( deltaAngle < 0 ) deltaAngle += twoPi; + while ( deltaAngle > twoPi ) deltaAngle -= twoPi; + + if ( deltaAngle < Number.EPSILON ) { + + if ( samePoints ) { + + deltaAngle = 0; + + } else { + + deltaAngle = twoPi; + + } + + } + + if ( this.aClockwise === true && ! samePoints ) { + + if ( deltaAngle === twoPi ) { + + deltaAngle = - twoPi; + + } else { + + deltaAngle = deltaAngle - twoPi; + + } + + } + + var angle = this.aStartAngle + t * deltaAngle; + var x = this.aX + this.xRadius * Math.cos( angle ); + var y = this.aY + this.yRadius * Math.sin( angle ); + + if ( this.aRotation !== 0 ) { + + var cos = Math.cos( this.aRotation ); + var sin = Math.sin( this.aRotation ); + + var tx = x - this.aX; + var ty = y - this.aY; + + // Rotate the point about the center of the ellipse. + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + + } + + return new Vector2( x, y ); + +}; + +function SplineCurve( points /* array of Vector2 */ ) { + + Curve.call( this ); + + this.points = ( points === undefined ) ? [] : points; + +} + +SplineCurve.prototype = Object.create( Curve.prototype ); +SplineCurve.prototype.constructor = SplineCurve; + +SplineCurve.prototype.isSplineCurve = true; + +SplineCurve.prototype.getPoint = function ( t ) { + + var points = this.points; + var point = ( points.length - 1 ) * t; + + var intPoint = Math.floor( point ); + var weight = point - intPoint; + + var point0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; + var point1 = points[ intPoint ]; + var point2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; + var point3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; + + return new Vector2( + CatmullRom( weight, point0.x, point1.x, point2.x, point3.x ), + CatmullRom( weight, point0.y, point1.y, point2.y, point3.y ) + ); + +}; + +function CubicBezierCurve( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + +} + +CubicBezierCurve.prototype = Object.create( Curve.prototype ); +CubicBezierCurve.prototype.constructor = CubicBezierCurve; + +CubicBezierCurve.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + return new Vector2( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) + ); + +}; + +function QuadraticBezierCurve( v0, v1, v2 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + +} + +QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); +QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; + +QuadraticBezierCurve.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + return new Vector2( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ) + ); + +}; + +var PathPrototype = Object.assign( Object.create( CurvePath.prototype ), { + + fromPoints: function ( vectors ) { + + this.moveTo( vectors[ 0 ].x, vectors[ 0 ].y ); + + for ( var i = 1, l = vectors.length; i < l; i ++ ) { + + this.lineTo( vectors[ i ].x, vectors[ i ].y ); + + } + + }, + + moveTo: function ( x, y ) { + + this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? + + }, + + lineTo: function ( x, y ) { + + var curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); + this.curves.push( curve ); + + this.currentPoint.set( x, y ); + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + var curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2( aCPx, aCPy ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + var curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2( aCP1x, aCP1y ), + new Vector2( aCP2x, aCP2y ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + }, + + splineThru: function ( pts /*Array of Vector*/ ) { + + var npts = [ this.currentPoint.clone() ].concat( pts ); + + var curve = new SplineCurve( npts ); + this.curves.push( curve ); + + this.currentPoint.copy( pts[ pts.length - 1 ] ); + + }, + + arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absarc( aX + x0, aY + y0, aRadius, + aStartAngle, aEndAngle, aClockwise ); + + }, + + absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + }, + + ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + }, + + absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + if ( this.curves.length > 0 ) { + + // if a previous curve is present, attempt to join + var firstPoint = curve.getPoint( 0 ); + + if ( ! firstPoint.equals( this.currentPoint ) ) { + + this.lineTo( firstPoint.x, firstPoint.y ); + + } + + } + + this.curves.push( curve ); + + var lastPoint = curve.getPoint( 1 ); + this.currentPoint.copy( lastPoint ); + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Creates free form 2d path using series of points, lines or curves. + **/ + +function Path( points ) { + + CurvePath.call( this ); + this.currentPoint = new Vector2(); + + if ( points ) { + + this.fromPoints( points ); + + } + +} + +Path.prototype = PathPrototype; +PathPrototype.constructor = Path; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Defines a 2d shape plane using paths. + **/ + +// STEP 1 Create a path. +// STEP 2 Turn path into shape. +// STEP 3 ExtrudeGeometry takes in Shape/Shapes +// STEP 3a - Extract points from each shape, turn to vertices +// STEP 3b - Triangulate each shape, add faces. + +function Shape() { + + Path.apply( this, arguments ); + + this.holes = []; + +} + +Shape.prototype = Object.assign( Object.create( PathPrototype ), { + + constructor: Shape, + + getPointsHoles: function ( divisions ) { + + var holesPts = []; + + for ( var i = 0, l = this.holes.length; i < l; i ++ ) { + + holesPts[ i ] = this.holes[ i ].getPoints( divisions ); + + } + + return holesPts; + + }, + + // Get points of shape and holes (keypoints based on segments parameter) + + extractAllPoints: function ( divisions ) { + + return { + + shape: this.getPoints( divisions ), + holes: this.getPointsHoles( divisions ) + + }; + + }, + + extractPoints: function ( divisions ) { + + return this.extractAllPoints( divisions ); + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * minimal class for proxing functions to Path. Replaces old "extractSubpaths()" + **/ + +function ShapePath() { + + this.subPaths = []; + this.currentPath = null; + +} + +Object.assign( ShapePath.prototype, { + + moveTo: function ( x, y ) { + + this.currentPath = new Path(); + this.subPaths.push( this.currentPath ); + this.currentPath.moveTo( x, y ); + + }, + + lineTo: function ( x, y ) { + + this.currentPath.lineTo( x, y ); + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); + + }, + + splineThru: function ( pts ) { + + this.currentPath.splineThru( pts ); + + }, + + toShapes: function ( isCCW, noHoles ) { + + function toShapesNoHoles( inSubpaths ) { + + var shapes = []; + + for ( var i = 0, l = inSubpaths.length; i < l; i ++ ) { + + var tmpPath = inSubpaths[ i ]; + + var tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + + shapes.push( tmpShape ); + + } + + return shapes; + + } + + function isPointInsidePolygon( inPt, inPolygon ) { + + var polyLen = inPolygon.length; + + // inPt on polygon contour => immediate success or + // toggling of inside/outside at every single! intersection point of an edge + // with the horizontal line through inPt, left of inPt + // not counting lowerY endpoints of edges and whole edges on that line + var inside = false; + for ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { + + var edgeLowPt = inPolygon[ p ]; + var edgeHighPt = inPolygon[ q ]; + + var edgeDx = edgeHighPt.x - edgeLowPt.x; + var edgeDy = edgeHighPt.y - edgeLowPt.y; + + if ( Math.abs( edgeDy ) > Number.EPSILON ) { + + // not parallel + if ( edgeDy < 0 ) { + + edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; + edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; + + } + if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; + + if ( inPt.y === edgeLowPt.y ) { + + if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? + // continue; // no intersection or edgeLowPt => doesn't count !!! + + } else { + + var perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); + if ( perpEdge === 0 ) return true; // inPt is on contour ? + if ( perpEdge < 0 ) continue; + inside = ! inside; // true intersection left of inPt + + } + + } else { + + // parallel or collinear + if ( inPt.y !== edgeLowPt.y ) continue; // parallel + // edge lies on the same horizontal line as inPt + if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || + ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! + // continue; + + } + + } + + return inside; + + } + + var isClockWise = ShapeUtils.isClockWise; + + var subPaths = this.subPaths; + if ( subPaths.length === 0 ) return []; + + if ( noHoles === true ) return toShapesNoHoles( subPaths ); + + + var solid, tmpPath, tmpShape, shapes = []; + + if ( subPaths.length === 1 ) { + + tmpPath = subPaths[ 0 ]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push( tmpShape ); + return shapes; + + } + + var holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); + holesFirst = isCCW ? ! holesFirst : holesFirst; + + // console.log("Holes first", holesFirst); + + var betterShapeHoles = []; + var newShapes = []; + var newShapeHoles = []; + var mainIdx = 0; + var tmpPoints; + + newShapes[ mainIdx ] = undefined; + newShapeHoles[ mainIdx ] = []; + + for ( var i = 0, l = subPaths.length; i < l; i ++ ) { + + tmpPath = subPaths[ i ]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise( tmpPoints ); + solid = isCCW ? ! solid : solid; + + if ( solid ) { + + if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; + + newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; + newShapes[ mainIdx ].s.curves = tmpPath.curves; + + if ( holesFirst ) mainIdx ++; + newShapeHoles[ mainIdx ] = []; + + //console.log('cw', i); + + } else { + + newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); + + //console.log('ccw', i); + + } + + } + + // only Holes? -> probably all Shapes with wrong orientation + if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); + + + if ( newShapes.length > 1 ) { + + var ambiguous = false; + var toChange = []; + + for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + betterShapeHoles[ sIdx ] = []; + + } + + for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + var sho = newShapeHoles[ sIdx ]; + + for ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) { + + var ho = sho[ hIdx ]; + var hole_unassigned = true; + + for ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { + + if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { + + if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); + if ( hole_unassigned ) { + + hole_unassigned = false; + betterShapeHoles[ s2Idx ].push( ho ); + + } else { + + ambiguous = true; + + } + + } + + } + if ( hole_unassigned ) { + + betterShapeHoles[ sIdx ].push( ho ); + + } + + } + + } + // console.log("ambiguous: ", ambiguous); + if ( toChange.length > 0 ) { + + // console.log("to change: ", toChange); + if ( ! ambiguous ) newShapeHoles = betterShapeHoles; + + } + + } + + var tmpHoles; + + for ( var i = 0, il = newShapes.length; i < il; i ++ ) { + + tmpShape = newShapes[ i ].s; + shapes.push( tmpShape ); + tmpHoles = newShapeHoles[ i ]; + + for ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) { + + tmpShape.holes.push( tmpHoles[ j ].h ); + + } + + } + + //console.log("shape", shapes); + + return shapes; + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author mrdoob / http://mrdoob.com/ + */ + +function Font( data ) { + + this.data = data; + +} + +Object.assign( Font.prototype, { + + isFont: true, + + generateShapes: function ( text, size, divisions ) { + + function createPaths( text ) { + + var chars = String( text ).split( '' ); + var scale = size / data.resolution; + var line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; + + var offsetX = 0, offsetY = 0; + + var paths = []; + + for ( var i = 0; i < chars.length; i ++ ) { + + var char = chars[ i ]; + + if ( char === '\n' ) { + + offsetX = 0; + offsetY -= line_height; + + } else { + + var ret = createPath( char, scale, offsetX, offsetY ); + offsetX += ret.offsetX; + paths.push( ret.path ); + + } + + } + + return paths; + + } + + function createPath( c, scale, offsetX, offsetY ) { + + var glyph = data.glyphs[ c ] || data.glyphs[ '?' ]; + + if ( ! glyph ) return; + + var path = new ShapePath(); + + var pts = []; + var x, y, cpx, cpy, cpx0, cpy0, cpx1, cpy1, cpx2, cpy2, laste; + + if ( glyph.o ) { + + var outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); + + for ( var i = 0, l = outline.length; i < l; ) { + + var action = outline[ i ++ ]; + + switch ( action ) { + + case 'm': // moveTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.moveTo( x, y ); + + break; + + case 'l': // lineTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.lineTo( x, y ); + + break; + + case 'q': // quadraticCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + + path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); + + laste = pts[ pts.length - 1 ]; + + if ( laste ) { + + cpx0 = laste.x; + cpy0 = laste.y; + + for ( var i2 = 1; i2 <= divisions; i2 ++ ) { + + var t = i2 / divisions; + QuadraticBezier( t, cpx0, cpx1, cpx ); + QuadraticBezier( t, cpy0, cpy1, cpy ); + + } + + } + + break; + + case 'b': // bezierCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + cpx2 = outline[ i ++ ] * scale + offsetX; + cpy2 = outline[ i ++ ] * scale + offsetY; + + path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); + + laste = pts[ pts.length - 1 ]; + + if ( laste ) { + + cpx0 = laste.x; + cpy0 = laste.y; + + for ( var i2 = 1; i2 <= divisions; i2 ++ ) { + + var t = i2 / divisions; + CubicBezier( t, cpx0, cpx1, cpx2, cpx ); + CubicBezier( t, cpy0, cpy1, cpy2, cpy ); + + } + + } + + break; + + } + + } + + } + + return { offsetX: glyph.ha * scale, path: path }; + + } + + // + + if ( size === undefined ) size = 100; + if ( divisions === undefined ) divisions = 4; + + var data = this.data; + + var paths = createPaths( text ); + var shapes = []; + + for ( var p = 0, pl = paths.length; p < pl; p ++ ) { + + Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); + + } + + return shapes; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function FontLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( FontLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( this.manager ); + loader.load( url, function ( text ) { + + var json; + + try { + + json = JSON.parse( text ); + + } catch ( e ) { + + console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); + json = JSON.parse( text.substring( 65, text.length - 2 ) ); + + } + + var font = scope.parse( json ); + + if ( onLoad ) onLoad( font ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + return new Font( json ); + + } + +} ); + +var context; + +var AudioContext = { + + getContext: function () { + + if ( context === undefined ) { + + context = new ( window.AudioContext || window.webkitAudioContext )(); + + } + + return context; + + }, + + setContext: function ( value ) { + + context = value; + + } + +}; + +/** + * @author Reece Aaron Lecrivain / http://reecenotes.com/ + */ + +function AudioLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( AudioLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.load( url, function ( buffer ) { + + var context = AudioContext.getContext(); + + context.decodeAudioData( buffer, function ( audioBuffer ) { + + onLoad( audioBuffer ); + + } ); + + }, onProgress, onError ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function StereoCamera() { + + this.type = 'StereoCamera'; + + this.aspect = 1; + + this.eyeSep = 0.064; + + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable( 1 ); + this.cameraL.matrixAutoUpdate = false; + + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable( 2 ); + this.cameraR.matrixAutoUpdate = false; + +} + +Object.assign( StereoCamera.prototype, { + + update: ( function () { + + var instance, focus, fov, aspect, near, far, zoom, eyeSep; + + var eyeRight = new Matrix4(); + var eyeLeft = new Matrix4(); + + return function update( camera ) { + + var needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov || + aspect !== camera.aspect * this.aspect || near !== camera.near || + far !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep; + + if ( needsUpdate ) { + + instance = this; + focus = camera.focus; + fov = camera.fov; + aspect = camera.aspect * this.aspect; + near = camera.near; + far = camera.far; + zoom = camera.zoom; + + // Off-axis stereoscopic effect based on + // http://paulbourke.net/stereographics/stereorender/ + + var projectionMatrix = camera.projectionMatrix.clone(); + eyeSep = this.eyeSep / 2; + var eyeSepOnProjection = eyeSep * near / focus; + var ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom; + var xmin, xmax; + + // translate xOffset + + eyeLeft.elements[ 12 ] = - eyeSep; + eyeRight.elements[ 12 ] = eyeSep; + + // for left eye + + xmin = - ymax * aspect + eyeSepOnProjection; + xmax = ymax * aspect + eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraL.projectionMatrix.copy( projectionMatrix ); + + // for right eye + + xmin = - ymax * aspect - eyeSepOnProjection; + xmax = ymax * aspect - eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraR.projectionMatrix.copy( projectionMatrix ); + + } + + this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft ); + this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight ); + + }; + + } )() + +} ); + +/** + * Camera for rendering cube maps + * - renders scene into axis-aligned cube + * + * @author alteredq / http://alteredqualia.com/ + */ + +function CubeCamera( near, far, cubeResolution ) { + + Object3D.call( this ); + + this.type = 'CubeCamera'; + + var fov = 90, aspect = 1; + + var cameraPX = new PerspectiveCamera( fov, aspect, near, far ); + cameraPX.up.set( 0, - 1, 0 ); + cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); + this.add( cameraPX ); + + var cameraNX = new PerspectiveCamera( fov, aspect, near, far ); + cameraNX.up.set( 0, - 1, 0 ); + cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); + this.add( cameraNX ); + + var cameraPY = new PerspectiveCamera( fov, aspect, near, far ); + cameraPY.up.set( 0, 0, 1 ); + cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); + this.add( cameraPY ); + + var cameraNY = new PerspectiveCamera( fov, aspect, near, far ); + cameraNY.up.set( 0, 0, - 1 ); + cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); + this.add( cameraNY ); + + var cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraPZ.up.set( 0, - 1, 0 ); + cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); + this.add( cameraPZ ); + + var cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraNZ.up.set( 0, - 1, 0 ); + cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); + this.add( cameraNZ ); + + var options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter }; + + this.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options ); + this.renderTarget.texture.name = "CubeCamera"; + + this.update = function ( renderer, scene ) { + + if ( this.parent === null ) this.updateMatrixWorld(); + + var renderTarget = this.renderTarget; + var generateMipmaps = renderTarget.texture.generateMipmaps; + + renderTarget.texture.generateMipmaps = false; + + renderTarget.activeCubeFace = 0; + renderer.render( scene, cameraPX, renderTarget ); + + renderTarget.activeCubeFace = 1; + renderer.render( scene, cameraNX, renderTarget ); + + renderTarget.activeCubeFace = 2; + renderer.render( scene, cameraPY, renderTarget ); + + renderTarget.activeCubeFace = 3; + renderer.render( scene, cameraNY, renderTarget ); + + renderTarget.activeCubeFace = 4; + renderer.render( scene, cameraPZ, renderTarget ); + + renderTarget.texture.generateMipmaps = generateMipmaps; + + renderTarget.activeCubeFace = 5; + renderer.render( scene, cameraNZ, renderTarget ); + + renderer.setRenderTarget( null ); + + }; + + this.clear = function ( renderer, color, depth, stencil ) { + + var renderTarget = this.renderTarget; + + for ( var i = 0; i < 6; i ++ ) { + + renderTarget.activeCubeFace = i; + renderer.setRenderTarget( renderTarget ); + + renderer.clear( color, depth, stencil ); + + } + + renderer.setRenderTarget( null ); + + }; + +} + +CubeCamera.prototype = Object.create( Object3D.prototype ); +CubeCamera.prototype.constructor = CubeCamera; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AudioListener() { + + Object3D.call( this ); + + this.type = 'AudioListener'; + + this.context = AudioContext.getContext(); + + this.gain = this.context.createGain(); + this.gain.connect( this.context.destination ); + + this.filter = null; + +} + +AudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: AudioListener, + + getInput: function () { + + return this.gain; + + }, + + removeFilter: function ( ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + this.gain.connect( this.context.destination ); + this.filter = null; + + } + + }, + + getFilter: function () { + + return this.filter; + + }, + + setFilter: function ( value ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + + } else { + + this.gain.disconnect( this.context.destination ); + + } + + this.filter = value; + this.gain.connect( this.filter ); + this.filter.connect( this.context.destination ); + + }, + + getMasterVolume: function () { + + return this.gain.gain.value; + + }, + + setMasterVolume: function ( value ) { + + this.gain.gain.value = value; + + }, + + updateMatrixWorld: ( function () { + + var position = new Vector3(); + var quaternion = new Quaternion(); + var scale = new Vector3(); + + var orientation = new Vector3(); + + return function updateMatrixWorld( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + var listener = this.context.listener; + var up = this.up; + + this.matrixWorld.decompose( position, quaternion, scale ); + + orientation.set( 0, 0, - 1 ).applyQuaternion( quaternion ); + + if ( listener.positionX ) { + + listener.positionX.setValueAtTime( position.x, this.context.currentTime ); + listener.positionY.setValueAtTime( position.y, this.context.currentTime ); + listener.positionZ.setValueAtTime( position.z, this.context.currentTime ); + listener.forwardX.setValueAtTime( orientation.x, this.context.currentTime ); + listener.forwardY.setValueAtTime( orientation.y, this.context.currentTime ); + listener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime ); + listener.upX.setValueAtTime( up.x, this.context.currentTime ); + listener.upY.setValueAtTime( up.y, this.context.currentTime ); + listener.upZ.setValueAtTime( up.z, this.context.currentTime ); + + } else { + + listener.setPosition( position.x, position.y, position.z ); + listener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z ); + + } + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Reece Aaron Lecrivain / http://reecenotes.com/ + */ + +function Audio( listener ) { + + Object3D.call( this ); + + this.type = 'Audio'; + + this.context = listener.context; + + this.gain = this.context.createGain(); + this.gain.connect( listener.getInput() ); + + this.autoplay = false; + + this.buffer = null; + this.loop = false; + this.startTime = 0; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.sourceType = 'empty'; + + this.filters = []; + +} + +Audio.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Audio, + + getOutput: function () { + + return this.gain; + + }, + + setNodeSource: function ( audioNode ) { + + this.hasPlaybackControl = false; + this.sourceType = 'audioNode'; + this.source = audioNode; + this.connect(); + + return this; + + }, + + setBuffer: function ( audioBuffer ) { + + this.buffer = audioBuffer; + this.sourceType = 'buffer'; + + if ( this.autoplay ) this.play(); + + return this; + + }, + + play: function () { + + if ( this.isPlaying === true ) { + + console.warn( 'THREE.Audio: Audio is already playing.' ); + return; + + } + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + var source = this.context.createBufferSource(); + + source.buffer = this.buffer; + source.loop = this.loop; + source.onended = this.onEnded.bind( this ); + source.playbackRate.setValueAtTime( this.playbackRate, this.startTime ); + source.start( 0, this.startTime ); + + this.isPlaying = true; + + this.source = source; + + return this.connect(); + + }, + + pause: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.source.stop(); + this.startTime = this.context.currentTime; + this.isPlaying = false; + + return this; + + }, + + stop: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.source.stop(); + this.startTime = 0; + this.isPlaying = false; + + return this; + + }, + + connect: function () { + + if ( this.filters.length > 0 ) { + + this.source.connect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].connect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); + + } else { + + this.source.connect( this.getOutput() ); + + } + + return this; + + }, + + disconnect: function () { + + if ( this.filters.length > 0 ) { + + this.source.disconnect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].disconnect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); + + } else { + + this.source.disconnect( this.getOutput() ); + + } + + return this; + + }, + + getFilters: function () { + + return this.filters; + + }, + + setFilters: function ( value ) { + + if ( ! value ) value = []; + + if ( this.isPlaying === true ) { + + this.disconnect(); + this.filters = value; + this.connect(); + + } else { + + this.filters = value; + + } + + return this; + + }, + + getFilter: function () { + + return this.getFilters()[ 0 ]; + + }, + + setFilter: function ( filter ) { + + return this.setFilters( filter ? [ filter ] : [] ); + + }, + + setPlaybackRate: function ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.playbackRate = value; + + if ( this.isPlaying === true ) { + + this.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime ); + + } + + return this; + + }, + + getPlaybackRate: function () { + + return this.playbackRate; + + }, + + onEnded: function () { + + this.isPlaying = false; + + }, + + getLoop: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return false; + + } + + return this.loop; + + }, + + setLoop: function ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.loop = value; + + if ( this.isPlaying === true ) { + + this.source.loop = this.loop; + + } + + return this; + + }, + + getVolume: function () { + + return this.gain.gain.value; + + }, + + setVolume: function ( value ) { + + this.gain.gain.value = value; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function PositionalAudio( listener ) { + + Audio.call( this, listener ); + + this.panner = this.context.createPanner(); + this.panner.connect( this.gain ); + +} + +PositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), { + + constructor: PositionalAudio, + + getOutput: function () { + + return this.panner; + + }, + + getRefDistance: function () { + + return this.panner.refDistance; + + }, + + setRefDistance: function ( value ) { + + this.panner.refDistance = value; + + }, + + getRolloffFactor: function () { + + return this.panner.rolloffFactor; + + }, + + setRolloffFactor: function ( value ) { + + this.panner.rolloffFactor = value; + + }, + + getDistanceModel: function () { + + return this.panner.distanceModel; + + }, + + setDistanceModel: function ( value ) { + + this.panner.distanceModel = value; + + }, + + getMaxDistance: function () { + + return this.panner.maxDistance; + + }, + + setMaxDistance: function ( value ) { + + this.panner.maxDistance = value; + + }, + + updateMatrixWorld: ( function () { + + var position = new Vector3(); + + return function updateMatrixWorld( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + position.setFromMatrixPosition( this.matrixWorld ); + + this.panner.setPosition( position.x, position.y, position.z ); + + }; + + } )() + + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AudioAnalyser( audio, fftSize ) { + + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize !== undefined ? fftSize : 2048; + + this.data = new Uint8Array( this.analyser.frequencyBinCount ); + + audio.getOutput().connect( this.analyser ); + +} + +Object.assign( AudioAnalyser.prototype, { + + getFrequencyData: function () { + + this.analyser.getByteFrequencyData( this.data ); + + return this.data; + + }, + + getAverageFrequency: function () { + + var value = 0, data = this.getFrequencyData(); + + for ( var i = 0; i < data.length; i ++ ) { + + value += data[ i ]; + + } + + return value / data.length; + + } + +} ); + +/** + * + * Buffered scene graph property that allows weighted accumulation. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function PropertyMixer( binding, typeName, valueSize ) { + + this.binding = binding; + this.valueSize = valueSize; + + var bufferType = Float64Array, + mixFunction; + + switch ( typeName ) { + + case 'quaternion': + mixFunction = this._slerp; + break; + + case 'string': + case 'bool': + bufferType = Array; + mixFunction = this._select; + break; + + default: + mixFunction = this._lerp; + + } + + this.buffer = new bufferType( valueSize * 4 ); + // layout: [ incoming | accu0 | accu1 | orig ] + // + // interpolators can use .buffer as their .result + // the data then goes to 'incoming' + // + // 'accu0' and 'accu1' are used frame-interleaved for + // the cumulative result and are compared to detect + // changes + // + // 'orig' stores the original state of the property + + this._mixBufferRegion = mixFunction; + + this.cumulativeWeight = 0; + + this.useCount = 0; + this.referenceCount = 0; + +} + +Object.assign( PropertyMixer.prototype, { + + // accumulate data in the 'incoming' region into 'accu' + accumulate: function ( accuIndex, weight ) { + + // note: happily accumulating nothing when weight = 0, the caller knows + // the weight and shouldn't have made the call in the first place + + var buffer = this.buffer, + stride = this.valueSize, + offset = accuIndex * stride + stride, + + currentWeight = this.cumulativeWeight; + + if ( currentWeight === 0 ) { + + // accuN := incoming * weight + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ offset + i ] = buffer[ i ]; + + } + + currentWeight = weight; + + } else { + + // accuN := accuN + incoming * weight + + currentWeight += weight; + var mix = weight / currentWeight; + this._mixBufferRegion( buffer, offset, 0, mix, stride ); + + } + + this.cumulativeWeight = currentWeight; + + }, + + // apply the state of 'accu' to the binding when accus differ + apply: function ( accuIndex ) { + + var stride = this.valueSize, + buffer = this.buffer, + offset = accuIndex * stride + stride, + + weight = this.cumulativeWeight, + + binding = this.binding; + + this.cumulativeWeight = 0; + + if ( weight < 1 ) { + + // accuN := accuN + original * ( 1 - cumulativeWeight ) + + var originalValueOffset = stride * 3; + + this._mixBufferRegion( + buffer, offset, originalValueOffset, 1 - weight, stride ); + + } + + for ( var i = stride, e = stride + stride; i !== e; ++ i ) { + + if ( buffer[ i ] !== buffer[ i + stride ] ) { + + // value has changed -> update scene graph + + binding.setValue( buffer, offset ); + break; + + } + + } + + }, + + // remember the state of the bound property and copy it to both accus + saveOriginalState: function () { + + var binding = this.binding; + + var buffer = this.buffer, + stride = this.valueSize, + + originalValueOffset = stride * 3; + + binding.getValue( buffer, originalValueOffset ); + + // accu[0..1] := orig -- initially detect changes against the original + for ( var i = stride, e = originalValueOffset; i !== e; ++ i ) { + + buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; + + } + + this.cumulativeWeight = 0; + + }, + + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState: function () { + + var originalValueOffset = this.valueSize * 3; + this.binding.setValue( this.buffer, originalValueOffset ); + + }, + + + // mix functions + + _select: function ( buffer, dstOffset, srcOffset, t, stride ) { + + if ( t >= 0.5 ) { + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; + + } + + } + + }, + + _slerp: function ( buffer, dstOffset, srcOffset, t ) { + + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); + + }, + + _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { + + var s = 1 - t; + + for ( var i = 0; i !== stride; ++ i ) { + + var j = dstOffset + i; + + buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; + + } + + } + +} ); + +/** + * + * A reference to a real property in the scene graph. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function Composite( targetGroup, path, optionalParsedPath ) { + + var parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); + + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_( path, parsedPath ); + +} + +Object.assign( Composite.prototype, { + + getValue: function ( array, offset ) { + + this.bind(); // bind all binding + + var firstValidIndex = this._targetGroup.nCachedObjects_, + binding = this._bindings[ firstValidIndex ]; + + // and only call .getValue on the first + if ( binding !== undefined ) binding.getValue( array, offset ); + + }, + + setValue: function ( array, offset ) { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].setValue( array, offset ); + + } + + }, + + bind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].bind(); + + } + + }, + + unbind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].unbind(); + + } + + } + +} ); + + +function PropertyBinding( rootNode, path, parsedPath ) { + + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); + + this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; + + this.rootNode = rootNode; + +} + +Object.assign( PropertyBinding, { + + Composite: Composite, + + create: function ( root, path, parsedPath ) { + + if ( ! ( root && root.isAnimationObjectGroup ) ) { + + return new PropertyBinding( root, path, parsedPath ); + + } else { + + return new PropertyBinding.Composite( root, path, parsedPath ); + + } + + }, + + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + sanitizeNodeName: function ( name ) { + + return name.replace( /\s/g, '_' ).replace( /[^\w-]/g, '' ); + + }, + + parseTrackName: function () { + + // Parent directories, delimited by '/' or ':'. Currently unused, but must + // be matched to parse the rest of the track name. + var directoryRe = /((?:[\w-]+[\/:])*)/; + + // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. + var nodeRe = /([\w-\.]+)?/; + + // Object on target node, and accessor. Name may contain only word + // characters. Accessor may contain any character except closing bracket. + var objectRe = /(?:\.([\w-]+)(?:\[(.+)\])?)?/; + + // Property and accessor. May contain only word characters. Accessor may + // contain any non-bracket characters. + var propertyRe = /\.([\w-]+)(?:\[(.+)\])?/; + + var trackRe = new RegExp('' + + '^' + + directoryRe.source + + nodeRe.source + + objectRe.source + + propertyRe.source + + '$' + ); + + var supportedObjectNames = [ 'material', 'materials', 'bones' ]; + + return function ( trackName ) { + + var matches = trackRe.exec( trackName ); + + if ( ! matches ) { + + throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); + + } + + var results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[ 2 ], + objectName: matches[ 3 ], + objectIndex: matches[ 4 ], + propertyName: matches[ 5 ], // required + propertyIndex: matches[ 6 ] + }; + + var lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); + + if ( lastDot !== undefined && lastDot !== -1 ) { + + var objectName = results.nodeName.substring( lastDot + 1 ); + + // Object names must be checked against a whitelist. Otherwise, there + // is no way to parse 'foo.bar.baz': 'baz' must be a property, but + // 'bar' could be the objectName, or part of a nodeName (which can + // include '.' characters). + if ( supportedObjectNames.indexOf( objectName ) !== -1 ) { + + results.nodeName = results.nodeName.substring( 0, lastDot ); + results.objectName = objectName; + + } + + } + + if ( results.propertyName === null || results.propertyName.length === 0 ) { + + throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); + + } + + return results; + + }; + + }(), + + findNode: function ( root, nodeName ) { + + if ( ! nodeName || nodeName === "" || nodeName === "root" || nodeName === "." || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { + + return root; + + } + + // search into skeleton bones. + if ( root.skeleton ) { + + var searchSkeleton = function ( skeleton ) { + + for ( var i = 0; i < skeleton.bones.length; i ++ ) { + + var bone = skeleton.bones[ i ]; + + if ( bone.name === nodeName ) { + + return bone; + + } + + } + + return null; + + }; + + var bone = searchSkeleton( root.skeleton ); + + if ( bone ) { + + return bone; + + } + + } + + // search into node subtree. + if ( root.children ) { + + var searchNodeSubtree = function ( children ) { + + for ( var i = 0; i < children.length; i ++ ) { + + var childNode = children[ i ]; + + if ( childNode.name === nodeName || childNode.uuid === nodeName ) { + + return childNode; + + } + + var result = searchNodeSubtree( childNode.children ); + + if ( result ) return result; + + } + + return null; + + }; + + var subTreeNode = searchNodeSubtree( root.children ); + + if ( subTreeNode ) { + + return subTreeNode; + + } + + } + + return null; + + } + +} ); + +Object.assign( PropertyBinding.prototype, { // prototype, continued + + // these are used to "bind" a nonexistent property + _getValue_unavailable: function () {}, + _setValue_unavailable: function () {}, + + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + + GetterByBindingType: [ + + function getValue_direct( buffer, offset ) { + + buffer[ offset ] = this.node[ this.propertyName ]; + + }, + + function getValue_array( buffer, offset ) { + + var source = this.resolvedProperty; + + for ( var i = 0, n = source.length; i !== n; ++ i ) { + + buffer[ offset ++ ] = source[ i ]; + + } + + }, + + function getValue_arrayElement( buffer, offset ) { + + buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; + + }, + + function getValue_toArray( buffer, offset ) { + + this.resolvedProperty.toArray( buffer, offset ); + + } + + ], + + SetterByBindingTypeAndVersioning: [ + + [ + // Direct + + function setValue_direct( buffer, offset ) { + + this.node[ this.propertyName ] = buffer[ offset ]; + + }, + + function setValue_direct_setNeedsUpdate( buffer, offset ) { + + this.node[ this.propertyName ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.node[ this.propertyName ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // EntireArray + + function setValue_array( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + }, + + function setValue_array_setNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.needsUpdate = true; + + }, + + function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // ArrayElement + + function setValue_arrayElement( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + + }, + + function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // HasToFromArray + + function setValue_fromArray( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + + }, + + function setValue_fromArray_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.needsUpdate = true; + + }, + + function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ] + + ], + + getValue: function getValue_unbound( targetArray, offset ) { + + this.bind(); + this.getValue( targetArray, offset ); + + // Note: This class uses a State pattern on a per-method basis: + // 'bind' sets 'this.getValue' / 'setValue' and shadows the + // prototype version of these methods with one that represents + // the bound state. When the property is not found, the methods + // become no-ops. + + }, + + setValue: function getValue_unbound( sourceArray, offset ) { + + this.bind(); + this.setValue( sourceArray, offset ); + + }, + + // create getter / setter pair for a property in the scene graph + bind: function () { + + var targetObject = this.node, + parsedPath = this.parsedPath, + + objectName = parsedPath.objectName, + propertyName = parsedPath.propertyName, + propertyIndex = parsedPath.propertyIndex; + + if ( ! targetObject ) { + + targetObject = PropertyBinding.findNode( + this.rootNode, parsedPath.nodeName ) || this.rootNode; + + this.node = targetObject; + + } + + // set fail state so we can just 'return' on error + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + + // ensure there is a value node + if ( ! targetObject ) { + + console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); + return; + + } + + if ( objectName ) { + + var objectIndex = parsedPath.objectIndex; + + // special cases were we need to reach deeper into the hierarchy to get the face materials.... + switch ( objectName ) { + + case 'materials': + + if ( ! targetObject.material ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); + return; + + } + + if ( ! targetObject.material.materials ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); + return; + + } + + targetObject = targetObject.material.materials; + + break; + + case 'bones': + + if ( ! targetObject.skeleton ) { + + console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); + return; + + } + + // potential future optimization: skip this if propertyIndex is already an integer + // and convert the integer string to a true integer. + + targetObject = targetObject.skeleton.bones; + + // support resolving morphTarget names into indices. + for ( var i = 0; i < targetObject.length; i ++ ) { + + if ( targetObject[ i ].name === objectIndex ) { + + objectIndex = i; + break; + + } + + } + + break; + + default: + + if ( targetObject[ objectName ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); + return; + + } + + targetObject = targetObject[ objectName ]; + + } + + + if ( objectIndex !== undefined ) { + + if ( targetObject[ objectIndex ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); + return; + + } + + targetObject = targetObject[ objectIndex ]; + + } + + } + + // resolve property + var nodeProperty = targetObject[ propertyName ]; + + if ( nodeProperty === undefined ) { + + var nodeName = parsedPath.nodeName; + + console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + + '.' + propertyName + ' but it wasn\'t found.', targetObject ); + return; + + } + + // determine versioning scheme + var versioning = this.Versioning.None; + + if ( targetObject.needsUpdate !== undefined ) { // material + + versioning = this.Versioning.NeedsUpdate; + this.targetObject = targetObject; + + } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform + + versioning = this.Versioning.MatrixWorldNeedsUpdate; + this.targetObject = targetObject; + + } + + // determine how the property gets bound + var bindingType = this.BindingType.Direct; + + if ( propertyIndex !== undefined ) { + + // access a sub element of the property array (only primitives are supported right now) + + if ( propertyName === "morphTargetInfluences" ) { + + // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. + + // support resolving morphTarget names into indices. + if ( ! targetObject.geometry ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); + return; + + } + + if ( targetObject.geometry.isBufferGeometry ) { + + if ( ! targetObject.geometry.morphAttributes ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); + return; + + } + + for ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) { + + if ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) { + + propertyIndex = i; + break; + + } + + } + + + } else { + + if ( ! targetObject.geometry.morphTargets ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this ); + return; + + } + + for ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) { + + if ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) { + + propertyIndex = i; + break; + + } + + } + + } + + } + + bindingType = this.BindingType.ArrayElement; + + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + + } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { + + // must use copy for Object3D.Euler/Quaternion + + bindingType = this.BindingType.HasFromToArray; + + this.resolvedProperty = nodeProperty; + + } else if ( Array.isArray( nodeProperty ) ) { + + bindingType = this.BindingType.EntireArray; + + this.resolvedProperty = nodeProperty; + + } else { + + this.propertyName = propertyName; + + } + + // select getter / setter + this.getValue = this.GetterByBindingType[ bindingType ]; + this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; + + }, + + unbind: function () { + + this.node = null; + + // back to the prototype version of getValue / setValue + // note: avoiding to mutate the shape of 'this' via 'delete' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + +} ); + +//!\ DECLARE ALIAS AFTER assign prototype ! +Object.assign( PropertyBinding.prototype, { + + // initial state of these methods that calls 'bind' + _getValue_unbound: PropertyBinding.prototype.getValue, + _setValue_unbound: PropertyBinding.prototype.setValue, + +} ); + +/** + * + * A group of objects that receives a shared animation state. + * + * Usage: + * + * - Add objects you would otherwise pass as 'root' to the + * constructor or the .clipAction method of AnimationMixer. + * + * - Instead pass this object as 'root'. + * + * - You can also add and remove objects later when the mixer + * is running. + * + * Note: + * + * Objects of this class appear as one object to the mixer, + * so cache control of the individual objects must be done + * on the group. + * + * Limitation: + * + * - The animated properties must be compatible among the + * all objects in the group. + * + * - A single property can either be controlled through a + * target group or directly, but not both. + * + * @author tschw + */ + +function AnimationObjectGroup( var_args ) { + + this.uuid = _Math.generateUUID(); + + // cached objects followed by the active ones + this._objects = Array.prototype.slice.call( arguments ); + + this.nCachedObjects_ = 0; // threshold + // note: read by PropertyBinding.Composite + + var indices = {}; + this._indicesByUUID = indices; // for bookkeeping + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + indices[ arguments[ i ].uuid ] = i; + + } + + this._paths = []; // inside: string + this._parsedPaths = []; // inside: { we don't care, here } + this._bindings = []; // inside: Array< PropertyBinding > + this._bindingsIndicesByPath = {}; // inside: indices in these arrays + + var scope = this; + + this.stats = { + + objects: { + get total() { return scope._objects.length; }, + get inUse() { return this.total - scope.nCachedObjects_; } + }, + + get bindingsPerObject() { return scope._bindings.length; } + + }; + +} + +Object.assign( AnimationObjectGroup.prototype, { + + isAnimationObjectGroup: true, + + add: function( var_args ) { + + var objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ], + knownObject = undefined; + + if ( index === undefined ) { + + // unknown object -> add it to the ACTIVE region + + index = nObjects ++; + indicesByUUID[ uuid ] = index; + objects.push( object ); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + bindings[ j ].push( + new PropertyBinding( + object, paths[ j ], parsedPaths[ j ] ) ); + + } + + } else if ( index < nCachedObjects ) { + + knownObject = objects[ index ]; + + // move existing object to the ACTIVE region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ]; + + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + indicesByUUID[ uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = lastCached; + + if ( binding === undefined ) { + + // since we do not bother to create new bindings + // for objects that are cached, the binding may + // or may not exist + + binding = new PropertyBinding( + object, paths[ j ], parsedPaths[ j ] ); + + } + + bindingsForPath[ firstActiveIndex ] = binding; + + } + + } else if ( objects[ index ] !== knownObject ) { + + console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); + + } // else the object is already where we want it to be + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + remove: function( var_args ) { + + var objects = this._objects, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined && index >= nCachedObjects ) { + + // move existing object into the CACHED region + + var lastCachedIndex = nCachedObjects ++, + firstActiveObject = objects[ lastCachedIndex ]; + + indicesByUUID[ firstActiveObject.uuid ] = index; + objects[ index ] = firstActiveObject; + + indicesByUUID[ uuid ] = lastCachedIndex; + objects[ lastCachedIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + firstActive = bindingsForPath[ lastCachedIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = firstActive; + bindingsForPath[ lastCachedIndex ] = binding; + + } + + } + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // remove & forget + uncache: function( var_args ) { + + var objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined ) { + + delete indicesByUUID[ uuid ]; + + if ( index < nCachedObjects ) { + + // object is cached, shrink the CACHED region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ], + lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + // last cached object takes this object's place + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + // last object goes to the activated slot and pop + indicesByUUID[ lastObject.uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + last = bindingsForPath[ lastIndex ]; + + bindingsForPath[ index ] = lastCached; + bindingsForPath[ firstActiveIndex ] = last; + bindingsForPath.pop(); + + } + + } else { + + // object is active, just swap with the last and pop + + var lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + indicesByUUID[ lastObject.uuid ] = index; + objects[ index ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ]; + + bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; + bindingsForPath.pop(); + + } + + } // cached or active + + } // if object is known + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // Internal interface used by befriended PropertyBinding.Composite: + + subscribe_: function ( path, parsedPath ) { + + // returns an array of bindings for the given path that is changed + // according to the contained objects in the group + + var indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ], + bindings = this._bindings; + + if ( index !== undefined ) return bindings[ index ]; + + var paths = this._paths, + parsedPaths = this._parsedPaths, + objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + bindingsForPath = new Array( nObjects ); + + index = bindings.length; + + indicesByPath[ path ] = index; + + paths.push( path ); + parsedPaths.push( parsedPath ); + bindings.push( bindingsForPath ); + + for ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) { + + var object = objects[ i ]; + bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); + + } + + return bindingsForPath; + + }, + + unsubscribe_: function ( path ) { + + // tells the group to forget about a property path and no longer + // update the array previously obtained with 'subscribe_' + + var indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ]; + + if ( index !== undefined ) { + + var paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + lastBindingsIndex = bindings.length - 1, + lastBindings = bindings[ lastBindingsIndex ], + lastBindingsPath = path[ lastBindingsIndex ]; + + indicesByPath[ lastBindingsPath ] = index; + + bindings[ index ] = lastBindings; + bindings.pop(); + + parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; + parsedPaths.pop(); + + paths[ index ] = paths[ lastBindingsIndex ]; + paths.pop(); + + } + + } + +} ); + +/** + * + * Action provided by AnimationMixer for scheduling clip playback on specific + * objects. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + * + */ + +function AnimationAction( mixer, clip, localRoot ) { + + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot || null; + + var tracks = clip.tracks, + nTracks = tracks.length, + interpolants = new Array( nTracks ); + + var interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + + for ( var i = 0; i !== nTracks; ++ i ) { + + var interpolant = tracks[ i ].createInterpolant( null ); + interpolants[ i ] = interpolant; + interpolant.settings = interpolantSettings; + + } + + this._interpolantSettings = interpolantSettings; + + this._interpolants = interpolants; // bound by the mixer + + // inside: PropertyMixer (managed by the mixer) + this._propertyBindings = new Array( nTracks ); + + this._cacheIndex = null; // for the memory manager + this._byClipCacheIndex = null; // for the memory manager + + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + + this.loop = LoopRepeat; + this._loopCount = -1; + + // global mixer time when the action is to be started + // it's set back to 'null' upon start of the action + this._startTime = null; + + // scaled local time of the action + // gets clamped or wrapped to 0..clip.duration according to loop + this.time = 0; + + this.timeScale = 1; + this._effectiveTimeScale = 1; + + this.weight = 1; + this._effectiveWeight = 1; + + this.repetitions = Infinity; // no. of repetitions when looping + + this.paused = false; // true -> zero effective time scale + this.enabled = true; // false -> zero effective weight + + this.clampWhenFinished = false; // keep feeding the last frame? + + this.zeroSlopeAtStart = true; // for smooth interpolation w/o separate + this.zeroSlopeAtEnd = true; // clips for start, loop and end + +} + +Object.assign( AnimationAction.prototype, { + + // State & Scheduling + + play: function() { + + this._mixer._activateAction( this ); + + return this; + + }, + + stop: function() { + + this._mixer._deactivateAction( this ); + + return this.reset(); + + }, + + reset: function() { + + this.paused = false; + this.enabled = true; + + this.time = 0; // restart clip + this._loopCount = -1; // forget previous loops + this._startTime = null; // forget scheduling + + return this.stopFading().stopWarping(); + + }, + + isRunning: function() { + + return this.enabled && ! this.paused && this.timeScale !== 0 && + this._startTime === null && this._mixer._isActiveAction( this ); + + }, + + // return true when play has been called + isScheduled: function() { + + return this._mixer._isActiveAction( this ); + + }, + + startAt: function( time ) { + + this._startTime = time; + + return this; + + }, + + setLoop: function( mode, repetitions ) { + + this.loop = mode; + this.repetitions = repetitions; + + return this; + + }, + + // Weight + + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight: function( weight ) { + + this.weight = weight; + + // note: same logic as when updated at runtime + this._effectiveWeight = this.enabled ? weight : 0; + + return this.stopFading(); + + }, + + // return the weight considering fading and .enabled + getEffectiveWeight: function() { + + return this._effectiveWeight; + + }, + + fadeIn: function( duration ) { + + return this._scheduleFading( duration, 0, 1 ); + + }, + + fadeOut: function( duration ) { + + return this._scheduleFading( duration, 1, 0 ); + + }, + + crossFadeFrom: function( fadeOutAction, duration, warp ) { + + fadeOutAction.fadeOut( duration ); + this.fadeIn( duration ); + + if( warp ) { + + var fadeInDuration = this._clip.duration, + fadeOutDuration = fadeOutAction._clip.duration, + + startEndRatio = fadeOutDuration / fadeInDuration, + endStartRatio = fadeInDuration / fadeOutDuration; + + fadeOutAction.warp( 1.0, startEndRatio, duration ); + this.warp( endStartRatio, 1.0, duration ); + + } + + return this; + + }, + + crossFadeTo: function( fadeInAction, duration, warp ) { + + return fadeInAction.crossFadeFrom( this, duration, warp ); + + }, + + stopFading: function() { + + var weightInterpolant = this._weightInterpolant; + + if ( weightInterpolant !== null ) { + + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant( weightInterpolant ); + + } + + return this; + + }, + + // Time Scale Control + + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale: function( timeScale ) { + + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 :timeScale; + + return this.stopWarping(); + + }, + + // return the time scale considering warping and .paused + getEffectiveTimeScale: function() { + + return this._effectiveTimeScale; + + }, + + setDuration: function( duration ) { + + this.timeScale = this._clip.duration / duration; + + return this.stopWarping(); + + }, + + syncWith: function( action ) { + + this.time = action.time; + this.timeScale = action.timeScale; + + return this.stopWarping(); + + }, + + halt: function( duration ) { + + return this.warp( this._effectiveTimeScale, 0, duration ); + + }, + + warp: function( startTimeScale, endTimeScale, duration ) { + + var mixer = this._mixer, now = mixer.time, + interpolant = this._timeScaleInterpolant, + + timeScale = this.timeScale; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + times[ 1 ] = now + duration; + + values[ 0 ] = startTimeScale / timeScale; + values[ 1 ] = endTimeScale / timeScale; + + return this; + + }, + + stopWarping: function() { + + var timeScaleInterpolant = this._timeScaleInterpolant; + + if ( timeScaleInterpolant !== null ) { + + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); + + } + + return this; + + }, + + // Object Accessors + + getMixer: function() { + + return this._mixer; + + }, + + getClip: function() { + + return this._clip; + + }, + + getRoot: function() { + + return this._localRoot || this._mixer._root; + + }, + + // Interna + + _update: function( time, deltaTime, timeDirection, accuIndex ) { + + // called by the mixer + + if ( ! this.enabled ) { + + // call ._updateWeight() to update ._effectiveWeight + + this._updateWeight( time ); + return; + + } + + var startTime = this._startTime; + + if ( startTime !== null ) { + + // check for scheduled start of action + + var timeRunning = ( time - startTime ) * timeDirection; + if ( timeRunning < 0 || timeDirection === 0 ) { + + return; // yet to come / don't decide when delta = 0 + + } + + // start + + this._startTime = null; // unschedule + deltaTime = timeDirection * timeRunning; + + } + + // apply time scale and advance time + + deltaTime *= this._updateTimeScale( time ); + var clipTime = this._updateTime( deltaTime ); + + // note: _updateTime may disable the action resulting in + // an effective weight of 0 + + var weight = this._updateWeight( time ); + + if ( weight > 0 ) { + + var interpolants = this._interpolants; + var propertyMixers = this._propertyBindings; + + for ( var j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulate( accuIndex, weight ); + + } + + } + + }, + + _updateWeight: function( time ) { + + var weight = 0; + + if ( this.enabled ) { + + weight = this.weight; + var interpolant = this._weightInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + weight *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopFading(); + + if ( interpolantValue === 0 ) { + + // faded out, disable + this.enabled = false; + + } + + } + + } + + } + + this._effectiveWeight = weight; + return weight; + + }, + + _updateTimeScale: function( time ) { + + var timeScale = 0; + + if ( ! this.paused ) { + + timeScale = this.timeScale; + + var interpolant = this._timeScaleInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + timeScale *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopWarping(); + + if ( timeScale === 0 ) { + + // motion has halted, pause + this.paused = true; + + } else { + + // warp done - apply final time scale + this.timeScale = timeScale; + + } + + } + + } + + } + + this._effectiveTimeScale = timeScale; + return timeScale; + + }, + + _updateTime: function( deltaTime ) { + + var time = this.time + deltaTime; + + if ( deltaTime === 0 ) return time; + + var duration = this._clip.duration, + + loop = this.loop, + loopCount = this._loopCount; + + if ( loop === LoopOnce ) { + + if ( loopCount === -1 ) { + // just started + + this._loopCount = 0; + this._setEndings( true, true, false ); + + } + + handle_stop: { + + if ( time >= duration ) { + + time = duration; + + } else if ( time < 0 ) { + + time = 0; + + } else break handle_stop; + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime < 0 ? -1 : 1 + } ); + + } + + } else { // repetitive Repeat or PingPong + + var pingPong = ( loop === LoopPingPong ); + + if ( loopCount === -1 ) { + // just started + + if ( deltaTime >= 0 ) { + + loopCount = 0; + + this._setEndings( + true, this.repetitions === 0, pingPong ); + + } else { + + // when looping in reverse direction, the initial + // transition through zero counts as a repetition, + // so leave loopCount at -1 + + this._setEndings( + this.repetitions === 0, true, pingPong ); + + } + + } + + if ( time >= duration || time < 0 ) { + // wrap around + + var loopDelta = Math.floor( time / duration ); // signed + time -= duration * loopDelta; + + loopCount += Math.abs( loopDelta ); + + var pending = this.repetitions - loopCount; + + if ( pending < 0 ) { + // have to stop (switch state, clamp time, fire event) + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + time = deltaTime > 0 ? duration : 0; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime > 0 ? 1 : -1 + } ); + + } else { + // keep running + + if ( pending === 0 ) { + // entering the last round + + var atStart = deltaTime < 0; + this._setEndings( atStart, ! atStart, pingPong ); + + } else { + + this._setEndings( false, false, pingPong ); + + } + + this._loopCount = loopCount; + + this._mixer.dispatchEvent( { + type: 'loop', action: this, loopDelta: loopDelta + } ); + + } + + } + + if ( pingPong && ( loopCount & 1 ) === 1 ) { + // invert time for the "pong round" + + this.time = time; + return duration - time; + + } + + } + + this.time = time; + return time; + + }, + + _setEndings: function( atStart, atEnd, pingPong ) { + + var settings = this._interpolantSettings; + + if ( pingPong ) { + + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + + } else { + + // assuming for LoopOnce atStart == atEnd == true + + if ( atStart ) { + + settings.endingStart = this.zeroSlopeAtStart ? + ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingStart = WrapAroundEnding; + + } + + if ( atEnd ) { + + settings.endingEnd = this.zeroSlopeAtEnd ? + ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingEnd = WrapAroundEnding; + + } + + } + + }, + + _scheduleFading: function( duration, weightNow, weightThen ) { + + var mixer = this._mixer, now = mixer.time, + interpolant = this._weightInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; values[ 0 ] = weightNow; + times[ 1 ] = now + duration; values[ 1 ] = weightThen; + + return this; + + } + +} ); + +/** + * + * Player for AnimationClips. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function AnimationMixer( root ) { + + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + + this.time = 0; + + this.timeScale = 1.0; + +} + +Object.assign( AnimationMixer.prototype, EventDispatcher.prototype, { + + _bindAction: function ( action, prototypeAction ) { + + var root = action._localRoot || this._root, + tracks = action._clip.tracks, + nTracks = tracks.length, + bindings = action._propertyBindings, + interpolants = action._interpolants, + rootUuid = root.uuid, + bindingsByRoot = this._bindingsByRootAndName, + bindingsByName = bindingsByRoot[ rootUuid ]; + + if ( bindingsByName === undefined ) { + + bindingsByName = {}; + bindingsByRoot[ rootUuid ] = bindingsByName; + + } + + for ( var i = 0; i !== nTracks; ++ i ) { + + var track = tracks[ i ], + trackName = track.name, + binding = bindingsByName[ trackName ]; + + if ( binding !== undefined ) { + + bindings[ i ] = binding; + + } else { + + binding = bindings[ i ]; + + if ( binding !== undefined ) { + + // existing binding, make sure the cache knows + + if ( binding._cacheIndex === null ) { + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + } + + continue; + + } + + var path = prototypeAction && prototypeAction. + _propertyBindings[ i ].binding.parsedPath; + + binding = new PropertyMixer( + PropertyBinding.create( root, trackName, path ), + track.ValueTypeName, track.getValueSize() ); + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + bindings[ i ] = binding; + + } + + interpolants[ i ].resultBuffer = binding.buffer; + + } + + }, + + _activateAction: function ( action ) { + + if ( ! this._isActiveAction( action ) ) { + + if ( action._cacheIndex === null ) { + + // this action has been forgotten by the cache, but the user + // appears to be still using it -> rebind + + var rootUuid = ( action._localRoot || this._root ).uuid, + clipUuid = action._clip.uuid, + actionsForClip = this._actionsByClip[ clipUuid ]; + + this._bindAction( action, + actionsForClip && actionsForClip.knownActions[ 0 ] ); + + this._addInactiveAction( action, clipUuid, rootUuid ); + + } + + var bindings = action._propertyBindings; + + // increment reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( binding.useCount ++ === 0 ) { + + this._lendBinding( binding ); + binding.saveOriginalState(); + + } + + } + + this._lendAction( action ); + + } + + }, + + _deactivateAction: function ( action ) { + + if ( this._isActiveAction( action ) ) { + + var bindings = action._propertyBindings; + + // decrement reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.useCount === 0 ) { + + binding.restoreOriginalState(); + this._takeBackBinding( binding ); + + } + + } + + this._takeBackAction( action ); + + } + + }, + + // Memory manager + + _initMemoryManager: function () { + + this._actions = []; // 'nActiveActions' followed by inactive ones + this._nActiveActions = 0; + + this._actionsByClip = {}; + // inside: + // { + // knownActions: Array< AnimationAction > - used as prototypes + // actionByRoot: AnimationAction - lookup + // } + + + this._bindings = []; // 'nActiveBindings' followed by inactive ones + this._nActiveBindings = 0; + + this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > + + + this._controlInterpolants = []; // same game as above + this._nActiveControlInterpolants = 0; + + var scope = this; + + this.stats = { + + actions: { + get total() { return scope._actions.length; }, + get inUse() { return scope._nActiveActions; } + }, + bindings: { + get total() { return scope._bindings.length; }, + get inUse() { return scope._nActiveBindings; } + }, + controlInterpolants: { + get total() { return scope._controlInterpolants.length; }, + get inUse() { return scope._nActiveControlInterpolants; } + } + + }; + + }, + + // Memory management for AnimationAction objects + + _isActiveAction: function ( action ) { + + var index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + + }, + + _addInactiveAction: function ( action, clipUuid, rootUuid ) { + + var actions = this._actions, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip === undefined ) { + + actionsForClip = { + + knownActions: [ action ], + actionByRoot: {} + + }; + + action._byClipCacheIndex = 0; + + actionsByClip[ clipUuid ] = actionsForClip; + + } else { + + var knownActions = actionsForClip.knownActions; + + action._byClipCacheIndex = knownActions.length; + knownActions.push( action ); + + } + + action._cacheIndex = actions.length; + actions.push( action ); + + actionsForClip.actionByRoot[ rootUuid ] = action; + + }, + + _removeInactiveAction: function ( action ) { + + var actions = this._actions, + lastInactiveAction = actions[ actions.length - 1 ], + cacheIndex = action._cacheIndex; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + action._cacheIndex = null; + + + var clipUuid = action._clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ], + knownActionsForClip = actionsForClip.knownActions, + + lastKnownAction = + knownActionsForClip[ knownActionsForClip.length - 1 ], + + byClipCacheIndex = action._byClipCacheIndex; + + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; + knownActionsForClip.pop(); + + action._byClipCacheIndex = null; + + + var actionByRoot = actionsForClip.actionByRoot, + rootUuid = ( action._localRoot || this._root ).uuid; + + delete actionByRoot[ rootUuid ]; + + if ( knownActionsForClip.length === 0 ) { + + delete actionsByClip[ clipUuid ]; + + } + + this._removeInactiveBindingsForAction( action ); + + }, + + _removeInactiveBindingsForAction: function ( action ) { + + var bindings = action._propertyBindings; + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.referenceCount === 0 ) { + + this._removeInactiveBinding( binding ); + + } + + } + + }, + + _lendAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions >| inactive actions ] + // s a + // <-swap-> + // a s + + var actions = this._actions, + prevIndex = action._cacheIndex, + + lastActiveIndex = this._nActiveActions ++, + + firstInactiveAction = actions[ lastActiveIndex ]; + + action._cacheIndex = lastActiveIndex; + actions[ lastActiveIndex ] = action; + + firstInactiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = firstInactiveAction; + + }, + + _takeBackAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions |< inactive actions ] + // a s + // <-swap-> + // s a + + var actions = this._actions, + prevIndex = action._cacheIndex, + + firstInactiveIndex = -- this._nActiveActions, + + lastActiveAction = actions[ firstInactiveIndex ]; + + action._cacheIndex = firstInactiveIndex; + actions[ firstInactiveIndex ] = action; + + lastActiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = lastActiveAction; + + }, + + // Memory management for PropertyMixer objects + + _addInactiveBinding: function ( binding, rootUuid, trackName ) { + + var bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + bindings = this._bindings; + + if ( bindingByName === undefined ) { + + bindingByName = {}; + bindingsByRoot[ rootUuid ] = bindingByName; + + } + + bindingByName[ trackName ] = binding; + + binding._cacheIndex = bindings.length; + bindings.push( binding ); + + }, + + _removeInactiveBinding: function ( binding ) { + + var bindings = this._bindings, + propBinding = binding.binding, + rootUuid = propBinding.rootNode.uuid, + trackName = propBinding.path, + bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + lastInactiveBinding = bindings[ bindings.length - 1 ], + cacheIndex = binding._cacheIndex; + + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[ cacheIndex ] = lastInactiveBinding; + bindings.pop(); + + delete bindingByName[ trackName ]; + + remove_empty_map: { + + for ( var _ in bindingByName ) break remove_empty_map; + + delete bindingsByRoot[ rootUuid ]; + + } + + }, + + _lendBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + lastActiveIndex = this._nActiveBindings ++, + + firstInactiveBinding = bindings[ lastActiveIndex ]; + + binding._cacheIndex = lastActiveIndex; + bindings[ lastActiveIndex ] = binding; + + firstInactiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = firstInactiveBinding; + + }, + + _takeBackBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + firstInactiveIndex = -- this._nActiveBindings, + + lastActiveBinding = bindings[ firstInactiveIndex ]; + + binding._cacheIndex = firstInactiveIndex; + bindings[ firstInactiveIndex ] = binding; + + lastActiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = lastActiveBinding; + + }, + + + // Memory management of Interpolants for weight and time scale + + _lendControlInterpolant: function () { + + var interpolants = this._controlInterpolants, + lastActiveIndex = this._nActiveControlInterpolants ++, + interpolant = interpolants[ lastActiveIndex ]; + + if ( interpolant === undefined ) { + + interpolant = new LinearInterpolant( + new Float32Array( 2 ), new Float32Array( 2 ), + 1, this._controlInterpolantsResultBuffer ); + + interpolant.__cacheIndex = lastActiveIndex; + interpolants[ lastActiveIndex ] = interpolant; + + } + + return interpolant; + + }, + + _takeBackControlInterpolant: function ( interpolant ) { + + var interpolants = this._controlInterpolants, + prevIndex = interpolant.__cacheIndex, + + firstInactiveIndex = -- this._nActiveControlInterpolants, + + lastActiveInterpolant = interpolants[ firstInactiveIndex ]; + + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[ firstInactiveIndex ] = interpolant; + + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[ prevIndex ] = lastActiveInterpolant; + + }, + + _controlInterpolantsResultBuffer: new Float32Array( 1 ), + + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction: function ( clip, optionalRoot ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject !== null ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ], + prototypeAction = null; + + if ( actionsForClip !== undefined ) { + + var existingAction = + actionsForClip.actionByRoot[ rootUuid ]; + + if ( existingAction !== undefined ) { + + return existingAction; + + } + + // we know the clip, so we don't have to parse all + // the bindings again but can just copy + prototypeAction = actionsForClip.knownActions[ 0 ]; + + // also, take the clip from the prototype action + if ( clipObject === null ) + clipObject = prototypeAction._clip; + + } + + // clip must be known when specified via string + if ( clipObject === null ) return null; + + // allocate all resources required to run it + var newAction = new AnimationAction( this, clipObject, optionalRoot ); + + this._bindAction( newAction, prototypeAction ); + + // and make the action known to the memory manager + this._addInactiveAction( newAction, clipUuid, rootUuid ); + + return newAction; + + }, + + // get an existing action + existingAction: function ( clip, optionalRoot ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + return actionsForClip.actionByRoot[ rootUuid ] || null; + + } + + return null; + + }, + + // deactivates all previously scheduled actions + stopAllAction: function () { + + var actions = this._actions, + nActions = this._nActiveActions, + bindings = this._bindings, + nBindings = this._nActiveBindings; + + this._nActiveActions = 0; + this._nActiveBindings = 0; + + for ( var i = 0; i !== nActions; ++ i ) { + + actions[ i ].reset(); + + } + + for ( var i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].useCount = 0; + + } + + return this; + + }, + + // advance the time and update apply the animation + update: function ( deltaTime ) { + + deltaTime *= this.timeScale; + + var actions = this._actions, + nActions = this._nActiveActions, + + time = this.time += deltaTime, + timeDirection = Math.sign( deltaTime ), + + accuIndex = this._accuIndex ^= 1; + + // run active actions + + for ( var i = 0; i !== nActions; ++ i ) { + + var action = actions[ i ]; + + action._update( time, deltaTime, timeDirection, accuIndex ); + + } + + // update scene graph + + var bindings = this._bindings, + nBindings = this._nActiveBindings; + + for ( var i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].apply( accuIndex ); + + } + + return this; + + }, + + // return this mixer's root target object + getRoot: function () { + + return this._root; + + }, + + // free all resources specific to a particular clip + uncacheClip: function ( clip ) { + + var actions = this._actions, + clipUuid = clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + // note: just calling _removeInactiveAction would mess up the + // iteration state and also require updating the state we can + // just throw away + + var actionsToRemove = actionsForClip.knownActions; + + for ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) { + + var action = actionsToRemove[ i ]; + + this._deactivateAction( action ); + + var cacheIndex = action._cacheIndex, + lastInactiveAction = actions[ actions.length - 1 ]; + + action._cacheIndex = null; + action._byClipCacheIndex = null; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + this._removeInactiveBindingsForAction( action ); + + } + + delete actionsByClip[ clipUuid ]; + + } + + }, + + // free all resources specific to a particular root target object + uncacheRoot: function ( root ) { + + var rootUuid = root.uuid, + actionsByClip = this._actionsByClip; + + for ( var clipUuid in actionsByClip ) { + + var actionByRoot = actionsByClip[ clipUuid ].actionByRoot, + action = actionByRoot[ rootUuid ]; + + if ( action !== undefined ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + var bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName !== undefined ) { + + for ( var trackName in bindingByName ) { + + var binding = bindingByName[ trackName ]; + binding.restoreOriginalState(); + this._removeInactiveBinding( binding ); + + } + + } + + }, + + // remove a targeted clip from the cache + uncacheAction: function ( clip, optionalRoot ) { + + var action = this.existingAction( clip, optionalRoot ); + + if ( action !== null ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Uniform( value ) { + + if ( typeof value === 'string' ) { + + console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); + value = arguments[ 1 ]; + + } + + this.value = value; + +} + +Uniform.prototype.clone = function () { + + return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); + +}; + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedBufferGeometry() { + + BufferGeometry.call( this ); + + this.type = 'InstancedBufferGeometry'; + this.maxInstancedCount = undefined; + +} + +InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { + + constructor: InstancedBufferGeometry, + + isInstancedBufferGeometry: true, + + addGroup: function ( start, count, materialIndex ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex + + } ); + + }, + + copy: function ( source ) { + + var index = source.index; + + if ( index !== null ) { + + this.setIndex( index.clone() ); + + } + + var attributes = source.attributes; + + for ( var name in attributes ) { + + var attribute = attributes[ name ]; + this.addAttribute( name, attribute.clone() ); + + } + + var groups = source.groups; + + for ( var i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + this.addGroup( group.start, group.count, group.materialIndex ); + + } + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { + + this.uuid = _Math.generateUUID(); + + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + + this.normalized = normalized === true; + +} + +Object.defineProperties( InterleavedBufferAttribute.prototype, { + + count: { + + get: function () { + + return this.data.count; + + } + + }, + + array: { + + get: function () { + + return this.data.array; + + } + + } + +} ); + +Object.assign( InterleavedBufferAttribute.prototype, { + + isInterleavedBufferAttribute: true, + + setX: function ( index, x ) { + + this.data.array[ index * this.data.stride + this.offset ] = x; + + return this; + + }, + + setY: function ( index, y ) { + + this.data.array[ index * this.data.stride + this.offset + 1 ] = y; + + return this; + + }, + + setZ: function ( index, z ) { + + this.data.array[ index * this.data.stride + this.offset + 2 ] = z; + + return this; + + }, + + setW: function ( index, w ) { + + this.data.array[ index * this.data.stride + this.offset + 3 ] = w; + + return this; + + }, + + getX: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset ]; + + }, + + getY: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 1 ]; + + }, + + getZ: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 2 ]; + + }, + + getW: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 3 ]; + + }, + + setXY: function ( index, x, y ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + this.data.array[ index + 3 ] = w; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InterleavedBuffer( array, stride ) { + + this.uuid = _Math.generateUUID(); + + this.array = array; + this.stride = stride; + this.count = array !== undefined ? array.length / stride : 0; + + this.dynamic = false; + this.updateRange = { offset: 0, count: - 1 }; + + this.onUploadCallback = function () {}; + + this.version = 0; + +} + +Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( InterleavedBuffer.prototype, { + + isInterleavedBuffer: true, + + setArray: function ( array ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.count = array !== undefined ? array.length / this.stride : 0; + this.array = array; + + }, + + setDynamic: function ( value ) { + + this.dynamic = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.count = source.count; + this.stride = source.stride; + this.dynamic = source.dynamic; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.stride; + index2 *= attribute.stride; + + for ( var i = 0, l = this.stride; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) offset = 0; + + this.array.set( value, offset ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { + + InterleavedBuffer.call( this, array, stride ); + + this.meshPerAttribute = meshPerAttribute || 1; + +} + +InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { + + constructor: InstancedInterleavedBuffer, + + isInstancedInterleavedBuffer: true, + + copy: function ( source ) { + + InterleavedBuffer.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedBufferAttribute( array, itemSize, meshPerAttribute ) { + + BufferAttribute.call( this, array, itemSize ); + + this.meshPerAttribute = meshPerAttribute || 1; + +} + +InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { + + constructor: InstancedBufferAttribute, + + isInstancedBufferAttribute: true, + + copy: function ( source ) { + + BufferAttribute.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author bhouston / http://clara.io/ + * @author stephomi / http://stephaneginier.com/ + */ + +function Raycaster( origin, direction, near, far ) { + + this.ray = new Ray( origin, direction ); + // direction is assumed to be normalized (for accurate distance calculations) + + this.near = near || 0; + this.far = far || Infinity; + + this.params = { + Mesh: {}, + Line: {}, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + + Object.defineProperties( this.params, { + PointCloud: { + get: function () { + console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); + return this.Points; + } + } + } ); + +} + +function ascSort( a, b ) { + + return a.distance - b.distance; + +} + +function intersectObject( object, raycaster, intersects, recursive ) { + + if ( object.visible === false ) return; + + object.raycast( raycaster, intersects ); + + if ( recursive === true ) { + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + intersectObject( children[ i ], raycaster, intersects, true ); + + } + + } + +} + +Object.assign( Raycaster.prototype, { + + linePrecision: 1, + + set: function ( origin, direction ) { + + // direction is assumed to be normalized (for accurate distance calculations) + + this.ray.set( origin, direction ); + + }, + + setFromCamera: function ( coords, camera ) { + + if ( ( camera && camera.isPerspectiveCamera ) ) { + + this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); + this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); + + } else if ( ( camera && camera.isOrthographicCamera ) ) { + + this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera + this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); + + } else { + + console.error( 'THREE.Raycaster: Unsupported camera type.' ); + + } + + }, + + intersectObject: function ( object, recursive ) { + + var intersects = []; + + intersectObject( object, this, intersects, recursive ); + + intersects.sort( ascSort ); + + return intersects; + + }, + + intersectObjects: function ( objects, recursive ) { + + var intersects = []; + + if ( Array.isArray( objects ) === false ) { + + console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); + return intersects; + + } + + for ( var i = 0, l = objects.length; i < l; i ++ ) { + + intersectObject( objects[ i ], this, intersects, recursive ); + + } + + intersects.sort( ascSort ); + + return intersects; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Clock( autoStart ) { + + this.autoStart = ( autoStart !== undefined ) ? autoStart : true; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + +} + +Object.assign( Clock.prototype, { + + start: function () { + + this.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 + + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + + }, + + stop: function () { + + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + + }, + + getElapsedTime: function () { + + this.getDelta(); + return this.elapsedTime; + + }, + + getDelta: function () { + + var diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + return 0; + + } + + if ( this.running ) { + + var newTime = ( typeof performance === 'undefined' ? Date : performance ).now(); + + diff = ( newTime - this.oldTime ) / 1000; + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + * + * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system + * + * The poles (phi) are at the positive and negative y axis. + * The equator starts at positive z. + */ + +function Spherical( radius, phi, theta ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; + this.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole + this.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere + + return this; + +} + +Object.assign( Spherical.prototype, { + + set: function ( radius, phi, theta ) { + + this.radius = radius; + this.phi = phi; + this.theta = theta; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( other ) { + + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + + return this; + + }, + + // restrict phi to be betwee EPS and PI-EPS + makeSafe: function() { + + var EPS = 0.000001; + this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); + + return this; + + }, + + setFromVector3: function( vec3 ) { + + this.radius = vec3.length(); + + if ( this.radius === 0 ) { + + this.theta = 0; + this.phi = 0; + + } else { + + this.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis + this.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle + + } + + return this; + + } + +} ); + +/** + * @author Mugen87 / https://github.com/Mugen87 + * + * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system + * + */ + +function Cylindrical( radius, theta, y ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane + this.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis + this.y = ( y !== undefined ) ? y : 0; // height above the x-z plane + + return this; + +} + +Object.assign( Cylindrical.prototype, { + + set: function ( radius, theta, y ) { + + this.radius = radius; + this.theta = theta; + this.y = y; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( other ) { + + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + + return this; + + }, + + setFromVector3: function( vec3 ) { + + this.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z ); + this.theta = Math.atan2( vec3.x, vec3.z ); + this.y = vec3.y; + + return this; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function ImmediateRenderObject( material ) { + + Object3D.call( this ); + + this.material = material; + this.render = function ( renderCallback ) {}; + +} + +ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); +ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; + +ImmediateRenderObject.prototype.isImmediateRenderObject = true; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function VertexNormalsHelper( object, size, hex, linewidth ) { + + this.object = object; + + this.size = ( size !== undefined ) ? size : 1; + + var color = ( hex !== undefined ) ? hex : 0xff0000; + + var width = ( linewidth !== undefined ) ? linewidth : 1; + + // + + var nNormals = 0; + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + nNormals = objGeometry.faces.length * 3; + + } else if ( objGeometry && objGeometry.isBufferGeometry ) { + + nNormals = objGeometry.attributes.normal.count; + + } + + // + + var geometry = new BufferGeometry(); + + var positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 ); + + geometry.addAttribute( 'position', positions ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) ); + + // + + this.matrixAutoUpdate = false; + + this.update(); + +} + +VertexNormalsHelper.prototype = Object.create( LineSegments.prototype ); +VertexNormalsHelper.prototype.constructor = VertexNormalsHelper; + +VertexNormalsHelper.prototype.update = ( function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var normalMatrix = new Matrix3(); + + return function update() { + + var keys = [ 'a', 'b', 'c' ]; + + this.object.updateMatrixWorld( true ); + + normalMatrix.getNormalMatrix( this.object.matrixWorld ); + + var matrixWorld = this.object.matrixWorld; + + var position = this.geometry.attributes.position; + + // + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + var vertices = objGeometry.vertices; + + var faces = objGeometry.faces; + + var idx = 0; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + var vertex = vertices[ face[ keys[ j ] ] ]; + + var normal = face.vertexNormals[ j ]; + + v1.copy( vertex ).applyMatrix4( matrixWorld ); + + v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + } + + } else if ( objGeometry && objGeometry.isBufferGeometry ) { + + var objPos = objGeometry.attributes.position; + + var objNorm = objGeometry.attributes.normal; + + var idx = 0; + + // for simplicity, ignore index and drawcalls, and render every normal + + for ( var j = 0, jl = objPos.count; j < jl; j ++ ) { + + v1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld ); + + v2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) ); + + v2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + } + + position.needsUpdate = true; + + }; + +}() ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function SpotLightHelper( light, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new BufferGeometry(); + + var positions = [ + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, + 0, 0, 0, - 1, 0, 1, + 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, - 1, 1 + ]; + + for ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { + + var p1 = ( i / l ) * Math.PI * 2; + var p2 = ( j / l ) * Math.PI * 2; + + positions.push( + Math.cos( p1 ), Math.sin( p1 ), 1, + Math.cos( p2 ), Math.sin( p2 ), 1 + ); + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + var material = new LineBasicMaterial( { fog: false } ); + + this.cone = new LineSegments( geometry, material ); + this.add( this.cone ); + + this.update(); + +} + +SpotLightHelper.prototype = Object.create( Object3D.prototype ); +SpotLightHelper.prototype.constructor = SpotLightHelper; + +SpotLightHelper.prototype.dispose = function () { + + this.cone.geometry.dispose(); + this.cone.material.dispose(); + +}; + +SpotLightHelper.prototype.update = function () { + + var vector = new Vector3(); + var vector2 = new Vector3(); + + return function update() { + + this.light.updateMatrixWorld(); + + var coneLength = this.light.distance ? this.light.distance : 1000; + var coneWidth = coneLength * Math.tan( this.light.angle ); + + this.cone.scale.set( coneWidth, coneWidth, coneLength ); + + vector.setFromMatrixPosition( this.light.matrixWorld ); + vector2.setFromMatrixPosition( this.light.target.matrixWorld ); + + this.cone.lookAt( vector2.sub( vector ) ); + + if ( this.color !== undefined ) { + + this.cone.material.color.set( this.color ); + + } else { + + this.cone.material.color.copy( this.light.color ); + + } + + }; + +}(); + +/** + * @author Sean Griffin / http://twitter.com/sgrif + * @author Michael Guerrero / http://realitymeltdown.com + * @author mrdoob / http://mrdoob.com/ + * @author ikerr / http://verold.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +function getBoneList( object ) { + + var boneList = []; + + if ( object && object.isBone ) { + + boneList.push( object ); + + } + + for ( var i = 0; i < object.children.length; i ++ ) { + + boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); + + } + + return boneList; + +} + +function SkeletonHelper( object ) { + + var bones = getBoneList( object ); + + var geometry = new BufferGeometry(); + + var vertices = []; + var colors = []; + + var color1 = new Color( 0, 0, 1 ); + var color2 = new Color( 0, 1, 0 ); + + for ( var i = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + vertices.push( 0, 0, 0 ); + vertices.push( 0, 0, 0 ); + colors.push( color1.r, color1.g, color1.b ); + colors.push( color2.r, color2.g, color2.b ); + + } + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } ); + + LineSegments.call( this, geometry, material ); + + this.root = object; + this.bones = bones; + + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + + this.onBeforeRender(); + +} + +SkeletonHelper.prototype = Object.create( LineSegments.prototype ); +SkeletonHelper.prototype.constructor = SkeletonHelper; + +SkeletonHelper.prototype.onBeforeRender = function () { + + var vector = new Vector3(); + + var boneMatrix = new Matrix4(); + var matrixWorldInv = new Matrix4(); + + return function onBeforeRender() { + + var bones = this.bones; + + var geometry = this.geometry; + var position = geometry.getAttribute( 'position' ); + + matrixWorldInv.getInverse( this.root.matrixWorld ); + + for ( var i = 0, j = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + boneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld ); + vector.setFromMatrixPosition( boneMatrix ); + position.setXYZ( j, vector.x, vector.y, vector.z ); + + boneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld ); + vector.setFromMatrixPosition( boneMatrix ); + position.setXYZ( j + 1, vector.x, vector.y, vector.z ); + + j += 2; + + } + + } + + geometry.getAttribute( 'position' ).needsUpdate = true; + + }; + +}(); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function PointLightHelper( light, sphereSize, color ) { + + this.light = light; + this.light.updateMatrixWorld(); + + this.color = color; + + var geometry = new SphereBufferGeometry( sphereSize, 4, 2 ); + var material = new MeshBasicMaterial( { wireframe: true, fog: false } ); + + Mesh.call( this, geometry, material ); + + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + + this.update(); + + + /* + var distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 ); + var distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); + + this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); + this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); + + var d = light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.scale.set( d, d, d ); + + } + + this.add( this.lightDistance ); + */ + +} + +PointLightHelper.prototype = Object.create( Mesh.prototype ); +PointLightHelper.prototype.constructor = PointLightHelper; + +PointLightHelper.prototype.dispose = function () { + + this.geometry.dispose(); + this.material.dispose(); + +}; + +PointLightHelper.prototype.update = function () { + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + this.material.color.copy( this.light.color ); + + } + + /* + var d = this.light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.visible = true; + this.lightDistance.scale.set( d, d, d ); + + } + */ + +}; + +/** + * @author abelnation / http://github.com/abelnation + * @author Mugen87 / http://github.com/Mugen87 + * @author WestLangley / http://github.com/WestLangley + */ + +function RectAreaLightHelper( light, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var material = new LineBasicMaterial( { fog: false } ); + + var geometry = new BufferGeometry(); + + geometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) ); + + this.line = new Line( geometry, material ); + this.add( this.line ); + + + this.update(); + +} + +RectAreaLightHelper.prototype = Object.create( Object3D.prototype ); +RectAreaLightHelper.prototype.constructor = RectAreaLightHelper; + +RectAreaLightHelper.prototype.dispose = function () { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + +}; + +RectAreaLightHelper.prototype.update = function () { + + // calculate new dimensions of the helper + + var hx = this.light.width * 0.5; + var hy = this.light.height * 0.5; + + var position = this.line.geometry.attributes.position; + var array = position.array; + + // update vertices + + array[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0; + array[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0; + array[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0; + array[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0; + array[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0; + + position.needsUpdate = true; + + if ( this.color !== undefined ) { + + this.line.material.color.set( this.color ); + + } else { + + this.line.material.color.copy( this.light.color ); + + } + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +function HemisphereLightHelper( light, size, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new OctahedronBufferGeometry( size ); + geometry.rotateY( Math.PI * 0.5 ); + + this.material = new MeshBasicMaterial( { wireframe: true, fog: false } ); + if ( this.color === undefined ) this.material.vertexColors = VertexColors; + + var position = geometry.getAttribute( 'position' ); + var colors = new Float32Array( position.count * 3 ); + + geometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) ); + + this.add( new Mesh( geometry, this.material ) ); + + this.update(); + +} + +HemisphereLightHelper.prototype = Object.create( Object3D.prototype ); +HemisphereLightHelper.prototype.constructor = HemisphereLightHelper; + +HemisphereLightHelper.prototype.dispose = function () { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + +}; + +HemisphereLightHelper.prototype.update = function () { + + var vector = new Vector3(); + + var color1 = new Color(); + var color2 = new Color(); + + return function update() { + + var mesh = this.children[ 0 ]; + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + var colors = mesh.geometry.getAttribute( 'color' ); + + color1.copy( this.light.color ); + color2.copy( this.light.groundColor ); + + for ( var i = 0, l = colors.count; i < l; i ++ ) { + + var color = ( i < ( l / 2 ) ) ? color1 : color2; + + colors.setXYZ( i, color.r, color.g, color.b ); + + } + + colors.needsUpdate = true; + + } + + mesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() ); + + }; + +}(); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function GridHelper( size, divisions, color1, color2 ) { + + size = size || 10; + divisions = divisions || 10; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var center = divisions / 2; + var step = size / divisions; + var halfSize = size / 2; + + var vertices = [], colors = []; + + for ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { + + vertices.push( - halfSize, 0, k, halfSize, 0, k ); + vertices.push( k, 0, - halfSize, k, 0, halfSize ); + + var color = i === center ? color1 : color2; + + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + + } + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +GridHelper.prototype = Object.create( LineSegments.prototype ); +GridHelper.prototype.constructor = GridHelper; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / http://github.com/Mugen87 + * @author Hectate / http://www.github.com/Hectate + */ + +function PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) { + + radius = radius || 10; + radials = radials || 16; + circles = circles || 8; + divisions = divisions || 64; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var vertices = []; + var colors = []; + + var x, z; + var v, i, j, r, color; + + // create the radials + + for ( i = 0; i <= radials; i ++ ) { + + v = ( i / radials ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * radius; + z = Math.cos( v ) * radius; + + vertices.push( 0, 0, 0 ); + vertices.push( x, 0, z ); + + color = ( i & 1 ) ? color1 : color2; + + colors.push( color.r, color.g, color.b ); + colors.push( color.r, color.g, color.b ); + + } + + // create the circles + + for ( i = 0; i <= circles; i ++ ) { + + color = ( i & 1 ) ? color1 : color2; + + r = radius - ( radius / circles * i ); + + for ( j = 0; j < divisions; j ++ ) { + + // first vertex + + v = ( j / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + // second vertex + + v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + } + + } + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +PolarGridHelper.prototype = Object.create( LineSegments.prototype ); +PolarGridHelper.prototype.constructor = PolarGridHelper; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function FaceNormalsHelper( object, size, hex, linewidth ) { + + // FaceNormalsHelper only supports THREE.Geometry + + this.object = object; + + this.size = ( size !== undefined ) ? size : 1; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var width = ( linewidth !== undefined ) ? linewidth : 1; + + // + + var nNormals = 0; + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + nNormals = objGeometry.faces.length; + + } else { + + console.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' ); + + } + + // + + var geometry = new BufferGeometry(); + + var positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 ); + + geometry.addAttribute( 'position', positions ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) ); + + // + + this.matrixAutoUpdate = false; + this.update(); + +} + +FaceNormalsHelper.prototype = Object.create( LineSegments.prototype ); +FaceNormalsHelper.prototype.constructor = FaceNormalsHelper; + +FaceNormalsHelper.prototype.update = ( function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var normalMatrix = new Matrix3(); + + return function update() { + + this.object.updateMatrixWorld( true ); + + normalMatrix.getNormalMatrix( this.object.matrixWorld ); + + var matrixWorld = this.object.matrixWorld; + + var position = this.geometry.attributes.position; + + // + + var objGeometry = this.object.geometry; + + var vertices = objGeometry.vertices; + + var faces = objGeometry.faces; + + var idx = 0; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + var normal = face.normal; + + v1.copy( vertices[ face.a ] ) + .add( vertices[ face.b ] ) + .add( vertices[ face.c ] ) + .divideScalar( 3 ) + .applyMatrix4( matrixWorld ); + + v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + position.needsUpdate = true; + + }; + +}() ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function DirectionalLightHelper( light, size, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + if ( size === undefined ) size = 1; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( [ + - size, size, 0, + size, size, 0, + size, - size, 0, + - size, - size, 0, + - size, size, 0 + ], 3 ) ); + + var material = new LineBasicMaterial( { fog: false } ); + + this.lightPlane = new Line( geometry, material ); + this.add( this.lightPlane ); + + geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); + + this.targetLine = new Line( geometry, material ); + this.add( this.targetLine ); + + this.update(); + +} + +DirectionalLightHelper.prototype = Object.create( Object3D.prototype ); +DirectionalLightHelper.prototype.constructor = DirectionalLightHelper; + +DirectionalLightHelper.prototype.dispose = function () { + + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + +}; + +DirectionalLightHelper.prototype.update = function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var v3 = new Vector3(); + + return function update() { + + v1.setFromMatrixPosition( this.light.matrixWorld ); + v2.setFromMatrixPosition( this.light.target.matrixWorld ); + v3.subVectors( v2, v1 ); + + this.lightPlane.lookAt( v3 ); + + if ( this.color !== undefined ) { + + this.lightPlane.material.color.set( this.color ); + this.targetLine.material.color.set( this.color ); + + } else { + + this.lightPlane.material.color.copy( this.light.color ); + this.targetLine.material.color.copy( this.light.color ); + + } + + this.targetLine.lookAt( v3 ); + this.targetLine.scale.z = v3.length(); + + }; + +}(); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author Mugen87 / https://github.com/Mugen87 + * + * - shows frustum, line of sight and up of the camera + * - suitable for fast updates + * - based on frustum visualization in lightgl.js shadowmap example + * http://evanw.github.com/lightgl.js/tests/shadowmap.html + */ + +function CameraHelper( camera ) { + + var geometry = new BufferGeometry(); + var material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } ); + + var vertices = []; + var colors = []; + + var pointMap = {}; + + // colors + + var colorFrustum = new Color( 0xffaa00 ); + var colorCone = new Color( 0xff0000 ); + var colorUp = new Color( 0x00aaff ); + var colorTarget = new Color( 0xffffff ); + var colorCross = new Color( 0x333333 ); + + // near + + addLine( "n1", "n2", colorFrustum ); + addLine( "n2", "n4", colorFrustum ); + addLine( "n4", "n3", colorFrustum ); + addLine( "n3", "n1", colorFrustum ); + + // far + + addLine( "f1", "f2", colorFrustum ); + addLine( "f2", "f4", colorFrustum ); + addLine( "f4", "f3", colorFrustum ); + addLine( "f3", "f1", colorFrustum ); + + // sides + + addLine( "n1", "f1", colorFrustum ); + addLine( "n2", "f2", colorFrustum ); + addLine( "n3", "f3", colorFrustum ); + addLine( "n4", "f4", colorFrustum ); + + // cone + + addLine( "p", "n1", colorCone ); + addLine( "p", "n2", colorCone ); + addLine( "p", "n3", colorCone ); + addLine( "p", "n4", colorCone ); + + // up + + addLine( "u1", "u2", colorUp ); + addLine( "u2", "u3", colorUp ); + addLine( "u3", "u1", colorUp ); + + // target + + addLine( "c", "t", colorTarget ); + addLine( "p", "c", colorCross ); + + // cross + + addLine( "cn1", "cn2", colorCross ); + addLine( "cn3", "cn4", colorCross ); + + addLine( "cf1", "cf2", colorCross ); + addLine( "cf3", "cf4", colorCross ); + + function addLine( a, b, color ) { + + addPoint( a, color ); + addPoint( b, color ); + + } + + function addPoint( id, color ) { + + vertices.push( 0, 0, 0 ); + colors.push( color.r, color.g, color.b ); + + if ( pointMap[ id ] === undefined ) { + + pointMap[ id ] = []; + + } + + pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + LineSegments.call( this, geometry, material ); + + this.camera = camera; + if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); + + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + + this.pointMap = pointMap; + + this.update(); + +} + +CameraHelper.prototype = Object.create( LineSegments.prototype ); +CameraHelper.prototype.constructor = CameraHelper; + +CameraHelper.prototype.update = function () { + + var geometry, pointMap; + + var vector = new Vector3(); + var camera = new Camera(); + + function setPoint( point, x, y, z ) { + + vector.set( x, y, z ).unproject( camera ); + + var points = pointMap[ point ]; + + if ( points !== undefined ) { + + var position = geometry.getAttribute( 'position' ); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + position.setXYZ( points[ i ], vector.x, vector.y, vector.z ); + + } + + } + + } + + return function update() { + + geometry = this.geometry; + pointMap = this.pointMap; + + var w = 1, h = 1; + + // we need just camera projection matrix + // world matrix must be identity + + camera.projectionMatrix.copy( this.camera.projectionMatrix ); + + // center / target + + setPoint( "c", 0, 0, - 1 ); + setPoint( "t", 0, 0, 1 ); + + // near + + setPoint( "n1", - w, - h, - 1 ); + setPoint( "n2", w, - h, - 1 ); + setPoint( "n3", - w, h, - 1 ); + setPoint( "n4", w, h, - 1 ); + + // far + + setPoint( "f1", - w, - h, 1 ); + setPoint( "f2", w, - h, 1 ); + setPoint( "f3", - w, h, 1 ); + setPoint( "f4", w, h, 1 ); + + // up + + setPoint( "u1", w * 0.7, h * 1.1, - 1 ); + setPoint( "u2", - w * 0.7, h * 1.1, - 1 ); + setPoint( "u3", 0, h * 2, - 1 ); + + // cross + + setPoint( "cf1", - w, 0, 1 ); + setPoint( "cf2", w, 0, 1 ); + setPoint( "cf3", 0, - h, 1 ); + setPoint( "cf4", 0, h, 1 ); + + setPoint( "cn1", - w, 0, - 1 ); + setPoint( "cn2", w, 0, - 1 ); + setPoint( "cn3", 0, - h, - 1 ); + setPoint( "cn4", 0, h, - 1 ); + + geometry.getAttribute( 'position' ).needsUpdate = true; + + }; + +}(); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / http://github.com/Mugen87 + */ + +function BoxHelper( object, color ) { + + this.object = object; + + if ( color === undefined ) color = 0xffff00; + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + var positions = new Float32Array( 8 * 3 ); + + var geometry = new BufferGeometry(); + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + this.matrixAutoUpdate = false; + + this.update(); + +} + +BoxHelper.prototype = Object.create( LineSegments.prototype ); +BoxHelper.prototype.constructor = BoxHelper; + +BoxHelper.prototype.update = ( function () { + + var box = new Box3(); + + return function update( object ) { + + if ( object !== undefined ) { + + console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); + + } + + if ( this.object !== undefined ) { + + box.setFromObject( this.object ); + + } + + if ( box.isEmpty() ) return; + + var min = box.min; + var max = box.max; + + /* + 5____4 + 1/___0/| + | 6__|_7 + 2/___3/ + + 0: max.x, max.y, max.z + 1: min.x, max.y, max.z + 2: min.x, min.y, max.z + 3: max.x, min.y, max.z + 4: max.x, max.y, min.z + 5: min.x, max.y, min.z + 6: min.x, min.y, min.z + 7: max.x, min.y, min.z + */ + + var position = this.geometry.attributes.position; + var array = position.array; + + array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; + array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; + array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; + array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; + array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; + array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; + array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; + array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; + + position.needsUpdate = true; + + this.geometry.computeBoundingSphere(); + + }; + +} )(); + +BoxHelper.prototype.setFromObject = function ( object ) { + + this.object = object; + this.update(); + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + */ + +function Box3Helper( box, hex ) { + + this.type = 'Box3Helper'; + + this.box = box; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + + var positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ]; + + var geometry = new BufferGeometry(); + + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + this.geometry.computeBoundingSphere(); + + this.onBeforeRender(); + +} + +Box3Helper.prototype = Object.create( LineSegments.prototype ); +Box3Helper.prototype.constructor = Box3Helper; + +Box3Helper.prototype.onBeforeRender = function () { + + var box = this.box; + + if ( box.isEmpty() ) return; + + box.getCenter( this.position ); + + box.getSize( this.scale ); + + this.scale.multiplyScalar( 0.5 ); + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + */ + +function PlaneHelper( plane, size, hex ) { + + this.type = 'PlaneHelper'; + + this.plane = plane; + + this.size = ( size === undefined ) ? 1 : size; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ]; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + geometry.computeBoundingSphere(); + + Line.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + // + + var positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ]; + + var geometry2 = new BufferGeometry(); + geometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); + geometry2.computeBoundingSphere(); + + this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) ); + + // + + this.onBeforeRender(); + +} + +PlaneHelper.prototype = Object.create( Line.prototype ); +PlaneHelper.prototype.constructor = PlaneHelper; + +PlaneHelper.prototype.onBeforeRender = function () { + + var scale = - this.plane.constant; + + if ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter + + this.scale.set( 0.5 * this.size, 0.5 * this.size, scale ); + + this.lookAt( this.plane.normal ); + + this.updateMatrixWorld(); + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * @author zz85 / http://github.com/zz85 + * @author bhouston / http://clara.io + * + * Creates an arrow for visualizing directions + * + * Parameters: + * dir - Vector3 + * origin - Vector3 + * length - Number + * color - color in hex value + * headLength - Number + * headWidth - Number + */ + +var lineGeometry; +var coneGeometry; + +function ArrowHelper( dir, origin, length, color, headLength, headWidth ) { + + // dir is assumed to be normalized + + Object3D.call( this ); + + if ( color === undefined ) color = 0xffff00; + if ( length === undefined ) length = 1; + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + if ( lineGeometry === undefined ) { + + lineGeometry = new BufferGeometry(); + lineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); + + coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 ); + coneGeometry.translate( 0, - 0.5, 0 ); + + } + + this.position.copy( origin ); + + this.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) ); + this.line.matrixAutoUpdate = false; + this.add( this.line ); + + this.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) ); + this.cone.matrixAutoUpdate = false; + this.add( this.cone ); + + this.setDirection( dir ); + this.setLength( length, headLength, headWidth ); + +} + +ArrowHelper.prototype = Object.create( Object3D.prototype ); +ArrowHelper.prototype.constructor = ArrowHelper; + +ArrowHelper.prototype.setDirection = ( function () { + + var axis = new Vector3(); + var radians; + + return function setDirection( dir ) { + + // dir is assumed to be normalized + + if ( dir.y > 0.99999 ) { + + this.quaternion.set( 0, 0, 0, 1 ); + + } else if ( dir.y < - 0.99999 ) { + + this.quaternion.set( 1, 0, 0, 0 ); + + } else { + + axis.set( dir.z, 0, - dir.x ).normalize(); + + radians = Math.acos( dir.y ); + + this.quaternion.setFromAxisAngle( axis, radians ); + + } + + }; + +}() ); + +ArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) { + + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + this.line.scale.set( 1, Math.max( 0, length - headLength ), 1 ); + this.line.updateMatrix(); + + this.cone.scale.set( headWidth, headLength, headWidth ); + this.cone.position.y = length; + this.cone.updateMatrix(); + +}; + +ArrowHelper.prototype.setColor = function ( color ) { + + this.line.material.color.copy( color ); + this.cone.material.color.copy( color ); + +}; + +/** + * @author sroucheray / http://sroucheray.org/ + * @author mrdoob / http://mrdoob.com/ + */ + +function AxisHelper( size ) { + + size = size || 1; + + var vertices = [ + 0, 0, 0, size, 0, 0, + 0, 0, 0, 0, size, 0, + 0, 0, 0, 0, 0, size + ]; + + var colors = [ + 1, 0, 0, 1, 0.6, 0, + 0, 1, 0, 0.6, 1, 0, + 0, 0, 1, 0, 0.6, 1 + ]; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +AxisHelper.prototype = Object.create( LineSegments.prototype ); +AxisHelper.prototype.constructor = AxisHelper; + +/** + * @author zz85 https://github.com/zz85 + * + * Centripetal CatmullRom Curve - which is useful for avoiding + * cusps and self-intersections in non-uniform catmull rom curves. + * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf + * + * curve.type accepts centripetal(default), chordal and catmullrom + * curve.tension is used for catmullrom which defaults to 0.5 + */ + + +/* +Based on an optimized c++ solution in + - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ + - http://ideone.com/NoEbVM + +This CubicPoly class could be used for reusing some variables and calculations, +but for three.js curve use, it could be possible inlined and flatten into a single function call +which can be placed in CurveUtils. +*/ + +function CubicPoly() { + + var c0 = 0, c1 = 0, c2 = 0, c3 = 0; + + /* + * Compute coefficients for a cubic polynomial + * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 + * such that + * p(0) = x0, p(1) = x1 + * and + * p'(0) = t0, p'(1) = t1. + */ + function init( x0, x1, t0, t1 ) { + + c0 = x0; + c1 = t0; + c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + + } + + return { + + initCatmullRom: function ( x0, x1, x2, x3, tension ) { + + init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); + + }, + + initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { + + // compute tangents when parameterized in [t1,t2] + var t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; + var t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; + + // rescale tangents for parametrization in [0,1] + t1 *= dt1; + t2 *= dt1; + + init( x1, x2, t1, t2 ); + + }, + + calc: function ( t ) { + + var t2 = t * t; + var t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + + } + + }; + +} + +// + +var tmp = new Vector3(); +var px = new CubicPoly(); +var py = new CubicPoly(); +var pz = new CubicPoly(); + +function CatmullRomCurve3( points ) { + + Curve.call( this ); + + if ( points.length < 2 ) console.warn( 'THREE.CatmullRomCurve3: Points array needs at least two entries.' ); + + this.points = points || []; + this.closed = false; + +} + +CatmullRomCurve3.prototype = Object.create( Curve.prototype ); +CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; + +CatmullRomCurve3.prototype.getPoint = function ( t ) { + + var points = this.points; + var l = points.length; + + var point = ( l - ( this.closed ? 0 : 1 ) ) * t; + var intPoint = Math.floor( point ); + var weight = point - intPoint; + + if ( this.closed ) { + + intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length; + + } else if ( weight === 0 && intPoint === l - 1 ) { + + intPoint = l - 2; + weight = 1; + + } + + var p0, p1, p2, p3; // 4 points + + if ( this.closed || intPoint > 0 ) { + + p0 = points[ ( intPoint - 1 ) % l ]; + + } else { + + // extrapolate first point + tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); + p0 = tmp; + + } + + p1 = points[ intPoint % l ]; + p2 = points[ ( intPoint + 1 ) % l ]; + + if ( this.closed || intPoint + 2 < l ) { + + p3 = points[ ( intPoint + 2 ) % l ]; + + } else { + + // extrapolate last point + tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); + p3 = tmp; + + } + + if ( this.type === undefined || this.type === 'centripetal' || this.type === 'chordal' ) { + + // init Centripetal / Chordal Catmull-Rom + var pow = this.type === 'chordal' ? 0.5 : 0.25; + var dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); + var dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); + var dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); + + // safety check for repeated points + if ( dt1 < 1e-4 ) dt1 = 1.0; + if ( dt0 < 1e-4 ) dt0 = dt1; + if ( dt2 < 1e-4 ) dt2 = dt1; + + px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); + py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); + pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); + + } else if ( this.type === 'catmullrom' ) { + + var tension = this.tension !== undefined ? this.tension : 0.5; + px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, tension ); + py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, tension ); + pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, tension ); + + } + + return new Vector3( px.calc( weight ), py.calc( weight ), pz.calc( weight ) ); + +}; + +function CubicBezierCurve3( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + +} + +CubicBezierCurve3.prototype = Object.create( Curve.prototype ); +CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; + +CubicBezierCurve3.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + return new Vector3( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), + CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) + ); + +}; + +function QuadraticBezierCurve3( v0, v1, v2 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + +} + +QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); +QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; + +QuadraticBezierCurve3.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + return new Vector3( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ), + QuadraticBezier( t, v0.z, v1.z, v2.z ) + ); + +}; + +function LineCurve3( v1, v2 ) { + + Curve.call( this ); + + this.v1 = v1; + this.v2 = v2; + +} + +LineCurve3.prototype = Object.create( Curve.prototype ); +LineCurve3.prototype.constructor = LineCurve3; + +LineCurve3.prototype.getPoint = function ( t ) { + + if ( t === 1 ) { + + return this.v2.clone(); + + } + + var vector = new Vector3(); + + vector.subVectors( this.v2, this.v1 ); // diff + vector.multiplyScalar( t ); + vector.add( this.v1 ); + + return vector; + +}; + +function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + +} + +ArcCurve.prototype = Object.create( EllipseCurve.prototype ); +ArcCurve.prototype.constructor = ArcCurve; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +var SceneUtils = { + + createMultiMaterialObject: function ( geometry, materials ) { + + var group = new Group(); + + for ( var i = 0, l = materials.length; i < l; i ++ ) { + + group.add( new Mesh( geometry, materials[ i ] ) ); + + } + + return group; + + }, + + detach: function ( child, parent, scene ) { + + child.applyMatrix( parent.matrixWorld ); + parent.remove( child ); + scene.add( child ); + + }, + + attach: function ( child, scene, parent ) { + + child.applyMatrix( new Matrix4().getInverse( parent.matrixWorld ) ); + + scene.remove( child ); + parent.add( child ); + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Face4( a, b, c, d, normal, color, materialIndex ) { + + console.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' ); + return new Face3( a, b, c, normal, color, materialIndex ); + +} + +var LineStrip = 0; + +var LinePieces = 1; + +function MeshFaceMaterial( materials ) { + + console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' ); + return materials; + +} + +function MultiMaterial( materials ) { + + if ( materials === undefined ) materials = []; + + console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' ); + materials.isMultiMaterial = true; + materials.materials = materials; + materials.clone = function () { + + return materials.slice(); + + }; + return materials; + +} + +function PointCloud( geometry, material ) { + + console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function Particle( material ) { + + console.warn( 'THREE.Particle has been renamed to THREE.Sprite.' ); + return new Sprite( material ); + +} + +function ParticleSystem( geometry, material ) { + + console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function PointCloudMaterial( parameters ) { + + console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleBasicMaterial( parameters ) { + + console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleSystemMaterial( parameters ) { + + console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function Vertex( x, y, z ) { + + console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); + return new Vector3( x, y, z ); + +} + +// + +function DynamicBufferAttribute( array, itemSize ) { + + console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' ); + return new BufferAttribute( array, itemSize ).setDynamic( true ); + +} + +function Int8Attribute( array, itemSize ) { + + console.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' ); + return new Int8BufferAttribute( array, itemSize ); + +} + +function Uint8Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' ); + return new Uint8BufferAttribute( array, itemSize ); + +} + +function Uint8ClampedAttribute( array, itemSize ) { + + console.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' ); + return new Uint8ClampedBufferAttribute( array, itemSize ); + +} + +function Int16Attribute( array, itemSize ) { + + console.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' ); + return new Int16BufferAttribute( array, itemSize ); + +} + +function Uint16Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' ); + return new Uint16BufferAttribute( array, itemSize ); + +} + +function Int32Attribute( array, itemSize ) { + + console.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' ); + return new Int32BufferAttribute( array, itemSize ); + +} + +function Uint32Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' ); + return new Uint32BufferAttribute( array, itemSize ); + +} + +function Float32Attribute( array, itemSize ) { + + console.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' ); + return new Float32BufferAttribute( array, itemSize ); + +} + +function Float64Attribute( array, itemSize ) { + + console.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' ); + return new Float64BufferAttribute( array, itemSize ); + +} + +// + +Curve.create = function ( construct, getPoint ) { + + console.log( 'THREE.Curve.create() has been deprecated' ); + + construct.prototype = Object.create( Curve.prototype ); + construct.prototype.constructor = construct; + construct.prototype.getPoint = getPoint; + + return construct; + +}; + +// + +function ClosedSplineCurve3( points ) { + + console.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + this.closed = true; + +} + +ClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + +// + +function SplineCurve3( points ) { + + console.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + +} + +SplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + +// + +function Spline( points ) { + + console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + +} + +Spline.prototype = Object.create( CatmullRomCurve3.prototype ); + +Object.assign( Spline.prototype, { + + initFromArray: function ( a ) { + + console.error( 'THREE.Spline: .initFromArray() has been removed.' ); + + }, + getControlPointsArray: function ( optionalTarget ) { + + console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); + + }, + reparametrizeByArcLength: function ( samplingCoef ) { + + console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); + + } + +} ); + +// +function BoundingBoxHelper( object, color ) { + + console.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' ); + return new BoxHelper( object, color ); + +} + +function EdgesHelper( object, hex ) { + + console.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' ); + return new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +GridHelper.prototype.setColors = function () { + + console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); + +}; + +SkeletonHelper.prototype.update = function () { + + console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); + +}; + +function WireframeHelper( object, hex ) { + + console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' ); + return new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +// + +function XHRLoader( manager ) { + + console.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' ); + return new FileLoader( manager ); + +} + +function BinaryTextureLoader( manager ) { + + console.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' ); + return new DataTextureLoader( manager ); + +} + +// + +Object.assign( Box2.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } +} ); + +Object.assign( Box3.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } +} ); + +Line3.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + +}; + +_Math.random16 = function () { + + console.warn( 'THREE.Math.random16() has been deprecated. Use Math.random() instead.' ); + return Math.random(); + +}; + +Object.assign( Matrix3.prototype, { + + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); + return vector.applyMatrix3( this ); + + }, + multiplyVector3Array: function ( a ) { + + console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); + + }, + applyToBuffer: function( buffer, offset, length ) { + + console.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' ); + return this.applyToBufferAttribute( buffer ); + + }, + applyToVector3Array: function( array, offset, length ) { + + console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); + + } + +} ); + +Object.assign( Matrix4.prototype, { + + extractPosition: function ( m ) { + + console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); + return this.copyPosition( m ); + + }, + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + getPosition: function () { + + var v1; + + return function getPosition() { + + if ( v1 === undefined ) v1 = new Vector3(); + console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); + return v1.setFromMatrixColumn( this, 3 ); + + }; + + }(), + setRotationFromQuaternion: function ( q ) { + + console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); + return this.makeRotationFromQuaternion( q ); + + }, + multiplyToArray: function () { + + console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector4: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector3Array: function ( a ) { + + console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); + + }, + rotateAxis: function ( v ) { + + console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); + v.transformDirection( this ); + + }, + crossVector: function ( vector ) { + + console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + translate: function () { + + console.error( 'THREE.Matrix4: .translate() has been removed.' ); + + }, + rotateX: function () { + + console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); + + }, + rotateY: function () { + + console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); + + }, + rotateZ: function () { + + console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); + + }, + rotateByAxis: function () { + + console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); + + }, + applyToBuffer: function( buffer, offset, length ) { + + console.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' ); + return this.applyToBufferAttribute( buffer ); + + }, + applyToVector3Array: function( array, offset, length ) { + + console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); + + }, + makeFrustum: function( left, right, bottom, top, near, far ) { + + console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); + return this.makePerspective( left, right, top, bottom, near, far ); + + } + +} ); + +Plane.prototype.isIntersectionLine = function ( line ) { + + console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); + return this.intersectsLine( line ); + +}; + +Quaternion.prototype.multiplyVector3 = function ( vector ) { + + console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); + return vector.applyQuaternion( this ); + +}; + +Object.assign( Ray.prototype, { + + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionPlane: function ( plane ) { + + console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); + return this.intersectsPlane( plane ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + } + +} ); + +Object.assign( Shape.prototype, { + + extrude: function ( options ) { + + console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); + return new ExtrudeGeometry( this, options ); + + }, + makeGeometry: function ( options ) { + + console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); + return new ShapeGeometry( this, options ); + + } + +} ); + +Object.assign( Vector2.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.error( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + } + +} ); + +Object.assign( Vector3.prototype, { + + setEulerFromRotationMatrix: function () { + + console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); + + }, + setEulerFromQuaternion: function () { + + console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); + + }, + getPositionFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); + return this.setFromMatrixPosition( m ); + + }, + getScaleFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); + return this.setFromMatrixScale( m ); + + }, + getColumnFromMatrix: function ( index, matrix ) { + + console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); + return this.setFromMatrixColumn( matrix, index ); + + }, + applyProjection: function ( m ) { + + console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); + return this.applyMatrix4( m ); + + }, + fromAttribute: function ( attribute, index, offset ) { + + console.error( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + } + +} ); + +Object.assign( Vector4.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.error( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + } + +} ); + +// + +Geometry.prototype.computeTangents = function () { + + console.warn( 'THREE.Geometry: .computeTangents() has been removed.' ); + +}; + +Object.assign( Object3D.prototype, { + + getChildByName: function ( name ) { + + console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); + return this.getObjectByName( name ); + + }, + renderDepth: function () { + + console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); + + }, + translate: function ( distance, axis ) { + + console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); + return this.translateOnAxis( axis, distance ); + + } + +} ); + +Object.defineProperties( Object3D.prototype, { + + eulerOrder: { + get: function () { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + return this.rotation.order; + + }, + set: function ( value ) { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + this.rotation.order = value; + + } + }, + useQuaternion: { + get: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + }, + set: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + } + } + +} ); + +Object.defineProperties( LOD.prototype, { + + objects: { + get: function () { + + console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); + return this.levels; + + } + } + +} ); + +Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { + + get: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + } + +} ); + +Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { + + get: function () { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + return this.arcLengthDivisions; + + }, + set: function ( value ) { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + this.arcLengthDivisions = value; + + } + +} ); + +// + +PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { + + console.warn( "THREE.PerspectiveCamera.setLens is deprecated. " + + "Use .setFocalLength and .filmGauge for a photographic setup." ); + + if ( filmGauge !== undefined ) this.filmGauge = filmGauge; + this.setFocalLength( focalLength ); + +}; + +// + +Object.defineProperties( Light.prototype, { + onlyShadow: { + set: function () { + + console.warn( 'THREE.Light: .onlyShadow has been removed.' ); + + } + }, + shadowCameraFov: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); + this.shadow.camera.fov = value; + + } + }, + shadowCameraLeft: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); + this.shadow.camera.left = value; + + } + }, + shadowCameraRight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); + this.shadow.camera.right = value; + + } + }, + shadowCameraTop: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); + this.shadow.camera.top = value; + + } + }, + shadowCameraBottom: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); + this.shadow.camera.bottom = value; + + } + }, + shadowCameraNear: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); + this.shadow.camera.near = value; + + } + }, + shadowCameraFar: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); + this.shadow.camera.far = value; + + } + }, + shadowCameraVisible: { + set: function () { + + console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); + + } + }, + shadowBias: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); + this.shadow.bias = value; + + } + }, + shadowDarkness: { + set: function () { + + console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); + + } + }, + shadowMapWidth: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); + this.shadow.mapSize.width = value; + + } + }, + shadowMapHeight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); + this.shadow.mapSize.height = value; + + } + } +} ); + +// + +Object.defineProperties( BufferAttribute.prototype, { + + length: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); + return this.array.length; + + } + } + +} ); + +Object.assign( BufferGeometry.prototype, { + + addIndex: function ( index ) { + + console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); + this.setIndex( index ); + + }, + addDrawCall: function ( start, count, indexOffset ) { + + if ( indexOffset !== undefined ) { + + console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); + + } + console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); + this.addGroup( start, count ); + + }, + clearDrawCalls: function () { + + console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); + this.clearGroups(); + + }, + computeTangents: function () { + + console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); + + }, + computeOffsets: function () { + + console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); + + } + +} ); + +Object.defineProperties( BufferGeometry.prototype, { + + drawcalls: { + get: function () { + + console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); + return this.groups; + + } + }, + offsets: { + get: function () { + + console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); + return this.groups; + + } + } + +} ); + +// + +Object.defineProperties( Uniform.prototype, { + + dynamic: { + set: function () { + + console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); + + } + }, + onUpdate: { + value: function () { + + console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); + return this; + + } + } + +} ); + +// + +Object.defineProperties( Material.prototype, { + + wrapAround: { + get: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + } + }, + wrapRGB: { + get: function () { + + console.warn( 'THREE.Material: .wrapRGB has been removed.' ); + return new Color(); + + } + }, + + shading: { + get: function () { + + console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( value === FlatShading ); + + } + } + +} ); + +Object.defineProperties( MeshPhongMaterial.prototype, { + + metal: { + get: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); + + } + } + +} ); + +Object.defineProperties( ShaderMaterial.prototype, { + + derivatives: { + get: function () { + + console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + return this.extensions.derivatives; + + }, + set: function ( value ) { + + console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + this.extensions.derivatives = value; + + } + } + +} ); + +// + +Object.assign( WebGLRenderer.prototype, { + + getCurrentRenderTarget: function () { + + console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); + return this.getRenderTarget(); + + }, + + getMaxAnisotropy: function () { + + console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); + return this.capabilities.getMaxAnisotropy(); + + }, + + getPrecision: function () { + + console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); + return this.capabilities.precision; + + }, + + supportsFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); + return this.extensions.get( 'OES_texture_float' ); + + }, + supportsHalfFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); + return this.extensions.get( 'OES_texture_half_float' ); + + }, + supportsStandardDerivatives: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); + return this.extensions.get( 'OES_standard_derivatives' ); + + }, + supportsCompressedTextureS3TC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + }, + supportsCompressedTexturePVRTC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + }, + supportsBlendMinMax: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); + return this.extensions.get( 'EXT_blend_minmax' ); + + }, + supportsVertexTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); + return this.capabilities.vertexTextures; + + }, + supportsInstancedArrays: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); + return this.extensions.get( 'ANGLE_instanced_arrays' ); + + }, + enableScissorTest: function ( boolean ) { + + console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); + this.setScissorTest( boolean ); + + }, + initMaterial: function () { + + console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); + + }, + addPrePlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); + + }, + addPostPlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); + + }, + updateShadowMap: function () { + + console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); + + } + +} ); + +Object.defineProperties( WebGLRenderer.prototype, { + + shadowMapEnabled: { + get: function () { + + return this.shadowMap.enabled; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); + this.shadowMap.enabled = value; + + } + }, + shadowMapType: { + get: function () { + + return this.shadowMap.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); + this.shadowMap.type = value; + + } + }, + shadowMapCullFace: { + get: function () { + + return this.shadowMap.cullFace; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.' ); + this.shadowMap.cullFace = value; + + } + } +} ); + +Object.defineProperties( WebGLShadowMap.prototype, { + + cullFace: { + get: function () { + + return this.renderReverseSided ? CullFaceFront : CullFaceBack; + + }, + set: function ( cullFace ) { + + var value = ( cullFace !== CullFaceBack ); + console.warn( "WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to " + value + "." ); + this.renderReverseSided = value; + + } + } + +} ); + +// + +Object.defineProperties( WebGLRenderTarget.prototype, { + + wrapS: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + return this.texture.wrapS; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + this.texture.wrapS = value; + + } + }, + wrapT: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + return this.texture.wrapT; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + this.texture.wrapT = value; + + } + }, + magFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + return this.texture.magFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + this.texture.magFilter = value; + + } + }, + minFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + return this.texture.minFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + this.texture.minFilter = value; + + } + }, + anisotropy: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + return this.texture.anisotropy; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + this.texture.anisotropy = value; + + } + }, + offset: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + return this.texture.offset; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + this.texture.offset = value; + + } + }, + repeat: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + return this.texture.repeat; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + this.texture.repeat = value; + + } + }, + format: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + return this.texture.format; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + this.texture.format = value; + + } + }, + type: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + return this.texture.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + this.texture.type = value; + + } + }, + generateMipmaps: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + return this.texture.generateMipmaps; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + this.texture.generateMipmaps = value; + + } + } + +} ); + +// + +Audio.prototype.load = function ( file ) { + + console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); + var scope = this; + var audioLoader = new AudioLoader(); + audioLoader.load( file, function ( buffer ) { + + scope.setBuffer( buffer ); + + } ); + return this; + +}; + +AudioAnalyser.prototype.getData = function () { + + console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); + return this.getFrequencyData(); + +}; + +// + +CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { + + console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); + return this.update( renderer, scene ); + +}; + +// + +var GeometryUtils = { + + merge: function ( geometry1, geometry2, materialIndexOffset ) { + + console.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' ); + var matrix; + + if ( geometry2.isMesh ) { + + geometry2.matrixAutoUpdate && geometry2.updateMatrix(); + + matrix = geometry2.matrix; + geometry2 = geometry2.geometry; + + } + + geometry1.merge( geometry2, matrix, materialIndexOffset ); + + }, + + center: function ( geometry ) { + + console.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' ); + return geometry.center(); + + } + +}; + +var ImageUtils = { + + crossOrigin: undefined, + + loadTexture: function ( url, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); + + var loader = new TextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( url, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }, + + loadTextureCube: function ( urls, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); + + var loader = new CubeTextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( urls, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }, + + loadCompressedTexture: function () { + + console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); + + }, + + loadCompressedTextureCube: function () { + + console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); + + } + +}; + +// + +function Projector() { + + console.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' ); + + this.projectVector = function ( vector, camera ) { + + console.warn( 'THREE.Projector: .projectVector() is now vector.project().' ); + vector.project( camera ); + + }; + + this.unprojectVector = function ( vector, camera ) { + + console.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' ); + vector.unproject( camera ); + + }; + + this.pickingRay = function () { + + console.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' ); + + }; + +} + +// + +function CanvasRenderer() { + + console.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' ); + + this.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + this.clear = function () {}; + this.render = function () {}; + this.setClearColor = function () {}; + this.setSize = function () {}; + +} + + + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarViewer_js__ = __webpack_require__(2); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_dat_gui__ = __webpack_require__(8); +// var THREE = require('three'); +// THREE.OrbitControls = require('three-orbit-controls')(THREE); +// THREE.GLTFLoader = require('./GLTFLoader.js')(THREE); + + +// import {mergeGLTFAvatar} from './GLTFAvatarMerge.js'; +// import {fileSave} from './lib/makeglb.js'; + + + + +var viewer = new __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarViewer_js__["b" /* Viewer */](); + + +// viewer.init(); +// document.getElementById('container').appendChild(viewer.canvas); + + + + + + +var AvatarControl = function() { + this.skeleton = 'mixamo'; + this.skin = { + hair: 'maid', + clothes: 'maid-dress', + + face: 'saber' + }; + + // skeleton animations + this.animations = 'null'; + + this.mergeAndExport = function() { + viewer.mergeAndExport(); + }; +}; + + +var control = new AvatarControl(); + +var gui = new __WEBPACK_IMPORTED_MODULE_1_dat_gui__["a" /* default */].GUI(); + +// var skeletonControl = gui.add(control, 'skeleton', ['mixamo', 'stand-pose']); // TODO: get repo from avatar system +var skeletonControl = gui.add(control, 'skeleton', Object.keys(__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarViewer_js__["a" /* AvatarSystem */].repo.skeletons)); // TODO: get repo from avatar system +skeletonControl.onChange(function(value) { + // console.log(value); + viewer.selectSkeleton(value); +}); + + +var animationFolder = gui.addFolder('animations'); +animationFolder.open(); + +var visibilityFolder = gui.addFolder('visibility-control'); +var visibilityToggles = []; +var visibilityValues = {}; + +// var animationControl; +var animationToggles = []; +viewer.skeletonUpdateCallback = function(key) { + // if ( animationControl ) animationFolder.remove(animationControl); + // animationControl = animationFolder.add(control, 'animations', viewer.skeletonAnimations); + + // animationControl.onChange(function(value) { + // if ( viewer.skeletonAnimations.length > 0) { + // control.animations = viewer.skeletonAnimations[0]; + + // for (var i = 0, len = viewer.skeletonAnimations.length; i < len; i++) { + // if (value == viewer.skeletonAnimations[i]) { + // viewer.playAnimation(i); + // } + // } + + // animationControl.updateDisplay(); + // } + + // }); + + + for (var i = 0, len = animationToggles.length; i < len; i++) { + animationFolder.remove(animationToggles[i]); + } + animationToggles = []; + for (var key in viewer.skeletonActionStates) { + var toggle = animationFolder.add(viewer.skeletonActionStates, key); + toggle.onChange((function() { + var k = key; + return function(v) { + viewer.playAnimationMixing(k, v); + }; + })()); + animationToggles.push(toggle); + } + + + for (var i = 0, len = visibilityToggles.length; i < len; i++) { + visibilityFolder.remove(visibilityToggles[i]); + } + visibilityToggles = []; + visibilityValues = {}; + // for (var id in viewer.skeletonVisibilityId2Name) { + for (var id = 1, len = viewer.skeletonVisibilityId2Name.length; id < len; id++) { + // if (id === 0) continue; + + visibilityValues[id] = true; + + var toggle = visibilityFolder.add(visibilityValues, id).name(id + ' ' + viewer.skeletonVisibilityId2Name[id]); + + toggle.onChange((function() { + var i = id; + return function(v) { + viewer.updateVisibilityValue(i, v); + }; + })()); + + + toggle.listen(); + + visibilityToggles.push(toggle); + } + +}; + + +viewer.skinUpdateCallback = function(type, key) { + var array = viewer.getVisibilityArray(); + for (var i = 0, len = array.length; i < len; i++) { + visibilityValues[i] = array[i] === 255 ? true : false; + } +}; + + + + +var skinFolder = gui.addFolder('skins'); +skinFolder.open(); + +// skinFolder.add(control.skin, 'hair', Object.keys(AvatarSystem.repo.hair)).onChange(function(value) { +// viewer.selectSkin('hair', value); +// }); +// skinFolder.add(control.skin, 'clothes', Object.keys(AvatarSystem.repo.clothes)).onChange(function(value) { +// viewer.selectSkin('clothes', value); +// }); + +function getSelectSkinFunc(cat) { + var c = cat; + return function(value) { + viewer.selectSkin(c, value); + }; +} + +for (var cat in control.skin) { + skinFolder.add(control.skin, cat, Object.keys(__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarViewer_js__["a" /* AvatarSystem */].repo[cat])).onChange( + getSelectSkinFunc(cat) + ); +} + + +gui.add(control, 'mergeAndExport'); + + + +// viewer.init(document.getElementById('canvas')); +viewer.init(); + + + + + +/***/ }), +/* 2 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Viewer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return AvatarSystem; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__GLTFAvatarMerge_js__ = __webpack_require__(6); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_makeglb_js__ = __webpack_require__(7); +var THREE = __webpack_require__(0); +THREE.OrbitControls = __webpack_require__(3)(THREE); +THREE.GLTFLoader = __webpack_require__(4)(THREE); + + + + + +var clock = new THREE.Clock(); + + + + +function Viewer(preserveDrawingBuffer) { + + // for canvas snapshot purpose + this.preserveDrawingBuffer = preserveDrawingBuffer || false; + + // this.container = null; + this.canvas = null; + this.fullWindow = true; + + this.skeletonMixer = null; + this.skinMixers = []; // animation mixer for skin files + + this.gltf_skeleton = null; + + this.renderer = null; + this.scene = null; + this.camera = null; + this.orbitControls = null; + + this.loader = null; + + + this.skeletonAnimations = []; // temp for control block, just animation name || id + this.skeletonClips = {}; // for mixing + this.skeletonActionStates = {}; // true or false + // // exposed for gui + // this.control = { + + // }; + + this.skeletonUpdateCallback = null; // (key) => void + this.skinUpdateCallback = null; // (cat, key) => void +} + +// Viewer.prototype.setCanvas = function(canvas) { +// this.canvas; +// }; + +Viewer.prototype.init = function(canvas) { + + + + if (canvas) { + this.canvas = canvas; + this.fullWindow = false; + this.renderer = new THREE.WebGLRenderer( + { + canvas: this.canvas, + antialias: true, + preserveDrawingBuffer: this.preserveDrawingBuffer + } + ); + } else { + this.renderer = new THREE.WebGLRenderer( { + antialias: true , + preserveDrawingBuffer: this.preserveDrawingBuffer + } ); + this.canvas = this.renderer.domElement; + this.fullWindow = true; + this.canvas.width = window.innerWidth; + this.canvas.height = window.innerHeight; + this.renderer.setSize( window.innerWidth, window.innerHeight ); // test + document.getElementById('container').appendChild(this.canvas); + } + + + // this.camera = new THREE.PerspectiveCamera( 45, container.offsetWidth / container.offsetHeight, 0.001, 1000 ); + + + // this.renderer.setSize( this.canvas.width, this.canvas.height ); // test + this.camera = new THREE.PerspectiveCamera( 45, this.canvas.width / this.canvas.height, 0.01, 100 ); + + this.renderer.setPixelRatio(window.devicePixelRatio); + // this.renderer.setPixelRatio(this.canvas.width / this.canvas.height); + + // this.renderer.setSize( window.innerWidth, window.innerHeight ); + // this.renderer.setSize( container.width, container.height ); + + // scene info: add light, add ground, shadow + + this.loader = new THREE.GLTFLoader(); + this.orbitControls = new THREE.OrbitControls(this.camera, this.renderer.domElement); + + + this.onWindowResize(); + window.addEventListener( 'resize', this.onWindowResize.bind(this), false ); + + + this.initScene(); + + + // this.selectSkeleton('mixamo'); + this.selectSkeleton(Object.keys(__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].repo.skeletons)[0]); + + this.animate(); + +}; + +Viewer.prototype.initScene = function () { + this.scene = new THREE.Scene(); + this.scene.background = new THREE.Color( 0x222222 ); + + this.scene.add(this.camera); + // test add lights + var ambient = new THREE.AmbientLight( 0x222222 ); + this.scene.add( ambient ); + var directionalLight = new THREE.DirectionalLight( 0xdddddd ); + directionalLight.position.set( 1, 1, 1 ).normalize(); + this.scene.add( directionalLight ); + + var spot1 = new THREE.SpotLight( 0xffffff, 1 ); + // spot1.position.set( 10, 20, 10 ); + spot1.position.set( 10, 20, -30 ); + spot1.angle = 0.25; + spot1.distance = 1024; + spot1.penumbra = 0.75; + // if ( sceneInfo.shadows ) { + // spot1.castShadow = true; + // spot1.shadow.bias = 0.0001; + // spot1.shadow.mapSize.width = 2048; + // spot1.shadow.mapSize.height = 2048; + // } + this.scene.add( spot1 ); +}; + +Viewer.prototype.cleanup = function() { + if (this.skeletonMixer) { + this.skeletonMixer.stopAllAction(); + this.skeletonMixer = null; + } + + if (this.skinMixers) { + for (var i = 0, len = this.skinMixers.length; i < len; i++) { + this.skinMixers[i].stopAllAction(); + } + this.skinMixers = []; + } + + if (this.scene) { + for (var i = 0, len = this.scene.children.length; i < len; i++) { + this.scene.remove(this.scene.children[i]); + } + } + + this.initScene(); + +}; + +var onWindowResize = Viewer.prototype.onWindowResize = function() { + + // var i, len = cameras.length; + // for (i = 0; i < len; i++) { // just do it for default + // cameras[i].aspect = container.offsetWidth / container.offsetHeight; + // cameras[i].updateProjectionMatrix(); + // } + // renderer.setSize( window.innerWidth, window.innerHeight ); + if (this.fullWindow) { + this.renderer.setSize( window.innerWidth, window.innerHeight ); + } else { + this.renderer.setSize(this.canvas.width, this.canvas.height); + } + + this.camera.aspect = this.canvas.width / this.canvas.height; + this.camera.updateProjectionMatrix(); +}; + +var animate = Viewer.prototype.animate = function() { + requestAnimationFrame( this.animate.bind(this) ); + // requestAnimationFrame( animate ); + + var delta = clock.getDelta(); + + if (this.skeletonMixer) { + this.skeletonMixer.update(delta); + } + + for (var i = 0, len = this.skinMixers.length; i < len; i++) { + this.skinMixers[i].update(delta); + } + + // if (cameraIndex == 0) + // orbitControls.update(); + this.orbitControls.update(); + + // render(); + this.renderer.render(this.scene, this.camera); +}; + +// TODO: get envmap + +// skeleton animation +Viewer.prototype.playAnimation = function(index) { + if (this.skeletonMixer) { + this.skeletonMixer.stopAllAction(); + this.skeletonMixer.clipAction(this.gltf_skeleton.animations[index]).play(); + } +}; + +// skeleton animation +Viewer.prototype.playAnimationMixing = function(key, isPlaying) { + if (this.skeletonMixer) { + var action = this.skeletonMixer.clipAction(this.skeletonClips[key]); + action.setEffectiveTimeScale(1); + isPlaying ? action.play() : action.stop(); + } +}; + +Viewer.prototype.updateVisibilityArray = function(v, v1) { + for (var i = 0, len = v1.length; i < len; i++) { + v[i] = v1[i] ? v[i] : 0; + } + + // // gl_avatar_linked_skeleton.visibilityLUT.data = gl_avatar_linked_skeleton.visibility; + // for (var i, len = v.length; i < len; i++) { + // gl_avatar_linked_skeleton.visibilityLUT.image.data[i] = v[i] * 255; + // } + this.gltf_skeleton.gl_avatar.visibilityLUT.needsUpdate = true; +}; + +Viewer.prototype.updateVisibilityValue = function(id, value) { + this.gltf_skeleton.gl_avatar.visibility[id] = value ? 255 : 0; + + + this.gltf_skeleton.gl_avatar.visibilityLUT.needsUpdate = true; +}; + +Viewer.prototype.getVisibilityArray = function() { + return this.gltf_skeleton.gl_avatar.visibility; +}; + +Viewer.prototype.selectSkin = function(type, key, uri) { + + if (!uri) { + // skin from repo + uri = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].repo[type][key]; + } + + // var uri = glAvatarSystem.repo[type][key]; + + // console.log(glAvatarSystem); + if (__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].isLoaded(type, key)) { + this.skinOnload(type, key, __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[type][key].gltf); + } else { + var self = this; + this.loader.setGlAvatarOfLinkingSkeleton(this.gltf_skeleton.gl_avatar); + this.loader.load( uri, function(data, json, bins, imgs) { + // glAvatarSystem.accessories[type][key] = data; + // console.log(bins); + // console.log(imgs); + + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[type][key] = { + gltf: data, + + json: json, + bins: bins, + imgs: imgs + }; + // TODO + self.skinOnload(type, key, data); + }, undefined, function ( error ) { + console.error( error ); + } ); + } + +}; + +Viewer.prototype.skinOnload = function(type, key, data) { + var c = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[type]; + + var skinMixers = this.skinMixers; + + if (key === c.name) { + console.log('same ' + type); + return; + } + + + // remove current replaced accessory + if (c.scene) { + // delete previous component + c.scene.parent.remove(c.scene); + if (c.scene.attach_child) { + console.log('has attach child (sub skeleton or rigid bind)'); + c.scene.attach_child.parent.remove(c.scene.attach_child); + } + + if (c.scene.skinMixer) { + // c.scene.skinMixer.stopAllAction(); + + for ( var i = 0, len = skinMixers.length; i < len; i ++ ) { + if (skinMixers[i] == c.scene.skinMixer) { + // remove the skin mixer for previous skin file, if exists + skinMixers.splice(i, 1); + break; + } + } + } + + // refresh visibility array + this.gltf_skeleton.gl_avatar.visibility.fill(255); + for (var t in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories) { + if (t !== type && __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[t].scene) { + var a = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[t]; + this.updateVisibilityArray(this.gltf_skeleton.gl_avatar.visibility, __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[t][a.name].gltf.gl_avatar.visibility); + } + } + } + + // -------------------------- + + // update current new skin file + if (this.loader.enableGLTFAvatar) { + this.updateVisibilityArray(this.gltf_skeleton.gl_avatar.visibility, data.gl_avatar.visibility); + } + + // gltf = data; + var gltf = data; + var object = gltf.scene; + + c.name = key; + c.scene = object; + + // status.innerHTML = "Load time: " + ( performance.now() - loadStartTime ).toFixed( 2 ) + " ms."; + + // temp + // console.log(gltf_skeleton); + + + object.traverse( function ( node ) { + if ( node.isMesh ) node.castShadow = true; + } ); + + + // rigid bind, if any + if (object.attach_child) { + // assume attach_child has gl_avatar_base_root + object.attach_child.gl_avatar_base_root.add(object.attach_child); + object.attach_child.updateMatrixWorld(); + // object.attach_child.updateMatrix(); + } + + + + // var optionalSceneRoot = gltf_skeleton.gl_avatar.nodes['head-end'].children[0]; // point to lily hair root try + + if (!object.skinMixer) { + var animations = gltf.animations; + if ( animations && animations.length ) { + // var mixer = new THREE.AnimationMixer( object ); + // var mixer = new THREE.AnimationMixer( optionalSceneRoot ); + var mixer = new THREE.AnimationMixer( object.attach_child || object ); + + for ( var i = 0, len = animations.length; i < len; i ++ ) { + var animation = animations[ i ]; + // mixer.clipAction( animation, optionalSceneRoot ).play(); + mixer.clipAction( animation ).play(); + } + + // temp: assuming only one mixer + skinMixers.push(mixer); + object.skinMixer = mixer; + } + } + else { + var m = object.skinMixer; + // for ( var i = 0, len = m._actions.length; i < len; i ++ ) { + // m._actions[i].play(); + // } + skinMixers.push(m); + // // console.log(m); + } + + + this.scene.add(object); + object.updateMatrixWorld(); + // object.updateMatrix(); + // object.children[0].updateMatrix(); + + // this.onWindowResize(); + + if (this.skinUpdateCallback) { + this.skinUpdateCallback(type, key); + } +}; + + + + + + + + +Viewer.prototype.selectSkeleton = function(key, uri) { + var info = null; + if (!uri) { + // uri = glAvatarSystem.repo.skeletons[key].url; + info = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].repo.skeletons[key]; + uri = info.url; + } + + + + + + // scene, mixer, cleanup + var self = this; + + this.loader.load( uri, function(data, json, bins, imgs) { + // glAvatarSystem.accessories[type][key] = data; + // console.log(bins); + // console.log(imgs); + + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].skeletons[key] = { + gltf: data, + + json: json, + bins: bins, + imgs: imgs + }; + + + self.cleanup(); + + // camera setting + if (info) { + self.camera.position.copy(info.cameraPos); + self.orbitControls.target.copy(info.center); + data.scene.rotation.copy(info.objectRotation); + + // self.skeletonOnLoad(key, data); + + + } + + self.skeletonOnLoad(key, data); + + if (info) { + for (var key in info.skins) { + var skin = info.skins[key]; + if (skin) { + self.selectSkin(key, info.skins[key]); + } + } + } + + + }, undefined, function ( error ) { + console.error( error ); + } ); +}; + + +Viewer.prototype.skeletonOnLoad = function(key, data) { + var gltf = data; + + this.gltf_skeleton = gltf; + + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curSkeleton.name = key; + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curSkeleton.scene = gltf.scene; + + // clear accessories (TODO: these logic should go into gltfavatarsystem) + for (var cat in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories) { + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[cat].name = null; + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[cat].scene = null; + } + + for (var cat in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories) { + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[cat] = {}; + } + + // animations + var animations = gltf.animations; + if ( animations && animations.length ) { + + + // TODO: gui interface + // removeOptions(animationSelector); + this.skeletonAnimations = []; // for control block + + this.skeletonClips = {}; + this.skeletonActionStates = {}; + this.skeletonVisibilityId2Name = gltf.gl_avatar.visibilityId2Name || []; + // this.skeletonActionStates = new Map(); + + this.skeletonMixer = new THREE.AnimationMixer( gltf.scene ); + for ( var i = 0; i < animations.length; i ++ ) { + var animation = animations[ i ]; + // var o = document.createElement('option'); + // o.text = animation.name || i; + // animationSelector.add(o); + this.skeletonAnimations.push(animation.name || i.toFixed()); + + + // clips mixing + var key = animation.name || i; + this.skeletonActionStates[key] = false; + this.skeletonClips[key] = animation; + + if (i === 0) { + this.skeletonActionStates[key] = true; + this.playAnimationMixing(key, true); + } + } + + // this.playAnimation(0); + } + this.scene.add( gltf.scene ); + + if (this.skeletonUpdateCallback) { + this.skeletonUpdateCallback(key); + } +}; + + +Viewer.prototype.mergeAndExport = function() { + var skinArray = []; + + for (var cat in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories) { + var c = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[cat]; + if (c.name) { + skinArray.push(__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[cat][c.name]); + } + } + + var merged = Object(__WEBPACK_IMPORTED_MODULE_1__GLTFAvatarMerge_js__["a" /* mergeGLTFAvatar */])( + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].skeletons[__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curSkeleton.name], + skinArray + ); + + Object(__WEBPACK_IMPORTED_MODULE_2__lib_makeglb_js__["a" /* fileSave */])(merged.json, merged.bins, merged.imgs); +}; + + +var AvatarSystem = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */]; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + +module.exports = function( THREE ) { + /** + * @author qiao / https://github.com/qiao + * @author mrdoob / http://mrdoob.com + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author erich666 / http://erichaines.com + */ + +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// +// Orbit - left mouse / touch: one finger move +// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish +// Pan - right mouse, or arrow keys / touch: three finter swipe + + function OrbitControls( object, domElement ) { + + this.object = object; + + this.domElement = ( domElement !== undefined ) ? domElement : document; + + // Set to false to disable this control + this.enabled = true; + + // "target" sets the location of focus, where the object orbits around + this.target = new THREE.Vector3(); + + // How far you can dolly in and out ( PerspectiveCamera only ) + this.minDistance = 0; + this.maxDistance = Infinity; + + // How far you can zoom in and out ( OrthographicCamera only ) + this.minZoom = 0; + this.maxZoom = Infinity; + + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians + + // How far you can orbit horizontally, upper and lower limits. + // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ]. + this.minAzimuthAngle = - Infinity; // radians + this.maxAzimuthAngle = Infinity; // radians + + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + this.enableDamping = false; + this.dampingFactor = 0.25; + + // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + this.enableZoom = true; + this.zoomSpeed = 1.0; + + // Set to false to disable rotating + this.enableRotate = true; + this.rotateSpeed = 1.0; + + // Set to false to disable panning + this.enablePan = true; + this.keyPanSpeed = 7.0; // pixels moved per arrow key push + + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + + // Set to false to disable use of the keys + this.enableKeys = true; + + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + + // Mouse buttons + this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT }; + + // for reset + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + + // + // public methods + // + + this.getPolarAngle = function () { + + return spherical.phi; + + }; + + this.getAzimuthalAngle = function () { + + return spherical.theta; + + }; + + this.reset = function () { + + scope.target.copy( scope.target0 ); + scope.object.position.copy( scope.position0 ); + scope.object.zoom = scope.zoom0; + + scope.object.updateProjectionMatrix(); + scope.dispatchEvent( changeEvent ); + + scope.update(); + + state = STATE.NONE; + + }; + + // this method is exposed, but perhaps it would be better if we can make it private... + this.update = function() { + + var offset = new THREE.Vector3(); + + // so camera.up is the orbit axis + var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) ); + var quatInverse = quat.clone().inverse(); + + var lastPosition = new THREE.Vector3(); + var lastQuaternion = new THREE.Quaternion(); + + return function update () { + + var position = scope.object.position; + + offset.copy( position ).sub( scope.target ); + + // rotate offset to "y-axis-is-up" space + offset.applyQuaternion( quat ); + + // angle from z-axis around y-axis + spherical.setFromVector3( offset ); + + if ( scope.autoRotate && state === STATE.NONE ) { + + rotateLeft( getAutoRotationAngle() ); + + } + + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + + // restrict theta to be between desired limits + spherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) ); + + // restrict phi to be between desired limits + spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) ); + + spherical.makeSafe(); + + + spherical.radius *= scale; + + // restrict radius to be between desired limits + spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) ); + + // move target to panned location + scope.target.add( panOffset ); + + offset.setFromSpherical( spherical ); + + // rotate offset back to "camera-up-vector-is-up" space + offset.applyQuaternion( quatInverse ); + + position.copy( scope.target ).add( offset ); + + scope.object.lookAt( scope.target ); + + if ( scope.enableDamping === true ) { + + sphericalDelta.theta *= ( 1 - scope.dampingFactor ); + sphericalDelta.phi *= ( 1 - scope.dampingFactor ); + + } else { + + sphericalDelta.set( 0, 0, 0 ); + + } + + scale = 1; + panOffset.set( 0, 0, 0 ); + + // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + + if ( zoomChanged || + lastPosition.distanceToSquared( scope.object.position ) > EPS || + 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) { + + scope.dispatchEvent( changeEvent ); + + lastPosition.copy( scope.object.position ); + lastQuaternion.copy( scope.object.quaternion ); + zoomChanged = false; + + return true; + + } + + return false; + + }; + + }(); + + this.dispose = function() { + + scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false ); + scope.domElement.removeEventListener( 'mousedown', onMouseDown, false ); + scope.domElement.removeEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.removeEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.removeEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.removeEventListener( 'touchmove', onTouchMove, false ); + + document.removeEventListener( 'mousemove', onMouseMove, false ); + document.removeEventListener( 'mouseup', onMouseUp, false ); + + window.removeEventListener( 'keydown', onKeyDown, false ); + + //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + + }; + + // + // internals + // + + var scope = this; + + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; + + var STATE = { NONE : - 1, ROTATE : 0, DOLLY : 1, PAN : 2, TOUCH_ROTATE : 3, TOUCH_DOLLY : 4, TOUCH_PAN : 5 }; + + var state = STATE.NONE; + + var EPS = 0.000001; + + // current position in spherical coordinates + var spherical = new THREE.Spherical(); + var sphericalDelta = new THREE.Spherical(); + + var scale = 1; + var panOffset = new THREE.Vector3(); + var zoomChanged = false; + + var rotateStart = new THREE.Vector2(); + var rotateEnd = new THREE.Vector2(); + var rotateDelta = new THREE.Vector2(); + + var panStart = new THREE.Vector2(); + var panEnd = new THREE.Vector2(); + var panDelta = new THREE.Vector2(); + + var dollyStart = new THREE.Vector2(); + var dollyEnd = new THREE.Vector2(); + var dollyDelta = new THREE.Vector2(); + + function getAutoRotationAngle() { + + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + + } + + function getZoomScale() { + + return Math.pow( 0.95, scope.zoomSpeed ); + + } + + function rotateLeft( angle ) { + + sphericalDelta.theta -= angle; + + } + + function rotateUp( angle ) { + + sphericalDelta.phi -= angle; + + } + + var panLeft = function() { + + var v = new THREE.Vector3(); + + return function panLeft( distance, objectMatrix ) { + + v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix + v.multiplyScalar( - distance ); + + panOffset.add( v ); + + }; + + }(); + + var panUp = function() { + + var v = new THREE.Vector3(); + + return function panUp( distance, objectMatrix ) { + + v.setFromMatrixColumn( objectMatrix, 1 ); // get Y column of objectMatrix + v.multiplyScalar( distance ); + + panOffset.add( v ); + + }; + + }(); + + // deltaX and deltaY are in pixels; right and down are positive + var pan = function() { + + var offset = new THREE.Vector3(); + + return function pan ( deltaX, deltaY ) { + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + if ( scope.object instanceof THREE.PerspectiveCamera ) { + + // perspective + var position = scope.object.position; + offset.copy( position ).sub( scope.target ); + var targetDistance = offset.length(); + + // half of the fov is center to top of screen + targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 ); + + // we actually don't use screenWidth, since perspective camera is fixed to screen height + panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix ); + panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix ); + + } else if ( scope.object instanceof THREE.OrthographicCamera ) { + + // orthographic + panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix ); + panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix ); + + } else { + + // camera neither orthographic nor perspective + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); + scope.enablePan = false; + + } + + }; + + }(); + + function dollyIn( dollyScale ) { + + if ( scope.object instanceof THREE.PerspectiveCamera ) { + + scale /= dollyScale; + + } else if ( scope.object instanceof THREE.OrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + function dollyOut( dollyScale ) { + + if ( scope.object instanceof THREE.PerspectiveCamera ) { + + scale *= dollyScale; + + } else if ( scope.object instanceof THREE.OrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + // + // event callbacks - update the object state + // + + function handleMouseDownRotate( event ) { + + //console.log( 'handleMouseDownRotate' ); + + rotateStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownDolly( event ) { + + //console.log( 'handleMouseDownDolly' ); + + dollyStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownPan( event ) { + + //console.log( 'handleMouseDownPan' ); + + panStart.set( event.clientX, event.clientY ); + + } + + function handleMouseMoveRotate( event ) { + + //console.log( 'handleMouseMoveRotate' ); + + rotateEnd.set( event.clientX, event.clientY ); + rotateDelta.subVectors( rotateEnd, rotateStart ); + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + // rotating across whole screen goes 360 degrees around + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed ); + + // rotating up and down along whole screen attempts to go 360, but limited to 180 + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed ); + + rotateStart.copy( rotateEnd ); + + scope.update(); + + } + + function handleMouseMoveDolly( event ) { + + //console.log( 'handleMouseMoveDolly' ); + + dollyEnd.set( event.clientX, event.clientY ); + + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + dollyIn( getZoomScale() ); + + } else if ( dollyDelta.y < 0 ) { + + dollyOut( getZoomScale() ); + + } + + dollyStart.copy( dollyEnd ); + + scope.update(); + + } + + function handleMouseMovePan( event ) { + + //console.log( 'handleMouseMovePan' ); + + panEnd.set( event.clientX, event.clientY ); + + panDelta.subVectors( panEnd, panStart ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + scope.update(); + + } + + function handleMouseUp( event ) { + + //console.log( 'handleMouseUp' ); + + } + + function handleMouseWheel( event ) { + + //console.log( 'handleMouseWheel' ); + + if ( event.deltaY < 0 ) { + + dollyOut( getZoomScale() ); + + } else if ( event.deltaY > 0 ) { + + dollyIn( getZoomScale() ); + + } + + scope.update(); + + } + + function handleKeyDown( event ) { + + //console.log( 'handleKeyDown' ); + + switch ( event.keyCode ) { + + case scope.keys.UP: + pan( 0, scope.keyPanSpeed ); + scope.update(); + break; + + case scope.keys.BOTTOM: + pan( 0, - scope.keyPanSpeed ); + scope.update(); + break; + + case scope.keys.LEFT: + pan( scope.keyPanSpeed, 0 ); + scope.update(); + break; + + case scope.keys.RIGHT: + pan( - scope.keyPanSpeed, 0 ); + scope.update(); + break; + + } + + } + + function handleTouchStartRotate( event ) { + + //console.log( 'handleTouchStartRotate' ); + + rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } + + function handleTouchStartDolly( event ) { + + //console.log( 'handleTouchStartDolly' ); + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyStart.set( 0, distance ); + + } + + function handleTouchStartPan( event ) { + + //console.log( 'handleTouchStartPan' ); + + panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } + + function handleTouchMoveRotate( event ) { + + //console.log( 'handleTouchMoveRotate' ); + + rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + rotateDelta.subVectors( rotateEnd, rotateStart ); + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + // rotating across whole screen goes 360 degrees around + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed ); + + // rotating up and down along whole screen attempts to go 360, but limited to 180 + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed ); + + rotateStart.copy( rotateEnd ); + + scope.update(); + + } + + function handleTouchMoveDolly( event ) { + + //console.log( 'handleTouchMoveDolly' ); + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyEnd.set( 0, distance ); + + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + dollyOut( getZoomScale() ); + + } else if ( dollyDelta.y < 0 ) { + + dollyIn( getZoomScale() ); + + } + + dollyStart.copy( dollyEnd ); + + scope.update(); + + } + + function handleTouchMovePan( event ) { + + //console.log( 'handleTouchMovePan' ); + + panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + panDelta.subVectors( panEnd, panStart ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + scope.update(); + + } + + function handleTouchEnd( event ) { + + //console.log( 'handleTouchEnd' ); + + } + + // + // event handlers - FSM: listen for events and reset state + // + + function onMouseDown( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + if ( event.button === scope.mouseButtons.ORBIT ) { + + if ( scope.enableRotate === false ) return; + + handleMouseDownRotate( event ); + + state = STATE.ROTATE; + + } else if ( event.button === scope.mouseButtons.ZOOM ) { + + if ( scope.enableZoom === false ) return; + + handleMouseDownDolly( event ); + + state = STATE.DOLLY; + + } else if ( event.button === scope.mouseButtons.PAN ) { + + if ( scope.enablePan === false ) return; + + handleMouseDownPan( event ); + + state = STATE.PAN; + + } + + if ( state !== STATE.NONE ) { + + document.addEventListener( 'mousemove', onMouseMove, false ); + document.addEventListener( 'mouseup', onMouseUp, false ); + + scope.dispatchEvent( startEvent ); + + } + + } + + function onMouseMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + if ( state === STATE.ROTATE ) { + + if ( scope.enableRotate === false ) return; + + handleMouseMoveRotate( event ); + + } else if ( state === STATE.DOLLY ) { + + if ( scope.enableZoom === false ) return; + + handleMouseMoveDolly( event ); + + } else if ( state === STATE.PAN ) { + + if ( scope.enablePan === false ) return; + + handleMouseMovePan( event ); + + } + + } + + function onMouseUp( event ) { + + if ( scope.enabled === false ) return; + + handleMouseUp( event ); + + document.removeEventListener( 'mousemove', onMouseMove, false ); + document.removeEventListener( 'mouseup', onMouseUp, false ); + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onMouseWheel( event ) { + + if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return; + + event.preventDefault(); + event.stopPropagation(); + + handleMouseWheel( event ); + + scope.dispatchEvent( startEvent ); // not sure why these are here... + scope.dispatchEvent( endEvent ); + + } + + function onKeyDown( event ) { + + if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return; + + handleKeyDown( event ); + + } + + function onTouchStart( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.touches.length ) { + + case 1: // one-fingered touch: rotate + + if ( scope.enableRotate === false ) return; + + handleTouchStartRotate( event ); + + state = STATE.TOUCH_ROTATE; + + break; + + case 2: // two-fingered touch: dolly + + if ( scope.enableZoom === false ) return; + + handleTouchStartDolly( event ); + + state = STATE.TOUCH_DOLLY; + + break; + + case 3: // three-fingered touch: pan + + if ( scope.enablePan === false ) return; + + handleTouchStartPan( event ); + + state = STATE.TOUCH_PAN; + + break; + + default: + + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.dispatchEvent( startEvent ); + + } + + } + + function onTouchMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + event.stopPropagation(); + + switch ( event.touches.length ) { + + case 1: // one-fingered touch: rotate + + if ( scope.enableRotate === false ) return; + if ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?... + + handleTouchMoveRotate( event ); + + break; + + case 2: // two-fingered touch: dolly + + if ( scope.enableZoom === false ) return; + if ( state !== STATE.TOUCH_DOLLY ) return; // is this needed?... + + handleTouchMoveDolly( event ); + + break; + + case 3: // three-fingered touch: pan + + if ( scope.enablePan === false ) return; + if ( state !== STATE.TOUCH_PAN ) return; // is this needed?... + + handleTouchMovePan( event ); + + break; + + default: + + state = STATE.NONE; + + } + + } + + function onTouchEnd( event ) { + + if ( scope.enabled === false ) return; + + handleTouchEnd( event ); + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onContextMenu( event ) { + + event.preventDefault(); + + } + + // + + scope.domElement.addEventListener( 'contextmenu', onContextMenu, false ); + + scope.domElement.addEventListener( 'mousedown', onMouseDown, false ); + scope.domElement.addEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.addEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.addEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.addEventListener( 'touchmove', onTouchMove, false ); + + window.addEventListener( 'keydown', onKeyDown, false ); + + // force an update at start + + this.update(); + + }; + + OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype ); + OrbitControls.prototype.constructor = OrbitControls; + + Object.defineProperties( OrbitControls.prototype, { + + center: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .center has been renamed to .target' ); + return this.target; + + } + + }, + + // backward compatibility + + noZoom: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' ); + return ! this.enableZoom; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' ); + this.enableZoom = ! value; + + } + + }, + + noRotate: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' ); + return ! this.enableRotate; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' ); + this.enableRotate = ! value; + + } + + }, + + noPan: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' ); + return ! this.enablePan; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' ); + this.enablePan = ! value; + + } + + }, + + noKeys: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' ); + return ! this.enableKeys; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' ); + this.enableKeys = ! value; + + } + + }, + + staticMoving : { + + get: function () { + + console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' ); + return ! this.enableDamping; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' ); + this.enableDamping = ! value; + + } + + }, + + dynamicDampingFactor : { + + get: function () { + + console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' ); + return this.dampingFactor; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' ); + this.dampingFactor = value; + + } + + } + + } ); + + return OrbitControls; +}; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + +/** + * @author Rich Tibbett / https://github.com/richtr + * @author mrdoob / http://mrdoob.com/ + * @author Tony Parisi / http://www.tonyparisi.com/ + * @author Takahiro / https://github.com/takahirox + * @author Don McCurdy / https://www.donmccurdy.com + * + * modified by shrekshao for glavatar use + */ +module.exports = function( THREE ) { + + return ( function () { + + function GLTFLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; + + } + + // used by clothes file + // set by the skeleton file before loading + var gl_avatar_skeletons = null; + + // gl_avatar extension of the skeleton file + var gl_avatar_linked_skeleton = null; + + // use data texture as workaround for visibility array in webgl 1 + + + GLTFLoader.prototype = { + + enableGLTFAvatar: true, + // enableGLTFAvatar: false, + // enableGLTFAvatarPhysics: true, + + constructor: GLTFLoader, + + crossOrigin: 'Anonymous', + + setGlAvatarOfLinkingSkeleton: function(g) { + if (this.enableGLTFAvatar && g) { + gl_avatar_linked_skeleton = g; + gl_avatar_skeletons = g.skeletons; + } + }, + + // setGlAvatarSkeltonMap : function (g) { + // gl_avatar_skeletons = g; + // }, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var path = this.path && ( typeof this.path === 'string' ) ? this.path : THREE.Loader.prototype.extractUrlBase( url ); + + var loader = new THREE.FileLoader( scope.manager ); + + loader.setResponseType( 'arraybuffer' ); + + loader.load( url, function ( data ) { + + try { + + scope.parse( data, path, onLoad, onError ); + + } catch ( e ) { + + // For SyntaxError or TypeError, return a generic failure message. + onError( e.constructor === Error ? e : new Error( 'THREE.GLTFLoader: Unable to parse model.' ) ); + + } + + }, onProgress, onError ); + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + + }, + + setPath: function ( value ) { + + this.path = value; + + }, + + parse: function ( data, path, onLoad, onError ) { + + var content; + var extensions = {}; + + var magic = convertUint8ArrayToString( new Uint8Array( data, 0, 4 ) ); + + if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) { + + extensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data ); + content = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content; + + } else { + + content = convertUint8ArrayToString( new Uint8Array( data ) ); + + } + + var json = JSON.parse( content ); + + if ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) { + + onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) ); + return; + + } + + if ( json.extensionsUsed ) { + + if( json.extensionsUsed.indexOf( EXTENSIONS.GL_AVATAR ) >= 0 && this.enableGLTFAvatar) { + + extensions[ EXTENSIONS.GL_AVATAR ] = new GLTFAvatarExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_LIGHTS ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_LIGHTS ] = new GLTFLightsExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_COMMON ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] = new GLTFMaterialsCommonExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] = new GLTFMaterialsPbrSpecularGlossinessExtension(); + + } + + } + + console.time( 'GLTFLoader' ); + + var parser = new GLTFParser( json, extensions, { + + path: path || this.path, + crossOrigin: this.crossOrigin + + } ); + + parser.parse( function ( scene, scenes, cameras, animations ) { + + console.timeEnd( 'GLTFLoader' ); + + var glTF = { + scene: scene, + scenes: scenes, + cameras: cameras, + animations: animations, + + gl_avatar: parser.extensions && parser.extensions['gl_avatar'] + }; + + + + // !note: modified + + onLoad( glTF, parser.json, parser.buffers, parser.images ); + + // parser._withDependencies([ + // 'buffers', + // 'textures', + // 'nodes' + // ]).then(function(dependencies) { + // onLoad( glTF, parser.json, dependencies.buffers, dependencies.textures ); + // }); + + + + }, onError ); + + } + + }; + + /* GLTFREGISTRY */ + + function GLTFRegistry() { + + var objects = {}; + + return { + + get: function ( key ) { + + return objects[ key ]; + + }, + + add: function ( key, object ) { + + objects[ key ] = object; + + }, + + remove: function ( key ) { + + delete objects[ key ]; + + }, + + removeAll: function () { + + objects = {}; + + }, + + update: function ( scene, camera ) { + + for ( var name in objects ) { + + var object = objects[ name ]; + + if ( object.update ) { + + object.update( scene, camera ); + + } + + } + + } + + }; + + } + + /*********************************/ + /********** EXTENSIONS ***********/ + /*********************************/ + + var EXTENSIONS = { + KHR_BINARY_GLTF: 'KHR_binary_glTF', + KHR_LIGHTS: 'KHR_lights', + KHR_MATERIALS_COMMON: 'KHR_materials_common', + KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness', + GL_AVATAR: 'gl_avatar' + }; + + // var isUsingGlAvatar = false; + + var GL_AVATAR_VISIBILITY_LENGTH = 60; + + function updateVisibilityArray(v, v1) { + for (var i = 0, len = v1.length; i < len; i++) { + v[i] = v1[i] ? v[i] : 0; + } + + // // gl_avatar_linked_skeleton.visibilityLUT.data = gl_avatar_linked_skeleton.visibility; + // for (var i, len = v.length; i < len; i++) { + // gl_avatar_linked_skeleton.visibilityLUT.image.data[i] = v[i] * 255; + // } + gl_avatar_linked_skeleton.visibilityLUT.needsUpdate = true; + } + + + /** + * gl_avatar + */ + function GLTFAvatarExtension( json ) { + this.name = EXTENSIONS.GL_AVATAR; + + var extension = ( json.extensions && json.extensions[ EXTENSIONS.GL_AVATAR ] ) || {}; + + var type = this.type = extension.type || "skeleton"; + + if (type === "skeleton") { + + // parser + + this.skeletons = {}; + this.skinId2SkeletonKey = {}; + this.visibility = new Uint8Array(256).fill(255); + this.visibilityId2Name = extension.visibilityId2Name || []; + var skins = extension.skins || {}; + + // store id first, will get replaced with skeleton object in parser + for (var s in skins) { + this.skeletons[s] = skins[s]; + this.skinId2SkeletonKey[skins[s]] = s; + } + + + // reference to node + // may attach sub skeleton + var nodes = extension.nodes || {}; + this.nodes = {}; + this.nodeId2Name = {}; + // store id first, will get replaced with real object in parser + for (var n in nodes) { + this.nodes[n] = nodes[n]; + this.nodeId2Name[ nodes[n] ] = n; + } + + } else { + // must be skin (clothes) + if (!gl_avatar_skeletons) { + console.error('gl avatar linking skeletons not set!'); + } + this.visibility = extension.visibility; + + + // put linkedSkeletons to skins + json.skins = json.skins || []; + + if (extension.linkedSkeletons) { + var ls; + for (var i = 0, len = extension.linkedSkeletons.length; i < len; i++) { + ls = extension.linkedSkeletons[i]; + json.skins.push({ + // 'gl_avatar': json.skins.length, + 'gl_avatar': 1, + 'skeleton': ls.skeleton, + 'inverseBindMatrices': ls.inverseBindMatrices, + 'joints': [] + }); + } + } + + + + } + } + + + + /** + * Lights Extension + * + * Specification: PENDING + */ + function GLTFLightsExtension( json ) { + + this.name = EXTENSIONS.KHR_LIGHTS; + + this.lights = {}; + + var extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {}; + var lights = extension.lights || {}; + + for ( var lightId in lights ) { + + var light = lights[ lightId ]; + var lightNode; + + var color = new THREE.Color().fromArray( light.color ); + + switch ( light.type ) { + + case 'directional': + lightNode = new THREE.DirectionalLight( color ); + lightNode.position.set( 0, 0, 1 ); + break; + + case 'point': + lightNode = new THREE.PointLight( color ); + break; + + case 'spot': + lightNode = new THREE.SpotLight( color ); + lightNode.position.set( 0, 0, 1 ); + break; + + case 'ambient': + lightNode = new THREE.AmbientLight( color ); + break; + + } + + if ( lightNode ) { + + if ( light.constantAttenuation !== undefined ) { + + lightNode.intensity = light.constantAttenuation; + + } + + if ( light.linearAttenuation !== undefined ) { + + lightNode.distance = 1 / light.linearAttenuation; + + } + + if ( light.quadraticAttenuation !== undefined ) { + + lightNode.decay = light.quadraticAttenuation; + + } + + if ( light.fallOffAngle !== undefined ) { + + lightNode.angle = light.fallOffAngle; + + } + + if ( light.fallOffExponent !== undefined ) { + + console.warn( 'THREE.GLTFLoader:: light.fallOffExponent not currently supported.' ); + + } + + lightNode.name = light.name || ( 'light_' + lightId ); + this.lights[ lightId ] = lightNode; + + } + + } + + } + + /** + * Common Materials Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_common + */ + function GLTFMaterialsCommonExtension( json ) { + + this.name = EXTENSIONS.KHR_MATERIALS_COMMON; + + } + + GLTFMaterialsCommonExtension.prototype.getMaterialType = function ( material ) { + + var khrMaterial = material.extensions[ this.name ]; + + switch ( khrMaterial.type ) { + + case 'commonBlinn' : + case 'commonPhong' : + return THREE.MeshPhongMaterial; + + case 'commonLambert' : + return THREE.MeshLambertMaterial; + + case 'commonConstant' : + default : + return THREE.MeshBasicMaterial; + + } + + }; + + GLTFMaterialsCommonExtension.prototype.extendParams = function ( materialParams, material, parser ) { + + var khrMaterial = material.extensions[ this.name ]; + + var pending = []; + + var keys = []; + + // TODO: Currently ignored: 'ambientFactor', 'ambientTexture' + switch ( khrMaterial.type ) { + + case 'commonBlinn' : + case 'commonPhong' : + keys.push( 'diffuseFactor', 'diffuseTexture', 'specularFactor', 'specularTexture', 'shininessFactor' ); + break; + + case 'commonLambert' : + keys.push( 'diffuseFactor', 'diffuseTexture' ); + break; + + case 'commonConstant' : + default : + break; + + } + + var materialValues = {}; + + keys.forEach( function( v ) { + + if ( khrMaterial[ v ] !== undefined ) materialValues[ v ] = khrMaterial[ v ]; + + } ); + + if ( materialValues.diffuseFactor !== undefined ) { + + materialParams.color = new THREE.Color().fromArray( materialValues.diffuseFactor ); + materialParams.opacity = materialValues.diffuseFactor[ 3 ]; + + } + + if ( materialValues.diffuseTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', materialValues.diffuseTexture.index ) ); + + } + + if ( materialValues.specularFactor !== undefined ) { + + materialParams.specular = new THREE.Color().fromArray( materialValues.specularFactor ); + + } + + if ( materialValues.specularTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'specularMap', materialValues.specularTexture.index ) ); + + } + + if ( materialValues.shininessFactor !== undefined ) { + + materialParams.shininess = materialValues.shininessFactor; + + } + + return Promise.all( pending ); + + }; + + /* BINARY EXTENSION */ + + var BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF'; + var BINARY_EXTENSION_HEADER_MAGIC = 'glTF'; + var BINARY_EXTENSION_HEADER_LENGTH = 12; + var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 }; + + function GLTFBinaryExtension( data ) { + + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + + var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH ); + + this.header = { + magic: convertUint8ArrayToString( new Uint8Array( data.slice( 0, 4 ) ) ), + version: headerView.getUint32( 4, true ), + length: headerView.getUint32( 8, true ) + }; + + if ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) { + + throw new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' ); + + } else if ( this.header.version < 2.0 ) { + + throw new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use GLTFLoader instead.' ); + + } + + var chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH ); + var chunkIndex = 0; + + while ( chunkIndex < chunkView.byteLength ) { + + var chunkLength = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + var chunkType = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) { + + var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength ); + this.content = convertUint8ArrayToString( contentArray ); + + } else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) { + + var byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data.slice( byteOffset, byteOffset + chunkLength ); + + } + + // Clients must ignore chunks with unknown types. + + chunkIndex += chunkLength; + + } + + if ( this.content === null ) { + + throw new Error( 'THREE.GLTFLoader: JSON content not found.' ); + + } + + } + + /** + * Specular-Glossiness Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_pbrSpecularGlossiness + */ + function GLTFMaterialsPbrSpecularGlossinessExtension() { + + return { + + name: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, + + getMaterialType: function () { + + return THREE.ShaderMaterial; + + }, + + extendParams: function ( params, material, parser ) { + + var pbrSpecularGlossiness = material.extensions[ this.name ]; + + var shader = THREE.ShaderLib[ 'standard' ]; + + var uniforms = THREE.UniformsUtils.clone( shader.uniforms ); + + var specularMapParsFragmentChunk = [ + '#ifdef USE_SPECULARMAP', + ' uniform sampler2D specularMap;', + '#endif' + ].join( '\n' ); + + var glossinessMapParsFragmentChunk = [ + '#ifdef USE_GLOSSINESSMAP', + ' uniform sampler2D glossinessMap;', + '#endif' + ].join( '\n' ); + + var specularMapFragmentChunk = [ + 'vec3 specularFactor = specular;', + '#ifdef USE_SPECULARMAP', + ' vec4 texelSpecular = texture2D( specularMap, vUv );', + ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' specularFactor *= texelSpecular.rgb;', + '#endif' + ].join( '\n' ); + + var glossinessMapFragmentChunk = [ + 'float glossinessFactor = glossiness;', + '#ifdef USE_GLOSSINESSMAP', + ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );', + ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' glossinessFactor *= texelGlossiness.a;', + '#endif' + ].join( '\n' ); + + var lightPhysicalFragmentChunk = [ + 'PhysicalMaterial material;', + 'material.diffuseColor = diffuseColor.rgb;', + 'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );', + 'material.specularColor = specularFactor.rgb;', + ].join( '\n' ); + + var fragmentShader = shader.fragmentShader + .replace( '#include ', '' ) + .replace( 'uniform float roughness;', 'uniform vec3 specular;' ) + .replace( 'uniform float metalness;', 'uniform float glossiness;' ) + .replace( '#include ', specularMapParsFragmentChunk ) + .replace( '#include ', glossinessMapParsFragmentChunk ) + .replace( '#include ', specularMapFragmentChunk ) + .replace( '#include ', glossinessMapFragmentChunk ) + .replace( '#include ', lightPhysicalFragmentChunk ); + + delete uniforms.roughness; + delete uniforms.metalness; + delete uniforms.roughnessMap; + delete uniforms.metalnessMap; + + uniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) }; + uniforms.glossiness = { value: 0.5 }; + uniforms.specularMap = { value: null }; + uniforms.glossinessMap = { value: null }; + + params.vertexShader = shader.vertexShader; + params.fragmentShader = fragmentShader; + params.uniforms = uniforms; + params.defines = { 'STANDARD': '' }; + + params.color = new THREE.Color( 1.0, 1.0, 1.0 ); + params.opacity = 1.0; + + var pending = []; + + if ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) { + + var array = pbrSpecularGlossiness.diffuseFactor; + + params.color.fromArray( array ); + params.opacity = array[ 3 ]; + + } + + if ( pbrSpecularGlossiness.diffuseTexture !== undefined ) { + + pending.push( parser.assignTexture( params, 'map', pbrSpecularGlossiness.diffuseTexture.index ) ); + + } + + params.emissive = new THREE.Color( 0.0, 0.0, 0.0 ); + params.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0; + params.specular = new THREE.Color( 1.0, 1.0, 1.0 ); + + if ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) { + + params.specular.fromArray( pbrSpecularGlossiness.specularFactor ); + + } + + if ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) { + + var specGlossIndex = pbrSpecularGlossiness.specularGlossinessTexture.index; + pending.push( parser.assignTexture( params, 'glossinessMap', specGlossIndex ) ); + pending.push( parser.assignTexture( params, 'specularMap', specGlossIndex ) ); + + } + + return Promise.all( pending ); + + }, + + createMaterial: function ( params ) { + + // setup material properties based on MeshStandardMaterial for Specular-Glossiness + + var material = new THREE.ShaderMaterial( { + defines: params.defines, + vertexShader: params.vertexShader, + fragmentShader: params.fragmentShader, + uniforms: params.uniforms, + fog: true, + lights: true, + opacity: params.opacity, + transparent: params.transparent + } ); + + material.isGLTFSpecularGlossinessMaterial = true; + + material.color = params.color; + + material.map = params.map === undefined ? null : params.map; + + material.lightMap = null; + material.lightMapIntensity = 1.0; + + material.aoMap = params.aoMap === undefined ? null : params.aoMap; + material.aoMapIntensity = 1.0; + + material.emissive = params.emissive; + material.emissiveIntensity = 1.0; + material.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap; + + material.bumpMap = params.bumpMap === undefined ? null : params.bumpMap; + material.bumpScale = 1; + + material.normalMap = params.normalMap === undefined ? null : params.normalMap; + material.normalScale = new THREE.Vector2( 1, 1 ); + + material.displacementMap = null; + material.displacementScale = 1; + material.displacementBias = 0; + + material.specularMap = params.specularMap === undefined ? null : params.specularMap; + material.specular = params.specular; + + material.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap; + material.glossiness = params.glossiness; + + material.alphaMap = null; + + material.envMap = params.envMap === undefined ? null : params.envMap; + material.envMapIntensity = 1.0; + + material.refractionRatio = 0.98; + + material.extensions.derivatives = true; + + return material; + + }, + + // Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer. + refreshUniforms: function ( renderer, scene, camera, geometry, material, group ) { + + var uniforms = material.uniforms; + var defines = material.defines; + + uniforms.opacity.value = material.opacity; + + uniforms.diffuse.value.copy( material.color ); + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + uniforms.map.value = material.map; + uniforms.specularMap.value = material.specularMap; + uniforms.alphaMap.value = material.alphaMap; + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. normal map + // 4. bump map + // 5. alpha map + // 6. emissive map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.glossinessMap ) { + + uvScaleMap = material.glossinessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + var offset = uvScaleMap.offset; + var repeat = uvScaleMap.repeat; + + uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); + + } + + uniforms.envMap.value = material.envMap; + uniforms.envMapIntensity.value = material.envMapIntensity; + uniforms.flipEnvMap.value = ( material.envMap && material.envMap.isCubeTexture ) ? -1 : 1; + + uniforms.refractionRatio.value = material.refractionRatio; + + uniforms.specular.value.copy( material.specular ); + uniforms.glossiness.value = material.glossiness; + + uniforms.glossinessMap.value = material.glossinessMap; + + uniforms.emissiveMap.value = material.emissiveMap; + uniforms.bumpMap.value = material.bumpMap; + uniforms.normalMap.value = material.normalMap; + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + if ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) { + + defines.USE_GLOSSINESSMAP = ''; + // set USE_ROUGHNESSMAP to enable vUv + defines.USE_ROUGHNESSMAP = ''; + + } + + if ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) { + + delete defines.USE_GLOSSINESSMAP; + delete defines.USE_ROUGHNESSMAP; + + } + + } + + }; + + } + + /*********************************/ + /********** INTERNALS ************/ + /*********************************/ + + /* CONSTANTS */ + + var WEBGL_CONSTANTS = { + FLOAT: 5126, + //FLOAT_MAT2: 35674, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 + }; + + var WEBGL_TYPE = { + 5126: Number, + //35674: THREE.Matrix2, + 35675: THREE.Matrix3, + 35676: THREE.Matrix4, + 35664: THREE.Vector2, + 35665: THREE.Vector3, + 35666: THREE.Vector4, + 35678: THREE.Texture + }; + + var WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }; + + var WEBGL_FILTERS = { + 9728: THREE.NearestFilter, + 9729: THREE.LinearFilter, + 9984: THREE.NearestMipMapNearestFilter, + 9985: THREE.LinearMipMapNearestFilter, + 9986: THREE.NearestMipMapLinearFilter, + 9987: THREE.LinearMipMapLinearFilter + }; + + var WEBGL_WRAPPINGS = { + 33071: THREE.ClampToEdgeWrapping, + 33648: THREE.MirroredRepeatWrapping, + 10497: THREE.RepeatWrapping + }; + + var WEBGL_TEXTURE_FORMATS = { + 6406: THREE.AlphaFormat, + 6407: THREE.RGBFormat, + 6408: THREE.RGBAFormat, + 6409: THREE.LuminanceFormat, + 6410: THREE.LuminanceAlphaFormat + }; + + var WEBGL_TEXTURE_DATATYPES = { + 5121: THREE.UnsignedByteType, + 32819: THREE.UnsignedShort4444Type, + 32820: THREE.UnsignedShort5551Type, + 33635: THREE.UnsignedShort565Type + }; + + var WEBGL_SIDES = { + 1028: THREE.BackSide, // Culling front + 1029: THREE.FrontSide // Culling back + //1032: THREE.NoSide // Culling front and back, what to do? + }; + + var WEBGL_DEPTH_FUNCS = { + 512: THREE.NeverDepth, + 513: THREE.LessDepth, + 514: THREE.EqualDepth, + 515: THREE.LessEqualDepth, + 516: THREE.GreaterEqualDepth, + 517: THREE.NotEqualDepth, + 518: THREE.GreaterEqualDepth, + 519: THREE.AlwaysDepth + }; + + var WEBGL_BLEND_EQUATIONS = { + 32774: THREE.AddEquation, + 32778: THREE.SubtractEquation, + 32779: THREE.ReverseSubtractEquation + }; + + var WEBGL_BLEND_FUNCS = { + 0: THREE.ZeroFactor, + 1: THREE.OneFactor, + 768: THREE.SrcColorFactor, + 769: THREE.OneMinusSrcColorFactor, + 770: THREE.SrcAlphaFactor, + 771: THREE.OneMinusSrcAlphaFactor, + 772: THREE.DstAlphaFactor, + 773: THREE.OneMinusDstAlphaFactor, + 774: THREE.DstColorFactor, + 775: THREE.OneMinusDstColorFactor, + 776: THREE.SrcAlphaSaturateFactor + // The followings are not supported by Three.js yet + //32769: CONSTANT_COLOR, + //32770: ONE_MINUS_CONSTANT_COLOR, + //32771: CONSTANT_ALPHA, + //32772: ONE_MINUS_CONSTANT_COLOR + }; + + var WEBGL_TYPE_SIZES = { + 'SCALAR': 1, + 'VEC2': 2, + 'VEC3': 3, + 'VEC4': 4, + 'MAT2': 4, + 'MAT3': 9, + 'MAT4': 16 + }; + + var PATH_PROPERTIES = { + scale: 'scale', + translation: 'position', + rotation: 'quaternion', + weights: 'morphTargetInfluences' + }; + + var INTERPOLATION = { + CATMULLROMSPLINE: THREE.InterpolateSmooth, + CUBICSPLINE: THREE.InterpolateSmooth, + LINEAR: THREE.InterpolateLinear, + STEP: THREE.InterpolateDiscrete + }; + + var STATES_ENABLES = { + 2884: 'CULL_FACE', + 2929: 'DEPTH_TEST', + 3042: 'BLEND', + 3089: 'SCISSOR_TEST', + 32823: 'POLYGON_OFFSET_FILL', + 32926: 'SAMPLE_ALPHA_TO_COVERAGE' + }; + + var ALPHA_MODES = { + OPAQUE: 'OPAQUE', + MASK: 'MASK', + BLEND: 'BLEND' + }; + + /* UTILITY FUNCTIONS */ + + function _each( object, callback, thisObj ) { + + if ( !object ) { + return Promise.resolve(); + } + + var results; + var fns = []; + + if ( Object.prototype.toString.call( object ) === '[object Array]' ) { + + results = []; + + var length = object.length; + + for ( var idx = 0; idx < length; idx ++ ) { + + var value = callback.call( thisObj || this, object[ idx ], idx ); + + if ( value ) { + + fns.push( value ); + + if ( value instanceof Promise ) { + + value.then( function( key, value ) { + + results[ key ] = value; + + }.bind( this, idx )); + + } else { + + results[ idx ] = value; + + } + + } + + } + + } else { + + results = {}; + + for ( var key in object ) { + + if ( object.hasOwnProperty( key ) ) { + + var value = callback.call( thisObj || this, object[ key ], key ); + + if ( value ) { + + fns.push( value ); + + if ( value instanceof Promise ) { + + value.then( function( key, value ) { + + results[ key ] = value; + + }.bind( this, key )); + + } else { + + results[ key ] = value; + + } + + } + + } + + } + + } + + return Promise.all( fns ).then( function() { + + return results; + + }); + + } + + function resolveURL( url, path ) { + + // Invalid URL + if ( typeof url !== 'string' || url === '' ) + return ''; + + // Absolute URL http://,https://,// + if ( /^(https?:)?\/\//i.test( url ) ) { + + return url; + + } + + // Data URI + if ( /^data:.*,.*$/i.test( url ) ) { + + return url; + + } + + // Blob URL + if ( /^blob:.*$/i.test( url ) ) { + + return url; + + } + + // Relative URL + return ( path || '' ) + url; + + } + + function convertUint8ArrayToString( array ) { + + if ( window.TextDecoder !== undefined ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + var s = ''; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + s += String.fromCharCode( array[ i ] ); + + } + + return s; + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material + */ + function createDefaultMaterial() { + + return new THREE.MeshStandardMaterial( { + color: 0xFFFFFF, + emissive: 0x000000, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: THREE.FrontSide + } ); + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets + * @param {THREE.Mesh} mesh + * @param {GLTF.Mesh} meshDef + * @param {GLTF.Primitive} primitiveDef + * @param {Object} dependencies + */ + function addMorphTargets ( mesh, meshDef, primitiveDef, dependencies ) { + + var geometry = mesh.geometry; + var material = mesh.material; + + var targets = primitiveDef.targets; + var morphAttributes = geometry.morphAttributes; + + morphAttributes.position = []; + morphAttributes.normal = []; + + material.morphTargets = true; + + for ( var i = 0, il = targets.length; i < il; i ++ ) { + + var target = targets[ i ]; + var attributeName = 'morphTarget' + i; + + var positionAttribute, normalAttribute; + + if ( target.POSITION !== undefined ) { + + // Three.js morph formula is + // position + // + weight0 * ( morphTarget0 - position ) + // + weight1 * ( morphTarget1 - position ) + // ... + // while the glTF one is + // position + // + weight0 * morphTarget0 + // + weight1 * morphTarget1 + // ... + // then adding position to morphTarget. + // So morphTarget value will depend on mesh's position, then cloning attribute + // for the case if attribute is shared among two or more meshes. + + positionAttribute = dependencies.accessors[ target.POSITION ].clone(); + var position = geometry.attributes.position; + + for ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) { + + positionAttribute.setXYZ( + j, + positionAttribute.getX( j ) + position.getX( j ), + positionAttribute.getY( j ) + position.getY( j ), + positionAttribute.getZ( j ) + position.getZ( j ) + ); + + } + + } else { + + // Copying the original position not to affect the final position. + // See the formula above. + positionAttribute = geometry.attributes.position.clone(); + + } + + if ( target.NORMAL !== undefined ) { + + material.morphNormals = true; + + // see target.POSITION's comment + + normalAttribute = dependencies.accessors[ target.NORMAL ].clone(); + var normal = geometry.attributes.normal; + + for ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) { + + normalAttribute.setXYZ( + j, + normalAttribute.getX( j ) + normal.getX( j ), + normalAttribute.getY( j ) + normal.getY( j ), + normalAttribute.getZ( j ) + normal.getZ( j ) + ); + + } + + } else { + + normalAttribute = geometry.attributes.normal.clone(); + + } + + if ( target.TANGENT !== undefined ) { + + // TODO: implement + + } + + positionAttribute.name = attributeName; + normalAttribute.name = attributeName; + + morphAttributes.position.push( positionAttribute ); + morphAttributes.normal.push( normalAttribute ); + + } + + mesh.updateMorphTargets(); + + if ( meshDef.weights !== undefined ) { + + for ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) { + + mesh.morphTargetInfluences[ i ] = meshDef.weights[ i ]; + + } + + } + + } + + /* GLTF PARSER */ + + function GLTFParser( json, extensions, options ) { + + this.json = json || {}; + this.extensions = extensions || {}; + this.options = options || {}; + + // loader object cache + this.cache = new GLTFRegistry(); + + this.enableGLTFAvatar = extensions[EXTENSIONS.GL_AVATAR] ? true : false; + + } + + GLTFParser.prototype._withDependencies = function ( dependencies ) { + + var _dependencies = {}; + + for ( var i = 0; i < dependencies.length; i ++ ) { + + var dependency = dependencies[ i ]; + var fnName = 'load' + dependency.charAt( 0 ).toUpperCase() + dependency.slice( 1 ); + + var cached = this.cache.get( dependency ); + + if ( cached !== undefined ) { + + _dependencies[ dependency ] = cached; + + } else if ( this[ fnName ] ) { + + var fn = this[ fnName ](); + this.cache.add( dependency, fn ); + + _dependencies[ dependency ] = fn; + + } + + } + + return _each( _dependencies, function ( dependency ) { + + return dependency; + + } ); + + }; + + GLTFParser.prototype.parse = function ( onLoad, onError ) { + + var json = this.json; + + // Clear the loader cache + this.cache.removeAll(); + + // !! modified + this.buffers = {}; + this.images = {}; //external sources + + // Fire the callback on complete + this._withDependencies( [ + + 'scenes', + 'cameras', + 'animations' + + ] ).then( function ( dependencies ) { + + var scenes = []; + + for ( var name in dependencies.scenes ) { + + scenes.push( dependencies.scenes[ name ] ); + + } + + var scene = json.scene !== undefined ? dependencies.scenes[ json.scene ] : scenes[ 0 ]; + + var cameras = []; + + for ( var name in dependencies.cameras ) { + + var camera = dependencies.cameras[ name ]; + cameras.push( camera ); + + } + + var animations = []; + + for ( var name in dependencies.animations ) { + + animations.push( dependencies.animations[ name ] ); + + } + + onLoad( scene, scenes, cameras, animations ); + + } ).catch( onError ); + + }; + + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + GLTFParser.prototype.getDependency = function ( type, index ) { + + var cacheKey = type + ':' + index; + var dependency = this.cache.get( cacheKey ); + + if ( !dependency ) { + + var fnName = 'load' + type.charAt( 0 ).toUpperCase() + type.slice( 1 ); + dependency = this[ fnName ]( index ); + this.cache.add( cacheKey, dependency ); + + } + + return dependency; + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBuffer = function ( bufferIndex ) { + + var bufferDef = this.json.buffers[ bufferIndex ]; + + if ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) { + + throw new Error( 'THREE.GLTFLoader: %s buffer type is not supported.', bufferDef.type ); + + } + + // If present, GLB container is required to be the first buffer. + if ( bufferDef.uri === undefined && bufferIndex === 0 ) { + + return Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body ); + + } + + var options = this.options; + + return new Promise( function ( resolve ) { + + var loader = new THREE.FileLoader(); + loader.setResponseType( 'arraybuffer' ); + loader.load( resolveURL( bufferDef.uri, options.path ), resolve); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) { + + var bufferViewDef = this.json.bufferViews[ bufferViewIndex ]; + + // temp: assume there is + var parser = this; + var bufferURI = this.json.buffers[bufferViewDef.buffer].uri || null; + + return this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) { + + if (bufferURI && !parser.buffers[bufferURI]) { + parser.buffers[bufferURI] = buffer; + } + + var byteLength = bufferViewDef.byteLength || 0; + var byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice( byteOffset, byteOffset + byteLength ); + + } ); + + }; + + GLTFParser.prototype.loadAccessors = function () { + + var parser = this; + var json = this.json; + + return _each( json.accessors, function ( accessor ) { + + return parser.getDependency( 'bufferView', accessor.bufferView ).then( function ( bufferView ) { + + var itemSize = WEBGL_TYPE_SIZES[ accessor.type ]; + var TypedArray = WEBGL_COMPONENT_TYPES[ accessor.componentType ]; + + // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12. + var elementBytes = TypedArray.BYTES_PER_ELEMENT; + var itemBytes = elementBytes * itemSize; + var byteStride = json.bufferViews[ accessor.bufferView ].byteStride; + var array; + + // The buffer is not interleaved if the stride is the item size in bytes. + if ( byteStride && byteStride !== itemBytes ) { + + // Use the full buffer if it's interleaved. + array = new TypedArray( bufferView ); + + // Integer parameters to IB/IBA are in array elements, not bytes. + var ib = new THREE.InterleavedBuffer( array, byteStride / elementBytes ); + + return new THREE.InterleavedBufferAttribute( ib, itemSize, accessor.byteOffset / elementBytes ); + + } else { + + array = new TypedArray( bufferView, accessor.byteOffset, accessor.count * itemSize ); + + return new THREE.BufferAttribute( array, itemSize ); + + } + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + GLTFParser.prototype.loadTexture = function ( textureIndex ) { + + var parser = this; + var json = this.json; + var options = this.options; + + var URL = window.URL || window.webkitURL; + + var textureDef = json.textures[ textureIndex ]; + var source = json.images[ textureDef.source ]; + var sourceURI = source.uri; + var isObjectURL = false; + + if ( source.bufferView !== undefined ) { + + // Load binary image data from bufferView, if provided. + + sourceURI = parser.getDependency( 'bufferView', source.bufferView ) + .then( function ( bufferView ) { + + isObjectURL = true; + var blob = new Blob( [ bufferView ], { type: source.mimeType } ); + sourceURI = URL.createObjectURL( blob ); + return sourceURI; + + } ); + + } + + return Promise.resolve( sourceURI ).then( function ( sourceURI ) { + + // Load Texture resource. + + var textureLoader = THREE.Loader.Handlers.get( sourceURI ) || new THREE.TextureLoader(); + textureLoader.setCrossOrigin( options.crossOrigin ); + + return new Promise( function ( resolve, reject ) { + + textureLoader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject ); + + } ); + + } ).then( function ( texture ) { + + // Clean up resources and configure Texture. + + if ( isObjectURL !== undefined ) { + + URL.revokeObjectURL( sourceURI ); + + } + + texture.flipY = false; + + if ( textureDef.name !== undefined ) texture.name = textureDef.name; + + texture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat; + + if ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) { + + console.warn( 'THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. ' + + 'internalFormat will be forced to be the same value as format.' ); + + } + + texture.type = textureDef.type !== undefined ? WEBGL_TEXTURE_DATATYPES[ textureDef.type ] : THREE.UnsignedByteType; + + var samplers = json.samplers || {}; + var sampler = samplers[ textureDef.sampler ] || {}; + + texture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter; + texture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter; + texture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping; + texture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping; + + return texture; + + } ); + + }; + + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} textureName + * @param {number} textureIndex + * @return {Promise} + */ + GLTFParser.prototype.assignTexture = function ( materialParams, textureName, textureIndex ) { + + var parser = this; + var imageURI = this.json.images[ this.json.textures[textureIndex].source ].uri || null; + + return this.getDependency( 'texture', textureIndex ).then( function ( texture ) { + + + // TODO: !! this has to be raw arraybuffer from xhr + if (imageURI && !parser.images[imageURI]) { + parser.images[imageURI] = texture.image; + } + + materialParams[ textureName ] = texture; + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @return {Promise>} + */ + GLTFParser.prototype.loadMaterials = function () { + + var parser = this; + var json = this.json; + var extensions = this.extensions; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[ EXTENSIONS.GL_AVATAR ] : null; + + return _each( json.materials, function ( material ) { + + var materialType; + var materialParams = {}; + var materialExtensions = material.extensions || {}; + + var pending = []; + + if ( gl_avatar && materialExtensions[ EXTENSIONS.GL_AVATAR ] ) { + + // bodyIdLUT + if (materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT !== undefined) { + pending.push( parser.assignTexture( materialParams, 'bodyIdLUT', materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT ) ); + var visibilityLUTArray = gl_avatar.visibility; + // // TODO: change to 16x16 to save mem + var texture = gl_avatar.visibilityLUT = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, 256, 1, THREE.AlphaFormat, THREE.UnsignedByteType); + // var texture = gl_avatar.visibilityLUT = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, GL_AVATAR_VISIBILITY_LENGTH, 1, THREE.AlphaFormat, THREE.UnsignedByteType); + // var texture = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, 16, 16, THREE.AlphaFormat, THREE.UnsignedByteType); + texture.magFilter = THREE.NearestFilter; + texture.minFilter = THREE.NearestFilter; + texture.wrapS = THREE.ClampToEdgeWrapping; + texture.wrapT = THREE.ClampToEdgeWrapping; + texture.needsUpdate = true; + } + + } + + // if ( materialExtensions[ EXTENSIONS.GL_AVATAR ] && materialExtensions[ EXTENSIONS.GL_AVATAR ].toon !== undefined) { + // // toon shading material test + // var toon = materialExtensions[ EXTENSIONS.GL_AVATAR ].toon; + // console.log(toon); + // // materialType = THREE.MeshPhongMaterial; + // materialType = THREE.MeshToonMaterial; + + // materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 ); + // materialParams.opacity = 1.0; + + // if ( Array.isArray( toon.color ) ) { + + // var array = toon.color; + + // materialParams.color.fromArray( array ); + // materialParams.opacity = array[ 3 ]; + + // } + + // if ( toon.map !== undefined ) { + + // pending.push( parser.assignTexture( materialParams, 'map', toon.map.index ) ); + + // } + + // } + // else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] ) { + if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] ) { + + var khcExtension = extensions[ EXTENSIONS.KHR_MATERIALS_COMMON ]; + materialType = khcExtension.getMaterialType( material ); + pending.push( khcExtension.extendParams( materialParams, material, parser ) ); + + } else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) { + + var sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ]; + materialType = sgExtension.getMaterialType( material ); + pending.push( sgExtension.extendParams( materialParams, material, parser ) ); + + } else if ( material.pbrMetallicRoughness !== undefined ) { + + // Specification: + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material + + materialType = THREE.MeshStandardMaterial; + + var metallicRoughness = material.pbrMetallicRoughness; + + materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 ); + materialParams.opacity = 1.0; + + if ( Array.isArray( metallicRoughness.baseColorFactor ) ) { + + var array = metallicRoughness.baseColorFactor; + + materialParams.color.fromArray( array ); + materialParams.opacity = array[ 3 ]; + + } + + if ( metallicRoughness.baseColorTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) ); + + } + + materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0; + materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0; + + if ( metallicRoughness.metallicRoughnessTexture !== undefined ) { + + var textureIndex = metallicRoughness.metallicRoughnessTexture.index; + pending.push( parser.assignTexture( materialParams, 'metalnessMap', textureIndex ) ); + pending.push( parser.assignTexture( materialParams, 'roughnessMap', textureIndex ) ); + + } + + } else { + + materialType = THREE.MeshPhongMaterial; + + } + + if ( material.doubleSided === true ) { + + materialParams.side = THREE.DoubleSide; + + } + + var alphaMode = material.alphaMode || ALPHA_MODES.OPAQUE; + + if ( alphaMode !== ALPHA_MODES.OPAQUE ) { + + materialParams.transparent = true; + + } else { + + materialParams.transparent = false; + + } + + if ( material.normalTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'normalMap', material.normalTexture.index ) ); + + } + + if ( material.occlusionTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'aoMap', material.occlusionTexture.index ) ); + + } + + if ( material.emissiveFactor !== undefined ) { + + if ( materialType === THREE.MeshBasicMaterial ) { + + materialParams.color = new THREE.Color().fromArray( material.emissiveFactor ); + + } else { + + materialParams.emissive = new THREE.Color().fromArray( material.emissiveFactor ); + + } + + } + + if ( material.emissiveTexture !== undefined ) { + + if ( materialType === THREE.MeshBasicMaterial ) { + + pending.push( parser.assignTexture( materialParams, 'map', material.emissiveTexture.index ) ); + + } else { + + pending.push( parser.assignTexture( materialParams, 'emissiveMap', material.emissiveTexture.index ) ); + + } + + } + + + + return Promise.all( pending ).then( function () { + + var _material; + + if ( materialType === THREE.ShaderMaterial ) { + + _material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams ); + + } else { + + _material = new materialType( materialParams ); + + } + + + if ( gl_avatar && materialExtensions[ EXTENSIONS.GL_AVATAR ] ) { + var bodyIdLUT = materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT; + if (bodyIdLUT !== undefined) { + _material.onBeforeCompile = function (shader) { + shader.uniforms.bodyIdLUT = { + type: 't', + value: materialParams.bodyIdLUT + }; + + shader.uniforms.visibilityLUT = { + type: 't', + value: materialParams.visibilityLUT + }; + + // TODO: uniform buffer of visibility array + + // console.log(shader.fragmentShader); + shader.fragmentShader = shader.fragmentShader.replace( + 'void main() {', + [ + '#define GLAVATAR_HAS_BODY_ID_LUT', + + '#ifdef GLAVATAR_HAS_BODY_ID_LUT', + '#define GLAVATAR_BODY_VISIBILITY_LENGTH 60', + // 'uniform usampler2D bodyIdLUT;', + 'uniform sampler2D bodyIdLUT;', + // 'uniform bool visibility[GLAVATAR_BODY_VISIBILITY_LENGTH]; //wait for webgl2 to use uniform buffer', + 'uniform sampler2D visibilityLUT;', + '#endif', + + 'void main()', + '{', + '#ifdef GLAVATAR_HAS_BODY_ID_LUT', + // ' uint bodyId = texture(bodyIdLUT, v_uv).r;', + // ' int bodyId = int(texture2D(bodyIdLUT, vUv).r * 255.0);', + // ' int bodyId = int(texture2D(bodyIdLUT, vUv).r * 255.0);', + ' vec2 bodyId = vec2(texture2D(bodyIdLUT, vUv).r, 0.5);', + // ' gl_FragColor = vec4(bodyId.r, bodyId.r, bodyId.r, 1.0);', + // ' float t = texture2D(visibilityLUT, vec2(vUv.x, 0.5)).a;', + // ' float t = texture2D(visibilityLUT, vec2(0.0, 0.0)).a;', + + // ' float t = texture2D(visibilityLUT, bodyId).a;', + // ' gl_FragColor = vec4(t,t,t, 1.0);', + // ' return;', + + // ' if (bodyId < GLAVATAR_BODY_VISIBILITY_LENGTH)', + // ' {', + // ' if (!visibility[bodyId])', + // ' if (1)', + // ' if (0u == visibility[bodyId])', + ' if (texture2D(visibilityLUT, bodyId).a < 0.5)', + ' {', + ' discard;', + ' }', + // ' }', + '#endif' + ].join('\n') + ); + + + }; + } + + } + + if ( material.name !== undefined ) _material.name = material.name; + + // Normal map textures use OpenGL conventions: + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materialnormaltexture + _material.normalScale.x = -1; + + _material.userData = material.extras; + + return _material; + + } ); + + } ); + + }; + + GLTFParser.prototype.loadGeometries = function ( primitives ) { + + return this._withDependencies( [ + + 'accessors', + + ] ).then( function ( dependencies ) { + + return _each( primitives, function ( primitive ) { + + var geometry = new THREE.BufferGeometry(); + + var attributes = primitive.attributes; + + for ( var attributeId in attributes ) { + + var attributeEntry = attributes[ attributeId ]; + + if ( attributeEntry === undefined ) return; + + var bufferAttribute = dependencies.accessors[ attributeEntry ]; + + switch ( attributeId ) { + + case 'POSITION': + + geometry.addAttribute( 'position', bufferAttribute ); + break; + + case 'NORMAL': + + geometry.addAttribute( 'normal', bufferAttribute ); + break; + + case 'TEXCOORD_0': + case 'TEXCOORD0': + case 'TEXCOORD': + + geometry.addAttribute( 'uv', bufferAttribute ); + break; + + case 'TEXCOORD_1': + + geometry.addAttribute( 'uv2', bufferAttribute ); + break; + + case 'COLOR_0': + case 'COLOR0': + case 'COLOR': + + geometry.addAttribute( 'color', bufferAttribute ); + break; + + case 'WEIGHTS_0': + case 'WEIGHT': // WEIGHT semantic deprecated. + + geometry.addAttribute( 'skinWeight', bufferAttribute ); + break; + + case 'JOINTS_0': + case 'JOINT': // JOINT semantic deprecated. + + geometry.addAttribute( 'skinIndex', bufferAttribute ); + break; + + } + + } + + if ( primitive.indices !== undefined ) { + + geometry.setIndex( dependencies.accessors[ primitive.indices ] ); + + } + + return geometry; + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + */ + GLTFParser.prototype.loadMeshes = function () { + + var scope = this; + var json = this.json; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + return this._withDependencies( [ + + 'accessors', + 'materials' + + ] ).then( function ( dependencies ) { + + return _each( json.meshes, function ( meshDef ) { + + var group = new THREE.Group(); + + if ( meshDef.name !== undefined ) group.name = meshDef.name; + if ( meshDef.extras ) group.userData = meshDef.extras; + + var primitives = meshDef.primitives || []; + + if (gl_avatar) { + // gl_avatar for clothes + // move attributes from extension field to actual primitive attribute field + for (var i = 0, len = primitives.length; i < len; i++) { + if (primitives[i].extensions && primitives[i].extensions.gl_avatar) { + var att = primitives[i].extensions.gl_avatar.attributes; + for (var a in att) { + primitives[i].attributes[a] = att[a]; + } + } + } + } + + + return scope.loadGeometries( primitives ).then( function ( geometries ) { + + for ( var name in primitives ) { + + var primitive = primitives[ name ]; + var geometry = geometries[ name ]; + + var material = primitive.material === undefined + ? createDefaultMaterial() + : dependencies.materials[ primitive.material ]; + + if ( material.aoMap + && geometry.attributes.uv2 === undefined + && geometry.attributes.uv !== undefined ) { + + console.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' ); + geometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) ); + + } + + if ( geometry.attributes.color !== undefined ) { + + material.vertexColors = THREE.VertexColors; + material.needsUpdate = true; + + } + + if ( geometry.attributes.normal === undefined ) { + + if ( material.flatShading !== undefined ) { + + material.flatShading = true; + + } else { + + // TODO: Remove this backwards-compatibility fix after r87 release. + material.shading = THREE.FlatShading; + + } + + } + + var mesh; + + if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === undefined ) { + + mesh = new THREE.Mesh( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) { + + mesh = new THREE.Mesh( geometry, material ); + mesh.drawMode = THREE.TriangleStripDrawMode; + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) { + + mesh = new THREE.Mesh( geometry, material ); + mesh.drawMode = THREE.TriangleFanDrawMode; + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) { + + mesh = new THREE.LineSegments( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) { + + mesh = new THREE.Line( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) { + + mesh = new THREE.LineLoop( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) { + + mesh = new THREE.Points( geometry, material ); + + } else { + + throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ', primitive.mode ); + + } + + mesh.name = group.name + '_' + name; + + if ( primitive.targets !== undefined ) { + + addMorphTargets( mesh, meshDef, primitive, dependencies ); + + } + + if ( primitive.extras ) mesh.userData = primitive.extras; + + group.add( mesh ); + + } + + return group; + + } ); + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + */ + GLTFParser.prototype.loadCameras = function () { + + var json = this.json; + + return _each( json.cameras, function ( camera ) { + + var _camera; + + var params = camera[ camera.type ]; + + if ( !params ) { + + console.warn( 'THREE.GLTFLoader: Missing camera parameters.' ); + return; + + } + + if ( camera.type === 'perspective' ) { + + var aspectRatio = params.aspectRatio || 1; + var xfov = params.yfov * aspectRatio; + + _camera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( xfov ), aspectRatio, params.znear || 1, params.zfar || 2e6 ); + + } else if ( camera.type === 'orthographic' ) { + + _camera = new THREE.OrthographicCamera( params.xmag / -2, params.xmag / 2, params.ymag / 2, params.ymag / -2, params.znear, params.zfar ); + + } + + if ( camera.name !== undefined ) _camera.name = camera.name; + if ( camera.extras ) _camera.userData = camera.extras; + + return _camera; + + } ); + + }; + + GLTFParser.prototype.loadSkins = function () { + + var json = this.json; + var parser = this; + + return this._withDependencies( [ + + 'accessors' + + ] ).then( function ( dependencies ) { + + return _each( json.skins, function ( skin ) { + + // console.log(skin); + + // this is for linked skeleton + // here gl_avatar also indicates id in newly created skins array + if (parser.enableGLTFAvatar && skin.gl_avatar !== undefined) { + var _skinlink = { + link: skin.skeleton, + inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ] + }; + return _skinlink; + } + + var _skin = { + joints: skin.joints, + inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ] + }; + + // // clothes file sub skeleton extensions + // if (skin.extensions && skin.extensions.gl_avatar) { + // var gla = skin.extensions.gl_avatar; + // if (gla.root) { + // // console.log(gl_avatar_linked_skeleton); + // var root = gl_avatar_linked_skeleton.nodes[gla.root]; + // _skin.root = root; + // // console.log(root); + // } + // } + + return _skin; + + } ); + + } ); + + }; + + GLTFParser.prototype.loadAnimations = function () { + + var json = this.json; + + return this._withDependencies( [ + + 'accessors', + 'nodes' + + ] ).then( function ( dependencies ) { + + return _each( json.animations, function ( animation, animationId ) { + + var tracks = []; + + for ( var channelId in animation.channels ) { + + var channel = animation.channels[ channelId ]; + var sampler = animation.samplers[ channel.sampler ]; + + if ( sampler ) { + + var target = channel.target; + var name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated. + var input = animation.parameters !== undefined ? animation.parameters[ sampler.input ] : sampler.input; + var output = animation.parameters !== undefined ? animation.parameters[ sampler.output ] : sampler.output; + + var inputAccessor = dependencies.accessors[ input ]; + var outputAccessor = dependencies.accessors[ output ]; + + var node = dependencies.nodes[ name ]; + + if ( node ) { + + node.updateMatrix(); + node.matrixAutoUpdate = true; + + var TypedKeyframeTrack; + + switch ( PATH_PROPERTIES[ target.path ] ) { + + case PATH_PROPERTIES.weights: + + TypedKeyframeTrack = THREE.NumberKeyframeTrack; + break; + + case PATH_PROPERTIES.rotation: + + TypedKeyframeTrack = THREE.QuaternionKeyframeTrack; + break; + + case PATH_PROPERTIES.position: + case PATH_PROPERTIES.scale: + default: + + TypedKeyframeTrack = THREE.VectorKeyframeTrack; + break; + + } + + var targetName = node.name ? node.name : node.uuid; + + if ( sampler.interpolation === 'CATMULLROMSPLINE' ) { + + console.warn( 'THREE.GLTFLoader: CATMULLROMSPLINE interpolation is not supported. Using CUBICSPLINE instead.' ); + + } + + var interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear; + + var targetNames = []; + + if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) { + + // node should be THREE.Group here but + // PATH_PROPERTIES.weights(morphTargetInfluences) should be + // the property of a mesh object under node. + // So finding targets here. + + node.traverse( function ( object ) { + + if ( object.isMesh === true && object.material.morphTargets === true ) { + + targetNames.push( object.name ? object.name : object.uuid ); + + } + + } ); + + } else { + + targetNames.push( targetName ); + + } + + // KeyframeTrack.optimize() will modify given 'times' and 'values' + // buffers before creating a truncated copy to keep. Because buffers may + // be reused by other tracks, make copies here. + for ( var i = 0, il = targetNames.length; i < il; i ++ ) { + + tracks.push( new TypedKeyframeTrack( + targetNames[ i ] + '.' + PATH_PROPERTIES[ target.path ], + THREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ), + THREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ), + interpolation + ) ); + + } + + } + + } + + } + + var name = animation.name !== undefined ? animation.name : 'animation_' + animationId; + + return new THREE.AnimationClip( name, undefined, tracks ); + + } ); + + } ); + + }; + + GLTFParser.prototype.loadNodes = function () { + + var json = this.json; + var extensions = this.extensions; + var scope = this; + + var nodes = json.nodes || []; + var skins = json.skins || []; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + // Nothing in the node definition indicates whether it is a Bone or an + // Object3D. Use the skins' joint references to mark bones. + skins.forEach( function ( skin ) { + + skin.joints.forEach( function ( id ) { + + nodes[ id ].isBone = true; + + } ); + + } ); + + return _each( json.nodes, function ( node ) { + + var matrix = new THREE.Matrix4(); + + var _node = node.isBone === true ? new THREE.Bone() : new THREE.Object3D(); + + if ( node.name !== undefined ) { + + _node.name = THREE.PropertyBinding.sanitizeNodeName( node.name ); + + } + + if ( node.extras ) _node.userData = node.extras; + + if ( node.matrix !== undefined ) { + + matrix.fromArray( node.matrix ); + _node.applyMatrix( matrix ); + + } else { + + if ( node.translation !== undefined ) { + + _node.position.fromArray( node.translation ); + + } + + if ( node.rotation !== undefined ) { + + _node.quaternion.fromArray( node.rotation ); + + } + + if ( node.scale !== undefined ) { + + _node.scale.fromArray( node.scale ); + + } + + } + + return _node; + + } ).then( function ( __nodes ) { + + return scope._withDependencies( [ + + 'meshes', + 'skins', + 'cameras' + + ] ).then( function ( dependencies ) { + + return _each( __nodes, function ( _node, nodeId ) { + + var node = json.nodes[ nodeId ]; + + var meshes; + + if ( node.mesh !== undefined) { + + meshes = [ node.mesh ]; + + } else if ( node.meshes !== undefined ) { + + console.warn( 'THREE.GLTFLoader: Legacy glTF file detected. Nodes may have no more than one mesh.' ); + + meshes = node.meshes; + + } + + if ( meshes !== undefined ) { + + for ( var meshId in meshes ) { + + var mesh = meshes[ meshId ]; + var group = dependencies.meshes[ mesh ]; + + if ( group === undefined ) { + + console.warn( 'THREE.GLTFLoader: Could not find node "' + mesh + '".' ); + continue; + + } + + // do not clone children as they will be replaced anyway + var clonedgroup = group.clone( false ); + + for ( var childrenId in group.children ) { + + var child = group.children[ childrenId ]; + var originalChild = child; + + // clone Mesh to add to _node + + var originalMaterial = child.material; + var originalGeometry = child.geometry; + var originalInfluences = child.morphTargetInfluences; + var originalUserData = child.userData; + var originalName = child.name; + + var material = originalMaterial; + + switch ( child.type ) { + + case 'LineSegments': + child = new THREE.LineSegments( originalGeometry, material ); + break; + + case 'LineLoop': + child = new THREE.LineLoop( originalGeometry, material ); + break; + + case 'Line': + child = new THREE.Line( originalGeometry, material ); + break; + + case 'Points': + child = new THREE.Points( originalGeometry, material ); + break; + + default: + child = new THREE.Mesh( originalGeometry, material ); + child.drawMode = originalChild.drawMode; + + } + + child.castShadow = true; + child.morphTargetInfluences = originalInfluences; + child.userData = originalUserData; + child.name = originalName; + + var skinEntry; + + if ( node.skin !== undefined ) { + + skinEntry = dependencies.skins[ node.skin ]; + + } + + var linkSkeleton = null; + if (gl_avatar) { + if (gl_avatar.type === "skin") { + if (node.extensions && node.extensions.gl_avatar) { + // skinEntry + // bind skeleton from main skeleton file + var s = node.extensions.gl_avatar.skin; + skinEntry = dependencies.skins[ s ]; + + var link = skinEntry.link; + + linkSkeleton = gl_avatar_skeletons[link]; + } + } + } + + // Replace Mesh with SkinnedMesh in library + if ( skinEntry ) { + + var geometry = originalGeometry; + material = originalMaterial; + material.skinning = true; + + child = new THREE.SkinnedMesh( geometry, material ); + child.castShadow = true; + child.userData = originalUserData; + child.name = originalName; + + var skeleton; + if (linkSkeleton) { + var boneInverses = []; + var m = skinEntry.inverseBindMatrices.array; + for ( var i = 0, l = linkSkeleton.bones.length; i < l; i ++ ) { + var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + boneInverses.push( mat ); + } + + skeleton = new THREE.Skeleton(linkSkeleton.bones, boneInverses); + } else { + var bones = []; + var boneInverses = []; + + for ( var i = 0, l = skinEntry.joints.length; i < l; i ++ ) { + + var jointId = skinEntry.joints[ i ]; + var jointNode = __nodes[ jointId ]; + + if ( jointNode ) { + + bones.push( jointNode ); + + var m = skinEntry.inverseBindMatrices.array; + var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + boneInverses.push( mat ); + + } else { + + console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', jointId ); + + } + + } + + + + + // if (gl_avatar && gl_avatar.type === "skin") { + // if (skinEntry.root) { + // // sub_skeleton module + + // // assume bones[0] is root(skeleton) of this skeleton (joint list) + // bones[0].gl_avatar_base_root = skinEntry.root; + // } + // } + + + // gl_avatar: only referenced skeleton will be created + // this can be modified in the furture + // to enable pure skeleton file without skin? + skeleton = new THREE.Skeleton( bones, boneInverses ); + + + } + + + + if ( gl_avatar ) { + if (gl_avatar.type === "skeleton") { + if (node.skin in gl_avatar.skinId2SkeletonKey) { + gl_avatar.skeletons[gl_avatar.skinId2SkeletonKey[node.skin]] = skeleton; + } + + + + // if there's manually created full joint list skin + // enter this branch + if (node.extensions && node.extensions.gl_avatar) { + + var externalSkins; + if (node.extensions.gl_avatar.skin !== undefined) { + if (Array.isArray(node.extensions.gl_avatar.skin)) { + externalSkins = node.extensions.gl_avatar.skin; + } else { + // one number id + externalSkins = [node.extensions.gl_avatar.skin] + } + } else { + externalSkins = []; + } + + + // var s = node.extensions.gl_avatar.skin; + // assert( skeleton === null ) + var s; + for (var sid = 0, sidl = externalSkins.length; sid < sidl; sid++) { + s = externalSkins[sid]; + + if (s !== undefined) { + console.log('manually added joint list skin: ' + s); + + skinEntry = dependencies.skins[ s ]; + + var bones = []; + // assert( no boneinverses ) + + for ( var i = 0, l = skinEntry.joints.length; i < l; i ++ ) { + + var jointId = skinEntry.joints[ i ]; + var jointNode = __nodes[ jointId ]; + + if ( jointNode ) { + + bones.push( jointNode ); + + // var m = skinEntry.inverseBindMatrices.array; + // var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + // boneInverses.push( mat ); + + } else { + + console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', jointId ); + + } + + } + + + if (s in gl_avatar.skinId2SkeletonKey) { + gl_avatar.skeletons[gl_avatar.skinId2SkeletonKey[s]] = new THREE.Skeleton(bones); + } + } + + } + } + + + + + } + } + + child.bind( skeleton, child.matrixWorld ); + + } + + clonedgroup.add( child ); + + } + + if (gl_avatar_linked_skeleton) { + console.log( gl_avatar_linked_skeleton.nodes.head.children ); + } + + _node.add( clonedgroup ); + + } + + } + + if ( node.camera !== undefined ) { + + var camera = dependencies.cameras[ node.camera ]; + + _node.add( camera ); + + } + + if ( node.extensions + && node.extensions[ EXTENSIONS.KHR_LIGHTS ] + && node.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) { + + var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights; + _node.add( lights[ node.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] ); + + } + + + // for skeleton, add special node to node map for future reference + if ( gl_avatar ) { + if (gl_avatar.type === "skeleton") { + if (nodeId in gl_avatar.nodeId2Name) { + gl_avatar.nodes[gl_avatar.nodeId2Name[nodeId]] = _node; + } + } else { + // skin + if (node.extensions && node.extensions.gl_avatar) { + var gla = node.extensions.gl_avatar; + if (gla.root !== undefined) { + // rigid bind + _node.gl_avatar_base_root = gl_avatar_linked_skeleton.nodes[gla.root]; + } + } + } + } + + return _node; + + } ); + + } ); + + } ); + + }; + + GLTFParser.prototype.loadScenes = function () { + + var json = this.json; + var extensions = this.extensions; + + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + // scene node hierachy builder + + function buildNodeHierachy( nodeId, parentObject, allNodes ) { + + var _node = allNodes[ nodeId ]; + parentObject.add( _node ); + + var node = json.nodes[ nodeId ]; + + if ( node.children ) { + + var children = node.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + var child = children[ i ]; + buildNodeHierachy( child, _node, allNodes ); + + } + + } + + } + + return this._withDependencies( [ + + 'nodes' + + ] ).then( function ( dependencies ) { + + return _each( json.scenes, function ( scene ) { + + var _scene = new THREE.Scene(); + if ( scene.name !== undefined ) _scene.name = scene.name; + + if ( scene.extras ) _scene.userData = scene.extras; + + var nodes = scene.nodes || []; + + for ( var i = 0, l = nodes.length; i < l; i ++ ) { + + var nodeId = nodes[ i ]; + buildNodeHierachy( nodeId, _scene, dependencies.nodes ); + + } + + _scene.traverse( function ( child ) { + + // for Specular-Glossiness. + if ( child.material && child.material.isGLTFSpecularGlossinessMaterial ) { + + child.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms; + + } + + } ); + + + // Ambient lighting, if present, is always attached to the scene root. + if ( scene.extensions + && scene.extensions[ EXTENSIONS.KHR_LIGHTS ] + && scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) { + + var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights; + _scene.add( lights[ scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] ); + + } + + + + + + // gl avatar sub skeleton link test + + if (gl_avatar && gl_avatar.type === "skin") { + // var temp_base_root; + for ( var i = 0, l = dependencies.nodes.length; i < l; i ++ ) { + + var node = dependencies.nodes[ i ]; + if (node.gl_avatar_base_root) { + // node.gl_avatar_base_root.add(node); // move to outsider logic to handle + + + // TODO: might use .userData. field + // !!: assume there's only one attach (rigid bind) node + _scene.attach_child = node; + } + + } + + console.log(_scene); + // console.log(gl_avatar_linked_skeleton); + } + + + return _scene; + + } ); + + } ); + + }; + + return GLTFLoader; + +} )(); +}; + + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return glAvatarSystem; }); +var THREE = __webpack_require__(0); + +var glAvatarSystem = { + + curSkeleton: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + + curVisibilityArray: null, + + curAccessories: { + clothes: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + hair: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + face: { + name: null, + scene: null + }, + instrument: { + name: null, + scene: null + } + }, + + // assets + skeletons: {}, + + accessories: { + clothes: {}, + hair: {}, + face: {}, + instrument: {} + }, + + + + repo: { + skeletons: { + // 'mixamo': { + // url: 'models/gltf/saber-body-mixamo-animations/saber-body-animations.gltf', + // // scene info (camera, light) + // cameraPos: new THREE.Vector3(1.5, 2, 1.5), + // center: new THREE.Vector3(0, 0.8, 0), + // objectRotation: new THREE.Euler(0, 180, 0), + // // init skins + // skins: { + // hair: 'maid', + // clothes: 'maid-dress' + // } + // }, + // 'stand-pose': { + // url: 'models/gltf/saber-stand-pose/saber-stand-pose.gltf', + + // cameraPos: new THREE.Vector3(1.5, 2, 1.5), + // center: new THREE.Vector3(0, 0.8, 0), + // objectRotation: new THREE.Euler(0, 180, 0), + + // skins: { + // hair: 'lily', + // clothes: 'maid-dress' + // } + // }, + 'no-face': { + url: 'models/gltf/saber-mixamo-body-no-face/saber-body-animations.gltf', + + cameraPos: new THREE.Vector3(1.5, 2, 1.5), + center: new THREE.Vector3(0, 0.8, 0), + objectRotation: new THREE.Euler(0, 180, 0), + + skins: { + hair: 'maid', + clothes: 'maid-dress', + face: 'saber' + } + } + + }, + + // skins + clothes: { + 'maid-dress': 'models/gltf/saber-dress-mixamo/saber-dress.gltf', + 'suit': 'models/gltf/saber-suit/saber-suit.gltf' + }, + hair: { + 'maid': 'models/gltf/saber-maid-hair-mixamo/saber-maid-hair.gltf', + 'lily': 'models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair-sub-skeleton.gltf' + }, + + face: { + 'saber': 'models/gltf/saber-face/saber-face.gltf', + 'eriri': 'models/gltf/saber-face/eriri-face-test.gltf' + }, + + + instrument: { + + } + }, + + isLoaded: function (type, key) { + return key in this.accessories[type]; + } +}; + + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return mergeGLTFAvatar; }); +// mergeGLTF util in browser + + +var textureWithVisibility = null; +var bodyIdLUTTexture = null; + +// // this two keys are actually id for skeleton.textures +// var textureWithVisibilityKey = null; +// var bodyIdLUTTextureKey = null; + +var visiblityMaterial = null; + + +var canvas1 = document.createElement('canvas'); +var context1 = canvas1.getContext('2d'); + +function image2Data(img) { + + canvas1.width = img.width; + canvas1.height = img.height; + context1.drawImage(img, 0, 0); + return context1.getImageData(0, 0, img.width, img.height); +} + +function image2PNGDataURI(img) { + canvas1.width = img.width; + canvas1.height = img.height; + context1.drawImage(img, 0, 0); + return canvas1.toDataURL(); // default is png +} + +function mergeGLTFAvatar(skeletonObject, skinObjectArray) { + // { + // json: gltf json object, + // bins: { key: buffer, key: buffer, ...}, + // imgs: { key: img, key: img, ...} + // } + + console.log(skeletonObject.json); + + // TODO: change bins and imgs to array, use index instead of uri + var merged = { + json: Object.assign({}, skeletonObject.json), + bins: Object.assign({}, skeletonObject.bins), + // imgs: Object.assign({}, skeletonObject.imgs) + imgs: {} + }; + + var skeleton = merged.json; + // find texture with bodyIdLUT + for (var i = 0, len = skeleton.materials.length; i < len; i++) { + var m = skeleton.materials[i]; + if (m.extensions && m.extensions.gl_avatar && m.extensions.gl_avatar.bodyIdLUT !== undefined) { + // m has pbr related texture + // assume there's only one such a thing + + visiblityMaterial = m; + // bodyIdLUTTexture = skeleton.textures[m.extensions.gl_avatar.bodyIdLUT]; + bodyIdLUTTexture = skeleton.images[skeleton.textures[m.extensions.gl_avatar.bodyIdLUT].source].uri; + // bodyIdLUTTextureKey = m.extensions.gl_avatar.bodyIdLUT; + // textureWithVisibility = skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index]; + textureWithVisibility = skeleton.images[skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index].source].uri; + // textureWithVisibilityKey = m.pbrMetallicRoughness.baseColorTexture.index; + + merged.imgs[textureWithVisibility] = image2Data(skeletonObject.imgs[textureWithVisibility]); + merged.imgs[bodyIdLUTTexture] = image2Data(skeletonObject.imgs[bodyIdLUTTexture]); + + break; + } + } + + + + // for (var key in merged.imgs) { + // merged.imgs[key] = image2Data(merged.imgs[key]); + // } + for (var key in skeletonObject.imgs) { + if (! (key in merged.imgs)) { + + merged.imgs[key] = image2PNGDataURI(skeletonObject.imgs[key]); + } + } + + + + // merged.bins = merged.bins.concat(skeletonObject.bins); + // merged.imgs = merged.imgs.concat(skeletonObject.imgs); + + + + if(!skeleton.extensions) { + skeleton.extensions = {}; + } + + if (!skeleton.extensions.gl_avatar) { + skeleton.extensions.gl_avatar = {}; + } + + + if (!skeleton.extensions.gl_avatar.visibility) { + skeleton.extensions.gl_avatar.visibility = []; + } + + for (var i = 0, len = skinObjectArray.length; i < len; i++) { + var skin = skinObjectArray[i]; + merge(skeleton, skin.json); + + // temp: this probably didn't support multiple export + for (var key in skin.imgs) { + // skin.imgs[key] = image2Data(skin.imgs[key]); + skin.imgs[key] = image2PNGDataURI(skin.imgs[key]); + } + + // TODO: solve duplicate key issue + merged.bins = Object.assign( merged.bins, skin.bins ); + merged.imgs = Object.assign( merged.imgs, skin.imgs ); + + bakeVisibility(merged, textureWithVisibility, bodyIdLUTTexture, skeleton.extensions.gl_avatar.visibility); + } + + + // + var img = merged.imgs[textureWithVisibility]; + canvas1.width = img.width; + canvas1.height = img.height; + context1.putImageData(img, 0, 0); + merged.imgs[textureWithVisibility] = canvas1.toDataURL(); + + delete merged.imgs[bodyIdLUTTexture]; + + // send merged gltf and buffers & image to makeglb + return merged; +} + + + +/** + * + * @param {*} skeleton gltf json + * @param {*} skin gltf json + */ +function merge(skeleton, skin) { + var i, len, j, lenj; + + var linkedSkeletons = skin.extensions.gl_avatar.linkedSkeletons || []; + + + // buffers + var bufferBaseId = skeleton.buffers.length; + // for (i = 0, len = skin.buffers.length; i < len; i++) { + // skeleton.buffers.push(skin.buffers[i]); + // } + skeleton.buffers = skeleton.buffers.concat(skin.buffers); + + + // bufferViews + var bufferViewBaseId = skeleton.bufferViews.length; + for (i = 0, len = skin.bufferViews.length; i < len; i++) { + skeleton.bufferViews.push(skin.bufferViews[i]); + skeleton.bufferViews[i + bufferViewBaseId].buffer += bufferBaseId; + } + + // accessors + var accessorBaseId = skeleton.accessors.length; + for (i = 0, len = skin.accessors.length; i < len; i++) { + skeleton.accessors.push(skin.accessors[i]); + skeleton.accessors[i + accessorBaseId].bufferView += bufferViewBaseId; + } + + + // images + // TODO: delete bodyIdLUT if exist, and change texture.source + var imageBaseId = skeleton.images.length; + skeleton.images = skeleton.images.concat(skin.images); + + // samplers + var samplerBaseId = skeleton.samplers.length; + skeleton.samplers = skeleton.samplers.concat(skin.samplers); + + // textures + var textureBaseId = skeleton.textures.length; + skeleton.textures = skeleton.textures.concat(skin.textures); + for (i = 0, len = skin.textures.length; i < len; i++) { + var t = skeleton.textures[i + textureBaseId]; + if (t.sampler !== undefined) { + t.sampler += samplerBaseId; + } + if (t.source !== undefined) { + t.source += imageBaseId; + } + } + + // materials + var materialBaseId = skeleton.materials.length; + + // find texture with bodyIdLUT + for (i = 0, len = skeleton.materials.length; i < len; i++) { + var m = skeleton.materials[i]; + if (m.extensions && m.extensions.gl_avatar && m.extensions.gl_avatar.bodyIdLUT !== undefined) { + // m has pbr related texture + // assume there's only one such a thing + + visiblityMaterial = m; + // bodyIdLUTTexture = skeleton.textures[m.extensions.gl_avatar.bodyIdLUT]; + bodyIdLUTTexture = skeleton.images[skeleton.textures[m.extensions.gl_avatar.bodyIdLUT].source].uri; + // bodyIdLUTTextureKey = m.extensions.gl_avatar.bodyIdLUT; + // textureWithVisibility = skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index]; + textureWithVisibility = skeleton.images[skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index].source].uri; + // textureWithVisibilityKey = m.pbrMetallicRoughness.baseColorTexture.index; + + break; + } + } + + + for (i = 0, len = skin.materials.length; i < len; i++) { + skeleton.materials.push(skin.materials[i]); + var m = skeleton.materials[i + materialBaseId]; + if (m.pbrMetallicRoughness !== undefined) { + if (m.pbrMetallicRoughness.baseColorTexture !== undefined) { + var bt = m.pbrMetallicRoughness.baseColorTexture; + for (var tt in bt) { + bt[tt] += imageBaseId; + } + } + } + } + + + + // meshes + var meshBaseId = skeleton.meshes.length; + for (i = 0, len = skin.meshes.length; i < len; i++) { + skeleton.meshes.push(skin.meshes[i]); + var m = skeleton.meshes[i + meshBaseId]; + if (m.primitives !== undefined) { + + for (j = 0, lenj = m.primitives.length; j < lenj; j++) { + var p = m.primitives[j]; + + if (p.indices !== undefined) { + p.indices += accessorBaseId; + } + + if (p.material !== undefined) { + p.material += materialBaseId; + } + + if (p.attributes !== undefined) { + var a = p.attributes; + for (var att in a) { + a[att] += accessorBaseId; + } + } + + if (p.extensions !== undefined) { + if (p.extensions.gl_avatar.attributes) { + var ea = p.extensions.gl_avatar.attributes; + if (!p.attributes) { + p.attributes = {}; + } + for (var att2 in ea) { + p.attributes[att2] = ea[att2] + accessorBaseId; + } + } + + delete p.extensions; + } + } + + } + } + + // nodes + var skinBaseId = skeleton.skins.length; + + var nodeRigidBind = {}; + var nodeBaseId = skeleton.nodes.length; + // var numLinkedSkin = 0; + for (i = 0, len = skin.nodes.length; i < len; i++) { + skeleton.nodes.push(skin.nodes[i]); + var n = skeleton.nodes[i + nodeBaseId]; + + if (n.skin !== undefined) { + n.skin += skinBaseId; + } + + + if (n.children !== undefined) { + var c = n.children; + for (j = 0, lenj = c.length; j < lenj; j++) { + c[j] += nodeBaseId; + } + } + + if (n.mesh !== undefined) { + n.mesh += meshBaseId; + } + + // skins link + if (n.extensions) { + // create a new skin copy of skin linked + // replace inverseBindMatrices + if (n.extensions.gl_avatar) { + if (n.extensions.gl_avatar.skin !== undefined) { + // linked skin + // assume linkedSkeletons exists + var linkedSkinInfo = linkedSkeletons[n.extensions.gl_avatar.skin]; + var skinKey = linkedSkinInfo.skeleton; + var newSkin = Object.assign({}, skeleton.skins[skeleton.extensions.gl_avatar.skins[skinKey]]); + skeleton.skins.push(newSkin); + // numLinkedSkin++; + n.skin = skeleton.skins.length - 1; + newSkin.inverseBindMatrices = linkedSkinInfo.inverseBindMatrices + accessorBaseId; + } + + var root = n.extensions.gl_avatar.root; + if ( root !== undefined) { + // rigid bind / sub skeleton node + + var nid = i + nodeBaseId; + // nodeRigidBind[root] = nid; + nodeRigidBind[nid] = nid; + var newParentNode = skeleton.nodes[skeleton.extensions.gl_avatar.nodes[root]]; + + if (!newParentNode.children) { + newParentNode.children = []; + } + newParentNode.children.push(nid); + } + } + + delete n.extensions; + } + + } + + + // remove rigidbind nodes' original parent node in skin + // var finishUnparenting = false; + var numUnparenting = (Object.keys(nodeRigidBind)).length; + for (i = nodeBaseId, len = skeleton.nodes.length; i < len; i++) { + var n = skeleton.nodes[i]; + if (n.children) { + // for (j = 0, lenj = n.children.length; j < lenj; j++) { + for (j = 0; j < n.children.length; j++) { + if (n.children[j] in nodeRigidBind) { + // delete nodeRigidBind[n.children[j]]; + n.children.splice(j, 1); + j--; + numUnparenting--; + + if (numUnparenting == 0) { + i = len; // early termination + break; + } + + } + } + } + } + + + + // skins (sub-skeleton) + if (skin.skins) { + // if (!skeleton.skins) { + // skeleton.skins = []; + // } + + for (i = 0, len = skin.skins.length; i < len; i++) { + var s = skin.skins[i]; + + if (s.gl_avatar) { + // constructed linked skin in gltf loader + continue; + } + + skeleton.skins.push(s); + + if (s.joints) { + for (j = 0, lenj = s.joints.length; j < lenj; j++) { + s.joints[j] += nodeBaseId; + } + } + + if (s.inverseBindMatrices !== undefined) { + s.inverseBindMatrices += accessorBaseId; + } + + if (s.skeleton !== undefined) { + if (typeof s.skeleton == 'number') { + s.skeleton += nodeBaseId; + } else { + s.skeleton = skeleton.extensions.gl_avatar.skins[s.skeleton]; + } + } + } + } + + + + + + + + // scenes (assume only one scene) + var sceneNodeBaseId = skeleton.scenes[0].nodes.length; + skeleton.scenes[0].nodes = skeleton.scenes[0].nodes.concat(skin.scenes[0].nodes); + for (i = 0, len = skin.scenes[0].nodes.length; i < len; i++) { + // WARNING: TODO: the scene root node might also be rigid bind node + skeleton.scenes[0].nodes[i + sceneNodeBaseId] += nodeBaseId; + } + + + // animations + if (skin.animations) { + if (!skeleton.animations) { + skeleton.animations = []; + } + + for (i = 0, len = skin.animations.length; i < len; i++) { + var a = skin.animations[i]; + + skeleton.animations.push(a); + + if (a.channels) { + for (j = 0, lenj = a.channels.length; j < lenj; j++) { + var c = a.channels[j]; + c.target.node += nodeBaseId; + } + } + + if (a.samplers) { + for (j = 0, lenj = a.samplers.length; j < lenj; j++) { + var s = a.samplers[j]; + s.input += accessorBaseId; + s.output += accessorBaseId; + } + } + } + } + + + + + // TODO: cameras... + + + // extensions: visibility array + visibilityAndOperation(skeleton, skin.extensions.gl_avatar.visibility); + +} + + + + +function visibilityAndOperation(skeleton, vi) { + if (skeleton.extensions.gl_avatar.visibility.length === 0) { + skeleton.extensions.gl_avatar.visibility = vi.slice(0); + return; + } + + var v = skeleton.extensions.gl_avatar.visibility; + var vl = v.length; + for (var i = 0, len = vi.length; i < len; i++) { + if (vl <= i) { + v[i] = vi[i]; + } else { + v[i] = v[i] && vi[i]; + } + } +} + + + +function bakeVisibility(skeleton, texURI, bodyIdLUTURI, visibility) { + if (texURI == null || bodyIdLUTURI == null) { + console.log('No texture with visibility or body id lut in this model'); + return; + } + + + // console.log('texture with visibility: ', texInfo); + // console.log('body Id LUT texture: ', bodyIdLUTInfo); + + visiblityMaterial.alphaMode = "MASK"; + visiblityMaterial.alphaCutOff = 0.5; + + + // // some canvas used to get pixels array data + // var img; + // var canvas1 = document.createElement('canvas'); + // var context1 = canvas1.getContext('2d'); + // // img = texInfo.source; + // img = skeleton.imgs[texURI]; + + // canvas1.width = img.width; + // canvas1.height = img.height; + // context1.drawImage(img, 0, 0); + // var tex = context1.getImageData(0, 0, img.width, img.height); + + // var canvas2 = document.createElement('canvas'); + // var context2 = canvas2.getContext('2d'); + // // img = bodyIdLUTInfo.source; + // img = skeleton.imgs[bodyIdLUTURI]; + + // canvas2.width = img.width; + // canvas2.height = img.height; + // context2.drawImage(img, 0, 0); + // var lut = context2.getImageData(0, 0, img.width, img.height); + + var width = skeleton.imgs[texURI].width; + var height = skeleton.imgs[texURI].height; + + var tex = skeleton.imgs[texURI].data; + var lut = skeleton.imgs[bodyIdLUTURI].data; + + // temp: assume img and lut are of the same size + for (var y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + var idx = (width * y + x) << 2; // * 4 + + var bodyId = lut[idx]; + + if (visibility[bodyId] === 0) { + tex[idx + 3] = 0; + } + } + } + + + // // write pixel back to image object + // context1.putImageData(tex, 0, 0); + + + + // fs.createReadStream(texPath) + // .pipe(new PNG({filterType: 4})) + // .on('parsed', function() { + + // var tex = this; + + // fs.createReadStream(bodyIdLUTPath) + // .pipe(new PNG({filterType: 0})) + // .on('parsed', function() { + // var lut = this; + + // // temp assume same size + // for (var y = 0; y < this.height; y++) { + // for (var x = 0; x < this.width; x++) { + // var idx = (this.width * y + x) << 2; + + // var bodyId = lut.data[idx]; + + // if (visibilty[bodyId] === 0) { + // tex.data[idx + 3] = 0; + // } + // } + // } + + + + // tex.pack().pipe(fs.createWriteStream(texPath)); + + // }); + + + + // }); +} + + + + + +/***/ }), +/* 7 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return fileSave; }); + var files=[]; + var fileblobs=[]; + var gltf; + var remainingfilestoprocess=0; + var glbfilename; + + var outputBuffers; + var bufferMap; + var bufferOffset; + + + function handleDragOver(event) { + event.stopPropagation(); + event.preventDefault(); + event.dataTransfer.dropEffect = 'copy'; + } + + +// var dropZone = document.getElementById('drop_zone'); +// dropZone.addEventListener('dragover', handleDragOver, false); +// dropZone.addEventListener('drop', handleFileSelect, false); + + + function addDownloadButton() { + var btn = document.createElement("button"); + btn.id="downloadBtn"; + btn.disabled=true; + btn.onclick= startDownload; + btn.appendChild(document.createTextNode("Processing...")); + document.getElementById("download").appendChild(btn); + } + + function startDownload(){ + document.getElementById("downloadLink").click(); + } + + function handleFileSelect(event) { + event.stopPropagation(); + event.preventDefault(); + document.getElementById('list').innerHTML=""; + addDownloadButton(); + var items = event.dataTransfer.items; + remainingfilestoprocess=items.length; + for (var i=0; i ('+ file.type + ') - '+ + file.size+ ' bytes, last modified: '+ file.lastModifiedDate + + ''; + document.getElementById('list').innerHTML += fileitem; + + var extension = file.name.split('.').pop(); + if ( extension === "gltf") + { + glbfilename=file.name.substr(file.name.lastIndexOf('/')+1,file.name.lastIndexOf('.')); + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function(event) { + gltf = JSON.parse(event.target.result); + checkRemaining(); + }; + } + else{ + var reader = new FileReader(); + reader.onload = (function(theFile) { + return function(e) { + fileblobs[theFile.name.toLowerCase()]=(e.target.result); + checkRemaining(); + }; + })(file); + reader.readAsArrayBuffer(file); + } + },function(error){ + console.log(error); + }); + } else if (item.isDirectory) { + var dirReader = item.createReader(); + dirReader.readEntries(function(entries) { + remainingfilestoprocess+=entries.length; + checkRemaining(); + for (var i=0; i= 0; i--) { + args = [toCall[i].apply(this, args)]; + } + return args[0]; + }; + }, + each: function each(obj, itr, scope) { + if (!obj) { + return; + } + if (ARR_EACH && obj.forEach && obj.forEach === ARR_EACH) { + obj.forEach(itr, scope); + } else if (obj.length === obj.length + 0) { + var key = void 0; + var l = void 0; + for (key = 0, l = obj.length; key < l; key++) { + if (key in obj && itr.call(scope, obj[key], key) === this.BREAK) { + return; + } + } + } else { + for (var _key in obj) { + if (itr.call(scope, obj[_key], _key) === this.BREAK) { + return; + } + } + } + }, + defer: function defer(fnc) { + setTimeout(fnc, 0); + }, + debounce: function debounce(func, threshold, callImmediately) { + var timeout = void 0; + return function () { + var obj = this; + var args = arguments; + function delayed() { + timeout = null; + if (!callImmediately) func.apply(obj, args); + } + var callNow = callImmediately || !timeout; + clearTimeout(timeout); + timeout = setTimeout(delayed, threshold); + if (callNow) { + func.apply(obj, args); + } + }; + }, + toArray: function toArray(obj) { + if (obj.toArray) return obj.toArray(); + return ARR_SLICE.call(obj); + }, + isUndefined: function isUndefined(obj) { + return obj === undefined; + }, + isNull: function isNull(obj) { + return obj === null; + }, + isNaN: function (_isNaN) { + function isNaN(_x) { + return _isNaN.apply(this, arguments); + } + isNaN.toString = function () { + return _isNaN.toString(); + }; + return isNaN; + }(function (obj) { + return isNaN(obj); + }), + isArray: Array.isArray || function (obj) { + return obj.constructor === Array; + }, + isObject: function isObject(obj) { + return obj === Object(obj); + }, + isNumber: function isNumber(obj) { + return obj === obj + 0; + }, + isString: function isString(obj) { + return obj === obj + ''; + }, + isBoolean: function isBoolean(obj) { + return obj === false || obj === true; + }, + isFunction: function isFunction(obj) { + return Object.prototype.toString.call(obj) === '[object Function]'; + } +}; + +var INTERPRETATIONS = [ +{ + litmus: Common.isString, + conversions: { + THREE_CHAR_HEX: { + read: function read(original) { + var test = original.match(/^#([A-F0-9])([A-F0-9])([A-F0-9])$/i); + if (test === null) { + return false; + } + return { + space: 'HEX', + hex: parseInt('0x' + test[1].toString() + test[1].toString() + test[2].toString() + test[2].toString() + test[3].toString() + test[3].toString(), 0) + }; + }, + write: colorToString + }, + SIX_CHAR_HEX: { + read: function read(original) { + var test = original.match(/^#([A-F0-9]{6})$/i); + if (test === null) { + return false; + } + return { + space: 'HEX', + hex: parseInt('0x' + test[1].toString(), 0) + }; + }, + write: colorToString + }, + CSS_RGB: { + read: function read(original) { + var test = original.match(/^rgb\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + if (test === null) { + return false; + } + return { + space: 'RGB', + r: parseFloat(test[1]), + g: parseFloat(test[2]), + b: parseFloat(test[3]) + }; + }, + write: colorToString + }, + CSS_RGBA: { + read: function read(original) { + var test = original.match(/^rgba\(\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*,\s*(.+)\s*\)/); + if (test === null) { + return false; + } + return { + space: 'RGB', + r: parseFloat(test[1]), + g: parseFloat(test[2]), + b: parseFloat(test[3]), + a: parseFloat(test[4]) + }; + }, + write: colorToString + } + } +}, +{ + litmus: Common.isNumber, + conversions: { + HEX: { + read: function read(original) { + return { + space: 'HEX', + hex: original, + conversionName: 'HEX' + }; + }, + write: function write(color) { + return color.hex; + } + } + } +}, +{ + litmus: Common.isArray, + conversions: { + RGB_ARRAY: { + read: function read(original) { + if (original.length !== 3) { + return false; + } + return { + space: 'RGB', + r: original[0], + g: original[1], + b: original[2] + }; + }, + write: function write(color) { + return [color.r, color.g, color.b]; + } + }, + RGBA_ARRAY: { + read: function read(original) { + if (original.length !== 4) return false; + return { + space: 'RGB', + r: original[0], + g: original[1], + b: original[2], + a: original[3] + }; + }, + write: function write(color) { + return [color.r, color.g, color.b, color.a]; + } + } + } +}, +{ + litmus: Common.isObject, + conversions: { + RGBA_OBJ: { + read: function read(original) { + if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b) && Common.isNumber(original.a)) { + return { + space: 'RGB', + r: original.r, + g: original.g, + b: original.b, + a: original.a + }; + } + return false; + }, + write: function write(color) { + return { + r: color.r, + g: color.g, + b: color.b, + a: color.a + }; + } + }, + RGB_OBJ: { + read: function read(original) { + if (Common.isNumber(original.r) && Common.isNumber(original.g) && Common.isNumber(original.b)) { + return { + space: 'RGB', + r: original.r, + g: original.g, + b: original.b + }; + } + return false; + }, + write: function write(color) { + return { + r: color.r, + g: color.g, + b: color.b + }; + } + }, + HSVA_OBJ: { + read: function read(original) { + if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v) && Common.isNumber(original.a)) { + return { + space: 'HSV', + h: original.h, + s: original.s, + v: original.v, + a: original.a + }; + } + return false; + }, + write: function write(color) { + return { + h: color.h, + s: color.s, + v: color.v, + a: color.a + }; + } + }, + HSV_OBJ: { + read: function read(original) { + if (Common.isNumber(original.h) && Common.isNumber(original.s) && Common.isNumber(original.v)) { + return { + space: 'HSV', + h: original.h, + s: original.s, + v: original.v + }; + } + return false; + }, + write: function write(color) { + return { + h: color.h, + s: color.s, + v: color.v + }; + } + } + } +}]; +var result = void 0; +var toReturn = void 0; +var interpret = function interpret() { + toReturn = false; + var original = arguments.length > 1 ? Common.toArray(arguments) : arguments[0]; + Common.each(INTERPRETATIONS, function (family) { + if (family.litmus(original)) { + Common.each(family.conversions, function (conversion, conversionName) { + result = conversion.read(original); + if (toReturn === false && result !== false) { + toReturn = result; + result.conversionName = conversionName; + result.conversion = conversion; + return Common.BREAK; + } + }); + return Common.BREAK; + } + }); + return toReturn; +}; + +var tmpComponent = void 0; +var ColorMath = { + hsv_to_rgb: function hsv_to_rgb(h, s, v) { + var hi = Math.floor(h / 60) % 6; + var f = h / 60 - Math.floor(h / 60); + var p = v * (1.0 - s); + var q = v * (1.0 - f * s); + var t = v * (1.0 - (1.0 - f) * s); + var c = [[v, t, p], [q, v, p], [p, v, t], [p, q, v], [t, p, v], [v, p, q]][hi]; + return { + r: c[0] * 255, + g: c[1] * 255, + b: c[2] * 255 + }; + }, + rgb_to_hsv: function rgb_to_hsv(r, g, b) { + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h = void 0; + var s = void 0; + if (max !== 0) { + s = delta / max; + } else { + return { + h: NaN, + s: 0, + v: 0 + }; + } + if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else { + h = 4 + (r - g) / delta; + } + h /= 6; + if (h < 0) { + h += 1; + } + return { + h: h * 360, + s: s, + v: max / 255 + }; + }, + rgb_to_hex: function rgb_to_hex(r, g, b) { + var hex = this.hex_with_component(0, 2, r); + hex = this.hex_with_component(hex, 1, g); + hex = this.hex_with_component(hex, 0, b); + return hex; + }, + component_from_hex: function component_from_hex(hex, componentIndex) { + return hex >> componentIndex * 8 & 0xFF; + }, + hex_with_component: function hex_with_component(hex, componentIndex, value) { + return value << (tmpComponent = componentIndex * 8) | hex & ~(0xFF << tmpComponent); + } +}; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; +}; + + + + + + + + + + + +var classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +}; + +var createClass = function () { + function defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; +}(); + + + + + + + +var get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } else { + return get(parent, property, receiver); + } + } else if ("value" in desc) { + return desc.value; + } else { + var getter = desc.get; + + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); + } +}; + +var inherits = function (subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; +}; + + + + + + + + + + + +var possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === "object" || typeof call === "function") ? call : self; +}; + +var Color = function () { + function Color() { + classCallCheck(this, Color); + this.__state = interpret.apply(this, arguments); + if (this.__state === false) { + throw new Error('Failed to interpret color arguments'); + } + this.__state.a = this.__state.a || 1; + } + createClass(Color, [{ + key: 'toString', + value: function toString() { + return colorToString(this); + } + }, { + key: 'toHexString', + value: function toHexString() { + return colorToString(this, true); + } + }, { + key: 'toOriginal', + value: function toOriginal() { + return this.__state.conversion.write(this); + } + }]); + return Color; +}(); +function defineRGBComponent(target, component, componentHexIndex) { + Object.defineProperty(target, component, { + get: function get$$1() { + if (this.__state.space === 'RGB') { + return this.__state[component]; + } + Color.recalculateRGB(this, component, componentHexIndex); + return this.__state[component]; + }, + set: function set$$1(v) { + if (this.__state.space !== 'RGB') { + Color.recalculateRGB(this, component, componentHexIndex); + this.__state.space = 'RGB'; + } + this.__state[component] = v; + } + }); +} +function defineHSVComponent(target, component) { + Object.defineProperty(target, component, { + get: function get$$1() { + if (this.__state.space === 'HSV') { + return this.__state[component]; + } + Color.recalculateHSV(this); + return this.__state[component]; + }, + set: function set$$1(v) { + if (this.__state.space !== 'HSV') { + Color.recalculateHSV(this); + this.__state.space = 'HSV'; + } + this.__state[component] = v; + } + }); +} +Color.recalculateRGB = function (color, component, componentHexIndex) { + if (color.__state.space === 'HEX') { + color.__state[component] = ColorMath.component_from_hex(color.__state.hex, componentHexIndex); + } else if (color.__state.space === 'HSV') { + Common.extend(color.__state, ColorMath.hsv_to_rgb(color.__state.h, color.__state.s, color.__state.v)); + } else { + throw new Error('Corrupted color state'); + } +}; +Color.recalculateHSV = function (color) { + var result = ColorMath.rgb_to_hsv(color.r, color.g, color.b); + Common.extend(color.__state, { + s: result.s, + v: result.v + }); + if (!Common.isNaN(result.h)) { + color.__state.h = result.h; + } else if (Common.isUndefined(color.__state.h)) { + color.__state.h = 0; + } +}; +Color.COMPONENTS = ['r', 'g', 'b', 'h', 's', 'v', 'hex', 'a']; +defineRGBComponent(Color.prototype, 'r', 2); +defineRGBComponent(Color.prototype, 'g', 1); +defineRGBComponent(Color.prototype, 'b', 0); +defineHSVComponent(Color.prototype, 'h'); +defineHSVComponent(Color.prototype, 's'); +defineHSVComponent(Color.prototype, 'v'); +Object.defineProperty(Color.prototype, 'a', { + get: function get$$1() { + return this.__state.a; + }, + set: function set$$1(v) { + this.__state.a = v; + } +}); +Object.defineProperty(Color.prototype, 'hex', { + get: function get$$1() { + if (!this.__state.space !== 'HEX') { + this.__state.hex = ColorMath.rgb_to_hex(this.r, this.g, this.b); + } + return this.__state.hex; + }, + set: function set$$1(v) { + this.__state.space = 'HEX'; + this.__state.hex = v; + } +}); + +var Controller = function () { + function Controller(object, property) { + classCallCheck(this, Controller); + this.initialValue = object[property]; + this.domElement = document.createElement('div'); + this.object = object; + this.property = property; + this.__onChange = undefined; + this.__onFinishChange = undefined; + } + createClass(Controller, [{ + key: 'onChange', + value: function onChange(fnc) { + this.__onChange = fnc; + return this; + } + }, { + key: 'onFinishChange', + value: function onFinishChange(fnc) { + this.__onFinishChange = fnc; + return this; + } + }, { + key: 'setValue', + value: function setValue(newValue) { + this.object[this.property] = newValue; + if (this.__onChange) { + this.__onChange.call(this, newValue); + } + this.updateDisplay(); + return this; + } + }, { + key: 'getValue', + value: function getValue() { + return this.object[this.property]; + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + return this; + } + }, { + key: 'isModified', + value: function isModified() { + return this.initialValue !== this.getValue(); + } + }]); + return Controller; +}(); + +var EVENT_MAP = { + HTMLEvents: ['change'], + MouseEvents: ['click', 'mousemove', 'mousedown', 'mouseup', 'mouseover'], + KeyboardEvents: ['keydown'] +}; +var EVENT_MAP_INV = {}; +Common.each(EVENT_MAP, function (v, k) { + Common.each(v, function (e) { + EVENT_MAP_INV[e] = k; + }); +}); +var CSS_VALUE_PIXELS = /(\d+(\.\d+)?)px/; +function cssValueToPixels(val) { + if (val === '0' || Common.isUndefined(val)) { + return 0; + } + var match = val.match(CSS_VALUE_PIXELS); + if (!Common.isNull(match)) { + return parseFloat(match[1]); + } + return 0; +} +var dom = { + makeSelectable: function makeSelectable(elem, selectable) { + if (elem === undefined || elem.style === undefined) return; + elem.onselectstart = selectable ? function () { + return false; + } : function () {}; + elem.style.MozUserSelect = selectable ? 'auto' : 'none'; + elem.style.KhtmlUserSelect = selectable ? 'auto' : 'none'; + elem.unselectable = selectable ? 'on' : 'off'; + }, + makeFullscreen: function makeFullscreen(elem, hor, vert) { + var vertical = vert; + var horizontal = hor; + if (Common.isUndefined(horizontal)) { + horizontal = true; + } + if (Common.isUndefined(vertical)) { + vertical = true; + } + elem.style.position = 'absolute'; + if (horizontal) { + elem.style.left = 0; + elem.style.right = 0; + } + if (vertical) { + elem.style.top = 0; + elem.style.bottom = 0; + } + }, + fakeEvent: function fakeEvent(elem, eventType, pars, aux) { + var params = pars || {}; + var className = EVENT_MAP_INV[eventType]; + if (!className) { + throw new Error('Event type ' + eventType + ' not supported.'); + } + var evt = document.createEvent(className); + switch (className) { + case 'MouseEvents': + { + var clientX = params.x || params.clientX || 0; + var clientY = params.y || params.clientY || 0; + evt.initMouseEvent(eventType, params.bubbles || false, params.cancelable || true, window, params.clickCount || 1, 0, + 0, + clientX, + clientY, + false, false, false, false, 0, null); + break; + } + case 'KeyboardEvents': + { + var init = evt.initKeyboardEvent || evt.initKeyEvent; + Common.defaults(params, { + cancelable: true, + ctrlKey: false, + altKey: false, + shiftKey: false, + metaKey: false, + keyCode: undefined, + charCode: undefined + }); + init(eventType, params.bubbles || false, params.cancelable, window, params.ctrlKey, params.altKey, params.shiftKey, params.metaKey, params.keyCode, params.charCode); + break; + } + default: + { + evt.initEvent(eventType, params.bubbles || false, params.cancelable || true); + break; + } + } + Common.defaults(evt, aux); + elem.dispatchEvent(evt); + }, + bind: function bind(elem, event, func, newBool) { + var bool = newBool || false; + if (elem.addEventListener) { + elem.addEventListener(event, func, bool); + } else if (elem.attachEvent) { + elem.attachEvent('on' + event, func); + } + return dom; + }, + unbind: function unbind(elem, event, func, newBool) { + var bool = newBool || false; + if (elem.removeEventListener) { + elem.removeEventListener(event, func, bool); + } else if (elem.detachEvent) { + elem.detachEvent('on' + event, func); + } + return dom; + }, + addClass: function addClass(elem, className) { + if (elem.className === undefined) { + elem.className = className; + } else if (elem.className !== className) { + var classes = elem.className.split(/ +/); + if (classes.indexOf(className) === -1) { + classes.push(className); + elem.className = classes.join(' ').replace(/^\s+/, '').replace(/\s+$/, ''); + } + } + return dom; + }, + removeClass: function removeClass(elem, className) { + if (className) { + if (elem.className === className) { + elem.removeAttribute('class'); + } else { + var classes = elem.className.split(/ +/); + var index = classes.indexOf(className); + if (index !== -1) { + classes.splice(index, 1); + elem.className = classes.join(' '); + } + } + } else { + elem.className = undefined; + } + return dom; + }, + hasClass: function hasClass(elem, className) { + return new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)').test(elem.className) || false; + }, + getWidth: function getWidth(elem) { + var style = getComputedStyle(elem); + return cssValueToPixels(style['border-left-width']) + cssValueToPixels(style['border-right-width']) + cssValueToPixels(style['padding-left']) + cssValueToPixels(style['padding-right']) + cssValueToPixels(style.width); + }, + getHeight: function getHeight(elem) { + var style = getComputedStyle(elem); + return cssValueToPixels(style['border-top-width']) + cssValueToPixels(style['border-bottom-width']) + cssValueToPixels(style['padding-top']) + cssValueToPixels(style['padding-bottom']) + cssValueToPixels(style.height); + }, + getOffset: function getOffset(el) { + var elem = el; + var offset = { left: 0, top: 0 }; + if (elem.offsetParent) { + do { + offset.left += elem.offsetLeft; + offset.top += elem.offsetTop; + elem = elem.offsetParent; + } while (elem); + } + return offset; + }, + isActive: function isActive(elem) { + return elem === document.activeElement && (elem.type || elem.href); + } +}; + +var BooleanController = function (_Controller) { + inherits(BooleanController, _Controller); + function BooleanController(object, property) { + classCallCheck(this, BooleanController); + var _this2 = possibleConstructorReturn(this, (BooleanController.__proto__ || Object.getPrototypeOf(BooleanController)).call(this, object, property)); + var _this = _this2; + _this2.__prev = _this2.getValue(); + _this2.__checkbox = document.createElement('input'); + _this2.__checkbox.setAttribute('type', 'checkbox'); + function onChange() { + _this.setValue(!_this.__prev); + } + dom.bind(_this2.__checkbox, 'change', onChange, false); + _this2.domElement.appendChild(_this2.__checkbox); + _this2.updateDisplay(); + return _this2; + } + createClass(BooleanController, [{ + key: 'setValue', + value: function setValue(v) { + var toReturn = get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'setValue', this).call(this, v); + if (this.__onFinishChange) { + this.__onFinishChange.call(this, this.getValue()); + } + this.__prev = this.getValue(); + return toReturn; + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + if (this.getValue() === true) { + this.__checkbox.setAttribute('checked', 'checked'); + this.__checkbox.checked = true; + this.__prev = true; + } else { + this.__checkbox.checked = false; + this.__prev = false; + } + return get(BooleanController.prototype.__proto__ || Object.getPrototypeOf(BooleanController.prototype), 'updateDisplay', this).call(this); + } + }]); + return BooleanController; +}(Controller); + +var OptionController = function (_Controller) { + inherits(OptionController, _Controller); + function OptionController(object, property, opts) { + classCallCheck(this, OptionController); + var _this2 = possibleConstructorReturn(this, (OptionController.__proto__ || Object.getPrototypeOf(OptionController)).call(this, object, property)); + var options = opts; + var _this = _this2; + _this2.__select = document.createElement('select'); + if (Common.isArray(options)) { + var map = {}; + Common.each(options, function (element) { + map[element] = element; + }); + options = map; + } + Common.each(options, function (value, key) { + var opt = document.createElement('option'); + opt.innerHTML = key; + opt.setAttribute('value', value); + _this.__select.appendChild(opt); + }); + _this2.updateDisplay(); + dom.bind(_this2.__select, 'change', function () { + var desiredValue = this.options[this.selectedIndex].value; + _this.setValue(desiredValue); + }); + _this2.domElement.appendChild(_this2.__select); + return _this2; + } + createClass(OptionController, [{ + key: 'setValue', + value: function setValue(v) { + var toReturn = get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'setValue', this).call(this, v); + if (this.__onFinishChange) { + this.__onFinishChange.call(this, this.getValue()); + } + return toReturn; + } + }, { + key: 'updateDisplay', + value: function updateDisplay() { + if (dom.isActive(this.__select)) return this; + this.__select.value = this.getValue(); + return get(OptionController.prototype.__proto__ || Object.getPrototypeOf(OptionController.prototype), 'updateDisplay', this).call(this); + } + }]); + return OptionController; +}(Controller); + +var StringController = function (_Controller) { + inherits(StringController, _Controller); + function StringController(object, property) { + classCallCheck(this, StringController); + var _this2 = possibleConstructorReturn(this, (StringController.__proto__ || Object.getPrototypeOf(StringController)).call(this, object, property)); + var _this = _this2; + function onChange() { + _this.setValue(_this.__input.value); + } + function onBlur() { + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + _this2.__input = document.createElement('input'); + _this2.__input.setAttribute('type', 'text'); + dom.bind(_this2.__input, 'keyup', onChange); + dom.bind(_this2.__input, 'change', onChange); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__input, 'keydown', function (e) { + if (e.keyCode === 13) { + this.blur(); + } + }); + _this2.updateDisplay(); + _this2.domElement.appendChild(_this2.__input); + return _this2; + } + createClass(StringController, [{ + key: 'updateDisplay', + value: function updateDisplay() { + if (!dom.isActive(this.__input)) { + this.__input.value = this.getValue(); + } + return get(StringController.prototype.__proto__ || Object.getPrototypeOf(StringController.prototype), 'updateDisplay', this).call(this); + } + }]); + return StringController; +}(Controller); + +function numDecimals(x) { + var _x = x.toString(); + if (_x.indexOf('.') > -1) { + return _x.length - _x.indexOf('.') - 1; + } + return 0; +} +var NumberController = function (_Controller) { + inherits(NumberController, _Controller); + function NumberController(object, property, params) { + classCallCheck(this, NumberController); + var _this = possibleConstructorReturn(this, (NumberController.__proto__ || Object.getPrototypeOf(NumberController)).call(this, object, property)); + var _params = params || {}; + _this.__min = _params.min; + _this.__max = _params.max; + _this.__step = _params.step; + if (Common.isUndefined(_this.__step)) { + if (_this.initialValue === 0) { + _this.__impliedStep = 1; + } else { + _this.__impliedStep = Math.pow(10, Math.floor(Math.log(Math.abs(_this.initialValue)) / Math.LN10)) / 10; + } + } else { + _this.__impliedStep = _this.__step; + } + _this.__precision = numDecimals(_this.__impliedStep); + return _this; + } + createClass(NumberController, [{ + key: 'setValue', + value: function setValue(v) { + var _v = v; + if (this.__min !== undefined && _v < this.__min) { + _v = this.__min; + } else if (this.__max !== undefined && _v > this.__max) { + _v = this.__max; + } + if (this.__step !== undefined && _v % this.__step !== 0) { + _v = Math.round(_v / this.__step) * this.__step; + } + return get(NumberController.prototype.__proto__ || Object.getPrototypeOf(NumberController.prototype), 'setValue', this).call(this, _v); + } + }, { + key: 'min', + value: function min(minValue) { + this.__min = minValue; + return this; + } + }, { + key: 'max', + value: function max(maxValue) { + this.__max = maxValue; + return this; + } + }, { + key: 'step', + value: function step(stepValue) { + this.__step = stepValue; + this.__impliedStep = stepValue; + this.__precision = numDecimals(stepValue); + return this; + } + }]); + return NumberController; +}(Controller); + +function roundToDecimal(value, decimals) { + var tenTo = Math.pow(10, decimals); + return Math.round(value * tenTo) / tenTo; +} +var NumberControllerBox = function (_NumberController) { + inherits(NumberControllerBox, _NumberController); + function NumberControllerBox(object, property, params) { + classCallCheck(this, NumberControllerBox); + var _this2 = possibleConstructorReturn(this, (NumberControllerBox.__proto__ || Object.getPrototypeOf(NumberControllerBox)).call(this, object, property, params)); + _this2.__truncationSuspended = false; + var _this = _this2; + var prevY = void 0; + function onChange() { + var attempted = parseFloat(_this.__input.value); + if (!Common.isNaN(attempted)) { + _this.setValue(attempted); + } + } + function onFinish() { + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + function onBlur() { + onFinish(); + } + function onMouseDrag(e) { + var diff = prevY - e.clientY; + _this.setValue(_this.getValue() + diff * _this.__impliedStep); + prevY = e.clientY; + } + function onMouseUp() { + dom.unbind(window, 'mousemove', onMouseDrag); + dom.unbind(window, 'mouseup', onMouseUp); + onFinish(); + } + function onMouseDown(e) { + dom.bind(window, 'mousemove', onMouseDrag); + dom.bind(window, 'mouseup', onMouseUp); + prevY = e.clientY; + } + _this2.__input = document.createElement('input'); + _this2.__input.setAttribute('type', 'text'); + dom.bind(_this2.__input, 'change', onChange); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__input, 'mousedown', onMouseDown); + dom.bind(_this2.__input, 'keydown', function (e) { + if (e.keyCode === 13) { + _this.__truncationSuspended = true; + this.blur(); + _this.__truncationSuspended = false; + onFinish(); + } + }); + _this2.updateDisplay(); + _this2.domElement.appendChild(_this2.__input); + return _this2; + } + createClass(NumberControllerBox, [{ + key: 'updateDisplay', + value: function updateDisplay() { + this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision); + return get(NumberControllerBox.prototype.__proto__ || Object.getPrototypeOf(NumberControllerBox.prototype), 'updateDisplay', this).call(this); + } + }]); + return NumberControllerBox; +}(NumberController); + +function map(v, i1, i2, o1, o2) { + return o1 + (o2 - o1) * ((v - i1) / (i2 - i1)); +} +var NumberControllerSlider = function (_NumberController) { + inherits(NumberControllerSlider, _NumberController); + function NumberControllerSlider(object, property, min, max, step) { + classCallCheck(this, NumberControllerSlider); + var _this2 = possibleConstructorReturn(this, (NumberControllerSlider.__proto__ || Object.getPrototypeOf(NumberControllerSlider)).call(this, object, property, { min: min, max: max, step: step })); + var _this = _this2; + _this2.__background = document.createElement('div'); + _this2.__foreground = document.createElement('div'); + dom.bind(_this2.__background, 'mousedown', onMouseDown); + dom.bind(_this2.__background, 'touchstart', onTouchStart); + dom.addClass(_this2.__background, 'slider'); + dom.addClass(_this2.__foreground, 'slider-fg'); + function onMouseDown(e) { + document.activeElement.blur(); + dom.bind(window, 'mousemove', onMouseDrag); + dom.bind(window, 'mouseup', onMouseUp); + onMouseDrag(e); + } + function onMouseDrag(e) { + e.preventDefault(); + var bgRect = _this.__background.getBoundingClientRect(); + _this.setValue(map(e.clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); + return false; + } + function onMouseUp() { + dom.unbind(window, 'mousemove', onMouseDrag); + dom.unbind(window, 'mouseup', onMouseUp); + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + function onTouchStart(e) { + if (e.touches.length !== 1) { + return; + } + dom.bind(window, 'touchmove', onTouchMove); + dom.bind(window, 'touchend', onTouchEnd); + onTouchMove(e); + } + function onTouchMove(e) { + var clientX = e.touches[0].clientX; + var bgRect = _this.__background.getBoundingClientRect(); + _this.setValue(map(clientX, bgRect.left, bgRect.right, _this.__min, _this.__max)); + } + function onTouchEnd() { + dom.unbind(window, 'touchmove', onTouchMove); + dom.unbind(window, 'touchend', onTouchEnd); + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.getValue()); + } + } + _this2.updateDisplay(); + _this2.__background.appendChild(_this2.__foreground); + _this2.domElement.appendChild(_this2.__background); + return _this2; + } + createClass(NumberControllerSlider, [{ + key: 'updateDisplay', + value: function updateDisplay() { + var pct = (this.getValue() - this.__min) / (this.__max - this.__min); + this.__foreground.style.width = pct * 100 + '%'; + return get(NumberControllerSlider.prototype.__proto__ || Object.getPrototypeOf(NumberControllerSlider.prototype), 'updateDisplay', this).call(this); + } + }]); + return NumberControllerSlider; +}(NumberController); + +var FunctionController = function (_Controller) { + inherits(FunctionController, _Controller); + function FunctionController(object, property, text) { + classCallCheck(this, FunctionController); + var _this2 = possibleConstructorReturn(this, (FunctionController.__proto__ || Object.getPrototypeOf(FunctionController)).call(this, object, property)); + var _this = _this2; + _this2.__button = document.createElement('div'); + _this2.__button.innerHTML = text === undefined ? 'Fire' : text; + dom.bind(_this2.__button, 'click', function (e) { + e.preventDefault(); + _this.fire(); + return false; + }); + dom.addClass(_this2.__button, 'button'); + _this2.domElement.appendChild(_this2.__button); + return _this2; + } + createClass(FunctionController, [{ + key: 'fire', + value: function fire() { + if (this.__onChange) { + this.__onChange.call(this); + } + this.getValue().call(this.object); + if (this.__onFinishChange) { + this.__onFinishChange.call(this, this.getValue()); + } + } + }]); + return FunctionController; +}(Controller); + +var ColorController = function (_Controller) { + inherits(ColorController, _Controller); + function ColorController(object, property) { + classCallCheck(this, ColorController); + var _this2 = possibleConstructorReturn(this, (ColorController.__proto__ || Object.getPrototypeOf(ColorController)).call(this, object, property)); + _this2.__color = new Color(_this2.getValue()); + _this2.__temp = new Color(0); + var _this = _this2; + _this2.domElement = document.createElement('div'); + dom.makeSelectable(_this2.domElement, false); + _this2.__selector = document.createElement('div'); + _this2.__selector.className = 'selector'; + _this2.__saturation_field = document.createElement('div'); + _this2.__saturation_field.className = 'saturation-field'; + _this2.__field_knob = document.createElement('div'); + _this2.__field_knob.className = 'field-knob'; + _this2.__field_knob_border = '2px solid '; + _this2.__hue_knob = document.createElement('div'); + _this2.__hue_knob.className = 'hue-knob'; + _this2.__hue_field = document.createElement('div'); + _this2.__hue_field.className = 'hue-field'; + _this2.__input = document.createElement('input'); + _this2.__input.type = 'text'; + _this2.__input_textShadow = '0 1px 1px '; + dom.bind(_this2.__input, 'keydown', function (e) { + if (e.keyCode === 13) { + onBlur.call(this); + } + }); + dom.bind(_this2.__input, 'blur', onBlur); + dom.bind(_this2.__selector, 'mousedown', function () { + dom.addClass(this, 'drag').bind(window, 'mouseup', function () { + dom.removeClass(_this.__selector, 'drag'); + }); + }); + dom.bind(_this2.__selector, 'touchstart', function () { + dom.addClass(this, 'drag').bind(window, 'touchend', function () { + dom.removeClass(_this.__selector, 'drag'); + }); + }); + var valueField = document.createElement('div'); + Common.extend(_this2.__selector.style, { + width: '122px', + height: '102px', + padding: '3px', + backgroundColor: '#222', + boxShadow: '0px 1px 3px rgba(0,0,0,0.3)' + }); + Common.extend(_this2.__field_knob.style, { + position: 'absolute', + width: '12px', + height: '12px', + border: _this2.__field_knob_border + (_this2.__color.v < 0.5 ? '#fff' : '#000'), + boxShadow: '0px 1px 3px rgba(0,0,0,0.5)', + borderRadius: '12px', + zIndex: 1 + }); + Common.extend(_this2.__hue_knob.style, { + position: 'absolute', + width: '15px', + height: '2px', + borderRight: '4px solid #fff', + zIndex: 1 + }); + Common.extend(_this2.__saturation_field.style, { + width: '100px', + height: '100px', + border: '1px solid #555', + marginRight: '3px', + display: 'inline-block', + cursor: 'pointer' + }); + Common.extend(valueField.style, { + width: '100%', + height: '100%', + background: 'none' + }); + linearGradient(valueField, 'top', 'rgba(0,0,0,0)', '#000'); + Common.extend(_this2.__hue_field.style, { + width: '15px', + height: '100px', + border: '1px solid #555', + cursor: 'ns-resize', + position: 'absolute', + top: '3px', + right: '3px' + }); + hueGradient(_this2.__hue_field); + Common.extend(_this2.__input.style, { + outline: 'none', + textAlign: 'center', + color: '#fff', + border: 0, + fontWeight: 'bold', + textShadow: _this2.__input_textShadow + 'rgba(0,0,0,0.7)' + }); + dom.bind(_this2.__saturation_field, 'mousedown', fieldDown); + dom.bind(_this2.__saturation_field, 'touchstart', fieldDown); + dom.bind(_this2.__field_knob, 'mousedown', fieldDown); + dom.bind(_this2.__field_knob, 'touchstart', fieldDown); + dom.bind(_this2.__hue_field, 'mousedown', fieldDownH); + dom.bind(_this2.__hue_field, 'touchstart', fieldDownH); + function fieldDown(e) { + setSV(e); + dom.bind(window, 'mousemove', setSV); + dom.bind(window, 'touchmove', setSV); + dom.bind(window, 'mouseup', fieldUpSV); + dom.bind(window, 'touchend', fieldUpSV); + } + function fieldDownH(e) { + setH(e); + dom.bind(window, 'mousemove', setH); + dom.bind(window, 'touchmove', setH); + dom.bind(window, 'mouseup', fieldUpH); + dom.bind(window, 'touchend', fieldUpH); + } + function fieldUpSV() { + dom.unbind(window, 'mousemove', setSV); + dom.unbind(window, 'touchmove', setSV); + dom.unbind(window, 'mouseup', fieldUpSV); + dom.unbind(window, 'touchend', fieldUpSV); + onFinish(); + } + function fieldUpH() { + dom.unbind(window, 'mousemove', setH); + dom.unbind(window, 'touchmove', setH); + dom.unbind(window, 'mouseup', fieldUpH); + dom.unbind(window, 'touchend', fieldUpH); + onFinish(); + } + function onBlur() { + var i = interpret(this.value); + if (i !== false) { + _this.__color.__state = i; + _this.setValue(_this.__color.toOriginal()); + } else { + this.value = _this.__color.toString(); + } + } + function onFinish() { + if (_this.__onFinishChange) { + _this.__onFinishChange.call(_this, _this.__color.toOriginal()); + } + } + _this2.__saturation_field.appendChild(valueField); + _this2.__selector.appendChild(_this2.__field_knob); + _this2.__selector.appendChild(_this2.__saturation_field); + _this2.__selector.appendChild(_this2.__hue_field); + _this2.__hue_field.appendChild(_this2.__hue_knob); + _this2.domElement.appendChild(_this2.__input); + _this2.domElement.appendChild(_this2.__selector); + _this2.updateDisplay(); + function setSV(e) { + if (e.type.indexOf('touch') === -1) { + e.preventDefault(); + } + var fieldRect = _this.__saturation_field.getBoundingClientRect(); + var _ref = e.touches && e.touches[0] || e, + clientX = _ref.clientX, + clientY = _ref.clientY; + var s = (clientX - fieldRect.left) / (fieldRect.right - fieldRect.left); + var v = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); + if (v > 1) { + v = 1; + } else if (v < 0) { + v = 0; + } + if (s > 1) { + s = 1; + } else if (s < 0) { + s = 0; + } + _this.__color.v = v; + _this.__color.s = s; + _this.setValue(_this.__color.toOriginal()); + return false; + } + function setH(e) { + if (e.type.indexOf('touch') === -1) { + e.preventDefault(); + } + var fieldRect = _this.__hue_field.getBoundingClientRect(); + var _ref2 = e.touches && e.touches[0] || e, + clientY = _ref2.clientY; + var h = 1 - (clientY - fieldRect.top) / (fieldRect.bottom - fieldRect.top); + if (h > 1) { + h = 1; + } else if (h < 0) { + h = 0; + } + _this.__color.h = h * 360; + _this.setValue(_this.__color.toOriginal()); + return false; + } + return _this2; + } + createClass(ColorController, [{ + key: 'updateDisplay', + value: function updateDisplay() { + var i = interpret(this.getValue()); + if (i !== false) { + var mismatch = false; + Common.each(Color.COMPONENTS, function (component) { + if (!Common.isUndefined(i[component]) && !Common.isUndefined(this.__color.__state[component]) && i[component] !== this.__color.__state[component]) { + mismatch = true; + return {}; + } + }, this); + if (mismatch) { + Common.extend(this.__color.__state, i); + } + } + Common.extend(this.__temp.__state, this.__color.__state); + this.__temp.a = 1; + var flip = this.__color.v < 0.5 || this.__color.s > 0.5 ? 255 : 0; + var _flip = 255 - flip; + Common.extend(this.__field_knob.style, { + marginLeft: 100 * this.__color.s - 7 + 'px', + marginTop: 100 * (1 - this.__color.v) - 7 + 'px', + backgroundColor: this.__temp.toHexString(), + border: this.__field_knob_border + 'rgb(' + flip + ',' + flip + ',' + flip + ')' + }); + this.__hue_knob.style.marginTop = (1 - this.__color.h / 360) * 100 + 'px'; + this.__temp.s = 1; + this.__temp.v = 1; + linearGradient(this.__saturation_field, 'left', '#fff', this.__temp.toHexString()); + this.__input.value = this.__color.toString(); + Common.extend(this.__input.style, { + backgroundColor: this.__color.toHexString(), + color: 'rgb(' + flip + ',' + flip + ',' + flip + ')', + textShadow: this.__input_textShadow + 'rgba(' + _flip + ',' + _flip + ',' + _flip + ',.7)' + }); + } + }]); + return ColorController; +}(Controller); +var vendors = ['-moz-', '-o-', '-webkit-', '-ms-', '']; +function linearGradient(elem, x, a, b) { + elem.style.background = ''; + Common.each(vendors, function (vendor) { + elem.style.cssText += 'background: ' + vendor + 'linear-gradient(' + x + ', ' + a + ' 0%, ' + b + ' 100%); '; + }); +} +function hueGradient(elem) { + elem.style.background = ''; + elem.style.cssText += 'background: -moz-linear-gradient(top, #ff0000 0%, #ff00ff 17%, #0000ff 34%, #00ffff 50%, #00ff00 67%, #ffff00 84%, #ff0000 100%);'; + elem.style.cssText += 'background: -webkit-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: -o-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: -ms-linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; + elem.style.cssText += 'background: linear-gradient(top, #ff0000 0%,#ff00ff 17%,#0000ff 34%,#00ffff 50%,#00ff00 67%,#ffff00 84%,#ff0000 100%);'; +} + +var css = { + load: function load(url, indoc) { + var doc = indoc || document; + var link = doc.createElement('link'); + link.type = 'text/css'; + link.rel = 'stylesheet'; + link.href = url; + doc.getElementsByTagName('head')[0].appendChild(link); + }, + inject: function inject(cssContent, indoc) { + var doc = indoc || document; + var injected = document.createElement('style'); + injected.type = 'text/css'; + injected.innerHTML = cssContent; + var head = doc.getElementsByTagName('head')[0]; + try { + head.appendChild(injected); + } catch (e) { + } + } +}; + +var saveDialogContents = "
\n\n Here's the new load parameter for your GUI's constructor:\n\n \n\n
\n\n Automatically save\n values to localStorage on exit.\n\n
The values saved to localStorage will\n override those passed to dat.GUI's constructor. This makes it\n easier to work incrementally, but localStorage is fragile,\n and your friends may not see the same values you do.\n\n
\n\n
\n\n
"; + +var ControllerFactory = function ControllerFactory(object, property) { + var initialValue = object[property]; + if (Common.isArray(arguments[2]) || Common.isObject(arguments[2])) { + return new OptionController(object, property, arguments[2]); + } + if (Common.isNumber(initialValue)) { + if (Common.isNumber(arguments[2]) && Common.isNumber(arguments[3])) { + if (Common.isNumber(arguments[4])) { + return new NumberControllerSlider(object, property, arguments[2], arguments[3], arguments[4]); + } + return new NumberControllerSlider(object, property, arguments[2], arguments[3]); + } + if (Common.isNumber(arguments[4])) { + return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3], step: arguments[4] }); + } + return new NumberControllerBox(object, property, { min: arguments[2], max: arguments[3] }); + } + if (Common.isString(initialValue)) { + return new StringController(object, property); + } + if (Common.isFunction(initialValue)) { + return new FunctionController(object, property, ''); + } + if (Common.isBoolean(initialValue)) { + return new BooleanController(object, property); + } + return null; +}; + +function requestAnimationFrame(callback) { + setTimeout(callback, 1000 / 60); +} +var requestAnimationFrame$1 = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || requestAnimationFrame; + +var CenteredDiv = function () { + function CenteredDiv() { + classCallCheck(this, CenteredDiv); + this.backgroundElement = document.createElement('div'); + Common.extend(this.backgroundElement.style, { + backgroundColor: 'rgba(0,0,0,0.8)', + top: 0, + left: 0, + display: 'none', + zIndex: '1000', + opacity: 0, + WebkitTransition: 'opacity 0.2s linear', + transition: 'opacity 0.2s linear' + }); + dom.makeFullscreen(this.backgroundElement); + this.backgroundElement.style.position = 'fixed'; + this.domElement = document.createElement('div'); + Common.extend(this.domElement.style, { + position: 'fixed', + display: 'none', + zIndex: '1001', + opacity: 0, + WebkitTransition: '-webkit-transform 0.2s ease-out, opacity 0.2s linear', + transition: 'transform 0.2s ease-out, opacity 0.2s linear' + }); + document.body.appendChild(this.backgroundElement); + document.body.appendChild(this.domElement); + var _this = this; + dom.bind(this.backgroundElement, 'click', function () { + _this.hide(); + }); + } + createClass(CenteredDiv, [{ + key: 'show', + value: function show() { + var _this = this; + this.backgroundElement.style.display = 'block'; + this.domElement.style.display = 'block'; + this.domElement.style.opacity = 0; + this.domElement.style.webkitTransform = 'scale(1.1)'; + this.layout(); + Common.defer(function () { + _this.backgroundElement.style.opacity = 1; + _this.domElement.style.opacity = 1; + _this.domElement.style.webkitTransform = 'scale(1)'; + }); + } + }, { + key: 'hide', + value: function hide() { + var _this = this; + var hide = function hide() { + _this.domElement.style.display = 'none'; + _this.backgroundElement.style.display = 'none'; + dom.unbind(_this.domElement, 'webkitTransitionEnd', hide); + dom.unbind(_this.domElement, 'transitionend', hide); + dom.unbind(_this.domElement, 'oTransitionEnd', hide); + }; + dom.bind(this.domElement, 'webkitTransitionEnd', hide); + dom.bind(this.domElement, 'transitionend', hide); + dom.bind(this.domElement, 'oTransitionEnd', hide); + this.backgroundElement.style.opacity = 0; + this.domElement.style.opacity = 0; + this.domElement.style.webkitTransform = 'scale(1.1)'; + } + }, { + key: 'layout', + value: function layout() { + this.domElement.style.left = window.innerWidth / 2 - dom.getWidth(this.domElement) / 2 + 'px'; + this.domElement.style.top = window.innerHeight / 2 - dom.getHeight(this.domElement) / 2 + 'px'; + } + }]); + return CenteredDiv; +}(); + +var styleSheet = ___$insertStyle(".dg ul{list-style:none;margin:0;padding:0;width:100%;clear:both}.dg.ac{position:fixed;top:0;left:0;right:0;height:0;z-index:0}.dg:not(.ac) .main{overflow:hidden}.dg.main{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear}.dg.main.taller-than-window{overflow-y:auto}.dg.main.taller-than-window .close-button{opacity:1;margin-top:-1px;border-top:1px solid #2c2c2c}.dg.main ul.closed .close-button{opacity:1 !important}.dg.main:hover .close-button,.dg.main .close-button.drag{opacity:1}.dg.main .close-button{-webkit-transition:opacity .1s linear;-o-transition:opacity .1s linear;-moz-transition:opacity .1s linear;transition:opacity .1s linear;border:0;line-height:19px;height:20px;cursor:pointer;text-align:center;background-color:#000}.dg.main .close-button.close-top{position:relative}.dg.main .close-button.close-bottom{position:absolute}.dg.main .close-button:hover{background-color:#111}.dg.a{float:right;margin-right:15px;overflow-y:visible}.dg.a.has-save>ul.close-top{margin-top:0}.dg.a.has-save>ul.close-bottom{margin-top:27px}.dg.a.has-save>ul.closed{margin-top:0}.dg.a .save-row{top:0;z-index:1002}.dg.a .save-row.close-top{position:relative}.dg.a .save-row.close-bottom{position:fixed}.dg li{-webkit-transition:height .1s ease-out;-o-transition:height .1s ease-out;-moz-transition:height .1s ease-out;transition:height .1s ease-out;-webkit-transition:overflow .1s linear;-o-transition:overflow .1s linear;-moz-transition:overflow .1s linear;transition:overflow .1s linear}.dg li:not(.folder){cursor:auto;height:27px;line-height:27px;padding:0 4px 0 5px}.dg li.folder{padding:0;border-left:4px solid rgba(0,0,0,0)}.dg li.title{cursor:pointer;margin-left:-4px}.dg .closed li:not(.title),.dg .closed ul li,.dg .closed ul li>*{height:0;overflow:hidden;border:0}.dg .cr{clear:both;padding-left:3px;height:27px;overflow:hidden}.dg .property-name{cursor:default;float:left;clear:left;width:40%;overflow:hidden;text-overflow:ellipsis}.dg .c{float:left;width:60%;position:relative}.dg .c input[type=text]{border:0;margin-top:4px;padding:3px;width:100%;float:right}.dg .has-slider input[type=text]{width:30%;margin-left:0}.dg .slider{float:left;width:66%;margin-left:-5px;margin-right:0;height:19px;margin-top:4px}.dg .slider-fg{height:100%}.dg .c input[type=checkbox]{margin-top:7px}.dg .c select{margin-top:5px}.dg .cr.function,.dg .cr.function .property-name,.dg .cr.function *,.dg .cr.boolean,.dg .cr.boolean *{cursor:pointer}.dg .cr.color{overflow:visible}.dg .selector{display:none;position:absolute;margin-left:-9px;margin-top:23px;z-index:10}.dg .c:hover .selector,.dg .selector.drag{display:block}.dg li.save-row{padding:0}.dg li.save-row .button{display:inline-block;padding:0px 6px}.dg.dialogue{background-color:#222;width:460px;padding:15px;font-size:13px;line-height:15px}#dg-new-constructor{padding:10px;color:#222;font-family:Monaco, monospace;font-size:10px;border:0;resize:none;box-shadow:inset 1px 1px 1px #888;word-wrap:break-word;margin:12px 0;display:block;width:440px;overflow-y:scroll;height:100px;position:relative}#dg-local-explain{display:none;font-size:11px;line-height:17px;border-radius:3px;background-color:#333;padding:8px;margin-top:10px}#dg-local-explain code{font-size:10px}#dat-gui-save-locally{display:none}.dg{color:#eee;font:11px 'Lucida Grande', sans-serif;text-shadow:0 -1px 0 #111}.dg.main::-webkit-scrollbar{width:5px;background:#1a1a1a}.dg.main::-webkit-scrollbar-corner{height:0;display:none}.dg.main::-webkit-scrollbar-thumb{border-radius:5px;background:#676767}.dg li:not(.folder){background:#1a1a1a;border-bottom:1px solid #2c2c2c}.dg li.save-row{line-height:25px;background:#dad5cb;border:0}.dg li.save-row select{margin-left:5px;width:108px}.dg li.save-row .button{margin-left:5px;margin-top:1px;border-radius:2px;font-size:9px;line-height:7px;padding:4px 4px 5px 4px;background:#c5bdad;color:#fff;text-shadow:0 1px 0 #b0a58f;box-shadow:0 -1px 0 #b0a58f;cursor:pointer}.dg li.save-row .button.gears{background:#c5bdad url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAANCAYAAAB/9ZQ7AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAQJJREFUeNpiYKAU/P//PwGIC/ApCABiBSAW+I8AClAcgKxQ4T9hoMAEUrxx2QSGN6+egDX+/vWT4e7N82AMYoPAx/evwWoYoSYbACX2s7KxCxzcsezDh3evFoDEBYTEEqycggWAzA9AuUSQQgeYPa9fPv6/YWm/Acx5IPb7ty/fw+QZblw67vDs8R0YHyQhgObx+yAJkBqmG5dPPDh1aPOGR/eugW0G4vlIoTIfyFcA+QekhhHJhPdQxbiAIguMBTQZrPD7108M6roWYDFQiIAAv6Aow/1bFwXgis+f2LUAynwoIaNcz8XNx3Dl7MEJUDGQpx9gtQ8YCueB+D26OECAAQDadt7e46D42QAAAABJRU5ErkJggg==) 2px 1px no-repeat;height:7px;width:8px}.dg li.save-row .button:hover{background-color:#bab19e;box-shadow:0 -1px 0 #b0a58f}.dg li.folder{border-bottom:0}.dg li.title{padding-left:16px;background:#000 url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlI+hKgFxoCgAOw==) 6px 10px no-repeat;cursor:pointer;border-bottom:1px solid rgba(255,255,255,0.2)}.dg .closed li.title{background-image:url(data:image/gif;base64,R0lGODlhBQAFAJEAAP////Pz8////////yH5BAEAAAIALAAAAAAFAAUAAAIIlGIWqMCbWAEAOw==)}.dg .cr.boolean{border-left:3px solid #806787}.dg .cr.color{border-left:3px solid}.dg .cr.function{border-left:3px solid #e61d5f}.dg .cr.number{border-left:3px solid #2FA1D6}.dg .cr.number input[type=text]{color:#2FA1D6}.dg .cr.string{border-left:3px solid #1ed36f}.dg .cr.string input[type=text]{color:#1ed36f}.dg .cr.function:hover,.dg .cr.boolean:hover{background:#111}.dg .c input[type=text]{background:#303030;outline:none}.dg .c input[type=text]:hover{background:#3c3c3c}.dg .c input[type=text]:focus{background:#494949;color:#fff}.dg .c .slider{background:#303030;cursor:ew-resize}.dg .c .slider-fg{background:#2FA1D6;max-width:100%}.dg .c .slider:hover{background:#3c3c3c}.dg .c .slider:hover .slider-fg{background:#44abda}\n"); + +css.inject(styleSheet); +var CSS_NAMESPACE = 'dg'; +var HIDE_KEY_CODE = 72; +var CLOSE_BUTTON_HEIGHT = 20; +var DEFAULT_DEFAULT_PRESET_NAME = 'Default'; +var SUPPORTS_LOCAL_STORAGE = function () { + try { + return !!window.localStorage; + } catch (e) { + return false; + } +}(); +var SAVE_DIALOGUE = void 0; +var autoPlaceVirgin = true; +var autoPlaceContainer = void 0; +var hide = false; +var hideableGuis = []; +var GUI = function GUI(pars) { + var _this = this; + var params = pars || {}; + this.domElement = document.createElement('div'); + this.__ul = document.createElement('ul'); + this.domElement.appendChild(this.__ul); + dom.addClass(this.domElement, CSS_NAMESPACE); + this.__folders = {}; + this.__controllers = []; + this.__rememberedObjects = []; + this.__rememberedObjectIndecesToControllers = []; + this.__listening = []; + params = Common.defaults(params, { + closeOnTop: false, + autoPlace: true, + width: GUI.DEFAULT_WIDTH + }); + params = Common.defaults(params, { + resizable: params.autoPlace, + hideable: params.autoPlace + }); + if (!Common.isUndefined(params.load)) { + if (params.preset) { + params.load.preset = params.preset; + } + } else { + params.load = { preset: DEFAULT_DEFAULT_PRESET_NAME }; + } + if (Common.isUndefined(params.parent) && params.hideable) { + hideableGuis.push(this); + } + params.resizable = Common.isUndefined(params.parent) && params.resizable; + if (params.autoPlace && Common.isUndefined(params.scrollable)) { + params.scrollable = true; + } + var useLocalStorage = SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(this, 'isLocal')) === 'true'; + var saveToLocalStorage = void 0; + Object.defineProperties(this, + { + parent: { + get: function get$$1() { + return params.parent; + } + }, + scrollable: { + get: function get$$1() { + return params.scrollable; + } + }, + autoPlace: { + get: function get$$1() { + return params.autoPlace; + } + }, + closeOnTop: { + get: function get$$1() { + return params.closeOnTop; + } + }, + preset: { + get: function get$$1() { + if (_this.parent) { + return _this.getRoot().preset; + } + return params.load.preset; + }, + set: function set$$1(v) { + if (_this.parent) { + _this.getRoot().preset = v; + } else { + params.load.preset = v; + } + setPresetSelectIndex(this); + _this.revert(); + } + }, + width: { + get: function get$$1() { + return params.width; + }, + set: function set$$1(v) { + params.width = v; + setWidth(_this, v); + } + }, + name: { + get: function get$$1() { + return params.name; + }, + set: function set$$1(v) { + params.name = v; + if (titleRowName) { + titleRowName.innerHTML = params.name; + } + } + }, + closed: { + get: function get$$1() { + return params.closed; + }, + set: function set$$1(v) { + params.closed = v; + if (params.closed) { + dom.addClass(_this.__ul, GUI.CLASS_CLOSED); + } else { + dom.removeClass(_this.__ul, GUI.CLASS_CLOSED); + } + this.onResize(); + if (_this.__closeButton) { + _this.__closeButton.innerHTML = v ? GUI.TEXT_OPEN : GUI.TEXT_CLOSED; + } + } + }, + load: { + get: function get$$1() { + return params.load; + } + }, + useLocalStorage: { + get: function get$$1() { + return useLocalStorage; + }, + set: function set$$1(bool) { + if (SUPPORTS_LOCAL_STORAGE) { + useLocalStorage = bool; + if (bool) { + dom.bind(window, 'unload', saveToLocalStorage); + } else { + dom.unbind(window, 'unload', saveToLocalStorage); + } + localStorage.setItem(getLocalStorageHash(_this, 'isLocal'), bool); + } + } + } + }); + if (Common.isUndefined(params.parent)) { + params.closed = false; + dom.addClass(this.domElement, GUI.CLASS_MAIN); + dom.makeSelectable(this.domElement, false); + if (SUPPORTS_LOCAL_STORAGE) { + if (useLocalStorage) { + _this.useLocalStorage = true; + var savedGui = localStorage.getItem(getLocalStorageHash(this, 'gui')); + if (savedGui) { + params.load = JSON.parse(savedGui); + } + } + } + this.__closeButton = document.createElement('div'); + this.__closeButton.innerHTML = GUI.TEXT_CLOSED; + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BUTTON); + if (params.closeOnTop) { + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_TOP); + this.domElement.insertBefore(this.__closeButton, this.domElement.childNodes[0]); + } else { + dom.addClass(this.__closeButton, GUI.CLASS_CLOSE_BOTTOM); + this.domElement.appendChild(this.__closeButton); + } + dom.bind(this.__closeButton, 'click', function () { + _this.closed = !_this.closed; + }); + } else { + if (params.closed === undefined) { + params.closed = true; + } + var _titleRowName = document.createTextNode(params.name); + dom.addClass(_titleRowName, 'controller-name'); + var titleRow = addRow(_this, _titleRowName); + var onClickTitle = function onClickTitle(e) { + e.preventDefault(); + _this.closed = !_this.closed; + return false; + }; + dom.addClass(this.__ul, GUI.CLASS_CLOSED); + dom.addClass(titleRow, 'title'); + dom.bind(titleRow, 'click', onClickTitle); + if (!params.closed) { + this.closed = false; + } + } + if (params.autoPlace) { + if (Common.isUndefined(params.parent)) { + if (autoPlaceVirgin) { + autoPlaceContainer = document.createElement('div'); + dom.addClass(autoPlaceContainer, CSS_NAMESPACE); + dom.addClass(autoPlaceContainer, GUI.CLASS_AUTO_PLACE_CONTAINER); + document.body.appendChild(autoPlaceContainer); + autoPlaceVirgin = false; + } + autoPlaceContainer.appendChild(this.domElement); + dom.addClass(this.domElement, GUI.CLASS_AUTO_PLACE); + } + if (!this.parent) { + setWidth(_this, params.width); + } + } + this.__resizeHandler = function () { + _this.onResizeDebounced(); + }; + dom.bind(window, 'resize', this.__resizeHandler); + dom.bind(this.__ul, 'webkitTransitionEnd', this.__resizeHandler); + dom.bind(this.__ul, 'transitionend', this.__resizeHandler); + dom.bind(this.__ul, 'oTransitionEnd', this.__resizeHandler); + this.onResize(); + if (params.resizable) { + addResizeHandle(this); + } + saveToLocalStorage = function saveToLocalStorage() { + if (SUPPORTS_LOCAL_STORAGE && localStorage.getItem(getLocalStorageHash(_this, 'isLocal')) === 'true') { + localStorage.setItem(getLocalStorageHash(_this, 'gui'), JSON.stringify(_this.getSaveObject())); + } + }; + this.saveToLocalStorageIfPossible = saveToLocalStorage; + function resetWidth() { + var root = _this.getRoot(); + root.width += 1; + Common.defer(function () { + root.width -= 1; + }); + } + if (!params.parent) { + resetWidth(); + } +}; +GUI.toggleHide = function () { + hide = !hide; + Common.each(hideableGuis, function (gui) { + gui.domElement.style.display = hide ? 'none' : ''; + }); +}; +GUI.CLASS_AUTO_PLACE = 'a'; +GUI.CLASS_AUTO_PLACE_CONTAINER = 'ac'; +GUI.CLASS_MAIN = 'main'; +GUI.CLASS_CONTROLLER_ROW = 'cr'; +GUI.CLASS_TOO_TALL = 'taller-than-window'; +GUI.CLASS_CLOSED = 'closed'; +GUI.CLASS_CLOSE_BUTTON = 'close-button'; +GUI.CLASS_CLOSE_TOP = 'close-top'; +GUI.CLASS_CLOSE_BOTTOM = 'close-bottom'; +GUI.CLASS_DRAG = 'drag'; +GUI.DEFAULT_WIDTH = 245; +GUI.TEXT_CLOSED = 'Close Controls'; +GUI.TEXT_OPEN = 'Open Controls'; +GUI._keydownHandler = function (e) { + if (document.activeElement.type !== 'text' && (e.which === HIDE_KEY_CODE || e.keyCode === HIDE_KEY_CODE)) { + GUI.toggleHide(); + } +}; +dom.bind(window, 'keydown', GUI._keydownHandler, false); +Common.extend(GUI.prototype, +{ + add: function add(object, property) { + return _add(this, object, property, { + factoryArgs: Array.prototype.slice.call(arguments, 2) + }); + }, + addColor: function addColor(object, property) { + return _add(this, object, property, { + color: true + }); + }, + remove: function remove(controller) { + this.__ul.removeChild(controller.__li); + this.__controllers.splice(this.__controllers.indexOf(controller), 1); + var _this = this; + Common.defer(function () { + _this.onResize(); + }); + }, + destroy: function destroy() { + if (this.parent) { + throw new Error('Only the root GUI should be removed with .destroy(). ' + 'For subfolders, use gui.removeFolder(folder) instead.'); + } + if (this.autoPlace) { + autoPlaceContainer.removeChild(this.domElement); + } + var _this = this; + Common.each(this.__folders, function (subfolder) { + _this.removeFolder(subfolder); + }); + dom.unbind(window, 'keydown', GUI._keydownHandler, false); + removeListeners(this); + }, + addFolder: function addFolder(name) { + if (this.__folders[name] !== undefined) { + throw new Error('You already have a folder in this GUI by the' + ' name "' + name + '"'); + } + var newGuiParams = { name: name, parent: this }; + newGuiParams.autoPlace = this.autoPlace; + if (this.load && + this.load.folders && + this.load.folders[name]) { + newGuiParams.closed = this.load.folders[name].closed; + newGuiParams.load = this.load.folders[name]; + } + var gui = new GUI(newGuiParams); + this.__folders[name] = gui; + var li = addRow(this, gui.domElement); + dom.addClass(li, 'folder'); + return gui; + }, + removeFolder: function removeFolder(folder) { + this.__ul.removeChild(folder.domElement.parentElement); + delete this.__folders[folder.name]; + if (this.load && + this.load.folders && + this.load.folders[folder.name]) { + delete this.load.folders[folder.name]; + } + removeListeners(folder); + var _this = this; + Common.each(folder.__folders, function (subfolder) { + folder.removeFolder(subfolder); + }); + Common.defer(function () { + _this.onResize(); + }); + }, + open: function open() { + this.closed = false; + }, + close: function close() { + this.closed = true; + }, + onResize: function onResize() { + var root = this.getRoot(); + if (root.scrollable) { + var top = dom.getOffset(root.__ul).top; + var h = 0; + Common.each(root.__ul.childNodes, function (node) { + if (!(root.autoPlace && node === root.__save_row)) { + h += dom.getHeight(node); + } + }); + if (window.innerHeight - top - CLOSE_BUTTON_HEIGHT < h) { + dom.addClass(root.domElement, GUI.CLASS_TOO_TALL); + root.__ul.style.height = window.innerHeight - top - CLOSE_BUTTON_HEIGHT + 'px'; + } else { + dom.removeClass(root.domElement, GUI.CLASS_TOO_TALL); + root.__ul.style.height = 'auto'; + } + } + if (root.__resize_handle) { + Common.defer(function () { + root.__resize_handle.style.height = root.__ul.offsetHeight + 'px'; + }); + } + if (root.__closeButton) { + root.__closeButton.style.width = root.width + 'px'; + } + }, + onResizeDebounced: Common.debounce(function () { + this.onResize(); + }, 50), + remember: function remember() { + if (Common.isUndefined(SAVE_DIALOGUE)) { + SAVE_DIALOGUE = new CenteredDiv(); + SAVE_DIALOGUE.domElement.innerHTML = saveDialogContents; + } + if (this.parent) { + throw new Error('You can only call remember on a top level GUI.'); + } + var _this = this; + Common.each(Array.prototype.slice.call(arguments), function (object) { + if (_this.__rememberedObjects.length === 0) { + addSaveMenu(_this); + } + if (_this.__rememberedObjects.indexOf(object) === -1) { + _this.__rememberedObjects.push(object); + } + }); + if (this.autoPlace) { + setWidth(this, this.width); + } + }, + getRoot: function getRoot() { + var gui = this; + while (gui.parent) { + gui = gui.parent; + } + return gui; + }, + getSaveObject: function getSaveObject() { + var toReturn = this.load; + toReturn.closed = this.closed; + if (this.__rememberedObjects.length > 0) { + toReturn.preset = this.preset; + if (!toReturn.remembered) { + toReturn.remembered = {}; + } + toReturn.remembered[this.preset] = getCurrentPreset(this); + } + toReturn.folders = {}; + Common.each(this.__folders, function (element, key) { + toReturn.folders[key] = element.getSaveObject(); + }); + return toReturn; + }, + save: function save() { + if (!this.load.remembered) { + this.load.remembered = {}; + } + this.load.remembered[this.preset] = getCurrentPreset(this); + markPresetModified(this, false); + this.saveToLocalStorageIfPossible(); + }, + saveAs: function saveAs(presetName) { + if (!this.load.remembered) { + this.load.remembered = {}; + this.load.remembered[DEFAULT_DEFAULT_PRESET_NAME] = getCurrentPreset(this, true); + } + this.load.remembered[presetName] = getCurrentPreset(this); + this.preset = presetName; + addPresetOption(this, presetName, true); + this.saveToLocalStorageIfPossible(); + }, + revert: function revert(gui) { + Common.each(this.__controllers, function (controller) { + if (!this.getRoot().load.remembered) { + controller.setValue(controller.initialValue); + } else { + recallSavedValue(gui || this.getRoot(), controller); + } + if (controller.__onFinishChange) { + controller.__onFinishChange.call(controller, controller.getValue()); + } + }, this); + Common.each(this.__folders, function (folder) { + folder.revert(folder); + }); + if (!gui) { + markPresetModified(this.getRoot(), false); + } + }, + listen: function listen(controller) { + var init = this.__listening.length === 0; + this.__listening.push(controller); + if (init) { + updateDisplays(this.__listening); + } + }, + updateDisplay: function updateDisplay() { + Common.each(this.__controllers, function (controller) { + controller.updateDisplay(); + }); + Common.each(this.__folders, function (folder) { + folder.updateDisplay(); + }); + } +}); +function addRow(gui, newDom, liBefore) { + var li = document.createElement('li'); + if (newDom) { + li.appendChild(newDom); + } + if (liBefore) { + gui.__ul.insertBefore(li, liBefore); + } else { + gui.__ul.appendChild(li); + } + gui.onResize(); + return li; +} +function removeListeners(gui) { + dom.unbind(window, 'resize', gui.__resizeHandler); + if (gui.saveToLocalStorageIfPossible) { + dom.unbind(window, 'unload', gui.saveToLocalStorageIfPossible); + } +} +function markPresetModified(gui, modified) { + var opt = gui.__preset_select[gui.__preset_select.selectedIndex]; + if (modified) { + opt.innerHTML = opt.value + '*'; + } else { + opt.innerHTML = opt.value; + } +} +function augmentController(gui, li, controller) { + controller.__li = li; + controller.__gui = gui; + Common.extend(controller, { + options: function options(_options) { + if (arguments.length > 1) { + var nextSibling = controller.__li.nextElementSibling; + controller.remove(); + return _add(gui, controller.object, controller.property, { + before: nextSibling, + factoryArgs: [Common.toArray(arguments)] + }); + } + if (Common.isArray(_options) || Common.isObject(_options)) { + var _nextSibling = controller.__li.nextElementSibling; + controller.remove(); + return _add(gui, controller.object, controller.property, { + before: _nextSibling, + factoryArgs: [_options] + }); + } + }, + name: function name(_name) { + controller.__li.firstElementChild.firstElementChild.innerHTML = _name; + return controller; + }, + listen: function listen() { + controller.__gui.listen(controller); + return controller; + }, + remove: function remove() { + controller.__gui.remove(controller); + return controller; + } + }); + if (controller instanceof NumberControllerSlider) { + var box = new NumberControllerBox(controller.object, controller.property, { min: controller.__min, max: controller.__max, step: controller.__step }); + Common.each(['updateDisplay', 'onChange', 'onFinishChange', 'step'], function (method) { + var pc = controller[method]; + var pb = box[method]; + controller[method] = box[method] = function () { + var args = Array.prototype.slice.call(arguments); + pb.apply(box, args); + return pc.apply(controller, args); + }; + }); + dom.addClass(li, 'has-slider'); + controller.domElement.insertBefore(box.domElement, controller.domElement.firstElementChild); + } else if (controller instanceof NumberControllerBox) { + var r = function r(returned) { + if (Common.isNumber(controller.__min) && Common.isNumber(controller.__max)) { + var oldName = controller.__li.firstElementChild.firstElementChild.innerHTML; + var wasListening = controller.__gui.__listening.indexOf(controller) > -1; + controller.remove(); + var newController = _add(gui, controller.object, controller.property, { + before: controller.__li.nextElementSibling, + factoryArgs: [controller.__min, controller.__max, controller.__step] + }); + newController.name(oldName); + if (wasListening) newController.listen(); + return newController; + } + return returned; + }; + controller.min = Common.compose(r, controller.min); + controller.max = Common.compose(r, controller.max); + } else if (controller instanceof BooleanController) { + dom.bind(li, 'click', function () { + dom.fakeEvent(controller.__checkbox, 'click'); + }); + dom.bind(controller.__checkbox, 'click', function (e) { + e.stopPropagation(); + }); + } else if (controller instanceof FunctionController) { + dom.bind(li, 'click', function () { + dom.fakeEvent(controller.__button, 'click'); + }); + dom.bind(li, 'mouseover', function () { + dom.addClass(controller.__button, 'hover'); + }); + dom.bind(li, 'mouseout', function () { + dom.removeClass(controller.__button, 'hover'); + }); + } else if (controller instanceof ColorController) { + dom.addClass(li, 'color'); + controller.updateDisplay = Common.compose(function (val) { + li.style.borderLeftColor = controller.__color.toString(); + return val; + }, controller.updateDisplay); + controller.updateDisplay(); + } + controller.setValue = Common.compose(function (val) { + if (gui.getRoot().__preset_select && controller.isModified()) { + markPresetModified(gui.getRoot(), true); + } + return val; + }, controller.setValue); +} +function recallSavedValue(gui, controller) { + var root = gui.getRoot(); + var matchedIndex = root.__rememberedObjects.indexOf(controller.object); + if (matchedIndex !== -1) { + var controllerMap = root.__rememberedObjectIndecesToControllers[matchedIndex]; + if (controllerMap === undefined) { + controllerMap = {}; + root.__rememberedObjectIndecesToControllers[matchedIndex] = controllerMap; + } + controllerMap[controller.property] = controller; + if (root.load && root.load.remembered) { + var presetMap = root.load.remembered; + var preset = void 0; + if (presetMap[gui.preset]) { + preset = presetMap[gui.preset]; + } else if (presetMap[DEFAULT_DEFAULT_PRESET_NAME]) { + preset = presetMap[DEFAULT_DEFAULT_PRESET_NAME]; + } else { + return; + } + if (preset[matchedIndex] && preset[matchedIndex][controller.property] !== undefined) { + var value = preset[matchedIndex][controller.property]; + controller.initialValue = value; + controller.setValue(value); + } + } + } +} +function _add(gui, object, property, params) { + if (object[property] === undefined) { + throw new Error('Object "' + object + '" has no property "' + property + '"'); + } + var controller = void 0; + if (params.color) { + controller = new ColorController(object, property); + } else { + var factoryArgs = [object, property].concat(params.factoryArgs); + controller = ControllerFactory.apply(gui, factoryArgs); + } + if (params.before instanceof Controller) { + params.before = params.before.__li; + } + recallSavedValue(gui, controller); + dom.addClass(controller.domElement, 'c'); + var name = document.createElement('span'); + dom.addClass(name, 'property-name'); + name.innerHTML = controller.property; + var container = document.createElement('div'); + container.appendChild(name); + container.appendChild(controller.domElement); + var li = addRow(gui, container, params.before); + dom.addClass(li, GUI.CLASS_CONTROLLER_ROW); + if (controller instanceof ColorController) { + dom.addClass(li, 'color'); + } else { + dom.addClass(li, _typeof(controller.getValue())); + } + augmentController(gui, li, controller); + gui.__controllers.push(controller); + return controller; +} +function getLocalStorageHash(gui, key) { + return document.location.href + '.' + key; +} +function addPresetOption(gui, name, setSelected) { + var opt = document.createElement('option'); + opt.innerHTML = name; + opt.value = name; + gui.__preset_select.appendChild(opt); + if (setSelected) { + gui.__preset_select.selectedIndex = gui.__preset_select.length - 1; + } +} +function showHideExplain(gui, explain) { + explain.style.display = gui.useLocalStorage ? 'block' : 'none'; +} +function addSaveMenu(gui) { + var div = gui.__save_row = document.createElement('li'); + dom.addClass(gui.domElement, 'has-save'); + gui.__ul.insertBefore(div, gui.__ul.firstChild); + dom.addClass(div, 'save-row'); + var gears = document.createElement('span'); + gears.innerHTML = ' '; + dom.addClass(gears, 'button gears'); + var button = document.createElement('span'); + button.innerHTML = 'Save'; + dom.addClass(button, 'button'); + dom.addClass(button, 'save'); + var button2 = document.createElement('span'); + button2.innerHTML = 'New'; + dom.addClass(button2, 'button'); + dom.addClass(button2, 'save-as'); + var button3 = document.createElement('span'); + button3.innerHTML = 'Revert'; + dom.addClass(button3, 'button'); + dom.addClass(button3, 'revert'); + var select = gui.__preset_select = document.createElement('select'); + if (gui.load && gui.load.remembered) { + Common.each(gui.load.remembered, function (value, key) { + addPresetOption(gui, key, key === gui.preset); + }); + } else { + addPresetOption(gui, DEFAULT_DEFAULT_PRESET_NAME, false); + } + dom.bind(select, 'change', function () { + for (var index = 0; index < gui.__preset_select.length; index++) { + gui.__preset_select[index].innerHTML = gui.__preset_select[index].value; + } + gui.preset = this.value; + }); + div.appendChild(select); + div.appendChild(gears); + div.appendChild(button); + div.appendChild(button2); + div.appendChild(button3); + if (SUPPORTS_LOCAL_STORAGE) { + var explain = document.getElementById('dg-local-explain'); + var localStorageCheckBox = document.getElementById('dg-local-storage'); + var saveLocally = document.getElementById('dg-save-locally'); + saveLocally.style.display = 'block'; + if (localStorage.getItem(getLocalStorageHash(gui, 'isLocal')) === 'true') { + localStorageCheckBox.setAttribute('checked', 'checked'); + } + showHideExplain(gui, explain); + dom.bind(localStorageCheckBox, 'change', function () { + gui.useLocalStorage = !gui.useLocalStorage; + showHideExplain(gui, explain); + }); + } + var newConstructorTextArea = document.getElementById('dg-new-constructor'); + dom.bind(newConstructorTextArea, 'keydown', function (e) { + if (e.metaKey && (e.which === 67 || e.keyCode === 67)) { + SAVE_DIALOGUE.hide(); + } + }); + dom.bind(gears, 'click', function () { + newConstructorTextArea.innerHTML = JSON.stringify(gui.getSaveObject(), undefined, 2); + SAVE_DIALOGUE.show(); + newConstructorTextArea.focus(); + newConstructorTextArea.select(); + }); + dom.bind(button, 'click', function () { + gui.save(); + }); + dom.bind(button2, 'click', function () { + var presetName = prompt('Enter a new preset name.'); + if (presetName) { + gui.saveAs(presetName); + } + }); + dom.bind(button3, 'click', function () { + gui.revert(); + }); +} +function addResizeHandle(gui) { + var pmouseX = void 0; + gui.__resize_handle = document.createElement('div'); + Common.extend(gui.__resize_handle.style, { + width: '6px', + marginLeft: '-3px', + height: '200px', + cursor: 'ew-resize', + position: 'absolute' + }); + function drag(e) { + e.preventDefault(); + gui.width += pmouseX - e.clientX; + gui.onResize(); + pmouseX = e.clientX; + return false; + } + function dragStop() { + dom.removeClass(gui.__closeButton, GUI.CLASS_DRAG); + dom.unbind(window, 'mousemove', drag); + dom.unbind(window, 'mouseup', dragStop); + } + function dragStart(e) { + e.preventDefault(); + pmouseX = e.clientX; + dom.addClass(gui.__closeButton, GUI.CLASS_DRAG); + dom.bind(window, 'mousemove', drag); + dom.bind(window, 'mouseup', dragStop); + return false; + } + dom.bind(gui.__resize_handle, 'mousedown', dragStart); + dom.bind(gui.__closeButton, 'mousedown', dragStart); + gui.domElement.insertBefore(gui.__resize_handle, gui.domElement.firstElementChild); +} +function setWidth(gui, w) { + gui.domElement.style.width = w + 'px'; + if (gui.__save_row && gui.autoPlace) { + gui.__save_row.style.width = w + 'px'; + } + if (gui.__closeButton) { + gui.__closeButton.style.width = w + 'px'; + } +} +function getCurrentPreset(gui, useInitialValues) { + var toReturn = {}; + Common.each(gui.__rememberedObjects, function (val, index) { + var savedValues = {}; + var controllerMap = gui.__rememberedObjectIndecesToControllers[index]; + Common.each(controllerMap, function (controller, property) { + savedValues[property] = useInitialValues ? controller.initialValue : controller.getValue(); + }); + toReturn[index] = savedValues; + }); + return toReturn; +} +function setPresetSelectIndex(gui) { + for (var index = 0; index < gui.__preset_select.length; index++) { + if (gui.__preset_select[index].value === gui.preset) { + gui.__preset_select.selectedIndex = index; + } + } +} +function updateDisplays(controllerArray) { + if (controllerArray.length !== 0) { + requestAnimationFrame$1.call(window, function () { + updateDisplays(controllerArray); + }); + } + Common.each(controllerArray, function (c) { + c.updateDisplay(); + }); +} + +var color = { + Color: Color, + math: ColorMath, + interpret: interpret +}; +var controllers = { + Controller: Controller, + BooleanController: BooleanController, + OptionController: OptionController, + StringController: StringController, + NumberController: NumberController, + NumberControllerBox: NumberControllerBox, + NumberControllerSlider: NumberControllerSlider, + FunctionController: FunctionController, + ColorController: ColorController +}; +var dom$1 = { dom: dom }; +var gui = { GUI: GUI }; +var GUI$1 = GUI; +var index = { + color: color, + controllers: controllers, + dom: dom$1, + gui: gui, + GUI: GUI$1 +}; + + +/* harmony default export */ __webpack_exports__["a"] = (index); +//# sourceMappingURL=dat.gui.module.js.map + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/build-viewer/AvatarViewer.js b/build-viewer/AvatarViewer.js new file mode 100644 index 0000000000000000000000000000000000000000..df2ebe4a059ce4ccaa404dc0987f3b47a98010af --- /dev/null +++ b/build-viewer/AvatarViewer.js @@ -0,0 +1,49892 @@ +var AvatarViewer = +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) { +/******/ return installedModules[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.l = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 1); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderTargetCube", function() { return WebGLRenderTargetCube; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderTarget", function() { return WebGLRenderTarget; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLRenderer", function() { return WebGLRenderer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShaderLib", function() { return ShaderLib; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UniformsLib", function() { return UniformsLib; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UniformsUtils", function() { return UniformsUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShaderChunk", function() { return ShaderChunk; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FogExp2", function() { return FogExp2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Fog", function() { return Fog; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scene", function() { return Scene; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LensFlare", function() { return LensFlare; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sprite", function() { return Sprite; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LOD", function() { return LOD; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SkinnedMesh", function() { return SkinnedMesh; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Skeleton", function() { return Skeleton; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Bone", function() { return Bone; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Mesh", function() { return Mesh; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineSegments", function() { return LineSegments; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineLoop", function() { return LineLoop; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Line", function() { return Line; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Points", function() { return Points; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Group", function() { return Group; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VideoTexture", function() { return VideoTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DataTexture", function() { return DataTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompressedTexture", function() { return CompressedTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeTexture", function() { return CubeTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CanvasTexture", function() { return CanvasTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DepthTexture", function() { return DepthTexture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Texture", function() { return Texture; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompressedTextureLoader", function() { return CompressedTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DataTextureLoader", function() { return DataTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeTextureLoader", function() { return CubeTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextureLoader", function() { return TextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObjectLoader", function() { return ObjectLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MaterialLoader", function() { return MaterialLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BufferGeometryLoader", function() { return BufferGeometryLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultLoadingManager", function() { return DefaultLoadingManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoadingManager", function() { return LoadingManager; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "JSONLoader", function() { return JSONLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImageLoader", function() { return ImageLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FontLoader", function() { return FontLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FileLoader", function() { return FileLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Loader", function() { return Loader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cache", function() { return Cache; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioLoader", function() { return AudioLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpotLightShadow", function() { return SpotLightShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpotLight", function() { return SpotLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointLight", function() { return PointLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RectAreaLight", function() { return RectAreaLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HemisphereLight", function() { return HemisphereLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirectionalLightShadow", function() { return DirectionalLightShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirectionalLight", function() { return DirectionalLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AmbientLight", function() { return AmbientLight; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LightShadow", function() { return LightShadow; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Light", function() { return Light; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StereoCamera", function() { return StereoCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PerspectiveCamera", function() { return PerspectiveCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OrthographicCamera", function() { return OrthographicCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeCamera", function() { return CubeCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArrayCamera", function() { return ArrayCamera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Camera", function() { return Camera; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioListener", function() { return AudioListener; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PositionalAudio", function() { return PositionalAudio; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioContext", function() { return AudioContext; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AudioAnalyser", function() { return AudioAnalyser; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Audio", function() { return Audio; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VectorKeyframeTrack", function() { return VectorKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StringKeyframeTrack", function() { return StringKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuaternionKeyframeTrack", function() { return QuaternionKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NumberKeyframeTrack", function() { return NumberKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorKeyframeTrack", function() { return ColorKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BooleanKeyframeTrack", function() { return BooleanKeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PropertyMixer", function() { return PropertyMixer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PropertyBinding", function() { return PropertyBinding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyframeTrack", function() { return KeyframeTrack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationUtils", function() { return AnimationUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationObjectGroup", function() { return AnimationObjectGroup; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationMixer", function() { return AnimationMixer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationClip", function() { return AnimationClip; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uniform", function() { return Uniform; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InstancedBufferGeometry", function() { return InstancedBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BufferGeometry", function() { return BufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GeometryIdCount", function() { return GeometryIdCount; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Geometry", function() { return Geometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterleavedBufferAttribute", function() { return InterleavedBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InstancedInterleavedBuffer", function() { return InstancedInterleavedBuffer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterleavedBuffer", function() { return InterleavedBuffer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InstancedBufferAttribute", function() { return InstancedBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Face3", function() { return Face3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Object3D", function() { return Object3D; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Raycaster", function() { return Raycaster; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Layers", function() { return Layers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventDispatcher", function() { return EventDispatcher; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Clock", function() { return Clock; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuaternionLinearInterpolant", function() { return QuaternionLinearInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearInterpolant", function() { return LinearInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiscreteInterpolant", function() { return DiscreteInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubicInterpolant", function() { return CubicInterpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Interpolant", function() { return Interpolant; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Triangle", function() { return Triangle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Math", function() { return _Math; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Spherical", function() { return Spherical; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Cylindrical", function() { return Cylindrical; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Plane", function() { return Plane; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Frustum", function() { return Frustum; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sphere", function() { return Sphere; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Ray", function() { return Ray; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix4", function() { return Matrix4; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Matrix3", function() { return Matrix3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box3", function() { return Box3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box2", function() { return Box2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Line3", function() { return Line3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Euler", function() { return Euler; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector4", function() { return Vector4; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector3", function() { return Vector3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vector2", function() { return Vector2; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Quaternion", function() { return Quaternion; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImmediateRenderObject", function() { return ImmediateRenderObject; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VertexNormalsHelper", function() { return VertexNormalsHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpotLightHelper", function() { return SpotLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SkeletonHelper", function() { return SkeletonHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointLightHelper", function() { return PointLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RectAreaLightHelper", function() { return RectAreaLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HemisphereLightHelper", function() { return HemisphereLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GridHelper", function() { return GridHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PolarGridHelper", function() { return PolarGridHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaceNormalsHelper", function() { return FaceNormalsHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DirectionalLightHelper", function() { return DirectionalLightHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CameraHelper", function() { return CameraHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoxHelper", function() { return BoxHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box3Helper", function() { return Box3Helper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneHelper", function() { return PlaneHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArrowHelper", function() { return ArrowHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AxisHelper", function() { return AxisHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CatmullRomCurve3", function() { return CatmullRomCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubicBezierCurve3", function() { return CubicBezierCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuadraticBezierCurve3", function() { return QuadraticBezierCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineCurve3", function() { return LineCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArcCurve", function() { return ArcCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EllipseCurve", function() { return EllipseCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplineCurve", function() { return SplineCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubicBezierCurve", function() { return CubicBezierCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QuadraticBezierCurve", function() { return QuadraticBezierCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineCurve", function() { return LineCurve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Shape", function() { return Shape; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Path", function() { return Path; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapePath", function() { return ShapePath; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Font", function() { return Font; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CurvePath", function() { return CurvePath; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Curve", function() { return Curve; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapeUtils", function() { return ShapeUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SceneUtils", function() { return SceneUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebGLUtils", function() { return WebGLUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WireframeGeometry", function() { return WireframeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParametricGeometry", function() { return ParametricGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParametricBufferGeometry", function() { return ParametricBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TetrahedronGeometry", function() { return TetrahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TetrahedronBufferGeometry", function() { return TetrahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OctahedronGeometry", function() { return OctahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OctahedronBufferGeometry", function() { return OctahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IcosahedronGeometry", function() { return IcosahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IcosahedronBufferGeometry", function() { return IcosahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DodecahedronGeometry", function() { return DodecahedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DodecahedronBufferGeometry", function() { return DodecahedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PolyhedronGeometry", function() { return PolyhedronGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PolyhedronBufferGeometry", function() { return PolyhedronBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TubeGeometry", function() { return TubeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TubeBufferGeometry", function() { return TubeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusKnotGeometry", function() { return TorusKnotGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusKnotBufferGeometry", function() { return TorusKnotBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusGeometry", function() { return TorusGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TorusBufferGeometry", function() { return TorusBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextGeometry", function() { return TextGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextBufferGeometry", function() { return TextBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SphereGeometry", function() { return SphereGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SphereBufferGeometry", function() { return SphereBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RingGeometry", function() { return RingGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RingBufferGeometry", function() { return RingBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneGeometry", function() { return PlaneGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PlaneBufferGeometry", function() { return PlaneBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LatheGeometry", function() { return LatheGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LatheBufferGeometry", function() { return LatheBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapeGeometry", function() { return ShapeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShapeBufferGeometry", function() { return ShapeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExtrudeGeometry", function() { return ExtrudeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExtrudeBufferGeometry", function() { return ExtrudeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EdgesGeometry", function() { return EdgesGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConeGeometry", function() { return ConeGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConeBufferGeometry", function() { return ConeBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderGeometry", function() { return CylinderGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CylinderBufferGeometry", function() { return CylinderBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CircleGeometry", function() { return CircleGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CircleBufferGeometry", function() { return CircleBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoxGeometry", function() { return BoxGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoxBufferGeometry", function() { return BoxBufferGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShadowMaterial", function() { return ShadowMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SpriteMaterial", function() { return SpriteMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RawShaderMaterial", function() { return RawShaderMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShaderMaterial", function() { return ShaderMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointsMaterial", function() { return PointsMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshPhysicalMaterial", function() { return MeshPhysicalMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshStandardMaterial", function() { return MeshStandardMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshPhongMaterial", function() { return MeshPhongMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshToonMaterial", function() { return MeshToonMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshNormalMaterial", function() { return MeshNormalMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshLambertMaterial", function() { return MeshLambertMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshDepthMaterial", function() { return MeshDepthMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshDistanceMaterial", function() { return MeshDistanceMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshBasicMaterial", function() { return MeshBasicMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineDashedMaterial", function() { return LineDashedMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineBasicMaterial", function() { return LineBasicMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Material", function() { return Material; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float64BufferAttribute", function() { return Float64BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float32BufferAttribute", function() { return Float32BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint32BufferAttribute", function() { return Uint32BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int32BufferAttribute", function() { return Int32BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint16BufferAttribute", function() { return Uint16BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int16BufferAttribute", function() { return Int16BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8ClampedBufferAttribute", function() { return Uint8ClampedBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8BufferAttribute", function() { return Uint8BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int8BufferAttribute", function() { return Int8BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BufferAttribute", function() { return BufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "REVISION", function() { return REVISION; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MOUSE", function() { return MOUSE; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceNone", function() { return CullFaceNone; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceBack", function() { return CullFaceBack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceFront", function() { return CullFaceFront; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CullFaceFrontBack", function() { return CullFaceFrontBack; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrontFaceDirectionCW", function() { return FrontFaceDirectionCW; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrontFaceDirectionCCW", function() { return FrontFaceDirectionCCW; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BasicShadowMap", function() { return BasicShadowMap; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PCFShadowMap", function() { return PCFShadowMap; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PCFSoftShadowMap", function() { return PCFSoftShadowMap; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FrontSide", function() { return FrontSide; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BackSide", function() { return BackSide; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DoubleSide", function() { return DoubleSide; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FlatShading", function() { return FlatShading; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SmoothShading", function() { return SmoothShading; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoColors", function() { return NoColors; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FaceColors", function() { return FaceColors; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VertexColors", function() { return VertexColors; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoBlending", function() { return NoBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NormalBlending", function() { return NormalBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AdditiveBlending", function() { return AdditiveBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubtractiveBlending", function() { return SubtractiveBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiplyBlending", function() { return MultiplyBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CustomBlending", function() { return CustomBlending; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddEquation", function() { return AddEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubtractEquation", function() { return SubtractEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReverseSubtractEquation", function() { return ReverseSubtractEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MinEquation", function() { return MinEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MaxEquation", function() { return MaxEquation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZeroFactor", function() { return ZeroFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneFactor", function() { return OneFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SrcColorFactor", function() { return SrcColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusSrcColorFactor", function() { return OneMinusSrcColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SrcAlphaFactor", function() { return SrcAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusSrcAlphaFactor", function() { return OneMinusSrcAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DstAlphaFactor", function() { return DstAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusDstAlphaFactor", function() { return OneMinusDstAlphaFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DstColorFactor", function() { return DstColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OneMinusDstColorFactor", function() { return OneMinusDstColorFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SrcAlphaSaturateFactor", function() { return SrcAlphaSaturateFactor; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NeverDepth", function() { return NeverDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlwaysDepth", function() { return AlwaysDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LessDepth", function() { return LessDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LessEqualDepth", function() { return LessEqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EqualDepth", function() { return EqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GreaterEqualDepth", function() { return GreaterEqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GreaterDepth", function() { return GreaterDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotEqualDepth", function() { return NotEqualDepth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiplyOperation", function() { return MultiplyOperation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MixOperation", function() { return MixOperation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AddOperation", function() { return AddOperation; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoToneMapping", function() { return NoToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearToneMapping", function() { return LinearToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReinhardToneMapping", function() { return ReinhardToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uncharted2ToneMapping", function() { return Uncharted2ToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CineonToneMapping", function() { return CineonToneMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UVMapping", function() { return UVMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeReflectionMapping", function() { return CubeReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeRefractionMapping", function() { return CubeRefractionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EquirectangularReflectionMapping", function() { return EquirectangularReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EquirectangularRefractionMapping", function() { return EquirectangularRefractionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SphericalReflectionMapping", function() { return SphericalReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeUVReflectionMapping", function() { return CubeUVReflectionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeUVRefractionMapping", function() { return CubeUVRefractionMapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RepeatWrapping", function() { return RepeatWrapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClampToEdgeWrapping", function() { return ClampToEdgeWrapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MirroredRepeatWrapping", function() { return MirroredRepeatWrapping; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NearestFilter", function() { return NearestFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NearestMipMapNearestFilter", function() { return NearestMipMapNearestFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NearestMipMapLinearFilter", function() { return NearestMipMapLinearFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearFilter", function() { return LinearFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearMipMapNearestFilter", function() { return LinearMipMapNearestFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearMipMapLinearFilter", function() { return LinearMipMapLinearFilter; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedByteType", function() { return UnsignedByteType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ByteType", function() { return ByteType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ShortType", function() { return ShortType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShortType", function() { return UnsignedShortType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IntType", function() { return IntType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedIntType", function() { return UnsignedIntType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FloatType", function() { return FloatType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HalfFloatType", function() { return HalfFloatType; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShort4444Type", function() { return UnsignedShort4444Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShort5551Type", function() { return UnsignedShort5551Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedShort565Type", function() { return UnsignedShort565Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsignedInt248Type", function() { return UnsignedInt248Type; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlphaFormat", function() { return AlphaFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBFormat", function() { return RGBFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBAFormat", function() { return RGBAFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LuminanceFormat", function() { return LuminanceFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LuminanceAlphaFormat", function() { return LuminanceAlphaFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBEFormat", function() { return RGBEFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DepthFormat", function() { return DepthFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DepthStencilFormat", function() { return DepthStencilFormat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_S3TC_DXT1_Format", function() { return RGB_S3TC_DXT1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_S3TC_DXT1_Format", function() { return RGBA_S3TC_DXT1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_S3TC_DXT3_Format", function() { return RGBA_S3TC_DXT3_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_S3TC_DXT5_Format", function() { return RGBA_S3TC_DXT5_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_PVRTC_4BPPV1_Format", function() { return RGB_PVRTC_4BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_PVRTC_2BPPV1_Format", function() { return RGB_PVRTC_2BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_PVRTC_4BPPV1_Format", function() { return RGBA_PVRTC_4BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBA_PVRTC_2BPPV1_Format", function() { return RGBA_PVRTC_2BPPV1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGB_ETC1_Format", function() { return RGB_ETC1_Format; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoopOnce", function() { return LoopOnce; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoopRepeat", function() { return LoopRepeat; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoopPingPong", function() { return LoopPingPong; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterpolateDiscrete", function() { return InterpolateDiscrete; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterpolateLinear", function() { return InterpolateLinear; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InterpolateSmooth", function() { return InterpolateSmooth; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZeroCurvatureEnding", function() { return ZeroCurvatureEnding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZeroSlopeEnding", function() { return ZeroSlopeEnding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WrapAroundEnding", function() { return WrapAroundEnding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TrianglesDrawMode", function() { return TrianglesDrawMode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TriangleStripDrawMode", function() { return TriangleStripDrawMode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TriangleFanDrawMode", function() { return TriangleFanDrawMode; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinearEncoding", function() { return LinearEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sRGBEncoding", function() { return sRGBEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GammaEncoding", function() { return GammaEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBEEncoding", function() { return RGBEEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LogLuvEncoding", function() { return LogLuvEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBM7Encoding", function() { return RGBM7Encoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBM16Encoding", function() { return RGBM16Encoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBDEncoding", function() { return RGBDEncoding; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BasicDepthPacking", function() { return BasicDepthPacking; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RGBADepthPacking", function() { return RGBADepthPacking; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CubeGeometry", function() { return BoxGeometry; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Face4", function() { return Face4; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LineStrip", function() { return LineStrip; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LinePieces", function() { return LinePieces; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MeshFaceMaterial", function() { return MeshFaceMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiMaterial", function() { return MultiMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointCloud", function() { return PointCloud; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Particle", function() { return Particle; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParticleSystem", function() { return ParticleSystem; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PointCloudMaterial", function() { return PointCloudMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParticleBasicMaterial", function() { return ParticleBasicMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParticleSystemMaterial", function() { return ParticleSystemMaterial; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vertex", function() { return Vertex; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DynamicBufferAttribute", function() { return DynamicBufferAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int8Attribute", function() { return Int8Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8Attribute", function() { return Uint8Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint8ClampedAttribute", function() { return Uint8ClampedAttribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int16Attribute", function() { return Int16Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint16Attribute", function() { return Uint16Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Int32Attribute", function() { return Int32Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Uint32Attribute", function() { return Uint32Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float32Attribute", function() { return Float32Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Float64Attribute", function() { return Float64Attribute; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClosedSplineCurve3", function() { return ClosedSplineCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplineCurve3", function() { return SplineCurve3; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Spline", function() { return Spline; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoundingBoxHelper", function() { return BoundingBoxHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EdgesHelper", function() { return EdgesHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WireframeHelper", function() { return WireframeHelper; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "XHRLoader", function() { return XHRLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BinaryTextureLoader", function() { return BinaryTextureLoader; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GeometryUtils", function() { return GeometryUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ImageUtils", function() { return ImageUtils; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Projector", function() { return Projector; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CanvasRenderer", function() { return CanvasRenderer; }); +// Polyfills + +if ( Number.EPSILON === undefined ) { + + Number.EPSILON = Math.pow( 2, - 52 ); + +} + +if ( Number.isInteger === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger + + Number.isInteger = function ( value ) { + + return typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value; + + }; + +} + +// + +if ( Math.sign === undefined ) { + + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign + + Math.sign = function ( x ) { + + return ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x; + + }; + +} + +if ( Function.prototype.name === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name + + Object.defineProperty( Function.prototype, 'name', { + + get: function () { + + return this.toString().match( /^\s*function\s*([^\(\s]*)/ )[ 1 ]; + + } + + } ); + +} + +if ( Object.assign === undefined ) { + + // Missing in IE + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign + + ( function () { + + Object.assign = function ( target ) { + + 'use strict'; + + if ( target === undefined || target === null ) { + + throw new TypeError( 'Cannot convert undefined or null to object' ); + + } + + var output = Object( target ); + + for ( var index = 1; index < arguments.length; index ++ ) { + + var source = arguments[ index ]; + + if ( source !== undefined && source !== null ) { + + for ( var nextKey in source ) { + + if ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) { + + output[ nextKey ] = source[ nextKey ]; + + } + + } + + } + + } + + return output; + + }; + + } )(); + +} + +/** + * https://github.com/mrdoob/eventdispatcher.js/ + */ + +function EventDispatcher() {} + +Object.assign( EventDispatcher.prototype, { + + addEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) this._listeners = {}; + + var listeners = this._listeners; + + if ( listeners[ type ] === undefined ) { + + listeners[ type ] = []; + + } + + if ( listeners[ type ].indexOf( listener ) === - 1 ) { + + listeners[ type ].push( listener ); + + } + + }, + + hasEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return false; + + var listeners = this._listeners; + + return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; + + }, + + removeEventListener: function ( type, listener ) { + + if ( this._listeners === undefined ) return; + + var listeners = this._listeners; + var listenerArray = listeners[ type ]; + + if ( listenerArray !== undefined ) { + + var index = listenerArray.indexOf( listener ); + + if ( index !== - 1 ) { + + listenerArray.splice( index, 1 ); + + } + + } + + }, + + dispatchEvent: function ( event ) { + + if ( this._listeners === undefined ) return; + + var listeners = this._listeners; + var listenerArray = listeners[ event.type ]; + + if ( listenerArray !== undefined ) { + + event.target = this; + + var array = listenerArray.slice( 0 ); + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + array[ i ].call( this, event ); + + } + + } + + } + +} ); + +var REVISION = '87'; +var MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 }; +var CullFaceNone = 0; +var CullFaceBack = 1; +var CullFaceFront = 2; +var CullFaceFrontBack = 3; +var FrontFaceDirectionCW = 0; +var FrontFaceDirectionCCW = 1; +var BasicShadowMap = 0; +var PCFShadowMap = 1; +var PCFSoftShadowMap = 2; +var FrontSide = 0; +var BackSide = 1; +var DoubleSide = 2; +var FlatShading = 1; +var SmoothShading = 2; +var NoColors = 0; +var FaceColors = 1; +var VertexColors = 2; +var NoBlending = 0; +var NormalBlending = 1; +var AdditiveBlending = 2; +var SubtractiveBlending = 3; +var MultiplyBlending = 4; +var CustomBlending = 5; +var AddEquation = 100; +var SubtractEquation = 101; +var ReverseSubtractEquation = 102; +var MinEquation = 103; +var MaxEquation = 104; +var ZeroFactor = 200; +var OneFactor = 201; +var SrcColorFactor = 202; +var OneMinusSrcColorFactor = 203; +var SrcAlphaFactor = 204; +var OneMinusSrcAlphaFactor = 205; +var DstAlphaFactor = 206; +var OneMinusDstAlphaFactor = 207; +var DstColorFactor = 208; +var OneMinusDstColorFactor = 209; +var SrcAlphaSaturateFactor = 210; +var NeverDepth = 0; +var AlwaysDepth = 1; +var LessDepth = 2; +var LessEqualDepth = 3; +var EqualDepth = 4; +var GreaterEqualDepth = 5; +var GreaterDepth = 6; +var NotEqualDepth = 7; +var MultiplyOperation = 0; +var MixOperation = 1; +var AddOperation = 2; +var NoToneMapping = 0; +var LinearToneMapping = 1; +var ReinhardToneMapping = 2; +var Uncharted2ToneMapping = 3; +var CineonToneMapping = 4; +var UVMapping = 300; +var CubeReflectionMapping = 301; +var CubeRefractionMapping = 302; +var EquirectangularReflectionMapping = 303; +var EquirectangularRefractionMapping = 304; +var SphericalReflectionMapping = 305; +var CubeUVReflectionMapping = 306; +var CubeUVRefractionMapping = 307; +var RepeatWrapping = 1000; +var ClampToEdgeWrapping = 1001; +var MirroredRepeatWrapping = 1002; +var NearestFilter = 1003; +var NearestMipMapNearestFilter = 1004; +var NearestMipMapLinearFilter = 1005; +var LinearFilter = 1006; +var LinearMipMapNearestFilter = 1007; +var LinearMipMapLinearFilter = 1008; +var UnsignedByteType = 1009; +var ByteType = 1010; +var ShortType = 1011; +var UnsignedShortType = 1012; +var IntType = 1013; +var UnsignedIntType = 1014; +var FloatType = 1015; +var HalfFloatType = 1016; +var UnsignedShort4444Type = 1017; +var UnsignedShort5551Type = 1018; +var UnsignedShort565Type = 1019; +var UnsignedInt248Type = 1020; +var AlphaFormat = 1021; +var RGBFormat = 1022; +var RGBAFormat = 1023; +var LuminanceFormat = 1024; +var LuminanceAlphaFormat = 1025; +var RGBEFormat = RGBAFormat; +var DepthFormat = 1026; +var DepthStencilFormat = 1027; +var RGB_S3TC_DXT1_Format = 2001; +var RGBA_S3TC_DXT1_Format = 2002; +var RGBA_S3TC_DXT3_Format = 2003; +var RGBA_S3TC_DXT5_Format = 2004; +var RGB_PVRTC_4BPPV1_Format = 2100; +var RGB_PVRTC_2BPPV1_Format = 2101; +var RGBA_PVRTC_4BPPV1_Format = 2102; +var RGBA_PVRTC_2BPPV1_Format = 2103; +var RGB_ETC1_Format = 2151; +var LoopOnce = 2200; +var LoopRepeat = 2201; +var LoopPingPong = 2202; +var InterpolateDiscrete = 2300; +var InterpolateLinear = 2301; +var InterpolateSmooth = 2302; +var ZeroCurvatureEnding = 2400; +var ZeroSlopeEnding = 2401; +var WrapAroundEnding = 2402; +var TrianglesDrawMode = 0; +var TriangleStripDrawMode = 1; +var TriangleFanDrawMode = 2; +var LinearEncoding = 3000; +var sRGBEncoding = 3001; +var GammaEncoding = 3007; +var RGBEEncoding = 3002; +var LogLuvEncoding = 3003; +var RGBM7Encoding = 3004; +var RGBM16Encoding = 3005; +var RGBDEncoding = 3006; +var BasicDepthPacking = 3200; +var RGBADepthPacking = 3201; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +var _Math = { + + DEG2RAD: Math.PI / 180, + RAD2DEG: 180 / Math.PI, + + generateUUID: function () { + + // http://www.broofa.com/Tools/Math.uuid.htm + + var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split( '' ); + var uuid = new Array( 36 ); + var rnd = 0, r; + + return function generateUUID() { + + for ( var i = 0; i < 36; i ++ ) { + + if ( i === 8 || i === 13 || i === 18 || i === 23 ) { + + uuid[ i ] = '-'; + + } else if ( i === 14 ) { + + uuid[ i ] = '4'; + + } else { + + if ( rnd <= 0x02 ) rnd = 0x2000000 + ( Math.random() * 0x1000000 ) | 0; + r = rnd & 0xf; + rnd = rnd >> 4; + uuid[ i ] = chars[ ( i === 19 ) ? ( r & 0x3 ) | 0x8 : r ]; + + } + + } + + return uuid.join( '' ); + + }; + + }(), + + clamp: function ( value, min, max ) { + + return Math.max( min, Math.min( max, value ) ); + + }, + + // compute euclidian modulo of m % n + // https://en.wikipedia.org/wiki/Modulo_operation + + euclideanModulo: function ( n, m ) { + + return ( ( n % m ) + m ) % m; + + }, + + // Linear mapping from range to range + + mapLinear: function ( x, a1, a2, b1, b2 ) { + + return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); + + }, + + // https://en.wikipedia.org/wiki/Linear_interpolation + + lerp: function ( x, y, t ) { + + return ( 1 - t ) * x + t * y; + + }, + + // http://en.wikipedia.org/wiki/Smoothstep + + smoothstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * ( 3 - 2 * x ); + + }, + + smootherstep: function ( x, min, max ) { + + if ( x <= min ) return 0; + if ( x >= max ) return 1; + + x = ( x - min ) / ( max - min ); + + return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); + + }, + + // Random integer from interval + + randInt: function ( low, high ) { + + return low + Math.floor( Math.random() * ( high - low + 1 ) ); + + }, + + // Random float from interval + + randFloat: function ( low, high ) { + + return low + Math.random() * ( high - low ); + + }, + + // Random float from <-range/2, range/2> interval + + randFloatSpread: function ( range ) { + + return range * ( 0.5 - Math.random() ); + + }, + + degToRad: function ( degrees ) { + + return degrees * _Math.DEG2RAD; + + }, + + radToDeg: function ( radians ) { + + return radians * _Math.RAD2DEG; + + }, + + isPowerOfTwo: function ( value ) { + + return ( value & ( value - 1 ) ) === 0 && value !== 0; + + }, + + nearestPowerOfTwo: function ( value ) { + + return Math.pow( 2, Math.round( Math.log( value ) / Math.LN2 ) ); + + }, + + nextPowerOfTwo: function ( value ) { + + value --; + value |= value >> 1; + value |= value >> 2; + value |= value >> 4; + value |= value >> 8; + value |= value >> 16; + value ++; + + return value; + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author philogb / http://blog.thejit.org/ + * @author egraether / http://egraether.com/ + * @author zz85 / http://www.lab4games.net/zz85/blog + */ + +function Vector2( x, y ) { + + this.x = x || 0; + this.y = y || 0; + +} + +Object.defineProperties( Vector2.prototype, { + + "width" : { + + get: function () { + + return this.x; + + }, + + set: function ( value ) { + + this.x = value; + + } + + }, + + "height" : { + + get: function () { + + return this.y; + + }, + + set: function ( value ) { + + this.y = value; + + } + + } + +} ); + +Object.assign( Vector2.prototype, { + + isVector2: true, + + set: function ( x, y ) { + + this.x = x; + this.y = y; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + + return this; + + }, + + multiply: function ( v ) { + + this.x *= v.x; + this.y *= v.y; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + + return this; + + }, + + divide: function ( v ) { + + this.x /= v.x; + this.y /= v.y; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + + return this; + + }, + + clampScalar: function () { + + var min = new Vector2(); + var max = new Vector2(); + + return function clampScalar( minVal, maxVal ) { + + min.set( minVal, minVal ); + max.set( maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y; + + }, + + lengthSq: function () { + + return this.x * this.x + this.y * this.y; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y ); + + }, + + lengthManhattan: function() { + + return Math.abs( this.x ) + Math.abs( this.y ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + angle: function () { + + // computes the angle in radians with respect to the positive x-axis + + var angle = Math.atan2( this.y, this.x ); + + if ( angle < 0 ) angle += 2 * Math.PI; + + return angle; + + }, + + distanceTo: function ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }, + + distanceToSquared: function ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y; + return dx * dx + dy * dy; + + }, + + distanceToManhattan: function ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + + return this; + + }, + + rotateAround: function ( center, angle ) { + + var c = Math.cos( angle ), s = Math.sin( angle ); + + var x = this.x - center.x; + var y = this.y - center.y; + + this.x = x * c - y * s + center.x; + this.y = x * s + y * c + center.y; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author szimek / https://github.com/szimek/ + */ + +var textureId = 0; + +function Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + Object.defineProperty( this, 'id', { value: textureId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + + this.image = image !== undefined ? image : Texture.DEFAULT_IMAGE; + this.mipmaps = []; + + this.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING; + + this.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping; + this.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping; + + this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; + this.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter; + + this.anisotropy = anisotropy !== undefined ? anisotropy : 1; + + this.format = format !== undefined ? format : RGBAFormat; + this.type = type !== undefined ? type : UnsignedByteType; + + this.offset = new Vector2( 0, 0 ); + this.repeat = new Vector2( 1, 1 ); + + this.generateMipmaps = true; + this.premultiplyAlpha = false; + this.flipY = true; + this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) + + // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. + // + // Also changing the encoding after already used by a Material will not automatically make the Material + // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. + this.encoding = encoding !== undefined ? encoding : LinearEncoding; + + this.version = 0; + this.onUpdate = null; + +} + +Texture.DEFAULT_IMAGE = undefined; +Texture.DEFAULT_MAPPING = UVMapping; + +Object.defineProperty( Texture.prototype, "needsUpdate", { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( Texture.prototype, EventDispatcher.prototype, { + + constructor: Texture, + + isTexture: true, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.image = source.image; + this.mipmaps = source.mipmaps.slice( 0 ); + + this.mapping = source.mapping; + + this.wrapS = source.wrapS; + this.wrapT = source.wrapT; + + this.magFilter = source.magFilter; + this.minFilter = source.minFilter; + + this.anisotropy = source.anisotropy; + + this.format = source.format; + this.type = source.type; + + this.offset.copy( source.offset ); + this.repeat.copy( source.repeat ); + + this.generateMipmaps = source.generateMipmaps; + this.premultiplyAlpha = source.premultiplyAlpha; + this.flipY = source.flipY; + this.unpackAlignment = source.unpackAlignment; + this.encoding = source.encoding; + + return this; + + }, + + toJSON: function ( meta ) { + + if ( meta.textures[ this.uuid ] !== undefined ) { + + return meta.textures[ this.uuid ]; + + } + + function getDataURL( image ) { + + var canvas; + + if ( image instanceof HTMLCanvasElement ) { + + canvas = image; + + } else { + + canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = image.width; + canvas.height = image.height; + + var context = canvas.getContext( '2d' ); + + if ( image instanceof ImageData ) { + + context.putImageData( image, 0, 0 ); + + } else { + + context.drawImage( image, 0, 0, image.width, image.height ); + + } + + } + + if ( canvas.width > 2048 || canvas.height > 2048 ) { + + return canvas.toDataURL( 'image/jpeg', 0.6 ); + + } else { + + return canvas.toDataURL( 'image/png' ); + + } + + } + + var output = { + metadata: { + version: 4.5, + type: 'Texture', + generator: 'Texture.toJSON' + }, + + uuid: this.uuid, + name: this.name, + + mapping: this.mapping, + + repeat: [ this.repeat.x, this.repeat.y ], + offset: [ this.offset.x, this.offset.y ], + wrap: [ this.wrapS, this.wrapT ], + + minFilter: this.minFilter, + magFilter: this.magFilter, + anisotropy: this.anisotropy, + + flipY: this.flipY + }; + + if ( this.image !== undefined ) { + + // TODO: Move to THREE.Image + + var image = this.image; + + if ( image.uuid === undefined ) { + + image.uuid = _Math.generateUUID(); // UGH + + } + + if ( meta.images[ image.uuid ] === undefined ) { + + meta.images[ image.uuid ] = { + uuid: image.uuid, + url: getDataURL( image ) + }; + + } + + output.image = image.uuid; + + } + + meta.textures[ this.uuid ] = output; + + return output; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + }, + + transformUv: function ( uv ) { + + if ( this.mapping !== UVMapping ) return; + + uv.multiply( this.repeat ); + uv.add( this.offset ); + + if ( uv.x < 0 || uv.x > 1 ) { + + switch ( this.wrapS ) { + + case RepeatWrapping: + + uv.x = uv.x - Math.floor( uv.x ); + break; + + case ClampToEdgeWrapping: + + uv.x = uv.x < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { + + uv.x = Math.ceil( uv.x ) - uv.x; + + } else { + + uv.x = uv.x - Math.floor( uv.x ); + + } + break; + + } + + } + + if ( uv.y < 0 || uv.y > 1 ) { + + switch ( this.wrapT ) { + + case RepeatWrapping: + + uv.y = uv.y - Math.floor( uv.y ); + break; + + case ClampToEdgeWrapping: + + uv.y = uv.y < 0 ? 0 : 1; + break; + + case MirroredRepeatWrapping: + + if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { + + uv.y = Math.ceil( uv.y ) - uv.y; + + } else { + + uv.y = uv.y - Math.floor( uv.y ); + + } + break; + + } + + } + + if ( this.flipY ) { + + uv.y = 1 - uv.y; + + } + + } + +} ); + +/** + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author philogb / http://blog.thejit.org/ + * @author mikael emtinger / http://gomo.se/ + * @author egraether / http://egraether.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function Vector4( x, y, z, w ) { + + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + this.w = ( w !== undefined ) ? w : 1; + +} + +Object.assign( Vector4.prototype, { + + isVector4: true, + + set: function ( x, y, z, w ) { + + this.x = x; + this.y = y; + this.z = z; + this.w = w; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + this.w = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setZ: function ( z ) { + + this.z = z; + + return this; + + }, + + setW: function ( w ) { + + this.w = w; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + case 3: this.w = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + case 3: return this.w; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y, this.z, this.w ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + this.w = ( v.w !== undefined ) ? v.w : 1; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + this.w += v.w; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + this.z += s; + this.w += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + this.w = a.w + b.w; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + this.w += v.w * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + this.w -= v.w; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + this.w -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + this.w = a.w - b.w; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + this.w *= scalar; + + return this; + + }, + + applyMatrix4: function ( m ) { + + var x = this.x, y = this.y, z = this.z, w = this.w; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; + this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + setAxisAngleFromQuaternion: function ( q ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm + + // q is assumed to be normalized + + this.w = 2 * Math.acos( q.w ); + + var s = Math.sqrt( 1 - q.w * q.w ); + + if ( s < 0.0001 ) { + + this.x = 1; + this.y = 0; + this.z = 0; + + } else { + + this.x = q.x / s; + this.y = q.y / s; + this.z = q.z / s; + + } + + return this; + + }, + + setAxisAngleFromRotationMatrix: function ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var angle, x, y, z, // variables for result + epsilon = 0.01, // margin to allow for rounding errors + epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees + + te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + if ( ( Math.abs( m12 - m21 ) < epsilon ) && + ( Math.abs( m13 - m31 ) < epsilon ) && + ( Math.abs( m23 - m32 ) < epsilon ) ) { + + // singularity found + // first check for identity matrix which must have +1 for all terms + // in leading diagonal and zero in other terms + + if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && + ( Math.abs( m13 + m31 ) < epsilon2 ) && + ( Math.abs( m23 + m32 ) < epsilon2 ) && + ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { + + // this singularity is identity matrix so angle = 0 + + this.set( 1, 0, 0, 0 ); + + return this; // zero angle, arbitrary axis + + } + + // otherwise this singularity is angle = 180 + + angle = Math.PI; + + var xx = ( m11 + 1 ) / 2; + var yy = ( m22 + 1 ) / 2; + var zz = ( m33 + 1 ) / 2; + var xy = ( m12 + m21 ) / 4; + var xz = ( m13 + m31 ) / 4; + var yz = ( m23 + m32 ) / 4; + + if ( ( xx > yy ) && ( xx > zz ) ) { + + // m11 is the largest diagonal term + + if ( xx < epsilon ) { + + x = 0; + y = 0.707106781; + z = 0.707106781; + + } else { + + x = Math.sqrt( xx ); + y = xy / x; + z = xz / x; + + } + + } else if ( yy > zz ) { + + // m22 is the largest diagonal term + + if ( yy < epsilon ) { + + x = 0.707106781; + y = 0; + z = 0.707106781; + + } else { + + y = Math.sqrt( yy ); + x = xy / y; + z = yz / y; + + } + + } else { + + // m33 is the largest diagonal term so base result on this + + if ( zz < epsilon ) { + + x = 0.707106781; + y = 0.707106781; + z = 0; + + } else { + + z = Math.sqrt( zz ); + x = xz / z; + y = yz / z; + + } + + } + + this.set( x, y, z, angle ); + + return this; // return 180 deg rotation + + } + + // as we have reached here there are no singularities so we can handle normally + + var s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + + ( m13 - m31 ) * ( m13 - m31 ) + + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize + + if ( Math.abs( s ) < 0.001 ) s = 1; + + // prevent divide by zero, should not happen if matrix is orthogonal and should be + // caught by singularity test above, but I've left it in just in case + + this.x = ( m32 - m23 ) / s; + this.y = ( m13 - m31 ) / s; + this.z = ( m21 - m12 ) / s; + this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); + + return this; + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + this.w = Math.min( this.w, v.w ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + this.w = Math.max( this.w, v.w ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + this.w = Math.max( min.w, Math.min( max.w, this.w ) ); + + return this; + + }, + + clampScalar: function () { + + var min, max; + + return function clampScalar( minVal, maxVal ) { + + if ( min === undefined ) { + + min = new Vector4(); + max = new Vector4(); + + } + + min.set( minVal, minVal, minVal, minVal ); + max.set( maxVal, maxVal, maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + this.w = Math.floor( this.w ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + this.w = Math.ceil( this.w ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + this.w = Math.round( this.w ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + this.w = - this.w; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; + + }, + + lengthSq: function () { + + return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); + + }, + + lengthManhattan: function () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + this.w += ( v.w - this.w ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + this.w = array[ offset + 3 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + array[ offset + 3 ] = this.w; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + this.w = attribute.getW( index ); + + return this; + + } + +} ); + +/** + * @author szimek / https://github.com/szimek/ + * @author alteredq / http://alteredqualia.com/ + * @author Marius Kintel / https://github.com/kintel + */ + +/* + In options, we can specify: + * Texture parameters for an auto-generated target texture + * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers +*/ +function WebGLRenderTarget( width, height, options ) { + + this.uuid = _Math.generateUUID(); + + this.width = width; + this.height = height; + + this.scissor = new Vector4( 0, 0, width, height ); + this.scissorTest = false; + + this.viewport = new Vector4( 0, 0, width, height ); + + options = options || {}; + + if ( options.minFilter === undefined ) options.minFilter = LinearFilter; + + this.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); + + this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; + this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true; + this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; + +} + +Object.assign( WebGLRenderTarget.prototype, EventDispatcher.prototype, { + + isWebGLRenderTarget: true, + + setSize: function ( width, height ) { + + if ( this.width !== width || this.height !== height ) { + + this.width = width; + this.height = height; + + this.dispose(); + + } + + this.viewport.set( 0, 0, width, height ); + this.scissor.set( 0, 0, width, height ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.width = source.width; + this.height = source.height; + + this.viewport.copy( source.viewport ); + + this.texture = source.texture.clone(); + + this.depthBuffer = source.depthBuffer; + this.stencilBuffer = source.stencilBuffer; + this.depthTexture = source.depthTexture; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com + */ + +function WebGLRenderTargetCube( width, height, options ) { + + WebGLRenderTarget.call( this, width, height, options ); + + this.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5 + this.activeMipMapLevel = 0; + +} + +WebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype ); +WebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube; + +WebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + */ + +function Quaternion( x, y, z, w ) { + + this._x = x || 0; + this._y = y || 0; + this._z = z || 0; + this._w = ( w !== undefined ) ? w : 1; + +} + +Object.assign( Quaternion, { + + slerp: function ( qa, qb, qm, t ) { + + return qm.copy( qa ).slerp( qb, t ); + + }, + + slerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { + + // fuzz-free, array-based Quaternion SLERP operation + + var x0 = src0[ srcOffset0 + 0 ], + y0 = src0[ srcOffset0 + 1 ], + z0 = src0[ srcOffset0 + 2 ], + w0 = src0[ srcOffset0 + 3 ], + + x1 = src1[ srcOffset1 + 0 ], + y1 = src1[ srcOffset1 + 1 ], + z1 = src1[ srcOffset1 + 2 ], + w1 = src1[ srcOffset1 + 3 ]; + + if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { + + var s = 1 - t, + + cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, + + dir = ( cos >= 0 ? 1 : - 1 ), + sqrSin = 1 - cos * cos; + + // Skip the Slerp for tiny steps to avoid numeric problems: + if ( sqrSin > Number.EPSILON ) { + + var sin = Math.sqrt( sqrSin ), + len = Math.atan2( sin, cos * dir ); + + s = Math.sin( s * len ) / sin; + t = Math.sin( t * len ) / sin; + + } + + var tDir = t * dir; + + x0 = x0 * s + x1 * tDir; + y0 = y0 * s + y1 * tDir; + z0 = z0 * s + z1 * tDir; + w0 = w0 * s + w1 * tDir; + + // Normalize in case we just did a lerp: + if ( s === 1 - t ) { + + var f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); + + x0 *= f; + y0 *= f; + z0 *= f; + w0 *= f; + + } + + } + + dst[ dstOffset ] = x0; + dst[ dstOffset + 1 ] = y0; + dst[ dstOffset + 2 ] = z0; + dst[ dstOffset + 3 ] = w0; + + } + +} ); + +Object.defineProperties( Quaternion.prototype, { + + x: { + + get: function () { + + return this._x; + + }, + + set: function ( value ) { + + this._x = value; + this.onChangeCallback(); + + } + + }, + + y: { + + get: function () { + + return this._y; + + }, + + set: function ( value ) { + + this._y = value; + this.onChangeCallback(); + + } + + }, + + z: { + + get: function () { + + return this._z; + + }, + + set: function ( value ) { + + this._z = value; + this.onChangeCallback(); + + } + + }, + + w: { + + get: function () { + + return this._w; + + }, + + set: function ( value ) { + + this._w = value; + this.onChangeCallback(); + + } + + } + +} ); + +Object.assign( Quaternion.prototype, { + + set: function ( x, y, z, w ) { + + this._x = x; + this._y = y; + this._z = z; + this._w = w; + + this.onChangeCallback(); + + return this; + + }, + + clone: function () { + + return new this.constructor( this._x, this._y, this._z, this._w ); + + }, + + copy: function ( quaternion ) { + + this._x = quaternion.x; + this._y = quaternion.y; + this._z = quaternion.z; + this._w = quaternion.w; + + this.onChangeCallback(); + + return this; + + }, + + setFromEuler: function ( euler, update ) { + + if ( ! ( euler && euler.isEuler ) ) { + + throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + var x = euler._x, y = euler._y, z = euler._z, order = euler.order; + + // http://www.mathworks.com/matlabcentral/fileexchange/ + // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ + // content/SpinCalc.m + + var cos = Math.cos; + var sin = Math.sin; + + var c1 = cos( x / 2 ); + var c2 = cos( y / 2 ); + var c3 = cos( z / 2 ); + + var s1 = sin( x / 2 ); + var s2 = sin( y / 2 ); + var s3 = sin( z / 2 ); + + if ( order === 'XYZ' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'YXZ' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } else if ( order === 'ZXY' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'ZYX' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } else if ( order === 'YZX' ) { + + this._x = s1 * c2 * c3 + c1 * s2 * s3; + this._y = c1 * s2 * c3 + s1 * c2 * s3; + this._z = c1 * c2 * s3 - s1 * s2 * c3; + this._w = c1 * c2 * c3 - s1 * s2 * s3; + + } else if ( order === 'XZY' ) { + + this._x = s1 * c2 * c3 - c1 * s2 * s3; + this._y = c1 * s2 * c3 - s1 * c2 * s3; + this._z = c1 * c2 * s3 + s1 * s2 * c3; + this._w = c1 * c2 * c3 + s1 * s2 * s3; + + } + + if ( update !== false ) this.onChangeCallback(); + + return this; + + }, + + setFromAxisAngle: function ( axis, angle ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm + + // assumes axis is normalized + + var halfAngle = angle / 2, s = Math.sin( halfAngle ); + + this._x = axis.x * s; + this._y = axis.y * s; + this._z = axis.z * s; + this._w = Math.cos( halfAngle ); + + this.onChangeCallback(); + + return this; + + }, + + setFromRotationMatrix: function ( m ) { + + // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements, + + m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], + m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], + m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], + + trace = m11 + m22 + m33, + s; + + if ( trace > 0 ) { + + s = 0.5 / Math.sqrt( trace + 1.0 ); + + this._w = 0.25 / s; + this._x = ( m32 - m23 ) * s; + this._y = ( m13 - m31 ) * s; + this._z = ( m21 - m12 ) * s; + + } else if ( m11 > m22 && m11 > m33 ) { + + s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); + + this._w = ( m32 - m23 ) / s; + this._x = 0.25 * s; + this._y = ( m12 + m21 ) / s; + this._z = ( m13 + m31 ) / s; + + } else if ( m22 > m33 ) { + + s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); + + this._w = ( m13 - m31 ) / s; + this._x = ( m12 + m21 ) / s; + this._y = 0.25 * s; + this._z = ( m23 + m32 ) / s; + + } else { + + s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); + + this._w = ( m21 - m12 ) / s; + this._x = ( m13 + m31 ) / s; + this._y = ( m23 + m32 ) / s; + this._z = 0.25 * s; + + } + + this.onChangeCallback(); + + return this; + + }, + + setFromUnitVectors: function () { + + // assumes direction vectors vFrom and vTo are normalized + + var v1 = new Vector3(); + var r; + + var EPS = 0.000001; + + return function setFromUnitVectors( vFrom, vTo ) { + + if ( v1 === undefined ) v1 = new Vector3(); + + r = vFrom.dot( vTo ) + 1; + + if ( r < EPS ) { + + r = 0; + + if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { + + v1.set( - vFrom.y, vFrom.x, 0 ); + + } else { + + v1.set( 0, - vFrom.z, vFrom.y ); + + } + + } else { + + v1.crossVectors( vFrom, vTo ); + + } + + this._x = v1.x; + this._y = v1.y; + this._z = v1.z; + this._w = r; + + return this.normalize(); + + }; + + }(), + + inverse: function () { + + return this.conjugate().normalize(); + + }, + + conjugate: function () { + + this._x *= - 1; + this._y *= - 1; + this._z *= - 1; + + this.onChangeCallback(); + + return this; + + }, + + dot: function ( v ) { + + return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; + + }, + + lengthSq: function () { + + return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; + + }, + + length: function () { + + return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); + + }, + + normalize: function () { + + var l = this.length(); + + if ( l === 0 ) { + + this._x = 0; + this._y = 0; + this._z = 0; + this._w = 1; + + } else { + + l = 1 / l; + + this._x = this._x * l; + this._y = this._y * l; + this._z = this._z * l; + this._w = this._w * l; + + } + + this.onChangeCallback(); + + return this; + + }, + + multiply: function ( q, p ) { + + if ( p !== undefined ) { + + console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); + return this.multiplyQuaternions( q, p ); + + } + + return this.multiplyQuaternions( this, q ); + + }, + + premultiply: function ( q ) { + + return this.multiplyQuaternions( q, this ); + + }, + + multiplyQuaternions: function ( a, b ) { + + // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm + + var qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; + var qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; + + this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; + this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; + this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; + this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; + + this.onChangeCallback(); + + return this; + + }, + + slerp: function ( qb, t ) { + + if ( t === 0 ) return this; + if ( t === 1 ) return this.copy( qb ); + + var x = this._x, y = this._y, z = this._z, w = this._w; + + // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ + + var cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; + + if ( cosHalfTheta < 0 ) { + + this._w = - qb._w; + this._x = - qb._x; + this._y = - qb._y; + this._z = - qb._z; + + cosHalfTheta = - cosHalfTheta; + + } else { + + this.copy( qb ); + + } + + if ( cosHalfTheta >= 1.0 ) { + + this._w = w; + this._x = x; + this._y = y; + this._z = z; + + return this; + + } + + var sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta ); + + if ( Math.abs( sinHalfTheta ) < 0.001 ) { + + this._w = 0.5 * ( w + this._w ); + this._x = 0.5 * ( x + this._x ); + this._y = 0.5 * ( y + this._y ); + this._z = 0.5 * ( z + this._z ); + + return this; + + } + + var halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); + var ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, + ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; + + this._w = ( w * ratioA + this._w * ratioB ); + this._x = ( x * ratioA + this._x * ratioB ); + this._y = ( y * ratioA + this._y * ratioB ); + this._z = ( z * ratioA + this._z * ratioB ); + + this.onChangeCallback(); + + return this; + + }, + + equals: function ( quaternion ) { + + return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this._x = array[ offset ]; + this._y = array[ offset + 1 ]; + this._z = array[ offset + 2 ]; + this._w = array[ offset + 3 ]; + + this.onChangeCallback(); + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._w; + + return array; + + }, + + onChange: function ( callback ) { + + this.onChangeCallback = callback; + + return this; + + }, + + onChangeCallback: function () {} + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author kile / http://kile.stravaganza.org/ + * @author philogb / http://blog.thejit.org/ + * @author mikael emtinger / http://gomo.se/ + * @author egraether / http://egraether.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function Vector3( x, y, z ) { + + this.x = x || 0; + this.y = y || 0; + this.z = z || 0; + +} + +Object.assign( Vector3.prototype, { + + isVector3: true, + + set: function ( x, y, z ) { + + this.x = x; + this.y = y; + this.z = z; + + return this; + + }, + + setScalar: function ( scalar ) { + + this.x = scalar; + this.y = scalar; + this.z = scalar; + + return this; + + }, + + setX: function ( x ) { + + this.x = x; + + return this; + + }, + + setY: function ( y ) { + + this.y = y; + + return this; + + }, + + setZ: function ( z ) { + + this.z = z; + + return this; + + }, + + setComponent: function ( index, value ) { + + switch ( index ) { + + case 0: this.x = value; break; + case 1: this.y = value; break; + case 2: this.z = value; break; + default: throw new Error( 'index is out of range: ' + index ); + + } + + return this; + + }, + + getComponent: function ( index ) { + + switch ( index ) { + + case 0: return this.x; + case 1: return this.y; + case 2: return this.z; + default: throw new Error( 'index is out of range: ' + index ); + + } + + }, + + clone: function () { + + return new this.constructor( this.x, this.y, this.z ); + + }, + + copy: function ( v ) { + + this.x = v.x; + this.y = v.y; + this.z = v.z; + + return this; + + }, + + add: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); + return this.addVectors( v, w ); + + } + + this.x += v.x; + this.y += v.y; + this.z += v.z; + + return this; + + }, + + addScalar: function ( s ) { + + this.x += s; + this.y += s; + this.z += s; + + return this; + + }, + + addVectors: function ( a, b ) { + + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + + return this; + + }, + + addScaledVector: function ( v, s ) { + + this.x += v.x * s; + this.y += v.y * s; + this.z += v.z * s; + + return this; + + }, + + sub: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); + return this.subVectors( v, w ); + + } + + this.x -= v.x; + this.y -= v.y; + this.z -= v.z; + + return this; + + }, + + subScalar: function ( s ) { + + this.x -= s; + this.y -= s; + this.z -= s; + + return this; + + }, + + subVectors: function ( a, b ) { + + this.x = a.x - b.x; + this.y = a.y - b.y; + this.z = a.z - b.z; + + return this; + + }, + + multiply: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); + return this.multiplyVectors( v, w ); + + } + + this.x *= v.x; + this.y *= v.y; + this.z *= v.z; + + return this; + + }, + + multiplyScalar: function ( scalar ) { + + this.x *= scalar; + this.y *= scalar; + this.z *= scalar; + + return this; + + }, + + multiplyVectors: function ( a, b ) { + + this.x = a.x * b.x; + this.y = a.y * b.y; + this.z = a.z * b.z; + + return this; + + }, + + applyEuler: function () { + + var quaternion = new Quaternion(); + + return function applyEuler( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); + + } + + return this.applyQuaternion( quaternion.setFromEuler( euler ) ); + + }; + + }(), + + applyAxisAngle: function () { + + var quaternion = new Quaternion(); + + return function applyAxisAngle( axis, angle ) { + + return this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) ); + + }; + + }(), + + applyMatrix3: function ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; + this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; + this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; + + return this; + + }, + + applyMatrix4: function ( m ) { + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + var w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); + + this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w; + this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w; + this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w; + + return this; + + }, + + applyQuaternion: function ( q ) { + + var x = this.x, y = this.y, z = this.z; + var qx = q.x, qy = q.y, qz = q.z, qw = q.w; + + // calculate quat * vector + + var ix = qw * x + qy * z - qz * y; + var iy = qw * y + qz * x - qx * z; + var iz = qw * z + qx * y - qy * x; + var iw = - qx * x - qy * y - qz * z; + + // calculate result * inverse quat + + this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; + this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; + this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; + + return this; + + }, + + project: function () { + + var matrix = new Matrix4(); + + return function project( camera ) { + + matrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) ); + return this.applyMatrix4( matrix ); + + }; + + }(), + + unproject: function () { + + var matrix = new Matrix4(); + + return function unproject( camera ) { + + matrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) ); + return this.applyMatrix4( matrix ); + + }; + + }(), + + transformDirection: function ( m ) { + + // input: THREE.Matrix4 affine matrix + // vector interpreted as a direction + + var x = this.x, y = this.y, z = this.z; + var e = m.elements; + + this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; + this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; + this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; + + return this.normalize(); + + }, + + divide: function ( v ) { + + this.x /= v.x; + this.y /= v.y; + this.z /= v.z; + + return this; + + }, + + divideScalar: function ( scalar ) { + + return this.multiplyScalar( 1 / scalar ); + + }, + + min: function ( v ) { + + this.x = Math.min( this.x, v.x ); + this.y = Math.min( this.y, v.y ); + this.z = Math.min( this.z, v.z ); + + return this; + + }, + + max: function ( v ) { + + this.x = Math.max( this.x, v.x ); + this.y = Math.max( this.y, v.y ); + this.z = Math.max( this.z, v.z ); + + return this; + + }, + + clamp: function ( min, max ) { + + // assumes min < max, componentwise + + this.x = Math.max( min.x, Math.min( max.x, this.x ) ); + this.y = Math.max( min.y, Math.min( max.y, this.y ) ); + this.z = Math.max( min.z, Math.min( max.z, this.z ) ); + + return this; + + }, + + clampScalar: function () { + + var min = new Vector3(); + var max = new Vector3(); + + return function clampScalar( minVal, maxVal ) { + + min.set( minVal, minVal, minVal ); + max.set( maxVal, maxVal, maxVal ); + + return this.clamp( min, max ); + + }; + + }(), + + clampLength: function ( min, max ) { + + var length = this.length(); + + return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); + + }, + + floor: function () { + + this.x = Math.floor( this.x ); + this.y = Math.floor( this.y ); + this.z = Math.floor( this.z ); + + return this; + + }, + + ceil: function () { + + this.x = Math.ceil( this.x ); + this.y = Math.ceil( this.y ); + this.z = Math.ceil( this.z ); + + return this; + + }, + + round: function () { + + this.x = Math.round( this.x ); + this.y = Math.round( this.y ); + this.z = Math.round( this.z ); + + return this; + + }, + + roundToZero: function () { + + this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); + this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); + this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); + + return this; + + }, + + negate: function () { + + this.x = - this.x; + this.y = - this.y; + this.z = - this.z; + + return this; + + }, + + dot: function ( v ) { + + return this.x * v.x + this.y * v.y + this.z * v.z; + + }, + + // TODO lengthSquared? + + lengthSq: function () { + + return this.x * this.x + this.y * this.y + this.z * this.z; + + }, + + length: function () { + + return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); + + }, + + lengthManhattan: function () { + + return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); + + }, + + normalize: function () { + + return this.divideScalar( this.length() || 1 ); + + }, + + setLength: function ( length ) { + + return this.normalize().multiplyScalar( length ); + + }, + + lerp: function ( v, alpha ) { + + this.x += ( v.x - this.x ) * alpha; + this.y += ( v.y - this.y ) * alpha; + this.z += ( v.z - this.z ) * alpha; + + return this; + + }, + + lerpVectors: function ( v1, v2, alpha ) { + + return this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 ); + + }, + + cross: function ( v, w ) { + + if ( w !== undefined ) { + + console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); + return this.crossVectors( v, w ); + + } + + var x = this.x, y = this.y, z = this.z; + + this.x = y * v.z - z * v.y; + this.y = z * v.x - x * v.z; + this.z = x * v.y - y * v.x; + + return this; + + }, + + crossVectors: function ( a, b ) { + + var ax = a.x, ay = a.y, az = a.z; + var bx = b.x, by = b.y, bz = b.z; + + this.x = ay * bz - az * by; + this.y = az * bx - ax * bz; + this.z = ax * by - ay * bx; + + return this; + + }, + + projectOnVector: function ( vector ) { + + var scalar = vector.dot( this ) / vector.lengthSq(); + + return this.copy( vector ).multiplyScalar( scalar ); + + }, + + projectOnPlane: function () { + + var v1 = new Vector3(); + + return function projectOnPlane( planeNormal ) { + + v1.copy( this ).projectOnVector( planeNormal ); + + return this.sub( v1 ); + + }; + + }(), + + reflect: function () { + + // reflect incident vector off plane orthogonal to normal + // normal is assumed to have unit length + + var v1 = new Vector3(); + + return function reflect( normal ) { + + return this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); + + }; + + }(), + + angleTo: function ( v ) { + + var theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) ); + + // clamp, to handle numerical problems + + return Math.acos( _Math.clamp( theta, - 1, 1 ) ); + + }, + + distanceTo: function ( v ) { + + return Math.sqrt( this.distanceToSquared( v ) ); + + }, + + distanceToSquared: function ( v ) { + + var dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; + + return dx * dx + dy * dy + dz * dz; + + }, + + distanceToManhattan: function ( v ) { + + return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); + + }, + + setFromSpherical: function ( s ) { + + var sinPhiRadius = Math.sin( s.phi ) * s.radius; + + this.x = sinPhiRadius * Math.sin( s.theta ); + this.y = Math.cos( s.phi ) * s.radius; + this.z = sinPhiRadius * Math.cos( s.theta ); + + return this; + + }, + + setFromCylindrical: function ( c ) { + + this.x = c.radius * Math.sin( c.theta ); + this.y = c.y; + this.z = c.radius * Math.cos( c.theta ); + + return this; + + }, + + setFromMatrixPosition: function ( m ) { + + var e = m.elements; + + this.x = e[ 12 ]; + this.y = e[ 13 ]; + this.z = e[ 14 ]; + + return this; + + }, + + setFromMatrixScale: function ( m ) { + + var sx = this.setFromMatrixColumn( m, 0 ).length(); + var sy = this.setFromMatrixColumn( m, 1 ).length(); + var sz = this.setFromMatrixColumn( m, 2 ).length(); + + this.x = sx; + this.y = sy; + this.z = sz; + + return this; + + }, + + setFromMatrixColumn: function ( m, index ) { + + return this.fromArray( m.elements, index * 4 ); + + }, + + equals: function ( v ) { + + return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.x = array[ offset ]; + this.y = array[ offset + 1 ]; + this.z = array[ offset + 2 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.x; + array[ offset + 1 ] = this.y; + array[ offset + 2 ] = this.z; + + return array; + + }, + + fromBufferAttribute: function ( attribute, index, offset ) { + + if ( offset !== undefined ) { + + console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); + + } + + this.x = attribute.getX( index ); + this.y = attribute.getY( index ); + this.z = attribute.getZ( index ); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author philogb / http://blog.thejit.org/ + * @author jordi_ros / http://plattsoft.com + * @author D1plo1d / http://github.com/D1plo1d + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author timknip / http://www.floorplanner.com/ + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + */ + +function Matrix4() { + + this.elements = [ + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); + + } + +} + +Object.assign( Matrix4.prototype, { + + isMatrix4: true, + + set: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; + te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; + te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; + te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; + + return this; + + }, + + identity: function () { + + this.set( + + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + clone: function () { + + return new Matrix4().fromArray( this.elements ); + + }, + + copy: function ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; + te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; + te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ]; + te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ]; + + return this; + + }, + + copyPosition: function ( m ) { + + var te = this.elements, me = m.elements; + + te[ 12 ] = me[ 12 ]; + te[ 13 ] = me[ 13 ]; + te[ 14 ] = me[ 14 ]; + + return this; + + }, + + extractBasis: function ( xAxis, yAxis, zAxis ) { + + xAxis.setFromMatrixColumn( this, 0 ); + yAxis.setFromMatrixColumn( this, 1 ); + zAxis.setFromMatrixColumn( this, 2 ); + + return this; + + }, + + makeBasis: function ( xAxis, yAxis, zAxis ) { + + this.set( + xAxis.x, yAxis.x, zAxis.x, 0, + xAxis.y, yAxis.y, zAxis.y, 0, + xAxis.z, yAxis.z, zAxis.z, 0, + 0, 0, 0, 1 + ); + + return this; + + }, + + extractRotation: function () { + + var v1 = new Vector3(); + + return function extractRotation( m ) { + + var te = this.elements; + var me = m.elements; + + var scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length(); + var scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length(); + var scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length(); + + te[ 0 ] = me[ 0 ] * scaleX; + te[ 1 ] = me[ 1 ] * scaleX; + te[ 2 ] = me[ 2 ] * scaleX; + + te[ 4 ] = me[ 4 ] * scaleY; + te[ 5 ] = me[ 5 ] * scaleY; + te[ 6 ] = me[ 6 ] * scaleY; + + te[ 8 ] = me[ 8 ] * scaleZ; + te[ 9 ] = me[ 9 ] * scaleZ; + te[ 10 ] = me[ 10 ] * scaleZ; + + return this; + + }; + + }(), + + makeRotationFromEuler: function ( euler ) { + + if ( ! ( euler && euler.isEuler ) ) { + + console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); + + } + + var te = this.elements; + + var x = euler.x, y = euler.y, z = euler.z; + var a = Math.cos( x ), b = Math.sin( x ); + var c = Math.cos( y ), d = Math.sin( y ); + var e = Math.cos( z ), f = Math.sin( z ); + + if ( euler.order === 'XYZ' ) { + + var ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = - c * f; + te[ 8 ] = d; + + te[ 1 ] = af + be * d; + te[ 5 ] = ae - bf * d; + te[ 9 ] = - b * c; + + te[ 2 ] = bf - ae * d; + te[ 6 ] = be + af * d; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YXZ' ) { + + var ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce + df * b; + te[ 4 ] = de * b - cf; + te[ 8 ] = a * d; + + te[ 1 ] = a * f; + te[ 5 ] = a * e; + te[ 9 ] = - b; + + te[ 2 ] = cf * b - de; + te[ 6 ] = df + ce * b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZXY' ) { + + var ce = c * e, cf = c * f, de = d * e, df = d * f; + + te[ 0 ] = ce - df * b; + te[ 4 ] = - a * f; + te[ 8 ] = de + cf * b; + + te[ 1 ] = cf + de * b; + te[ 5 ] = a * e; + te[ 9 ] = df - ce * b; + + te[ 2 ] = - a * d; + te[ 6 ] = b; + te[ 10 ] = a * c; + + } else if ( euler.order === 'ZYX' ) { + + var ae = a * e, af = a * f, be = b * e, bf = b * f; + + te[ 0 ] = c * e; + te[ 4 ] = be * d - af; + te[ 8 ] = ae * d + bf; + + te[ 1 ] = c * f; + te[ 5 ] = bf * d + ae; + te[ 9 ] = af * d - be; + + te[ 2 ] = - d; + te[ 6 ] = b * c; + te[ 10 ] = a * c; + + } else if ( euler.order === 'YZX' ) { + + var ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = bd - ac * f; + te[ 8 ] = bc * f + ad; + + te[ 1 ] = f; + te[ 5 ] = a * e; + te[ 9 ] = - b * e; + + te[ 2 ] = - d * e; + te[ 6 ] = ad * f + bc; + te[ 10 ] = ac - bd * f; + + } else if ( euler.order === 'XZY' ) { + + var ac = a * c, ad = a * d, bc = b * c, bd = b * d; + + te[ 0 ] = c * e; + te[ 4 ] = - f; + te[ 8 ] = d * e; + + te[ 1 ] = ac * f + bd; + te[ 5 ] = a * e; + te[ 9 ] = ad * f - bc; + + te[ 2 ] = bc * f - ad; + te[ 6 ] = b * e; + te[ 10 ] = bd * f + ac; + + } + + // last column + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // bottom row + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }, + + makeRotationFromQuaternion: function ( q ) { + + var te = this.elements; + + var x = q._x, y = q._y, z = q._z, w = q._w; + var x2 = x + x, y2 = y + y, z2 = z + z; + var xx = x * x2, xy = x * y2, xz = x * z2; + var yy = y * y2, yz = y * z2, zz = z * z2; + var wx = w * x2, wy = w * y2, wz = w * z2; + + te[ 0 ] = 1 - ( yy + zz ); + te[ 4 ] = xy - wz; + te[ 8 ] = xz + wy; + + te[ 1 ] = xy + wz; + te[ 5 ] = 1 - ( xx + zz ); + te[ 9 ] = yz - wx; + + te[ 2 ] = xz - wy; + te[ 6 ] = yz + wx; + te[ 10 ] = 1 - ( xx + yy ); + + // last column + te[ 3 ] = 0; + te[ 7 ] = 0; + te[ 11 ] = 0; + + // bottom row + te[ 12 ] = 0; + te[ 13 ] = 0; + te[ 14 ] = 0; + te[ 15 ] = 1; + + return this; + + }, + + lookAt: function () { + + var x = new Vector3(); + var y = new Vector3(); + var z = new Vector3(); + + return function lookAt( eye, target, up ) { + + var te = this.elements; + + z.subVectors( eye, target ); + + if ( z.lengthSq() === 0 ) { + + // eye and target are in the same position + + z.z = 1; + + } + + z.normalize(); + x.crossVectors( up, z ); + + if ( x.lengthSq() === 0 ) { + + // up and z are parallel + + if ( Math.abs( up.z ) === 1 ) { + + z.x += 0.0001; + + } else { + + z.z += 0.0001; + + } + + z.normalize(); + x.crossVectors( up, z ); + + } + + x.normalize(); + y.crossVectors( z, x ); + + te[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x; + te[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y; + te[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z; + + return this; + + }; + + }(), + + multiply: function ( m, n ) { + + if ( n !== undefined ) { + + console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); + return this.multiplyMatrices( m, n ); + + } + + return this.multiplyMatrices( this, m ); + + }, + + premultiply: function ( m ) { + + return this.multiplyMatrices( m, this ); + + }, + + multiplyMatrices: function ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; + var a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; + var a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; + var a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; + + var b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; + var b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; + var b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; + var b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; + te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; + te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; + te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; + te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; + te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; + te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; + te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; + te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; + te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; + + te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; + te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; + te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; + te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; + + return this; + + }, + + multiplyScalar: function ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; + te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; + te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; + te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; + + return this; + + }, + + applyToBufferAttribute: function () { + + var v1 = new Vector3(); + + return function applyToBufferAttribute( attribute ) { + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + v1.x = attribute.getX( i ); + v1.y = attribute.getY( i ); + v1.z = attribute.getZ( i ); + + v1.applyMatrix4( this ); + + attribute.setXYZ( i, v1.x, v1.y, v1.z ); + + } + + return attribute; + + }; + + }(), + + determinant: function () { + + var te = this.elements; + + var n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; + var n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; + var n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; + var n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; + + //TODO: make this more efficient + //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) + + return ( + n41 * ( + + n14 * n23 * n32 + - n13 * n24 * n32 + - n14 * n22 * n33 + + n12 * n24 * n33 + + n13 * n22 * n34 + - n12 * n23 * n34 + ) + + n42 * ( + + n11 * n23 * n34 + - n11 * n24 * n33 + + n14 * n21 * n33 + - n13 * n21 * n34 + + n13 * n24 * n31 + - n14 * n23 * n31 + ) + + n43 * ( + + n11 * n24 * n32 + - n11 * n22 * n34 + - n14 * n21 * n32 + + n12 * n21 * n34 + + n14 * n22 * n31 + - n12 * n24 * n31 + ) + + n44 * ( + - n13 * n22 * n31 + - n11 * n23 * n32 + + n11 * n22 * n33 + + n13 * n21 * n32 + - n12 * n21 * n33 + + n12 * n23 * n31 + ) + + ); + + }, + + transpose: function () { + + var te = this.elements; + var tmp; + + tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; + tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; + tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; + + tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; + tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; + tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; + + return this; + + }, + + setPosition: function ( v ) { + + var te = this.elements; + + te[ 12 ] = v.x; + te[ 13 ] = v.y; + te[ 14 ] = v.z; + + return this; + + }, + + getInverse: function ( m, throwOnDegenerate ) { + + // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm + var te = this.elements, + me = m.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ], + n12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ], + n13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ], + n14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ], + + t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, + t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, + t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, + t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + + var det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + + if ( det === 0 ) { + + var msg = "THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0"; + + if ( throwOnDegenerate === true ) { + + throw new Error( msg ); + + } else { + + console.warn( msg ); + + } + + return this.identity(); + + } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; + te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; + te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; + + te[ 4 ] = t12 * detInv; + te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; + te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; + te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; + + te[ 8 ] = t13 * detInv; + te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; + te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; + te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; + + te[ 12 ] = t14 * detInv; + te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; + te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; + te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; + + return this; + + }, + + scale: function ( v ) { + + var te = this.elements; + var x = v.x, y = v.y, z = v.z; + + te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; + te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; + te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; + te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; + + return this; + + }, + + getMaxScaleOnAxis: function () { + + var te = this.elements; + + var scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; + var scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; + var scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; + + return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); + + }, + + makeTranslation: function ( x, y, z ) { + + this.set( + + 1, 0, 0, x, + 0, 1, 0, y, + 0, 0, 1, z, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationX: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + 1, 0, 0, 0, + 0, c, - s, 0, + 0, s, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationY: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, 0, s, 0, + 0, 1, 0, 0, + - s, 0, c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationZ: function ( theta ) { + + var c = Math.cos( theta ), s = Math.sin( theta ); + + this.set( + + c, - s, 0, 0, + s, c, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeRotationAxis: function ( axis, angle ) { + + // Based on http://www.gamedev.net/reference/articles/article1199.asp + + var c = Math.cos( angle ); + var s = Math.sin( angle ); + var t = 1 - c; + var x = axis.x, y = axis.y, z = axis.z; + var tx = t * x, ty = t * y; + + this.set( + + tx * x + c, tx * y - s * z, tx * z + s * y, 0, + tx * y + s * z, ty * y + c, ty * z - s * x, 0, + tx * z - s * y, ty * z + s * x, t * z * z + c, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeScale: function ( x, y, z ) { + + this.set( + + x, 0, 0, 0, + 0, y, 0, 0, + 0, 0, z, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + makeShear: function ( x, y, z ) { + + this.set( + + 1, y, z, 0, + x, 1, z, 0, + x, y, 1, 0, + 0, 0, 0, 1 + + ); + + return this; + + }, + + compose: function ( position, quaternion, scale ) { + + this.makeRotationFromQuaternion( quaternion ); + this.scale( scale ); + this.setPosition( position ); + + return this; + + }, + + decompose: function () { + + var vector = new Vector3(); + var matrix = new Matrix4(); + + return function decompose( position, quaternion, scale ) { + + var te = this.elements; + + var sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); + var sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); + var sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); + + // if determine is negative, we need to invert one scale + var det = this.determinant(); + if ( det < 0 ) sx = - sx; + + position.x = te[ 12 ]; + position.y = te[ 13 ]; + position.z = te[ 14 ]; + + // scale the rotation part + matrix.copy( this ); + + var invSX = 1 / sx; + var invSY = 1 / sy; + var invSZ = 1 / sz; + + matrix.elements[ 0 ] *= invSX; + matrix.elements[ 1 ] *= invSX; + matrix.elements[ 2 ] *= invSX; + + matrix.elements[ 4 ] *= invSY; + matrix.elements[ 5 ] *= invSY; + matrix.elements[ 6 ] *= invSY; + + matrix.elements[ 8 ] *= invSZ; + matrix.elements[ 9 ] *= invSZ; + matrix.elements[ 10 ] *= invSZ; + + quaternion.setFromRotationMatrix( matrix ); + + scale.x = sx; + scale.y = sy; + scale.z = sz; + + return this; + + }; + + }(), + + makePerspective: function ( left, right, top, bottom, near, far ) { + + if ( far === undefined ) { + + console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); + + } + + var te = this.elements; + var x = 2 * near / ( right - left ); + var y = 2 * near / ( top - bottom ); + + var a = ( right + left ) / ( right - left ); + var b = ( top + bottom ) / ( top - bottom ); + var c = - ( far + near ) / ( far - near ); + var d = - 2 * far * near / ( far - near ); + + te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0; + te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0; + + return this; + + }, + + makeOrthographic: function ( left, right, top, bottom, near, far ) { + + var te = this.elements; + var w = 1.0 / ( right - left ); + var h = 1.0 / ( top - bottom ); + var p = 1.0 / ( far - near ); + + var x = ( right + left ) * w; + var y = ( top + bottom ) * h; + var z = ( far + near ) * p; + + te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x; + te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y; + te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = - 2 * p; te[ 14 ] = - z; + te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1; + + return this; + + }, + + equals: function ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 16; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + for ( var i = 0; i < 16; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + array[ offset + 3 ] = te[ 3 ]; + + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + + array[ offset + 8 ] = te[ 8 ]; + array[ offset + 9 ] = te[ 9 ]; + array[ offset + 10 ] = te[ 10 ]; + array[ offset + 11 ] = te[ 11 ]; + + array[ offset + 12 ] = te[ 12 ]; + array[ offset + 13 ] = te[ 13 ]; + array[ offset + 14 ] = te[ 14 ]; + array[ offset + 15 ] = te[ 15 ]; + + return array; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { data: data, width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + +} + +DataTexture.prototype = Object.create( Texture.prototype ); +DataTexture.prototype.constructor = DataTexture; + +DataTexture.prototype.isDataTexture = true; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { + + images = images !== undefined ? images : []; + mapping = mapping !== undefined ? mapping : CubeReflectionMapping; + + Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.flipY = false; + +} + +CubeTexture.prototype = Object.create( Texture.prototype ); +CubeTexture.prototype.constructor = CubeTexture; + +CubeTexture.prototype.isCubeTexture = true; + +Object.defineProperty( CubeTexture.prototype, 'images', { + + get: function () { + + return this.image; + + }, + + set: function ( value ) { + + this.image = value; + + } + +} ); + +/** + * @author tschw + * + * Uniforms of a program. + * Those form a tree structure with a special top-level container for the root, + * which you get by calling 'new WebGLUniforms( gl, program, renderer )'. + * + * + * Properties of inner nodes including the top-level container: + * + * .seq - array of nested uniforms + * .map - nested uniforms by name + * + * + * Methods of all nodes except the top-level container: + * + * .setValue( gl, value, [renderer] ) + * + * uploads a uniform value(s) + * the 'renderer' parameter is needed for sampler uniforms + * + * + * Static methods of the top-level container (renderer factorizations): + * + * .upload( gl, seq, values, renderer ) + * + * sets uniforms in 'seq' to 'values[id].value' + * + * .seqWithValue( seq, values ) : filteredSeq + * + * filters 'seq' entries with corresponding entry in values + * + * + * Methods of the top-level container (renderer factorizations): + * + * .setValue( gl, name, value ) + * + * sets uniform with name 'name' to 'value' + * + * .set( gl, obj, prop ) + * + * sets uniform from object and property with same name than uniform + * + * .setOptional( gl, obj, prop ) + * + * like .set for an optional property of the object + * + */ + +var emptyTexture = new Texture(); +var emptyCubeTexture = new CubeTexture(); + +// --- Base for inner nodes (including the root) --- + +function UniformContainer() { + + this.seq = []; + this.map = {}; + +} + +// --- Utilities --- + +// Array Caches (provide typed arrays for temporary by size) + +var arrayCacheF32 = []; +var arrayCacheI32 = []; + +// Float32Array caches used for uploading Matrix uniforms + +var mat4array = new Float32Array( 16 ); +var mat3array = new Float32Array( 9 ); + +// Flattening for arrays of vectors and matrices + +function flatten( array, nBlocks, blockSize ) { + + var firstElem = array[ 0 ]; + + if ( firstElem <= 0 || firstElem > 0 ) return array; + // unoptimized: ! isNaN( firstElem ) + // see http://jacksondunstan.com/articles/983 + + var n = nBlocks * blockSize, + r = arrayCacheF32[ n ]; + + if ( r === undefined ) { + + r = new Float32Array( n ); + arrayCacheF32[ n ] = r; + + } + + if ( nBlocks !== 0 ) { + + firstElem.toArray( r, 0 ); + + for ( var i = 1, offset = 0; i !== nBlocks; ++ i ) { + + offset += blockSize; + array[ i ].toArray( r, offset ); + + } + + } + + return r; + +} + +// Texture unit allocation + +function allocTexUnits( renderer, n ) { + + var r = arrayCacheI32[ n ]; + + if ( r === undefined ) { + + r = new Int32Array( n ); + arrayCacheI32[ n ] = r; + + } + + for ( var i = 0; i !== n; ++ i ) + r[ i ] = renderer.allocTextureUnit(); + + return r; + +} + +// --- Setters --- + +// Note: Defining these methods externally, because they come in a bunch +// and this way their names minify. + +// Single scalar + +function setValue1f( gl, v ) { gl.uniform1f( this.addr, v ); } +function setValue1i( gl, v ) { gl.uniform1i( this.addr, v ); } + +// Single float vector (from flat array or THREE.VectorN) + +function setValue2fv( gl, v ) { + + if ( v.x === undefined ) gl.uniform2fv( this.addr, v ); + else gl.uniform2f( this.addr, v.x, v.y ); + +} + +function setValue3fv( gl, v ) { + + if ( v.x !== undefined ) + gl.uniform3f( this.addr, v.x, v.y, v.z ); + else if ( v.r !== undefined ) + gl.uniform3f( this.addr, v.r, v.g, v.b ); + else + gl.uniform3fv( this.addr, v ); + +} + +function setValue4fv( gl, v ) { + + if ( v.x === undefined ) gl.uniform4fv( this.addr, v ); + else gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); + +} + +// Single matrix (from flat array or MatrixN) + +function setValue2fm( gl, v ) { + + gl.uniformMatrix2fv( this.addr, false, v.elements || v ); + +} + +function setValue3fm( gl, v ) { + + if ( v.elements === undefined ) { + + gl.uniformMatrix3fv( this.addr, false, v ); + + } else { + + mat3array.set( v.elements ); + gl.uniformMatrix3fv( this.addr, false, mat3array ); + + } + +} + +function setValue4fm( gl, v ) { + + if ( v.elements === undefined ) { + + gl.uniformMatrix4fv( this.addr, false, v ); + + } else { + + mat4array.set( v.elements ); + gl.uniformMatrix4fv( this.addr, false, mat4array ); + + } + +} + +// Single texture (2D / Cube) + +function setValueT1( gl, v, renderer ) { + + var unit = renderer.allocTextureUnit(); + gl.uniform1i( this.addr, unit ); + renderer.setTexture2D( v || emptyTexture, unit ); + +} + +function setValueT6( gl, v, renderer ) { + + var unit = renderer.allocTextureUnit(); + gl.uniform1i( this.addr, unit ); + renderer.setTextureCube( v || emptyCubeTexture, unit ); + +} + +// Integer / Boolean vectors or arrays thereof (always flat arrays) + +function setValue2iv( gl, v ) { gl.uniform2iv( this.addr, v ); } +function setValue3iv( gl, v ) { gl.uniform3iv( this.addr, v ); } +function setValue4iv( gl, v ) { gl.uniform4iv( this.addr, v ); } + +// Helper to pick the right setter for the singular case + +function getSingularSetter( type ) { + + switch ( type ) { + + case 0x1406: return setValue1f; // FLOAT + case 0x8b50: return setValue2fv; // _VEC2 + case 0x8b51: return setValue3fv; // _VEC3 + case 0x8b52: return setValue4fv; // _VEC4 + + case 0x8b5a: return setValue2fm; // _MAT2 + case 0x8b5b: return setValue3fm; // _MAT3 + case 0x8b5c: return setValue4fm; // _MAT4 + + case 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES + case 0x8b60: return setValueT6; // SAMPLER_CUBE + + case 0x1404: case 0x8b56: return setValue1i; // INT, BOOL + case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 + case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 + case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 + + } + +} + +// Array of scalars + +function setValue1fv( gl, v ) { gl.uniform1fv( this.addr, v ); } +function setValue1iv( gl, v ) { gl.uniform1iv( this.addr, v ); } + +// Array of vectors (flat or from THREE classes) + +function setValueV2a( gl, v ) { + + gl.uniform2fv( this.addr, flatten( v, this.size, 2 ) ); + +} + +function setValueV3a( gl, v ) { + + gl.uniform3fv( this.addr, flatten( v, this.size, 3 ) ); + +} + +function setValueV4a( gl, v ) { + + gl.uniform4fv( this.addr, flatten( v, this.size, 4 ) ); + +} + +// Array of matrices (flat or from THREE clases) + +function setValueM2a( gl, v ) { + + gl.uniformMatrix2fv( this.addr, false, flatten( v, this.size, 4 ) ); + +} + +function setValueM3a( gl, v ) { + + gl.uniformMatrix3fv( this.addr, false, flatten( v, this.size, 9 ) ); + +} + +function setValueM4a( gl, v ) { + + gl.uniformMatrix4fv( this.addr, false, flatten( v, this.size, 16 ) ); + +} + +// Array of textures (2D / Cube) + +function setValueT1a( gl, v, renderer ) { + + var n = v.length, + units = allocTexUnits( renderer, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + renderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] ); + + } + +} + +function setValueT6a( gl, v, renderer ) { + + var n = v.length, + units = allocTexUnits( renderer, n ); + + gl.uniform1iv( this.addr, units ); + + for ( var i = 0; i !== n; ++ i ) { + + renderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); + + } + +} + +// Helper to pick the right setter for a pure (bottom-level) array + +function getPureArraySetter( type ) { + + switch ( type ) { + + case 0x1406: return setValue1fv; // FLOAT + case 0x8b50: return setValueV2a; // _VEC2 + case 0x8b51: return setValueV3a; // _VEC3 + case 0x8b52: return setValueV4a; // _VEC4 + + case 0x8b5a: return setValueM2a; // _MAT2 + case 0x8b5b: return setValueM3a; // _MAT3 + case 0x8b5c: return setValueM4a; // _MAT4 + + case 0x8b5e: return setValueT1a; // SAMPLER_2D + case 0x8b60: return setValueT6a; // SAMPLER_CUBE + + case 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL + case 0x8b53: case 0x8b57: return setValue2iv; // _VEC2 + case 0x8b54: case 0x8b58: return setValue3iv; // _VEC3 + case 0x8b55: case 0x8b59: return setValue4iv; // _VEC4 + + } + +} + +// --- Uniform Classes --- + +function SingleUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.setValue = getSingularSetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +function PureArrayUniform( id, activeInfo, addr ) { + + this.id = id; + this.addr = addr; + this.size = activeInfo.size; + this.setValue = getPureArraySetter( activeInfo.type ); + + // this.path = activeInfo.name; // DEBUG + +} + +function StructuredUniform( id ) { + + this.id = id; + + UniformContainer.call( this ); // mix-in + +} + +StructuredUniform.prototype.setValue = function ( gl, value ) { + + // Note: Don't need an extra 'renderer' parameter, since samplers + // are not allowed in structured uniforms. + + var seq = this.seq; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + u.setValue( gl, value[ u.id ] ); + + } + +}; + +// --- Top-level --- + +// Parser - builds up the property tree from the path strings + +var RePathPart = /([\w\d_]+)(\])?(\[|\.)?/g; + +// extracts +// - the identifier (member name or array index) +// - followed by an optional right bracket (found when array index) +// - followed by an optional left bracket or dot (type of subscript) +// +// Note: These portions can be read in a non-overlapping fashion and +// allow straightforward parsing of the hierarchy that WebGL encodes +// in the uniform names. + +function addUniform( container, uniformObject ) { + + container.seq.push( uniformObject ); + container.map[ uniformObject.id ] = uniformObject; + +} + +function parseUniform( activeInfo, addr, container ) { + + var path = activeInfo.name, + pathLength = path.length; + + // reset RegExp object, because of the early exit of a previous run + RePathPart.lastIndex = 0; + + for ( ; ; ) { + + var match = RePathPart.exec( path ), + matchEnd = RePathPart.lastIndex, + + id = match[ 1 ], + idIsIndex = match[ 2 ] === ']', + subscript = match[ 3 ]; + + if ( idIsIndex ) id = id | 0; // convert to integer + + if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { + + // bare name or "pure" bottom-level array "[0]" suffix + + addUniform( container, subscript === undefined ? + new SingleUniform( id, activeInfo, addr ) : + new PureArrayUniform( id, activeInfo, addr ) ); + + break; + + } else { + + // step into inner node / create it in case it doesn't exist + + var map = container.map, next = map[ id ]; + + if ( next === undefined ) { + + next = new StructuredUniform( id ); + addUniform( container, next ); + + } + + container = next; + + } + + } + +} + +// Root Container + +function WebGLUniforms( gl, program, renderer ) { + + UniformContainer.call( this ); + + this.renderer = renderer; + + var n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS ); + + for ( var i = 0; i < n; ++ i ) { + + var info = gl.getActiveUniform( program, i ), + path = info.name, + addr = gl.getUniformLocation( program, path ); + + parseUniform( info, addr, this ); + + } + +} + +WebGLUniforms.prototype.setValue = function ( gl, name, value ) { + + var u = this.map[ name ]; + + if ( u !== undefined ) u.setValue( gl, value, this.renderer ); + +}; + +WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { + + var v = object[ name ]; + + if ( v !== undefined ) this.setValue( gl, name, v ); + +}; + + +// Static interface + +WebGLUniforms.upload = function ( gl, seq, values, renderer ) { + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ], + v = values[ u.id ]; + + if ( v.needsUpdate !== false ) { + + // note: always updating when .needsUpdate is undefined + u.setValue( gl, v.value, renderer ); + + } + + } + +}; + +WebGLUniforms.seqWithValue = function ( seq, values ) { + + var r = []; + + for ( var i = 0, n = seq.length; i !== n; ++ i ) { + + var u = seq[ i ]; + if ( u.id in values ) r.push( u ); + + } + + return r; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, + 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, + 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, + 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, + 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, + 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, + 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, + 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, + 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, + 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, + 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, + 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, + 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, + 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, + 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, + 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, + 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, + 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, + 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, + 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, + 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, + 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, + 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, + 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; + +function Color( r, g, b ) { + + if ( g === undefined && b === undefined ) { + + // r is THREE.Color, hex or string + return this.set( r ); + + } + + return this.setRGB( r, g, b ); + +} + +Object.assign( Color.prototype, { + + isColor: true, + + r: 1, g: 1, b: 1, + + set: function ( value ) { + + if ( value && value.isColor ) { + + this.copy( value ); + + } else if ( typeof value === 'number' ) { + + this.setHex( value ); + + } else if ( typeof value === 'string' ) { + + this.setStyle( value ); + + } + + return this; + + }, + + setScalar: function ( scalar ) { + + this.r = scalar; + this.g = scalar; + this.b = scalar; + + return this; + + }, + + setHex: function ( hex ) { + + hex = Math.floor( hex ); + + this.r = ( hex >> 16 & 255 ) / 255; + this.g = ( hex >> 8 & 255 ) / 255; + this.b = ( hex & 255 ) / 255; + + return this; + + }, + + setRGB: function ( r, g, b ) { + + this.r = r; + this.g = g; + this.b = b; + + return this; + + }, + + setHSL: function () { + + function hue2rgb( p, q, t ) { + + if ( t < 0 ) t += 1; + if ( t > 1 ) t -= 1; + if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; + if ( t < 1 / 2 ) return q; + if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); + return p; + + } + + return function setHSL( h, s, l ) { + + // h,s,l ranges are in 0.0 - 1.0 + h = _Math.euclideanModulo( h, 1 ); + s = _Math.clamp( s, 0, 1 ); + l = _Math.clamp( l, 0, 1 ); + + if ( s === 0 ) { + + this.r = this.g = this.b = l; + + } else { + + var p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); + var q = ( 2 * l ) - p; + + this.r = hue2rgb( q, p, h + 1 / 3 ); + this.g = hue2rgb( q, p, h ); + this.b = hue2rgb( q, p, h - 1 / 3 ); + + } + + return this; + + }; + + }(), + + setStyle: function ( style ) { + + function handleAlpha( string ) { + + if ( string === undefined ) return; + + if ( parseFloat( string ) < 1 ) { + + console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); + + } + + } + + + var m; + + if ( m = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { + + // rgb / hsl + + var color; + var name = m[ 1 ]; + var components = m[ 2 ]; + + switch ( name ) { + + case 'rgb': + case 'rgba': + + if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(255,0,0) rgba(255,0,0,0.5) + this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; + this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; + this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) + this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; + this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; + this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; + + handleAlpha( color[ 5 ] ); + + return this; + + } + + break; + + case 'hsl': + case 'hsla': + + if ( color = /^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec( components ) ) { + + // hsl(120,50%,50%) hsla(120,50%,50%,0.5) + var h = parseFloat( color[ 1 ] ) / 360; + var s = parseInt( color[ 2 ], 10 ) / 100; + var l = parseInt( color[ 3 ], 10 ) / 100; + + handleAlpha( color[ 5 ] ); + + return this.setHSL( h, s, l ); + + } + + break; + + } + + } else if ( m = /^\#([A-Fa-f0-9]+)$/.exec( style ) ) { + + // hex color + + var hex = m[ 1 ]; + var size = hex.length; + + if ( size === 3 ) { + + // #ff0 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; + + return this; + + } else if ( size === 6 ) { + + // #ff0000 + this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; + this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; + this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; + + return this; + + } + + } + + if ( style && style.length > 0 ) { + + // color keywords + var hex = ColorKeywords[ style ]; + + if ( hex !== undefined ) { + + // red + this.setHex( hex ); + + } else { + + // unknown color + console.warn( 'THREE.Color: Unknown color ' + style ); + + } + + } + + return this; + + }, + + clone: function () { + + return new this.constructor( this.r, this.g, this.b ); + + }, + + copy: function ( color ) { + + this.r = color.r; + this.g = color.g; + this.b = color.b; + + return this; + + }, + + copyGammaToLinear: function ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) gammaFactor = 2.0; + + this.r = Math.pow( color.r, gammaFactor ); + this.g = Math.pow( color.g, gammaFactor ); + this.b = Math.pow( color.b, gammaFactor ); + + return this; + + }, + + copyLinearToGamma: function ( color, gammaFactor ) { + + if ( gammaFactor === undefined ) gammaFactor = 2.0; + + var safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; + + this.r = Math.pow( color.r, safeInverse ); + this.g = Math.pow( color.g, safeInverse ); + this.b = Math.pow( color.b, safeInverse ); + + return this; + + }, + + convertGammaToLinear: function () { + + var r = this.r, g = this.g, b = this.b; + + this.r = r * r; + this.g = g * g; + this.b = b * b; + + return this; + + }, + + convertLinearToGamma: function () { + + this.r = Math.sqrt( this.r ); + this.g = Math.sqrt( this.g ); + this.b = Math.sqrt( this.b ); + + return this; + + }, + + getHex: function () { + + return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; + + }, + + getHexString: function () { + + return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); + + }, + + getHSL: function ( optionalTarget ) { + + // h,s,l ranges are in 0.0 - 1.0 + + var hsl = optionalTarget || { h: 0, s: 0, l: 0 }; + + var r = this.r, g = this.g, b = this.b; + + var max = Math.max( r, g, b ); + var min = Math.min( r, g, b ); + + var hue, saturation; + var lightness = ( min + max ) / 2.0; + + if ( min === max ) { + + hue = 0; + saturation = 0; + + } else { + + var delta = max - min; + + saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); + + switch ( max ) { + + case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; + case g: hue = ( b - r ) / delta + 2; break; + case b: hue = ( r - g ) / delta + 4; break; + + } + + hue /= 6; + + } + + hsl.h = hue; + hsl.s = saturation; + hsl.l = lightness; + + return hsl; + + }, + + getStyle: function () { + + return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; + + }, + + offsetHSL: function ( h, s, l ) { + + var hsl = this.getHSL(); + + hsl.h += h; hsl.s += s; hsl.l += l; + + this.setHSL( hsl.h, hsl.s, hsl.l ); + + return this; + + }, + + add: function ( color ) { + + this.r += color.r; + this.g += color.g; + this.b += color.b; + + return this; + + }, + + addColors: function ( color1, color2 ) { + + this.r = color1.r + color2.r; + this.g = color1.g + color2.g; + this.b = color1.b + color2.b; + + return this; + + }, + + addScalar: function ( s ) { + + this.r += s; + this.g += s; + this.b += s; + + return this; + + }, + + sub: function( color ) { + + this.r = Math.max( 0, this.r - color.r ); + this.g = Math.max( 0, this.g - color.g ); + this.b = Math.max( 0, this.b - color.b ); + + return this; + + }, + + multiply: function ( color ) { + + this.r *= color.r; + this.g *= color.g; + this.b *= color.b; + + return this; + + }, + + multiplyScalar: function ( s ) { + + this.r *= s; + this.g *= s; + this.b *= s; + + return this; + + }, + + lerp: function ( color, alpha ) { + + this.r += ( color.r - this.r ) * alpha; + this.g += ( color.g - this.g ) * alpha; + this.b += ( color.b - this.b ) * alpha; + + return this; + + }, + + equals: function ( c ) { + + return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + this.r = array[ offset ]; + this.g = array[ offset + 1 ]; + this.b = array[ offset + 2 ]; + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this.r; + array[ offset + 1 ] = this.g; + array[ offset + 2 ] = this.b; + + return array; + + }, + + toJSON: function () { + + return this.getHex(); + + } + +} ); + +/** + * Uniforms library for shared webgl shaders + */ + +var UniformsLib = { + + common: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + + map: { value: null }, + offsetRepeat: { value: new Vector4( 0, 0, 1, 1 ) }, + + alphaMap: { value: null }, + + }, + + specularmap: { + + specularMap: { value: null }, + + }, + + envmap: { + + envMap: { value: null }, + flipEnvMap: { value: - 1 }, + reflectivity: { value: 1.0 }, + refractionRatio: { value: 0.98 } + + }, + + aomap: { + + aoMap: { value: null }, + aoMapIntensity: { value: 1 } + + }, + + lightmap: { + + lightMap: { value: null }, + lightMapIntensity: { value: 1 } + + }, + + emissivemap: { + + emissiveMap: { value: null } + + }, + + bumpmap: { + + bumpMap: { value: null }, + bumpScale: { value: 1 } + + }, + + normalmap: { + + normalMap: { value: null }, + normalScale: { value: new Vector2( 1, 1 ) } + + }, + + displacementmap: { + + displacementMap: { value: null }, + displacementScale: { value: 1 }, + displacementBias: { value: 0 } + + }, + + roughnessmap: { + + roughnessMap: { value: null } + + }, + + metalnessmap: { + + metalnessMap: { value: null } + + }, + + gradientmap: { + + gradientMap: { value: null } + + }, + + fog: { + + fogDensity: { value: 0.00025 }, + fogNear: { value: 1 }, + fogFar: { value: 2000 }, + fogColor: { value: new Color( 0xffffff ) } + + }, + + lights: { + + ambientLightColor: { value: [] }, + + directionalLights: { value: [], properties: { + direction: {}, + color: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + directionalShadowMap: { value: [] }, + directionalShadowMatrix: { value: [] }, + + spotLights: { value: [], properties: { + color: {}, + position: {}, + direction: {}, + distance: {}, + coneCos: {}, + penumbraCos: {}, + decay: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {} + } }, + + spotShadowMap: { value: [] }, + spotShadowMatrix: { value: [] }, + + pointLights: { value: [], properties: { + color: {}, + position: {}, + decay: {}, + distance: {}, + + shadow: {}, + shadowBias: {}, + shadowRadius: {}, + shadowMapSize: {}, + shadowCameraNear: {}, + shadowCameraFar: {} + } }, + + pointShadowMap: { value: [] }, + pointShadowMatrix: { value: [] }, + + hemisphereLights: { value: [], properties: { + direction: {}, + skyColor: {}, + groundColor: {} + } }, + + // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src + rectAreaLights: { value: [], properties: { + color: {}, + position: {}, + width: {}, + height: {} + } } + + }, + + points: { + + diffuse: { value: new Color( 0xeeeeee ) }, + opacity: { value: 1.0 }, + size: { value: 1.0 }, + scale: { value: 1.0 }, + map: { value: null }, + offsetRepeat: { value: new Vector4( 0, 0, 1, 1 ) } + + } + +}; + +/** + * Uniform Utilities + */ + +var UniformsUtils = { + + merge: function ( uniforms ) { + + var merged = {}; + + for ( var u = 0; u < uniforms.length; u ++ ) { + + var tmp = this.clone( uniforms[ u ] ); + + for ( var p in tmp ) { + + merged[ p ] = tmp[ p ]; + + } + + } + + return merged; + + }, + + clone: function ( uniforms_src ) { + + var uniforms_dst = {}; + + for ( var u in uniforms_src ) { + + uniforms_dst[ u ] = {}; + + for ( var p in uniforms_src[ u ] ) { + + var parameter_src = uniforms_src[ u ][ p ]; + + if ( parameter_src && ( parameter_src.isColor || + parameter_src.isMatrix3 || parameter_src.isMatrix4 || + parameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 || + parameter_src.isTexture ) ) { + + uniforms_dst[ u ][ p ] = parameter_src.clone(); + + } else if ( Array.isArray( parameter_src ) ) { + + uniforms_dst[ u ][ p ] = parameter_src.slice(); + + } else { + + uniforms_dst[ u ][ p ] = parameter_src; + + } + + } + + } + + return uniforms_dst; + + } + +}; + +var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n"; + +var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n"; + +var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n"; + +var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n"; + +var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; + +var begin_vertex = "\nvec3 transformed = vec3( position );\n"; + +var beginnormal_vertex = "\nvec3 objectNormal = vec3( normal );\n"; + +var bsdfs = "float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat theta = acos( dot( N, V ) );\n\tvec2 uv = vec2(\n\t\tsqrt( saturate( roughness ) ),\n\t\tsaturate( theta / ( 0.5 * PI ) ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.86267 + (0.49788 + 0.01436 * y ) * y;\n\tfloat b = 3.45068 + (4.18814 + y) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = (x > 0.0) ? v : 0.5 * inversesqrt( 1.0 - x * x ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transpose( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tvec3 result = vec3( LTC_ClippedSphereFormFactor( vectorFormFactor ) );\n\treturn result;\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n"; + +var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n"; + +var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; ++ i ) {\n\t\tvec4 plane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t\t\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; ++ i ) {\n\t\t\tvec4 plane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t\n\t#endif\n#endif\n"; + +var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n"; + +var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n"; + +var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n"; + +var color_fragment = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; + +var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n"; + +var color_pars_vertex = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; + +var color_vertex = "#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif"; + +var common = "#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transpose( const in mat3 v ) {\n\tmat3 tmp;\n\ttmp[0] = vec3(v[0].x, v[1].x, v[2].x);\n\ttmp[1] = vec3(v[0].y, v[1].y, v[2].y);\n\ttmp[2] = vec3(v[0].z, v[1].z, v[2].z);\n\treturn tmp;\n}\n"; + +var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n"; + +var defaultnormal_vertex = "vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n"; + +var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n"; + +var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n"; + +var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n"; + +var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n"; + +var encodings_fragment = " gl_FragColor = linearToOutputTexel( gl_FragColor );\n"; + +var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n"; + +var envmap_fragment = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n"; + +var envmap_pars_fragment = "#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n"; + +var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n"; + +var envmap_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n"; + +var fog_vertex = "\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif"; + +var fog_pars_vertex = "#ifdef USE_FOG\n varying float fogDepth;\n#endif\n"; + +var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n"; + +var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n"; + +var gradientmap_pars_fragment = "#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n"; + +var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n"; + +var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; + +var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n"; + +var lights_pars = "uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltcMat;\tuniform sampler2D ltcMag;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar - 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n"; + +var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n"; + +var lights_phong_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n"; + +var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n"; + +var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tfloat norm = texture2D( ltcMag, uv ).a;\n\t\tvec4 t = texture2D( ltcMat, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( 1, 0, t.y ),\n\t\t\tvec3( 0, t.z, 0 ),\n\t\t\tvec3( t.w, 0, t.x )\n\t\t);\n\t\treflectedLight.directSpecular += lightColor * material.specularColor * norm * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n"; + +var lights_template = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, 8 );\n\t#endif\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tvec3 radiance = getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), 8 );\n\t#ifndef STANDARD\n\t\tvec3 clearCoatRadiance = getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), 8 );\n\t#else\n\t\tvec3 clearCoatRadiance = vec3( 0.0 );\n\t#endif\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n"; + +var logdepthbuf_fragment = "#if defined(USE_LOGDEPTHBUF) && defined(USE_LOGDEPTHBUF_EXT)\n\tgl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;\n#endif"; + +var logdepthbuf_pars_fragment = "#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n"; + +var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif"; + +var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\tgl_Position.z = log2(max( EPSILON, gl_Position.w + 1.0 )) * logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = (gl_Position.z - 1.0) * gl_Position.w;\n\t#endif\n#endif\n"; + +var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n"; + +var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n"; + +var map_particle_fragment = "#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) * offsetRepeat.zw + offsetRepeat.xy );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n"; + +var map_particle_pars_fragment = "#ifdef USE_MAP\n\tuniform vec4 offsetRepeat;\n\tuniform sampler2D map;\n#endif\n"; + +var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n"; + +var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; + +var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n"; + +var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; + +var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n"; + +var normal_fragment = "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n"; + +var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tvec3 S = normalize( q0 * st1.t - q1 * st0.t );\n\t\tvec3 T = normalize( -q0 * st1.s + q1 * st0.s );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n"; + +var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 1.0 - 2.0 * rgb.xyz;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n"; + +var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n"; + +var project_vertex = "vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n"; + +var dithering_fragment = "#if defined( DITHERING )\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n"; + +var dithering_pars_fragment = "#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n"; + +var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n"; + +var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; + +var shadowmap_pars_fragment = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n"; + +var shadowmap_pars_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n"; + +var shadowmap_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n"; + +var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n"; + +var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; + +var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n"; + +var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n"; + +var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n"; + +var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif"; + +var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; + +var tonemapping_fragment = "#if defined( TONE_MAPPING )\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n"; + +var tonemapping_pars_fragment = "#define saturate(a) clamp( a, 0.0, 1.0 )\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n"; + +var uv_pars_fragment = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif"; + +var uv_pars_vertex = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform vec4 offsetRepeat;\n#endif\n"; + +var uv_vertex = "#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = uv * offsetRepeat.zw + offsetRepeat.xy;\n#endif"; + +var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; + +var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif"; + +var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif"; + +var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( PHYSICAL ) || defined( LAMBERT ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n"; + +var cube_frag = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n"; + +var cube_vert = "varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n"; + +var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n"; + +var depth_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var distanceRGBA_frag = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n"; + +var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}\n"; + +var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n"; + +var equirect_vert = "varying vec3 vWorldPosition;\n#include \nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}\n"; + +var linedashed_frag = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}\n"; + +var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshbasic_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphysical_frag = "#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var meshphysical_vert = "#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}\n"; + +var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n"; + +var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n"; + +var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var points_vert = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n}\n"; + +var shadow_vert = "#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n}\n"; + +var ShaderChunk = { + alphamap_fragment: alphamap_fragment, + alphamap_pars_fragment: alphamap_pars_fragment, + alphatest_fragment: alphatest_fragment, + aomap_fragment: aomap_fragment, + aomap_pars_fragment: aomap_pars_fragment, + begin_vertex: begin_vertex, + beginnormal_vertex: beginnormal_vertex, + bsdfs: bsdfs, + bumpmap_pars_fragment: bumpmap_pars_fragment, + clipping_planes_fragment: clipping_planes_fragment, + clipping_planes_pars_fragment: clipping_planes_pars_fragment, + clipping_planes_pars_vertex: clipping_planes_pars_vertex, + clipping_planes_vertex: clipping_planes_vertex, + color_fragment: color_fragment, + color_pars_fragment: color_pars_fragment, + color_pars_vertex: color_pars_vertex, + color_vertex: color_vertex, + common: common, + cube_uv_reflection_fragment: cube_uv_reflection_fragment, + defaultnormal_vertex: defaultnormal_vertex, + displacementmap_pars_vertex: displacementmap_pars_vertex, + displacementmap_vertex: displacementmap_vertex, + emissivemap_fragment: emissivemap_fragment, + emissivemap_pars_fragment: emissivemap_pars_fragment, + encodings_fragment: encodings_fragment, + encodings_pars_fragment: encodings_pars_fragment, + envmap_fragment: envmap_fragment, + envmap_pars_fragment: envmap_pars_fragment, + envmap_pars_vertex: envmap_pars_vertex, + envmap_vertex: envmap_vertex, + fog_vertex: fog_vertex, + fog_pars_vertex: fog_pars_vertex, + fog_fragment: fog_fragment, + fog_pars_fragment: fog_pars_fragment, + gradientmap_pars_fragment: gradientmap_pars_fragment, + lightmap_fragment: lightmap_fragment, + lightmap_pars_fragment: lightmap_pars_fragment, + lights_lambert_vertex: lights_lambert_vertex, + lights_pars: lights_pars, + lights_phong_fragment: lights_phong_fragment, + lights_phong_pars_fragment: lights_phong_pars_fragment, + lights_physical_fragment: lights_physical_fragment, + lights_physical_pars_fragment: lights_physical_pars_fragment, + lights_template: lights_template, + logdepthbuf_fragment: logdepthbuf_fragment, + logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, + logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, + logdepthbuf_vertex: logdepthbuf_vertex, + map_fragment: map_fragment, + map_pars_fragment: map_pars_fragment, + map_particle_fragment: map_particle_fragment, + map_particle_pars_fragment: map_particle_pars_fragment, + metalnessmap_fragment: metalnessmap_fragment, + metalnessmap_pars_fragment: metalnessmap_pars_fragment, + morphnormal_vertex: morphnormal_vertex, + morphtarget_pars_vertex: morphtarget_pars_vertex, + morphtarget_vertex: morphtarget_vertex, + normal_fragment: normal_fragment, + normalmap_pars_fragment: normalmap_pars_fragment, + packing: packing, + premultiplied_alpha_fragment: premultiplied_alpha_fragment, + project_vertex: project_vertex, + dithering_fragment: dithering_fragment, + dithering_pars_fragment: dithering_pars_fragment, + roughnessmap_fragment: roughnessmap_fragment, + roughnessmap_pars_fragment: roughnessmap_pars_fragment, + shadowmap_pars_fragment: shadowmap_pars_fragment, + shadowmap_pars_vertex: shadowmap_pars_vertex, + shadowmap_vertex: shadowmap_vertex, + shadowmask_pars_fragment: shadowmask_pars_fragment, + skinbase_vertex: skinbase_vertex, + skinning_pars_vertex: skinning_pars_vertex, + skinning_vertex: skinning_vertex, + skinnormal_vertex: skinnormal_vertex, + specularmap_fragment: specularmap_fragment, + specularmap_pars_fragment: specularmap_pars_fragment, + tonemapping_fragment: tonemapping_fragment, + tonemapping_pars_fragment: tonemapping_pars_fragment, + uv_pars_fragment: uv_pars_fragment, + uv_pars_vertex: uv_pars_vertex, + uv_vertex: uv_vertex, + uv2_pars_fragment: uv2_pars_fragment, + uv2_pars_vertex: uv2_pars_vertex, + uv2_vertex: uv2_vertex, + worldpos_vertex: worldpos_vertex, + + cube_frag: cube_frag, + cube_vert: cube_vert, + depth_frag: depth_frag, + depth_vert: depth_vert, + distanceRGBA_frag: distanceRGBA_frag, + distanceRGBA_vert: distanceRGBA_vert, + equirect_frag: equirect_frag, + equirect_vert: equirect_vert, + linedashed_frag: linedashed_frag, + linedashed_vert: linedashed_vert, + meshbasic_frag: meshbasic_frag, + meshbasic_vert: meshbasic_vert, + meshlambert_frag: meshlambert_frag, + meshlambert_vert: meshlambert_vert, + meshphong_frag: meshphong_frag, + meshphong_vert: meshphong_vert, + meshphysical_frag: meshphysical_frag, + meshphysical_vert: meshphysical_vert, + normal_frag: normal_frag, + normal_vert: normal_vert, + points_frag: points_frag, + points_vert: points_vert, + shadow_frag: shadow_frag, + shadow_vert: shadow_vert +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + */ + +var ShaderLib = { + + basic: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.meshbasic_vert, + fragmentShader: ShaderChunk.meshbasic_frag + + }, + + lambert: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) } + } + ] ), + + vertexShader: ShaderChunk.meshlambert_vert, + fragmentShader: ShaderChunk.meshlambert_frag + + }, + + phong: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.specularmap, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.gradientmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + specular: { value: new Color( 0x111111 ) }, + shininess: { value: 30 } + } + ] ), + + vertexShader: ShaderChunk.meshphong_vert, + fragmentShader: ShaderChunk.meshphong_frag + + }, + + standard: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.envmap, + UniformsLib.aomap, + UniformsLib.lightmap, + UniformsLib.emissivemap, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + UniformsLib.roughnessmap, + UniformsLib.metalnessmap, + UniformsLib.fog, + UniformsLib.lights, + { + emissive: { value: new Color( 0x000000 ) }, + roughness: { value: 0.5 }, + metalness: { value: 0.5 }, + envMapIntensity: { value: 1 } // temporary + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + + }, + + points: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.points, + UniformsLib.fog + ] ), + + vertexShader: ShaderChunk.points_vert, + fragmentShader: ShaderChunk.points_frag + + }, + + dashed: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.fog, + { + scale: { value: 1 }, + dashSize: { value: 1 }, + totalSize: { value: 2 } + } + ] ), + + vertexShader: ShaderChunk.linedashed_vert, + fragmentShader: ShaderChunk.linedashed_frag + + }, + + depth: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.displacementmap + ] ), + + vertexShader: ShaderChunk.depth_vert, + fragmentShader: ShaderChunk.depth_frag + + }, + + normal: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.bumpmap, + UniformsLib.normalmap, + UniformsLib.displacementmap, + { + opacity: { value: 1.0 } + } + ] ), + + vertexShader: ShaderChunk.normal_vert, + fragmentShader: ShaderChunk.normal_frag + + }, + + /* ------------------------------------------------------------------------- + // Cube map shader + ------------------------------------------------------------------------- */ + + cube: { + + uniforms: { + tCube: { value: null }, + tFlip: { value: - 1 }, + opacity: { value: 1.0 } + }, + + vertexShader: ShaderChunk.cube_vert, + fragmentShader: ShaderChunk.cube_frag + + }, + + equirect: { + + uniforms: { + tEquirect: { value: null }, + }, + + vertexShader: ShaderChunk.equirect_vert, + fragmentShader: ShaderChunk.equirect_frag + + }, + + distanceRGBA: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.common, + UniformsLib.displacementmap, + { + referencePosition: { value: new Vector3() }, + nearDistance: { value: 1 }, + farDistance: { value: 1000 } + } + ] ), + + vertexShader: ShaderChunk.distanceRGBA_vert, + fragmentShader: ShaderChunk.distanceRGBA_frag + + }, + + shadow: { + + uniforms: UniformsUtils.merge( [ + UniformsLib.lights, + { + color: { value: new Color( 0x00000 ) }, + opacity: { value: 1.0 } + }, + ] ), + + vertexShader: ShaderChunk.shadow_vert, + fragmentShader: ShaderChunk.shadow_frag + + } + +}; + +ShaderLib.physical = { + + uniforms: UniformsUtils.merge( [ + ShaderLib.standard.uniforms, + { + clearCoat: { value: 0 }, + clearCoatRoughness: { value: 0 } + } + ] ), + + vertexShader: ShaderChunk.meshphysical_vert, + fragmentShader: ShaderChunk.meshphysical_frag + +}; + +/** + * @author bhouston / http://clara.io + */ + +function Box2( min, max ) { + + this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); + +} + +Object.assign( Box2.prototype, { + + set: function ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }, + + setFromPoints: function ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }, + + setFromCenterAndSize: function () { + + var v1 = new Vector2(); + + return function setFromCenterAndSize( center, size ) { + + var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }, + + makeEmpty: function () { + + this.min.x = this.min.y = + Infinity; + this.max.x = this.max.y = - Infinity; + + return this; + + }, + + isEmpty: function () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return this.isEmpty() ? result.set( 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }, + + getSize: function ( optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return this.isEmpty() ? result.set( 0, 0 ) : result.subVectors( this.max, this.min ); + + }, + + expandByPoint: function ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }, + + expandByVector: function ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }, + + expandByScalar: function ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }, + + containsPoint: function ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y ? false : true; + + }, + + containsBox: function ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y; + + }, + + getParameter: function ( point, optionalTarget ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + var result = optionalTarget || new Vector2(); + + return result.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ) + ); + + }, + + intersectsBox: function ( box ) { + + // using 4 splitting planes to rule out intersections + + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y ? false : true; + + }, + + clampPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector2(); + return result.copy( point ).clamp( this.min, this.max ); + + }, + + distanceToPoint: function () { + + var v1 = new Vector2(); + + return function distanceToPoint( point ) { + + var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + }; + + }(), + + intersect: function ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + return this; + + }, + + union: function ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }, + + translate: function ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }, + + equals: function ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function WebGLFlareRenderer( renderer, gl, state, textures, capabilities ) { + + var vertexBuffer, elementBuffer; + var shader, program, attributes, uniforms; + + var tempTexture, occlusionTexture; + + function init() { + + var vertices = new Float32Array( [ + - 1, - 1, 0, 0, + 1, - 1, 1, 0, + 1, 1, 1, 1, + - 1, 1, 0, 1 + ] ); + + var faces = new Uint16Array( [ + 0, 1, 2, + 0, 2, 3 + ] ); + + // buffers + + vertexBuffer = gl.createBuffer(); + elementBuffer = gl.createBuffer(); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); + + // textures + + tempTexture = gl.createTexture(); + occlusionTexture = gl.createTexture(); + + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 16, 16, 0, gl.RGB, gl.UNSIGNED_BYTE, null ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + + state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); + gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, 16, 16, 0, gl.RGBA, gl.UNSIGNED_BYTE, null ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + + shader = { + + vertexShader: [ + + "uniform lowp int renderType;", + + "uniform vec3 screenPosition;", + "uniform vec2 scale;", + "uniform float rotation;", + + "uniform sampler2D occlusionMap;", + + "attribute vec2 position;", + "attribute vec2 uv;", + + "varying vec2 vUV;", + "varying float vVisibility;", + + "void main() {", + + "vUV = uv;", + + "vec2 pos = position;", + + "if ( renderType == 2 ) {", + + "vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );", + "visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );", + + "vVisibility = visibility.r / 9.0;", + "vVisibility *= 1.0 - visibility.g / 9.0;", + "vVisibility *= visibility.b / 9.0;", + "vVisibility *= 1.0 - visibility.a / 9.0;", + + "pos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;", + "pos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;", + + "}", + + "gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );", + + "}" + + ].join( "\n" ), + + fragmentShader: [ + + "uniform lowp int renderType;", + + "uniform sampler2D map;", + "uniform float opacity;", + "uniform vec3 color;", + + "varying vec2 vUV;", + "varying float vVisibility;", + + "void main() {", + + // pink square + + "if ( renderType == 0 ) {", + + "gl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );", + + // restore + + "} else if ( renderType == 1 ) {", + + "gl_FragColor = texture2D( map, vUV );", + + // flare + + "} else {", + + "vec4 texture = texture2D( map, vUV );", + "texture.a *= opacity * vVisibility;", + "gl_FragColor = texture;", + "gl_FragColor.rgb *= color;", + + "}", + + "}" + + ].join( "\n" ) + + }; + + program = createProgram( shader ); + + attributes = { + vertex: gl.getAttribLocation ( program, "position" ), + uv: gl.getAttribLocation ( program, "uv" ) + }; + + uniforms = { + renderType: gl.getUniformLocation( program, "renderType" ), + map: gl.getUniformLocation( program, "map" ), + occlusionMap: gl.getUniformLocation( program, "occlusionMap" ), + opacity: gl.getUniformLocation( program, "opacity" ), + color: gl.getUniformLocation( program, "color" ), + scale: gl.getUniformLocation( program, "scale" ), + rotation: gl.getUniformLocation( program, "rotation" ), + screenPosition: gl.getUniformLocation( program, "screenPosition" ) + }; + + } + + /* + * Render lens flares + * Method: renders 16x16 0xff00ff-colored points scattered over the light source area, + * reads these back and calculates occlusion. + */ + + this.render = function ( flares, scene, camera, viewport ) { + + if ( flares.length === 0 ) return; + + var tempPosition = new Vector3(); + + var invAspect = viewport.w / viewport.z, + halfViewportWidth = viewport.z * 0.5, + halfViewportHeight = viewport.w * 0.5; + + var size = 16 / viewport.w, + scale = new Vector2( size * invAspect, size ); + + var screenPosition = new Vector3( 1, 1, 0 ), + screenPositionPixels = new Vector2( 1, 1 ); + + var validArea = new Box2(); + + validArea.min.set( viewport.x, viewport.y ); + validArea.max.set( viewport.x + ( viewport.z - 16 ), viewport.y + ( viewport.w - 16 ) ); + + if ( program === undefined ) { + + init(); + + } + + state.useProgram( program ); + + state.initAttributes(); + state.enableAttribute( attributes.vertex ); + state.enableAttribute( attributes.uv ); + state.disableUnusedAttributes(); + + // loop through all lens flares to update their occlusion and positions + // setup gl and common used attribs/uniforms + + gl.uniform1i( uniforms.occlusionMap, 0 ); + gl.uniform1i( uniforms.map, 1 ); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.vertexAttribPointer( attributes.vertex, 2, gl.FLOAT, false, 2 * 8, 0 ); + gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + + state.disable( gl.CULL_FACE ); + state.buffers.depth.setMask( false ); + + for ( var i = 0, l = flares.length; i < l; i ++ ) { + + size = 16 / viewport.w; + scale.set( size * invAspect, size ); + + // calc object screen position + + var flare = flares[ i ]; + + tempPosition.set( flare.matrixWorld.elements[ 12 ], flare.matrixWorld.elements[ 13 ], flare.matrixWorld.elements[ 14 ] ); + + tempPosition.applyMatrix4( camera.matrixWorldInverse ); + tempPosition.applyMatrix4( camera.projectionMatrix ); + + // setup arrays for gl programs + + screenPosition.copy( tempPosition ); + + // horizontal and vertical coordinate of the lower left corner of the pixels to copy + + screenPositionPixels.x = viewport.x + ( screenPosition.x * halfViewportWidth ) + halfViewportWidth - 8; + screenPositionPixels.y = viewport.y + ( screenPosition.y * halfViewportHeight ) + halfViewportHeight - 8; + + // screen cull + + if ( validArea.containsPoint( screenPositionPixels ) === true ) { + + // save current RGB to temp texture + + state.activeTexture( gl.TEXTURE0 ); + state.bindTexture( gl.TEXTURE_2D, null ); + state.activeTexture( gl.TEXTURE1 ); + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGB, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); + + + // render pink quad + + gl.uniform1i( uniforms.renderType, 0 ); + gl.uniform2f( uniforms.scale, scale.x, scale.y ); + gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); + + state.disable( gl.BLEND ); + state.enable( gl.DEPTH_TEST ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + + // copy result to occlusionMap + + state.activeTexture( gl.TEXTURE0 ); + state.bindTexture( gl.TEXTURE_2D, occlusionTexture ); + gl.copyTexImage2D( gl.TEXTURE_2D, 0, gl.RGBA, screenPositionPixels.x, screenPositionPixels.y, 16, 16, 0 ); + + + // restore graphics + + gl.uniform1i( uniforms.renderType, 1 ); + state.disable( gl.DEPTH_TEST ); + + state.activeTexture( gl.TEXTURE1 ); + state.bindTexture( gl.TEXTURE_2D, tempTexture ); + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + + // update object positions + + flare.positionScreen.copy( screenPosition ); + + if ( flare.customUpdateCallback ) { + + flare.customUpdateCallback( flare ); + + } else { + + flare.updateLensFlares(); + + } + + // render flares + + gl.uniform1i( uniforms.renderType, 2 ); + state.enable( gl.BLEND ); + + for ( var j = 0, jl = flare.lensFlares.length; j < jl; j ++ ) { + + var sprite = flare.lensFlares[ j ]; + + if ( sprite.opacity > 0.001 && sprite.scale > 0.001 ) { + + screenPosition.x = sprite.x; + screenPosition.y = sprite.y; + screenPosition.z = sprite.z; + + size = sprite.size * sprite.scale / viewport.w; + + scale.x = size * invAspect; + scale.y = size; + + gl.uniform3f( uniforms.screenPosition, screenPosition.x, screenPosition.y, screenPosition.z ); + gl.uniform2f( uniforms.scale, scale.x, scale.y ); + gl.uniform1f( uniforms.rotation, sprite.rotation ); + + gl.uniform1f( uniforms.opacity, sprite.opacity ); + gl.uniform3f( uniforms.color, sprite.color.r, sprite.color.g, sprite.color.b ); + + state.setBlending( sprite.blending, sprite.blendEquation, sprite.blendSrc, sprite.blendDst ); + + textures.setTexture2D( sprite.texture, 1 ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + } + + } + + } + + } + + // restore gl + + state.enable( gl.CULL_FACE ); + state.enable( gl.DEPTH_TEST ); + state.buffers.depth.setMask( true ); + + state.reset(); + + }; + + function createProgram( shader ) { + + var program = gl.createProgram(); + + var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); + var vertexShader = gl.createShader( gl.VERTEX_SHADER ); + + var prefix = "precision " + capabilities.precision + " float;\n"; + + gl.shaderSource( fragmentShader, prefix + shader.fragmentShader ); + gl.shaderSource( vertexShader, prefix + shader.vertexShader ); + + gl.compileShader( fragmentShader ); + gl.compileShader( vertexShader ); + + gl.attachShader( program, fragmentShader ); + gl.attachShader( program, vertexShader ); + + gl.linkProgram( program ); + + return program; + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.needsUpdate = true; + +} + +CanvasTexture.prototype = Object.create( Texture.prototype ); +CanvasTexture.prototype.constructor = CanvasTexture; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) { + + var vertexBuffer, elementBuffer; + var program, attributes, uniforms; + + var texture; + + // decompose matrixWorld + + var spritePosition = new Vector3(); + var spriteRotation = new Quaternion(); + var spriteScale = new Vector3(); + + function init() { + + var vertices = new Float32Array( [ + - 0.5, - 0.5, 0, 0, + 0.5, - 0.5, 1, 0, + 0.5, 0.5, 1, 1, + - 0.5, 0.5, 0, 1 + ] ); + + var faces = new Uint16Array( [ + 0, 1, 2, + 0, 2, 3 + ] ); + + vertexBuffer = gl.createBuffer(); + elementBuffer = gl.createBuffer(); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW ); + + program = createProgram(); + + attributes = { + position: gl.getAttribLocation ( program, 'position' ), + uv: gl.getAttribLocation ( program, 'uv' ) + }; + + uniforms = { + uvOffset: gl.getUniformLocation( program, 'uvOffset' ), + uvScale: gl.getUniformLocation( program, 'uvScale' ), + + rotation: gl.getUniformLocation( program, 'rotation' ), + scale: gl.getUniformLocation( program, 'scale' ), + + color: gl.getUniformLocation( program, 'color' ), + map: gl.getUniformLocation( program, 'map' ), + opacity: gl.getUniformLocation( program, 'opacity' ), + + modelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ), + projectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ), + + fogType: gl.getUniformLocation( program, 'fogType' ), + fogDensity: gl.getUniformLocation( program, 'fogDensity' ), + fogNear: gl.getUniformLocation( program, 'fogNear' ), + fogFar: gl.getUniformLocation( program, 'fogFar' ), + fogColor: gl.getUniformLocation( program, 'fogColor' ), + + alphaTest: gl.getUniformLocation( program, 'alphaTest' ) + }; + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = 8; + canvas.height = 8; + + var context = canvas.getContext( '2d' ); + context.fillStyle = 'white'; + context.fillRect( 0, 0, 8, 8 ); + + texture = new CanvasTexture( canvas ); + + } + + this.render = function ( sprites, scene, camera ) { + + if ( sprites.length === 0 ) return; + + // setup gl + + if ( program === undefined ) { + + init(); + + } + + state.useProgram( program ); + + state.initAttributes(); + state.enableAttribute( attributes.position ); + state.enableAttribute( attributes.uv ); + state.disableUnusedAttributes(); + + state.disable( gl.CULL_FACE ); + state.enable( gl.BLEND ); + + gl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer ); + gl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 ); + gl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 ); + + gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer ); + + gl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements ); + + state.activeTexture( gl.TEXTURE0 ); + gl.uniform1i( uniforms.map, 0 ); + + var oldFogType = 0; + var sceneFogType = 0; + var fog = scene.fog; + + if ( fog ) { + + gl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b ); + + if ( fog.isFog ) { + + gl.uniform1f( uniforms.fogNear, fog.near ); + gl.uniform1f( uniforms.fogFar, fog.far ); + + gl.uniform1i( uniforms.fogType, 1 ); + oldFogType = 1; + sceneFogType = 1; + + } else if ( fog.isFogExp2 ) { + + gl.uniform1f( uniforms.fogDensity, fog.density ); + + gl.uniform1i( uniforms.fogType, 2 ); + oldFogType = 2; + sceneFogType = 2; + + } + + } else { + + gl.uniform1i( uniforms.fogType, 0 ); + oldFogType = 0; + sceneFogType = 0; + + } + + + // update positions and sort + + for ( var i = 0, l = sprites.length; i < l; i ++ ) { + + var sprite = sprites[ i ]; + + sprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld ); + sprite.z = - sprite.modelViewMatrix.elements[ 14 ]; + + } + + sprites.sort( painterSortStable ); + + // render all sprites + + var scale = []; + + for ( var i = 0, l = sprites.length; i < l; i ++ ) { + + var sprite = sprites[ i ]; + var material = sprite.material; + + if ( material.visible === false ) continue; + + sprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined ); + + gl.uniform1f( uniforms.alphaTest, material.alphaTest ); + gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements ); + + sprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale ); + + scale[ 0 ] = spriteScale.x; + scale[ 1 ] = spriteScale.y; + + var fogType = 0; + + if ( scene.fog && material.fog ) { + + fogType = sceneFogType; + + } + + if ( oldFogType !== fogType ) { + + gl.uniform1i( uniforms.fogType, fogType ); + oldFogType = fogType; + + } + + if ( material.map !== null ) { + + gl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y ); + gl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y ); + + } else { + + gl.uniform2f( uniforms.uvOffset, 0, 0 ); + gl.uniform2f( uniforms.uvScale, 1, 1 ); + + } + + gl.uniform1f( uniforms.opacity, material.opacity ); + gl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b ); + + gl.uniform1f( uniforms.rotation, material.rotation ); + gl.uniform2fv( uniforms.scale, scale ); + + state.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); + state.buffers.depth.setTest( material.depthTest ); + state.buffers.depth.setMask( material.depthWrite ); + + textures.setTexture2D( material.map || texture, 0 ); + + gl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 ); + + sprite.onAfterRender( renderer, scene, camera, undefined, material, undefined ); + + } + + // restore gl + + state.enable( gl.CULL_FACE ); + + state.reset(); + + }; + + function createProgram() { + + var program = gl.createProgram(); + + var vertexShader = gl.createShader( gl.VERTEX_SHADER ); + var fragmentShader = gl.createShader( gl.FRAGMENT_SHADER ); + + gl.shaderSource( vertexShader, [ + + 'precision ' + capabilities.precision + ' float;', + + '#define SHADER_NAME ' + 'SpriteMaterial', + + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform float rotation;', + 'uniform vec2 scale;', + 'uniform vec2 uvOffset;', + 'uniform vec2 uvScale;', + + 'attribute vec2 position;', + 'attribute vec2 uv;', + + 'varying vec2 vUV;', + + 'void main() {', + + 'vUV = uvOffset + uv * uvScale;', + + 'vec2 alignedPosition = position * scale;', + + 'vec2 rotatedPosition;', + 'rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;', + 'rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;', + + 'vec4 finalPosition;', + + 'finalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );', + 'finalPosition.xy += rotatedPosition;', + 'finalPosition = projectionMatrix * finalPosition;', + + 'gl_Position = finalPosition;', + + '}' + + ].join( '\n' ) ); + + gl.shaderSource( fragmentShader, [ + + 'precision ' + capabilities.precision + ' float;', + + '#define SHADER_NAME ' + 'SpriteMaterial', + + 'uniform vec3 color;', + 'uniform sampler2D map;', + 'uniform float opacity;', + + 'uniform int fogType;', + 'uniform vec3 fogColor;', + 'uniform float fogDensity;', + 'uniform float fogNear;', + 'uniform float fogFar;', + 'uniform float alphaTest;', + + 'varying vec2 vUV;', + + 'void main() {', + + 'vec4 texture = texture2D( map, vUV );', + + 'if ( texture.a < alphaTest ) discard;', + + 'gl_FragColor = vec4( color * texture.xyz, texture.a * opacity );', + + 'if ( fogType > 0 ) {', + + 'float depth = gl_FragCoord.z / gl_FragCoord.w;', + 'float fogFactor = 0.0;', + + 'if ( fogType == 1 ) {', + + 'fogFactor = smoothstep( fogNear, fogFar, depth );', + + '} else {', + + 'const float LOG2 = 1.442695;', + 'fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );', + 'fogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );', + + '}', + + 'gl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );', + + '}', + + '}' + + ].join( '\n' ) ); + + gl.compileShader( vertexShader ); + gl.compileShader( fragmentShader ); + + gl.attachShader( program, vertexShader ); + gl.attachShader( program, fragmentShader ); + + gl.linkProgram( program ); + + return program; + + } + + function painterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return b.id - a.id; + + } + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +var materialId = 0; + +function Material() { + + Object.defineProperty( this, 'id', { value: materialId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Material'; + + this.fog = true; + this.lights = true; + + this.blending = NormalBlending; + this.side = FrontSide; + this.flatShading = false; + this.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors + + this.opacity = 1; + this.transparent = false; + + this.blendSrc = SrcAlphaFactor; + this.blendDst = OneMinusSrcAlphaFactor; + this.blendEquation = AddEquation; + this.blendSrcAlpha = null; + this.blendDstAlpha = null; + this.blendEquationAlpha = null; + + this.depthFunc = LessEqualDepth; + this.depthTest = true; + this.depthWrite = true; + + this.clippingPlanes = null; + this.clipIntersection = false; + this.clipShadows = false; + + this.colorWrite = true; + + this.precision = null; // override the renderer's default precision for this material + + this.polygonOffset = false; + this.polygonOffsetFactor = 0; + this.polygonOffsetUnits = 0; + + this.dithering = false; + + this.alphaTest = 0; + this.premultipliedAlpha = false; + + this.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer + + this.visible = true; + + this.userData = {}; + + this.needsUpdate = true; + +} + +Object.assign( Material.prototype, EventDispatcher.prototype, { + + isMaterial: true, + + onBeforeCompile: function () {}, + + setValues: function ( values ) { + + if ( values === undefined ) return; + + for ( var key in values ) { + + var newValue = values[ key ]; + + if ( newValue === undefined ) { + + console.warn( "THREE.Material: '" + key + "' parameter is undefined." ); + continue; + + } + + // for backward compatability if shading is set in the constructor + if ( key === 'shading' ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( newValue === FlatShading ) ? true : false; + continue; + + } + + var currentValue = this[ key ]; + + if ( currentValue === undefined ) { + + console.warn( "THREE." + this.type + ": '" + key + "' is not a property of this material." ); + continue; + + } + + if ( currentValue && currentValue.isColor ) { + + currentValue.set( newValue ); + + } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { + + currentValue.copy( newValue ); + + } else if ( key === 'overdraw' ) { + + // ensure overdraw is backwards-compatible with legacy boolean type + this[ key ] = Number( newValue ); + + } else { + + this[ key ] = newValue; + + } + + } + + }, + + toJSON: function ( meta ) { + + var isRoot = meta === undefined; + + if ( isRoot ) { + + meta = { + textures: {}, + images: {} + }; + + } + + var data = { + metadata: { + version: 4.5, + type: 'Material', + generator: 'Material.toJSON' + } + }; + + // standard Material serialization + data.uuid = this.uuid; + data.type = this.type; + + if ( this.name !== '' ) data.name = this.name; + + if ( this.color && this.color.isColor ) data.color = this.color.getHex(); + + if ( this.roughness !== undefined ) data.roughness = this.roughness; + if ( this.metalness !== undefined ) data.metalness = this.metalness; + + if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); + if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex(); + if ( this.shininess !== undefined ) data.shininess = this.shininess; + if ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat; + if ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness; + + if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid; + if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid; + if ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid; + if ( this.bumpMap && this.bumpMap.isTexture ) { + + data.bumpMap = this.bumpMap.toJSON( meta ).uuid; + data.bumpScale = this.bumpScale; + + } + if ( this.normalMap && this.normalMap.isTexture ) { + + data.normalMap = this.normalMap.toJSON( meta ).uuid; + data.normalScale = this.normalScale.toArray(); + + } + if ( this.displacementMap && this.displacementMap.isTexture ) { + + data.displacementMap = this.displacementMap.toJSON( meta ).uuid; + data.displacementScale = this.displacementScale; + data.displacementBias = this.displacementBias; + + } + if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; + if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; + + if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; + if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid; + + if ( this.envMap && this.envMap.isTexture ) { + + data.envMap = this.envMap.toJSON( meta ).uuid; + data.reflectivity = this.reflectivity; // Scale behind envMap + + } + + if ( this.gradientMap && this.gradientMap.isTexture ) { + + data.gradientMap = this.gradientMap.toJSON( meta ).uuid; + + } + + if ( this.size !== undefined ) data.size = this.size; + if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; + + if ( this.blending !== NormalBlending ) data.blending = this.blending; + if ( this.flatShading === true ) data.flatShading = this.flatShading; + if ( this.side !== FrontSide ) data.side = this.side; + if ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors; + + if ( this.opacity < 1 ) data.opacity = this.opacity; + if ( this.transparent === true ) data.transparent = this.transparent; + + data.depthFunc = this.depthFunc; + data.depthTest = this.depthTest; + data.depthWrite = this.depthWrite; + + if ( this.dithering === true ) data.dithering = true; + + if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest; + if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; + + if ( this.wireframe === true ) data.wireframe = this.wireframe; + if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth; + if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap; + if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin; + + if ( this.morphTargets === true ) data.morphTargets = true; + if ( this.skinning === true ) data.skinning = true; + + if ( this.visible === false ) data.visible = false; + if ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData; + + // TODO: Copied from Object3D.toJSON + + function extractFromCache( cache ) { + + var values = []; + + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + + return values; + + } + + if ( isRoot ) { + + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + + if ( textures.length > 0 ) data.textures = textures; + if ( images.length > 0 ) data.images = images; + + } + + return data; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.name = source.name; + + this.fog = source.fog; + this.lights = source.lights; + + this.blending = source.blending; + this.side = source.side; + this.flatShading = source.flatShading; + this.vertexColors = source.vertexColors; + + this.opacity = source.opacity; + this.transparent = source.transparent; + + this.blendSrc = source.blendSrc; + this.blendDst = source.blendDst; + this.blendEquation = source.blendEquation; + this.blendSrcAlpha = source.blendSrcAlpha; + this.blendDstAlpha = source.blendDstAlpha; + this.blendEquationAlpha = source.blendEquationAlpha; + + this.depthFunc = source.depthFunc; + this.depthTest = source.depthTest; + this.depthWrite = source.depthWrite; + + this.colorWrite = source.colorWrite; + + this.precision = source.precision; + + this.polygonOffset = source.polygonOffset; + this.polygonOffsetFactor = source.polygonOffsetFactor; + this.polygonOffsetUnits = source.polygonOffsetUnits; + + this.dithering = source.dithering; + + this.alphaTest = source.alphaTest; + this.premultipliedAlpha = source.premultipliedAlpha; + + this.overdraw = source.overdraw; + + this.visible = source.visible; + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + this.clipShadows = source.clipShadows; + this.clipIntersection = source.clipIntersection; + + var srcPlanes = source.clippingPlanes, + dstPlanes = null; + + if ( srcPlanes !== null ) { + + var n = srcPlanes.length; + dstPlanes = new Array( n ); + + for ( var i = 0; i !== n; ++ i ) + dstPlanes[ i ] = srcPlanes[ i ].clone(); + + } + + this.clippingPlanes = dstPlanes; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * defines: { "label" : "value" }, + * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, + * + * fragmentShader: , + * vertexShader: , + * + * wireframe: , + * wireframeLinewidth: , + * + * lights: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function ShaderMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShaderMaterial'; + + this.defines = {}; + this.uniforms = {}; + + this.vertexShader = 'void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}'; + this.fragmentShader = 'void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}'; + + this.linewidth = 1; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; // set to use scene fog + this.lights = false; // set to use scene lights + this.clipping = false; // set to use user-defined clipping planes + + this.skinning = false; // set to use skinning attribute streams + this.morphTargets = false; // set to use morph targets + this.morphNormals = false; // set to use morph normals + + this.extensions = { + derivatives: false, // set to use derivatives + fragDepth: false, // set to use fragment depth values + drawBuffers: false, // set to use draw buffers + shaderTextureLOD: false // set to use shader texture LOD + }; + + // When rendered geometry doesn't include these attributes but the material does, + // use these default values in WebGL. This avoids errors when buffer data is missing. + this.defaultAttributeValues = { + 'color': [ 1, 1, 1 ], + 'uv': [ 0, 0 ], + 'uv2': [ 0, 0 ] + }; + + this.index0AttributeName = undefined; + + if ( parameters !== undefined ) { + + if ( parameters.attributes !== undefined ) { + + console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); + + } + + this.setValues( parameters ); + + } + +} + +ShaderMaterial.prototype = Object.create( Material.prototype ); +ShaderMaterial.prototype.constructor = ShaderMaterial; + +ShaderMaterial.prototype.isShaderMaterial = true; + +ShaderMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.fragmentShader = source.fragmentShader; + this.vertexShader = source.vertexShader; + + this.uniforms = UniformsUtils.clone( source.uniforms ); + + this.defines = source.defines; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.lights = source.lights; + this.clipping = source.clipping; + + this.skinning = source.skinning; + + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + this.extensions = source.extensions; + + return this; + +}; + +ShaderMaterial.prototype.toJSON = function ( meta ) { + + var data = Material.prototype.toJSON.call( this, meta ); + + data.uniforms = this.uniforms; + data.vertexShader = this.vertexShader; + data.fragmentShader = this.fragmentShader; + + return data; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author bhouston / https://clara.io + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * + * opacity: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * } + */ + +function MeshDepthMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDepthMaterial'; + + this.depthPacking = BasicDepthPacking; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +MeshDepthMaterial.prototype = Object.create( Material.prototype ); +MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; + +MeshDepthMaterial.prototype.isMeshDepthMaterial = true; + +MeshDepthMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.depthPacking = source.depthPacking; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * + * referencePosition: , + * nearDistance: , + * farDistance: , + * + * skinning: , + * morphTargets: , + * + * map: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: + * + * } + */ + +function MeshDistanceMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshDistanceMaterial'; + + this.referencePosition = new Vector3(); + this.nearDistance = 1; + this.farDistance = 1000; + + this.skinning = false; + this.morphTargets = false; + + this.map = null; + + this.alphaMap = null; + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +MeshDistanceMaterial.prototype = Object.create( Material.prototype ); +MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; + +MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; + +MeshDistanceMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.referencePosition.copy( source.referencePosition ); + this.nearDistance = source.nearDistance; + this.farDistance = source.farDistance; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + this.map = source.map; + + this.alphaMap = source.alphaMap; + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + return this; + +}; + +/** + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + */ + +function Box3( min, max ) { + + this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); + this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); + +} + +Object.assign( Box3.prototype, { + + isBox3: true, + + set: function ( min, max ) { + + this.min.copy( min ); + this.max.copy( max ); + + return this; + + }, + + setFromArray: function ( array ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var x = array[ i ]; + var y = array[ i + 1 ]; + var z = array[ i + 2 ]; + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }, + + setFromBufferAttribute: function ( attribute ) { + + var minX = + Infinity; + var minY = + Infinity; + var minZ = + Infinity; + + var maxX = - Infinity; + var maxY = - Infinity; + var maxZ = - Infinity; + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + var x = attribute.getX( i ); + var y = attribute.getY( i ); + var z = attribute.getZ( i ); + + if ( x < minX ) minX = x; + if ( y < minY ) minY = y; + if ( z < minZ ) minZ = z; + + if ( x > maxX ) maxX = x; + if ( y > maxY ) maxY = y; + if ( z > maxZ ) maxZ = z; + + } + + this.min.set( minX, minY, minZ ); + this.max.set( maxX, maxY, maxZ ); + + return this; + + }, + + setFromPoints: function ( points ) { + + this.makeEmpty(); + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + this.expandByPoint( points[ i ] ); + + } + + return this; + + }, + + setFromCenterAndSize: function () { + + var v1 = new Vector3(); + + return function setFromCenterAndSize( center, size ) { + + var halfSize = v1.copy( size ).multiplyScalar( 0.5 ); + + this.min.copy( center ).sub( halfSize ); + this.max.copy( center ).add( halfSize ); + + return this; + + }; + + }(), + + setFromObject: function ( object ) { + + this.makeEmpty(); + + return this.expandByObject( object ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( box ) { + + this.min.copy( box.min ); + this.max.copy( box.max ); + + return this; + + }, + + makeEmpty: function () { + + this.min.x = this.min.y = this.min.z = + Infinity; + this.max.x = this.max.y = this.max.z = - Infinity; + + return this; + + }, + + isEmpty: function () { + + // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes + + return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return this.isEmpty() ? result.set( 0, 0, 0 ) : result.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); + + }, + + getSize: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return this.isEmpty() ? result.set( 0, 0, 0 ) : result.subVectors( this.max, this.min ); + + }, + + expandByPoint: function ( point ) { + + this.min.min( point ); + this.max.max( point ); + + return this; + + }, + + expandByVector: function ( vector ) { + + this.min.sub( vector ); + this.max.add( vector ); + + return this; + + }, + + expandByScalar: function ( scalar ) { + + this.min.addScalar( - scalar ); + this.max.addScalar( scalar ); + + return this; + + }, + + expandByObject: function () { + + // Computes the world-axis-aligned bounding box of an object (including its children), + // accounting for both the object's, and children's, world transforms + + var v1 = new Vector3(); + + return function expandByObject( object ) { + + var scope = this; + + object.updateMatrixWorld( true ); + + object.traverse( function ( node ) { + + var i, l; + + var geometry = node.geometry; + + if ( geometry !== undefined ) { + + if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + + for ( i = 0, l = vertices.length; i < l; i ++ ) { + + v1.copy( vertices[ i ] ); + v1.applyMatrix4( node.matrixWorld ); + + scope.expandByPoint( v1 ); + + } + + } else if ( geometry.isBufferGeometry ) { + + var attribute = geometry.attributes.position; + + if ( attribute !== undefined ) { + + for ( i = 0, l = attribute.count; i < l; i ++ ) { + + v1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld ); + + scope.expandByPoint( v1 ); + + } + + } + + } + + } + + } ); + + return this; + + }; + + }(), + + containsPoint: function ( point ) { + + return point.x < this.min.x || point.x > this.max.x || + point.y < this.min.y || point.y > this.max.y || + point.z < this.min.z || point.z > this.max.z ? false : true; + + }, + + containsBox: function ( box ) { + + return this.min.x <= box.min.x && box.max.x <= this.max.x && + this.min.y <= box.min.y && box.max.y <= this.max.y && + this.min.z <= box.min.z && box.max.z <= this.max.z; + + }, + + getParameter: function ( point, optionalTarget ) { + + // This can potentially have a divide by zero if the box + // has a size dimension of 0. + + var result = optionalTarget || new Vector3(); + + return result.set( + ( point.x - this.min.x ) / ( this.max.x - this.min.x ), + ( point.y - this.min.y ) / ( this.max.y - this.min.y ), + ( point.z - this.min.z ) / ( this.max.z - this.min.z ) + ); + + }, + + intersectsBox: function ( box ) { + + // using 6 splitting planes to rule out intersections. + return box.max.x < this.min.x || box.min.x > this.max.x || + box.max.y < this.min.y || box.min.y > this.max.y || + box.max.z < this.min.z || box.min.z > this.max.z ? false : true; + + }, + + intersectsSphere: ( function () { + + var closestPoint = new Vector3(); + + return function intersectsSphere( sphere ) { + + // Find the point on the AABB closest to the sphere center. + this.clampPoint( sphere.center, closestPoint ); + + // If that point is inside the sphere, the AABB and sphere intersect. + return closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); + + }; + + } )(), + + intersectsPlane: function ( plane ) { + + // We compute the minimum and maximum dot product values. If those values + // are on the same side (back or front) of the plane, then there is no intersection. + + var min, max; + + if ( plane.normal.x > 0 ) { + + min = plane.normal.x * this.min.x; + max = plane.normal.x * this.max.x; + + } else { + + min = plane.normal.x * this.max.x; + max = plane.normal.x * this.min.x; + + } + + if ( plane.normal.y > 0 ) { + + min += plane.normal.y * this.min.y; + max += plane.normal.y * this.max.y; + + } else { + + min += plane.normal.y * this.max.y; + max += plane.normal.y * this.min.y; + + } + + if ( plane.normal.z > 0 ) { + + min += plane.normal.z * this.min.z; + max += plane.normal.z * this.max.z; + + } else { + + min += plane.normal.z * this.max.z; + max += plane.normal.z * this.min.z; + + } + + return ( min <= plane.constant && max >= plane.constant ); + + }, + + clampPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.copy( point ).clamp( this.min, this.max ); + + }, + + distanceToPoint: function () { + + var v1 = new Vector3(); + + return function distanceToPoint( point ) { + + var clampedPoint = v1.copy( point ).clamp( this.min, this.max ); + return clampedPoint.sub( point ).length(); + + }; + + }(), + + getBoundingSphere: function () { + + var v1 = new Vector3(); + + return function getBoundingSphere( optionalTarget ) { + + var result = optionalTarget || new Sphere(); + + this.getCenter( result.center ); + + result.radius = this.getSize( v1 ).length() * 0.5; + + return result; + + }; + + }(), + + intersect: function ( box ) { + + this.min.max( box.min ); + this.max.min( box.max ); + + // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. + if( this.isEmpty() ) this.makeEmpty(); + + return this; + + }, + + union: function ( box ) { + + this.min.min( box.min ); + this.max.max( box.max ); + + return this; + + }, + + applyMatrix4: function () { + + var points = [ + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3(), + new Vector3() + ]; + + return function applyMatrix4( matrix ) { + + // transform of empty box is an empty box. + if( this.isEmpty() ) return this; + + // NOTE: I am using a binary pattern to specify all 2^3 combinations below + points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 + points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 + points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 + points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 + points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 + points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 + points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 + points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 + + this.setFromPoints( points ); + + return this; + + }; + + }(), + + translate: function ( offset ) { + + this.min.add( offset ); + this.max.add( offset ); + + return this; + + }, + + equals: function ( box ) { + + return box.min.equals( this.min ) && box.max.equals( this.max ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author mrdoob / http://mrdoob.com/ + */ + +function Sphere( center, radius ) { + + this.center = ( center !== undefined ) ? center : new Vector3(); + this.radius = ( radius !== undefined ) ? radius : 0; + +} + +Object.assign( Sphere.prototype, { + + set: function ( center, radius ) { + + this.center.copy( center ); + this.radius = radius; + + return this; + + }, + + setFromPoints: function () { + + var box = new Box3(); + + return function setFromPoints( points, optionalCenter ) { + + var center = this.center; + + if ( optionalCenter !== undefined ) { + + center.copy( optionalCenter ); + + } else { + + box.setFromPoints( points ).getCenter( center ); + + } + + var maxRadiusSq = 0; + + for ( var i = 0, il = points.length; i < il; i ++ ) { + + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); + + } + + this.radius = Math.sqrt( maxRadiusSq ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( sphere ) { + + this.center.copy( sphere.center ); + this.radius = sphere.radius; + + return this; + + }, + + empty: function () { + + return ( this.radius <= 0 ); + + }, + + containsPoint: function ( point ) { + + return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); + + }, + + distanceToPoint: function ( point ) { + + return ( point.distanceTo( this.center ) - this.radius ); + + }, + + intersectsSphere: function ( sphere ) { + + var radiusSum = this.radius + sphere.radius; + + return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); + + }, + + intersectsBox: function ( box ) { + + return box.intersectsSphere( this ); + + }, + + intersectsPlane: function ( plane ) { + + return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; + + }, + + clampPoint: function ( point, optionalTarget ) { + + var deltaLengthSq = this.center.distanceToSquared( point ); + + var result = optionalTarget || new Vector3(); + + result.copy( point ); + + if ( deltaLengthSq > ( this.radius * this.radius ) ) { + + result.sub( this.center ).normalize(); + result.multiplyScalar( this.radius ).add( this.center ); + + } + + return result; + + }, + + getBoundingBox: function ( optionalTarget ) { + + var box = optionalTarget || new Box3(); + + box.set( this.center, this.center ); + box.expandByScalar( this.radius ); + + return box; + + }, + + applyMatrix4: function ( matrix ) { + + this.center.applyMatrix4( matrix ); + this.radius = this.radius * matrix.getMaxScaleOnAxis(); + + return this; + + }, + + translate: function ( offset ) { + + this.center.add( offset ); + + return this; + + }, + + equals: function ( sphere ) { + + return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + * @author tschw + */ + +function Matrix3() { + + this.elements = [ + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ]; + + if ( arguments.length > 0 ) { + + console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); + + } + +} + +Object.assign( Matrix3.prototype, { + + isMatrix3: true, + + set: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { + + var te = this.elements; + + te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; + te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; + te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; + + return this; + + }, + + identity: function () { + + this.set( + + 1, 0, 0, + 0, 1, 0, + 0, 0, 1 + + ); + + return this; + + }, + + clone: function () { + + return new this.constructor().fromArray( this.elements ); + + }, + + copy: function ( m ) { + + var te = this.elements; + var me = m.elements; + + te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; + te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; + te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; + + return this; + + }, + + setFromMatrix4: function ( m ) { + + var me = m.elements; + + this.set( + + me[ 0 ], me[ 4 ], me[ 8 ], + me[ 1 ], me[ 5 ], me[ 9 ], + me[ 2 ], me[ 6 ], me[ 10 ] + + ); + + return this; + + }, + + applyToBufferAttribute: function () { + + var v1 = new Vector3(); + + return function applyToBufferAttribute( attribute ) { + + for ( var i = 0, l = attribute.count; i < l; i ++ ) { + + v1.x = attribute.getX( i ); + v1.y = attribute.getY( i ); + v1.z = attribute.getZ( i ); + + v1.applyMatrix3( this ); + + attribute.setXYZ( i, v1.x, v1.y, v1.z ); + + } + + return attribute; + + }; + + }(), + + multiply: function ( m ) { + + return this.multiplyMatrices( this, m ); + + }, + + premultiply: function ( m ) { + + return this.multiplyMatrices( m, this ); + + }, + + multiplyMatrices: function ( a, b ) { + + var ae = a.elements; + var be = b.elements; + var te = this.elements; + + var a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ]; + var a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ]; + var a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ]; + + var b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ]; + var b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ]; + var b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ]; + + te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31; + te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32; + te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33; + + te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31; + te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32; + te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33; + + te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31; + te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32; + te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33; + + return this; + + }, + + multiplyScalar: function ( s ) { + + var te = this.elements; + + te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; + te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; + te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; + + return this; + + }, + + determinant: function () { + + var te = this.elements; + + var a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], + d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], + g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; + + return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; + + }, + + getInverse: function ( matrix, throwOnDegenerate ) { + + if ( matrix && matrix.isMatrix4 ) { + + console.error( "THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument." ); + + } + + var me = matrix.elements, + te = this.elements, + + n11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], + n12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ], + n13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ], + + t11 = n33 * n22 - n32 * n23, + t12 = n32 * n13 - n33 * n12, + t13 = n23 * n12 - n22 * n13, + + det = n11 * t11 + n21 * t12 + n31 * t13; + + if ( det === 0 ) { + + var msg = "THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0"; + + if ( throwOnDegenerate === true ) { + + throw new Error( msg ); + + } else { + + console.warn( msg ); + + } + + return this.identity(); + + } + + var detInv = 1 / det; + + te[ 0 ] = t11 * detInv; + te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; + te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; + + te[ 3 ] = t12 * detInv; + te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; + te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; + + te[ 6 ] = t13 * detInv; + te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; + te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; + + return this; + + }, + + transpose: function () { + + var tmp, m = this.elements; + + tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; + tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; + tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; + + return this; + + }, + + getNormalMatrix: function ( matrix4 ) { + + return this.setFromMatrix4( matrix4 ).getInverse( this ).transpose(); + + }, + + transposeIntoArray: function ( r ) { + + var m = this.elements; + + r[ 0 ] = m[ 0 ]; + r[ 1 ] = m[ 3 ]; + r[ 2 ] = m[ 6 ]; + r[ 3 ] = m[ 1 ]; + r[ 4 ] = m[ 4 ]; + r[ 5 ] = m[ 7 ]; + r[ 6 ] = m[ 2 ]; + r[ 7 ] = m[ 5 ]; + r[ 8 ] = m[ 8 ]; + + return this; + + }, + + equals: function ( matrix ) { + + var te = this.elements; + var me = matrix.elements; + + for ( var i = 0; i < 9; i ++ ) { + + if ( te[ i ] !== me[ i ] ) return false; + + } + + return true; + + }, + + fromArray: function ( array, offset ) { + + if ( offset === undefined ) offset = 0; + + for ( var i = 0; i < 9; i ++ ) { + + this.elements[ i ] = array[ i + offset ]; + + } + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + var te = this.elements; + + array[ offset ] = te[ 0 ]; + array[ offset + 1 ] = te[ 1 ]; + array[ offset + 2 ] = te[ 2 ]; + + array[ offset + 3 ] = te[ 3 ]; + array[ offset + 4 ] = te[ 4 ]; + array[ offset + 5 ] = te[ 5 ]; + + array[ offset + 6 ] = te[ 6 ]; + array[ offset + 7 ] = te[ 7 ]; + array[ offset + 8 ] = te[ 8 ]; + + return array; + + } + +} ); + +/** + * @author bhouston / http://clara.io + */ + +function Plane( normal, constant ) { + + // normal is assumed to be normalized + + this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); + this.constant = ( constant !== undefined ) ? constant : 0; + +} + +Object.assign( Plane.prototype, { + + set: function ( normal, constant ) { + + this.normal.copy( normal ); + this.constant = constant; + + return this; + + }, + + setComponents: function ( x, y, z, w ) { + + this.normal.set( x, y, z ); + this.constant = w; + + return this; + + }, + + setFromNormalAndCoplanarPoint: function ( normal, point ) { + + this.normal.copy( normal ); + this.constant = - point.dot( this.normal ); + + return this; + + }, + + setFromCoplanarPoints: function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function setFromCoplanarPoints( a, b, c ) { + + var normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize(); + + // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? + + this.setFromNormalAndCoplanarPoint( normal, a ); + + return this; + + }; + + }(), + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( plane ) { + + this.normal.copy( plane.normal ); + this.constant = plane.constant; + + return this; + + }, + + normalize: function () { + + // Note: will lead to a divide by zero if the plane is invalid. + + var inverseNormalLength = 1.0 / this.normal.length(); + this.normal.multiplyScalar( inverseNormalLength ); + this.constant *= inverseNormalLength; + + return this; + + }, + + negate: function () { + + this.constant *= - 1; + this.normal.negate(); + + return this; + + }, + + distanceToPoint: function ( point ) { + + return this.normal.dot( point ) + this.constant; + + }, + + distanceToSphere: function ( sphere ) { + + return this.distanceToPoint( sphere.center ) - sphere.radius; + + }, + + projectPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); + + }, + + intersectLine: function () { + + var v1 = new Vector3(); + + return function intersectLine( line, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + var direction = line.delta( v1 ); + + var denominator = this.normal.dot( direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( this.distanceToPoint( line.start ) === 0 ) { + + return result.copy( line.start ); + + } + + // Unsure if this is the correct method to handle this case. + return undefined; + + } + + var t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; + + if ( t < 0 || t > 1 ) { + + return undefined; + + } + + return result.copy( direction ).multiplyScalar( t ).add( line.start ); + + }; + + }(), + + intersectsLine: function ( line ) { + + // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. + + var startSign = this.distanceToPoint( line.start ); + var endSign = this.distanceToPoint( line.end ); + + return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); + + }, + + intersectsBox: function ( box ) { + + return box.intersectsPlane( this ); + + }, + + intersectsSphere: function ( sphere ) { + + return sphere.intersectsPlane( this ); + + }, + + coplanarPoint: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.normal ).multiplyScalar( - this.constant ); + + }, + + applyMatrix4: function () { + + var v1 = new Vector3(); + var m1 = new Matrix3(); + + return function applyMatrix4( matrix, optionalNormalMatrix ) { + + var normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix ); + + var referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix ); + + var normal = this.normal.applyMatrix3( normalMatrix ).normalize(); + + this.constant = - referencePoint.dot( normal ); + + return this; + + }; + + }(), + + translate: function ( offset ) { + + this.constant -= offset.dot( this.normal ); + + return this; + + }, + + equals: function ( plane ) { + + return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author bhouston / http://clara.io + */ + +function Frustum( p0, p1, p2, p3, p4, p5 ) { + + this.planes = [ + + ( p0 !== undefined ) ? p0 : new Plane(), + ( p1 !== undefined ) ? p1 : new Plane(), + ( p2 !== undefined ) ? p2 : new Plane(), + ( p3 !== undefined ) ? p3 : new Plane(), + ( p4 !== undefined ) ? p4 : new Plane(), + ( p5 !== undefined ) ? p5 : new Plane() + + ]; + +} + +Object.assign( Frustum.prototype, { + + set: function ( p0, p1, p2, p3, p4, p5 ) { + + var planes = this.planes; + + planes[ 0 ].copy( p0 ); + planes[ 1 ].copy( p1 ); + planes[ 2 ].copy( p2 ); + planes[ 3 ].copy( p3 ); + planes[ 4 ].copy( p4 ); + planes[ 5 ].copy( p5 ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( frustum ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + planes[ i ].copy( frustum.planes[ i ] ); + + } + + return this; + + }, + + setFromMatrix: function ( m ) { + + var planes = this.planes; + var me = m.elements; + var me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; + var me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; + var me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; + var me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; + + planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); + planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); + planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); + planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); + planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); + planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); + + return this; + + }, + + intersectsObject: function () { + + var sphere = new Sphere(); + + return function intersectsObject( object ) { + + var geometry = object.geometry; + + if ( geometry.boundingSphere === null ) + geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ) + .applyMatrix4( object.matrixWorld ); + + return this.intersectsSphere( sphere ); + + }; + + }(), + + intersectsSprite: function () { + + var sphere = new Sphere(); + + return function intersectsSprite( sprite ) { + + sphere.center.set( 0, 0, 0 ); + sphere.radius = 0.7071067811865476; + sphere.applyMatrix4( sprite.matrixWorld ); + + return this.intersectsSphere( sphere ); + + }; + + }(), + + intersectsSphere: function ( sphere ) { + + var planes = this.planes; + var center = sphere.center; + var negRadius = - sphere.radius; + + for ( var i = 0; i < 6; i ++ ) { + + var distance = planes[ i ].distanceToPoint( center ); + + if ( distance < negRadius ) { + + return false; + + } + + } + + return true; + + }, + + intersectsBox: function () { + + var p1 = new Vector3(), + p2 = new Vector3(); + + return function intersectsBox( box ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + var plane = planes[ i ]; + + p1.x = plane.normal.x > 0 ? box.min.x : box.max.x; + p2.x = plane.normal.x > 0 ? box.max.x : box.min.x; + p1.y = plane.normal.y > 0 ? box.min.y : box.max.y; + p2.y = plane.normal.y > 0 ? box.max.y : box.min.y; + p1.z = plane.normal.z > 0 ? box.min.z : box.max.z; + p2.z = plane.normal.z > 0 ? box.max.z : box.min.z; + + var d1 = plane.distanceToPoint( p1 ); + var d2 = plane.distanceToPoint( p2 ); + + // if both outside plane, no intersection + + if ( d1 < 0 && d2 < 0 ) { + + return false; + + } + + } + + return true; + + }; + + }(), + + containsPoint: function ( point ) { + + var planes = this.planes; + + for ( var i = 0; i < 6; i ++ ) { + + if ( planes[ i ].distanceToPoint( point ) < 0 ) { + + return false; + + } + + } + + return true; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { + + var _frustum = new Frustum(), + _projScreenMatrix = new Matrix4(), + + _shadowMapSize = new Vector2(), + _maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ), + + _lookTarget = new Vector3(), + _lightPositionWorld = new Vector3(), + + _MorphingFlag = 1, + _SkinningFlag = 2, + + _NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1, + + _depthMaterials = new Array( _NumberOfMaterialVariants ), + _distanceMaterials = new Array( _NumberOfMaterialVariants ), + + _materialCache = {}; + + var cubeDirections = [ + new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), + new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) + ]; + + var cubeUps = [ + new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), + new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) + ]; + + var cube2DViewPorts = [ + new Vector4(), new Vector4(), new Vector4(), + new Vector4(), new Vector4(), new Vector4() + ]; + + // init + + for ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) { + + var useMorphing = ( i & _MorphingFlag ) !== 0; + var useSkinning = ( i & _SkinningFlag ) !== 0; + + var depthMaterial = new MeshDepthMaterial( { + + depthPacking: RGBADepthPacking, + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _depthMaterials[ i ] = depthMaterial; + + // + + var distanceMaterial = new MeshDistanceMaterial( { + + morphTargets: useMorphing, + skinning: useSkinning + + } ); + + _distanceMaterials[ i ] = distanceMaterial; + + } + + // + + var scope = this; + + this.enabled = false; + + this.autoUpdate = true; + this.needsUpdate = false; + + this.type = PCFShadowMap; + + this.renderReverseSided = true; + this.renderSingleSided = true; + + this.render = function ( lights, scene, camera ) { + + if ( scope.enabled === false ) return; + if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; + + if ( lights.length === 0 ) return; + + // TODO Clean up (needed in case of contextlost) + var _gl = _renderer.context; + var _state = _renderer.state; + + // Set GL state for depth map. + _state.disable( _gl.BLEND ); + _state.buffers.color.setClear( 1, 1, 1, 1 ); + _state.buffers.depth.setTest( true ); + _state.setScissorTest( false ); + + // render depth map + + var faceCount; + + for ( var i = 0, il = lights.length; i < il; i ++ ) { + + var light = lights[ i ]; + var shadow = light.shadow; + var isPointLight = light && light.isPointLight; + + if ( shadow === undefined ) { + + console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); + continue; + + } + + var shadowCamera = shadow.camera; + + _shadowMapSize.copy( shadow.mapSize ); + _shadowMapSize.min( _maxShadowMapSize ); + + if ( isPointLight ) { + + var vpWidth = _shadowMapSize.x; + var vpHeight = _shadowMapSize.y; + + // These viewports map a cube-map onto a 2D texture with the + // following orientation: + // + // xzXZ + // y Y + // + // X - Positive x direction + // x - Negative x direction + // Y - Positive y direction + // y - Negative y direction + // Z - Positive z direction + // z - Negative z direction + + // positive X + cube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight ); + // negative X + cube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight ); + // positive Z + cube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight ); + // negative Z + cube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight ); + // positive Y + cube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight ); + // negative Y + cube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight ); + + _shadowMapSize.x *= 4.0; + _shadowMapSize.y *= 2.0; + + } + + if ( shadow.map === null ) { + + var pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; + + shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); + shadow.map.texture.name = light.name + ".shadowMap"; + + shadowCamera.updateProjectionMatrix(); + + } + + if ( shadow.isSpotLightShadow ) { + + shadow.update( light ); + + } + + var shadowMap = shadow.map; + var shadowMatrix = shadow.matrix; + + _lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); + shadowCamera.position.copy( _lightPositionWorld ); + + if ( isPointLight ) { + + faceCount = 6; + + // for point lights we set the shadow matrix to be a translation-only matrix + // equal to inverse of the light's position + + shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z ); + + } else { + + faceCount = 1; + + _lookTarget.setFromMatrixPosition( light.target.matrixWorld ); + shadowCamera.lookAt( _lookTarget ); + shadowCamera.updateMatrixWorld(); + + // compute shadow matrix + + shadowMatrix.set( + 0.5, 0.0, 0.0, 0.5, + 0.0, 0.5, 0.0, 0.5, + 0.0, 0.0, 0.5, 0.5, + 0.0, 0.0, 0.0, 1.0 + ); + + shadowMatrix.multiply( shadowCamera.projectionMatrix ); + shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); + + } + + _renderer.setRenderTarget( shadowMap ); + _renderer.clear(); + + // render shadow map for each cube face (if omni-directional) or + // run a single pass if not + + for ( var face = 0; face < faceCount; face ++ ) { + + if ( isPointLight ) { + + _lookTarget.copy( shadowCamera.position ); + _lookTarget.add( cubeDirections[ face ] ); + shadowCamera.up.copy( cubeUps[ face ] ); + shadowCamera.lookAt( _lookTarget ); + shadowCamera.updateMatrixWorld(); + + var vpDimensions = cube2DViewPorts[ face ]; + _state.viewport( vpDimensions ); + + } + + // update camera matrices and frustum + + _projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); + _frustum.setFromMatrix( _projScreenMatrix ); + + // set object matrices & frustum culling + + renderObject( scene, camera, shadowCamera, isPointLight ); + + } + + } + + scope.needsUpdate = false; + + }; + + function getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) { + + var geometry = object.geometry; + + var result = null; + + var materialVariants = _depthMaterials; + var customMaterial = object.customDepthMaterial; + + if ( isPointLight ) { + + materialVariants = _distanceMaterials; + customMaterial = object.customDistanceMaterial; + + } + + if ( ! customMaterial ) { + + var useMorphing = false; + + if ( material.morphTargets ) { + + if ( geometry && geometry.isBufferGeometry ) { + + useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; + + } else if ( geometry && geometry.isGeometry ) { + + useMorphing = geometry.morphTargets && geometry.morphTargets.length > 0; + + } + + } + + if ( object.isSkinnedMesh && material.skinning === false ) { + + console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); + + } + + var useSkinning = object.isSkinnedMesh && material.skinning; + + var variantIndex = 0; + + if ( useMorphing ) variantIndex |= _MorphingFlag; + if ( useSkinning ) variantIndex |= _SkinningFlag; + + result = materialVariants[ variantIndex ]; + + } else { + + result = customMaterial; + + } + + if ( _renderer.localClippingEnabled && + material.clipShadows === true && + material.clippingPlanes.length !== 0 ) { + + // in this case we need a unique material instance reflecting the + // appropriate state + + var keyA = result.uuid, keyB = material.uuid; + + var materialsForVariant = _materialCache[ keyA ]; + + if ( materialsForVariant === undefined ) { + + materialsForVariant = {}; + _materialCache[ keyA ] = materialsForVariant; + + } + + var cachedMaterial = materialsForVariant[ keyB ]; + + if ( cachedMaterial === undefined ) { + + cachedMaterial = result.clone(); + materialsForVariant[ keyB ] = cachedMaterial; + + } + + result = cachedMaterial; + + } + + result.visible = material.visible; + result.wireframe = material.wireframe; + + var side = material.side; + + if ( scope.renderSingleSided && side == DoubleSide ) { + + side = FrontSide; + + } + + if ( scope.renderReverseSided ) { + + if ( side === FrontSide ) side = BackSide; + else if ( side === BackSide ) side = FrontSide; + + } + + result.side = side; + + result.clipShadows = material.clipShadows; + result.clippingPlanes = material.clippingPlanes; + result.clipIntersection = material.clipIntersection; + + result.wireframeLinewidth = material.wireframeLinewidth; + result.linewidth = material.linewidth; + + if ( isPointLight && result.isMeshDistanceMaterial ) { + + result.referencePosition.copy( lightPositionWorld ); + result.nearDistance = shadowCameraNear; + result.farDistance = shadowCameraFar; + + } + + return result; + + } + + function renderObject( object, camera, shadowCamera, isPointLight ) { + + if ( object.visible === false ) return; + + var visible = object.layers.test( camera.layers ); + + if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { + + if ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { + + object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); + + var geometry = _objects.update( object ); + var material = object.material; + + if ( Array.isArray( material ) ) { + + var groups = geometry.groups; + + for ( var k = 0, kl = groups.length; k < kl; k ++ ) { + + var group = groups[ k ]; + var groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + var depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far ); + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); + + } + + } + + } else if ( material.visible ) { + + var depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far ); + _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); + + } + + } + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + renderObject( children[ i ], camera, shadowCamera, isPointLight ); + + } + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLAttributes( gl ) { + + var buffers = {}; + + function createBuffer( attribute, bufferType ) { + + var array = attribute.array; + var usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW; + + var buffer = gl.createBuffer(); + + gl.bindBuffer( bufferType, buffer ); + gl.bufferData( bufferType, array, usage ); + + attribute.onUploadCallback(); + + var type = gl.FLOAT; + + if ( array instanceof Float32Array ) { + + type = gl.FLOAT; + + } else if ( array instanceof Float64Array ) { + + console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); + + } else if ( array instanceof Uint16Array ) { + + type = gl.UNSIGNED_SHORT; + + } else if ( array instanceof Int16Array ) { + + type = gl.SHORT; + + } else if ( array instanceof Uint32Array ) { + + type = gl.UNSIGNED_INT; + + } else if ( array instanceof Int32Array ) { + + type = gl.INT; + + } else if ( array instanceof Int8Array ) { + + type = gl.BYTE; + + } else if ( array instanceof Uint8Array ) { + + type = gl.UNSIGNED_BYTE; + + } + + return { + buffer: buffer, + type: type, + bytesPerElement: array.BYTES_PER_ELEMENT, + version: attribute.version + }; + + } + + function updateBuffer( buffer, attribute, bufferType ) { + + var array = attribute.array; + var updateRange = attribute.updateRange; + + gl.bindBuffer( bufferType, buffer ); + + if ( attribute.dynamic === false ) { + + gl.bufferData( bufferType, array, gl.STATIC_DRAW ); + + } else if ( updateRange.count === - 1 ) { + + // Not using update ranges + + gl.bufferSubData( bufferType, 0, array ); + + } else if ( updateRange.count === 0 ) { + + console.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' ); + + } else { + + gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, + array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); + + updateRange.count = -1; // reset range + + } + + } + + // + + function get( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + return buffers[ attribute.uuid ]; + + } + + function remove( attribute ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + var data = buffers[ attribute.uuid ]; + + if ( data ) { + + gl.deleteBuffer( data.buffer ); + + delete buffers[ attribute.uuid ]; + + } + + } + + function update( attribute, bufferType ) { + + if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; + + var data = buffers[ attribute.uuid ]; + + if ( data === undefined ) { + + buffers[ attribute.uuid ] = createBuffer( attribute, bufferType ); + + } else if ( data.version < attribute.version ) { + + updateBuffer( data.buffer, attribute, bufferType ); + + data.version = attribute.version; + + } + + } + + return { + + get: get, + remove: remove, + update: update + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + * @author bhouston / http://clara.io + */ + +function Euler( x, y, z, order ) { + + this._x = x || 0; + this._y = y || 0; + this._z = z || 0; + this._order = order || Euler.DefaultOrder; + +} + +Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; + +Euler.DefaultOrder = 'XYZ'; + +Object.defineProperties( Euler.prototype, { + + x: { + + get: function () { + + return this._x; + + }, + + set: function ( value ) { + + this._x = value; + this.onChangeCallback(); + + } + + }, + + y: { + + get: function () { + + return this._y; + + }, + + set: function ( value ) { + + this._y = value; + this.onChangeCallback(); + + } + + }, + + z: { + + get: function () { + + return this._z; + + }, + + set: function ( value ) { + + this._z = value; + this.onChangeCallback(); + + } + + }, + + order: { + + get: function () { + + return this._order; + + }, + + set: function ( value ) { + + this._order = value; + this.onChangeCallback(); + + } + + } + +} ); + +Object.assign( Euler.prototype, { + + isEuler: true, + + set: function ( x, y, z, order ) { + + this._x = x; + this._y = y; + this._z = z; + this._order = order || this._order; + + this.onChangeCallback(); + + return this; + + }, + + clone: function () { + + return new this.constructor( this._x, this._y, this._z, this._order ); + + }, + + copy: function ( euler ) { + + this._x = euler._x; + this._y = euler._y; + this._z = euler._z; + this._order = euler._order; + + this.onChangeCallback(); + + return this; + + }, + + setFromRotationMatrix: function ( m, order, update ) { + + var clamp = _Math.clamp; + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + var te = m.elements; + var m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; + var m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; + var m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; + + order = order || this._order; + + if ( order === 'XYZ' ) { + + this._y = Math.asin( clamp( m13, - 1, 1 ) ); + + if ( Math.abs( m13 ) < 0.99999 ) { + + this._x = Math.atan2( - m23, m33 ); + this._z = Math.atan2( - m12, m11 ); + + } else { + + this._x = Math.atan2( m32, m22 ); + this._z = 0; + + } + + } else if ( order === 'YXZ' ) { + + this._x = Math.asin( - clamp( m23, - 1, 1 ) ); + + if ( Math.abs( m23 ) < 0.99999 ) { + + this._y = Math.atan2( m13, m33 ); + this._z = Math.atan2( m21, m22 ); + + } else { + + this._y = Math.atan2( - m31, m11 ); + this._z = 0; + + } + + } else if ( order === 'ZXY' ) { + + this._x = Math.asin( clamp( m32, - 1, 1 ) ); + + if ( Math.abs( m32 ) < 0.99999 ) { + + this._y = Math.atan2( - m31, m33 ); + this._z = Math.atan2( - m12, m22 ); + + } else { + + this._y = 0; + this._z = Math.atan2( m21, m11 ); + + } + + } else if ( order === 'ZYX' ) { + + this._y = Math.asin( - clamp( m31, - 1, 1 ) ); + + if ( Math.abs( m31 ) < 0.99999 ) { + + this._x = Math.atan2( m32, m33 ); + this._z = Math.atan2( m21, m11 ); + + } else { + + this._x = 0; + this._z = Math.atan2( - m12, m22 ); + + } + + } else if ( order === 'YZX' ) { + + this._z = Math.asin( clamp( m21, - 1, 1 ) ); + + if ( Math.abs( m21 ) < 0.99999 ) { + + this._x = Math.atan2( - m23, m22 ); + this._y = Math.atan2( - m31, m11 ); + + } else { + + this._x = 0; + this._y = Math.atan2( m13, m33 ); + + } + + } else if ( order === 'XZY' ) { + + this._z = Math.asin( - clamp( m12, - 1, 1 ) ); + + if ( Math.abs( m12 ) < 0.99999 ) { + + this._x = Math.atan2( m32, m22 ); + this._y = Math.atan2( m13, m11 ); + + } else { + + this._x = Math.atan2( - m23, m33 ); + this._y = 0; + + } + + } else { + + console.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order ); + + } + + this._order = order; + + if ( update !== false ) this.onChangeCallback(); + + return this; + + }, + + setFromQuaternion: function () { + + var matrix = new Matrix4(); + + return function setFromQuaternion( q, order, update ) { + + matrix.makeRotationFromQuaternion( q ); + + return this.setFromRotationMatrix( matrix, order, update ); + + }; + + }(), + + setFromVector3: function ( v, order ) { + + return this.set( v.x, v.y, v.z, order || this._order ); + + }, + + reorder: function () { + + // WARNING: this discards revolution information -bhouston + + var q = new Quaternion(); + + return function reorder( newOrder ) { + + q.setFromEuler( this ); + + return this.setFromQuaternion( q, newOrder ); + + }; + + }(), + + equals: function ( euler ) { + + return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); + + }, + + fromArray: function ( array ) { + + this._x = array[ 0 ]; + this._y = array[ 1 ]; + this._z = array[ 2 ]; + if ( array[ 3 ] !== undefined ) this._order = array[ 3 ]; + + this.onChangeCallback(); + + return this; + + }, + + toArray: function ( array, offset ) { + + if ( array === undefined ) array = []; + if ( offset === undefined ) offset = 0; + + array[ offset ] = this._x; + array[ offset + 1 ] = this._y; + array[ offset + 2 ] = this._z; + array[ offset + 3 ] = this._order; + + return array; + + }, + + toVector3: function ( optionalResult ) { + + if ( optionalResult ) { + + return optionalResult.set( this._x, this._y, this._z ); + + } else { + + return new Vector3( this._x, this._y, this._z ); + + } + + }, + + onChange: function ( callback ) { + + this.onChangeCallback = callback; + + return this; + + }, + + onChangeCallback: function () {} + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Layers() { + + this.mask = 1 | 0; + +} + +Object.assign( Layers.prototype, { + + set: function ( channel ) { + + this.mask = 1 << channel | 0; + + }, + + enable: function ( channel ) { + + this.mask |= 1 << channel | 0; + + }, + + toggle: function ( channel ) { + + this.mask ^= 1 << channel | 0; + + }, + + disable: function ( channel ) { + + this.mask &= ~ ( 1 << channel | 0 ); + + }, + + test: function ( layers ) { + + return ( this.mask & layers.mask ) !== 0; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author elephantatwork / www.elephantatwork.ch + */ + +var object3DId = 0; + +function Object3D() { + + Object.defineProperty( this, 'id', { value: object3DId ++ } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Object3D'; + + this.parent = null; + this.children = []; + + this.up = Object3D.DefaultUp.clone(); + + var position = new Vector3(); + var rotation = new Euler(); + var quaternion = new Quaternion(); + var scale = new Vector3( 1, 1, 1 ); + + function onRotationChange() { + + quaternion.setFromEuler( rotation, false ); + + } + + function onQuaternionChange() { + + rotation.setFromQuaternion( quaternion, undefined, false ); + + } + + rotation.onChange( onRotationChange ); + quaternion.onChange( onQuaternionChange ); + + Object.defineProperties( this, { + position: { + enumerable: true, + value: position + }, + rotation: { + enumerable: true, + value: rotation + }, + quaternion: { + enumerable: true, + value: quaternion + }, + scale: { + enumerable: true, + value: scale + }, + modelViewMatrix: { + value: new Matrix4() + }, + normalMatrix: { + value: new Matrix3() + } + } ); + + this.matrix = new Matrix4(); + this.matrixWorld = new Matrix4(); + + this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate; + this.matrixWorldNeedsUpdate = false; + + this.layers = new Layers(); + this.visible = true; + + this.castShadow = false; + this.receiveShadow = false; + + this.frustumCulled = true; + this.renderOrder = 0; + + this.userData = {}; +} + +Object3D.DefaultUp = new Vector3( 0, 1, 0 ); +Object3D.DefaultMatrixAutoUpdate = true; + +Object.assign( Object3D.prototype, EventDispatcher.prototype, { + + isObject3D: true, + + onBeforeRender: function () {}, + onAfterRender: function () {}, + + applyMatrix: function ( matrix ) { + + this.matrix.multiplyMatrices( matrix, this.matrix ); + + this.matrix.decompose( this.position, this.quaternion, this.scale ); + + }, + + applyQuaternion: function ( q ) { + + this.quaternion.premultiply( q ); + + return this; + + }, + + setRotationFromAxisAngle: function ( axis, angle ) { + + // assumes axis is normalized + + this.quaternion.setFromAxisAngle( axis, angle ); + + }, + + setRotationFromEuler: function ( euler ) { + + this.quaternion.setFromEuler( euler, true ); + + }, + + setRotationFromMatrix: function ( m ) { + + // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) + + this.quaternion.setFromRotationMatrix( m ); + + }, + + setRotationFromQuaternion: function ( q ) { + + // assumes q is normalized + + this.quaternion.copy( q ); + + }, + + rotateOnAxis: function () { + + // rotate object on axis in object space + // axis is assumed to be normalized + + var q1 = new Quaternion(); + + return function rotateOnAxis( axis, angle ) { + + q1.setFromAxisAngle( axis, angle ); + + this.quaternion.multiply( q1 ); + + return this; + + }; + + }(), + + rotateX: function () { + + var v1 = new Vector3( 1, 0, 0 ); + + return function rotateX( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + rotateY: function () { + + var v1 = new Vector3( 0, 1, 0 ); + + return function rotateY( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + rotateZ: function () { + + var v1 = new Vector3( 0, 0, 1 ); + + return function rotateZ( angle ) { + + return this.rotateOnAxis( v1, angle ); + + }; + + }(), + + translateOnAxis: function () { + + // translate object by distance along axis in object space + // axis is assumed to be normalized + + var v1 = new Vector3(); + + return function translateOnAxis( axis, distance ) { + + v1.copy( axis ).applyQuaternion( this.quaternion ); + + this.position.add( v1.multiplyScalar( distance ) ); + + return this; + + }; + + }(), + + translateX: function () { + + var v1 = new Vector3( 1, 0, 0 ); + + return function translateX( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + translateY: function () { + + var v1 = new Vector3( 0, 1, 0 ); + + return function translateY( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + translateZ: function () { + + var v1 = new Vector3( 0, 0, 1 ); + + return function translateZ( distance ) { + + return this.translateOnAxis( v1, distance ); + + }; + + }(), + + localToWorld: function ( vector ) { + + return vector.applyMatrix4( this.matrixWorld ); + + }, + + worldToLocal: function () { + + var m1 = new Matrix4(); + + return function worldToLocal( vector ) { + + return vector.applyMatrix4( m1.getInverse( this.matrixWorld ) ); + + }; + + }(), + + lookAt: function () { + + // This method does not support objects with rotated and/or translated parent(s) + + var m1 = new Matrix4(); + + return function lookAt( vector ) { + + if ( this.isCamera ) { + + m1.lookAt( this.position, vector, this.up ); + + } else { + + m1.lookAt( vector, this.position, this.up ); + + } + + this.quaternion.setFromRotationMatrix( m1 ); + + }; + + }(), + + add: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.add( arguments[ i ] ); + + } + + return this; + + } + + if ( object === this ) { + + console.error( "THREE.Object3D.add: object can't be added as a child of itself.", object ); + return this; + + } + + if ( ( object && object.isObject3D ) ) { + + if ( object.parent !== null ) { + + object.parent.remove( object ); + + } + + object.parent = this; + object.dispatchEvent( { type: 'added' } ); + + this.children.push( object ); + + } else { + + console.error( "THREE.Object3D.add: object not an instance of THREE.Object3D.", object ); + + } + + return this; + + }, + + remove: function ( object ) { + + if ( arguments.length > 1 ) { + + for ( var i = 0; i < arguments.length; i ++ ) { + + this.remove( arguments[ i ] ); + + } + + return this; + + } + + var index = this.children.indexOf( object ); + + if ( index !== - 1 ) { + + object.parent = null; + + object.dispatchEvent( { type: 'removed' } ); + + this.children.splice( index, 1 ); + + } + + return this; + + }, + + getObjectById: function ( id ) { + + return this.getObjectByProperty( 'id', id ); + + }, + + getObjectByName: function ( name ) { + + return this.getObjectByProperty( 'name', name ); + + }, + + getObjectByProperty: function ( name, value ) { + + if ( this[ name ] === value ) return this; + + for ( var i = 0, l = this.children.length; i < l; i ++ ) { + + var child = this.children[ i ]; + var object = child.getObjectByProperty( name, value ); + + if ( object !== undefined ) { + + return object; + + } + + } + + return undefined; + + }, + + getWorldPosition: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.updateMatrixWorld( true ); + + return result.setFromMatrixPosition( this.matrixWorld ); + + }, + + getWorldQuaternion: function () { + + var position = new Vector3(); + var scale = new Vector3(); + + return function getWorldQuaternion( optionalTarget ) { + + var result = optionalTarget || new Quaternion(); + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( position, result, scale ); + + return result; + + }; + + }(), + + getWorldRotation: function () { + + var quaternion = new Quaternion(); + + return function getWorldRotation( optionalTarget ) { + + var result = optionalTarget || new Euler(); + + this.getWorldQuaternion( quaternion ); + + return result.setFromQuaternion( quaternion, this.rotation.order, false ); + + }; + + }(), + + getWorldScale: function () { + + var position = new Vector3(); + var quaternion = new Quaternion(); + + return function getWorldScale( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.updateMatrixWorld( true ); + + this.matrixWorld.decompose( position, quaternion, result ); + + return result; + + }; + + }(), + + getWorldDirection: function () { + + var quaternion = new Quaternion(); + + return function getWorldDirection( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.getWorldQuaternion( quaternion ); + + return result.set( 0, 0, 1 ).applyQuaternion( quaternion ); + + }; + + }(), + + raycast: function () {}, + + traverse: function ( callback ) { + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverse( callback ); + + } + + }, + + traverseVisible: function ( callback ) { + + if ( this.visible === false ) return; + + callback( this ); + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].traverseVisible( callback ); + + } + + }, + + traverseAncestors: function ( callback ) { + + var parent = this.parent; + + if ( parent !== null ) { + + callback( parent ); + + parent.traverseAncestors( callback ); + + } + + }, + + updateMatrix: function () { + + this.matrix.compose( this.position, this.quaternion, this.scale ); + + this.matrixWorldNeedsUpdate = true; + + }, + + updateMatrixWorld: function ( force ) { + + if ( this.matrixAutoUpdate ) this.updateMatrix(); + + if ( this.matrixWorldNeedsUpdate || force ) { + + if ( this.parent === null ) { + + this.matrixWorld.copy( this.matrix ); + + } else { + + this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); + + } + + this.matrixWorldNeedsUpdate = false; + + force = true; + + } + + // update children + + var children = this.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + children[ i ].updateMatrixWorld( force ); + + } + + }, + + toJSON: function ( meta ) { + + // meta is '' when called from JSON.stringify + var isRootObject = ( meta === undefined || meta === '' ); + + var output = {}; + + // meta is a hash used to collect geometries, materials. + // not providing it implies that this is the root object + // being serialized. + if ( isRootObject ) { + + // initialize meta obj + meta = { + geometries: {}, + materials: {}, + textures: {}, + images: {} + }; + + output.metadata = { + version: 4.5, + type: 'Object', + generator: 'Object3D.toJSON' + }; + + } + + // standard Object3D serialization + + var object = {}; + + object.uuid = this.uuid; + object.type = this.type; + + if ( this.name !== '' ) object.name = this.name; + if ( this.castShadow === true ) object.castShadow = true; + if ( this.receiveShadow === true ) object.receiveShadow = true; + if ( this.visible === false ) object.visible = false; + if ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; + + object.matrix = this.matrix.toArray(); + + // + + function serialize( library, element ) { + + if ( library[ element.uuid ] === undefined ) { + + library[ element.uuid ] = element.toJSON( meta ); + + } + + return element.uuid; + + } + + if ( this.geometry !== undefined ) { + + object.geometry = serialize( meta.geometries, this.geometry ); + + } + + if ( this.material !== undefined ) { + + if ( Array.isArray( this.material ) ) { + + var uuids = []; + + for ( var i = 0, l = this.material.length; i < l; i ++ ) { + + uuids.push( serialize( meta.materials, this.material[ i ] ) ); + + } + + object.material = uuids; + + } else { + + object.material = serialize( meta.materials, this.material ); + + } + + } + + // + + if ( this.children.length > 0 ) { + + object.children = []; + + for ( var i = 0; i < this.children.length; i ++ ) { + + object.children.push( this.children[ i ].toJSON( meta ).object ); + + } + + } + + if ( isRootObject ) { + + var geometries = extractFromCache( meta.geometries ); + var materials = extractFromCache( meta.materials ); + var textures = extractFromCache( meta.textures ); + var images = extractFromCache( meta.images ); + + if ( geometries.length > 0 ) output.geometries = geometries; + if ( materials.length > 0 ) output.materials = materials; + if ( textures.length > 0 ) output.textures = textures; + if ( images.length > 0 ) output.images = images; + + } + + output.object = object; + + return output; + + // extract data from the cache hash + // remove metadata on each item + // and return as array + function extractFromCache( cache ) { + + var values = []; + for ( var key in cache ) { + + var data = cache[ key ]; + delete data.metadata; + values.push( data ); + + } + return values; + + } + + }, + + clone: function ( recursive ) { + + return new this.constructor().copy( this, recursive ); + + }, + + copy: function ( source, recursive ) { + + if ( recursive === undefined ) recursive = true; + + this.name = source.name; + + this.up.copy( source.up ); + + this.position.copy( source.position ); + this.quaternion.copy( source.quaternion ); + this.scale.copy( source.scale ); + + this.matrix.copy( source.matrix ); + this.matrixWorld.copy( source.matrixWorld ); + + this.matrixAutoUpdate = source.matrixAutoUpdate; + this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; + + this.layers.mask = source.layers.mask; + this.visible = source.visible; + + this.castShadow = source.castShadow; + this.receiveShadow = source.receiveShadow; + + this.frustumCulled = source.frustumCulled; + this.renderOrder = source.renderOrder; + + this.userData = JSON.parse( JSON.stringify( source.userData ) ); + + if ( recursive === true ) { + + for ( var i = 0; i < source.children.length; i ++ ) { + + var child = source.children[ i ]; + this.add( child.clone() ); + + } + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author mikael emtinger / http://gomo.se/ + * @author WestLangley / http://github.com/WestLangley +*/ + +function Camera() { + + Object3D.call( this ); + + this.type = 'Camera'; + + this.matrixWorldInverse = new Matrix4(); + this.projectionMatrix = new Matrix4(); + +} + +Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Camera, + + isCamera: true, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + this.matrixWorldInverse.copy( source.matrixWorldInverse ); + this.projectionMatrix.copy( source.projectionMatrix ); + + return this; + + }, + + getWorldDirection: function () { + + var quaternion = new Quaternion(); + + return function getWorldDirection( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + this.getWorldQuaternion( quaternion ); + + return result.set( 0, 0, - 1 ).applyQuaternion( quaternion ); + + }; + + }(), + + updateMatrixWorld: function ( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + this.matrixWorldInverse.getInverse( this.matrixWorld ); + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author arose / http://github.com/arose + */ + +function OrthographicCamera( left, right, top, bottom, near, far ) { + + Camera.call( this ); + + this.type = 'OrthographicCamera'; + + this.zoom = 1; + this.view = null; + + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + + this.near = ( near !== undefined ) ? near : 0.1; + this.far = ( far !== undefined ) ? far : 2000; + + this.updateProjectionMatrix(); + +} + +OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: OrthographicCamera, + + isOrthographicCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.left = source.left; + this.right = source.right; + this.top = source.top; + this.bottom = source.bottom; + this.near = source.near; + this.far = source.far; + + this.zoom = source.zoom; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + return this; + + }, + + setViewOffset: function( fullWidth, fullHeight, x, y, width, height ) { + + this.view = { + fullWidth: fullWidth, + fullHeight: fullHeight, + offsetX: x, + offsetY: y, + width: width, + height: height + }; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function() { + + this.view = null; + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var dx = ( this.right - this.left ) / ( 2 * this.zoom ); + var dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); + var cx = ( this.right + this.left ) / 2; + var cy = ( this.top + this.bottom ) / 2; + + var left = cx - dx; + var right = cx + dx; + var top = cy + dy; + var bottom = cy - dy; + + if ( this.view !== null ) { + + var zoomW = this.zoom / ( this.view.width / this.view.fullWidth ); + var zoomH = this.zoom / ( this.view.height / this.view.fullHeight ); + var scaleW = ( this.right - this.left ) / this.view.width; + var scaleH = ( this.top - this.bottom ) / this.view.height; + + left += scaleW * ( this.view.offsetX / zoomW ); + right = left + scaleW * ( this.view.width / zoomW ); + top -= scaleH * ( this.view.offsetY / zoomH ); + bottom = top - scaleH * ( this.view.height / zoomH ); + + } + + this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.zoom = this.zoom; + data.object.left = this.left; + data.object.right = this.right; + data.object.top = this.top; + data.object.bottom = this.bottom; + data.object.near = this.near; + data.object.far = this.far; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + return data; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author greggman / http://games.greggman.com/ + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author tschw + */ + +function PerspectiveCamera( fov, aspect, near, far ) { + + Camera.call( this ); + + this.type = 'PerspectiveCamera'; + + this.fov = fov !== undefined ? fov : 50; + this.zoom = 1; + + this.near = near !== undefined ? near : 0.1; + this.far = far !== undefined ? far : 2000; + this.focus = 10; + + this.aspect = aspect !== undefined ? aspect : 1; + this.view = null; + + this.filmGauge = 35; // width of the film (default in millimeters) + this.filmOffset = 0; // horizontal film offset (same unit as gauge) + + this.updateProjectionMatrix(); + +} + +PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { + + constructor: PerspectiveCamera, + + isPerspectiveCamera: true, + + copy: function ( source, recursive ) { + + Camera.prototype.copy.call( this, source, recursive ); + + this.fov = source.fov; + this.zoom = source.zoom; + + this.near = source.near; + this.far = source.far; + this.focus = source.focus; + + this.aspect = source.aspect; + this.view = source.view === null ? null : Object.assign( {}, source.view ); + + this.filmGauge = source.filmGauge; + this.filmOffset = source.filmOffset; + + return this; + + }, + + /** + * Sets the FOV by focal length in respect to the current .filmGauge. + * + * The default film gauge is 35, so that the focal length can be specified for + * a 35mm (full frame) camera. + * + * Values for focal length and film gauge must have the same unit. + */ + setFocalLength: function ( focalLength ) { + + // see http://www.bobatkins.com/photography/technical/field_of_view.html + var vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; + + this.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope ); + this.updateProjectionMatrix(); + + }, + + /** + * Calculates the focal length from the current .fov and .filmGauge. + */ + getFocalLength: function () { + + var vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov ); + + return 0.5 * this.getFilmHeight() / vExtentSlope; + + }, + + getEffectiveFOV: function () { + + return _Math.RAD2DEG * 2 * Math.atan( + Math.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom ); + + }, + + getFilmWidth: function () { + + // film not completely covered in portrait format (aspect < 1) + return this.filmGauge * Math.min( this.aspect, 1 ); + + }, + + getFilmHeight: function () { + + // film not completely covered in landscape format (aspect > 1) + return this.filmGauge / Math.max( this.aspect, 1 ); + + }, + + /** + * Sets an offset in a larger frustum. This is useful for multi-window or + * multi-monitor/multi-machine setups. + * + * For example, if you have 3x2 monitors and each monitor is 1920x1080 and + * the monitors are in grid like this + * + * +---+---+---+ + * | A | B | C | + * +---+---+---+ + * | D | E | F | + * +---+---+---+ + * + * then for each monitor you would call it like this + * + * var w = 1920; + * var h = 1080; + * var fullWidth = w * 3; + * var fullHeight = h * 2; + * + * --A-- + * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); + * --B-- + * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); + * --C-- + * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); + * --D-- + * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); + * --E-- + * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); + * --F-- + * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); + * + * Note there is no reason monitors have to be the same size or in a grid. + */ + setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { + + this.aspect = fullWidth / fullHeight; + + this.view = { + fullWidth: fullWidth, + fullHeight: fullHeight, + offsetX: x, + offsetY: y, + width: width, + height: height + }; + + this.updateProjectionMatrix(); + + }, + + clearViewOffset: function () { + + this.view = null; + this.updateProjectionMatrix(); + + }, + + updateProjectionMatrix: function () { + + var near = this.near, + top = near * Math.tan( + _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom, + height = 2 * top, + width = this.aspect * height, + left = - 0.5 * width, + view = this.view; + + if ( view !== null ) { + + var fullWidth = view.fullWidth, + fullHeight = view.fullHeight; + + left += view.offsetX * width / fullWidth; + top -= view.offsetY * height / fullHeight; + width *= view.width / fullWidth; + height *= view.height / fullHeight; + + } + + var skew = this.filmOffset; + if ( skew !== 0 ) left += near * skew / this.getFilmWidth(); + + this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far ); + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.fov = this.fov; + data.object.zoom = this.zoom; + + data.object.near = this.near; + data.object.far = this.far; + data.object.focus = this.focus; + + data.object.aspect = this.aspect; + + if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); + + data.object.filmGauge = this.filmGauge; + data.object.filmOffset = this.filmOffset; + + return data; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Face3( a, b, c, normal, color, materialIndex ) { + + this.a = a; + this.b = b; + this.c = c; + + this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); + this.vertexNormals = Array.isArray( normal ) ? normal : []; + + this.color = ( color && color.isColor ) ? color : new Color(); + this.vertexColors = Array.isArray( color ) ? color : []; + + this.materialIndex = materialIndex !== undefined ? materialIndex : 0; + +} + +Object.assign( Face3.prototype, { + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( source ) { + + this.a = source.a; + this.b = source.b; + this.c = source.c; + + this.normal.copy( source.normal ); + this.color.copy( source.color ); + + this.materialIndex = source.materialIndex; + + for ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) { + + this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); + + } + + for ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) { + + this.vertexColors[ i ] = source.vertexColors[ i ].clone(); + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author kile / http://kile.stravaganza.org/ + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author bhouston / http://clara.io + */ + +var count = 0; +function GeometryIdCount() { return count++; } + +function Geometry() { + + Object.defineProperty( this, 'id', { value: GeometryIdCount() } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'Geometry'; + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + + this.morphTargets = []; + this.morphNormals = []; + + this.skinWeights = []; + this.skinIndices = []; + + this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.elementsNeedUpdate = false; + this.verticesNeedUpdate = false; + this.uvsNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.lineDistancesNeedUpdate = false; + this.groupsNeedUpdate = false; + +} + +Object.assign( Geometry.prototype, EventDispatcher.prototype, { + + isGeometry: true, + + applyMatrix: function ( matrix ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + for ( var i = 0, il = this.vertices.length; i < il; i ++ ) { + + var vertex = this.vertices[ i ]; + vertex.applyMatrix4( matrix ); + + } + + for ( var i = 0, il = this.faces.length; i < il; i ++ ) { + + var face = this.faces[ i ]; + face.normal.applyMatrix3( normalMatrix ).normalize(); + + for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); + + } + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + this.verticesNeedUpdate = true; + this.normalsNeedUpdate = true; + + return this; + + }, + + rotateX: function () { + + // rotate geometry around world x-axis + + var m1 = new Matrix4(); + + return function rotateX( angle ) { + + m1.makeRotationX( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateY: function () { + + // rotate geometry around world y-axis + + var m1 = new Matrix4(); + + return function rotateY( angle ) { + + m1.makeRotationY( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateZ: function () { + + // rotate geometry around world z-axis + + var m1 = new Matrix4(); + + return function rotateZ( angle ) { + + m1.makeRotationZ( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + translate: function () { + + // translate geometry + + var m1 = new Matrix4(); + + return function translate( x, y, z ) { + + m1.makeTranslation( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + scale: function () { + + // scale geometry + + var m1 = new Matrix4(); + + return function scale( x, y, z ) { + + m1.makeScale( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + lookAt: function () { + + var obj = new Object3D(); + + return function lookAt( vector ) { + + obj.lookAt( vector ); + + obj.updateMatrix(); + + this.applyMatrix( obj.matrix ); + + }; + + }(), + + fromBufferGeometry: function ( geometry ) { + + var scope = this; + + var indices = geometry.index !== null ? geometry.index.array : undefined; + var attributes = geometry.attributes; + + var positions = attributes.position.array; + var normals = attributes.normal !== undefined ? attributes.normal.array : undefined; + var colors = attributes.color !== undefined ? attributes.color.array : undefined; + var uvs = attributes.uv !== undefined ? attributes.uv.array : undefined; + var uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined; + + if ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = []; + + var tempNormals = []; + var tempUVs = []; + var tempUVs2 = []; + + for ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) { + + scope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) ); + + if ( normals !== undefined ) { + + tempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) ); + + } + + if ( colors !== undefined ) { + + scope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) ); + + } + + if ( uvs !== undefined ) { + + tempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) ); + + } + + if ( uvs2 !== undefined ) { + + tempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) ); + + } + + } + + function addFace( a, b, c, materialIndex ) { + + var vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : []; + var vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : []; + + var face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); + + scope.faces.push( face ); + + if ( uvs !== undefined ) { + + scope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] ); + + } + + if ( uvs2 !== undefined ) { + + scope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] ); + + } + + } + + var groups = geometry.groups; + + if ( groups.length > 0 ) { + + for ( var i = 0; i < groups.length; i ++ ) { + + var group = groups[ i ]; + + var start = group.start; + var count = group.count; + + for ( var j = start, jl = start + count; j < jl; j += 3 ) { + + if ( indices !== undefined ) { + + addFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex ); + + } else { + + addFace( j, j + 1, j + 2, group.materialIndex ); + + } + + } + + } + + } else { + + if ( indices !== undefined ) { + + for ( var i = 0; i < indices.length; i += 3 ) { + + addFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] ); + + } + + } else { + + for ( var i = 0; i < positions.length / 3; i += 3 ) { + + addFace( i, i + 1, i + 2 ); + + } + + } + + } + + this.computeFaceNormals(); + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + return this; + + }, + + center: function () { + + this.computeBoundingBox(); + + var offset = this.boundingBox.getCenter().negate(); + + this.translate( offset.x, offset.y, offset.z ); + + return offset; + + }, + + normalize: function () { + + this.computeBoundingSphere(); + + var center = this.boundingSphere.center; + var radius = this.boundingSphere.radius; + + var s = radius === 0 ? 1 : 1.0 / radius; + + var matrix = new Matrix4(); + matrix.set( + s, 0, 0, - s * center.x, + 0, s, 0, - s * center.y, + 0, 0, s, - s * center.z, + 0, 0, 0, 1 + ); + + this.applyMatrix( matrix ); + + return this; + + }, + + computeFaceNormals: function () { + + var cb = new Vector3(), ab = new Vector3(); + + for ( var f = 0, fl = this.faces.length; f < fl; f ++ ) { + + var face = this.faces[ f ]; + + var vA = this.vertices[ face.a ]; + var vB = this.vertices[ face.b ]; + var vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + cb.normalize(); + + face.normal.copy( cb ); + + } + + }, + + computeVertexNormals: function ( areaWeighted ) { + + if ( areaWeighted === undefined ) areaWeighted = true; + + var v, vl, f, fl, face, vertices; + + vertices = new Array( this.vertices.length ); + + for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ] = new Vector3(); + + } + + if ( areaWeighted ) { + + // vertex normals weighted by triangle areas + // http://www.iquilezles.org/www/articles/normals/normals.htm + + var vA, vB, vC; + var cb = new Vector3(), ab = new Vector3(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + vA = this.vertices[ face.a ]; + vB = this.vertices[ face.b ]; + vC = this.vertices[ face.c ]; + + cb.subVectors( vC, vB ); + ab.subVectors( vA, vB ); + cb.cross( ab ); + + vertices[ face.a ].add( cb ); + vertices[ face.b ].add( cb ); + vertices[ face.c ].add( cb ); + + } + + } else { + + this.computeFaceNormals(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + vertices[ face.a ].add( face.normal ); + vertices[ face.b ].add( face.normal ); + vertices[ face.c ].add( face.normal ); + + } + + } + + for ( v = 0, vl = this.vertices.length; v < vl; v ++ ) { + + vertices[ v ].normalize(); + + } + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( vertices[ face.a ] ); + vertexNormals[ 1 ].copy( vertices[ face.b ] ); + vertexNormals[ 2 ].copy( vertices[ face.c ] ); + + } else { + + vertexNormals[ 0 ] = vertices[ face.a ].clone(); + vertexNormals[ 1 ] = vertices[ face.b ].clone(); + vertexNormals[ 2 ] = vertices[ face.c ].clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeFlatVertexNormals: function () { + + var f, fl, face; + + this.computeFaceNormals(); + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + vertexNormals[ 0 ].copy( face.normal ); + vertexNormals[ 1 ].copy( face.normal ); + vertexNormals[ 2 ].copy( face.normal ); + + } else { + + vertexNormals[ 0 ] = face.normal.clone(); + vertexNormals[ 1 ] = face.normal.clone(); + vertexNormals[ 2 ] = face.normal.clone(); + + } + + } + + if ( this.faces.length > 0 ) { + + this.normalsNeedUpdate = true; + + } + + }, + + computeMorphNormals: function () { + + var i, il, f, fl, face; + + // save original normals + // - create temp variables on first access + // otherwise just copy (for faster repeated calls) + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + if ( ! face.__originalFaceNormal ) { + + face.__originalFaceNormal = face.normal.clone(); + + } else { + + face.__originalFaceNormal.copy( face.normal ); + + } + + if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; + + for ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) { + + if ( ! face.__originalVertexNormals[ i ] ) { + + face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); + + } else { + + face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); + + } + + } + + } + + // use temp geometry to compute face and vertex normals for each morph + + var tmpGeo = new Geometry(); + tmpGeo.faces = this.faces; + + for ( i = 0, il = this.morphTargets.length; i < il; i ++ ) { + + // create on first access + + if ( ! this.morphNormals[ i ] ) { + + this.morphNormals[ i ] = {}; + this.morphNormals[ i ].faceNormals = []; + this.morphNormals[ i ].vertexNormals = []; + + var dstNormalsFace = this.morphNormals[ i ].faceNormals; + var dstNormalsVertex = this.morphNormals[ i ].vertexNormals; + + var faceNormal, vertexNormals; + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + faceNormal = new Vector3(); + vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; + + dstNormalsFace.push( faceNormal ); + dstNormalsVertex.push( vertexNormals ); + + } + + } + + var morphNormals = this.morphNormals[ i ]; + + // set vertices to morph target + + tmpGeo.vertices = this.morphTargets[ i ].vertices; + + // compute morph normals + + tmpGeo.computeFaceNormals(); + tmpGeo.computeVertexNormals(); + + // store morph normals + + var faceNormal, vertexNormals; + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + faceNormal = morphNormals.faceNormals[ f ]; + vertexNormals = morphNormals.vertexNormals[ f ]; + + faceNormal.copy( face.normal ); + + vertexNormals.a.copy( face.vertexNormals[ 0 ] ); + vertexNormals.b.copy( face.vertexNormals[ 1 ] ); + vertexNormals.c.copy( face.vertexNormals[ 2 ] ); + + } + + } + + // restore original normals + + for ( f = 0, fl = this.faces.length; f < fl; f ++ ) { + + face = this.faces[ f ]; + + face.normal = face.__originalFaceNormal; + face.vertexNormals = face.__originalVertexNormals; + + } + + }, + + computeLineDistances: function () { + + var d = 0; + var vertices = this.vertices; + + for ( var i = 0, il = vertices.length; i < il; i ++ ) { + + if ( i > 0 ) { + + d += vertices[ i ].distanceTo( vertices[ i - 1 ] ); + + } + + this.lineDistances[ i ] = d; + + } + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + this.boundingBox.setFromPoints( this.vertices ); + + }, + + computeBoundingSphere: function () { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + this.boundingSphere.setFromPoints( this.vertices ); + + }, + + merge: function ( geometry, matrix, materialIndexOffset ) { + + if ( ! ( geometry && geometry.isGeometry ) ) { + + console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); + return; + + } + + var normalMatrix, + vertexOffset = this.vertices.length, + vertices1 = this.vertices, + vertices2 = geometry.vertices, + faces1 = this.faces, + faces2 = geometry.faces, + uvs1 = this.faceVertexUvs[ 0 ], + uvs2 = geometry.faceVertexUvs[ 0 ], + colors1 = this.colors, + colors2 = geometry.colors; + + if ( materialIndexOffset === undefined ) materialIndexOffset = 0; + + if ( matrix !== undefined ) { + + normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + } + + // vertices + + for ( var i = 0, il = vertices2.length; i < il; i ++ ) { + + var vertex = vertices2[ i ]; + + var vertexCopy = vertex.clone(); + + if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); + + vertices1.push( vertexCopy ); + + } + + // colors + + for ( var i = 0, il = colors2.length; i < il; i ++ ) { + + colors1.push( colors2[ i ].clone() ); + + } + + // faces + + for ( i = 0, il = faces2.length; i < il; i ++ ) { + + var face = faces2[ i ], faceCopy, normal, color, + faceVertexNormals = face.vertexNormals, + faceVertexColors = face.vertexColors; + + faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); + faceCopy.normal.copy( face.normal ); + + if ( normalMatrix !== undefined ) { + + faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); + + } + + for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { + + normal = faceVertexNormals[ j ].clone(); + + if ( normalMatrix !== undefined ) { + + normal.applyMatrix3( normalMatrix ).normalize(); + + } + + faceCopy.vertexNormals.push( normal ); + + } + + faceCopy.color.copy( face.color ); + + for ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { + + color = faceVertexColors[ j ]; + faceCopy.vertexColors.push( color.clone() ); + + } + + faceCopy.materialIndex = face.materialIndex + materialIndexOffset; + + faces1.push( faceCopy ); + + } + + // uvs + + for ( i = 0, il = uvs2.length; i < il; i ++ ) { + + var uv = uvs2[ i ], uvCopy = []; + + if ( uv === undefined ) { + + continue; + + } + + for ( var j = 0, jl = uv.length; j < jl; j ++ ) { + + uvCopy.push( uv[ j ].clone() ); + + } + + uvs1.push( uvCopy ); + + } + + }, + + mergeMesh: function ( mesh ) { + + if ( ! ( mesh && mesh.isMesh ) ) { + + console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); + return; + + } + + mesh.matrixAutoUpdate && mesh.updateMatrix(); + + this.merge( mesh.geometry, mesh.matrix ); + + }, + + /* + * Checks for duplicate vertices with hashmap. + * Duplicated vertices are removed + * and faces' vertices are updated. + */ + + mergeVertices: function () { + + var verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) + var unique = [], changes = []; + + var v, key; + var precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001 + var precision = Math.pow( 10, precisionPoints ); + var i, il, face; + var indices, j, jl; + + for ( i = 0, il = this.vertices.length; i < il; i ++ ) { + + v = this.vertices[ i ]; + key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); + + if ( verticesMap[ key ] === undefined ) { + + verticesMap[ key ] = i; + unique.push( this.vertices[ i ] ); + changes[ i ] = unique.length - 1; + + } else { + + //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); + changes[ i ] = changes[ verticesMap[ key ] ]; + + } + + } + + + // if faces are completely degenerate after merging vertices, we + // have to remove them from the geometry. + var faceIndicesToRemove = []; + + for ( i = 0, il = this.faces.length; i < il; i ++ ) { + + face = this.faces[ i ]; + + face.a = changes[ face.a ]; + face.b = changes[ face.b ]; + face.c = changes[ face.c ]; + + indices = [ face.a, face.b, face.c ]; + + // if any duplicate vertices are found in a Face3 + // we have to remove the face as nothing can be saved + for ( var n = 0; n < 3; n ++ ) { + + if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { + + faceIndicesToRemove.push( i ); + break; + + } + + } + + } + + for ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { + + var idx = faceIndicesToRemove[ i ]; + + this.faces.splice( idx, 1 ); + + for ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { + + this.faceVertexUvs[ j ].splice( idx, 1 ); + + } + + } + + // Use unique set of vertices + + var diff = this.vertices.length - unique.length; + this.vertices = unique; + return diff; + + }, + + sortFacesByMaterialIndex: function () { + + var faces = this.faces; + var length = faces.length; + + // tag faces + + for ( var i = 0; i < length; i ++ ) { + + faces[ i ]._id = i; + + } + + // sort faces + + function materialIndexSort( a, b ) { + + return a.materialIndex - b.materialIndex; + + } + + faces.sort( materialIndexSort ); + + // sort uvs + + var uvs1 = this.faceVertexUvs[ 0 ]; + var uvs2 = this.faceVertexUvs[ 1 ]; + + var newUvs1, newUvs2; + + if ( uvs1 && uvs1.length === length ) newUvs1 = []; + if ( uvs2 && uvs2.length === length ) newUvs2 = []; + + for ( var i = 0; i < length; i ++ ) { + + var id = faces[ i ]._id; + + if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); + if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); + + } + + if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; + if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'Geometry', + generator: 'Geometry.toJSON' + } + }; + + // standard Geometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + var vertices = []; + + for ( var i = 0; i < this.vertices.length; i ++ ) { + + var vertex = this.vertices[ i ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + var faces = []; + var normals = []; + var normalsHash = {}; + var colors = []; + var colorsHash = {}; + var uvs = []; + var uvsHash = {}; + + for ( var i = 0; i < this.faces.length; i ++ ) { + + var face = this.faces[ i ]; + + var hasMaterial = true; + var hasFaceUv = false; // deprecated + var hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; + var hasFaceNormal = face.normal.length() > 0; + var hasFaceVertexNormal = face.vertexNormals.length > 0; + var hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; + var hasFaceVertexColor = face.vertexColors.length > 0; + + var faceType = 0; + + faceType = setBit( faceType, 0, 0 ); // isQuad + faceType = setBit( faceType, 1, hasMaterial ); + faceType = setBit( faceType, 2, hasFaceUv ); + faceType = setBit( faceType, 3, hasFaceVertexUv ); + faceType = setBit( faceType, 4, hasFaceNormal ); + faceType = setBit( faceType, 5, hasFaceVertexNormal ); + faceType = setBit( faceType, 6, hasFaceColor ); + faceType = setBit( faceType, 7, hasFaceVertexColor ); + + faces.push( faceType ); + faces.push( face.a, face.b, face.c ); + faces.push( face.materialIndex ); + + if ( hasFaceVertexUv ) { + + var faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; + + faces.push( + getUvIndex( faceVertexUvs[ 0 ] ), + getUvIndex( faceVertexUvs[ 1 ] ), + getUvIndex( faceVertexUvs[ 2 ] ) + ); + + } + + if ( hasFaceNormal ) { + + faces.push( getNormalIndex( face.normal ) ); + + } + + if ( hasFaceVertexNormal ) { + + var vertexNormals = face.vertexNormals; + + faces.push( + getNormalIndex( vertexNormals[ 0 ] ), + getNormalIndex( vertexNormals[ 1 ] ), + getNormalIndex( vertexNormals[ 2 ] ) + ); + + } + + if ( hasFaceColor ) { + + faces.push( getColorIndex( face.color ) ); + + } + + if ( hasFaceVertexColor ) { + + var vertexColors = face.vertexColors; + + faces.push( + getColorIndex( vertexColors[ 0 ] ), + getColorIndex( vertexColors[ 1 ] ), + getColorIndex( vertexColors[ 2 ] ) + ); + + } + + } + + function setBit( value, position, enabled ) { + + return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); + + } + + function getNormalIndex( normal ) { + + var hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); + + if ( normalsHash[ hash ] !== undefined ) { + + return normalsHash[ hash ]; + + } + + normalsHash[ hash ] = normals.length / 3; + normals.push( normal.x, normal.y, normal.z ); + + return normalsHash[ hash ]; + + } + + function getColorIndex( color ) { + + var hash = color.r.toString() + color.g.toString() + color.b.toString(); + + if ( colorsHash[ hash ] !== undefined ) { + + return colorsHash[ hash ]; + + } + + colorsHash[ hash ] = colors.length; + colors.push( color.getHex() ); + + return colorsHash[ hash ]; + + } + + function getUvIndex( uv ) { + + var hash = uv.x.toString() + uv.y.toString(); + + if ( uvsHash[ hash ] !== undefined ) { + + return uvsHash[ hash ]; + + } + + uvsHash[ hash ] = uvs.length / 2; + uvs.push( uv.x, uv.y ); + + return uvsHash[ hash ]; + + } + + data.data = {}; + + data.data.vertices = vertices; + data.data.normals = normals; + if ( colors.length > 0 ) data.data.colors = colors; + if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility + data.data.faces = faces; + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + var parameters = this.parameters; + + if ( parameters !== undefined ) { + + var values = []; + + for ( var key in parameters ) { + + values.push( parameters[ key ] ); + + } + + var geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new Geometry().copy( this ); + + }, + + copy: function ( source ) { + + var i, il, j, jl, k, kl; + + // reset + + this.vertices = []; + this.colors = []; + this.faces = []; + this.faceVertexUvs = [[]]; + this.morphTargets = []; + this.morphNormals = []; + this.skinWeights = []; + this.skinIndices = []; + this.lineDistances = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // vertices + + var vertices = source.vertices; + + for ( i = 0, il = vertices.length; i < il; i ++ ) { + + this.vertices.push( vertices[ i ].clone() ); + + } + + // colors + + var colors = source.colors; + + for ( i = 0, il = colors.length; i < il; i ++ ) { + + this.colors.push( colors[ i ].clone() ); + + } + + // faces + + var faces = source.faces; + + for ( i = 0, il = faces.length; i < il; i ++ ) { + + this.faces.push( faces[ i ].clone() ); + + } + + // face vertex uvs + + for ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { + + var faceVertexUvs = source.faceVertexUvs[ i ]; + + if ( this.faceVertexUvs[ i ] === undefined ) { + + this.faceVertexUvs[ i ] = []; + + } + + for ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { + + var uvs = faceVertexUvs[ j ], uvsCopy = []; + + for ( k = 0, kl = uvs.length; k < kl; k ++ ) { + + var uv = uvs[ k ]; + + uvsCopy.push( uv.clone() ); + + } + + this.faceVertexUvs[ i ].push( uvsCopy ); + + } + + } + + // morph targets + + var morphTargets = source.morphTargets; + + for ( i = 0, il = morphTargets.length; i < il; i ++ ) { + + var morphTarget = {}; + morphTarget.name = morphTargets[ i ].name; + + // vertices + + if ( morphTargets[ i ].vertices !== undefined ) { + + morphTarget.vertices = []; + + for ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) { + + morphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() ); + + } + + } + + // normals + + if ( morphTargets[ i ].normals !== undefined ) { + + morphTarget.normals = []; + + for ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) { + + morphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() ); + + } + + } + + this.morphTargets.push( morphTarget ); + + } + + // morph normals + + var morphNormals = source.morphNormals; + + for ( i = 0, il = morphNormals.length; i < il; i ++ ) { + + var morphNormal = {}; + + // vertex normals + + if ( morphNormals[ i ].vertexNormals !== undefined ) { + + morphNormal.vertexNormals = []; + + for ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) { + + var srcVertexNormal = morphNormals[ i ].vertexNormals[ j ]; + var destVertexNormal = {}; + + destVertexNormal.a = srcVertexNormal.a.clone(); + destVertexNormal.b = srcVertexNormal.b.clone(); + destVertexNormal.c = srcVertexNormal.c.clone(); + + morphNormal.vertexNormals.push( destVertexNormal ); + + } + + } + + // face normals + + if ( morphNormals[ i ].faceNormals !== undefined ) { + + morphNormal.faceNormals = []; + + for ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) { + + morphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() ); + + } + + } + + this.morphNormals.push( morphNormal ); + + } + + // skin weights + + var skinWeights = source.skinWeights; + + for ( i = 0, il = skinWeights.length; i < il; i ++ ) { + + this.skinWeights.push( skinWeights[ i ].clone() ); + + } + + // skin indices + + var skinIndices = source.skinIndices; + + for ( i = 0, il = skinIndices.length; i < il; i ++ ) { + + this.skinIndices.push( skinIndices[ i ].clone() ); + + } + + // line distances + + var lineDistances = source.lineDistances; + + for ( i = 0, il = lineDistances.length; i < il; i ++ ) { + + this.lineDistances.push( lineDistances[ i ] ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // update flags + + this.elementsNeedUpdate = source.elementsNeedUpdate; + this.verticesNeedUpdate = source.verticesNeedUpdate; + this.uvsNeedUpdate = source.uvsNeedUpdate; + this.normalsNeedUpdate = source.normalsNeedUpdate; + this.colorsNeedUpdate = source.colorsNeedUpdate; + this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; + this.groupsNeedUpdate = source.groupsNeedUpdate; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferAttribute( array, itemSize, normalized ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.uuid = _Math.generateUUID(); + this.name = ''; + + this.array = array; + this.itemSize = itemSize; + this.count = array !== undefined ? array.length / itemSize : 0; + this.normalized = normalized === true; + + this.dynamic = false; + this.updateRange = { offset: 0, count: - 1 }; + + this.onUploadCallback = function () {}; + + this.version = 0; + +} + +Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( BufferAttribute.prototype, { + + isBufferAttribute: true, + + setArray: function ( array ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.count = array !== undefined ? array.length / this.itemSize : 0; + this.array = array; + + }, + + setDynamic: function ( value ) { + + this.dynamic = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.itemSize = source.itemSize; + this.count = source.count; + this.normalized = source.normalized; + + this.dynamic = source.dynamic; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.itemSize; + index2 *= attribute.itemSize; + + for ( var i = 0, l = this.itemSize; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + copyArray: function ( array ) { + + this.array.set( array ); + + return this; + + }, + + copyColorsArray: function ( colors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = colors.length; i < l; i ++ ) { + + var color = colors[ i ]; + + if ( color === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); + color = new Color(); + + } + + array[ offset ++ ] = color.r; + array[ offset ++ ] = color.g; + array[ offset ++ ] = color.b; + + } + + return this; + + }, + + copyIndicesArray: function ( indices ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = indices.length; i < l; i ++ ) { + + var index = indices[ i ]; + + array[ offset ++ ] = index.a; + array[ offset ++ ] = index.b; + array[ offset ++ ] = index.c; + + } + + return this; + + }, + + copyVector2sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); + vector = new Vector2(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + + } + + return this; + + }, + + copyVector3sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); + vector = new Vector3(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + + } + + return this; + + }, + + copyVector4sArray: function ( vectors ) { + + var array = this.array, offset = 0; + + for ( var i = 0, l = vectors.length; i < l; i ++ ) { + + var vector = vectors[ i ]; + + if ( vector === undefined ) { + + console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); + vector = new Vector4(); + + } + + array[ offset ++ ] = vector.x; + array[ offset ++ ] = vector.y; + array[ offset ++ ] = vector.z; + array[ offset ++ ] = vector.w; + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) offset = 0; + + this.array.set( value, offset ); + + return this; + + }, + + getX: function ( index ) { + + return this.array[ index * this.itemSize ]; + + }, + + setX: function ( index, x ) { + + this.array[ index * this.itemSize ] = x; + + return this; + + }, + + getY: function ( index ) { + + return this.array[ index * this.itemSize + 1 ]; + + }, + + setY: function ( index, y ) { + + this.array[ index * this.itemSize + 1 ] = y; + + return this; + + }, + + getZ: function ( index ) { + + return this.array[ index * this.itemSize + 2 ]; + + }, + + setZ: function ( index, z ) { + + this.array[ index * this.itemSize + 2 ] = z; + + return this; + + }, + + getW: function ( index ) { + + return this.array[ index * this.itemSize + 3 ]; + + }, + + setW: function ( index, w ) { + + this.array[ index * this.itemSize + 3 ] = w; + + return this; + + }, + + setXY: function ( index, x, y ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index *= this.itemSize; + + this.array[ index + 0 ] = x; + this.array[ index + 1 ] = y; + this.array[ index + 2 ] = z; + this.array[ index + 3 ] = w; + + return this; + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + }, + + clone: function () { + + return new this.constructor( this.array, this.itemSize ).copy( this ); + + } + +} ); + +// + +function Int8BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Int8Array( array ), itemSize ); + +} + +Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; + + +function Uint8BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint8Array( array ), itemSize ); + +} + +Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; + + +function Uint8ClampedBufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize ); + +} + +Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; + + +function Int16BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Int16Array( array ), itemSize ); + +} + +Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; + + +function Uint16BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint16Array( array ), itemSize ); + +} + +Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; + + +function Int32BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Int32Array( array ), itemSize ); + +} + +Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; + + +function Uint32BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Uint32Array( array ), itemSize ); + +} + +Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; + + +function Float32BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Float32Array( array ), itemSize ); + +} + +Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; + + +function Float64BufferAttribute( array, itemSize ) { + + BufferAttribute.call( this, new Float64Array( array ), itemSize ); + +} + +Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); +Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function DirectGeometry() { + + this.indices = []; + this.vertices = []; + this.normals = []; + this.colors = []; + this.uvs = []; + this.uvs2 = []; + + this.groups = []; + + this.morphTargets = {}; + + this.skinWeights = []; + this.skinIndices = []; + + // this.lineDistances = []; + + this.boundingBox = null; + this.boundingSphere = null; + + // update flags + + this.verticesNeedUpdate = false; + this.normalsNeedUpdate = false; + this.colorsNeedUpdate = false; + this.uvsNeedUpdate = false; + this.groupsNeedUpdate = false; + +} + +Object.assign( DirectGeometry.prototype, { + + computeGroups: function ( geometry ) { + + var group; + var groups = []; + var materialIndex = undefined; + + var faces = geometry.faces; + + for ( var i = 0; i < faces.length; i ++ ) { + + var face = faces[ i ]; + + // materials + + if ( face.materialIndex !== materialIndex ) { + + materialIndex = face.materialIndex; + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + group = { + start: i * 3, + materialIndex: materialIndex + }; + + } + + } + + if ( group !== undefined ) { + + group.count = ( i * 3 ) - group.start; + groups.push( group ); + + } + + this.groups = groups; + + }, + + fromGeometry: function ( geometry ) { + + var faces = geometry.faces; + var vertices = geometry.vertices; + var faceVertexUvs = geometry.faceVertexUvs; + + var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; + var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; + + // morphs + + var morphTargets = geometry.morphTargets; + var morphTargetsLength = morphTargets.length; + + var morphTargetsPosition; + + if ( morphTargetsLength > 0 ) { + + morphTargetsPosition = []; + + for ( var i = 0; i < morphTargetsLength; i ++ ) { + + morphTargetsPosition[ i ] = []; + + } + + this.morphTargets.position = morphTargetsPosition; + + } + + var morphNormals = geometry.morphNormals; + var morphNormalsLength = morphNormals.length; + + var morphTargetsNormal; + + if ( morphNormalsLength > 0 ) { + + morphTargetsNormal = []; + + for ( var i = 0; i < morphNormalsLength; i ++ ) { + + morphTargetsNormal[ i ] = []; + + } + + this.morphTargets.normal = morphTargetsNormal; + + } + + // skins + + var skinIndices = geometry.skinIndices; + var skinWeights = geometry.skinWeights; + + var hasSkinIndices = skinIndices.length === vertices.length; + var hasSkinWeights = skinWeights.length === vertices.length; + + // + + for ( var i = 0; i < faces.length; i ++ ) { + + var face = faces[ i ]; + + this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); + + var vertexNormals = face.vertexNormals; + + if ( vertexNormals.length === 3 ) { + + this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); + + } else { + + var normal = face.normal; + + this.normals.push( normal, normal, normal ); + + } + + var vertexColors = face.vertexColors; + + if ( vertexColors.length === 3 ) { + + this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); + + } else { + + var color = face.color; + + this.colors.push( color, color, color ); + + } + + if ( hasFaceVertexUv === true ) { + + var vertexUvs = faceVertexUvs[ 0 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); + + this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + if ( hasFaceVertexUv2 === true ) { + + var vertexUvs = faceVertexUvs[ 1 ][ i ]; + + if ( vertexUvs !== undefined ) { + + this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); + + } else { + + console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); + + this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); + + } + + } + + // morphs + + for ( var j = 0; j < morphTargetsLength; j ++ ) { + + var morphTarget = morphTargets[ j ].vertices; + + morphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); + + } + + for ( var j = 0; j < morphNormalsLength; j ++ ) { + + var morphNormal = morphNormals[ j ].vertexNormals[ i ]; + + morphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c ); + + } + + // skins + + if ( hasSkinIndices ) { + + this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); + + } + + if ( hasSkinWeights ) { + + this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); + + } + + } + + this.computeGroups( geometry ); + + this.verticesNeedUpdate = geometry.verticesNeedUpdate; + this.normalsNeedUpdate = geometry.normalsNeedUpdate; + this.colorsNeedUpdate = geometry.colorsNeedUpdate; + this.uvsNeedUpdate = geometry.uvsNeedUpdate; + this.groupsNeedUpdate = geometry.groupsNeedUpdate; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function arrayMax( array ) { + + if ( array.length === 0 ) return - Infinity; + + var max = array[ 0 ]; + + for ( var i = 1, l = array.length; i < l; ++ i ) { + + if ( array[ i ] > max ) max = array[ i ]; + + } + + return max; + +} + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferGeometry() { + + Object.defineProperty( this, 'id', { value: GeometryIdCount() } ); + + this.uuid = _Math.generateUUID(); + + this.name = ''; + this.type = 'BufferGeometry'; + + this.index = null; + this.attributes = {}; + + this.morphAttributes = {}; + + this.groups = []; + + this.boundingBox = null; + this.boundingSphere = null; + + this.drawRange = { start: 0, count: Infinity }; + +} + +BufferGeometry.MaxIndex = 65535; + +Object.assign( BufferGeometry.prototype, EventDispatcher.prototype, { + + isBufferGeometry: true, + + getIndex: function () { + + return this.index; + + }, + + setIndex: function ( index ) { + + if ( Array.isArray( index ) ) { + + this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); + + } else { + + this.index = index; + + } + + }, + + addAttribute: function ( name, attribute ) { + + if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { + + console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); + + this.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); + + return; + + } + + if ( name === 'index' ) { + + console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); + this.setIndex( attribute ); + + return; + + } + + this.attributes[ name ] = attribute; + + return this; + + }, + + getAttribute: function ( name ) { + + return this.attributes[ name ]; + + }, + + removeAttribute: function ( name ) { + + delete this.attributes[ name ]; + + return this; + + }, + + addGroup: function ( start, count, materialIndex ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex !== undefined ? materialIndex : 0 + + } ); + + }, + + clearGroups: function () { + + this.groups = []; + + }, + + setDrawRange: function ( start, count ) { + + this.drawRange.start = start; + this.drawRange.count = count; + + }, + + applyMatrix: function ( matrix ) { + + var position = this.attributes.position; + + if ( position !== undefined ) { + + matrix.applyToBufferAttribute( position ); + position.needsUpdate = true; + + } + + var normal = this.attributes.normal; + + if ( normal !== undefined ) { + + var normalMatrix = new Matrix3().getNormalMatrix( matrix ); + + normalMatrix.applyToBufferAttribute( normal ); + normal.needsUpdate = true; + + } + + if ( this.boundingBox !== null ) { + + this.computeBoundingBox(); + + } + + if ( this.boundingSphere !== null ) { + + this.computeBoundingSphere(); + + } + + return this; + + }, + + rotateX: function () { + + // rotate geometry around world x-axis + + var m1 = new Matrix4(); + + return function rotateX( angle ) { + + m1.makeRotationX( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateY: function () { + + // rotate geometry around world y-axis + + var m1 = new Matrix4(); + + return function rotateY( angle ) { + + m1.makeRotationY( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + rotateZ: function () { + + // rotate geometry around world z-axis + + var m1 = new Matrix4(); + + return function rotateZ( angle ) { + + m1.makeRotationZ( angle ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + translate: function () { + + // translate geometry + + var m1 = new Matrix4(); + + return function translate( x, y, z ) { + + m1.makeTranslation( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + scale: function () { + + // scale geometry + + var m1 = new Matrix4(); + + return function scale( x, y, z ) { + + m1.makeScale( x, y, z ); + + this.applyMatrix( m1 ); + + return this; + + }; + + }(), + + lookAt: function () { + + var obj = new Object3D(); + + return function lookAt( vector ) { + + obj.lookAt( vector ); + + obj.updateMatrix(); + + this.applyMatrix( obj.matrix ); + + }; + + }(), + + center: function () { + + this.computeBoundingBox(); + + var offset = this.boundingBox.getCenter().negate(); + + this.translate( offset.x, offset.y, offset.z ); + + return offset; + + }, + + setFromObject: function ( object ) { + + // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); + + var geometry = object.geometry; + + if ( object.isPoints || object.isLine ) { + + var positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); + var colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); + + this.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); + this.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); + + if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { + + var lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); + + this.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); + + } + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + } else if ( object.isMesh ) { + + if ( geometry && geometry.isGeometry ) { + + this.fromGeometry( geometry ); + + } + + } + + return this; + + }, + + updateFromObject: function ( object ) { + + var geometry = object.geometry; + + if ( object.isMesh ) { + + var direct = geometry.__directGeometry; + + if ( geometry.elementsNeedUpdate === true ) { + + direct = undefined; + geometry.elementsNeedUpdate = false; + + } + + if ( direct === undefined ) { + + return this.fromGeometry( geometry ); + + } + + direct.verticesNeedUpdate = geometry.verticesNeedUpdate; + direct.normalsNeedUpdate = geometry.normalsNeedUpdate; + direct.colorsNeedUpdate = geometry.colorsNeedUpdate; + direct.uvsNeedUpdate = geometry.uvsNeedUpdate; + direct.groupsNeedUpdate = geometry.groupsNeedUpdate; + + geometry.verticesNeedUpdate = false; + geometry.normalsNeedUpdate = false; + geometry.colorsNeedUpdate = false; + geometry.uvsNeedUpdate = false; + geometry.groupsNeedUpdate = false; + + geometry = direct; + + } + + var attribute; + + if ( geometry.verticesNeedUpdate === true ) { + + attribute = this.attributes.position; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.vertices ); + attribute.needsUpdate = true; + + } + + geometry.verticesNeedUpdate = false; + + } + + if ( geometry.normalsNeedUpdate === true ) { + + attribute = this.attributes.normal; + + if ( attribute !== undefined ) { + + attribute.copyVector3sArray( geometry.normals ); + attribute.needsUpdate = true; + + } + + geometry.normalsNeedUpdate = false; + + } + + if ( geometry.colorsNeedUpdate === true ) { + + attribute = this.attributes.color; + + if ( attribute !== undefined ) { + + attribute.copyColorsArray( geometry.colors ); + attribute.needsUpdate = true; + + } + + geometry.colorsNeedUpdate = false; + + } + + if ( geometry.uvsNeedUpdate ) { + + attribute = this.attributes.uv; + + if ( attribute !== undefined ) { + + attribute.copyVector2sArray( geometry.uvs ); + attribute.needsUpdate = true; + + } + + geometry.uvsNeedUpdate = false; + + } + + if ( geometry.lineDistancesNeedUpdate ) { + + attribute = this.attributes.lineDistance; + + if ( attribute !== undefined ) { + + attribute.copyArray( geometry.lineDistances ); + attribute.needsUpdate = true; + + } + + geometry.lineDistancesNeedUpdate = false; + + } + + if ( geometry.groupsNeedUpdate ) { + + geometry.computeGroups( object.geometry ); + this.groups = geometry.groups; + + geometry.groupsNeedUpdate = false; + + } + + return this; + + }, + + fromGeometry: function ( geometry ) { + + geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); + + return this.fromDirectGeometry( geometry.__directGeometry ); + + }, + + fromDirectGeometry: function ( geometry ) { + + var positions = new Float32Array( geometry.vertices.length * 3 ); + this.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); + + if ( geometry.normals.length > 0 ) { + + var normals = new Float32Array( geometry.normals.length * 3 ); + this.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); + + } + + if ( geometry.colors.length > 0 ) { + + var colors = new Float32Array( geometry.colors.length * 3 ); + this.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); + + } + + if ( geometry.uvs.length > 0 ) { + + var uvs = new Float32Array( geometry.uvs.length * 2 ); + this.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); + + } + + if ( geometry.uvs2.length > 0 ) { + + var uvs2 = new Float32Array( geometry.uvs2.length * 2 ); + this.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); + + } + + if ( geometry.indices.length > 0 ) { + + var TypeArray = arrayMax( geometry.indices ) > 65535 ? Uint32Array : Uint16Array; + var indices = new TypeArray( geometry.indices.length * 3 ); + this.setIndex( new BufferAttribute( indices, 1 ).copyIndicesArray( geometry.indices ) ); + + } + + // groups + + this.groups = geometry.groups; + + // morphs + + for ( var name in geometry.morphTargets ) { + + var array = []; + var morphTargets = geometry.morphTargets[ name ]; + + for ( var i = 0, l = morphTargets.length; i < l; i ++ ) { + + var morphTarget = morphTargets[ i ]; + + var attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 ); + + array.push( attribute.copyVector3sArray( morphTarget ) ); + + } + + this.morphAttributes[ name ] = array; + + } + + // skinning + + if ( geometry.skinIndices.length > 0 ) { + + var skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); + this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); + + } + + if ( geometry.skinWeights.length > 0 ) { + + var skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); + this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); + + } + + // + + if ( geometry.boundingSphere !== null ) { + + this.boundingSphere = geometry.boundingSphere.clone(); + + } + + if ( geometry.boundingBox !== null ) { + + this.boundingBox = geometry.boundingBox.clone(); + + } + + return this; + + }, + + computeBoundingBox: function () { + + if ( this.boundingBox === null ) { + + this.boundingBox = new Box3(); + + } + + var position = this.attributes.position; + + if ( position !== undefined ) { + + this.boundingBox.setFromBufferAttribute( position ); + + } else { + + this.boundingBox.makeEmpty(); + + } + + if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); + + } + + }, + + computeBoundingSphere: function () { + + var box = new Box3(); + var vector = new Vector3(); + + return function computeBoundingSphere() { + + if ( this.boundingSphere === null ) { + + this.boundingSphere = new Sphere(); + + } + + var position = this.attributes.position; + + if ( position ) { + + var center = this.boundingSphere.center; + + box.setFromBufferAttribute( position ); + box.getCenter( center ); + + // hoping to find a boundingSphere with a radius smaller than the + // boundingSphere of the boundingBox: sqrt(3) smaller in the best case + + var maxRadiusSq = 0; + + for ( var i = 0, il = position.count; i < il; i ++ ) { + + vector.x = position.getX( i ); + vector.y = position.getY( i ); + vector.z = position.getZ( i ); + maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); + + } + + this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); + + if ( isNaN( this.boundingSphere.radius ) ) { + + console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); + + } + + } + + }; + + }(), + + computeFaceNormals: function () { + + // backwards compatibility + + }, + + computeVertexNormals: function () { + + var index = this.index; + var attributes = this.attributes; + var groups = this.groups; + + if ( attributes.position ) { + + var positions = attributes.position.array; + + if ( attributes.normal === undefined ) { + + this.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) ); + + } else { + + // reset existing normals to zero + + var array = attributes.normal.array; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + array[ i ] = 0; + + } + + } + + var normals = attributes.normal.array; + + var vA, vB, vC; + var pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); + var cb = new Vector3(), ab = new Vector3(); + + // indexed elements + + if ( index ) { + + var indices = index.array; + + if ( groups.length === 0 ) { + + this.addGroup( 0, indices.length ); + + } + + for ( var j = 0, jl = groups.length; j < jl; ++ j ) { + + var group = groups[ j ]; + + var start = group.start; + var count = group.count; + + for ( var i = start, il = start + count; i < il; i += 3 ) { + + vA = indices[ i + 0 ] * 3; + vB = indices[ i + 1 ] * 3; + vC = indices[ i + 2 ] * 3; + + pA.fromArray( positions, vA ); + pB.fromArray( positions, vB ); + pC.fromArray( positions, vC ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normals[ vA ] += cb.x; + normals[ vA + 1 ] += cb.y; + normals[ vA + 2 ] += cb.z; + + normals[ vB ] += cb.x; + normals[ vB + 1 ] += cb.y; + normals[ vB + 2 ] += cb.z; + + normals[ vC ] += cb.x; + normals[ vC + 1 ] += cb.y; + normals[ vC + 2 ] += cb.z; + + } + + } + + } else { + + // non-indexed elements (unconnected triangle soup) + + for ( var i = 0, il = positions.length; i < il; i += 9 ) { + + pA.fromArray( positions, i ); + pB.fromArray( positions, i + 3 ); + pC.fromArray( positions, i + 6 ); + + cb.subVectors( pC, pB ); + ab.subVectors( pA, pB ); + cb.cross( ab ); + + normals[ i ] = cb.x; + normals[ i + 1 ] = cb.y; + normals[ i + 2 ] = cb.z; + + normals[ i + 3 ] = cb.x; + normals[ i + 4 ] = cb.y; + normals[ i + 5 ] = cb.z; + + normals[ i + 6 ] = cb.x; + normals[ i + 7 ] = cb.y; + normals[ i + 8 ] = cb.z; + + } + + } + + this.normalizeNormals(); + + attributes.normal.needsUpdate = true; + + } + + }, + + merge: function ( geometry, offset ) { + + if ( ! ( geometry && geometry.isBufferGeometry ) ) { + + console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); + return; + + } + + if ( offset === undefined ) offset = 0; + + var attributes = this.attributes; + + for ( var key in attributes ) { + + if ( geometry.attributes[ key ] === undefined ) continue; + + var attribute1 = attributes[ key ]; + var attributeArray1 = attribute1.array; + + var attribute2 = geometry.attributes[ key ]; + var attributeArray2 = attribute2.array; + + var attributeSize = attribute2.itemSize; + + for ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) { + + attributeArray1[ j ] = attributeArray2[ i ]; + + } + + } + + return this; + + }, + + normalizeNormals: function () { + + var vector = new Vector3(); + + return function normalizeNormals() { + + var normals = this.attributes.normal; + + for ( var i = 0, il = normals.count; i < il; i ++ ) { + + vector.x = normals.getX( i ); + vector.y = normals.getY( i ); + vector.z = normals.getZ( i ); + + vector.normalize(); + + normals.setXYZ( i, vector.x, vector.y, vector.z ); + + } + + }; + + }(), + + toNonIndexed: function () { + + if ( this.index === null ) { + + console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' ); + return this; + + } + + var geometry2 = new BufferGeometry(); + + var indices = this.index.array; + var attributes = this.attributes; + + for ( var name in attributes ) { + + var attribute = attributes[ name ]; + + var array = attribute.array; + var itemSize = attribute.itemSize; + + var array2 = new array.constructor( indices.length * itemSize ); + + var index = 0, index2 = 0; + + for ( var i = 0, l = indices.length; i < l; i ++ ) { + + index = indices[ i ] * itemSize; + + for ( var j = 0; j < itemSize; j ++ ) { + + array2[ index2 ++ ] = array[ index ++ ]; + + } + + } + + geometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) ); + + } + + return geometry2; + + }, + + toJSON: function () { + + var data = { + metadata: { + version: 4.5, + type: 'BufferGeometry', + generator: 'BufferGeometry.toJSON' + } + }; + + // standard BufferGeometry serialization + + data.uuid = this.uuid; + data.type = this.type; + if ( this.name !== '' ) data.name = this.name; + + if ( this.parameters !== undefined ) { + + var parameters = this.parameters; + + for ( var key in parameters ) { + + if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; + + } + + return data; + + } + + data.data = { attributes: {} }; + + var index = this.index; + + if ( index !== null ) { + + var array = Array.prototype.slice.call( index.array ); + + data.data.index = { + type: index.array.constructor.name, + array: array + }; + + } + + var attributes = this.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + + var array = Array.prototype.slice.call( attribute.array ); + + data.data.attributes[ key ] = { + itemSize: attribute.itemSize, + type: attribute.array.constructor.name, + array: array, + normalized: attribute.normalized + }; + + } + + var groups = this.groups; + + if ( groups.length > 0 ) { + + data.data.groups = JSON.parse( JSON.stringify( groups ) ); + + } + + var boundingSphere = this.boundingSphere; + + if ( boundingSphere !== null ) { + + data.data.boundingSphere = { + center: boundingSphere.center.toArray(), + radius: boundingSphere.radius + }; + + } + + return data; + + }, + + clone: function () { + + /* + // Handle primitives + + var parameters = this.parameters; + + if ( parameters !== undefined ) { + + var values = []; + + for ( var key in parameters ) { + + values.push( parameters[ key ] ); + + } + + var geometry = Object.create( this.constructor.prototype ); + this.constructor.apply( geometry, values ); + return geometry; + + } + + return new this.constructor().copy( this ); + */ + + return new BufferGeometry().copy( this ); + + }, + + copy: function ( source ) { + + var name, i, l; + + // reset + + this.index = null; + this.attributes = {}; + this.morphAttributes = {}; + this.groups = []; + this.boundingBox = null; + this.boundingSphere = null; + + // name + + this.name = source.name; + + // index + + var index = source.index; + + if ( index !== null ) { + + this.setIndex( index.clone() ); + + } + + // attributes + + var attributes = source.attributes; + + for ( name in attributes ) { + + var attribute = attributes[ name ]; + this.addAttribute( name, attribute.clone() ); + + } + + // morph attributes + + var morphAttributes = source.morphAttributes; + + for ( name in morphAttributes ) { + + var array = []; + var morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes + + for ( i = 0, l = morphAttribute.length; i < l; i ++ ) { + + array.push( morphAttribute[ i ].clone() ); + + } + + this.morphAttributes[ name ] = array; + + } + + // groups + + var groups = source.groups; + + for ( i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + this.addGroup( group.start, group.count, group.materialIndex ); + + } + + // bounding box + + var boundingBox = source.boundingBox; + + if ( boundingBox !== null ) { + + this.boundingBox = boundingBox.clone(); + + } + + // bounding sphere + + var boundingSphere = source.boundingSphere; + + if ( boundingSphere !== null ) { + + this.boundingSphere = boundingSphere.clone(); + + } + + // draw range + + this.drawRange.start = source.drawRange.start; + this.drawRange.count = source.drawRange.count; + + return this; + + }, + + dispose: function () { + + this.dispatchEvent( { type: 'dispose' } ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// BoxGeometry + +function BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + Geometry.call( this ); + + this.type = 'BoxGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + this.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) ); + this.mergeVertices(); + +} + +BoxGeometry.prototype = Object.create( Geometry.prototype ); +BoxGeometry.prototype.constructor = BoxGeometry; + +// BoxBufferGeometry + +function BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) { + + BufferGeometry.call( this ); + + this.type = 'BoxBufferGeometry'; + + this.parameters = { + width: width, + height: height, + depth: depth, + widthSegments: widthSegments, + heightSegments: heightSegments, + depthSegments: depthSegments + }; + + var scope = this; + + // segments + + widthSegments = Math.floor( widthSegments ) || 1; + heightSegments = Math.floor( heightSegments ) || 1; + depthSegments = Math.floor( depthSegments ) || 1; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var numberOfVertices = 0; + var groupStart = 0; + + // build each side of the box geometry + + buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px + buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx + buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py + buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny + buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz + buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { + + var segmentWidth = width / gridX; + var segmentHeight = height / gridY; + + var widthHalf = width / 2; + var heightHalf = height / 2; + var depthHalf = depth / 2; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var vertexCounter = 0; + var groupCount = 0; + + var ix, iy; + + var vector = new Vector3(); + + // generate vertices, normals and uvs + + for ( iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segmentHeight - heightHalf; + + for ( ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segmentWidth - widthHalf; + + // set values to correct vector component + + vector[ u ] = x * udir; + vector[ v ] = y * vdir; + vector[ w ] = depthHalf; + + // now apply vector to vertex buffer + + vertices.push( vector.x, vector.y, vector.z ); + + // set values to correct vector component + + vector[ u ] = 0; + vector[ v ] = 0; + vector[ w ] = depth > 0 ? 1 : - 1; + + // now apply vector to normal buffer + + normals.push( vector.x, vector.y, vector.z ); + + // uvs + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + // counters + + vertexCounter += 1; + + } + + } + + // indices + + // 1. you need three indices to draw a single face + // 2. a single segment consists of two faces + // 3. so we need to generate six (2*3) indices per segment + + for ( iy = 0; iy < gridY; iy ++ ) { + + for ( ix = 0; ix < gridX; ix ++ ) { + + var a = numberOfVertices + ix + gridX1 * iy; + var b = numberOfVertices + ix + gridX1 * ( iy + 1 ); + var c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 ); + var d = numberOfVertices + ( ix + 1 ) + gridX1 * iy; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // increase counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, materialIndex ); + + // calculate new start value for groups + + groupStart += groupCount; + + // update total number of vertices + + numberOfVertices += vertexCounter; + + } + +} + +BoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +BoxBufferGeometry.prototype.constructor = BoxBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// PlaneGeometry + +function PlaneGeometry( width, height, widthSegments, heightSegments ) { + + Geometry.call( this ); + + this.type = 'PlaneGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + this.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); + this.mergeVertices(); + +} + +PlaneGeometry.prototype = Object.create( Geometry.prototype ); +PlaneGeometry.prototype.constructor = PlaneGeometry; + +// PlaneBufferGeometry + +function PlaneBufferGeometry( width, height, widthSegments, heightSegments ) { + + BufferGeometry.call( this ); + + this.type = 'PlaneBufferGeometry'; + + this.parameters = { + width: width, + height: height, + widthSegments: widthSegments, + heightSegments: heightSegments + }; + + var width_half = width / 2; + var height_half = height / 2; + + var gridX = Math.floor( widthSegments ) || 1; + var gridY = Math.floor( heightSegments ) || 1; + + var gridX1 = gridX + 1; + var gridY1 = gridY + 1; + + var segment_width = width / gridX; + var segment_height = height / gridY; + + var ix, iy; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( iy = 0; iy < gridY1; iy ++ ) { + + var y = iy * segment_height - height_half; + + for ( ix = 0; ix < gridX1; ix ++ ) { + + var x = ix * segment_width - width_half; + + vertices.push( x, - y, 0 ); + + normals.push( 0, 0, 1 ); + + uvs.push( ix / gridX ); + uvs.push( 1 - ( iy / gridY ) ); + + } + + } + + // indices + + for ( iy = 0; iy < gridY; iy ++ ) { + + for ( ix = 0; ix < gridX; ix ++ ) { + + var a = ix + gridX1 * iy; + var b = ix + gridX1 * ( iy + 1 ); + var c = ( ix + 1 ) + gridX1 * ( iy + 1 ); + var d = ( ix + 1 ) + gridX1 * iy; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +PlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +PlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * depthTest: , + * depthWrite: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: + * } + */ + +function MeshBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshBasicMaterial'; + + this.color = new Color( 0xffffff ); // emissive + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + + this.lights = false; + + this.setValues( parameters ); + +} + +MeshBasicMaterial.prototype = Object.create( Material.prototype ); +MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; + +MeshBasicMaterial.prototype.isMeshBasicMaterial = true; + +MeshBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + + return this; + +}; + +/** + * @author bhouston / http://clara.io + */ + +function Ray( origin, direction ) { + + this.origin = ( origin !== undefined ) ? origin : new Vector3(); + this.direction = ( direction !== undefined ) ? direction : new Vector3(); + +} + +Object.assign( Ray.prototype, { + + set: function ( origin, direction ) { + + this.origin.copy( origin ); + this.direction.copy( direction ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( ray ) { + + this.origin.copy( ray.origin ); + this.direction.copy( ray.direction ); + + return this; + + }, + + at: function ( t, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return result.copy( this.direction ).multiplyScalar( t ).add( this.origin ); + + }, + + lookAt: function ( v ) { + + this.direction.copy( v ).sub( this.origin ).normalize(); + + return this; + + }, + + recast: function () { + + var v1 = new Vector3(); + + return function recast( t ) { + + this.origin.copy( this.at( t, v1 ) ); + + return this; + + }; + + }(), + + closestPointToPoint: function ( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + result.subVectors( point, this.origin ); + var directionDistance = result.dot( this.direction ); + + if ( directionDistance < 0 ) { + + return result.copy( this.origin ); + + } + + return result.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + }, + + distanceToPoint: function ( point ) { + + return Math.sqrt( this.distanceSqToPoint( point ) ); + + }, + + distanceSqToPoint: function () { + + var v1 = new Vector3(); + + return function distanceSqToPoint( point ) { + + var directionDistance = v1.subVectors( point, this.origin ).dot( this.direction ); + + // point behind the ray + + if ( directionDistance < 0 ) { + + return this.origin.distanceToSquared( point ); + + } + + v1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); + + return v1.distanceToSquared( point ); + + }; + + }(), + + distanceSqToSegment: function () { + + var segCenter = new Vector3(); + var segDir = new Vector3(); + var diff = new Vector3(); + + return function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h + // It returns the min distance between the ray and the segment + // defined by v0 and v1 + // It can also set two optional targets : + // - The closest point on the ray + // - The closest point on the segment + + segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); + segDir.copy( v1 ).sub( v0 ).normalize(); + diff.copy( this.origin ).sub( segCenter ); + + var segExtent = v0.distanceTo( v1 ) * 0.5; + var a01 = - this.direction.dot( segDir ); + var b0 = diff.dot( this.direction ); + var b1 = - diff.dot( segDir ); + var c = diff.lengthSq(); + var det = Math.abs( 1 - a01 * a01 ); + var s0, s1, sqrDist, extDet; + + if ( det > 0 ) { + + // The ray and segment are not parallel. + + s0 = a01 * b1 - b0; + s1 = a01 * b0 - b1; + extDet = segExtent * det; + + if ( s0 >= 0 ) { + + if ( s1 >= - extDet ) { + + if ( s1 <= extDet ) { + + // region 0 + // Minimum at interior points of ray and segment. + + var invDet = 1 / det; + s0 *= invDet; + s1 *= invDet; + sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; + + } else { + + // region 1 + + s1 = segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + // region 5 + + s1 = - segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } else { + + if ( s1 <= - extDet ) { + + // region 4 + + s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } else if ( s1 <= extDet ) { + + // region 3 + + s0 = 0; + s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = s1 * ( s1 + 2 * b1 ) + c; + + } else { + + // region 2 + + s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); + s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + } + + } else { + + // Ray and segment are parallel. + + s1 = ( a01 > 0 ) ? - segExtent : segExtent; + s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); + sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; + + } + + if ( optionalPointOnRay ) { + + optionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin ); + + } + + if ( optionalPointOnSegment ) { + + optionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter ); + + } + + return sqrDist; + + }; + + }(), + + intersectSphere: function () { + + var v1 = new Vector3(); + + return function intersectSphere( sphere, optionalTarget ) { + + v1.subVectors( sphere.center, this.origin ); + var tca = v1.dot( this.direction ); + var d2 = v1.dot( v1 ) - tca * tca; + var radius2 = sphere.radius * sphere.radius; + + if ( d2 > radius2 ) return null; + + var thc = Math.sqrt( radius2 - d2 ); + + // t0 = first intersect point - entrance on front of sphere + var t0 = tca - thc; + + // t1 = second intersect point - exit point on back of sphere + var t1 = tca + thc; + + // test to see if both t0 and t1 are behind the ray - if so, return null + if ( t0 < 0 && t1 < 0 ) return null; + + // test to see if t0 is behind the ray: + // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, + // in order to always return an intersect point that is in front of the ray. + if ( t0 < 0 ) return this.at( t1, optionalTarget ); + + // else t0 is in front of the ray, so return the first collision point scaled by t0 + return this.at( t0, optionalTarget ); + + }; + + }(), + + intersectsSphere: function ( sphere ) { + + return this.distanceToPoint( sphere.center ) <= sphere.radius; + + }, + + distanceToPlane: function ( plane ) { + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator === 0 ) { + + // line is coplanar, return origin + if ( plane.distanceToPoint( this.origin ) === 0 ) { + + return 0; + + } + + // Null is preferable to undefined since undefined means.... it is undefined + + return null; + + } + + var t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; + + // Return if the ray never intersects the plane + + return t >= 0 ? t : null; + + }, + + intersectPlane: function ( plane, optionalTarget ) { + + var t = this.distanceToPlane( plane ); + + if ( t === null ) { + + return null; + + } + + return this.at( t, optionalTarget ); + + }, + + intersectsPlane: function ( plane ) { + + // check if the ray lies on the plane first + + var distToPoint = plane.distanceToPoint( this.origin ); + + if ( distToPoint === 0 ) { + + return true; + + } + + var denominator = plane.normal.dot( this.direction ); + + if ( denominator * distToPoint < 0 ) { + + return true; + + } + + // ray origin is behind the plane (and is pointing behind it) + + return false; + + }, + + intersectBox: function ( box, optionalTarget ) { + + var tmin, tmax, tymin, tymax, tzmin, tzmax; + + var invdirx = 1 / this.direction.x, + invdiry = 1 / this.direction.y, + invdirz = 1 / this.direction.z; + + var origin = this.origin; + + if ( invdirx >= 0 ) { + + tmin = ( box.min.x - origin.x ) * invdirx; + tmax = ( box.max.x - origin.x ) * invdirx; + + } else { + + tmin = ( box.max.x - origin.x ) * invdirx; + tmax = ( box.min.x - origin.x ) * invdirx; + + } + + if ( invdiry >= 0 ) { + + tymin = ( box.min.y - origin.y ) * invdiry; + tymax = ( box.max.y - origin.y ) * invdiry; + + } else { + + tymin = ( box.max.y - origin.y ) * invdiry; + tymax = ( box.min.y - origin.y ) * invdiry; + + } + + if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null; + + // These lines also handle the case where tmin or tmax is NaN + // (result of 0 * Infinity). x !== x returns true if x is NaN + + if ( tymin > tmin || tmin !== tmin ) tmin = tymin; + + if ( tymax < tmax || tmax !== tmax ) tmax = tymax; + + if ( invdirz >= 0 ) { + + tzmin = ( box.min.z - origin.z ) * invdirz; + tzmax = ( box.max.z - origin.z ) * invdirz; + + } else { + + tzmin = ( box.max.z - origin.z ) * invdirz; + tzmax = ( box.min.z - origin.z ) * invdirz; + + } + + if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null; + + if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; + + if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax; + + //return point closest to the ray (positive side) + + if ( tmax < 0 ) return null; + + return this.at( tmin >= 0 ? tmin : tmax, optionalTarget ); + + }, + + intersectsBox: ( function () { + + var v = new Vector3(); + + return function intersectsBox( box ) { + + return this.intersectBox( box, v ) !== null; + + }; + + } )(), + + intersectTriangle: function () { + + // Compute the offset origin, edges, and normal. + var diff = new Vector3(); + var edge1 = new Vector3(); + var edge2 = new Vector3(); + var normal = new Vector3(); + + return function intersectTriangle( a, b, c, backfaceCulling, optionalTarget ) { + + // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h + + edge1.subVectors( b, a ); + edge2.subVectors( c, a ); + normal.crossVectors( edge1, edge2 ); + + // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, + // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by + // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) + // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) + // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) + var DdN = this.direction.dot( normal ); + var sign; + + if ( DdN > 0 ) { + + if ( backfaceCulling ) return null; + sign = 1; + + } else if ( DdN < 0 ) { + + sign = - 1; + DdN = - DdN; + + } else { + + return null; + + } + + diff.subVectors( this.origin, a ); + var DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) ); + + // b1 < 0, no intersection + if ( DdQxE2 < 0 ) { + + return null; + + } + + var DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) ); + + // b2 < 0, no intersection + if ( DdE1xQ < 0 ) { + + return null; + + } + + // b1+b2 > 1, no intersection + if ( DdQxE2 + DdE1xQ > DdN ) { + + return null; + + } + + // Line intersects triangle, check if ray does. + var QdN = - sign * diff.dot( normal ); + + // t < 0, no intersection + if ( QdN < 0 ) { + + return null; + + } + + // Ray intersects triangle. + return this.at( QdN / DdN, optionalTarget ); + + }; + + }(), + + applyMatrix4: function ( matrix4 ) { + + this.origin.applyMatrix4( matrix4 ); + this.direction.transformDirection( matrix4 ); + + return this; + + }, + + equals: function ( ray ) { + + return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + */ + +function Line3( start, end ) { + + this.start = ( start !== undefined ) ? start : new Vector3(); + this.end = ( end !== undefined ) ? end : new Vector3(); + +} + +Object.assign( Line3.prototype, { + + set: function ( start, end ) { + + this.start.copy( start ); + this.end.copy( end ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( line ) { + + this.start.copy( line.start ); + this.end.copy( line.end ); + + return this; + + }, + + getCenter: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); + + }, + + delta: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.subVectors( this.end, this.start ); + + }, + + distanceSq: function () { + + return this.start.distanceToSquared( this.end ); + + }, + + distance: function () { + + return this.start.distanceTo( this.end ); + + }, + + at: function ( t, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + return this.delta( result ).multiplyScalar( t ).add( this.start ); + + }, + + closestPointToPointParameter: function () { + + var startP = new Vector3(); + var startEnd = new Vector3(); + + return function closestPointToPointParameter( point, clampToLine ) { + + startP.subVectors( point, this.start ); + startEnd.subVectors( this.end, this.start ); + + var startEnd2 = startEnd.dot( startEnd ); + var startEnd_startP = startEnd.dot( startP ); + + var t = startEnd_startP / startEnd2; + + if ( clampToLine ) { + + t = _Math.clamp( t, 0, 1 ); + + } + + return t; + + }; + + }(), + + closestPointToPoint: function ( point, clampToLine, optionalTarget ) { + + var t = this.closestPointToPointParameter( point, clampToLine ); + + var result = optionalTarget || new Vector3(); + + return this.delta( result ).multiplyScalar( t ).add( this.start ); + + }, + + applyMatrix4: function ( matrix ) { + + this.start.applyMatrix4( matrix ); + this.end.applyMatrix4( matrix ); + + return this; + + }, + + equals: function ( line ) { + + return line.start.equals( this.start ) && line.end.equals( this.end ); + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author mrdoob / http://mrdoob.com/ + */ + +function Triangle( a, b, c ) { + + this.a = ( a !== undefined ) ? a : new Vector3(); + this.b = ( b !== undefined ) ? b : new Vector3(); + this.c = ( c !== undefined ) ? c : new Vector3(); + +} + +Object.assign( Triangle, { + + normal: function () { + + var v0 = new Vector3(); + + return function normal( a, b, c, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + + result.subVectors( c, b ); + v0.subVectors( a, b ); + result.cross( v0 ); + + var resultLengthSq = result.lengthSq(); + if ( resultLengthSq > 0 ) { + + return result.multiplyScalar( 1 / Math.sqrt( resultLengthSq ) ); + + } + + return result.set( 0, 0, 0 ); + + }; + + }(), + + // static/instance method to calculate barycentric coordinates + // based on: http://www.blackpawn.com/texts/pointinpoly/default.html + barycoordFromPoint: function () { + + var v0 = new Vector3(); + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function barycoordFromPoint( point, a, b, c, optionalTarget ) { + + v0.subVectors( c, a ); + v1.subVectors( b, a ); + v2.subVectors( point, a ); + + var dot00 = v0.dot( v0 ); + var dot01 = v0.dot( v1 ); + var dot02 = v0.dot( v2 ); + var dot11 = v1.dot( v1 ); + var dot12 = v1.dot( v2 ); + + var denom = ( dot00 * dot11 - dot01 * dot01 ); + + var result = optionalTarget || new Vector3(); + + // collinear or singular triangle + if ( denom === 0 ) { + + // arbitrary location outside of triangle? + // not sure if this is the best idea, maybe should be returning undefined + return result.set( - 2, - 1, - 1 ); + + } + + var invDenom = 1 / denom; + var u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; + var v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; + + // barycentric coordinates must always sum to 1 + return result.set( 1 - u - v, v, u ); + + }; + + }(), + + containsPoint: function () { + + var v1 = new Vector3(); + + return function containsPoint( point, a, b, c ) { + + var result = Triangle.barycoordFromPoint( point, a, b, c, v1 ); + + return ( result.x >= 0 ) && ( result.y >= 0 ) && ( ( result.x + result.y ) <= 1 ); + + }; + + }() + +} ); + +Object.assign( Triangle.prototype, { + + set: function ( a, b, c ) { + + this.a.copy( a ); + this.b.copy( b ); + this.c.copy( c ); + + return this; + + }, + + setFromPointsAndIndices: function ( points, i0, i1, i2 ) { + + this.a.copy( points[ i0 ] ); + this.b.copy( points[ i1 ] ); + this.c.copy( points[ i2 ] ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( triangle ) { + + this.a.copy( triangle.a ); + this.b.copy( triangle.b ); + this.c.copy( triangle.c ); + + return this; + + }, + + area: function () { + + var v0 = new Vector3(); + var v1 = new Vector3(); + + return function area() { + + v0.subVectors( this.c, this.b ); + v1.subVectors( this.a, this.b ); + + return v0.cross( v1 ).length() * 0.5; + + }; + + }(), + + midpoint: function ( optionalTarget ) { + + var result = optionalTarget || new Vector3(); + return result.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); + + }, + + normal: function ( optionalTarget ) { + + return Triangle.normal( this.a, this.b, this.c, optionalTarget ); + + }, + + plane: function ( optionalTarget ) { + + var result = optionalTarget || new Plane(); + + return result.setFromCoplanarPoints( this.a, this.b, this.c ); + + }, + + barycoordFromPoint: function ( point, optionalTarget ) { + + return Triangle.barycoordFromPoint( point, this.a, this.b, this.c, optionalTarget ); + + }, + + containsPoint: function ( point ) { + + return Triangle.containsPoint( point, this.a, this.b, this.c ); + + }, + + closestPointToPoint: function () { + + var plane = new Plane(); + var edgeList = [ new Line3(), new Line3(), new Line3() ]; + var projectedPoint = new Vector3(); + var closestPoint = new Vector3(); + + return function closestPointToPoint( point, optionalTarget ) { + + var result = optionalTarget || new Vector3(); + var minDistance = Infinity; + + // project the point onto the plane of the triangle + + plane.setFromCoplanarPoints( this.a, this.b, this.c ); + plane.projectPoint( point, projectedPoint ); + + // check if the projection lies within the triangle + + if( this.containsPoint( projectedPoint ) === true ) { + + // if so, this is the closest point + + result.copy( projectedPoint ); + + } else { + + // if not, the point falls outside the triangle. the result is the closest point to the triangle's edges or vertices + + edgeList[ 0 ].set( this.a, this.b ); + edgeList[ 1 ].set( this.b, this.c ); + edgeList[ 2 ].set( this.c, this.a ); + + for( var i = 0; i < edgeList.length; i ++ ) { + + edgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint ); + + var distance = projectedPoint.distanceToSquared( closestPoint ); + + if( distance < minDistance ) { + + minDistance = distance; + + result.copy( closestPoint ); + + } + + } + + } + + return result; + + }; + + }(), + + equals: function ( triangle ) { + + return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author mikael emtinger / http://gomo.se/ + * @author jonobr1 / http://jonobr1.com/ + */ + +function Mesh( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Mesh'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } ); + + this.drawMode = TrianglesDrawMode; + + this.updateMorphTargets(); + +} + +Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Mesh, + + isMesh: true, + + setDrawMode: function ( value ) { + + this.drawMode = value; + + }, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.drawMode = source.drawMode; + + return this; + + }, + + updateMorphTargets: function () { + + var geometry = this.geometry; + var m, ml, name; + + if ( geometry.isBufferGeometry ) { + + var morphAttributes = geometry.morphAttributes; + var keys = Object.keys( morphAttributes ); + + if ( keys.length > 0 ) { + + var morphAttribute = morphAttributes[ keys[ 0 ] ]; + + if ( morphAttribute !== undefined ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) { + + name = morphAttribute[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + } else { + + var morphTargets = geometry.morphTargets; + + if ( morphTargets !== undefined && morphTargets.length > 0 ) { + + this.morphTargetInfluences = []; + this.morphTargetDictionary = {}; + + for ( m = 0, ml = morphTargets.length; m < ml; m ++ ) { + + name = morphTargets[ m ].name || String( m ); + + this.morphTargetInfluences.push( 0 ); + this.morphTargetDictionary[ name ] = m; + + } + + } + + } + + }, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + var vA = new Vector3(); + var vB = new Vector3(); + var vC = new Vector3(); + + var tempA = new Vector3(); + var tempB = new Vector3(); + var tempC = new Vector3(); + + var uvA = new Vector2(); + var uvB = new Vector2(); + var uvC = new Vector2(); + + var barycoord = new Vector3(); + + var intersectionPoint = new Vector3(); + var intersectionPointWorld = new Vector3(); + + function uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) { + + Triangle.barycoordFromPoint( point, p1, p2, p3, barycoord ); + + uv1.multiplyScalar( barycoord.x ); + uv2.multiplyScalar( barycoord.y ); + uv3.multiplyScalar( barycoord.z ); + + uv1.add( uv2 ).add( uv3 ); + + return uv1.clone(); + + } + + function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { + + var intersect; + + if ( material.side === BackSide ) { + + intersect = ray.intersectTriangle( pC, pB, pA, true, point ); + + } else { + + intersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point ); + + } + + if ( intersect === null ) return null; + + intersectionPointWorld.copy( point ); + intersectionPointWorld.applyMatrix4( object.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( intersectionPointWorld ); + + if ( distance < raycaster.near || distance > raycaster.far ) return null; + + return { + distance: distance, + point: intersectionPointWorld.clone(), + object: object + }; + + } + + function checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) { + + vA.fromBufferAttribute( position, a ); + vB.fromBufferAttribute( position, b ); + vC.fromBufferAttribute( position, c ); + + var intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint ); + + if ( intersection ) { + + if ( uv ) { + + uvA.fromBufferAttribute( uv, a ); + uvB.fromBufferAttribute( uv, b ); + uvC.fromBufferAttribute( uv, c ); + + intersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC ); + + } + + intersection.face = new Face3( a, b, c, Triangle.normal( vA, vB, vC ) ); + intersection.faceIndex = a; + + } + + return intersection; + + } + + return function raycast( raycaster, intersects ) { + + var geometry = this.geometry; + var material = this.material; + var matrixWorld = this.matrixWorld; + + if ( material === undefined ) return; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + // Check boundingBox before continuing + + if ( geometry.boundingBox !== null ) { + + if ( ray.intersectsBox( geometry.boundingBox ) === false ) return; + + } + + var intersection; + + if ( geometry.isBufferGeometry ) { + + var a, b, c; + var index = geometry.index; + var position = geometry.attributes.position; + var uv = geometry.attributes.uv; + var i, l; + + if ( index !== null ) { + + // indexed buffer geometry + + for ( i = 0, l = index.count; i < l; i += 3 ) { + + a = index.getX( i ); + b = index.getX( i + 1 ); + c = index.getX( i + 2 ); + + intersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c ); + + if ( intersection ) { + + intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indices buffer semantics + intersects.push( intersection ); + + } + + } + + } else { + + // non-indexed buffer geometry + + for ( i = 0, l = position.count; i < l; i += 3 ) { + + a = i; + b = i + 1; + c = i + 2; + + intersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c ); + + if ( intersection ) { + + intersection.index = a; // triangle number in positions buffer semantics + intersects.push( intersection ); + + } + + } + + } + + } else if ( geometry.isGeometry ) { + + var fvA, fvB, fvC; + var isMultiMaterial = Array.isArray( material ); + + var vertices = geometry.vertices; + var faces = geometry.faces; + var uvs; + + var faceVertexUvs = geometry.faceVertexUvs[ 0 ]; + if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; + + for ( var f = 0, fl = faces.length; f < fl; f ++ ) { + + var face = faces[ f ]; + var faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; + + if ( faceMaterial === undefined ) continue; + + fvA = vertices[ face.a ]; + fvB = vertices[ face.b ]; + fvC = vertices[ face.c ]; + + if ( faceMaterial.morphTargets === true ) { + + var morphTargets = geometry.morphTargets; + var morphInfluences = this.morphTargetInfluences; + + vA.set( 0, 0, 0 ); + vB.set( 0, 0, 0 ); + vC.set( 0, 0, 0 ); + + for ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) { + + var influence = morphInfluences[ t ]; + + if ( influence === 0 ) continue; + + var targets = morphTargets[ t ].vertices; + + vA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence ); + vB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence ); + vC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence ); + + } + + vA.add( fvA ); + vB.add( fvB ); + vC.add( fvC ); + + fvA = vA; + fvB = vB; + fvC = vC; + + } + + intersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint ); + + if ( intersection ) { + + if ( uvs && uvs[ f ] ) { + + var uvs_f = uvs[ f ]; + uvA.copy( uvs_f[ 0 ] ); + uvB.copy( uvs_f[ 1 ] ); + uvC.copy( uvs_f[ 2 ] ); + + intersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC ); + + } + + intersection.face = face; + intersection.faceIndex = f; + intersects.push( intersection ); + + } + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLBackground( renderer, state, geometries, premultipliedAlpha ) { + + var clearColor = new Color( 0x000000 ); + var clearAlpha = 0; + + var planeCamera, planeMesh; + var boxMesh; + + function render( renderList, scene, camera, forceClear ) { + + var background = scene.background; + + if ( background === null ) { + + setClear( clearColor, clearAlpha ); + + } else if ( background && background.isColor ) { + + setClear( background, 1 ); + forceClear = true; + + } + + if ( renderer.autoClear || forceClear ) { + + renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); + + } + + if ( background && background.isCubeTexture ) { + + if ( boxMesh === undefined ) { + + boxMesh = new Mesh( + new BoxBufferGeometry( 1, 1, 1 ), + new ShaderMaterial( { + uniforms: ShaderLib.cube.uniforms, + vertexShader: ShaderLib.cube.vertexShader, + fragmentShader: ShaderLib.cube.fragmentShader, + side: BackSide, + depthTest: true, + depthWrite: false, + polygonOffset: true, + fog: false + } ) + ); + + boxMesh.geometry.removeAttribute( 'normal' ); + boxMesh.geometry.removeAttribute( 'uv' ); + + boxMesh.onBeforeRender = function ( renderer, scene, camera ) { + + var scale = camera.far; + + this.matrixWorld.makeScale( scale, scale, scale ); + this.matrixWorld.copyPosition( camera.matrixWorld ); + + this.material.polygonOffsetUnits = scale * 10; + + }; + + geometries.update( boxMesh.geometry ); + + } + + boxMesh.material.uniforms.tCube.value = background; + + renderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null ); + + } else if ( background && background.isTexture ) { + + if ( planeCamera === undefined ) { + + planeCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 ); + + planeMesh = new Mesh( + new PlaneBufferGeometry( 2, 2 ), + new MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } ) + ); + + geometries.update( planeMesh.geometry ); + + } + + planeMesh.material.map = background; + + // TODO Push this to renderList + + renderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null ); + + } + + } + + function setClear( color, alpha ) { + + state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); + + } + + return { + + getClearColor: function () { + + return clearColor; + + }, + setClearColor: function ( color, alpha ) { + + clearColor.set( color ); + clearAlpha = alpha !== undefined ? alpha : 1; + setClear( clearColor, clearAlpha ); + + }, + getClearAlpha: function () { + + return clearAlpha; + + }, + setClearAlpha: function ( alpha ) { + + clearAlpha = alpha; + setClear( clearColor, clearAlpha ); + + }, + render: render + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function painterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } else if ( a.program && b.program && a.program !== b.program ) { + + return a.program.id - b.program.id; + + } else if ( a.material.id !== b.material.id ) { + + return a.material.id - b.material.id; + + } else if ( a.z !== b.z ) { + + return a.z - b.z; + + } else { + + return a.id - b.id; + + } + +} + +function reversePainterSortStable( a, b ) { + + if ( a.renderOrder !== b.renderOrder ) { + + return a.renderOrder - b.renderOrder; + + } if ( a.z !== b.z ) { + + return b.z - a.z; + + } else { + + return a.id - b.id; + + } + +} + +function WebGLRenderList() { + + var renderItems = []; + var renderItemsIndex = 0; + + var opaque = []; + var transparent = []; + + function init() { + + renderItemsIndex = 0; + + opaque.length = 0; + transparent.length = 0; + + } + + function push( object, geometry, material, z, group ) { + + var renderItem = renderItems[ renderItemsIndex ]; + + if ( renderItem === undefined ) { + + renderItem = { + id: object.id, + object: object, + geometry: geometry, + material: material, + program: material.program, + renderOrder: object.renderOrder, + z: z, + group: group + }; + + renderItems[ renderItemsIndex ] = renderItem; + + } else { + + renderItem.id = object.id; + renderItem.object = object; + renderItem.geometry = geometry; + renderItem.material = material; + renderItem.program = material.program; + renderItem.renderOrder = object.renderOrder; + renderItem.z = z; + renderItem.group = group; + + } + + ( material.transparent === true ? transparent : opaque ).push( renderItem ); + + renderItemsIndex ++; + + } + + function sort() { + + if ( opaque.length > 1 ) opaque.sort( painterSortStable ); + if ( transparent.length > 1 ) transparent.sort( reversePainterSortStable ); + + } + + return { + opaque: opaque, + transparent: transparent, + + init: init, + push: push, + + sort: sort + }; + +} + +function WebGLRenderLists() { + + var lists = {}; + + function get( scene, camera ) { + + var hash = scene.id + ',' + camera.id; + var list = lists[ hash ]; + + if ( list === undefined ) { + + // console.log( 'THREE.WebGLRenderLists:', hash ); + + list = new WebGLRenderList(); + lists[ hash ] = list; + + } + + return list; + + } + + function dispose() { + + lists = {}; + + } + + return { + get: get, + dispose: dispose + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function absNumericalSort( a, b ) { + + return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); + +} + +function WebGLMorphtargets( gl ) { + + var influencesList = {}; + var morphInfluences = new Float32Array( 8 ); + + function update( object, geometry, material, program ) { + + var objectInfluences = object.morphTargetInfluences; + + var length = objectInfluences.length; + + var influences = influencesList[ geometry.id ]; + + if ( influences === undefined ) { + + // initialise list + + influences = []; + + for ( var i = 0; i < length; i ++ ) { + + influences[ i ] = [ i, 0 ]; + + } + + influencesList[ geometry.id ] = influences; + + } + + var morphTargets = material.morphTargets && geometry.morphAttributes.position; + var morphNormals = material.morphNormals && geometry.morphAttributes.normal; + + // Remove current morphAttributes + + for ( var i = 0; i < length; i ++ ) { + + var influence = influences[ i ]; + + if ( influence[ 1 ] !== 0 ) { + + if ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i ); + if ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i ); + + } + + } + + // Collect influences + + for ( var i = 0; i < length; i ++ ) { + + var influence = influences[ i ]; + + influence[ 0 ] = i; + influence[ 1 ] = objectInfluences[ i ]; + + } + + influences.sort( absNumericalSort ); + + // Add morphAttributes + + for ( var i = 0; i < 8; i ++ ) { + + var influence = influences[ i ]; + + if ( influence ) { + + var index = influence[ 0 ]; + var value = influence[ 1 ]; + + if ( value ) { + + if ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] ); + if ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] ); + + morphInfluences[ i ] = value; + continue; + + } + + } + + morphInfluences[ i ] = 0; + + } + + program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); + + } + + return { + + update: update + + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLIndexedBufferRenderer( gl, extensions, infoRender ) { + + var mode; + + function setMode( value ) { + + mode = value; + + } + + var type, bytesPerElement; + + function setIndex( value ) { + + type = value.type; + bytesPerElement = value.bytesPerElement; + + } + + function render( start, count ) { + + gl.drawElements( mode, count, type, start * bytesPerElement ); + + infoRender.calls ++; + infoRender.vertices += count; + + if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3; + else if ( mode === gl.POINTS ) infoRender.points += count; + + } + + function renderInstances( geometry, start, count ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extension === null ) { + + console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + extension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount ); + + infoRender.calls ++; + infoRender.vertices += count * geometry.maxInstancedCount; + + if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3; + else if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count; + + } + + // + + this.setMode = setMode; + this.setIndex = setIndex; + this.render = render; + this.renderInstances = renderInstances; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLBufferRenderer( gl, extensions, infoRender ) { + + var mode; + + function setMode( value ) { + + mode = value; + + } + + function render( start, count ) { + + gl.drawArrays( mode, start, count ); + + infoRender.calls ++; + infoRender.vertices += count; + + if ( mode === gl.TRIANGLES ) infoRender.faces += count / 3; + else if ( mode === gl.POINTS ) infoRender.points += count; + + } + + function renderInstances( geometry, start, count ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extension === null ) { + + console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + var position = geometry.attributes.position; + + if ( position.isInterleavedBufferAttribute ) { + + count = position.data.count; + + extension.drawArraysInstancedANGLE( mode, 0, count, geometry.maxInstancedCount ); + + } else { + + extension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount ); + + } + + infoRender.calls ++; + infoRender.vertices += count * geometry.maxInstancedCount; + + if ( mode === gl.TRIANGLES ) infoRender.faces += geometry.maxInstancedCount * count / 3; + else if ( mode === gl.POINTS ) infoRender.points += geometry.maxInstancedCount * count; + + } + + // + + this.setMode = setMode; + this.render = render; + this.renderInstances = renderInstances; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLGeometries( gl, attributes, infoMemory ) { + + var geometries = {}; + var wireframeAttributes = {}; + + function onGeometryDispose( event ) { + + var geometry = event.target; + var buffergeometry = geometries[ geometry.id ]; + + if ( buffergeometry.index !== null ) { + + attributes.remove( buffergeometry.index ); + + } + + for ( var name in buffergeometry.attributes ) { + + attributes.remove( buffergeometry.attributes[ name ] ); + + } + + geometry.removeEventListener( 'dispose', onGeometryDispose ); + + delete geometries[ geometry.id ]; + + // TODO Remove duplicate code + + var attribute = wireframeAttributes[ geometry.id ]; + + if ( attribute ) { + + attributes.remove( attribute ); + delete wireframeAttributes[ geometry.id ]; + + } + + attribute = wireframeAttributes[ buffergeometry.id ]; + + if ( attribute ) { + + attributes.remove( attribute ); + delete wireframeAttributes[ buffergeometry.id ]; + + } + + // + + infoMemory.geometries --; + + } + + function get( object, geometry ) { + + var buffergeometry = geometries[ geometry.id ]; + + if ( buffergeometry ) return buffergeometry; + + geometry.addEventListener( 'dispose', onGeometryDispose ); + + if ( geometry.isBufferGeometry ) { + + buffergeometry = geometry; + + } else if ( geometry.isGeometry ) { + + if ( geometry._bufferGeometry === undefined ) { + + geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); + + } + + buffergeometry = geometry._bufferGeometry; + + } + + geometries[ geometry.id ] = buffergeometry; + + infoMemory.geometries ++; + + return buffergeometry; + + } + + function update( geometry ) { + + var index = geometry.index; + var geometryAttributes = geometry.attributes; + + if ( index !== null ) { + + attributes.update( index, gl.ELEMENT_ARRAY_BUFFER ); + + } + + for ( var name in geometryAttributes ) { + + attributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER ); + + } + + // morph targets + + var morphAttributes = geometry.morphAttributes; + + for ( var name in morphAttributes ) { + + var array = morphAttributes[ name ]; + + for ( var i = 0, l = array.length; i < l; i ++ ) { + + attributes.update( array[ i ], gl.ARRAY_BUFFER ); + + } + + } + + } + + function getWireframeAttribute( geometry ) { + + var attribute = wireframeAttributes[ geometry.id ]; + + if ( attribute ) return attribute; + + var indices = []; + + var geometryIndex = geometry.index; + var geometryAttributes = geometry.attributes; + + // console.time( 'wireframe' ); + + if ( geometryIndex !== null ) { + + var array = geometryIndex.array; + + for ( var i = 0, l = array.length; i < l; i += 3 ) { + + var a = array[ i + 0 ]; + var b = array[ i + 1 ]; + var c = array[ i + 2 ]; + + indices.push( a, b, b, c, c, a ); + + } + + } else { + + var array = geometryAttributes.position.array; + + for ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { + + var a = i + 0; + var b = i + 1; + var c = i + 2; + + indices.push( a, b, b, c, c, a ); + + } + + } + + // console.timeEnd( 'wireframe' ); + + attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); + + attributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER ); + + wireframeAttributes[ geometry.id ] = attribute; + + return attribute; + + } + + return { + + get: get, + update: update, + + getWireframeAttribute: getWireframeAttribute + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function UniformsCache() { + + var lights = {}; + + return { + + get: function ( light ) { + + if ( lights[ light.id ] !== undefined ) { + + return lights[ light.id ]; + + } + + var uniforms; + + switch ( light.type ) { + + case 'DirectionalLight': + uniforms = { + direction: new Vector3(), + color: new Color(), + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'SpotLight': + uniforms = { + position: new Vector3(), + direction: new Vector3(), + color: new Color(), + distance: 0, + coneCos: 0, + penumbraCos: 0, + decay: 0, + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2() + }; + break; + + case 'PointLight': + uniforms = { + position: new Vector3(), + color: new Color(), + distance: 0, + decay: 0, + + shadow: false, + shadowBias: 0, + shadowRadius: 1, + shadowMapSize: new Vector2(), + shadowCameraNear: 1, + shadowCameraFar: 1000 + }; + break; + + case 'HemisphereLight': + uniforms = { + direction: new Vector3(), + skyColor: new Color(), + groundColor: new Color() + }; + break; + + case 'RectAreaLight': + uniforms = { + color: new Color(), + position: new Vector3(), + halfWidth: new Vector3(), + halfHeight: new Vector3() + // TODO (abelnation): set RectAreaLight shadow uniforms + }; + break; + + } + + lights[ light.id ] = uniforms; + + return uniforms; + + } + + }; + +} + +function WebGLLights() { + + var cache = new UniformsCache(); + + var state = { + + hash: '', + + ambient: [ 0, 0, 0 ], + directional: [], + directionalShadowMap: [], + directionalShadowMatrix: [], + spot: [], + spotShadowMap: [], + spotShadowMatrix: [], + rectArea: [], + point: [], + pointShadowMap: [], + pointShadowMatrix: [], + hemi: [] + + }; + + var vector3 = new Vector3(); + var matrix4 = new Matrix4(); + var matrix42 = new Matrix4(); + + function setup( lights, shadows, camera ) { + + var r = 0, g = 0, b = 0; + + var directionalLength = 0; + var pointLength = 0; + var spotLength = 0; + var rectAreaLength = 0; + var hemiLength = 0; + + var viewMatrix = camera.matrixWorldInverse; + + for ( var i = 0, l = lights.length; i < l; i ++ ) { + + var light = lights[ i ]; + + var color = light.color; + var intensity = light.intensity; + var distance = light.distance; + + var shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; + + if ( light.isAmbientLight ) { + + r += color.r * intensity; + g += color.g * intensity; + b += color.b * intensity; + + } else if ( light.isDirectionalLight ) { + + var uniforms = cache.get( light ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + + } + + state.directionalShadowMap[ directionalLength ] = shadowMap; + state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; + state.directional[ directionalLength ] = uniforms; + + directionalLength ++; + + } else if ( light.isSpotLight ) { + + var uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( color ).multiplyScalar( intensity ); + uniforms.distance = distance; + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + vector3.setFromMatrixPosition( light.target.matrixWorld ); + uniforms.direction.sub( vector3 ); + uniforms.direction.transformDirection( viewMatrix ); + + uniforms.coneCos = Math.cos( light.angle ); + uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); + uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + + } + + state.spotShadowMap[ spotLength ] = shadowMap; + state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; + state.spot[ spotLength ] = uniforms; + + spotLength ++; + + } else if ( light.isRectAreaLight ) { + + var uniforms = cache.get( light ); + + // (a) intensity controls irradiance of entire light + uniforms.color + .copy( color ) + .multiplyScalar( intensity / ( light.width * light.height ) ); + + // (b) intensity controls the radiance per light area + // uniforms.color.copy( color ).multiplyScalar( intensity ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + // extract local rotation of light to derive width/height half vectors + matrix42.identity(); + matrix4.copy( light.matrixWorld ); + matrix4.premultiply( viewMatrix ); + matrix42.extractRotation( matrix4 ); + + uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); + uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); + + uniforms.halfWidth.applyMatrix4( matrix42 ); + uniforms.halfHeight.applyMatrix4( matrix42 ); + + // TODO (abelnation): RectAreaLight distance? + // uniforms.distance = distance; + + state.rectArea[ rectAreaLength ] = uniforms; + + rectAreaLength ++; + + } else if ( light.isPointLight ) { + + var uniforms = cache.get( light ); + + uniforms.position.setFromMatrixPosition( light.matrixWorld ); + uniforms.position.applyMatrix4( viewMatrix ); + + uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); + uniforms.distance = light.distance; + uniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay; + + uniforms.shadow = light.castShadow; + + if ( light.castShadow ) { + + var shadow = light.shadow; + + uniforms.shadowBias = shadow.bias; + uniforms.shadowRadius = shadow.radius; + uniforms.shadowMapSize = shadow.mapSize; + uniforms.shadowCameraNear = shadow.camera.near; + uniforms.shadowCameraFar = shadow.camera.far; + + } + + state.pointShadowMap[ pointLength ] = shadowMap; + state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; + state.point[ pointLength ] = uniforms; + + pointLength ++; + + } else if ( light.isHemisphereLight ) { + + var uniforms = cache.get( light ); + + uniforms.direction.setFromMatrixPosition( light.matrixWorld ); + uniforms.direction.transformDirection( viewMatrix ); + uniforms.direction.normalize(); + + uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); + uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); + + state.hemi[ hemiLength ] = uniforms; + + hemiLength ++; + + } + + } + + state.ambient[ 0 ] = r; + state.ambient[ 1 ] = g; + state.ambient[ 2 ] = b; + + state.directional.length = directionalLength; + state.spot.length = spotLength; + state.rectArea.length = rectAreaLength; + state.point.length = pointLength; + state.hemi.length = hemiLength; + + // TODO (sam-g-steel) why aren't we using join + state.hash = directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length; + + } + + return { + setup: setup, + state: state + } + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLObjects( geometries, infoRender ) { + + var updateList = {}; + + function update( object ) { + + var frame = infoRender.frame; + + var geometry = object.geometry; + var buffergeometry = geometries.get( object, geometry ); + + // Update once per frame + + if ( updateList[ buffergeometry.id ] !== frame ) { + + if ( geometry.isGeometry ) { + + buffergeometry.updateFromObject( object ); + + } + + geometries.update( buffergeometry ); + + updateList[ buffergeometry.id ] = frame; + + } + + return buffergeometry; + + } + + function clear() { + + updateList = {}; + + } + + return { + + update: update, + clear: clear + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function addLineNumbers( string ) { + + var lines = string.split( '\n' ); + + for ( var i = 0; i < lines.length; i ++ ) { + + lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; + + } + + return lines.join( '\n' ); + +} + +function WebGLShader( gl, type, string ) { + + var shader = gl.createShader( type ); + + gl.shaderSource( shader, string ); + gl.compileShader( shader ); + + if ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) { + + console.error( 'THREE.WebGLShader: Shader couldn\'t compile.' ); + + } + + if ( gl.getShaderInfoLog( shader ) !== '' ) { + + console.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) ); + + } + + // --enable-privileged-webgl-extension + // console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); + + return shader; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var programIdCount = 0; + +function getEncodingComponents( encoding ) { + + switch ( encoding ) { + + case LinearEncoding: + return [ 'Linear','( value )' ]; + case sRGBEncoding: + return [ 'sRGB','( value )' ]; + case RGBEEncoding: + return [ 'RGBE','( value )' ]; + case RGBM7Encoding: + return [ 'RGBM','( value, 7.0 )' ]; + case RGBM16Encoding: + return [ 'RGBM','( value, 16.0 )' ]; + case RGBDEncoding: + return [ 'RGBD','( value, 256.0 )' ]; + case GammaEncoding: + return [ 'Gamma','( value, float( GAMMA_FACTOR ) )' ]; + default: + throw new Error( 'unsupported encoding: ' + encoding ); + + } + +} + +function getTexelDecodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return "vec4 " + functionName + "( vec4 value ) { return " + components[ 0 ] + "ToLinear" + components[ 1 ] + "; }"; + +} + +function getTexelEncodingFunction( functionName, encoding ) { + + var components = getEncodingComponents( encoding ); + return "vec4 " + functionName + "( vec4 value ) { return LinearTo" + components[ 0 ] + components[ 1 ] + "; }"; + +} + +function getToneMappingFunction( functionName, toneMapping ) { + + var toneMappingName; + + switch ( toneMapping ) { + + case LinearToneMapping: + toneMappingName = "Linear"; + break; + + case ReinhardToneMapping: + toneMappingName = "Reinhard"; + break; + + case Uncharted2ToneMapping: + toneMappingName = "Uncharted2"; + break; + + case CineonToneMapping: + toneMappingName = "OptimizedCineon"; + break; + + default: + throw new Error( 'unsupported toneMapping: ' + toneMapping ); + + } + + return "vec3 " + functionName + "( vec3 color ) { return " + toneMappingName + "ToneMapping( color ); }"; + +} + +function generateExtensions( extensions, parameters, rendererExtensions ) { + + extensions = extensions || {}; + + var chunks = [ + ( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '', + ( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '', + ( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '', + ( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : '' + ]; + + return chunks.filter( filterEmptyLine ).join( '\n' ); + +} + +function generateDefines( defines ) { + + var chunks = []; + + for ( var name in defines ) { + + var value = defines[ name ]; + + if ( value === false ) continue; + + chunks.push( '#define ' + name + ' ' + value ); + + } + + return chunks.join( '\n' ); + +} + +function fetchAttributeLocations( gl, program, identifiers ) { + + var attributes = {}; + + var n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES ); + + for ( var i = 0; i < n; i ++ ) { + + var info = gl.getActiveAttrib( program, i ); + var name = info.name; + + // console.log("THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:", name, i ); + + attributes[ name ] = gl.getAttribLocation( program, name ); + + } + + return attributes; + +} + +function filterEmptyLine( string ) { + + return string !== ''; + +} + +function replaceLightNums( string, parameters ) { + + return string + .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) + .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) + .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) + .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) + .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ); + +} + +function parseIncludes( string ) { + + var pattern = /^[ \t]*#include +<([\w\d.]+)>/gm; + + function replace( match, include ) { + + var replace = ShaderChunk[ include ]; + + if ( replace === undefined ) { + + throw new Error( 'Can not resolve #include <' + include + '>' ); + + } + + return parseIncludes( replace ); + + } + + return string.replace( pattern, replace ); + +} + +function unrollLoops( string ) { + + var pattern = /for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; + + function replace( match, start, end, snippet ) { + + var unroll = ''; + + for ( var i = parseInt( start ); i < parseInt( end ); i ++ ) { + + unroll += snippet.replace( /\[ i \]/g, '[ ' + i + ' ]' ); + + } + + return unroll; + + } + + return string.replace( pattern, replace ); + +} + +function WebGLProgram( renderer, extensions, code, material, shader, parameters ) { + + var gl = renderer.context; + + var defines = material.defines; + + var vertexShader = shader.vertexShader; + var fragmentShader = shader.fragmentShader; + + var shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; + + if ( parameters.shadowMapType === PCFShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; + + } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { + + shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; + + } + + var envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + var envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; + var envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + + if ( parameters.envMap ) { + + switch ( material.envMap.mapping ) { + + case CubeReflectionMapping: + case CubeRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; + break; + + case CubeUVReflectionMapping: + case CubeUVRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; + break; + + case EquirectangularReflectionMapping: + case EquirectangularRefractionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_EQUIREC'; + break; + + case SphericalReflectionMapping: + envMapTypeDefine = 'ENVMAP_TYPE_SPHERE'; + break; + + } + + switch ( material.envMap.mapping ) { + + case CubeRefractionMapping: + case EquirectangularRefractionMapping: + envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; + break; + + } + + switch ( material.combine ) { + + case MultiplyOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; + break; + + case MixOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; + break; + + case AddOperation: + envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; + break; + + } + + } + + var gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; + + // console.log( 'building new program ' ); + + // + + var customExtensions = generateExtensions( material.extensions, parameters, extensions ); + + var customDefines = generateDefines( defines ); + + // + + var program = gl.createProgram(); + + var prefixVertex, prefixFragment; + + if ( material.isRawShaderMaterial ) { + + prefixVertex = [ + + customDefines, + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + customDefines, + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } else { + + prefixVertex = [ + + 'precision ' + parameters.precision + ' float;', + 'precision ' + parameters.precision + ' int;', + + '#define SHADER_NAME ' + shader.name, + + customDefines, + + parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + '#define MAX_BONES ' + parameters.maxBones, + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.skinning ? '#define USE_SKINNING' : '', + parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', + + parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', + parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + parameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + 'uniform mat4 modelMatrix;', + 'uniform mat4 modelViewMatrix;', + 'uniform mat4 projectionMatrix;', + 'uniform mat4 viewMatrix;', + 'uniform mat3 normalMatrix;', + 'uniform vec3 cameraPosition;', + + 'attribute vec3 position;', + 'attribute vec3 normal;', + 'attribute vec2 uv;', + + '#ifdef USE_COLOR', + + ' attribute vec3 color;', + + '#endif', + + '#ifdef USE_MORPHTARGETS', + + ' attribute vec3 morphTarget0;', + ' attribute vec3 morphTarget1;', + ' attribute vec3 morphTarget2;', + ' attribute vec3 morphTarget3;', + + ' #ifdef USE_MORPHNORMALS', + + ' attribute vec3 morphNormal0;', + ' attribute vec3 morphNormal1;', + ' attribute vec3 morphNormal2;', + ' attribute vec3 morphNormal3;', + + ' #else', + + ' attribute vec3 morphTarget4;', + ' attribute vec3 morphTarget5;', + ' attribute vec3 morphTarget6;', + ' attribute vec3 morphTarget7;', + + ' #endif', + + '#endif', + + '#ifdef USE_SKINNING', + + ' attribute vec4 skinIndex;', + ' attribute vec4 skinWeight;', + + '#endif', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + prefixFragment = [ + + customExtensions, + + 'precision ' + parameters.precision + ' float;', + 'precision ' + parameters.precision + ' int;', + + '#define SHADER_NAME ' + shader.name, + + customDefines, + + parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest : '', + + '#define GAMMA_FACTOR ' + gammaFactorDefine, + + ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', + ( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '', + + parameters.map ? '#define USE_MAP' : '', + parameters.envMap ? '#define USE_ENVMAP' : '', + parameters.envMap ? '#define ' + envMapTypeDefine : '', + parameters.envMap ? '#define ' + envMapModeDefine : '', + parameters.envMap ? '#define ' + envMapBlendingDefine : '', + parameters.lightMap ? '#define USE_LIGHTMAP' : '', + parameters.aoMap ? '#define USE_AOMAP' : '', + parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', + parameters.bumpMap ? '#define USE_BUMPMAP' : '', + parameters.normalMap ? '#define USE_NORMALMAP' : '', + parameters.specularMap ? '#define USE_SPECULARMAP' : '', + parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', + parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', + parameters.alphaMap ? '#define USE_ALPHAMAP' : '', + parameters.vertexColors ? '#define USE_COLOR' : '', + + parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', + + parameters.flatShading ? '#define FLAT_SHADED' : '', + + parameters.doubleSided ? '#define DOUBLE_SIDED' : '', + parameters.flipSided ? '#define FLIP_SIDED' : '', + + '#define NUM_CLIPPING_PLANES ' + parameters.numClippingPlanes, + '#define UNION_CLIPPING_PLANES ' + (parameters.numClippingPlanes - parameters.numClipIntersection), + + parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', + parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', + + parameters.premultipliedAlpha ? "#define PREMULTIPLIED_ALPHA" : '', + + parameters.physicallyCorrectLights ? "#define PHYSICALLY_CORRECT_LIGHTS" : '', + + parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', + parameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '', + + parameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '', + + 'uniform mat4 viewMatrix;', + 'uniform vec3 cameraPosition;', + + ( parameters.toneMapping !== NoToneMapping ) ? "#define TONE_MAPPING" : '', + ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below + ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( "toneMapping", parameters.toneMapping ) : '', + + parameters.dithering ? '#define DITHERING' : '', + + ( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below + parameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', + parameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', + parameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', + parameters.outputEncoding ? getTexelEncodingFunction( "linearToOutputTexel", parameters.outputEncoding ) : '', + + parameters.depthPacking ? "#define DEPTH_PACKING " + material.depthPacking : '', + + '\n' + + ].filter( filterEmptyLine ).join( '\n' ); + + } + + vertexShader = parseIncludes( vertexShader ); + vertexShader = replaceLightNums( vertexShader, parameters ); + + fragmentShader = parseIncludes( fragmentShader ); + fragmentShader = replaceLightNums( fragmentShader, parameters ); + + if ( ! material.isShaderMaterial ) { + + vertexShader = unrollLoops( vertexShader ); + fragmentShader = unrollLoops( fragmentShader ); + + } + + var vertexGlsl = prefixVertex + vertexShader; + var fragmentGlsl = prefixFragment + fragmentShader; + + // console.log( '*VERTEX*', vertexGlsl ); + // console.log( '*FRAGMENT*', fragmentGlsl ); + + var glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl ); + var glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl ); + + gl.attachShader( program, glVertexShader ); + gl.attachShader( program, glFragmentShader ); + + // Force a particular attribute to index 0. + + if ( material.index0AttributeName !== undefined ) { + + gl.bindAttribLocation( program, 0, material.index0AttributeName ); + + } else if ( parameters.morphTargets === true ) { + + // programs with morphTargets displace position out of attribute 0 + gl.bindAttribLocation( program, 0, 'position' ); + + } + + gl.linkProgram( program ); + + var programLog = gl.getProgramInfoLog( program ); + var vertexLog = gl.getShaderInfoLog( glVertexShader ); + var fragmentLog = gl.getShaderInfoLog( glFragmentShader ); + + var runnable = true; + var haveDiagnostics = true; + + // console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) ); + // console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) ); + + if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) { + + runnable = false; + + console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog ); + + } else if ( programLog !== '' ) { + + console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); + + } else if ( vertexLog === '' || fragmentLog === '' ) { + + haveDiagnostics = false; + + } + + if ( haveDiagnostics ) { + + this.diagnostics = { + + runnable: runnable, + material: material, + + programLog: programLog, + + vertexShader: { + + log: vertexLog, + prefix: prefixVertex + + }, + + fragmentShader: { + + log: fragmentLog, + prefix: prefixFragment + + } + + }; + + } + + // clean up + + gl.deleteShader( glVertexShader ); + gl.deleteShader( glFragmentShader ); + + // set up caching for uniform locations + + var cachedUniforms; + + this.getUniforms = function () { + + if ( cachedUniforms === undefined ) { + + cachedUniforms = new WebGLUniforms( gl, program, renderer ); + + } + + return cachedUniforms; + + }; + + // set up caching for attribute locations + + var cachedAttributes; + + this.getAttributes = function () { + + if ( cachedAttributes === undefined ) { + + cachedAttributes = fetchAttributeLocations( gl, program ); + + } + + return cachedAttributes; + + }; + + // free resource + + this.destroy = function() { + + gl.deleteProgram( program ); + this.program = undefined; + + }; + + // DEPRECATED + + Object.defineProperties( this, { + + uniforms: { + get: function() { + + console.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' ); + return this.getUniforms(); + + } + }, + + attributes: { + get: function() { + + console.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' ); + return this.getAttributes(); + + } + } + + } ); + + + // + + this.id = programIdCount ++; + this.code = code; + this.usedTimes = 1; + this.program = program; + this.vertexShader = glVertexShader; + this.fragmentShader = glFragmentShader; + + return this; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLPrograms( renderer, extensions, capabilities ) { + + var programs = []; + + var shaderIDs = { + MeshDepthMaterial: 'depth', + MeshDistanceMaterial: 'distanceRGBA', + MeshNormalMaterial: 'normal', + MeshBasicMaterial: 'basic', + MeshLambertMaterial: 'lambert', + MeshPhongMaterial: 'phong', + MeshToonMaterial: 'phong', + MeshStandardMaterial: 'physical', + MeshPhysicalMaterial: 'physical', + LineBasicMaterial: 'basic', + LineDashedMaterial: 'dashed', + PointsMaterial: 'points', + ShadowMaterial: 'shadow' + }; + + var parameterNames = [ + "precision", "supportsVertexTextures", "map", "mapEncoding", "envMap", "envMapMode", "envMapEncoding", + "lightMap", "aoMap", "emissiveMap", "emissiveMapEncoding", "bumpMap", "normalMap", "displacementMap", "specularMap", + "roughnessMap", "metalnessMap", "gradientMap", + "alphaMap", "combine", "vertexColors", "fog", "useFog", "fogExp", + "flatShading", "sizeAttenuation", "logarithmicDepthBuffer", "skinning", + "maxBones", "useVertexTexture", "morphTargets", "morphNormals", + "maxMorphTargets", "maxMorphNormals", "premultipliedAlpha", + "numDirLights", "numPointLights", "numSpotLights", "numHemiLights", "numRectAreaLights", + "shadowMapEnabled", "shadowMapType", "toneMapping", 'physicallyCorrectLights', + "alphaTest", "doubleSided", "flipSided", "numClippingPlanes", "numClipIntersection", "depthPacking", "dithering" + ]; + + + function allocateBones( object ) { + + var skeleton = object.skeleton; + var bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + return 1024; + + } else { + + // default for when object is not specified + // ( for example when prebuilding shader to be used with multiple objects ) + // + // - leave some extra space for other uniforms + // - limit here is ANGLE's 254 max uniform vectors + // (up to 54 should be safe) + + var nVertexUniforms = capabilities.maxVertexUniforms; + var nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); + + var maxBones = Math.min( nVertexMatrices, bones.length ); + + if ( maxBones < bones.length ) { + + console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); + return 0; + + } + + return maxBones; + + } + + } + + function getTextureEncodingFromMap( map, gammaOverrideLinear ) { + + var encoding; + + if ( ! map ) { + + encoding = LinearEncoding; + + } else if ( map.isTexture ) { + + encoding = map.encoding; + + } else if ( map.isWebGLRenderTarget ) { + + console.warn( "THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead." ); + encoding = map.texture.encoding; + + } + + // add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point. + if ( encoding === LinearEncoding && gammaOverrideLinear ) { + + encoding = GammaEncoding; + + } + + return encoding; + + } + + this.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) { + + var shaderID = shaderIDs[ material.type ]; + + // heuristics to create shader parameters according to lights in the scene + // (not to blow over maxLights budget) + + var maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0; + var precision = capabilities.precision; + + if ( material.precision !== null ) { + + precision = capabilities.getMaxPrecision( material.precision ); + + if ( precision !== material.precision ) { + + console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); + + } + + } + + var currentRenderTarget = renderer.getRenderTarget(); + + var parameters = { + + shaderID: shaderID, + + precision: precision, + supportsVertexTextures: capabilities.vertexTextures, + outputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ), + map: !! material.map, + mapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ), + envMap: !! material.envMap, + envMapMode: material.envMap && material.envMap.mapping, + envMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ), + envMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ), + lightMap: !! material.lightMap, + aoMap: !! material.aoMap, + emissiveMap: !! material.emissiveMap, + emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ), + bumpMap: !! material.bumpMap, + normalMap: !! material.normalMap, + displacementMap: !! material.displacementMap, + roughnessMap: !! material.roughnessMap, + metalnessMap: !! material.metalnessMap, + specularMap: !! material.specularMap, + alphaMap: !! material.alphaMap, + + gradientMap: !! material.gradientMap, + + combine: material.combine, + + vertexColors: material.vertexColors, + + fog: !! fog, + useFog: material.fog, + fogExp: ( fog && fog.isFogExp2 ), + + flatShading: material.flatShading, + + sizeAttenuation: material.sizeAttenuation, + logarithmicDepthBuffer: capabilities.logarithmicDepthBuffer, + + skinning: material.skinning && maxBones > 0, + maxBones: maxBones, + useVertexTexture: capabilities.floatVertexTextures, + + morphTargets: material.morphTargets, + morphNormals: material.morphNormals, + maxMorphTargets: renderer.maxMorphTargets, + maxMorphNormals: renderer.maxMorphNormals, + + numDirLights: lights.directional.length, + numPointLights: lights.point.length, + numSpotLights: lights.spot.length, + numRectAreaLights: lights.rectArea.length, + numHemiLights: lights.hemi.length, + + numClippingPlanes: nClipPlanes, + numClipIntersection: nClipIntersection, + + dithering: material.dithering, + + shadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0, + shadowMapType: renderer.shadowMap.type, + + toneMapping: renderer.toneMapping, + physicallyCorrectLights: renderer.physicallyCorrectLights, + + premultipliedAlpha: material.premultipliedAlpha, + + alphaTest: material.alphaTest, + doubleSided: material.side === DoubleSide, + flipSided: material.side === BackSide, + + depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false + + }; + + return parameters; + + }; + + this.getProgramCode = function ( material, parameters ) { + + var array = []; + + if ( parameters.shaderID ) { + + array.push( parameters.shaderID ); + + } else { + + array.push( material.fragmentShader ); + array.push( material.vertexShader ); + + } + + if ( material.defines !== undefined ) { + + for ( var name in material.defines ) { + + array.push( name ); + array.push( material.defines[ name ] ); + + } + + } + + for ( var i = 0; i < parameterNames.length; i ++ ) { + + array.push( parameters[ parameterNames[ i ] ] ); + + } + + array.push( material.onBeforeCompile.toString() ); + + array.push( renderer.gammaOutput ); + + return array.join(); + + }; + + this.acquireProgram = function ( material, shader, parameters, code ) { + + var program; + + // Check if code has been already compiled + for ( var p = 0, pl = programs.length; p < pl; p ++ ) { + + var programInfo = programs[ p ]; + + if ( programInfo.code === code ) { + + program = programInfo; + ++ program.usedTimes; + + break; + + } + + } + + if ( program === undefined ) { + + program = new WebGLProgram( renderer, extensions, code, material, shader, parameters ); + programs.push( program ); + + } + + return program; + + }; + + this.releaseProgram = function ( program ) { + + if ( -- program.usedTimes === 0 ) { + + // Remove from unordered set + var i = programs.indexOf( program ); + programs[ i ] = programs[ programs.length - 1 ]; + programs.pop(); + + // Free WebGL resources + program.destroy(); + + } + + }; + + // Exposed for resource monitoring & error feedback via renderer.info: + this.programs = programs; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, infoMemory ) { + + var _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); + + // + + function clampToMaxSize( image, maxSize ) { + + if ( image.width > maxSize || image.height > maxSize ) { + + // Warning: Scaling through the canvas will only work with images that use + // premultiplied alpha. + + var scale = maxSize / Math.max( image.width, image.height ); + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = Math.floor( image.width * scale ); + canvas.height = Math.floor( image.height * scale ); + + var context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height ); + + console.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); + + return canvas; + + } + + return image; + + } + + function isPowerOfTwo( image ) { + + return _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height ); + + } + + function makePowerOfTwo( image ) { + + if ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement ) { + + var canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + canvas.width = _Math.nearestPowerOfTwo( image.width ); + canvas.height = _Math.nearestPowerOfTwo( image.height ); + + var context = canvas.getContext( '2d' ); + context.drawImage( image, 0, 0, canvas.width, canvas.height ); + + console.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image ); + + return canvas; + + } + + return image; + + } + + function textureNeedsPowerOfTwo( texture ) { + + return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || + ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); + + } + + function textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) { + + return texture.generateMipmaps && isPowerOfTwo && + texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; + + } + + // Fallback filters for non-power-of-2 textures + + function filterFallback( f ) { + + if ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) { + + return _gl.NEAREST; + + } + + return _gl.LINEAR; + + } + + // + + function onTextureDispose( event ) { + + var texture = event.target; + + texture.removeEventListener( 'dispose', onTextureDispose ); + + deallocateTexture( texture ); + + infoMemory.textures --; + + + } + + function onRenderTargetDispose( event ) { + + var renderTarget = event.target; + + renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); + + deallocateRenderTarget( renderTarget ); + + infoMemory.textures --; + + } + + // + + function deallocateTexture( texture ) { + + var textureProperties = properties.get( texture ); + + if ( texture.image && textureProperties.__image__webglTextureCube ) { + + // cube texture + + _gl.deleteTexture( textureProperties.__image__webglTextureCube ); + + } else { + + // 2D texture + + if ( textureProperties.__webglInit === undefined ) return; + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + // remove all webgl properties + properties.remove( texture ); + + } + + function deallocateRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + if ( ! renderTarget ) return; + + if ( textureProperties.__webglTexture !== undefined ) { + + _gl.deleteTexture( textureProperties.__webglTexture ); + + } + + if ( renderTarget.depthTexture ) { + + renderTarget.depthTexture.dispose(); + + } + + if ( renderTarget.isWebGLRenderTargetCube ) { + + for ( var i = 0; i < 6; i ++ ) { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); + + } + + } else { + + _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); + if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); + + } + + properties.remove( renderTarget.texture ); + properties.remove( renderTarget ); + + } + + // + + + + function setTexture2D( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + var image = texture.image; + + if ( image === undefined ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture ); + + } else if ( image.complete === false ) { + + console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture ); + + } else { + + uploadTexture( textureProperties, texture, slot ); + return; + + } + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + + } + + function setTextureCube( texture, slot ) { + + var textureProperties = properties.get( texture ); + + if ( texture.image.length === 6 ) { + + if ( texture.version > 0 && textureProperties.__version !== texture.version ) { + + if ( ! textureProperties.__image__webglTextureCube ) { + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__image__webglTextureCube = _gl.createTexture(); + + infoMemory.textures ++; + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); + + _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); + + var isCompressed = ( texture && texture.isCompressedTexture ); + var isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); + + var cubeImage = []; + + for ( var i = 0; i < 6; i ++ ) { + + if ( ! isCompressed && ! isDataTexture ) { + + cubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize ); + + } else { + + cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; + + } + + } + + var image = cubeImage[ 0 ], + isPowerOfTwoImage = isPowerOfTwo( image ), + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ); + + setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage ); + + for ( var i = 0; i < 6; i ++ ) { + + if ( ! isCompressed ) { + + if ( isDataTexture ) { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); + + } else { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] ); + + } + + } else { + + var mipmap, mipmaps = cubeImage[ i ].mipmaps; + + for ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) { + + mipmap = mipmaps[ j ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { + + state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); + + } + + } else { + + state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) { + + _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); + + } + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } else { + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube ); + + } + + } + + } + + function setTextureCubeDynamic( texture, slot ) { + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture ); + + } + + function setTextureParameters( textureType, texture, isPowerOfTwoImage ) { + + var extension; + + if ( isPowerOfTwoImage ) { + + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) ); + + _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) ); + + } else { + + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE ); + _gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE ); + + if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture ); + + } + + _gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) ); + _gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) ); + + if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { + + console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture ); + + } + + } + + extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension ) { + + if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; + if ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return; + + if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { + + _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); + properties.get( texture ).__currentAnisotropy = texture.anisotropy; + + } + + } + + } + + function uploadTexture( textureProperties, texture, slot ) { + + if ( textureProperties.__webglInit === undefined ) { + + textureProperties.__webglInit = true; + + texture.addEventListener( 'dispose', onTextureDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + infoMemory.textures ++; + + } + + state.activeTexture( _gl.TEXTURE0 + slot ); + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + + _gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY ); + _gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha ); + _gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment ); + + var image = clampToMaxSize( texture.image, capabilities.maxTextureSize ); + + if ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) { + + image = makePowerOfTwo( image ); + + } + + var isPowerOfTwoImage = isPowerOfTwo( image ), + glFormat = utils.convert( texture.format ), + glType = utils.convert( texture.type ); + + setTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage ); + + var mipmap, mipmaps = texture.mipmaps; + + if ( texture.isDepthTexture ) { + + // populate depth texture with dummy data + + var internalFormat = _gl.DEPTH_COMPONENT; + + if ( texture.type === FloatType ) { + + if ( !_isWebGL2 ) throw new Error('Float Depth Texture only supported in WebGL2.0'); + internalFormat = _gl.DEPTH_COMPONENT32F; + + } else if ( _isWebGL2 ) { + + // WebGL 2.0 requires signed internalformat for glTexImage2D + internalFormat = _gl.DEPTH_COMPONENT16; + + } + + if ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) { + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); + + texture.type = UnsignedShortType; + glType = utils.convert( texture.type ); + + } + + } + + // Depth stencil textures need the DEPTH_STENCIL internal format + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.format === DepthStencilFormat ) { + + internalFormat = _gl.DEPTH_STENCIL; + + // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are + // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. + // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) + if ( texture.type !== UnsignedInt248Type ) { + + console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); + + texture.type = UnsignedInt248Type; + glType = utils.convert( texture.type ); + + } + + } + + state.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null ); + + } else if ( texture.isDataTexture ) { + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && isPowerOfTwoImage ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + texture.generateMipmaps = false; + + } else { + + state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data ); + + } + + } else if ( texture.isCompressedTexture ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + + if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { + + if ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) { + + state.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data ); + + } else { + + console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); + + } + + } else { + + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); + + } + + } + + } else { + + // regular Texture (image, video, canvas) + + // use manually created mipmaps if available + // if there are no manual mipmaps + // set 0 level mipmap and then use GL to generate other mipmap levels + + if ( mipmaps.length > 0 && isPowerOfTwoImage ) { + + for ( var i = 0, il = mipmaps.length; i < il; i ++ ) { + + mipmap = mipmaps[ i ]; + state.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap ); + + } + + texture.generateMipmaps = false; + + } else { + + state.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image ); + + } + + } + + if ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) _gl.generateMipmap( _gl.TEXTURE_2D ); + + textureProperties.__version = texture.version; + + if ( texture.onUpdate ) texture.onUpdate( texture ); + + } + + // Render targets + + // Setup storage for target texture and bind it to correct framebuffer + function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { + + var glFormat = utils.convert( renderTarget.texture.format ); + var glType = utils.convert( renderTarget.texture.type ); + state.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); + _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + + } + + // Setup storage for internal depth/stencil buffers and bind to correct framebuffer + function setupRenderBufferStorage( renderbuffer, renderTarget ) { + + _gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer ); + + if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { + + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height ); + _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); + + } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { + + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height ); + _gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer ); + + } else { + + // FIXME: We don't support !depth !stencil + _gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height ); + + } + + _gl.bindRenderbuffer( _gl.RENDERBUFFER, null ); + + } + + // Setup resources for a Depth Texture for a FBO (needs an extension) + function setupDepthTexture( framebuffer, renderTarget ) { + + var isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube ); + if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + + if ( !( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { + + throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); + + } + + // upload an empty depth texture with framebuffer size + if ( !properties.get( renderTarget.depthTexture ).__webglTexture || + renderTarget.depthTexture.image.width !== renderTarget.width || + renderTarget.depthTexture.image.height !== renderTarget.height ) { + renderTarget.depthTexture.image.width = renderTarget.width; + renderTarget.depthTexture.image.height = renderTarget.height; + renderTarget.depthTexture.needsUpdate = true; + } + + setTexture2D( renderTarget.depthTexture, 0 ); + + var webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; + + if ( renderTarget.depthTexture.format === DepthFormat ) { + + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); + + } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { + + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 ); + + } else { + + throw new Error( 'Unknown depthTexture format' ); + + } + + } + + // Setup GL resources for a non-texture depth buffer + function setupDepthRenderbuffer( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + + var isCube = ( renderTarget.isWebGLRenderTargetCube === true ); + + if ( renderTarget.depthTexture ) { + + if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); + + setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); + + } else { + + if ( isCube ) { + + renderTargetProperties.__webglDepthbuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] ); + renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget ); + + } + + } else { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer ); + renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); + setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget ); + + } + + } + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, null ); + + } + + // Set up GL resources for the render target + function setupRenderTarget( renderTarget ) { + + var renderTargetProperties = properties.get( renderTarget ); + var textureProperties = properties.get( renderTarget.texture ); + + renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); + + textureProperties.__webglTexture = _gl.createTexture(); + + infoMemory.textures ++; + + var isCube = ( renderTarget.isWebGLRenderTargetCube === true ); + var isTargetPowerOfTwo = isPowerOfTwo( renderTarget ); + + // Setup framebuffer + + if ( isCube ) { + + renderTargetProperties.__webglFramebuffer = []; + + for ( var i = 0; i < 6; i ++ ) { + + renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); + + } + + } else { + + renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); + + } + + // Setup color buffer + + if ( isCube ) { + + state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture ); + setTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo ); + + for ( var i = 0; i < 6; i ++ ) { + + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i ); + + } + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_CUBE_MAP ); + state.bindTexture( _gl.TEXTURE_CUBE_MAP, null ); + + } else { + + state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture ); + setTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo ); + setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D ); + + if ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) _gl.generateMipmap( _gl.TEXTURE_2D ); + state.bindTexture( _gl.TEXTURE_2D, null ); + + } + + // Setup depth and stencil buffers + + if ( renderTarget.depthBuffer ) { + + setupDepthRenderbuffer( renderTarget ); + + } + + } + + function updateRenderTargetMipmap( renderTarget ) { + + var texture = renderTarget.texture; + var isTargetPowerOfTwo = isPowerOfTwo( renderTarget ); + + if ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) { + + var target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D; + var webglTexture = properties.get( texture ).__webglTexture; + + state.bindTexture( target, webglTexture ); + _gl.generateMipmap( target ); + state.bindTexture( target, null ); + + } + + } + + this.setTexture2D = setTexture2D; + this.setTextureCube = setTextureCube; + this.setTextureCubeDynamic = setTextureCubeDynamic; + this.setupRenderTarget = setupRenderTarget; + this.updateRenderTargetMipmap = updateRenderTargetMipmap; + +} + +/** + * @author fordacious / fordacious.github.io + */ + +function WebGLProperties() { + + var properties = {}; + + function get( object ) { + + var uuid = object.uuid; + var map = properties[ uuid ]; + + if ( map === undefined ) { + + map = {}; + properties[ uuid ] = map; + + } + + return map; + + } + + function remove( object ) { + + delete properties[ object.uuid ]; + + } + + function clear() { + + properties = {}; + + } + + return { + get: get, + remove: remove, + clear: clear + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLState( gl, extensions, utils ) { + + function ColorBuffer() { + + var locked = false; + + var color = new Vector4(); + var currentColorMask = null; + var currentColorClear = new Vector4( 0, 0, 0, 0 ); + + return { + + setMask: function ( colorMask ) { + + if ( currentColorMask !== colorMask && ! locked ) { + + gl.colorMask( colorMask, colorMask, colorMask, colorMask ); + currentColorMask = colorMask; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( r, g, b, a, premultipliedAlpha ) { + + if ( premultipliedAlpha === true ) { + + r *= a; g *= a; b *= a; + + } + + color.set( r, g, b, a ); + + if ( currentColorClear.equals( color ) === false ) { + + gl.clearColor( r, g, b, a ); + currentColorClear.copy( color ); + + } + + }, + + reset: function () { + + locked = false; + + currentColorMask = null; + currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state + + } + + }; + + } + + function DepthBuffer() { + + var locked = false; + + var currentDepthMask = null; + var currentDepthFunc = null; + var currentDepthClear = null; + + return { + + setTest: function ( depthTest ) { + + if ( depthTest ) { + + enable( gl.DEPTH_TEST ); + + } else { + + disable( gl.DEPTH_TEST ); + + } + + }, + + setMask: function ( depthMask ) { + + if ( currentDepthMask !== depthMask && ! locked ) { + + gl.depthMask( depthMask ); + currentDepthMask = depthMask; + + } + + }, + + setFunc: function ( depthFunc ) { + + if ( currentDepthFunc !== depthFunc ) { + + if ( depthFunc ) { + + switch ( depthFunc ) { + + case NeverDepth: + + gl.depthFunc( gl.NEVER ); + break; + + case AlwaysDepth: + + gl.depthFunc( gl.ALWAYS ); + break; + + case LessDepth: + + gl.depthFunc( gl.LESS ); + break; + + case LessEqualDepth: + + gl.depthFunc( gl.LEQUAL ); + break; + + case EqualDepth: + + gl.depthFunc( gl.EQUAL ); + break; + + case GreaterEqualDepth: + + gl.depthFunc( gl.GEQUAL ); + break; + + case GreaterDepth: + + gl.depthFunc( gl.GREATER ); + break; + + case NotEqualDepth: + + gl.depthFunc( gl.NOTEQUAL ); + break; + + default: + + gl.depthFunc( gl.LEQUAL ); + + } + + } else { + + gl.depthFunc( gl.LEQUAL ); + + } + + currentDepthFunc = depthFunc; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( depth ) { + + if ( currentDepthClear !== depth ) { + + gl.clearDepth( depth ); + currentDepthClear = depth; + + } + + }, + + reset: function () { + + locked = false; + + currentDepthMask = null; + currentDepthFunc = null; + currentDepthClear = null; + + } + + }; + + } + + function StencilBuffer() { + + var locked = false; + + var currentStencilMask = null; + var currentStencilFunc = null; + var currentStencilRef = null; + var currentStencilFuncMask = null; + var currentStencilFail = null; + var currentStencilZFail = null; + var currentStencilZPass = null; + var currentStencilClear = null; + + return { + + setTest: function ( stencilTest ) { + + if ( stencilTest ) { + + enable( gl.STENCIL_TEST ); + + } else { + + disable( gl.STENCIL_TEST ); + + } + + }, + + setMask: function ( stencilMask ) { + + if ( currentStencilMask !== stencilMask && ! locked ) { + + gl.stencilMask( stencilMask ); + currentStencilMask = stencilMask; + + } + + }, + + setFunc: function ( stencilFunc, stencilRef, stencilMask ) { + + if ( currentStencilFunc !== stencilFunc || + currentStencilRef !== stencilRef || + currentStencilFuncMask !== stencilMask ) { + + gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); + + currentStencilFunc = stencilFunc; + currentStencilRef = stencilRef; + currentStencilFuncMask = stencilMask; + + } + + }, + + setOp: function ( stencilFail, stencilZFail, stencilZPass ) { + + if ( currentStencilFail !== stencilFail || + currentStencilZFail !== stencilZFail || + currentStencilZPass !== stencilZPass ) { + + gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); + + currentStencilFail = stencilFail; + currentStencilZFail = stencilZFail; + currentStencilZPass = stencilZPass; + + } + + }, + + setLocked: function ( lock ) { + + locked = lock; + + }, + + setClear: function ( stencil ) { + + if ( currentStencilClear !== stencil ) { + + gl.clearStencil( stencil ); + currentStencilClear = stencil; + + } + + }, + + reset: function () { + + locked = false; + + currentStencilMask = null; + currentStencilFunc = null; + currentStencilRef = null; + currentStencilFuncMask = null; + currentStencilFail = null; + currentStencilZFail = null; + currentStencilZPass = null; + currentStencilClear = null; + + } + + }; + + } + + // + + var colorBuffer = new ColorBuffer(); + var depthBuffer = new DepthBuffer(); + var stencilBuffer = new StencilBuffer(); + + var maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); + var newAttributes = new Uint8Array( maxVertexAttributes ); + var enabledAttributes = new Uint8Array( maxVertexAttributes ); + var attributeDivisors = new Uint8Array( maxVertexAttributes ); + + var capabilities = {}; + + var compressedTextureFormats = null; + + var currentProgram = null; + + var currentBlending = null; + var currentBlendEquation = null; + var currentBlendSrc = null; + var currentBlendDst = null; + var currentBlendEquationAlpha = null; + var currentBlendSrcAlpha = null; + var currentBlendDstAlpha = null; + var currentPremultipledAlpha = false; + + var currentFlipSided = null; + var currentCullFace = null; + + var currentLineWidth = null; + + var currentPolygonOffsetFactor = null; + var currentPolygonOffsetUnits = null; + + var maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS ); + + var version = parseFloat( /^WebGL\ ([0-9])/.exec( gl.getParameter( gl.VERSION ) )[ 1 ] ); + var lineWidthAvailable = parseFloat( version ) >= 1.0; + + var currentTextureSlot = null; + var currentBoundTextures = {}; + + var currentScissor = new Vector4(); + var currentViewport = new Vector4(); + + function createTexture( type, target, count ) { + + var data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. + var texture = gl.createTexture(); + + gl.bindTexture( type, texture ); + gl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST ); + gl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST ); + + for ( var i = 0; i < count; i ++ ) { + + gl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data ); + + } + + return texture; + + } + + var emptyTextures = {}; + emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 ); + emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 ); + + // init + + colorBuffer.setClear( 0, 0, 0, 1 ); + depthBuffer.setClear( 1 ); + stencilBuffer.setClear( 0 ); + + enable( gl.DEPTH_TEST ); + depthBuffer.setFunc( LessEqualDepth ); + + setFlipSided( false ); + setCullFace( CullFaceBack ); + enable( gl.CULL_FACE ); + + enable( gl.BLEND ); + setBlending( NormalBlending ); + + // + + function initAttributes() { + + for ( var i = 0, l = newAttributes.length; i < l; i ++ ) { + + newAttributes[ i ] = 0; + + } + + } + + function enableAttribute( attribute ) { + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== 0 ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + extension.vertexAttribDivisorANGLE( attribute, 0 ); + attributeDivisors[ attribute ] = 0; + + } + + } + + function enableAttributeAndDivisor( attribute, meshPerAttribute ) { + + newAttributes[ attribute ] = 1; + + if ( enabledAttributes[ attribute ] === 0 ) { + + gl.enableVertexAttribArray( attribute ); + enabledAttributes[ attribute ] = 1; + + } + + if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { + + var extension = extensions.get( 'ANGLE_instanced_arrays' ); + + extension.vertexAttribDivisorANGLE( attribute, meshPerAttribute ); + attributeDivisors[ attribute ] = meshPerAttribute; + + } + + } + + function disableUnusedAttributes() { + + for ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) { + + if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + } + + function enable( id ) { + + if ( capabilities[ id ] !== true ) { + + gl.enable( id ); + capabilities[ id ] = true; + + } + + } + + function disable( id ) { + + if ( capabilities[ id ] !== false ) { + + gl.disable( id ); + capabilities[ id ] = false; + + } + + } + + function getCompressedTextureFormats() { + + if ( compressedTextureFormats === null ) { + + compressedTextureFormats = []; + + if ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) || + extensions.get( 'WEBGL_compressed_texture_s3tc' ) || + extensions.get( 'WEBGL_compressed_texture_etc1' ) ) { + + var formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS ); + + for ( var i = 0; i < formats.length; i ++ ) { + + compressedTextureFormats.push( formats[ i ] ); + + } + + } + + } + + return compressedTextureFormats; + + } + + function useProgram( program ) { + + if ( currentProgram !== program ) { + + gl.useProgram( program ); + + currentProgram = program; + + return true; + + } + + return false; + + } + + function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { + + if ( blending !== NoBlending ) { + + enable( gl.BLEND ); + + } else { + + disable( gl.BLEND ); + + } + + if ( blending !== CustomBlending ) { + + if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { + + switch ( blending ) { + + case AdditiveBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.SRC_ALPHA, gl.ONE ); + + } + break; + + case SubtractiveBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR ); + + } + break; + + case MultiplyBlending: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA ); + + } else { + + gl.blendEquation( gl.FUNC_ADD ); + gl.blendFunc( gl.ZERO, gl.SRC_COLOR ); + + } + break; + + default: + + if ( premultipliedAlpha ) { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); + + } else { + + gl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD ); + gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA ); + + } + + } + + } + + currentBlendEquation = null; + currentBlendSrc = null; + currentBlendDst = null; + currentBlendEquationAlpha = null; + currentBlendSrcAlpha = null; + currentBlendDstAlpha = null; + + } else { + + blendEquationAlpha = blendEquationAlpha || blendEquation; + blendSrcAlpha = blendSrcAlpha || blendSrc; + blendDstAlpha = blendDstAlpha || blendDst; + + if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { + + gl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) ); + + currentBlendEquation = blendEquation; + currentBlendEquationAlpha = blendEquationAlpha; + + } + + if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { + + gl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) ); + + currentBlendSrc = blendSrc; + currentBlendDst = blendDst; + currentBlendSrcAlpha = blendSrcAlpha; + currentBlendDstAlpha = blendDstAlpha; + + } + + } + + currentBlending = blending; + currentPremultipledAlpha = premultipliedAlpha; + + } + + function setMaterial( material ) { + + material.side === DoubleSide + ? disable( gl.CULL_FACE ) + : enable( gl.CULL_FACE ); + + setFlipSided( material.side === BackSide ); + + material.transparent === true + ? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ) + : setBlending( NoBlending ); + + depthBuffer.setFunc( material.depthFunc ); + depthBuffer.setTest( material.depthTest ); + depthBuffer.setMask( material.depthWrite ); + colorBuffer.setMask( material.colorWrite ); + + setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); + + } + + // + + function setFlipSided( flipSided ) { + + if ( currentFlipSided !== flipSided ) { + + if ( flipSided ) { + + gl.frontFace( gl.CW ); + + } else { + + gl.frontFace( gl.CCW ); + + } + + currentFlipSided = flipSided; + + } + + } + + function setCullFace( cullFace ) { + + if ( cullFace !== CullFaceNone ) { + + enable( gl.CULL_FACE ); + + if ( cullFace !== currentCullFace ) { + + if ( cullFace === CullFaceBack ) { + + gl.cullFace( gl.BACK ); + + } else if ( cullFace === CullFaceFront ) { + + gl.cullFace( gl.FRONT ); + + } else { + + gl.cullFace( gl.FRONT_AND_BACK ); + + } + + } + + } else { + + disable( gl.CULL_FACE ); + + } + + currentCullFace = cullFace; + + } + + function setLineWidth( width ) { + + if ( width !== currentLineWidth ) { + + if ( lineWidthAvailable ) gl.lineWidth( width ); + + currentLineWidth = width; + + } + + } + + function setPolygonOffset( polygonOffset, factor, units ) { + + if ( polygonOffset ) { + + enable( gl.POLYGON_OFFSET_FILL ); + + if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { + + gl.polygonOffset( factor, units ); + + currentPolygonOffsetFactor = factor; + currentPolygonOffsetUnits = units; + + } + + } else { + + disable( gl.POLYGON_OFFSET_FILL ); + + } + + } + + function setScissorTest( scissorTest ) { + + if ( scissorTest ) { + + enable( gl.SCISSOR_TEST ); + + } else { + + disable( gl.SCISSOR_TEST ); + + } + + } + + // texture + + function activeTexture( webglSlot ) { + + if ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1; + + if ( currentTextureSlot !== webglSlot ) { + + gl.activeTexture( webglSlot ); + currentTextureSlot = webglSlot; + + } + + } + + function bindTexture( webglType, webglTexture ) { + + if ( currentTextureSlot === null ) { + + activeTexture(); + + } + + var boundTexture = currentBoundTextures[ currentTextureSlot ]; + + if ( boundTexture === undefined ) { + + boundTexture = { type: undefined, texture: undefined }; + currentBoundTextures[ currentTextureSlot ] = boundTexture; + + } + + if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { + + gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); + + boundTexture.type = webglType; + boundTexture.texture = webglTexture; + + } + + } + + function compressedTexImage2D() { + + try { + + gl.compressedTexImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + function texImage2D() { + + try { + + gl.texImage2D.apply( gl, arguments ); + + } catch ( error ) { + + console.error( 'THREE.WebGLState:', error ); + + } + + } + + // + + function scissor( scissor ) { + + if ( currentScissor.equals( scissor ) === false ) { + + gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); + currentScissor.copy( scissor ); + + } + + } + + function viewport( viewport ) { + + if ( currentViewport.equals( viewport ) === false ) { + + gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); + currentViewport.copy( viewport ); + + } + + } + + // + + function reset() { + + for ( var i = 0; i < enabledAttributes.length; i ++ ) { + + if ( enabledAttributes[ i ] === 1 ) { + + gl.disableVertexAttribArray( i ); + enabledAttributes[ i ] = 0; + + } + + } + + capabilities = {}; + + compressedTextureFormats = null; + + currentTextureSlot = null; + currentBoundTextures = {}; + + currentProgram = null; + + currentBlending = null; + + currentFlipSided = null; + currentCullFace = null; + + colorBuffer.reset(); + depthBuffer.reset(); + stencilBuffer.reset(); + + } + + return { + + buffers: { + color: colorBuffer, + depth: depthBuffer, + stencil: stencilBuffer + }, + + initAttributes: initAttributes, + enableAttribute: enableAttribute, + enableAttributeAndDivisor: enableAttributeAndDivisor, + disableUnusedAttributes: disableUnusedAttributes, + enable: enable, + disable: disable, + getCompressedTextureFormats: getCompressedTextureFormats, + + useProgram: useProgram, + + setBlending: setBlending, + setMaterial: setMaterial, + + setFlipSided: setFlipSided, + setCullFace: setCullFace, + + setLineWidth: setLineWidth, + setPolygonOffset: setPolygonOffset, + + setScissorTest: setScissorTest, + + activeTexture: activeTexture, + bindTexture: bindTexture, + compressedTexImage2D: compressedTexImage2D, + texImage2D: texImage2D, + + scissor: scissor, + viewport: viewport, + + reset: reset + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLCapabilities( gl, extensions, parameters ) { + + var maxAnisotropy; + + function getMaxAnisotropy() { + + if ( maxAnisotropy !== undefined ) return maxAnisotropy; + + var extension = extensions.get( 'EXT_texture_filter_anisotropic' ); + + if ( extension !== null ) { + + maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); + + } else { + + maxAnisotropy = 0; + + } + + return maxAnisotropy; + + } + + function getMaxPrecision( precision ) { + + if ( precision === 'highp' ) { + + if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 && + gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) { + + return 'highp'; + + } + + precision = 'mediump'; + + } + + if ( precision === 'mediump' ) { + + if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 && + gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) { + + return 'mediump'; + + } + + } + + return 'lowp'; + + } + + var precision = parameters.precision !== undefined ? parameters.precision : 'highp'; + var maxPrecision = getMaxPrecision( precision ); + + if ( maxPrecision !== precision ) { + + console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); + precision = maxPrecision; + + } + + var logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true && !! extensions.get( 'EXT_frag_depth' ); + + var maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS ); + var maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS ); + var maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE ); + var maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE ); + + var maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS ); + var maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS ); + var maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS ); + var maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS ); + + var vertexTextures = maxVertexTextures > 0; + var floatFragmentTextures = !! extensions.get( 'OES_texture_float' ); + var floatVertexTextures = vertexTextures && floatFragmentTextures; + + return { + + getMaxAnisotropy: getMaxAnisotropy, + getMaxPrecision: getMaxPrecision, + + precision: precision, + logarithmicDepthBuffer: logarithmicDepthBuffer, + + maxTextures: maxTextures, + maxVertexTextures: maxVertexTextures, + maxTextureSize: maxTextureSize, + maxCubemapSize: maxCubemapSize, + + maxAttributes: maxAttributes, + maxVertexUniforms: maxVertexUniforms, + maxVaryings: maxVaryings, + maxFragmentUniforms: maxFragmentUniforms, + + vertexTextures: vertexTextures, + floatFragmentTextures: floatFragmentTextures, + floatVertexTextures: floatVertexTextures + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ArrayCamera( array ) { + + PerspectiveCamera.call( this ); + + this.cameras = array || []; + +} + +ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { + + constructor: ArrayCamera, + + isArrayCamera: true + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebVRManager( renderer ) { + + var scope = this; + + var device = null; + var frameData = null; + + if ( 'VRFrameData' in window ) { + + frameData = new window.VRFrameData(); + + } + + var matrixWorldInverse = new Matrix4(); + + var standingMatrix = new Matrix4(); + var standingMatrixInverse = new Matrix4(); + + var cameraL = new PerspectiveCamera(); + cameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 ); + cameraL.layers.enable( 1 ); + + var cameraR = new PerspectiveCamera(); + cameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 ); + cameraR.layers.enable( 2 ); + + var cameraVR = new ArrayCamera( [ cameraL, cameraR ] ); + cameraVR.layers.enable( 1 ); + cameraVR.layers.enable( 2 ); + + // + + var currentSize, currentPixelRatio; + + function onVRDisplayPresentChange() { + + if ( device !== null && device.isPresenting ) { + + var eyeParameters = device.getEyeParameters( 'left' ); + var renderWidth = eyeParameters.renderWidth; + var renderHeight = eyeParameters.renderHeight; + + currentPixelRatio = renderer.getPixelRatio(); + currentSize = renderer.getSize(); + + renderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 ); + + } else if ( scope.enabled ) { + + renderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio ); + + } + + } + + window.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false ); + + // + + this.enabled = false; + this.standing = false; + + this.getDevice = function () { + + return device; + + }; + + this.setDevice = function ( value ) { + + if ( value !== undefined ) device = value; + + }; + + this.getCamera = function ( camera ) { + + if ( device === null ) return camera; + + device.depthNear = camera.near; + device.depthFar = camera.far; + + device.getFrameData( frameData ); + + // + + var pose = frameData.pose; + + if ( pose.position !== null ) { + + camera.position.fromArray( pose.position ); + + } else { + + camera.position.set( 0, 0, 0 ); + + } + + if ( pose.orientation !== null ) { + + camera.quaternion.fromArray( pose.orientation ); + + } + + camera.updateMatrixWorld(); + + var stageParameters = device.stageParameters; + + if ( this.standing && stageParameters ) { + + standingMatrix.fromArray( stageParameters.sittingToStandingTransform ); + standingMatrixInverse.getInverse( standingMatrix ); + + camera.matrixWorld.multiply( standingMatrix ); + camera.matrixWorldInverse.multiply( standingMatrixInverse ); + + } + + if ( device.isPresenting === false ) return camera; + + // + + cameraL.near = camera.near; + cameraR.near = camera.near; + + cameraL.far = camera.far; + cameraR.far = camera.far; + + cameraVR.matrixWorld.copy( camera.matrixWorld ); + cameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse ); + + cameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix ); + cameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix ); + + if ( this.standing && stageParameters ) { + + cameraL.matrixWorldInverse.multiply( standingMatrixInverse ); + cameraR.matrixWorldInverse.multiply( standingMatrixInverse ); + + } + + var parent = camera.parent; + + if ( parent !== null ) { + + matrixWorldInverse.getInverse( parent.matrixWorld ); + + cameraL.matrixWorldInverse.multiply( matrixWorldInverse ); + cameraR.matrixWorldInverse.multiply( matrixWorldInverse ); + + } + + // envMap and Mirror needs camera.matrixWorld + + cameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse ); + cameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse ); + + cameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix ); + cameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix ); + + // HACK @mrdoob + // https://github.com/w3c/webvr/issues/203 + + cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); + + // + + var layers = device.getLayers(); + + if ( layers.length ) { + + var layer = layers[ 0 ]; + + if ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) { + + cameraL.bounds.fromArray( layer.leftBounds ); + + } + + if ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) { + + cameraR.bounds.fromArray( layer.rightBounds ); + + } + + } + + return cameraVR; + + }; + + this.getStandingMatrix = function () { + + return standingMatrix; + + }; + + this.submitFrame = function () { + + if ( device && device.isPresenting ) device.submitFrame(); + + }; + + this.dispose = function() { + + window.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange ); + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function WebGLExtensions( gl ) { + + var extensions = {}; + + return { + + get: function ( name ) { + + if ( extensions[ name ] !== undefined ) { + + return extensions[ name ]; + + } + + var extension; + + switch ( name ) { + + case 'WEBGL_depth_texture': + extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); + break; + + case 'EXT_texture_filter_anisotropic': + extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); + break; + + case 'WEBGL_compressed_texture_s3tc': + extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); + break; + + case 'WEBGL_compressed_texture_pvrtc': + extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + break; + + case 'WEBGL_compressed_texture_etc1': + extension = gl.getExtension( 'WEBGL_compressed_texture_etc1' ); + break; + + default: + extension = gl.getExtension( name ); + + } + + if ( extension === null ) { + + console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); + + } + + extensions[ name ] = extension; + + return extension; + + } + + }; + +} + +/** + * @author tschw + */ + +function WebGLClipping() { + + var scope = this, + + globalState = null, + numGlobalPlanes = 0, + localClippingEnabled = false, + renderingShadows = false, + + plane = new Plane(), + viewNormalMatrix = new Matrix3(), + + uniform = { value: null, needsUpdate: false }; + + this.uniform = uniform; + this.numPlanes = 0; + this.numIntersection = 0; + + this.init = function( planes, enableLocalClipping, camera ) { + + var enabled = + planes.length !== 0 || + enableLocalClipping || + // enable state of previous frame - the clipping code has to + // run another frame in order to reset the state: + numGlobalPlanes !== 0 || + localClippingEnabled; + + localClippingEnabled = enableLocalClipping; + + globalState = projectPlanes( planes, camera, 0 ); + numGlobalPlanes = planes.length; + + return enabled; + + }; + + this.beginShadows = function() { + + renderingShadows = true; + projectPlanes( null ); + + }; + + this.endShadows = function() { + + renderingShadows = false; + resetGlobalState(); + + }; + + this.setState = function( planes, clipIntersection, clipShadows, camera, cache, fromCache ) { + + if ( ! localClippingEnabled || + planes === null || planes.length === 0 || + renderingShadows && ! clipShadows ) { + // there's no local clipping + + if ( renderingShadows ) { + // there's no global clipping + + projectPlanes( null ); + + } else { + + resetGlobalState(); + } + + } else { + + var nGlobal = renderingShadows ? 0 : numGlobalPlanes, + lGlobal = nGlobal * 4, + + dstArray = cache.clippingState || null; + + uniform.value = dstArray; // ensure unique state + + dstArray = projectPlanes( planes, camera, lGlobal, fromCache ); + + for ( var i = 0; i !== lGlobal; ++ i ) { + + dstArray[ i ] = globalState[ i ]; + + } + + cache.clippingState = dstArray; + this.numIntersection = clipIntersection ? this.numPlanes : 0; + this.numPlanes += nGlobal; + + } + + + }; + + function resetGlobalState() { + + if ( uniform.value !== globalState ) { + + uniform.value = globalState; + uniform.needsUpdate = numGlobalPlanes > 0; + + } + + scope.numPlanes = numGlobalPlanes; + scope.numIntersection = 0; + + } + + function projectPlanes( planes, camera, dstOffset, skipTransform ) { + + var nPlanes = planes !== null ? planes.length : 0, + dstArray = null; + + if ( nPlanes !== 0 ) { + + dstArray = uniform.value; + + if ( skipTransform !== true || dstArray === null ) { + + var flatSize = dstOffset + nPlanes * 4, + viewMatrix = camera.matrixWorldInverse; + + viewNormalMatrix.getNormalMatrix( viewMatrix ); + + if ( dstArray === null || dstArray.length < flatSize ) { + + dstArray = new Float32Array( flatSize ); + + } + + for ( var i = 0, i4 = dstOffset; + i !== nPlanes; ++ i, i4 += 4 ) { + + plane.copy( planes[ i ] ). + applyMatrix4( viewMatrix, viewNormalMatrix ); + + plane.normal.toArray( dstArray, i4 ); + dstArray[ i4 + 3 ] = plane.constant; + + } + + } + + uniform.value = dstArray; + uniform.needsUpdate = true; + + } + + scope.numPlanes = nPlanes; + + return dstArray; + + } + +} + +/** + * @author thespite / http://www.twitter.com/thespite + */ + +function WebGLUtils ( gl, extensions ) { + + function convert ( p ) { + + var extension; + + if ( p === RepeatWrapping ) return gl.REPEAT; + if ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE; + if ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT; + + if ( p === NearestFilter ) return gl.NEAREST; + if ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST; + if ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR; + + if ( p === LinearFilter ) return gl.LINEAR; + if ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST; + if ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR; + + if ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE; + if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4; + if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1; + if ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5; + + if ( p === ByteType ) return gl.BYTE; + if ( p === ShortType ) return gl.SHORT; + if ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT; + if ( p === IntType ) return gl.INT; + if ( p === UnsignedIntType ) return gl.UNSIGNED_INT; + if ( p === FloatType ) return gl.FLOAT; + + if ( p === HalfFloatType ) { + + extension = extensions.get( 'OES_texture_half_float' ); + + if ( extension !== null ) return extension.HALF_FLOAT_OES; + + } + + if ( p === AlphaFormat ) return gl.ALPHA; + if ( p === RGBFormat ) return gl.RGB; + if ( p === RGBAFormat ) return gl.RGBA; + if ( p === LuminanceFormat ) return gl.LUMINANCE; + if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA; + if ( p === DepthFormat ) return gl.DEPTH_COMPONENT; + if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL; + + if ( p === AddEquation ) return gl.FUNC_ADD; + if ( p === SubtractEquation ) return gl.FUNC_SUBTRACT; + if ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT; + + if ( p === ZeroFactor ) return gl.ZERO; + if ( p === OneFactor ) return gl.ONE; + if ( p === SrcColorFactor ) return gl.SRC_COLOR; + if ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR; + if ( p === SrcAlphaFactor ) return gl.SRC_ALPHA; + if ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA; + if ( p === DstAlphaFactor ) return gl.DST_ALPHA; + if ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA; + + if ( p === DstColorFactor ) return gl.DST_COLOR; + if ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR; + if ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE; + + if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || + p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + if ( extension !== null ) { + + if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; + if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; + if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; + + } + + } + + if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || + p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + if ( extension !== null ) { + + if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; + if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; + if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; + if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; + + } + + } + + if ( p === RGB_ETC1_Format ) { + + extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); + + if ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL; + + } + + if ( p === MinEquation || p === MaxEquation ) { + + extension = extensions.get( 'EXT_blend_minmax' ); + + if ( extension !== null ) { + + if ( p === MinEquation ) return extension.MIN_EXT; + if ( p === MaxEquation ) return extension.MAX_EXT; + + } + + } + + if ( p === UnsignedInt248Type ) { + + extension = extensions.get( 'WEBGL_depth_texture' ); + + if ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL; + + } + + return 0; + + } + + return { convert: convert } + +} + +// import { Sphere } from '../math/Sphere'; +/** + * @author supereggbert / http://www.paulbrunt.co.uk/ + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * @author szimek / https://github.com/szimek/ + * @author tschw + */ + +function WebGLRenderer( parameters ) { + + console.log( 'THREE.WebGLRenderer', REVISION ); + + parameters = parameters || {}; + + var _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ), + _context = parameters.context !== undefined ? parameters.context : null, + + _alpha = parameters.alpha !== undefined ? parameters.alpha : false, + _depth = parameters.depth !== undefined ? parameters.depth : true, + _stencil = parameters.stencil !== undefined ? parameters.stencil : true, + _antialias = parameters.antialias !== undefined ? parameters.antialias : false, + _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, + _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false; + + var lightsArray = []; + var shadowsArray = []; + + var currentRenderList = null; + + var spritesArray = []; + var flaresArray = []; + + // public properties + + this.domElement = _canvas; + this.context = null; + + // clearing + + this.autoClear = true; + this.autoClearColor = true; + this.autoClearDepth = true; + this.autoClearStencil = true; + + // scene graph + + this.sortObjects = true; + + // user-defined clipping + + this.clippingPlanes = []; + this.localClippingEnabled = false; + + // physically based shading + + this.gammaFactor = 2.0; // for backwards compatibility + this.gammaInput = false; + this.gammaOutput = false; + + // physical lights + + this.physicallyCorrectLights = false; + + // tone mapping + + this.toneMapping = LinearToneMapping; + this.toneMappingExposure = 1.0; + this.toneMappingWhitePoint = 1.0; + + // morphs + + this.maxMorphTargets = 8; + this.maxMorphNormals = 4; + + // internal properties + + var _this = this, + + _isContextLost = false, + + // internal state cache + + _currentRenderTarget = null, + _currentFramebuffer = null, + _currentMaterialId = - 1, + _currentGeometryProgram = '', + + _currentCamera = null, + _currentArrayCamera = null, + + _currentViewport = new Vector4(), + _currentScissor = new Vector4(), + _currentScissorTest = null, + + // + + _usedTextureUnits = 0, + + // + + _width = _canvas.width, + _height = _canvas.height, + + _pixelRatio = 1, + + _viewport = new Vector4( 0, 0, _width, _height ), + _scissor = new Vector4( 0, 0, _width, _height ), + _scissorTest = false, + + // frustum + + _frustum = new Frustum(), + + // clipping + + _clipping = new WebGLClipping(), + _clippingEnabled = false, + _localClippingEnabled = false, + + // camera matrices cache + + _projScreenMatrix = new Matrix4(), + + _vector3 = new Vector3(), + + // info + + _infoMemory = { + geometries: 0, + textures: 0 + }, + + _infoRender = { + + frame: 0, + calls: 0, + vertices: 0, + faces: 0, + points: 0 + + }; + + this.info = { + + render: _infoRender, + memory: _infoMemory, + programs: null + + }; + + function getTargetPixelRatio() { + + return _currentRenderTarget === null ? _pixelRatio : 1; + + } + + // initialize + + var _gl; + + try { + + var contextAttributes = { + alpha: _alpha, + depth: _depth, + stencil: _stencil, + antialias: _antialias, + premultipliedAlpha: _premultipliedAlpha, + preserveDrawingBuffer: _preserveDrawingBuffer + }; + + _gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes ); + + if ( _gl === null ) { + + if ( _canvas.getContext( 'webgl' ) !== null ) { + + throw 'Error creating WebGL context with your selected attributes.'; + + } else { + + throw 'Error creating WebGL context.'; + + } + + } + + // Some experimental-webgl implementations do not have getShaderPrecisionFormat + + if ( _gl.getShaderPrecisionFormat === undefined ) { + + _gl.getShaderPrecisionFormat = function () { + + return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; + + }; + + } + + _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); + + } catch ( error ) { + + console.error( 'THREE.WebGLRenderer: ' + error ); + + } + + var extensions, capabilities, state; + var properties, textures, attributes, geometries, objects, lights; + var programCache, renderLists; + + var background, morphtargets, bufferRenderer, indexedBufferRenderer; + var flareRenderer, spriteRenderer; + + var utils; + + function initGLContext() { + + extensions = new WebGLExtensions( _gl ); + extensions.get( 'WEBGL_depth_texture' ); + extensions.get( 'OES_texture_float' ); + extensions.get( 'OES_texture_float_linear' ); + extensions.get( 'OES_texture_half_float' ); + extensions.get( 'OES_texture_half_float_linear' ); + extensions.get( 'OES_standard_derivatives' ); + extensions.get( 'ANGLE_instanced_arrays' ); + + if ( extensions.get( 'OES_element_index_uint' ) ) { + + BufferGeometry.MaxIndex = 4294967296; + + } + + utils = new WebGLUtils( _gl, extensions ); + + capabilities = new WebGLCapabilities( _gl, extensions, parameters ); + + state = new WebGLState( _gl, extensions, utils ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) ); + + properties = new WebGLProperties(); + textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, _infoMemory ); + attributes = new WebGLAttributes( _gl ); + geometries = new WebGLGeometries( _gl, attributes, _infoMemory ); + objects = new WebGLObjects( geometries, _infoRender ); + morphtargets = new WebGLMorphtargets( _gl ); + programCache = new WebGLPrograms( _this, extensions, capabilities ); + lights = new WebGLLights(); + renderLists = new WebGLRenderLists(); + + background = new WebGLBackground( _this, state, geometries, _premultipliedAlpha ); + + bufferRenderer = new WebGLBufferRenderer( _gl, extensions, _infoRender ); + indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, _infoRender ); + + flareRenderer = new WebGLFlareRenderer( _this, _gl, state, textures, capabilities ); + spriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities ); + + _this.info.programs = programCache.programs; + + _this.context = _gl; + _this.capabilities = capabilities; + _this.extensions = extensions; + _this.properties = properties; + _this.renderLists = renderLists; + _this.state = state; + + } + + initGLContext(); + + // vr + + var vr = new WebVRManager( _this ); + + this.vr = vr; + + // shadow map + + var shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); + + this.shadowMap = shadowMap; + + // API + + this.getContext = function () { + + return _gl; + + }; + + this.getContextAttributes = function () { + + return _gl.getContextAttributes(); + + }; + + this.forceContextLoss = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.loseContext(); + + }; + + this.forceContextRestore = function () { + + var extension = extensions.get( 'WEBGL_lose_context' ); + if ( extension ) extension.restoreContext(); + + }; + + this.getPixelRatio = function () { + + return _pixelRatio; + + }; + + this.setPixelRatio = function ( value ) { + + if ( value === undefined ) return; + + _pixelRatio = value; + + this.setSize( _width, _height, false ); + + }; + + this.getSize = function () { + + return { + width: _width, + height: _height + }; + + }; + + this.setSize = function ( width, height, updateStyle ) { + + var device = vr.getDevice(); + + if ( device && device.isPresenting ) { + + console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); + return; + + } + + _width = width; + _height = height; + + _canvas.width = width * _pixelRatio; + _canvas.height = height * _pixelRatio; + + if ( updateStyle !== false ) { + + _canvas.style.width = width + 'px'; + _canvas.style.height = height + 'px'; + + } + + this.setViewport( 0, 0, width, height ); + + }; + + this.getDrawingBufferSize = function () { + + return { + width: _width * _pixelRatio, + height: _height * _pixelRatio + }; + + }; + + this.setDrawingBufferSize = function ( width, height, pixelRatio ) { + + _width = width; + _height = height; + + _pixelRatio = pixelRatio; + + _canvas.width = width * pixelRatio; + _canvas.height = height * pixelRatio; + + this.setViewport( 0, 0, width, height ); + + }; + + this.setViewport = function ( x, y, width, height ) { + + _viewport.set( x, _height - y - height, width, height ); + state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) ); + + }; + + this.setScissor = function ( x, y, width, height ) { + + _scissor.set( x, _height - y - height, width, height ); + state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) ); + + }; + + this.setScissorTest = function ( boolean ) { + + state.setScissorTest( _scissorTest = boolean ); + + }; + + // Clearing + + this.getClearColor = background.getClearColor; + this.setClearColor = background.setClearColor; + this.getClearAlpha = background.getClearAlpha; + this.setClearAlpha = background.setClearAlpha; + + this.clear = function ( color, depth, stencil ) { + + var bits = 0; + + if ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT; + if ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT; + if ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT; + + _gl.clear( bits ); + + }; + + this.clearColor = function () { + + this.clear( true, false, false ); + + }; + + this.clearDepth = function () { + + this.clear( false, true, false ); + + }; + + this.clearStencil = function () { + + this.clear( false, false, true ); + + }; + + this.clearTarget = function ( renderTarget, color, depth, stencil ) { + + this.setRenderTarget( renderTarget ); + this.clear( color, depth, stencil ); + + }; + + // + + this.dispose = function () { + + _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); + _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); + + renderLists.dispose(); + + vr.dispose(); + + }; + + // Events + + function onContextLost( event ) { + + event.preventDefault(); + + console.log( 'THREE.WebGLRenderer: Context Lost.' ); + + _isContextLost = true; + + } + + function onContextRestore( event ) { + + console.log( 'THREE.WebGLRenderer: Context Restored.' ); + + _isContextLost = false; + + initGLContext(); + + } + + function onMaterialDispose( event ) { + + var material = event.target; + + material.removeEventListener( 'dispose', onMaterialDispose ); + + deallocateMaterial( material ); + + } + + // Buffer deallocation + + function deallocateMaterial( material ) { + + releaseMaterialProgramReference( material ); + + properties.remove( material ); + + } + + + function releaseMaterialProgramReference( material ) { + + var programInfo = properties.get( material ).program; + + material.program = undefined; + + if ( programInfo !== undefined ) { + + programCache.releaseProgram( programInfo ); + + } + + } + + // Buffer rendering + + function renderObjectImmediate( object, program, material ) { + + object.render( function ( object ) { + + _this.renderBufferImmediate( object, program, material ); + + } ); + + } + + this.renderBufferImmediate = function ( object, program, material ) { + + state.initAttributes(); + + var buffers = properties.get( object ); + + if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); + if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); + if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); + if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); + + var programAttributes = program.getAttributes(); + + if ( object.hasPositions ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.position ); + _gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasNormals ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal ); + + if ( ! material.isMeshPhongMaterial && + ! material.isMeshStandardMaterial && + ! material.isMeshNormalMaterial && + material.flatShading === true ) { + + for ( var i = 0, l = object.count * 3; i < l; i += 9 ) { + + var array = object.normalArray; + + var nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3; + var ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3; + var nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3; + + array[ i + 0 ] = nx; + array[ i + 1 ] = ny; + array[ i + 2 ] = nz; + + array[ i + 3 ] = nx; + array[ i + 4 ] = ny; + array[ i + 5 ] = nz; + + array[ i + 6 ] = nx; + array[ i + 7 ] = ny; + array[ i + 8 ] = nz; + + } + + } + + _gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.normal ); + + _gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasUvs && material.map ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.uv ); + + _gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 ); + + } + + if ( object.hasColors && material.vertexColors !== NoColors ) { + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color ); + _gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW ); + + state.enableAttribute( programAttributes.color ); + + _gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 ); + + } + + state.disableUnusedAttributes(); + + _gl.drawArrays( _gl.TRIANGLES, 0, object.count ); + + object.count = 0; + + }; + + this.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) { + + state.setMaterial( material ); + + var program = setProgram( camera, fog, material, object ); + var geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true ); + + var updateBuffers = false; + + if ( geometryProgram !== _currentGeometryProgram ) { + + _currentGeometryProgram = geometryProgram; + updateBuffers = true; + + } + + if ( object.morphTargetInfluences ) { + + morphtargets.update( object, geometry, material, program ); + + updateBuffers = true; + + } + + // + + var index = geometry.index; + var position = geometry.attributes.position; + var rangeFactor = 1; + + if ( material.wireframe === true ) { + + index = geometries.getWireframeAttribute( geometry ); + rangeFactor = 2; + + } + + var attribute; + var renderer = bufferRenderer; + + if ( index !== null ) { + + attribute = attributes.get( index ); + + renderer = indexedBufferRenderer; + renderer.setIndex( attribute ); + + } + + if ( updateBuffers ) { + + setupVertexAttributes( material, program, geometry ); + + if ( index !== null ) { + + _gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer ); + + } + + } + + // + + var dataCount = 0; + + if ( index !== null ) { + + dataCount = index.count; + + } else if ( position !== undefined ) { + + dataCount = position.count; + + } + + var rangeStart = geometry.drawRange.start * rangeFactor; + var rangeCount = geometry.drawRange.count * rangeFactor; + + var groupStart = group !== null ? group.start * rangeFactor : 0; + var groupCount = group !== null ? group.count * rangeFactor : Infinity; + + var drawStart = Math.max( rangeStart, groupStart ); + var drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; + + var drawCount = Math.max( 0, drawEnd - drawStart + 1 ); + + if ( drawCount === 0 ) return; + + // + + if ( object.isMesh ) { + + if ( material.wireframe === true ) { + + state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); + renderer.setMode( _gl.LINES ); + + } else { + + switch ( object.drawMode ) { + + case TrianglesDrawMode: + renderer.setMode( _gl.TRIANGLES ); + break; + + case TriangleStripDrawMode: + renderer.setMode( _gl.TRIANGLE_STRIP ); + break; + + case TriangleFanDrawMode: + renderer.setMode( _gl.TRIANGLE_FAN ); + break; + + } + + } + + + } else if ( object.isLine ) { + + var lineWidth = material.linewidth; + + if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material + + state.setLineWidth( lineWidth * getTargetPixelRatio() ); + + if ( object.isLineSegments ) { + + renderer.setMode( _gl.LINES ); + + } else if ( object.isLineLoop ) { + + renderer.setMode( _gl.LINE_LOOP ); + + } else { + + renderer.setMode( _gl.LINE_STRIP ); + + } + + } else if ( object.isPoints ) { + + renderer.setMode( _gl.POINTS ); + + } + + if ( geometry && geometry.isInstancedBufferGeometry ) { + + if ( geometry.maxInstancedCount > 0 ) { + + renderer.renderInstances( geometry, drawStart, drawCount ); + + } + + } else { + + renderer.render( drawStart, drawCount ); + + } + + }; + + function setupVertexAttributes( material, program, geometry, startIndex ) { + + if ( geometry && geometry.isInstancedBufferGeometry ) { + + if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) { + + console.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); + return; + + } + + } + + if ( startIndex === undefined ) startIndex = 0; + + state.initAttributes(); + + var geometryAttributes = geometry.attributes; + + var programAttributes = program.getAttributes(); + + var materialDefaultAttributeValues = material.defaultAttributeValues; + + for ( var name in programAttributes ) { + + var programAttribute = programAttributes[ name ]; + + if ( programAttribute >= 0 ) { + + var geometryAttribute = geometryAttributes[ name ]; + + if ( geometryAttribute !== undefined ) { + + var normalized = geometryAttribute.normalized; + var size = geometryAttribute.itemSize; + + var attribute = attributes.get( geometryAttribute ); + + // TODO Attribute may not be available on context restore + + if ( attribute === undefined ) continue; + + var buffer = attribute.buffer; + var type = attribute.type; + var bytesPerElement = attribute.bytesPerElement; + + if ( geometryAttribute.isInterleavedBufferAttribute ) { + + var data = geometryAttribute.data; + var stride = data.stride; + var offset = geometryAttribute.offset; + + if ( data && data.isInstancedInterleavedBuffer ) { + + state.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); + + if ( geometry.maxInstancedCount === undefined ) { + + geometry.maxInstancedCount = data.meshPerAttribute * data.count; + + } + + } else { + + state.enableAttribute( programAttribute ); + + } + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); + _gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, ( startIndex * stride + offset ) * bytesPerElement ); + + } else { + + if ( geometryAttribute.isInstancedBufferAttribute ) { + + state.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); + + if ( geometry.maxInstancedCount === undefined ) { + + geometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; + + } + + } else { + + state.enableAttribute( programAttribute ); + + } + + _gl.bindBuffer( _gl.ARRAY_BUFFER, buffer ); + _gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, startIndex * size * bytesPerElement ); + + } + + } else if ( materialDefaultAttributeValues !== undefined ) { + + var value = materialDefaultAttributeValues[ name ]; + + if ( value !== undefined ) { + + switch ( value.length ) { + + case 2: + _gl.vertexAttrib2fv( programAttribute, value ); + break; + + case 3: + _gl.vertexAttrib3fv( programAttribute, value ); + break; + + case 4: + _gl.vertexAttrib4fv( programAttribute, value ); + break; + + default: + _gl.vertexAttrib1fv( programAttribute, value ); + + } + + } + + } + + } + + } + + state.disableUnusedAttributes(); + + } + + // Compile + + this.compile = function ( scene, camera ) { + + lightsArray.length = 0; + shadowsArray.length = 0; + + scene.traverse( function ( object ) { + + if ( object.isLight ) { + + lightsArray.push( object ); + + if ( object.castShadow ) { + + shadowsArray.push( object ); + + } + + } + + } ); + + lights.setup( lightsArray, shadowsArray, camera ); + + scene.traverse( function ( object ) { + + if ( object.material ) { + + if ( Array.isArray( object.material ) ) { + + for ( var i = 0; i < object.material.length; i ++ ) { + + initMaterial( object.material[ i ], scene.fog, object ); + + } + + } else { + + initMaterial( object.material, scene.fog, object ); + + } + + } + + } ); + + }; + + // Animation Loop + + var isAnimating = false; + var onAnimationFrame = null; + + function start() { + + if ( isAnimating ) return; + ( vr.getDevice() || window ).requestAnimationFrame( loop ); + isAnimating = true; + + } + + function loop( time ) { + + if ( onAnimationFrame !== null ) onAnimationFrame( time ); + ( vr.getDevice() || window ).requestAnimationFrame( loop ); + + } + + this.animate = function ( callback ) { + + onAnimationFrame = callback; + start(); + + }; + + // Rendering + + this.render = function ( scene, camera, renderTarget, forceClear ) { + + if ( ! ( camera && camera.isCamera ) ) { + + console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); + return; + + } + + if ( _isContextLost ) return; + + // reset caching for this frame + + _currentGeometryProgram = ''; + _currentMaterialId = - 1; + _currentCamera = null; + + // update scene graph + + if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); + + // update camera matrices and frustum + + if ( camera.parent === null ) camera.updateMatrixWorld(); + + if ( vr.enabled ) { + + camera = vr.getCamera( camera ); + + } + + _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); + _frustum.setFromMatrix( _projScreenMatrix ); + + lightsArray.length = 0; + shadowsArray.length = 0; + + spritesArray.length = 0; + flaresArray.length = 0; + + _localClippingEnabled = this.localClippingEnabled; + _clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); + + currentRenderList = renderLists.get( scene, camera ); + currentRenderList.init(); + + projectObject( scene, camera, _this.sortObjects ); + + if ( _this.sortObjects === true ) { + + currentRenderList.sort(); + + } + + // + + if ( _clippingEnabled ) _clipping.beginShadows(); + + shadowMap.render( shadowsArray, scene, camera ); + + lights.setup( lightsArray, shadowsArray, camera ); + + if ( _clippingEnabled ) _clipping.endShadows(); + + // + + _infoRender.frame ++; + _infoRender.calls = 0; + _infoRender.vertices = 0; + _infoRender.faces = 0; + _infoRender.points = 0; + + if ( renderTarget === undefined ) { + + renderTarget = null; + + } + + this.setRenderTarget( renderTarget ); + + // + + background.render( currentRenderList, scene, camera, forceClear ); + + // render scene + + var opaqueObjects = currentRenderList.opaque; + var transparentObjects = currentRenderList.transparent; + + if ( scene.overrideMaterial ) { + + var overrideMaterial = scene.overrideMaterial; + + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial ); + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial ); + + } else { + + // opaque pass (front-to-back order) + + if ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera ); + + // transparent pass (back-to-front order) + + if ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera ); + + } + + // custom renderers + + spriteRenderer.render( spritesArray, scene, camera ); + flareRenderer.render( flaresArray, scene, camera, _currentViewport ); + + // Generate mipmap if we're using any kind of mipmap filtering + + if ( renderTarget ) { + + textures.updateRenderTargetMipmap( renderTarget ); + + } + + // Ensure depth buffer writing is enabled so it can be cleared on next render + + state.buffers.depth.setTest( true ); + state.buffers.depth.setMask( true ); + state.buffers.color.setMask( true ); + + state.setPolygonOffset( false ); + + if ( vr.enabled ) { + + vr.submitFrame(); + + } + + // _gl.finish(); + + }; + + /* + // TODO Duplicated code (Frustum) + + var _sphere = new Sphere(); + + function isObjectViewable( object ) { + + var geometry = object.geometry; + + if ( geometry.boundingSphere === null ) + geometry.computeBoundingSphere(); + + _sphere.copy( geometry.boundingSphere ). + applyMatrix4( object.matrixWorld ); + + return isSphereViewable( _sphere ); + + } + + function isSpriteViewable( sprite ) { + + _sphere.center.set( 0, 0, 0 ); + _sphere.radius = 0.7071067811865476; + _sphere.applyMatrix4( sprite.matrixWorld ); + + return isSphereViewable( _sphere ); + + } + + function isSphereViewable( sphere ) { + + if ( ! _frustum.intersectsSphere( sphere ) ) return false; + + var numPlanes = _clipping.numPlanes; + + if ( numPlanes === 0 ) return true; + + var planes = _this.clippingPlanes, + + center = sphere.center, + negRad = - sphere.radius, + i = 0; + + do { + + // out when deeper than radius in the negative halfspace + if ( planes[ i ].distanceToPoint( center ) < negRad ) return false; + + } while ( ++ i !== numPlanes ); + + return true; + + } + */ + + function projectObject( object, camera, sortObjects ) { + + if ( ! object.visible ) return; + + var visible = object.layers.test( camera.layers ); + + if ( visible ) { + + if ( object.isLight ) { + + lightsArray.push( object ); + + if ( object.castShadow ) { + + shadowsArray.push( object ); + + } + + } else if ( object.isSprite ) { + + if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { + + spritesArray.push( object ); + + } + + } else if ( object.isLensFlare ) { + + flaresArray.push( object ); + + } else if ( object.isImmediateRenderObject ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + currentRenderList.push( object, null, object.material, _vector3.z, null ); + + } else if ( object.isMesh || object.isLine || object.isPoints ) { + + if ( object.isSkinnedMesh ) { + + object.skeleton.update(); + + } + + if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { + + if ( sortObjects ) { + + _vector3.setFromMatrixPosition( object.matrixWorld ) + .applyMatrix4( _projScreenMatrix ); + + } + + var geometry = objects.update( object ); + var material = object.material; + + if ( Array.isArray( material ) ) { + + var groups = geometry.groups; + + for ( var i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + var groupMaterial = material[ group.materialIndex ]; + + if ( groupMaterial && groupMaterial.visible ) { + + currentRenderList.push( object, geometry, groupMaterial, _vector3.z, group ); + + } + + } + + } else if ( material.visible ) { + + currentRenderList.push( object, geometry, material, _vector3.z, null ); + + } + + } + + } + + } + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + projectObject( children[ i ], camera, sortObjects ); + + } + + } + + function renderObjects( renderList, scene, camera, overrideMaterial ) { + + for ( var i = 0, l = renderList.length; i < l; i ++ ) { + + var renderItem = renderList[ i ]; + + var object = renderItem.object; + var geometry = renderItem.geometry; + var material = overrideMaterial === undefined ? renderItem.material : overrideMaterial; + var group = renderItem.group; + + if ( camera.isArrayCamera ) { + + _currentArrayCamera = camera; + + var cameras = camera.cameras; + + for ( var j = 0, jl = cameras.length; j < jl; j ++ ) { + + var camera2 = cameras[ j ]; + + if ( object.layers.test( camera2.layers ) ) { + + var bounds = camera2.bounds; + + var x = bounds.x * _width; + var y = bounds.y * _height; + var width = bounds.z * _width; + var height = bounds.w * _height; + + state.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) ); + + renderObject( object, scene, camera2, geometry, material, group ); + + } + + } + + } else { + + _currentArrayCamera = null; + + renderObject( object, scene, camera, geometry, material, group ); + + } + + } + + } + + function renderObject( object, scene, camera, geometry, material, group ) { + + object.onBeforeRender( _this, scene, camera, geometry, material, group ); + + object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); + object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); + + if ( object.isImmediateRenderObject ) { + + state.setMaterial( material ); + + var program = setProgram( camera, scene.fog, material, object ); + + _currentGeometryProgram = ''; + + renderObjectImmediate( object, program, material ); + + } else { + + _this.renderBufferDirect( camera, scene.fog, geometry, material, object, group ); + + } + + object.onAfterRender( _this, scene, camera, geometry, material, group ); + + } + + function initMaterial( material, fog, object ) { + + var materialProperties = properties.get( material ); + + var parameters = programCache.getParameters( + material, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object ); + + var code = programCache.getProgramCode( material, parameters ); + + var program = materialProperties.program; + var programChange = true; + + if ( program === undefined ) { + + // new material + material.addEventListener( 'dispose', onMaterialDispose ); + + } else if ( program.code !== code ) { + + // changed glsl or parameters + releaseMaterialProgramReference( material ); + + } else if ( parameters.shaderID !== undefined ) { + + // same glsl and uniform list + return; + + } else { + + // only rebuild uniform list + programChange = false; + + } + + if ( programChange ) { + + if ( parameters.shaderID ) { + + var shader = ShaderLib[ parameters.shaderID ]; + + materialProperties.shader = { + name: material.type, + uniforms: UniformsUtils.clone( shader.uniforms ), + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader + }; + + } else { + + materialProperties.shader = { + name: material.type, + uniforms: material.uniforms, + vertexShader: material.vertexShader, + fragmentShader: material.fragmentShader + }; + + } + + material.onBeforeCompile( materialProperties.shader ); + + program = programCache.acquireProgram( material, materialProperties.shader, parameters, code ); + + materialProperties.program = program; + material.program = program; + + } + + var programAttributes = program.getAttributes(); + + if ( material.morphTargets ) { + + material.numSupportedMorphTargets = 0; + + for ( var i = 0; i < _this.maxMorphTargets; i ++ ) { + + if ( programAttributes[ 'morphTarget' + i ] >= 0 ) { + + material.numSupportedMorphTargets ++; + + } + + } + + } + + if ( material.morphNormals ) { + + material.numSupportedMorphNormals = 0; + + for ( var i = 0; i < _this.maxMorphNormals; i ++ ) { + + if ( programAttributes[ 'morphNormal' + i ] >= 0 ) { + + material.numSupportedMorphNormals ++; + + } + + } + + } + + var uniforms = materialProperties.shader.uniforms; + + if ( ! material.isShaderMaterial && + ! material.isRawShaderMaterial || + material.clipping === true ) { + + materialProperties.numClippingPlanes = _clipping.numPlanes; + materialProperties.numIntersection = _clipping.numIntersection; + uniforms.clippingPlanes = _clipping.uniform; + + } + + materialProperties.fog = fog; + + // store the light setup it was created for + + materialProperties.lightsHash = lights.state.hash; + + if ( material.lights ) { + + // wire up the material to this renderer's lighting state + + uniforms.ambientLightColor.value = lights.state.ambient; + uniforms.directionalLights.value = lights.state.directional; + uniforms.spotLights.value = lights.state.spot; + uniforms.rectAreaLights.value = lights.state.rectArea; + uniforms.pointLights.value = lights.state.point; + uniforms.hemisphereLights.value = lights.state.hemi; + + uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; + uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; + uniforms.spotShadowMap.value = lights.state.spotShadowMap; + uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; + uniforms.pointShadowMap.value = lights.state.pointShadowMap; + uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; + // TODO (abelnation): add area lights shadow info to uniforms + + } + + var progUniforms = materialProperties.program.getUniforms(), + uniformsList = + WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); + + materialProperties.uniformsList = uniformsList; + + } + + function setProgram( camera, fog, material, object ) { + + _usedTextureUnits = 0; + + var materialProperties = properties.get( material ); + + if ( _clippingEnabled ) { + + if ( _localClippingEnabled || camera !== _currentCamera ) { + + var useCache = + camera === _currentCamera && + material.id === _currentMaterialId; + + // we might want to call this function with some ClippingGroup + // object instead of the material, once it becomes feasible + // (#8465, #8379) + _clipping.setState( + material.clippingPlanes, material.clipIntersection, material.clipShadows, + camera, materialProperties, useCache ); + + } + + } + + if ( material.needsUpdate === false ) { + + if ( materialProperties.program === undefined ) { + + material.needsUpdate = true; + + } else if ( material.fog && materialProperties.fog !== fog ) { + + material.needsUpdate = true; + + } else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) { + + material.needsUpdate = true; + + } else if ( materialProperties.numClippingPlanes !== undefined && + ( materialProperties.numClippingPlanes !== _clipping.numPlanes || + materialProperties.numIntersection !== _clipping.numIntersection ) ) { + + material.needsUpdate = true; + + } + + } + + if ( material.needsUpdate ) { + + initMaterial( material, fog, object ); + material.needsUpdate = false; + + } + + var refreshProgram = false; + var refreshMaterial = false; + var refreshLights = false; + + var program = materialProperties.program, + p_uniforms = program.getUniforms(), + m_uniforms = materialProperties.shader.uniforms; + + if ( state.useProgram( program.program ) ) { + + refreshProgram = true; + refreshMaterial = true; + refreshLights = true; + + } + + if ( material.id !== _currentMaterialId ) { + + _currentMaterialId = material.id; + + refreshMaterial = true; + + } + + if ( refreshProgram || camera !== _currentCamera ) { + + p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); + + if ( capabilities.logarithmicDepthBuffer ) { + + p_uniforms.setValue( _gl, 'logDepthBufFC', + 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); + + } + + // Avoid unneeded uniform updates per ArrayCamera's sub-camera + + if ( _currentCamera !== ( _currentArrayCamera || camera ) ) { + + _currentCamera = ( _currentArrayCamera || camera ); + + // lighting uniforms depend on the camera so enforce an update + // now, in case this material supports lights - or later, when + // the next material that does gets activated: + + refreshMaterial = true; // set to true on material change + refreshLights = true; // remains set until update done + + } + + // load material specific uniforms + // (shader material also gets them for the sake of genericity) + + if ( material.isShaderMaterial || + material.isMeshPhongMaterial || + material.isMeshStandardMaterial || + material.envMap ) { + + var uCamPos = p_uniforms.map.cameraPosition; + + if ( uCamPos !== undefined ) { + + uCamPos.setValue( _gl, + _vector3.setFromMatrixPosition( camera.matrixWorld ) ); + + } + + } + + if ( material.isMeshPhongMaterial || + material.isMeshLambertMaterial || + material.isMeshBasicMaterial || + material.isMeshStandardMaterial || + material.isShaderMaterial || + material.skinning ) { + + p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); + + } + + } + + // skinning uniforms must be set even if material didn't change + // auto-setting of texture unit for bone texture must go before other textures + // not sure why, but otherwise weird things happen + + if ( material.skinning ) { + + p_uniforms.setOptional( _gl, object, 'bindMatrix' ); + p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); + + var skeleton = object.skeleton; + + if ( skeleton ) { + + var bones = skeleton.bones; + + if ( capabilities.floatVertexTextures ) { + + if ( skeleton.boneTexture === undefined ) { + + // layout (1 matrix = 4 pixels) + // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) + // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) + // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) + // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) + // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) + + + var size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix + size = _Math.nextPowerOfTwo( Math.ceil( size ) ); + size = Math.max( size, 4 ); + + var boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel + boneMatrices.set( skeleton.boneMatrices ); // copy current values + + var boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); + + skeleton.boneMatrices = boneMatrices; + skeleton.boneTexture = boneTexture; + skeleton.boneTextureSize = size; + + } + + p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture ); + p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); + + } else { + + p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); + + } + + } + + } + + if ( refreshMaterial ) { + + p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); + p_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint ); + + if ( material.lights ) { + + // the current material requires lighting info + + // note: all lighting uniforms are always set correctly + // they simply reference the renderer's state for their + // values + // + // use the current material's .needsUpdate flags to set + // the GL state when required + + markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); + + } + + // refresh uniforms common to several materials + + if ( fog && material.fog ) { + + refreshUniformsFog( m_uniforms, fog ); + + } + + if ( material.isMeshBasicMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + } else if ( material.isMeshLambertMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsLambert( m_uniforms, material ); + + } else if ( material.isMeshPhongMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + if ( material.isMeshToonMaterial ) { + + refreshUniformsToon( m_uniforms, material ); + + } else { + + refreshUniformsPhong( m_uniforms, material ); + + } + + } else if ( material.isMeshStandardMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + + if ( material.isMeshPhysicalMaterial ) { + + refreshUniformsPhysical( m_uniforms, material ); + + } else { + + refreshUniformsStandard( m_uniforms, material ); + + } + + } else if ( material.isMeshDepthMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsDepth( m_uniforms, material ); + + } else if ( material.isMeshDistanceMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsDistance( m_uniforms, material ); + + } else if ( material.isMeshNormalMaterial ) { + + refreshUniformsCommon( m_uniforms, material ); + refreshUniformsNormal( m_uniforms, material ); + + } else if ( material.isLineBasicMaterial ) { + + refreshUniformsLine( m_uniforms, material ); + + if ( material.isLineDashedMaterial ) { + + refreshUniformsDash( m_uniforms, material ); + + } + + } else if ( material.isPointsMaterial ) { + + refreshUniformsPoints( m_uniforms, material ); + + } else if ( material.isShadowMaterial ) { + + m_uniforms.color.value = material.color; + m_uniforms.opacity.value = material.opacity; + + } + + // RectAreaLight Texture + // TODO (mrdoob): Find a nicer implementation + + if ( m_uniforms.ltcMat !== undefined ) m_uniforms.ltcMat.value = UniformsLib.LTC_MAT_TEXTURE; + if ( m_uniforms.ltcMag !== undefined ) m_uniforms.ltcMag.value = UniformsLib.LTC_MAG_TEXTURE; + + WebGLUniforms.upload( + _gl, materialProperties.uniformsList, m_uniforms, _this ); + + } + + + // common matrices + + p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); + p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); + p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); + + return program; + + } + + // Uniforms (refresh uniforms objects) + + function refreshUniformsCommon( uniforms, material ) { + + uniforms.opacity.value = material.opacity; + + if ( material.color ) { + + uniforms.diffuse.value = material.color; + + } + + if ( material.emissive ) { + + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + } + + if ( material.map ) { + + uniforms.map.value = material.map; + + } + + if ( material.alphaMap ) { + + uniforms.alphaMap.value = material.alphaMap; + + } + + if ( material.specularMap ) { + + uniforms.specularMap.value = material.specularMap; + + } + + if ( material.envMap ) { + + uniforms.envMap.value = material.envMap; + + // don't flip CubeTexture envMaps, flip everything else: + // WebGLRenderTargetCube will be flipped for backwards compatibility + // WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture + // this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future + uniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1; + + uniforms.reflectivity.value = material.reflectivity; + uniforms.refractionRatio.value = material.refractionRatio; + + } + + if ( material.lightMap ) { + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + } + + if ( material.aoMap ) { + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + } + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. normal map + // 4. bump map + // 5. alpha map + // 6. emissive map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.roughnessMap ) { + + uvScaleMap = material.roughnessMap; + + } else if ( material.metalnessMap ) { + + uvScaleMap = material.metalnessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + var offset = uvScaleMap.offset; + var repeat = uvScaleMap.repeat; + + uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); + + } + + } + + function refreshUniformsLine( uniforms, material ) { + + uniforms.diffuse.value = material.color; + uniforms.opacity.value = material.opacity; + + } + + function refreshUniformsDash( uniforms, material ) { + + uniforms.dashSize.value = material.dashSize; + uniforms.totalSize.value = material.dashSize + material.gapSize; + uniforms.scale.value = material.scale; + + } + + function refreshUniformsPoints( uniforms, material ) { + + uniforms.diffuse.value = material.color; + uniforms.opacity.value = material.opacity; + uniforms.size.value = material.size * _pixelRatio; + uniforms.scale.value = _height * 0.5; + + uniforms.map.value = material.map; + + if ( material.map !== null ) { + + var offset = material.map.offset; + var repeat = material.map.repeat; + + uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); + + } + + } + + function refreshUniformsFog( uniforms, fog ) { + + uniforms.fogColor.value = fog.color; + + if ( fog.isFog ) { + + uniforms.fogNear.value = fog.near; + uniforms.fogFar.value = fog.far; + + } else if ( fog.isFogExp2 ) { + + uniforms.fogDensity.value = fog.density; + + } + + } + + function refreshUniformsLambert( uniforms, material ) { + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + } + + function refreshUniformsPhong( uniforms, material ) { + + uniforms.specular.value = material.specular; + uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsToon( uniforms, material ) { + + refreshUniformsPhong( uniforms, material ); + + if ( material.gradientMap ) { + + uniforms.gradientMap.value = material.gradientMap; + + } + + } + + function refreshUniformsStandard( uniforms, material ) { + + uniforms.roughness.value = material.roughness; + uniforms.metalness.value = material.metalness; + + if ( material.roughnessMap ) { + + uniforms.roughnessMap.value = material.roughnessMap; + + } + + if ( material.metalnessMap ) { + + uniforms.metalnessMap.value = material.metalnessMap; + + } + + if ( material.emissiveMap ) { + + uniforms.emissiveMap.value = material.emissiveMap; + + } + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + if ( material.envMap ) { + + //uniforms.envMap.value = material.envMap; // part of uniforms common + uniforms.envMapIntensity.value = material.envMapIntensity; + + } + + } + + function refreshUniformsPhysical( uniforms, material ) { + + uniforms.clearCoat.value = material.clearCoat; + uniforms.clearCoatRoughness.value = material.clearCoatRoughness; + + refreshUniformsStandard( uniforms, material ); + + } + + function refreshUniformsDepth( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + function refreshUniformsDistance( uniforms, material ) { + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + uniforms.referencePosition.value.copy( material.referencePosition ); + uniforms.nearDistance.value = material.nearDistance; + uniforms.farDistance.value = material.farDistance; + + } + + function refreshUniformsNormal( uniforms, material ) { + + if ( material.bumpMap ) { + + uniforms.bumpMap.value = material.bumpMap; + uniforms.bumpScale.value = material.bumpScale; + + } + + if ( material.normalMap ) { + + uniforms.normalMap.value = material.normalMap; + uniforms.normalScale.value.copy( material.normalScale ); + + } + + if ( material.displacementMap ) { + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + } + + } + + // If uniforms are marked as clean, they don't need to be loaded to the GPU. + + function markUniformsLightsNeedsUpdate( uniforms, value ) { + + uniforms.ambientLightColor.needsUpdate = value; + + uniforms.directionalLights.needsUpdate = value; + uniforms.pointLights.needsUpdate = value; + uniforms.spotLights.needsUpdate = value; + uniforms.rectAreaLights.needsUpdate = value; + uniforms.hemisphereLights.needsUpdate = value; + + } + + // GL state setting + + this.setFaceCulling = function ( cullFace, frontFaceDirection ) { + + state.setCullFace( cullFace ); + state.setFlipSided( frontFaceDirection === FrontFaceDirectionCW ); + + }; + + // Textures + + function allocTextureUnit() { + + var textureUnit = _usedTextureUnits; + + if ( textureUnit >= capabilities.maxTextures ) { + + console.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures ); + + } + + _usedTextureUnits += 1; + + return textureUnit; + + } + + this.allocTextureUnit = allocTextureUnit; + + // this.setTexture2D = setTexture2D; + this.setTexture2D = ( function () { + + var warned = false; + + // backwards compatibility: peel texture.texture + return function setTexture2D( texture, slot ) { + + if ( texture && texture.isWebGLRenderTarget ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead." ); + warned = true; + + } + + texture = texture.texture; + + } + + textures.setTexture2D( texture, slot ); + + }; + + }() ); + + this.setTexture = ( function () { + + var warned = false; + + return function setTexture( texture, slot ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead." ); + warned = true; + + } + + textures.setTexture2D( texture, slot ); + + }; + + }() ); + + this.setTextureCube = ( function () { + + var warned = false; + + return function setTextureCube( texture, slot ) { + + // backwards compatibility: peel texture.texture + if ( texture && texture.isWebGLRenderTargetCube ) { + + if ( ! warned ) { + + console.warn( "THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead." ); + warned = true; + + } + + texture = texture.texture; + + } + + // currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture + // TODO: unify these code paths + if ( ( texture && texture.isCubeTexture ) || + ( Array.isArray( texture.image ) && texture.image.length === 6 ) ) { + + // CompressedTexture can have Array in image :/ + + // this function alone should take care of cube textures + textures.setTextureCube( texture, slot ); + + } else { + + // assumed: texture property of THREE.WebGLRenderTargetCube + + textures.setTextureCubeDynamic( texture, slot ); + + } + + }; + + }() ); + + this.getRenderTarget = function () { + + return _currentRenderTarget; + + }; + + this.setRenderTarget = function ( renderTarget ) { + + _currentRenderTarget = renderTarget; + + if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { + + textures.setupRenderTarget( renderTarget ); + + } + + var framebuffer = null; + var isCube = false; + + if ( renderTarget ) { + + var __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( renderTarget.isWebGLRenderTargetCube ) { + + framebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ]; + isCube = true; + + } else { + + framebuffer = __webglFramebuffer; + + } + + _currentViewport.copy( renderTarget.viewport ); + _currentScissor.copy( renderTarget.scissor ); + _currentScissorTest = renderTarget.scissorTest; + + } else { + + _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ); + _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ); + _currentScissorTest = _scissorTest; + + } + + if ( _currentFramebuffer !== framebuffer ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + _currentFramebuffer = framebuffer; + + } + + state.viewport( _currentViewport ); + state.scissor( _currentScissor ); + state.setScissorTest( _currentScissorTest ); + + if ( isCube ) { + + var textureProperties = properties.get( renderTarget.texture ); + _gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel ); + + } + + }; + + this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) { + + if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); + return; + + } + + var framebuffer = properties.get( renderTarget ).__webglFramebuffer; + + if ( framebuffer ) { + + var restore = false; + + if ( framebuffer !== _currentFramebuffer ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer ); + + restore = true; + + } + + try { + + var texture = renderTarget.texture; + var textureFormat = texture.format; + var textureType = texture.type; + + if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); + return; + + } + + if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513) + ! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox + ! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); + return; + + } + + if ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) { + + // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) + + if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { + + _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); + + } + + } else { + + console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); + + } + + } finally { + + if ( restore ) { + + _gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer ); + + } + + } + + } + + }; + +} + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function FogExp2 ( color, density ) { + + this.name = ''; + + this.color = new Color( color ); + this.density = ( density !== undefined ) ? density : 0.00025; + +} + +FogExp2.prototype.isFogExp2 = true; + +FogExp2.prototype.clone = function () { + + return new FogExp2( this.color.getHex(), this.density ); + +}; + +FogExp2.prototype.toJSON = function ( meta ) { + + return { + type: 'FogExp2', + color: this.color.getHex(), + density: this.density + }; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Fog ( color, near, far ) { + + this.name = ''; + + this.color = new Color( color ); + + this.near = ( near !== undefined ) ? near : 1; + this.far = ( far !== undefined ) ? far : 1000; + +} + +Fog.prototype.isFog = true; + +Fog.prototype.clone = function () { + + return new Fog( this.color.getHex(), this.near, this.far ); + +}; + +Fog.prototype.toJSON = function ( meta ) { + + return { + type: 'Fog', + color: this.color.getHex(), + near: this.near, + far: this.far + }; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Scene () { + + Object3D.call( this ); + + this.type = 'Scene'; + + this.background = null; + this.fog = null; + this.overrideMaterial = null; + + this.autoUpdate = true; // checked by the renderer + +} + +Scene.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Scene, + + copy: function ( source, recursive ) { + + Object3D.prototype.copy.call( this, source, recursive ); + + if ( source.background !== null ) this.background = source.background.clone(); + if ( source.fog !== null ) this.fog = source.fog.clone(); + if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); + + this.autoUpdate = source.autoUpdate; + this.matrixAutoUpdate = source.matrixAutoUpdate; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + if ( this.background !== null ) data.object.background = this.background.toJSON( meta ); + if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); + + return data; + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function LensFlare( texture, size, distance, blending, color ) { + + Object3D.call( this ); + + this.lensFlares = []; + + this.positionScreen = new Vector3(); + this.customUpdateCallback = undefined; + + if ( texture !== undefined ) { + + this.add( texture, size, distance, blending, color ); + + } + +} + +LensFlare.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LensFlare, + + isLensFlare: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.positionScreen.copy( source.positionScreen ); + this.customUpdateCallback = source.customUpdateCallback; + + for ( var i = 0, l = source.lensFlares.length; i < l; i ++ ) { + + this.lensFlares.push( source.lensFlares[ i ] ); + + } + + return this; + + }, + + add: function ( texture, size, distance, blending, color, opacity ) { + + if ( size === undefined ) size = - 1; + if ( distance === undefined ) distance = 0; + if ( opacity === undefined ) opacity = 1; + if ( color === undefined ) color = new Color( 0xffffff ); + if ( blending === undefined ) blending = NormalBlending; + + distance = Math.min( distance, Math.max( 0, distance ) ); + + this.lensFlares.push( { + texture: texture, // THREE.Texture + size: size, // size in pixels (-1 = use texture.width) + distance: distance, // distance (0-1) from light source (0=at light source) + x: 0, y: 0, z: 0, // screen position (-1 => 1) z = 0 is in front z = 1 is back + scale: 1, // scale + rotation: 0, // rotation + opacity: opacity, // opacity + color: color, // color + blending: blending // blending + } ); + + }, + + /* + * Update lens flares update positions on all flares based on the screen position + * Set myLensFlare.customUpdateCallback to alter the flares in your project specific way. + */ + + updateLensFlares: function () { + + var f, fl = this.lensFlares.length; + var flare; + var vecX = - this.positionScreen.x * 2; + var vecY = - this.positionScreen.y * 2; + + for ( f = 0; f < fl; f ++ ) { + + flare = this.lensFlares[ f ]; + + flare.x = this.positionScreen.x + vecX * flare.distance; + flare.y = this.positionScreen.y + vecY * flare.distance; + + flare.wantedRotation = flare.x * Math.PI * 0.25; + flare.rotation += ( flare.wantedRotation - flare.rotation ) * 0.25; + + } + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * uvOffset: new THREE.Vector2(), + * uvScale: new THREE.Vector2() + * } + */ + +function SpriteMaterial( parameters ) { + + Material.call( this ); + + this.type = 'SpriteMaterial'; + + this.color = new Color( 0xffffff ); + this.map = null; + + this.rotation = 0; + + this.fog = false; + this.lights = false; + + this.setValues( parameters ); + +} + +SpriteMaterial.prototype = Object.create( Material.prototype ); +SpriteMaterial.prototype.constructor = SpriteMaterial; +SpriteMaterial.prototype.isSpriteMaterial = true; + +SpriteMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.map = source.map; + + this.rotation = source.rotation; + + return this; + +}; + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Sprite( material ) { + + Object3D.call( this ); + + this.type = 'Sprite'; + + this.material = ( material !== undefined ) ? material : new SpriteMaterial(); + +} + +Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Sprite, + + isSprite: true, + + raycast: ( function () { + + var intersectPoint = new Vector3(); + var worldPosition = new Vector3(); + var worldScale = new Vector3(); + + return function raycast( raycaster, intersects ) { + + worldPosition.setFromMatrixPosition( this.matrixWorld ); + raycaster.ray.closestPointToPoint( worldPosition, intersectPoint ); + + worldScale.setFromMatrixScale( this.matrixWorld ); + var guessSizeSq = worldScale.x * worldScale.y / 4; + + if ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return; + + var distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + point: intersectPoint.clone(), + face: null, + object: this + + } ); + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.material ).copy( this ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function LOD() { + + Object3D.call( this ); + + this.type = 'LOD'; + + Object.defineProperties( this, { + levels: { + enumerable: true, + value: [] + } + } ); + +} + +LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: LOD, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source, false ); + + var levels = source.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + this.addLevel( level.object.clone(), level.distance ); + + } + + return this; + + }, + + addLevel: function ( object, distance ) { + + if ( distance === undefined ) distance = 0; + + distance = Math.abs( distance ); + + var levels = this.levels; + + for ( var l = 0; l < levels.length; l ++ ) { + + if ( distance < levels[ l ].distance ) { + + break; + + } + + } + + levels.splice( l, 0, { distance: distance, object: object } ); + + this.add( object ); + + }, + + getObjectForDistance: function ( distance ) { + + var levels = this.levels; + + for ( var i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance < levels[ i ].distance ) { + + break; + + } + + } + + return levels[ i - 1 ].object; + + }, + + raycast: ( function () { + + var matrixPosition = new Vector3(); + + return function raycast( raycaster, intersects ) { + + matrixPosition.setFromMatrixPosition( this.matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( matrixPosition ); + + this.getObjectForDistance( distance ).raycast( raycaster, intersects ); + + }; + + }() ), + + update: function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + + return function update( camera ) { + + var levels = this.levels; + + if ( levels.length > 1 ) { + + v1.setFromMatrixPosition( camera.matrixWorld ); + v2.setFromMatrixPosition( this.matrixWorld ); + + var distance = v1.distanceTo( v2 ); + + levels[ 0 ].object.visible = true; + + for ( var i = 1, l = levels.length; i < l; i ++ ) { + + if ( distance >= levels[ i ].distance ) { + + levels[ i - 1 ].object.visible = false; + levels[ i ].object.visible = true; + + } else { + + break; + + } + + } + + for ( ; i < l; i ++ ) { + + levels[ i ].object.visible = false; + + } + + } + + }; + + }(), + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.levels = []; + + var levels = this.levels; + + for ( var i = 0, l = levels.length; i < l; i ++ ) { + + var level = levels[ i ]; + + data.object.levels.push( { + object: level.object.uuid, + distance: level.distance + } ); + + } + + return data; + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author michael guerrero / http://realitymeltdown.com + * @author ikerr / http://verold.com + */ + +function Skeleton( bones, boneInverses ) { + + // copy the bone array + + bones = bones || []; + + this.bones = bones.slice( 0 ); + this.boneMatrices = new Float32Array( this.bones.length * 16 ); + + // use the supplied bone inverses or calculate the inverses + + if ( boneInverses === undefined ) { + + this.calculateInverses(); + + } else { + + if ( this.bones.length === boneInverses.length ) { + + this.boneInverses = boneInverses.slice( 0 ); + + } else { + + console.warn( 'THREE.Skeleton boneInverses is the wrong length.' ); + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + this.boneInverses.push( new Matrix4() ); + + } + + } + + } + +} + +Object.assign( Skeleton.prototype, { + + calculateInverses: function () { + + this.boneInverses = []; + + for ( var i = 0, il = this.bones.length; i < il; i ++ ) { + + var inverse = new Matrix4(); + + if ( this.bones[ i ] ) { + + inverse.getInverse( this.bones[ i ].matrixWorld ); + + } + + this.boneInverses.push( inverse ); + + } + + }, + + pose: function () { + + var bone, i, il; + + // recover the bind-time world matrices + + for ( i = 0, il = this.bones.length; i < il; i ++ ) { + + bone = this.bones[ i ]; + + if ( bone ) { + + bone.matrixWorld.getInverse( this.boneInverses[ i ] ); + + } + + } + + // compute the local matrices, positions, rotations and scales + + for ( i = 0, il = this.bones.length; i < il; i ++ ) { + + bone = this.bones[ i ]; + + if ( bone ) { + + if ( bone.parent && bone.parent.isBone ) { + + bone.matrix.getInverse( bone.parent.matrixWorld ); + bone.matrix.multiply( bone.matrixWorld ); + + } else { + + bone.matrix.copy( bone.matrixWorld ); + + } + + bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); + + } + + } + + }, + + update: ( function () { + + var offsetMatrix = new Matrix4(); + var identityMatrix = new Matrix4(); + + return function update() { + + var bones = this.bones; + var boneInverses = this.boneInverses; + var boneMatrices = this.boneMatrices; + var boneTexture = this.boneTexture; + + // flatten bone matrices to array + + for ( var i = 0, il = bones.length; i < il; i ++ ) { + + // compute the offset between the current and the original transform + + var matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix; + + offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); + offsetMatrix.toArray( boneMatrices, i * 16 ); + + } + + if ( boneTexture !== undefined ) { + + boneTexture.needsUpdate = true; + + } + + }; + + } )(), + + clone: function () { + + return new Skeleton( this.bones, this.boneInverses ); + + } + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author ikerr / http://verold.com + */ + +function Bone() { + + Object3D.call( this ); + + this.type = 'Bone'; + +} + +Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Bone, + + isBone: true + +} ); + +/** + * @author mikael emtinger / http://gomo.se/ + * @author alteredq / http://alteredqualia.com/ + * @author ikerr / http://verold.com + */ + +function SkinnedMesh( geometry, material ) { + + Mesh.call( this, geometry, material ); + + this.type = 'SkinnedMesh'; + + this.bindMode = 'attached'; + this.bindMatrix = new Matrix4(); + this.bindMatrixInverse = new Matrix4(); + + var bones = this.initBones(); + var skeleton = new Skeleton( bones ); + + this.bind( skeleton, this.matrixWorld ); + + this.normalizeSkinWeights(); + +} + +SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { + + constructor: SkinnedMesh, + + isSkinnedMesh: true, + + initBones: function () { + + var bones = [], bone, gbone; + var i, il; + + if ( this.geometry && this.geometry.bones !== undefined ) { + + // first, create array of 'Bone' objects from geometry data + + for ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) { + + gbone = this.geometry.bones[ i ]; + + // create new 'Bone' object + + bone = new Bone(); + bones.push( bone ); + + // apply values + + bone.name = gbone.name; + bone.position.fromArray( gbone.pos ); + bone.quaternion.fromArray( gbone.rotq ); + if ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl ); + + } + + // second, create bone hierarchy + + for ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) { + + gbone = this.geometry.bones[ i ]; + + if ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) { + + // subsequent bones in the hierarchy + + bones[ gbone.parent ].add( bones[ i ] ); + + } else { + + // topmost bone, immediate child of the skinned mesh + + this.add( bones[ i ] ); + + } + + } + + } + + // now the bones are part of the scene graph and children of the skinned mesh. + // let's update the corresponding matrices + + this.updateMatrixWorld( true ); + + return bones; + + }, + + bind: function ( skeleton, bindMatrix ) { + + this.skeleton = skeleton; + + if ( bindMatrix === undefined ) { + + this.updateMatrixWorld( true ); + + this.skeleton.calculateInverses(); + + bindMatrix = this.matrixWorld; + + } + + this.bindMatrix.copy( bindMatrix ); + this.bindMatrixInverse.getInverse( bindMatrix ); + + }, + + pose: function () { + + this.skeleton.pose(); + + }, + + normalizeSkinWeights: function () { + + var scale, i; + + if ( this.geometry && this.geometry.isGeometry ) { + + for ( i = 0; i < this.geometry.skinWeights.length; i ++ ) { + + var sw = this.geometry.skinWeights[ i ]; + + scale = 1.0 / sw.lengthManhattan(); + + if ( scale !== Infinity ) { + + sw.multiplyScalar( scale ); + + } else { + + sw.set( 1, 0, 0, 0 ); // do something reasonable + + } + + } + + } else if ( this.geometry && this.geometry.isBufferGeometry ) { + + var vec = new Vector4(); + + var skinWeight = this.geometry.attributes.skinWeight; + + for ( i = 0; i < skinWeight.count; i ++ ) { + + vec.x = skinWeight.getX( i ); + vec.y = skinWeight.getY( i ); + vec.z = skinWeight.getZ( i ); + vec.w = skinWeight.getW( i ); + + scale = 1.0 / vec.lengthManhattan(); + + if ( scale !== Infinity ) { + + vec.multiplyScalar( scale ); + + } else { + + vec.set( 1, 0, 0, 0 ); // do something reasonable + + } + + skinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w ); + + } + + } + + }, + + updateMatrixWorld: function ( force ) { + + Mesh.prototype.updateMatrixWorld.call( this, force ); + + if ( this.bindMode === 'attached' ) { + + this.bindMatrixInverse.getInverse( this.matrixWorld ); + + } else if ( this.bindMode === 'detached' ) { + + this.bindMatrixInverse.getInverse( this.bindMatrix ); + + } else { + + console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); + + } + + }, + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * linecap: "round", + * linejoin: "round" + * } + */ + +function LineBasicMaterial( parameters ) { + + Material.call( this ); + + this.type = 'LineBasicMaterial'; + + this.color = new Color( 0xffffff ); + + this.linewidth = 1; + this.linecap = 'round'; + this.linejoin = 'round'; + + this.lights = false; + + this.setValues( parameters ); + +} + +LineBasicMaterial.prototype = Object.create( Material.prototype ); +LineBasicMaterial.prototype.constructor = LineBasicMaterial; + +LineBasicMaterial.prototype.isLineBasicMaterial = true; + +LineBasicMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.linewidth = source.linewidth; + this.linecap = source.linecap; + this.linejoin = source.linejoin; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Line( geometry, material, mode ) { + + if ( mode === 1 ) { + + console.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' ); + return new LineSegments( geometry, material ); + + } + + Object3D.call( this ); + + this.type = 'Line'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } ); + +} + +Line.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Line, + + isLine: true, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + return function raycast( raycaster, intersects ) { + + var precision = raycaster.linePrecision; + var precisionSq = precision * precision; + + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + var vStart = new Vector3(); + var vEnd = new Vector3(); + var interSegment = new Vector3(); + var interRay = new Vector3(); + var step = (this && this.isLineSegments) ? 2 : 1; + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, l = indices.length - 1; i < l; i += step ) { + + var a = indices[ i ]; + var b = indices[ i + 1 ]; + + vStart.fromArray( positions, a * 3 ); + vEnd.fromArray( positions, b * 3 ); + + var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } else { + + for ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) { + + vStart.fromArray( positions, 3 * i ); + vEnd.fromArray( positions, 3 * i + 3 ); + + var distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + } else if ( geometry.isGeometry ) { + + var vertices = geometry.vertices; + var nbVertices = vertices.length; + + for ( var i = 0; i < nbVertices - 1; i += step ) { + + var distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); + + if ( distSq > precisionSq ) continue; + + interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation + + var distance = raycaster.ray.origin.distanceTo( interRay ); + + if ( distance < raycaster.near || distance > raycaster.far ) continue; + + intersects.push( { + + distance: distance, + // What do we want? intersection point on the ray or on the segment?? + // point: raycaster.ray.at( distance ), + point: interSegment.clone().applyMatrix4( this.matrixWorld ), + index: i, + face: null, + faceIndex: null, + object: this + + } ); + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LineSegments( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineSegments'; + +} + +LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineSegments, + + isLineSegments: true + +} ); + +/** + * @author mgreter / http://github.com/mgreter + */ + +function LineLoop( geometry, material ) { + + Line.call( this, geometry, material ); + + this.type = 'LineLoop'; + +} + +LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { + + constructor: LineLoop, + + isLineLoop: true, + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * map: new THREE.Texture( ), + * + * size: , + * sizeAttenuation: + * } + */ + +function PointsMaterial( parameters ) { + + Material.call( this ); + + this.type = 'PointsMaterial'; + + this.color = new Color( 0xffffff ); + + this.map = null; + + this.size = 1; + this.sizeAttenuation = true; + + this.lights = false; + + this.setValues( parameters ); + +} + +PointsMaterial.prototype = Object.create( Material.prototype ); +PointsMaterial.prototype.constructor = PointsMaterial; + +PointsMaterial.prototype.isPointsMaterial = true; + +PointsMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.size = source.size; + this.sizeAttenuation = source.sizeAttenuation; + + return this; + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Points( geometry, material ) { + + Object3D.call( this ); + + this.type = 'Points'; + + this.geometry = geometry !== undefined ? geometry : new BufferGeometry(); + this.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } ); + +} + +Points.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Points, + + isPoints: true, + + raycast: ( function () { + + var inverseMatrix = new Matrix4(); + var ray = new Ray(); + var sphere = new Sphere(); + + return function raycast( raycaster, intersects ) { + + var object = this; + var geometry = this.geometry; + var matrixWorld = this.matrixWorld; + var threshold = raycaster.params.Points.threshold; + + // Checking boundingSphere distance to ray + + if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); + + sphere.copy( geometry.boundingSphere ); + sphere.applyMatrix4( matrixWorld ); + sphere.radius += threshold; + + if ( raycaster.ray.intersectsSphere( sphere ) === false ) return; + + // + + inverseMatrix.getInverse( matrixWorld ); + ray.copy( raycaster.ray ).applyMatrix4( inverseMatrix ); + + var localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); + var localThresholdSq = localThreshold * localThreshold; + var position = new Vector3(); + + function testPoint( point, index ) { + + var rayPointDistanceSq = ray.distanceSqToPoint( point ); + + if ( rayPointDistanceSq < localThresholdSq ) { + + var intersectPoint = ray.closestPointToPoint( point ); + intersectPoint.applyMatrix4( matrixWorld ); + + var distance = raycaster.ray.origin.distanceTo( intersectPoint ); + + if ( distance < raycaster.near || distance > raycaster.far ) return; + + intersects.push( { + + distance: distance, + distanceToRay: Math.sqrt( rayPointDistanceSq ), + point: intersectPoint.clone(), + index: index, + face: null, + object: object + + } ); + + } + + } + + if ( geometry.isBufferGeometry ) { + + var index = geometry.index; + var attributes = geometry.attributes; + var positions = attributes.position.array; + + if ( index !== null ) { + + var indices = index.array; + + for ( var i = 0, il = indices.length; i < il; i ++ ) { + + var a = indices[ i ]; + + position.fromArray( positions, a * 3 ); + + testPoint( position, a ); + + } + + } else { + + for ( var i = 0, l = positions.length / 3; i < l; i ++ ) { + + position.fromArray( positions, i * 3 ); + + testPoint( position, i ); + + } + + } + + } else { + + var vertices = geometry.vertices; + + for ( var i = 0, l = vertices.length; i < l; i ++ ) { + + testPoint( vertices[ i ], i ); + + } + + } + + }; + + }() ), + + clone: function () { + + return new this.constructor( this.geometry, this.material ).copy( this ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Group() { + + Object3D.call( this ); + + this.type = 'Group'; + +} + +Group.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Group + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { + + Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.generateMipmaps = false; + + var scope = this; + + function update() { + + requestAnimationFrame( update ); + + if ( video.readyState >= video.HAVE_CURRENT_DATA ) { + + scope.needsUpdate = true; + + } + + } + + update(); + +} + +VideoTexture.prototype = Object.create( Texture.prototype ); +VideoTexture.prototype.constructor = VideoTexture; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); + + this.image = { width: width, height: height }; + this.mipmaps = mipmaps; + + // no flipping for cube textures + // (also flipping doesn't work for compressed textures ) + + this.flipY = false; + + // can't generate mipmaps for compressed textures + // mips must be embedded in DDS files + + this.generateMipmaps = false; + +} + +CompressedTexture.prototype = Object.create( Texture.prototype ); +CompressedTexture.prototype.constructor = CompressedTexture; + +CompressedTexture.prototype.isCompressedTexture = true; + +/** + * @author Matt DesLauriers / @mattdesl + * @author atix / arthursilber.de + */ + +function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { + + format = format !== undefined ? format : DepthFormat; + + if ( format !== DepthFormat && format !== DepthStencilFormat ) { + + throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); + + } + + if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; + if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type; + + Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); + + this.image = { width: width, height: height }; + + this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; + this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; + + this.flipY = false; + this.generateMipmaps = false; + +} + +DepthTexture.prototype = Object.create( Texture.prototype ); +DepthTexture.prototype.constructor = DepthTexture; +DepthTexture.prototype.isDepthTexture = true; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +function WireframeGeometry( geometry ) { + + BufferGeometry.call( this ); + + this.type = 'WireframeGeometry'; + + // buffer + + var vertices = []; + + // helper variables + + var i, j, l, o, ol; + var edge = [ 0, 0 ], edges = {}, e, edge1, edge2; + var key, keys = [ 'a', 'b', 'c' ]; + var vertex; + + // different logic for Geometry and BufferGeometry + + if ( geometry && geometry.isGeometry ) { + + // create a data structure that contains all edges without duplicates + + var faces = geometry.faces; + + for ( i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( j = 0; j < 3; j ++ ) { + + edge1 = face[ keys[ j ] ]; + edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + e = edges[ key ]; + + vertex = geometry.vertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = geometry.vertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else if ( geometry && geometry.isBufferGeometry ) { + + var position, indices, groups; + var group, start, count; + var index1, index2; + + vertex = new Vector3(); + + if ( geometry.index !== null ) { + + // indexed BufferGeometry + + position = geometry.attributes.position; + indices = geometry.index; + groups = geometry.groups; + + if ( groups.length === 0 ) { + + groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; + + } + + // create a data structure that contains all eges without duplicates + + for ( o = 0, ol = groups.length; o < ol; ++ o ) { + + group = groups[ o ]; + + start = group.start; + count = group.count; + + for ( i = start, l = ( start + count ); i < l; i += 3 ) { + + for ( j = 0; j < 3; j ++ ) { + + edge1 = indices.getX( i + j ); + edge2 = indices.getX( i + ( j + 1 ) % 3 ); + edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; + + } + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + e = edges[ key ]; + + vertex.fromBufferAttribute( position, e.index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex.fromBufferAttribute( position, e.index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } else { + + // non-indexed BufferGeometry + + position = geometry.attributes.position; + + for ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) { + + for ( j = 0; j < 3; j ++ ) { + + // three edges per triangle, an edge is represented as (index1, index2) + // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) + + index1 = 3 * i + j; + vertex.fromBufferAttribute( position, index1 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + index2 = 3 * i + ( ( j + 1 ) % 3 ); + vertex.fromBufferAttribute( position, index2 ); + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + } + + } + + // build geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + +} + +WireframeGeometry.prototype = Object.create( BufferGeometry.prototype ); +WireframeGeometry.prototype.constructor = WireframeGeometry; + +/** + * @author zz85 / https://github.com/zz85 + * @author Mugen87 / https://github.com/Mugen87 + * + * Parametric Surfaces Geometry + * based on the brilliant article by @prideout http://prideout.net/blog/?p=44 + */ + +// ParametricGeometry + +function ParametricGeometry( func, slices, stacks ) { + + Geometry.call( this ); + + this.type = 'ParametricGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); + this.mergeVertices(); + +} + +ParametricGeometry.prototype = Object.create( Geometry.prototype ); +ParametricGeometry.prototype.constructor = ParametricGeometry; + +// ParametricBufferGeometry + +function ParametricBufferGeometry( func, slices, stacks ) { + + BufferGeometry.call( this ); + + this.type = 'ParametricBufferGeometry'; + + this.parameters = { + func: func, + slices: slices, + stacks: stacks + }; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + var EPS = 0.00001; + + var normal = new Vector3(); + + var p0 = new Vector3(), p1 = new Vector3(); + var pu = new Vector3(), pv = new Vector3(); + + var i, j; + + // generate vertices, normals and uvs + + var sliceCount = slices + 1; + + for ( i = 0; i <= stacks; i ++ ) { + + var v = i / stacks; + + for ( j = 0; j <= slices; j ++ ) { + + var u = j / slices; + + // vertex + + p0 = func( u, v, p0 ); + vertices.push( p0.x, p0.y, p0.z ); + + // normal + + // approximate tangent vectors via finite differences + + if ( u - EPS >= 0 ) { + + p1 = func( u - EPS, v, p1 ); + pu.subVectors( p0, p1 ); + + } else { + + p1 = func( u + EPS, v, p1 ); + pu.subVectors( p1, p0 ); + + } + + if ( v - EPS >= 0 ) { + + p1 = func( u, v - EPS, p1 ); + pv.subVectors( p0, p1 ); + + } else { + + p1 = func( u, v + EPS, p1 ); + pv.subVectors( p1, p0 ); + + } + + // cross product of tangent vectors returns surface normal + + normal.crossVectors( pu, pv ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, v ); + + } + + } + + // generate indices + + for ( i = 0; i < stacks; i ++ ) { + + for ( j = 0; j < slices; j ++ ) { + + var a = i * sliceCount + j; + var b = i * sliceCount + j + 1; + var c = ( i + 1 ) * sliceCount + j + 1; + var d = ( i + 1 ) * sliceCount + j; + + // faces one and two + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; + +/** + * @author clockworkgeek / https://github.com/clockworkgeek + * @author timothypratley / https://github.com/timothypratley + * @author WestLangley / http://github.com/WestLangley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// PolyhedronGeometry + +function PolyhedronGeometry( vertices, indices, radius, detail ) { + + Geometry.call( this ); + + this.type = 'PolyhedronGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) ); + this.mergeVertices(); + +} + +PolyhedronGeometry.prototype = Object.create( Geometry.prototype ); +PolyhedronGeometry.prototype.constructor = PolyhedronGeometry; + +// PolyhedronBufferGeometry + +function PolyhedronBufferGeometry( vertices, indices, radius, detail ) { + + BufferGeometry.call( this ); + + this.type = 'PolyhedronBufferGeometry'; + + this.parameters = { + vertices: vertices, + indices: indices, + radius: radius, + detail: detail + }; + + radius = radius || 1; + detail = detail || 0; + + // default buffer data + + var vertexBuffer = []; + var uvBuffer = []; + + // the subdivision creates the vertex buffer data + + subdivide( detail ); + + // all vertices should lie on a conceptual sphere with a given radius + + appplyRadius( radius ); + + // finally, create the uv data + + generateUVs(); + + // build non-indexed geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); + + if ( detail === 0 ) { + + this.computeVertexNormals(); // flat normals + + } else { + + this.normalizeNormals(); // smooth normals + + } + + // helper functions + + function subdivide( detail ) { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + // iterate over all faces and apply a subdivison with the given detail value + + for ( var i = 0; i < indices.length; i += 3 ) { + + // get the vertices of the face + + getVertexByIndex( indices[ i + 0 ], a ); + getVertexByIndex( indices[ i + 1 ], b ); + getVertexByIndex( indices[ i + 2 ], c ); + + // perform subdivision + + subdivideFace( a, b, c, detail ); + + } + + } + + function subdivideFace( a, b, c, detail ) { + + var cols = Math.pow( 2, detail ); + + // we use this multidimensional array as a data structure for creating the subdivision + + var v = []; + + var i, j; + + // construct all of the vertices for this subdivision + + for ( i = 0; i <= cols; i ++ ) { + + v[ i ] = []; + + var aj = a.clone().lerp( c, i / cols ); + var bj = b.clone().lerp( c, i / cols ); + + var rows = cols - i; + + for ( j = 0; j <= rows; j ++ ) { + + if ( j === 0 && i === cols ) { + + v[ i ][ j ] = aj; + + } else { + + v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); + + } + + } + + } + + // construct all of the faces + + for ( i = 0; i < cols; i ++ ) { + + for ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { + + var k = Math.floor( j / 2 ); + + if ( j % 2 === 0 ) { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + pushVertex( v[ i ][ k ] ); + + } else { + + pushVertex( v[ i ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k + 1 ] ); + pushVertex( v[ i + 1 ][ k ] ); + + } + + } + + } + + } + + function appplyRadius( radius ) { + + var vertex = new Vector3(); + + // iterate over the entire buffer and apply the radius to each vertex + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + vertex.normalize().multiplyScalar( radius ); + + vertexBuffer[ i + 0 ] = vertex.x; + vertexBuffer[ i + 1 ] = vertex.y; + vertexBuffer[ i + 2 ] = vertex.z; + + } + + } + + function generateUVs() { + + var vertex = new Vector3(); + + for ( var i = 0; i < vertexBuffer.length; i += 3 ) { + + vertex.x = vertexBuffer[ i + 0 ]; + vertex.y = vertexBuffer[ i + 1 ]; + vertex.z = vertexBuffer[ i + 2 ]; + + var u = azimuth( vertex ) / 2 / Math.PI + 0.5; + var v = inclination( vertex ) / Math.PI + 0.5; + uvBuffer.push( u, 1 - v ); + + } + + correctUVs(); + + correctSeam(); + + } + + function correctSeam() { + + // handle case when face straddles the seam, see #3269 + + for ( var i = 0; i < uvBuffer.length; i += 6 ) { + + // uv data of a single face + + var x0 = uvBuffer[ i + 0 ]; + var x1 = uvBuffer[ i + 2 ]; + var x2 = uvBuffer[ i + 4 ]; + + var max = Math.max( x0, x1, x2 ); + var min = Math.min( x0, x1, x2 ); + + // 0.9 is somewhat arbitrary + + if ( max > 0.9 && min < 0.1 ) { + + if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1; + if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1; + if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1; + + } + + } + + } + + function pushVertex( vertex ) { + + vertexBuffer.push( vertex.x, vertex.y, vertex.z ); + + } + + function getVertexByIndex( index, vertex ) { + + var stride = index * 3; + + vertex.x = vertices[ stride + 0 ]; + vertex.y = vertices[ stride + 1 ]; + vertex.z = vertices[ stride + 2 ]; + + } + + function correctUVs() { + + var a = new Vector3(); + var b = new Vector3(); + var c = new Vector3(); + + var centroid = new Vector3(); + + var uvA = new Vector2(); + var uvB = new Vector2(); + var uvC = new Vector2(); + + for ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { + + a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); + b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); + c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); + + uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); + uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); + uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); + + centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); + + var azi = azimuth( centroid ); + + correctUV( uvA, j + 0, a, azi ); + correctUV( uvB, j + 2, b, azi ); + correctUV( uvC, j + 4, c, azi ); + + } + + } + + function correctUV( uv, stride, vector, azimuth ) { + + if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { + + uvBuffer[ stride ] = uv.x - 1; + + } + + if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { + + uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; + + } + + } + + // Angle around the Y axis, counter-clockwise when looking from above. + + function azimuth( vector ) { + + return Math.atan2( vector.z, - vector.x ); + + } + + + // Angle above the XZ plane. + + function inclination( vector ) { + + return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); + + } + +} + +PolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +PolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// TetrahedronGeometry + +function TetrahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'TetrahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +TetrahedronGeometry.prototype = Object.create( Geometry.prototype ); +TetrahedronGeometry.prototype.constructor = TetrahedronGeometry; + +// TetrahedronBufferGeometry + +function TetrahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 + ]; + + var indices = [ + 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'TetrahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +TetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +TetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// OctahedronGeometry + +function OctahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'OctahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +OctahedronGeometry.prototype = Object.create( Geometry.prototype ); +OctahedronGeometry.prototype.constructor = OctahedronGeometry; + +// OctahedronBufferGeometry + +function OctahedronBufferGeometry( radius, detail ) { + + var vertices = [ + 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1 + ]; + + var indices = [ + 0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'OctahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +OctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +OctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry; + +/** + * @author timothypratley / https://github.com/timothypratley + * @author Mugen87 / https://github.com/Mugen87 + */ + +// IcosahedronGeometry + +function IcosahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'IcosahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +IcosahedronGeometry.prototype = Object.create( Geometry.prototype ); +IcosahedronGeometry.prototype.constructor = IcosahedronGeometry; + +// IcosahedronBufferGeometry + +function IcosahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + + var vertices = [ + - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, + 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, + t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 + ]; + + var indices = [ + 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, + 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, + 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, + 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'IcosahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +IcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +IcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry; + +/** + * @author Abe Pazos / https://hamoid.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +// DodecahedronGeometry + +function DodecahedronGeometry( radius, detail ) { + + Geometry.call( this ); + + this.type = 'DodecahedronGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + + this.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) ); + this.mergeVertices(); + +} + +DodecahedronGeometry.prototype = Object.create( Geometry.prototype ); +DodecahedronGeometry.prototype.constructor = DodecahedronGeometry; + +// DodecahedronBufferGeometry + +function DodecahedronBufferGeometry( radius, detail ) { + + var t = ( 1 + Math.sqrt( 5 ) ) / 2; + var r = 1 / t; + + var vertices = [ + + // (±1, ±1, ±1) + - 1, - 1, - 1, - 1, - 1, 1, + - 1, 1, - 1, - 1, 1, 1, + 1, - 1, - 1, 1, - 1, 1, + 1, 1, - 1, 1, 1, 1, + + // (0, ±1/φ, ±φ) + 0, - r, - t, 0, - r, t, + 0, r, - t, 0, r, t, + + // (±1/φ, ±φ, 0) + - r, - t, 0, - r, t, 0, + r, - t, 0, r, t, 0, + + // (±φ, 0, ±1/φ) + - t, 0, - r, t, 0, - r, + - t, 0, r, t, 0, r + ]; + + var indices = [ + 3, 11, 7, 3, 7, 15, 3, 15, 13, + 7, 19, 17, 7, 17, 6, 7, 6, 15, + 17, 4, 8, 17, 8, 10, 17, 10, 6, + 8, 0, 16, 8, 16, 2, 8, 2, 10, + 0, 12, 1, 0, 1, 18, 0, 18, 16, + 6, 10, 2, 6, 2, 13, 6, 13, 15, + 2, 16, 18, 2, 18, 3, 2, 3, 13, + 18, 1, 9, 18, 9, 11, 18, 11, 3, + 4, 14, 12, 4, 12, 0, 4, 0, 8, + 11, 9, 5, 11, 5, 19, 11, 19, 7, + 19, 5, 14, 19, 14, 4, 19, 4, 17, + 1, 12, 14, 1, 14, 5, 1, 5, 9 + ]; + + PolyhedronBufferGeometry.call( this, vertices, indices, radius, detail ); + + this.type = 'DodecahedronBufferGeometry'; + + this.parameters = { + radius: radius, + detail: detail + }; + +} + +DodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype ); +DodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry; + +/** + * @author oosmoxiecode / https://github.com/oosmoxiecode + * @author WestLangley / https://github.com/WestLangley + * @author zz85 / https://github.com/zz85 + * @author miningold / https://github.com/miningold + * @author jonobr1 / https://github.com/jonobr1 + * @author Mugen87 / https://github.com/Mugen87 + * + */ + +// TubeGeometry + +function TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) { + + Geometry.call( this ); + + this.type = 'TubeGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + if ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' ); + + var bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ); + + // expose internals + + this.tangents = bufferGeometry.tangents; + this.normals = bufferGeometry.normals; + this.binormals = bufferGeometry.binormals; + + // create geometry + + this.fromBufferGeometry( bufferGeometry ); + this.mergeVertices(); + +} + +TubeGeometry.prototype = Object.create( Geometry.prototype ); +TubeGeometry.prototype.constructor = TubeGeometry; + +// TubeBufferGeometry + +function TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) { + + BufferGeometry.call( this ); + + this.type = 'TubeBufferGeometry'; + + this.parameters = { + path: path, + tubularSegments: tubularSegments, + radius: radius, + radialSegments: radialSegments, + closed: closed + }; + + tubularSegments = tubularSegments || 64; + radius = radius || 1; + radialSegments = radialSegments || 8; + closed = closed || false; + + var frames = path.computeFrenetFrames( tubularSegments, closed ); + + // expose internals + + this.tangents = frames.tangents; + this.normals = frames.normals; + this.binormals = frames.binormals; + + // helper variables + + var vertex = new Vector3(); + var normal = new Vector3(); + var uv = new Vector2(); + + var i, j; + + // buffer + + var vertices = []; + var normals = []; + var uvs = []; + var indices = []; + + // create buffer data + + generateBufferData(); + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // functions + + function generateBufferData() { + + for ( i = 0; i < tubularSegments; i ++ ) { + + generateSegment( i ); + + } + + // if the geometry is not closed, generate the last row of vertices and normals + // at the regular position on the given path + // + // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) + + generateSegment( ( closed === false ) ? tubularSegments : 0 ); + + // uvs are generated in a separate function. + // this makes it easy compute correct values for closed geometries + + generateUVs(); + + // finally create faces + + generateIndices(); + + } + + function generateSegment( i ) { + + // we use getPointAt to sample evenly distributed points from the given path + + var P = path.getPointAt( i / tubularSegments ); + + // retrieve corresponding normal and binormal + + var N = frames.normals[ i ]; + var B = frames.binormals[ i ]; + + // generate normals and vertices for the current segment + + for ( j = 0; j <= radialSegments; j ++ ) { + + var v = j / radialSegments * Math.PI * 2; + + var sin = Math.sin( v ); + var cos = - Math.cos( v ); + + // normal + + normal.x = ( cos * N.x + sin * B.x ); + normal.y = ( cos * N.y + sin * B.y ); + normal.z = ( cos * N.z + sin * B.z ); + normal.normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // vertex + + vertex.x = P.x + radius * normal.x; + vertex.y = P.y + radius * normal.y; + vertex.z = P.z + radius * normal.z; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + function generateIndices() { + + for ( j = 1; j <= tubularSegments; j ++ ) { + + for ( i = 1; i <= radialSegments; i ++ ) { + + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + } + + function generateUVs() { + + for ( i = 0; i <= tubularSegments; i ++ ) { + + for ( j = 0; j <= radialSegments; j ++ ) { + + uv.x = i / tubularSegments; + uv.y = j / radialSegments; + + uvs.push( uv.x, uv.y ); + + } + + } + + } + +} + +TubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TubeBufferGeometry.prototype.constructor = TubeBufferGeometry; + +/** + * @author oosmoxiecode + * @author Mugen87 / https://github.com/Mugen87 + * + * based on http://www.blackpawn.com/texts/pqtorus/ + */ + +// TorusKnotGeometry + +function TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { + + Geometry.call( this ); + + this.type = 'TorusKnotGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + if ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); + + this.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); + this.mergeVertices(); + +} + +TorusKnotGeometry.prototype = Object.create( Geometry.prototype ); +TorusKnotGeometry.prototype.constructor = TorusKnotGeometry; + +// TorusKnotBufferGeometry + +function TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) { + + BufferGeometry.call( this ); + + this.type = 'TorusKnotBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + tubularSegments: tubularSegments, + radialSegments: radialSegments, + p: p, + q: q + }; + + radius = radius || 100; + tube = tube || 40; + tubularSegments = Math.floor( tubularSegments ) || 64; + radialSegments = Math.floor( radialSegments ) || 8; + p = p || 2; + q = q || 3; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var i, j; + + var vertex = new Vector3(); + var normal = new Vector3(); + + var P1 = new Vector3(); + var P2 = new Vector3(); + + var B = new Vector3(); + var T = new Vector3(); + var N = new Vector3(); + + // generate vertices, normals and uvs + + for ( i = 0; i <= tubularSegments; ++ i ) { + + // the radian "u" is used to calculate the position on the torus curve of the current tubular segement + + var u = i / tubularSegments * p * Math.PI * 2; + + // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. + // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions + + calculatePositionOnCurve( u, p, q, radius, P1 ); + calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); + + // calculate orthonormal basis + + T.subVectors( P2, P1 ); + N.addVectors( P2, P1 ); + B.crossVectors( T, N ); + N.crossVectors( B, T ); + + // normalize B, N. T can be ignored, we don't use it + + B.normalize(); + N.normalize(); + + for ( j = 0; j <= radialSegments; ++ j ) { + + // now calculate the vertices. they are nothing more than an extrusion of the torus curve. + // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. + + var v = j / radialSegments * Math.PI * 2; + var cx = - tube * Math.cos( v ); + var cy = tube * Math.sin( v ); + + // now calculate the final vertex position. + // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve + + vertex.x = P1.x + ( cx * N.x + cy * B.x ); + vertex.y = P1.y + ( cx * N.y + cy * B.y ); + vertex.z = P1.z + ( cx * N.z + cy * B.z ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) + + normal.subVectors( vertex, P1 ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( j = 1; j <= tubularSegments; j ++ ) { + + for ( i = 1; i <= radialSegments; i ++ ) { + + // indices + + var a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); + var b = ( radialSegments + 1 ) * j + ( i - 1 ); + var c = ( radialSegments + 1 ) * j + i; + var d = ( radialSegments + 1 ) * ( j - 1 ) + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // this function calculates the current position on the torus curve + + function calculatePositionOnCurve( u, p, q, radius, position ) { + + var cu = Math.cos( u ); + var su = Math.sin( u ); + var quOverP = q / p * u; + var cs = Math.cos( quOverP ); + + position.x = radius * ( 2 + cs ) * 0.5 * cu; + position.y = radius * ( 2 + cs ) * su * 0.5; + position.z = radius * Math.sin( quOverP ) * 0.5; + + } + +} + +TorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry; + +/** + * @author oosmoxiecode + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// TorusGeometry + +function TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + Geometry.call( this ); + + this.type = 'TorusGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + this.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) ); + this.mergeVertices(); + +} + +TorusGeometry.prototype = Object.create( Geometry.prototype ); +TorusGeometry.prototype.constructor = TorusGeometry; + +// TorusBufferGeometry + +function TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) { + + BufferGeometry.call( this ); + + this.type = 'TorusBufferGeometry'; + + this.parameters = { + radius: radius, + tube: tube, + radialSegments: radialSegments, + tubularSegments: tubularSegments, + arc: arc + }; + + radius = radius || 100; + tube = tube || 40; + radialSegments = Math.floor( radialSegments ) || 8; + tubularSegments = Math.floor( tubularSegments ) || 6; + arc = arc || Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var center = new Vector3(); + var vertex = new Vector3(); + var normal = new Vector3(); + + var j, i; + + // generate vertices, normals and uvs + + for ( j = 0; j <= radialSegments; j ++ ) { + + for ( i = 0; i <= tubularSegments; i ++ ) { + + var u = i / tubularSegments * arc; + var v = j / radialSegments * Math.PI * 2; + + // vertex + + vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); + vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); + vertex.z = tube * Math.sin( v ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + center.x = radius * Math.cos( u ); + center.y = radius * Math.sin( u ); + normal.subVectors( vertex, center ).normalize(); + + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( i / tubularSegments ); + uvs.push( j / radialSegments ); + + } + + } + + // generate indices + + for ( j = 1; j <= radialSegments; j ++ ) { + + for ( i = 1; i <= tubularSegments; i ++ ) { + + // indices + + var a = ( tubularSegments + 1 ) * j + i - 1; + var b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; + var c = ( tubularSegments + 1 ) * ( j - 1 ) + i; + var d = ( tubularSegments + 1 ) * j + i; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +TorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +TorusBufferGeometry.prototype.constructor = TorusBufferGeometry; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + */ + +var ShapeUtils = { + + // calculate area of the contour polygon + + area: function ( contour ) { + + var n = contour.length; + var a = 0.0; + + for ( var p = n - 1, q = 0; q < n; p = q ++ ) { + + a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; + + } + + return a * 0.5; + + }, + + triangulate: ( function () { + + /** + * This code is a quick port of code written in C++ which was submitted to + * flipcode.com by John W. Ratcliff // July 22, 2000 + * See original code and more information here: + * http://www.flipcode.com/archives/Efficient_Polygon_Triangulation.shtml + * + * ported to actionscript by Zevan Rosser + * www.actionsnippet.com + * + * ported to javascript by Joshua Koo + * http://www.lab4games.net/zz85/blog + * + */ + + function snip( contour, u, v, w, n, verts ) { + + var p; + var ax, ay, bx, by; + var cx, cy, px, py; + + ax = contour[ verts[ u ] ].x; + ay = contour[ verts[ u ] ].y; + + bx = contour[ verts[ v ] ].x; + by = contour[ verts[ v ] ].y; + + cx = contour[ verts[ w ] ].x; + cy = contour[ verts[ w ] ].y; + + if ( ( bx - ax ) * ( cy - ay ) - ( by - ay ) * ( cx - ax ) <= 0 ) return false; + + var aX, aY, bX, bY, cX, cY; + var apx, apy, bpx, bpy, cpx, cpy; + var cCROSSap, bCROSScp, aCROSSbp; + + aX = cx - bx; aY = cy - by; + bX = ax - cx; bY = ay - cy; + cX = bx - ax; cY = by - ay; + + for ( p = 0; p < n; p ++ ) { + + px = contour[ verts[ p ] ].x; + py = contour[ verts[ p ] ].y; + + if ( ( ( px === ax ) && ( py === ay ) ) || + ( ( px === bx ) && ( py === by ) ) || + ( ( px === cx ) && ( py === cy ) ) ) continue; + + apx = px - ax; apy = py - ay; + bpx = px - bx; bpy = py - by; + cpx = px - cx; cpy = py - cy; + + // see if p is inside triangle abc + + aCROSSbp = aX * bpy - aY * bpx; + cCROSSap = cX * apy - cY * apx; + bCROSScp = bX * cpy - bY * cpx; + + if ( ( aCROSSbp >= - Number.EPSILON ) && ( bCROSScp >= - Number.EPSILON ) && ( cCROSSap >= - Number.EPSILON ) ) return false; + + } + + return true; + + } + + // takes in an contour array and returns + + return function triangulate( contour, indices ) { + + var n = contour.length; + + if ( n < 3 ) return null; + + var result = [], + verts = [], + vertIndices = []; + + /* we want a counter-clockwise polygon in verts */ + + var u, v, w; + + if ( ShapeUtils.area( contour ) > 0.0 ) { + + for ( v = 0; v < n; v ++ ) verts[ v ] = v; + + } else { + + for ( v = 0; v < n; v ++ ) verts[ v ] = ( n - 1 ) - v; + + } + + var nv = n; + + /* remove nv - 2 vertices, creating 1 triangle every time */ + + var count = 2 * nv; /* error detection */ + + for ( v = nv - 1; nv > 2; ) { + + /* if we loop, it is probably a non-simple polygon */ + + if ( ( count -- ) <= 0 ) { + + //** Triangulate: ERROR - probable bad polygon! + + //throw ( "Warning, unable to triangulate polygon!" ); + //return null; + // Sometimes warning is fine, especially polygons are triangulated in reverse. + console.warn( 'THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()' ); + + if ( indices ) return vertIndices; + return result; + + } + + /* three consecutive vertices in current polygon, */ + + u = v; if ( nv <= u ) u = 0; /* previous */ + v = u + 1; if ( nv <= v ) v = 0; /* new v */ + w = v + 1; if ( nv <= w ) w = 0; /* next */ + + if ( snip( contour, u, v, w, nv, verts ) ) { + + var a, b, c, s, t; + + /* true names of the vertices */ + + a = verts[ u ]; + b = verts[ v ]; + c = verts[ w ]; + + /* output Triangle */ + + result.push( [ contour[ a ], + contour[ b ], + contour[ c ] ] ); + + + vertIndices.push( [ verts[ u ], verts[ v ], verts[ w ] ] ); + + /* remove v from the remaining polygon */ + + for ( s = v, t = v + 1; t < nv; s ++, t ++ ) { + + verts[ s ] = verts[ t ]; + + } + + nv --; + + /* reset error detection counter */ + + count = 2 * nv; + + } + + } + + if ( indices ) return vertIndices; + return result; + + }; + + } )(), + + triangulateShape: function ( contour, holes ) { + + function removeDupEndPts(points) { + + var l = points.length; + + if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { + + points.pop(); + + } + + } + + removeDupEndPts( contour ); + holes.forEach( removeDupEndPts ); + + function point_in_segment_2D_colin( inSegPt1, inSegPt2, inOtherPt ) { + + // inOtherPt needs to be collinear to the inSegment + if ( inSegPt1.x !== inSegPt2.x ) { + + if ( inSegPt1.x < inSegPt2.x ) { + + return ( ( inSegPt1.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt2.x ) ); + + } else { + + return ( ( inSegPt2.x <= inOtherPt.x ) && ( inOtherPt.x <= inSegPt1.x ) ); + + } + + } else { + + if ( inSegPt1.y < inSegPt2.y ) { + + return ( ( inSegPt1.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt2.y ) ); + + } else { + + return ( ( inSegPt2.y <= inOtherPt.y ) && ( inOtherPt.y <= inSegPt1.y ) ); + + } + + } + + } + + function intersect_segments_2D( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1, inSeg2Pt2, inExcludeAdjacentSegs ) { + + var seg1dx = inSeg1Pt2.x - inSeg1Pt1.x, seg1dy = inSeg1Pt2.y - inSeg1Pt1.y; + var seg2dx = inSeg2Pt2.x - inSeg2Pt1.x, seg2dy = inSeg2Pt2.y - inSeg2Pt1.y; + + var seg1seg2dx = inSeg1Pt1.x - inSeg2Pt1.x; + var seg1seg2dy = inSeg1Pt1.y - inSeg2Pt1.y; + + var limit = seg1dy * seg2dx - seg1dx * seg2dy; + var perpSeg1 = seg1dy * seg1seg2dx - seg1dx * seg1seg2dy; + + if ( Math.abs( limit ) > Number.EPSILON ) { + + // not parallel + + var perpSeg2; + if ( limit > 0 ) { + + if ( ( perpSeg1 < 0 ) || ( perpSeg1 > limit ) ) return []; + perpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy; + if ( ( perpSeg2 < 0 ) || ( perpSeg2 > limit ) ) return []; + + } else { + + if ( ( perpSeg1 > 0 ) || ( perpSeg1 < limit ) ) return []; + perpSeg2 = seg2dy * seg1seg2dx - seg2dx * seg1seg2dy; + if ( ( perpSeg2 > 0 ) || ( perpSeg2 < limit ) ) return []; + + } + + // i.e. to reduce rounding errors + // intersection at endpoint of segment#1? + if ( perpSeg2 === 0 ) { + + if ( ( inExcludeAdjacentSegs ) && + ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) ) return []; + return [ inSeg1Pt1 ]; + + } + if ( perpSeg2 === limit ) { + + if ( ( inExcludeAdjacentSegs ) && + ( ( perpSeg1 === 0 ) || ( perpSeg1 === limit ) ) ) return []; + return [ inSeg1Pt2 ]; + + } + // intersection at endpoint of segment#2? + if ( perpSeg1 === 0 ) return [ inSeg2Pt1 ]; + if ( perpSeg1 === limit ) return [ inSeg2Pt2 ]; + + // return real intersection point + var factorSeg1 = perpSeg2 / limit; + return [ { x: inSeg1Pt1.x + factorSeg1 * seg1dx, + y: inSeg1Pt1.y + factorSeg1 * seg1dy } ]; + + } else { + + // parallel or collinear + if ( ( perpSeg1 !== 0 ) || + ( seg2dy * seg1seg2dx !== seg2dx * seg1seg2dy ) ) return []; + + // they are collinear or degenerate + var seg1Pt = ( ( seg1dx === 0 ) && ( seg1dy === 0 ) ); // segment1 is just a point? + var seg2Pt = ( ( seg2dx === 0 ) && ( seg2dy === 0 ) ); // segment2 is just a point? + // both segments are points + if ( seg1Pt && seg2Pt ) { + + if ( ( inSeg1Pt1.x !== inSeg2Pt1.x ) || + ( inSeg1Pt1.y !== inSeg2Pt1.y ) ) return []; // they are distinct points + return [ inSeg1Pt1 ]; // they are the same point + + } + // segment#1 is a single point + if ( seg1Pt ) { + + if ( ! point_in_segment_2D_colin( inSeg2Pt1, inSeg2Pt2, inSeg1Pt1 ) ) return []; // but not in segment#2 + return [ inSeg1Pt1 ]; + + } + // segment#2 is a single point + if ( seg2Pt ) { + + if ( ! point_in_segment_2D_colin( inSeg1Pt1, inSeg1Pt2, inSeg2Pt1 ) ) return []; // but not in segment#1 + return [ inSeg2Pt1 ]; + + } + + // they are collinear segments, which might overlap + var seg1min, seg1max, seg1minVal, seg1maxVal; + var seg2min, seg2max, seg2minVal, seg2maxVal; + if ( seg1dx !== 0 ) { + + // the segments are NOT on a vertical line + if ( inSeg1Pt1.x < inSeg1Pt2.x ) { + + seg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.x; + seg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.x; + + } else { + + seg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.x; + seg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.x; + + } + if ( inSeg2Pt1.x < inSeg2Pt2.x ) { + + seg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.x; + seg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.x; + + } else { + + seg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.x; + seg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.x; + + } + + } else { + + // the segments are on a vertical line + if ( inSeg1Pt1.y < inSeg1Pt2.y ) { + + seg1min = inSeg1Pt1; seg1minVal = inSeg1Pt1.y; + seg1max = inSeg1Pt2; seg1maxVal = inSeg1Pt2.y; + + } else { + + seg1min = inSeg1Pt2; seg1minVal = inSeg1Pt2.y; + seg1max = inSeg1Pt1; seg1maxVal = inSeg1Pt1.y; + + } + if ( inSeg2Pt1.y < inSeg2Pt2.y ) { + + seg2min = inSeg2Pt1; seg2minVal = inSeg2Pt1.y; + seg2max = inSeg2Pt2; seg2maxVal = inSeg2Pt2.y; + + } else { + + seg2min = inSeg2Pt2; seg2minVal = inSeg2Pt2.y; + seg2max = inSeg2Pt1; seg2maxVal = inSeg2Pt1.y; + + } + + } + if ( seg1minVal <= seg2minVal ) { + + if ( seg1maxVal < seg2minVal ) return []; + if ( seg1maxVal === seg2minVal ) { + + if ( inExcludeAdjacentSegs ) return []; + return [ seg2min ]; + + } + if ( seg1maxVal <= seg2maxVal ) return [ seg2min, seg1max ]; + return [ seg2min, seg2max ]; + + } else { + + if ( seg1minVal > seg2maxVal ) return []; + if ( seg1minVal === seg2maxVal ) { + + if ( inExcludeAdjacentSegs ) return []; + return [ seg1min ]; + + } + if ( seg1maxVal <= seg2maxVal ) return [ seg1min, seg1max ]; + return [ seg1min, seg2max ]; + + } + + } + + } + + function isPointInsideAngle( inVertex, inLegFromPt, inLegToPt, inOtherPt ) { + + // The order of legs is important + + // translation of all points, so that Vertex is at (0,0) + var legFromPtX = inLegFromPt.x - inVertex.x, legFromPtY = inLegFromPt.y - inVertex.y; + var legToPtX = inLegToPt.x - inVertex.x, legToPtY = inLegToPt.y - inVertex.y; + var otherPtX = inOtherPt.x - inVertex.x, otherPtY = inOtherPt.y - inVertex.y; + + // main angle >0: < 180 deg.; 0: 180 deg.; <0: > 180 deg. + var from2toAngle = legFromPtX * legToPtY - legFromPtY * legToPtX; + var from2otherAngle = legFromPtX * otherPtY - legFromPtY * otherPtX; + + if ( Math.abs( from2toAngle ) > Number.EPSILON ) { + + // angle != 180 deg. + + var other2toAngle = otherPtX * legToPtY - otherPtY * legToPtX; + // console.log( "from2to: " + from2toAngle + ", from2other: " + from2otherAngle + ", other2to: " + other2toAngle ); + + if ( from2toAngle > 0 ) { + + // main angle < 180 deg. + return ( ( from2otherAngle >= 0 ) && ( other2toAngle >= 0 ) ); + + } else { + + // main angle > 180 deg. + return ( ( from2otherAngle >= 0 ) || ( other2toAngle >= 0 ) ); + + } + + } else { + + // angle == 180 deg. + // console.log( "from2to: 180 deg., from2other: " + from2otherAngle ); + return ( from2otherAngle > 0 ); + + } + + } + + + function removeHoles( contour, holes ) { + + var shape = contour.concat(); // work on this shape + var hole; + + function isCutLineInsideAngles( inShapeIdx, inHoleIdx ) { + + // Check if hole point lies within angle around shape point + var lastShapeIdx = shape.length - 1; + + var prevShapeIdx = inShapeIdx - 1; + if ( prevShapeIdx < 0 ) prevShapeIdx = lastShapeIdx; + + var nextShapeIdx = inShapeIdx + 1; + if ( nextShapeIdx > lastShapeIdx ) nextShapeIdx = 0; + + var insideAngle = isPointInsideAngle( shape[ inShapeIdx ], shape[ prevShapeIdx ], shape[ nextShapeIdx ], hole[ inHoleIdx ] ); + if ( ! insideAngle ) { + + // console.log( "Vertex (Shape): " + inShapeIdx + ", Point: " + hole[inHoleIdx].x + "/" + hole[inHoleIdx].y ); + return false; + + } + + // Check if shape point lies within angle around hole point + var lastHoleIdx = hole.length - 1; + + var prevHoleIdx = inHoleIdx - 1; + if ( prevHoleIdx < 0 ) prevHoleIdx = lastHoleIdx; + + var nextHoleIdx = inHoleIdx + 1; + if ( nextHoleIdx > lastHoleIdx ) nextHoleIdx = 0; + + insideAngle = isPointInsideAngle( hole[ inHoleIdx ], hole[ prevHoleIdx ], hole[ nextHoleIdx ], shape[ inShapeIdx ] ); + if ( ! insideAngle ) { + + // console.log( "Vertex (Hole): " + inHoleIdx + ", Point: " + shape[inShapeIdx].x + "/" + shape[inShapeIdx].y ); + return false; + + } + + return true; + + } + + function intersectsShapeEdge( inShapePt, inHolePt ) { + + // checks for intersections with shape edges + var sIdx, nextIdx, intersection; + for ( sIdx = 0; sIdx < shape.length; sIdx ++ ) { + + nextIdx = sIdx + 1; nextIdx %= shape.length; + intersection = intersect_segments_2D( inShapePt, inHolePt, shape[ sIdx ], shape[ nextIdx ], true ); + if ( intersection.length > 0 ) return true; + + } + + return false; + + } + + var indepHoles = []; + + function intersectsHoleEdge( inShapePt, inHolePt ) { + + // checks for intersections with hole edges + var ihIdx, chkHole, + hIdx, nextIdx, intersection; + for ( ihIdx = 0; ihIdx < indepHoles.length; ihIdx ++ ) { + + chkHole = holes[ indepHoles[ ihIdx ] ]; + for ( hIdx = 0; hIdx < chkHole.length; hIdx ++ ) { + + nextIdx = hIdx + 1; nextIdx %= chkHole.length; + intersection = intersect_segments_2D( inShapePt, inHolePt, chkHole[ hIdx ], chkHole[ nextIdx ], true ); + if ( intersection.length > 0 ) return true; + + } + + } + return false; + + } + + var holeIndex, shapeIndex, + shapePt, holePt, + holeIdx, cutKey, failedCuts = [], + tmpShape1, tmpShape2, + tmpHole1, tmpHole2; + + for ( var h = 0, hl = holes.length; h < hl; h ++ ) { + + indepHoles.push( h ); + + } + + var minShapeIndex = 0; + var counter = indepHoles.length * 2; + while ( indepHoles.length > 0 ) { + + counter --; + if ( counter < 0 ) { + + console.log( 'THREE.ShapeUtils: Infinite Loop! Holes left:" + indepHoles.length + ", Probably Hole outside Shape!' ); + break; + + } + + // search for shape-vertex and hole-vertex, + // which can be connected without intersections + for ( shapeIndex = minShapeIndex; shapeIndex < shape.length; shapeIndex ++ ) { + + shapePt = shape[ shapeIndex ]; + holeIndex = - 1; + + // search for hole which can be reached without intersections + for ( var h = 0; h < indepHoles.length; h ++ ) { + + holeIdx = indepHoles[ h ]; + + // prevent multiple checks + cutKey = shapePt.x + ':' + shapePt.y + ':' + holeIdx; + if ( failedCuts[ cutKey ] !== undefined ) continue; + + hole = holes[ holeIdx ]; + for ( var h2 = 0; h2 < hole.length; h2 ++ ) { + + holePt = hole[ h2 ]; + if ( ! isCutLineInsideAngles( shapeIndex, h2 ) ) continue; + if ( intersectsShapeEdge( shapePt, holePt ) ) continue; + if ( intersectsHoleEdge( shapePt, holePt ) ) continue; + + holeIndex = h2; + indepHoles.splice( h, 1 ); + + tmpShape1 = shape.slice( 0, shapeIndex + 1 ); + tmpShape2 = shape.slice( shapeIndex ); + tmpHole1 = hole.slice( holeIndex ); + tmpHole2 = hole.slice( 0, holeIndex + 1 ); + + shape = tmpShape1.concat( tmpHole1 ).concat( tmpHole2 ).concat( tmpShape2 ); + + minShapeIndex = shapeIndex; + + // Debug only, to show the selected cuts + // glob_CutLines.push( [ shapePt, holePt ] ); + + break; + + } + if ( holeIndex >= 0 ) break; // hole-vertex found + + failedCuts[ cutKey ] = true; // remember failure + + } + if ( holeIndex >= 0 ) break; // hole-vertex found + + } + + } + + return shape; /* shape with no holes */ + + } + + + var i, il, f, face, + key, index, + allPointsMap = {}; + + // To maintain reference to old shape, one must match coordinates, or offset the indices from original arrays. It's probably easier to do the first. + + var allpoints = contour.concat(); + + for ( var h = 0, hl = holes.length; h < hl; h ++ ) { + + Array.prototype.push.apply( allpoints, holes[ h ] ); + + } + + //console.log( "allpoints",allpoints, allpoints.length ); + + // prepare all points map + + for ( i = 0, il = allpoints.length; i < il; i ++ ) { + + key = allpoints[ i ].x + ':' + allpoints[ i ].y; + + if ( allPointsMap[ key ] !== undefined ) { + + console.warn( 'THREE.ShapeUtils: Duplicate point', key, i ); + + } + + allPointsMap[ key ] = i; + + } + + // remove holes by cutting paths to holes and adding them to the shape + var shapeWithoutHoles = removeHoles( contour, holes ); + + var triangles = ShapeUtils.triangulate( shapeWithoutHoles, false ); // True returns indices for points of spooled shape + //console.log( "triangles",triangles, triangles.length ); + + // check all face vertices against all points map + + for ( i = 0, il = triangles.length; i < il; i ++ ) { + + face = triangles[ i ]; + + for ( f = 0; f < 3; f ++ ) { + + key = face[ f ].x + ':' + face[ f ].y; + + index = allPointsMap[ key ]; + + if ( index !== undefined ) { + + face[ f ] = index; + + } + + } + + } + + return triangles.concat(); + + }, + + isClockWise: function ( pts ) { + + return ShapeUtils.area( pts ) < 0; + + } + +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + * Creates extruded geometry from a path shape. + * + * parameters = { + * + * curveSegments: , // number of points on the curves + * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too + * amount: , // Depth to extrude the shape + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into the original shape bevel goes + * bevelSize: , // how far from shape outline is bevel + * bevelSegments: , // number of bevel layers + * + * extrudePath: // curve to extrude shape along + * frames: // containing arrays of tangents, normals, binormals + * + * UVGenerator: // object that provides UV generator functions + * + * } + */ + +// ExtrudeGeometry + +function ExtrudeGeometry( shapes, options ) { + + Geometry.call( this ); + + this.type = 'ExtrudeGeometry'; + + this.parameters = { + shapes: shapes, + options: options + }; + + this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); + this.mergeVertices(); + +} + +ExtrudeGeometry.prototype = Object.create( Geometry.prototype ); +ExtrudeGeometry.prototype.constructor = ExtrudeGeometry; + +// ExtrudeBufferGeometry + +function ExtrudeBufferGeometry( shapes, options ) { + + if ( typeof ( shapes ) === "undefined" ) { + + return; + + } + + BufferGeometry.call( this ); + + this.type = 'ExtrudeBufferGeometry'; + + shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; + + this.addShapeList( shapes, options ); + + this.computeVertexNormals(); + + // can't really use automatic vertex normals + // as then front and back sides get smoothed too + // should do separate smoothing just for sides + + //this.computeVertexNormals(); + + //console.log( "took", ( Date.now() - startTime ) ); + +} + +ExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry; + +ExtrudeBufferGeometry.prototype.getArrays = function () { + + var positionAttribute = this.getAttribute( "position" ); + var verticesArray = positionAttribute ? Array.prototype.slice.call( positionAttribute.array ) : []; + + var uvAttribute = this.getAttribute( "uv" ); + var uvArray = uvAttribute ? Array.prototype.slice.call( uvAttribute.array ) : []; + + var IndexAttribute = this.index; + var indicesArray = IndexAttribute ? Array.prototype.slice.call( IndexAttribute.array ) : []; + + return { + position: verticesArray, + uv: uvArray, + index: indicesArray + }; + +}; + +ExtrudeBufferGeometry.prototype.addShapeList = function ( shapes, options ) { + + var sl = shapes.length; + options.arrays = this.getArrays(); + + for ( var s = 0; s < sl; s ++ ) { + + var shape = shapes[ s ]; + this.addShape( shape, options ); + + } + + this.setIndex( options.arrays.index ); + this.addAttribute( 'position', new Float32BufferAttribute( options.arrays.position, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) ); + +}; + +ExtrudeBufferGeometry.prototype.addShape = function ( shape, options ) { + + var arrays = options.arrays ? options.arrays : this.getArrays(); + var verticesArray = arrays.position; + var indicesArray = arrays.index; + var uvArray = arrays.uv; + + var placeholder = []; + + + var amount = options.amount !== undefined ? options.amount : 100; + + var bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; // 10 + var bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; // 8 + var bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; + + var bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; // false + + var curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; + + var steps = options.steps !== undefined ? options.steps : 1; + + var extrudePath = options.extrudePath; + var extrudePts, extrudeByPath = false; + + // Use default WorldUVGenerator if no UV generators are specified. + var uvgen = options.UVGenerator !== undefined ? options.UVGenerator : ExtrudeGeometry.WorldUVGenerator; + + var splineTube, binormal, normal, position2; + if ( extrudePath ) { + + extrudePts = extrudePath.getSpacedPoints( steps ); + + extrudeByPath = true; + bevelEnabled = false; // bevels not supported for path extrusion + + // SETUP TNB variables + + // TODO1 - have a .isClosed in spline? + + splineTube = options.frames !== undefined ? options.frames : extrudePath.computeFrenetFrames( steps, false ); + + // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); + + binormal = new Vector3(); + normal = new Vector3(); + position2 = new Vector3(); + + } + + // Safeguards if bevels are not enabled + + if ( ! bevelEnabled ) { + + bevelSegments = 0; + bevelThickness = 0; + bevelSize = 0; + + } + + // Variables initialization + + var ahole, h, hl; // looping of holes + var scope = this; + + var shapePoints = shape.extractPoints( curveSegments ); + + var vertices = shapePoints.shape; + var holes = shapePoints.holes; + + var reverse = ! ShapeUtils.isClockWise( vertices ); + + if ( reverse ) { + + vertices = vertices.reverse(); + + // Maybe we should also check if holes are in the opposite direction, just to be safe ... + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + if ( ShapeUtils.isClockWise( ahole ) ) { + + holes[ h ] = ahole.reverse(); + + } + + } + + } + + + var faces = ShapeUtils.triangulateShape( vertices, holes ); + + /* Vertices */ + + var contour = vertices; // vertices has all points but contour has only points of circumference + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + vertices = vertices.concat( ahole ); + + } + + + function scalePt2( pt, vec, size ) { + + if ( ! vec ) console.error( "THREE.ExtrudeGeometry: vec does not exist" ); + + return vec.clone().multiplyScalar( size ).add( pt ); + + } + + var b, bs, t, z, + vert, vlen = vertices.length, + face, flen = faces.length; + + + // Find directions for point movement + + + function getBevelVec( inPt, inPrev, inNext ) { + + // computes for inPt the corresponding point inPt' on a new contour + // shifted by 1 unit (length of normalized vector) to the left + // if we walk along contour clockwise, this new contour is outside the old one + // + // inPt' is the intersection of the two lines parallel to the two + // adjacent edges of inPt at a distance of 1 unit on the left side. + + var v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt + + // good reading for geometry algorithms (here: line-line intersection) + // http://geomalgorithms.com/a05-_intersect-1.html + + var v_prev_x = inPt.x - inPrev.x, + v_prev_y = inPt.y - inPrev.y; + var v_next_x = inNext.x - inPt.x, + v_next_y = inNext.y - inPt.y; + + var v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); + + // check for collinear edges + var collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + if ( Math.abs( collinear0 ) > Number.EPSILON ) { + + // not collinear + + // length of vectors for normalizing + + var v_prev_len = Math.sqrt( v_prev_lensq ); + var v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); + + // shift adjacent points by unit vectors to the left + + var ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); + var ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); + + var ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); + var ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); + + // scaling factor for v_prev to intersection point + + var sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - + ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / + ( v_prev_x * v_next_y - v_prev_y * v_next_x ); + + // vector from inPt to intersection point + + v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); + v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); + + // Don't normalize!, otherwise sharp corners become ugly + // but prevent crazy spikes + var v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); + if ( v_trans_lensq <= 2 ) { + + return new Vector2( v_trans_x, v_trans_y ); + + } else { + + shrink_by = Math.sqrt( v_trans_lensq / 2 ); + + } + + } else { + + // handle special case of collinear edges + + var direction_eq = false; // assumes: opposite + if ( v_prev_x > Number.EPSILON ) { + + if ( v_next_x > Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( v_prev_x < - Number.EPSILON ) { + + if ( v_next_x < - Number.EPSILON ) { + + direction_eq = true; + + } + + } else { + + if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { + + direction_eq = true; + + } + + } + + } + + if ( direction_eq ) { + + // console.log("Warning: lines are a straight sequence"); + v_trans_x = - v_prev_y; + v_trans_y = v_prev_x; + shrink_by = Math.sqrt( v_prev_lensq ); + + } else { + + // console.log("Warning: lines are a straight spike"); + v_trans_x = v_prev_x; + v_trans_y = v_prev_y; + shrink_by = Math.sqrt( v_prev_lensq / 2 ); + + } + + } + + return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); + + } + + + var contourMovements = []; + + for ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + // console.log('i,j,k', i, j , k) + + contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); + + } + + var holesMovements = [], + oneHoleMovements, verticesMovements = contourMovements.concat(); + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + + oneHoleMovements = []; + + for ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { + + if ( j === il ) j = 0; + if ( k === il ) k = 0; + + // (j)---(i)---(k) + oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); + + } + + holesMovements.push( oneHoleMovements ); + verticesMovements = verticesMovements.concat( oneHoleMovements ); + + } + + + // Loop bevelSegments, 1 for the front, 1 for the back + + for ( b = 0; b < bevelSegments; b ++ ) { + + //for ( b = bevelSegments; b > 0; b -- ) { + + t = b / bevelSegments; + z = bevelThickness * Math.cos( t * Math.PI / 2 ); + bs = bevelSize * Math.sin( t * Math.PI / 2 ); + + // contract shape + + for ( i = 0, il = contour.length; i < il; i ++ ) { + + vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + // expand holes + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( i = 0, il = ahole.length; i < il; i ++ ) { + + vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + v( vert.x, vert.y, - z ); + + } + + } + + } + + bs = bevelSize; + + // Back facing vertices + + for ( i = 0; i < vlen; i ++ ) { + + vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, 0 ); + + } else { + + // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); + + normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + // Add stepped vertices... + // Including front facing vertices + + var s; + + for ( s = 1; s <= steps; s ++ ) { + + for ( i = 0; i < vlen; i ++ ) { + + vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, amount / steps * s ); + + } else { + + // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); + + normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); + binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); + + position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); + + v( position2.x, position2.y, position2.z ); + + } + + } + + } + + + // Add bevel segments planes + + //for ( b = 1; b <= bevelSegments; b ++ ) { + for ( b = bevelSegments - 1; b >= 0; b -- ) { + + t = b / bevelSegments; + z = bevelThickness * Math.cos( t * Math.PI / 2 ); + bs = bevelSize * Math.sin( t * Math.PI / 2 ); + + // contract shape + + for ( i = 0, il = contour.length; i < il; i ++ ) { + + vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); + v( vert.x, vert.y, amount + z ); + + } + + // expand holes + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + oneHoleMovements = holesMovements[ h ]; + + for ( i = 0, il = ahole.length; i < il; i ++ ) { + + vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); + + if ( ! extrudeByPath ) { + + v( vert.x, vert.y, amount + z ); + + } else { + + v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); + + } + + } + + } + + } + + /* Faces */ + + // Top and bottom faces + + buildLidFaces(); + + // Sides faces + + buildSideFaces(); + + + ///// Internal functions + + function buildLidFaces() { + + var start = verticesArray.length/3; + + if ( bevelEnabled ) { + + var layer = 0; // steps + 1 + var offset = vlen * layer; + + // Bottom faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); + + } + + layer = steps + bevelSegments * 2; + offset = vlen * layer; + + // Top faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); + + } + + } else { + + // Bottom faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 2 ], face[ 1 ], face[ 0 ] ); + + } + + // Top faces + + for ( i = 0; i < flen; i ++ ) { + + face = faces[ i ]; + f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); + + } + + } + + scope.addGroup( start, verticesArray.length/3 -start, options.material !== undefined ? options.material : 0); + + } + + // Create faces for the z-sides of the shape + + function buildSideFaces() { + + var start = verticesArray.length/3; + var layeroffset = 0; + sidewalls( contour, layeroffset ); + layeroffset += contour.length; + + for ( h = 0, hl = holes.length; h < hl; h ++ ) { + + ahole = holes[ h ]; + sidewalls( ahole, layeroffset ); + + //, true + layeroffset += ahole.length; + + } + + + scope.addGroup( start, verticesArray.length/3 -start, options.extrudeMaterial !== undefined ? options.extrudeMaterial : 1); + + + } + + function sidewalls( contour, layeroffset ) { + + var j, k; + i = contour.length; + + while ( -- i >= 0 ) { + + j = i; + k = i - 1; + if ( k < 0 ) k = contour.length - 1; + + //console.log('b', i,j, i-1, k,vertices.length); + + var s = 0, + sl = steps + bevelSegments * 2; + + for ( s = 0; s < sl; s ++ ) { + + var slen1 = vlen * s; + var slen2 = vlen * ( s + 1 ); + + var a = layeroffset + j + slen1, + b = layeroffset + k + slen1, + c = layeroffset + k + slen2, + d = layeroffset + j + slen2; + + f4( a, b, c, d, contour, s, sl, j, k ); + + } + + } + + } + + function v( x, y, z ) { + + placeholder.push( x ); + placeholder.push( y ); + placeholder.push( z ); + + } + + + function f3( a, b, c ) { + + addVertex( a ); + addVertex( b ); + addVertex( c ); + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + + } + + function f4( a, b, c, d, wallContour, stepIndex, stepsLength, contourIndex1, contourIndex2 ) { + + addVertex( a ); + addVertex( b ); + addVertex( d ); + + addVertex( b ); + addVertex( c ); + addVertex( d ); + + + var nextIndex = verticesArray.length / 3; + var uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); + + addUV( uvs[ 0 ] ); + addUV( uvs[ 1 ] ); + addUV( uvs[ 3 ] ); + + addUV( uvs[ 1 ] ); + addUV( uvs[ 2 ] ); + addUV( uvs[ 3 ] ); + + } + + function addVertex( index ) { + + indicesArray.push( verticesArray.length / 3 ); + verticesArray.push( placeholder[ index * 3 + 0 ] ); + verticesArray.push( placeholder[ index * 3 + 1 ] ); + verticesArray.push( placeholder[ index * 3 + 2 ] ); + + } + + + function addUV( vector2 ) { + + uvArray.push( vector2.x ); + uvArray.push( vector2.y ); + + } + + if ( ! options.arrays ) { + + this.setIndex( indicesArray ); + this.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( options.arrays.uv, 2 ) ); + + } + +}; + +ExtrudeGeometry.WorldUVGenerator = { + + generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + + return [ + new Vector2( a_x, a_y ), + new Vector2( b_x, b_y ), + new Vector2( c_x, c_y ) + ]; + + }, + + generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { + + var a_x = vertices[ indexA * 3 ]; + var a_y = vertices[ indexA * 3 + 1 ]; + var a_z = vertices[ indexA * 3 + 2 ]; + var b_x = vertices[ indexB * 3 ]; + var b_y = vertices[ indexB * 3 + 1 ]; + var b_z = vertices[ indexB * 3 + 2 ]; + var c_x = vertices[ indexC * 3 ]; + var c_y = vertices[ indexC * 3 + 1 ]; + var c_z = vertices[ indexC * 3 + 2 ]; + var d_x = vertices[ indexD * 3 ]; + var d_y = vertices[ indexD * 3 + 1 ]; + var d_z = vertices[ indexD * 3 + 2 ]; + + if ( Math.abs( a_y - b_y ) < 0.01 ) { + + return [ + new Vector2( a_x, 1 - a_z ), + new Vector2( b_x, 1 - b_z ), + new Vector2( c_x, 1 - c_z ), + new Vector2( d_x, 1 - d_z ) + ]; + + } else { + + return [ + new Vector2( a_y, 1 - a_z ), + new Vector2( b_y, 1 - b_z ), + new Vector2( c_y, 1 - c_z ), + new Vector2( d_y, 1 - d_z ) + ]; + + } + + } +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author alteredq / http://alteredqualia.com/ + * + * Text = 3D Text + * + * parameters = { + * font: , // font + * + * size: , // size of the text + * height: , // thickness to extrude text + * curveSegments: , // number of points on the curves + * + * bevelEnabled: , // turn on bevel + * bevelThickness: , // how deep into text bevel goes + * bevelSize: // how far from text outline is bevel + * } + */ + +// TextGeometry + +function TextGeometry( text, parameters ) { + + Geometry.call( this ); + + this.type = 'TextGeometry'; + + this.parameters = { + text: text, + parameters: parameters + }; + + this.fromBufferGeometry( new TextBufferGeometry( text, parameters ) ); + this.mergeVertices(); + +} + +TextGeometry.prototype = Object.create( Geometry.prototype ); +TextGeometry.prototype.constructor = TextGeometry; + +// TextBufferGeometry + +function TextBufferGeometry( text, parameters ) { + + parameters = parameters || {}; + + var font = parameters.font; + + if ( ! ( font && font.isFont ) ) { + + console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); + return new Geometry(); + + } + + var shapes = font.generateShapes( text, parameters.size, parameters.curveSegments ); + + // translate parameters to ExtrudeGeometry API + + parameters.amount = parameters.height !== undefined ? parameters.height : 50; + + // defaults + + if ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10; + if ( parameters.bevelSize === undefined ) parameters.bevelSize = 8; + if ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false; + + ExtrudeBufferGeometry.call( this, shapes, parameters ); + + this.type = 'TextBufferGeometry'; + +} + +TextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype ); +TextBufferGeometry.prototype.constructor = TextBufferGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author benaadams / https://twitter.com/ben_a_adams + * @author Mugen87 / https://github.com/Mugen87 + */ + +// SphereGeometry + +function SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'SphereGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +SphereGeometry.prototype = Object.create( Geometry.prototype ); +SphereGeometry.prototype.constructor = SphereGeometry; + +// SphereBufferGeometry + +function SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'SphereBufferGeometry'; + + this.parameters = { + radius: radius, + widthSegments: widthSegments, + heightSegments: heightSegments, + phiStart: phiStart, + phiLength: phiLength, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 50; + + widthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 ); + heightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 ); + + phiStart = phiStart !== undefined ? phiStart : 0; + phiLength = phiLength !== undefined ? phiLength : Math.PI * 2; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI; + + var thetaEnd = thetaStart + thetaLength; + + var ix, iy; + + var index = 0; + var grid = []; + + var vertex = new Vector3(); + var normal = new Vector3(); + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // generate vertices, normals and uvs + + for ( iy = 0; iy <= heightSegments; iy ++ ) { + + var verticesRow = []; + + var v = iy / heightSegments; + + for ( ix = 0; ix <= widthSegments; ix ++ ) { + + var u = ix / widthSegments; + + // vertex + + vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); + vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( vertex.x, vertex.y, vertex.z ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + verticesRow.push( index ++ ); + + } + + grid.push( verticesRow ); + + } + + // indices + + for ( iy = 0; iy < heightSegments; iy ++ ) { + + for ( ix = 0; ix < widthSegments; ix ++ ) { + + var a = grid[ iy ][ ix + 1 ]; + var b = grid[ iy ][ ix ]; + var c = grid[ iy + 1 ][ ix ]; + var d = grid[ iy + 1 ][ ix + 1 ]; + + if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); + if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +SphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +SphereBufferGeometry.prototype.constructor = SphereBufferGeometry; + +/** + * @author Kaleb Murphy + * @author Mugen87 / https://github.com/Mugen87 + */ + +// RingGeometry + +function RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'RingGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +RingGeometry.prototype = Object.create( Geometry.prototype ); +RingGeometry.prototype.constructor = RingGeometry; + +// RingBufferGeometry + +function RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'RingBufferGeometry'; + + this.parameters = { + innerRadius: innerRadius, + outerRadius: outerRadius, + thetaSegments: thetaSegments, + phiSegments: phiSegments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + innerRadius = innerRadius || 20; + outerRadius = outerRadius || 50; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + thetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8; + phiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // some helper variables + + var segment; + var radius = innerRadius; + var radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); + var vertex = new Vector3(); + var uv = new Vector2(); + var j, i; + + // generate vertices, normals and uvs + + for ( j = 0; j <= phiSegments; j ++ ) { + + for ( i = 0; i <= thetaSegments; i ++ ) { + + // values are generate from the inside of the ring to the outside + + segment = thetaStart + i / thetaSegments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uv + + uv.x = ( vertex.x / outerRadius + 1 ) / 2; + uv.y = ( vertex.y / outerRadius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // increase the radius for next row of vertices + + radius += radiusStep; + + } + + // indices + + for ( j = 0; j < phiSegments; j ++ ) { + + var thetaSegmentLevel = j * ( thetaSegments + 1 ); + + for ( i = 0; i < thetaSegments; i ++ ) { + + segment = i + thetaSegmentLevel; + + var a = segment; + var b = segment + thetaSegments + 1; + var c = segment + thetaSegments + 2; + var d = segment + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +RingBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +RingBufferGeometry.prototype.constructor = RingBufferGeometry; + +/** + * @author astrodud / http://astrodud.isgreat.org/ + * @author zz85 / https://github.com/zz85 + * @author bhouston / http://clara.io + * @author Mugen87 / https://github.com/Mugen87 + */ + +// LatheGeometry + +function LatheGeometry( points, segments, phiStart, phiLength ) { + + Geometry.call( this ); + + this.type = 'LatheGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + this.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) ); + this.mergeVertices(); + +} + +LatheGeometry.prototype = Object.create( Geometry.prototype ); +LatheGeometry.prototype.constructor = LatheGeometry; + +// LatheBufferGeometry + +function LatheBufferGeometry( points, segments, phiStart, phiLength ) { + + BufferGeometry.call( this ); + + this.type = 'LatheBufferGeometry'; + + this.parameters = { + points: points, + segments: segments, + phiStart: phiStart, + phiLength: phiLength + }; + + segments = Math.floor( segments ) || 12; + phiStart = phiStart || 0; + phiLength = phiLength || Math.PI * 2; + + // clamp phiLength so it's in range of [ 0, 2PI ] + + phiLength = _Math.clamp( phiLength, 0, Math.PI * 2 ); + + + // buffers + + var indices = []; + var vertices = []; + var uvs = []; + + // helper variables + + var base; + var inverseSegments = 1.0 / segments; + var vertex = new Vector3(); + var uv = new Vector2(); + var i, j; + + // generate vertices and uvs + + for ( i = 0; i <= segments; i ++ ) { + + var phi = phiStart + i * inverseSegments * phiLength; + + var sin = Math.sin( phi ); + var cos = Math.cos( phi ); + + for ( j = 0; j <= ( points.length - 1 ); j ++ ) { + + // vertex + + vertex.x = points[ j ].x * sin; + vertex.y = points[ j ].y; + vertex.z = points[ j ].x * cos; + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // uv + + uv.x = i / segments; + uv.y = j / ( points.length - 1 ); + + uvs.push( uv.x, uv.y ); + + + } + + } + + // indices + + for ( i = 0; i < segments; i ++ ) { + + for ( j = 0; j < ( points.length - 1 ); j ++ ) { + + base = j + i * points.length; + + var a = base; + var b = base + points.length; + var c = base + points.length + 1; + var d = base + 1; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + // generate normals + + this.computeVertexNormals(); + + // if the geometry is closed, we need to average the normals along the seam. + // because the corresponding vertices are identical (but still have different UVs). + + if ( phiLength === Math.PI * 2 ) { + + var normals = this.attributes.normal.array; + var n1 = new Vector3(); + var n2 = new Vector3(); + var n = new Vector3(); + + // this is the buffer offset for the last line of vertices + + base = segments * points.length * 3; + + for ( i = 0, j = 0; i < points.length; i ++, j += 3 ) { + + // select the normal of the vertex in the first line + + n1.x = normals[ j + 0 ]; + n1.y = normals[ j + 1 ]; + n1.z = normals[ j + 2 ]; + + // select the normal of the vertex in the last line + + n2.x = normals[ base + j + 0 ]; + n2.y = normals[ base + j + 1 ]; + n2.z = normals[ base + j + 2 ]; + + // average normals + + n.addVectors( n1, n2 ).normalize(); + + // assign the new values to both normals + + normals[ j + 0 ] = normals[ base + j + 0 ] = n.x; + normals[ j + 1 ] = normals[ base + j + 1 ] = n.y; + normals[ j + 2 ] = normals[ base + j + 2 ] = n.z; + + } + + } + +} + +LatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +LatheBufferGeometry.prototype.constructor = LatheBufferGeometry; + +/** + * @author jonobr1 / http://jonobr1.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +// ShapeGeometry + +function ShapeGeometry( shapes, curveSegments ) { + + Geometry.call( this ); + + this.type = 'ShapeGeometry'; + + if ( typeof curveSegments === 'object' ) { + + console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); + + curveSegments = curveSegments.curveSegments; + + } + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); + this.mergeVertices(); + +} + +ShapeGeometry.prototype = Object.create( Geometry.prototype ); +ShapeGeometry.prototype.constructor = ShapeGeometry; + +// ShapeBufferGeometry + +function ShapeBufferGeometry( shapes, curveSegments ) { + + BufferGeometry.call( this ); + + this.type = 'ShapeBufferGeometry'; + + this.parameters = { + shapes: shapes, + curveSegments: curveSegments + }; + + curveSegments = curveSegments || 12; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var groupStart = 0; + var groupCount = 0; + + // allow single and array values for "shapes" parameter + + if ( Array.isArray( shapes ) === false ) { + + addShape( shapes ); + + } else { + + for ( var i = 0; i < shapes.length; i ++ ) { + + addShape( shapes[ i ] ); + + this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support + + groupStart += groupCount; + groupCount = 0; + + } + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + + // helper functions + + function addShape( shape ) { + + var i, l, shapeHole; + + var indexOffset = vertices.length / 3; + var points = shape.extractPoints( curveSegments ); + + var shapeVertices = points.shape; + var shapeHoles = points.holes; + + // check direction of vertices + + if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { + + shapeVertices = shapeVertices.reverse(); + + // also check if holes are in the opposite direction + + for ( i = 0, l = shapeHoles.length; i < l; i ++ ) { + + shapeHole = shapeHoles[ i ]; + + if ( ShapeUtils.isClockWise( shapeHole ) === true ) { + + shapeHoles[ i ] = shapeHole.reverse(); + + } + + } + + } + + var faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); + + // join vertices of inner and outer paths to a single array + + for ( i = 0, l = shapeHoles.length; i < l; i ++ ) { + + shapeHole = shapeHoles[ i ]; + shapeVertices = shapeVertices.concat( shapeHole ); + + } + + // vertices, normals, uvs + + for ( i = 0, l = shapeVertices.length; i < l; i ++ ) { + + var vertex = shapeVertices[ i ]; + + vertices.push( vertex.x, vertex.y, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( vertex.x, vertex.y ); // world uvs + + } + + // incides + + for ( i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + var a = face[ 0 ] + indexOffset; + var b = face[ 1 ] + indexOffset; + var c = face[ 2 ] + indexOffset; + + indices.push( a, b, c ); + groupCount += 3; + + } + + } + +} + +ShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +ShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry; + +/** + * @author WestLangley / http://github.com/WestLangley + * @author Mugen87 / https://github.com/Mugen87 + */ + +function EdgesGeometry( geometry, thresholdAngle ) { + + BufferGeometry.call( this ); + + this.type = 'EdgesGeometry'; + + this.parameters = { + thresholdAngle: thresholdAngle + }; + + thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; + + // buffer + + var vertices = []; + + // helper variables + + var thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle ); + var edge = [ 0, 0 ], edges = {}, edge1, edge2; + var key, keys = [ 'a', 'b', 'c' ]; + + // prepare source geometry + + var geometry2; + + if ( geometry.isBufferGeometry ) { + + geometry2 = new Geometry(); + geometry2.fromBufferGeometry( geometry ); + + } else { + + geometry2 = geometry.clone(); + + } + + geometry2.mergeVertices(); + geometry2.computeFaceNormals(); + + var sourceVertices = geometry2.vertices; + var faces = geometry2.faces; + + // now create a data structure where each entry represents an edge with its adjoining faces + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0; j < 3; j ++ ) { + + edge1 = face[ keys[ j ] ]; + edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; + edge[ 0 ] = Math.min( edge1, edge2 ); + edge[ 1 ] = Math.max( edge1, edge2 ); + + key = edge[ 0 ] + ',' + edge[ 1 ]; + + if ( edges[ key ] === undefined ) { + + edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined }; + + } else { + + edges[ key ].face2 = i; + + } + + } + + } + + // generate vertices + + for ( key in edges ) { + + var e = edges[ key ]; + + // an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree. + + if ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) { + + var vertex = sourceVertices[ e.index1 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + vertex = sourceVertices[ e.index2 ]; + vertices.push( vertex.x, vertex.y, vertex.z ); + + } + + } + + // build geometry + + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + +} + +EdgesGeometry.prototype = Object.create( BufferGeometry.prototype ); +EdgesGeometry.prototype.constructor = EdgesGeometry; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +// CylinderGeometry + +function CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'CylinderGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +CylinderGeometry.prototype = Object.create( Geometry.prototype ); +CylinderGeometry.prototype.constructor = CylinderGeometry; + +// CylinderBufferGeometry + +function CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'CylinderBufferGeometry'; + + this.parameters = { + radiusTop: radiusTop, + radiusBottom: radiusBottom, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + var scope = this; + + radiusTop = radiusTop !== undefined ? radiusTop : 20; + radiusBottom = radiusBottom !== undefined ? radiusBottom : 20; + height = height !== undefined ? height : 100; + + radialSegments = Math.floor( radialSegments ) || 8; + heightSegments = Math.floor( heightSegments ) || 1; + + openEnded = openEnded !== undefined ? openEnded : false; + thetaStart = thetaStart !== undefined ? thetaStart : 0.0; + thetaLength = thetaLength !== undefined ? thetaLength : 2.0 * Math.PI; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var index = 0; + var indexArray = []; + var halfHeight = height / 2; + var groupStart = 0; + + // generate geometry + + generateTorso(); + + if ( openEnded === false ) { + + if ( radiusTop > 0 ) generateCap( true ); + if ( radiusBottom > 0 ) generateCap( false ); + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + + function generateTorso() { + + var x, y; + var normal = new Vector3(); + var vertex = new Vector3(); + + var groupCount = 0; + + // this will be used to calculate the normal + var slope = ( radiusBottom - radiusTop ) / height; + + // generate vertices, normals and uvs + + for ( y = 0; y <= heightSegments; y ++ ) { + + var indexRow = []; + + var v = y / heightSegments; + + // calculate the radius of the current row + + var radius = v * ( radiusBottom - radiusTop ) + radiusTop; + + for ( x = 0; x <= radialSegments; x ++ ) { + + var u = x / radialSegments; + + var theta = u * thetaLength + thetaStart; + + var sinTheta = Math.sin( theta ); + var cosTheta = Math.cos( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = - v * height + halfHeight; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normal.set( sinTheta, slope, cosTheta ).normalize(); + normals.push( normal.x, normal.y, normal.z ); + + // uv + + uvs.push( u, 1 - v ); + + // save index of vertex in respective row + + indexRow.push( index ++ ); + + } + + // now save vertices of the row in our index array + + indexArray.push( indexRow ); + + } + + // generate indices + + for ( x = 0; x < radialSegments; x ++ ) { + + for ( y = 0; y < heightSegments; y ++ ) { + + // we use the index array to access the correct indices + + var a = indexArray[ y ][ x ]; + var b = indexArray[ y + 1 ][ x ]; + var c = indexArray[ y + 1 ][ x + 1 ]; + var d = indexArray[ y ][ x + 1 ]; + + // faces + + indices.push( a, b, d ); + indices.push( b, c, d ); + + // update group counter + + groupCount += 6; + + } + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, 0 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + + function generateCap( top ) { + + var x, centerIndexStart, centerIndexEnd; + + var uv = new Vector2(); + var vertex = new Vector3(); + + var groupCount = 0; + + var radius = ( top === true ) ? radiusTop : radiusBottom; + var sign = ( top === true ) ? 1 : - 1; + + // save the index of the first center vertex + centerIndexStart = index; + + // first we generate the center vertex data of the cap. + // because the geometry needs one set of uvs per face, + // we must generate a center vertex per face/segment + + for ( x = 1; x <= radialSegments; x ++ ) { + + // vertex + + vertices.push( 0, halfHeight * sign, 0 ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uvs.push( 0.5, 0.5 ); + + // increase index + + index ++; + + } + + // save the index of the last center vertex + + centerIndexEnd = index; + + // now we generate the surrounding vertices, normals and uvs + + for ( x = 0; x <= radialSegments; x ++ ) { + + var u = x / radialSegments; + var theta = u * thetaLength + thetaStart; + + var cosTheta = Math.cos( theta ); + var sinTheta = Math.sin( theta ); + + // vertex + + vertex.x = radius * sinTheta; + vertex.y = halfHeight * sign; + vertex.z = radius * cosTheta; + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, sign, 0 ); + + // uv + + uv.x = ( cosTheta * 0.5 ) + 0.5; + uv.y = ( sinTheta * 0.5 * sign ) + 0.5; + uvs.push( uv.x, uv.y ); + + // increase index + + index ++; + + } + + // generate indices + + for ( x = 0; x < radialSegments; x ++ ) { + + var c = centerIndexStart + x; + var i = centerIndexEnd + x; + + if ( top === true ) { + + // face top + + indices.push( i, i + 1, c ); + + } else { + + // face bottom + + indices.push( i + 1, i, c ); + + } + + groupCount += 3; + + } + + // add a group to the geometry. this will ensure multi material support + + scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); + + // calculate new start value for groups + + groupStart += groupCount; + + } + +} + +CylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +CylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry; + +/** + * @author abelnation / http://github.com/abelnation + */ + +// ConeGeometry + +function ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + +} + +ConeGeometry.prototype = Object.create( CylinderGeometry.prototype ); +ConeGeometry.prototype.constructor = ConeGeometry; + +// ConeBufferGeometry + +function ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { + + CylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); + + this.type = 'ConeBufferGeometry'; + + this.parameters = { + radius: radius, + height: height, + radialSegments: radialSegments, + heightSegments: heightSegments, + openEnded: openEnded, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + +} + +ConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype ); +ConeBufferGeometry.prototype.constructor = ConeBufferGeometry; + +/** + * @author benaadams / https://twitter.com/ben_a_adams + * @author Mugen87 / https://github.com/Mugen87 + * @author hughes + */ + +// CircleGeometry + +function CircleGeometry( radius, segments, thetaStart, thetaLength ) { + + Geometry.call( this ); + + this.type = 'CircleGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + this.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) ); + this.mergeVertices(); + +} + +CircleGeometry.prototype = Object.create( Geometry.prototype ); +CircleGeometry.prototype.constructor = CircleGeometry; + +// CircleBufferGeometry + +function CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) { + + BufferGeometry.call( this ); + + this.type = 'CircleBufferGeometry'; + + this.parameters = { + radius: radius, + segments: segments, + thetaStart: thetaStart, + thetaLength: thetaLength + }; + + radius = radius || 50; + segments = segments !== undefined ? Math.max( 3, segments ) : 8; + + thetaStart = thetaStart !== undefined ? thetaStart : 0; + thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; + + // buffers + + var indices = []; + var vertices = []; + var normals = []; + var uvs = []; + + // helper variables + + var i, s; + var vertex = new Vector3(); + var uv = new Vector2(); + + // center point + + vertices.push( 0, 0, 0 ); + normals.push( 0, 0, 1 ); + uvs.push( 0.5, 0.5 ); + + for ( s = 0, i = 3; s <= segments; s ++, i += 3 ) { + + var segment = thetaStart + s / segments * thetaLength; + + // vertex + + vertex.x = radius * Math.cos( segment ); + vertex.y = radius * Math.sin( segment ); + + vertices.push( vertex.x, vertex.y, vertex.z ); + + // normal + + normals.push( 0, 0, 1 ); + + // uvs + + uv.x = ( vertices[ i ] / radius + 1 ) / 2; + uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; + + uvs.push( uv.x, uv.y ); + + } + + // indices + + for ( i = 1; i <= segments; i ++ ) { + + indices.push( i, i + 1, 0 ); + + } + + // build geometry + + this.setIndex( indices ); + this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); + this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); + +} + +CircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); +CircleBufferGeometry.prototype.constructor = CircleBufferGeometry; + + + +var Geometries = Object.freeze({ + WireframeGeometry: WireframeGeometry, + ParametricGeometry: ParametricGeometry, + ParametricBufferGeometry: ParametricBufferGeometry, + TetrahedronGeometry: TetrahedronGeometry, + TetrahedronBufferGeometry: TetrahedronBufferGeometry, + OctahedronGeometry: OctahedronGeometry, + OctahedronBufferGeometry: OctahedronBufferGeometry, + IcosahedronGeometry: IcosahedronGeometry, + IcosahedronBufferGeometry: IcosahedronBufferGeometry, + DodecahedronGeometry: DodecahedronGeometry, + DodecahedronBufferGeometry: DodecahedronBufferGeometry, + PolyhedronGeometry: PolyhedronGeometry, + PolyhedronBufferGeometry: PolyhedronBufferGeometry, + TubeGeometry: TubeGeometry, + TubeBufferGeometry: TubeBufferGeometry, + TorusKnotGeometry: TorusKnotGeometry, + TorusKnotBufferGeometry: TorusKnotBufferGeometry, + TorusGeometry: TorusGeometry, + TorusBufferGeometry: TorusBufferGeometry, + TextGeometry: TextGeometry, + TextBufferGeometry: TextBufferGeometry, + SphereGeometry: SphereGeometry, + SphereBufferGeometry: SphereBufferGeometry, + RingGeometry: RingGeometry, + RingBufferGeometry: RingBufferGeometry, + PlaneGeometry: PlaneGeometry, + PlaneBufferGeometry: PlaneBufferGeometry, + LatheGeometry: LatheGeometry, + LatheBufferGeometry: LatheBufferGeometry, + ShapeGeometry: ShapeGeometry, + ShapeBufferGeometry: ShapeBufferGeometry, + ExtrudeGeometry: ExtrudeGeometry, + ExtrudeBufferGeometry: ExtrudeBufferGeometry, + EdgesGeometry: EdgesGeometry, + ConeGeometry: ConeGeometry, + ConeBufferGeometry: ConeBufferGeometry, + CylinderGeometry: CylinderGeometry, + CylinderBufferGeometry: CylinderBufferGeometry, + CircleGeometry: CircleGeometry, + CircleBufferGeometry: CircleBufferGeometry, + BoxGeometry: BoxGeometry, + BoxBufferGeometry: BoxBufferGeometry +}); + +/** + * @author mrdoob / http://mrdoob.com/ + * + * parameters = { + * color: , + * opacity: + * } + */ + +function ShadowMaterial( parameters ) { + + Material.call( this ); + + this.type = 'ShadowMaterial'; + + this.color = new Color( 0x000000 ); + this.opacity = 1.0; + + this.lights = true; + this.transparent = true; + + this.setValues( parameters ); + +} + +ShadowMaterial.prototype = Object.create( Material.prototype ); +ShadowMaterial.prototype.constructor = ShadowMaterial; + +ShadowMaterial.prototype.isShadowMaterial = true; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function RawShaderMaterial( parameters ) { + + ShaderMaterial.call( this, parameters ); + + this.type = 'RawShaderMaterial'; + +} + +RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); +RawShaderMaterial.prototype.constructor = RawShaderMaterial; + +RawShaderMaterial.prototype.isRawShaderMaterial = true; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * color: , + * roughness: , + * metalness: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * roughnessMap: new THREE.Texture( ), + * + * metalnessMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), + * envMapIntensity: + * + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshStandardMaterial( parameters ) { + + Material.call( this ); + + this.defines = { 'STANDARD': '' }; + + this.type = 'MeshStandardMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.roughness = 0.5; + this.metalness = 0.5; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.roughnessMap = null; + + this.metalnessMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.envMapIntensity = 1.0; + + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshStandardMaterial.prototype = Object.create( Material.prototype ); +MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; + +MeshStandardMaterial.prototype.isMeshStandardMaterial = true; + +MeshStandardMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.defines = { 'STANDARD': '' }; + + this.color.copy( source.color ); + this.roughness = source.roughness; + this.metalness = source.metalness; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.roughnessMap = source.roughnessMap; + + this.metalnessMap = source.metalnessMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.envMapIntensity = source.envMapIntensity; + + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * reflectivity: + * } + */ + +function MeshPhysicalMaterial( parameters ) { + + MeshStandardMaterial.call( this ); + + this.defines = { 'PHYSICAL': '' }; + + this.type = 'MeshPhysicalMaterial'; + + this.reflectivity = 0.5; // maps to F0 = 0.04 + + this.clearCoat = 0.0; + this.clearCoatRoughness = 0.0; + + this.setValues( parameters ); + +} + +MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); +MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; + +MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; + +MeshPhysicalMaterial.prototype.copy = function ( source ) { + + MeshStandardMaterial.prototype.copy.call( this, source ); + + this.defines = { 'PHYSICAL': '' }; + + this.reflectivity = source.reflectivity; + + this.clearCoat = source.clearCoat; + this.clearCoatRoughness = source.clearCoatRoughness; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * specular: , + * shininess: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshPhongMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshPhongMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + this.specular = new Color( 0x111111 ); + this.shininess = 30; + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshPhongMaterial.prototype = Object.create( Material.prototype ); +MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; + +MeshPhongMaterial.prototype.isMeshPhongMaterial = true; + +MeshPhongMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.specular.copy( source.specular ); + this.shininess = source.shininess; + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author takahirox / http://github.com/takahirox + * + * parameters = { + * gradientMap: new THREE.Texture( ) + * } + */ + +function MeshToonMaterial( parameters ) { + + MeshPhongMaterial.call( this ); + + this.defines = { 'TOON': '' }; + + this.type = 'MeshToonMaterial'; + + this.gradientMap = null; + + this.setValues( parameters ); + +} + +MeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype ); +MeshToonMaterial.prototype.constructor = MeshToonMaterial; + +MeshToonMaterial.prototype.isMeshToonMaterial = true; + +MeshToonMaterial.prototype.copy = function ( source ) { + + MeshPhongMaterial.prototype.copy.call( this, source ); + + this.gradientMap = source.gradientMap; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + * + * parameters = { + * opacity: , + * + * bumpMap: new THREE.Texture( ), + * bumpScale: , + * + * normalMap: new THREE.Texture( ), + * normalScale: , + * + * displacementMap: new THREE.Texture( ), + * displacementScale: , + * displacementBias: , + * + * wireframe: , + * wireframeLinewidth: + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshNormalMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshNormalMaterial'; + + this.bumpMap = null; + this.bumpScale = 1; + + this.normalMap = null; + this.normalScale = new Vector2( 1, 1 ); + + this.displacementMap = null; + this.displacementScale = 1; + this.displacementBias = 0; + + this.wireframe = false; + this.wireframeLinewidth = 1; + + this.fog = false; + this.lights = false; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshNormalMaterial.prototype = Object.create( Material.prototype ); +MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; + +MeshNormalMaterial.prototype.isMeshNormalMaterial = true; + +MeshNormalMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.bumpMap = source.bumpMap; + this.bumpScale = source.bumpScale; + + this.normalMap = source.normalMap; + this.normalScale.copy( source.normalScale ); + + this.displacementMap = source.displacementMap; + this.displacementScale = source.displacementScale; + this.displacementBias = source.displacementBias; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * map: new THREE.Texture( ), + * + * lightMap: new THREE.Texture( ), + * lightMapIntensity: + * + * aoMap: new THREE.Texture( ), + * aoMapIntensity: + * + * emissive: , + * emissiveIntensity: + * emissiveMap: new THREE.Texture( ), + * + * specularMap: new THREE.Texture( ), + * + * alphaMap: new THREE.Texture( ), + * + * envMap: new THREE.TextureCube( [posx, negx, posy, negy, posz, negz] ), + * combine: THREE.Multiply, + * reflectivity: , + * refractionRatio: , + * + * wireframe: , + * wireframeLinewidth: , + * + * skinning: , + * morphTargets: , + * morphNormals: + * } + */ + +function MeshLambertMaterial( parameters ) { + + Material.call( this ); + + this.type = 'MeshLambertMaterial'; + + this.color = new Color( 0xffffff ); // diffuse + + this.map = null; + + this.lightMap = null; + this.lightMapIntensity = 1.0; + + this.aoMap = null; + this.aoMapIntensity = 1.0; + + this.emissive = new Color( 0x000000 ); + this.emissiveIntensity = 1.0; + this.emissiveMap = null; + + this.specularMap = null; + + this.alphaMap = null; + + this.envMap = null; + this.combine = MultiplyOperation; + this.reflectivity = 1; + this.refractionRatio = 0.98; + + this.wireframe = false; + this.wireframeLinewidth = 1; + this.wireframeLinecap = 'round'; + this.wireframeLinejoin = 'round'; + + this.skinning = false; + this.morphTargets = false; + this.morphNormals = false; + + this.setValues( parameters ); + +} + +MeshLambertMaterial.prototype = Object.create( Material.prototype ); +MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; + +MeshLambertMaterial.prototype.isMeshLambertMaterial = true; + +MeshLambertMaterial.prototype.copy = function ( source ) { + + Material.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + + this.map = source.map; + + this.lightMap = source.lightMap; + this.lightMapIntensity = source.lightMapIntensity; + + this.aoMap = source.aoMap; + this.aoMapIntensity = source.aoMapIntensity; + + this.emissive.copy( source.emissive ); + this.emissiveMap = source.emissiveMap; + this.emissiveIntensity = source.emissiveIntensity; + + this.specularMap = source.specularMap; + + this.alphaMap = source.alphaMap; + + this.envMap = source.envMap; + this.combine = source.combine; + this.reflectivity = source.reflectivity; + this.refractionRatio = source.refractionRatio; + + this.wireframe = source.wireframe; + this.wireframeLinewidth = source.wireframeLinewidth; + this.wireframeLinecap = source.wireframeLinecap; + this.wireframeLinejoin = source.wireframeLinejoin; + + this.skinning = source.skinning; + this.morphTargets = source.morphTargets; + this.morphNormals = source.morphNormals; + + return this; + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * + * parameters = { + * color: , + * opacity: , + * + * linewidth: , + * + * scale: , + * dashSize: , + * gapSize: + * } + */ + +function LineDashedMaterial( parameters ) { + + LineBasicMaterial.call( this ); + + this.type = 'LineDashedMaterial'; + + this.scale = 1; + this.dashSize = 3; + this.gapSize = 1; + + this.setValues( parameters ); + +} + +LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); +LineDashedMaterial.prototype.constructor = LineDashedMaterial; + +LineDashedMaterial.prototype.isLineDashedMaterial = true; + +LineDashedMaterial.prototype.copy = function ( source ) { + + LineBasicMaterial.prototype.copy.call( this, source ); + + this.scale = source.scale; + this.dashSize = source.dashSize; + this.gapSize = source.gapSize; + + return this; + +}; + + + +var Materials = Object.freeze({ + ShadowMaterial: ShadowMaterial, + SpriteMaterial: SpriteMaterial, + RawShaderMaterial: RawShaderMaterial, + ShaderMaterial: ShaderMaterial, + PointsMaterial: PointsMaterial, + MeshPhysicalMaterial: MeshPhysicalMaterial, + MeshStandardMaterial: MeshStandardMaterial, + MeshPhongMaterial: MeshPhongMaterial, + MeshToonMaterial: MeshToonMaterial, + MeshNormalMaterial: MeshNormalMaterial, + MeshLambertMaterial: MeshLambertMaterial, + MeshDepthMaterial: MeshDepthMaterial, + MeshDistanceMaterial: MeshDistanceMaterial, + MeshBasicMaterial: MeshBasicMaterial, + LineDashedMaterial: LineDashedMaterial, + LineBasicMaterial: LineBasicMaterial, + Material: Material +}); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +var Cache = { + + enabled: false, + + files: {}, + + add: function ( key, file ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Adding key:', key ); + + this.files[ key ] = file; + + }, + + get: function ( key ) { + + if ( this.enabled === false ) return; + + // console.log( 'THREE.Cache', 'Checking key:', key ); + + return this.files[ key ]; + + }, + + remove: function ( key ) { + + delete this.files[ key ]; + + }, + + clear: function () { + + this.files = {}; + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LoadingManager( onLoad, onProgress, onError ) { + + var scope = this; + + var isLoading = false, itemsLoaded = 0, itemsTotal = 0; + + this.onStart = undefined; + this.onLoad = onLoad; + this.onProgress = onProgress; + this.onError = onError; + + this.itemStart = function ( url ) { + + itemsTotal ++; + + if ( isLoading === false ) { + + if ( scope.onStart !== undefined ) { + + scope.onStart( url, itemsLoaded, itemsTotal ); + + } + + } + + isLoading = true; + + }; + + this.itemEnd = function ( url ) { + + itemsLoaded ++; + + if ( scope.onProgress !== undefined ) { + + scope.onProgress( url, itemsLoaded, itemsTotal ); + + } + + if ( itemsLoaded === itemsTotal ) { + + isLoading = false; + + if ( scope.onLoad !== undefined ) { + + scope.onLoad(); + + } + + } + + }; + + this.itemError = function ( url ) { + + if ( scope.onError !== undefined ) { + + scope.onError( url ); + + } + + }; + +} + +var DefaultLoadingManager = new LoadingManager(); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function FileLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( FileLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + // Check for data: URI + var dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; + var dataUriRegexResult = url.match( dataUriRegex ); + + // Safari can not handle Data URIs through XMLHttpRequest so process manually + if ( dataUriRegexResult ) { + + var mimeType = dataUriRegexResult[ 1 ]; + var isBase64 = !! dataUriRegexResult[ 2 ]; + var data = dataUriRegexResult[ 3 ]; + + data = window.decodeURIComponent( data ); + + if ( isBase64 ) data = window.atob( data ); + + try { + + var response; + var responseType = ( this.responseType || '' ).toLowerCase(); + + switch ( responseType ) { + + case 'arraybuffer': + case 'blob': + + response = new ArrayBuffer( data.length ); + + var view = new Uint8Array( response ); + + for ( var i = 0; i < data.length; i ++ ) { + + view[ i ] = data.charCodeAt( i ); + + } + + if ( responseType === 'blob' ) { + + response = new Blob( [ response ], { type: mimeType } ); + + } + + break; + + case 'document': + + var parser = new DOMParser(); + response = parser.parseFromString( data, mimeType ); + + break; + + case 'json': + + response = JSON.parse( data ); + + break; + + default: // 'text' or other + + response = data; + + break; + + } + + // Wait for next browser tick + window.setTimeout( function () { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + } catch ( error ) { + + // Wait for next browser tick + window.setTimeout( function () { + + if ( onError ) onError( error ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, 0 ); + + } + + } else { + + var request = new XMLHttpRequest(); + request.open( 'GET', url, true ); + + request.addEventListener( 'load', function ( event ) { + + var response = event.target.response; + + Cache.add( url, response ); + + if ( this.status === 200 ) { + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + } else if ( this.status === 0 ) { + + // Some browsers return HTTP Status 0 when using non-http protocol + // e.g. 'file://' or 'data://'. Handle as success. + + console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); + + if ( onLoad ) onLoad( response ); + + scope.manager.itemEnd( url ); + + } else { + + if ( onError ) onError( event ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + } + + }, false ); + + if ( onProgress !== undefined ) { + + request.addEventListener( 'progress', function ( event ) { + + onProgress( event ); + + }, false ); + + } + + request.addEventListener( 'error', function ( event ) { + + if ( onError ) onError( event ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, false ); + + if ( this.responseType !== undefined ) request.responseType = this.responseType; + if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; + + if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); + + for ( var header in this.requestHeader ) { + + request.setRequestHeader( header, this.requestHeader[ header ] ); + + } + + request.send( null ); + + } + + scope.manager.itemStart( url ); + + return request; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + }, + + setResponseType: function ( value ) { + + this.responseType = value; + return this; + + }, + + setWithCredentials: function ( value ) { + + this.withCredentials = value; + return this; + + }, + + setMimeType: function ( value ) { + + this.mimeType = value; + return this; + + }, + + setRequestHeader: function ( value ) { + + this.requestHeader = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * + * Abstract Base class to block based textures loader (dds, pvr, ...) + */ + +function CompressedTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + // override in sub classes + this._parser = null; + +} + +Object.assign( CompressedTextureLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var images = []; + + var texture = new CompressedTexture(); + texture.image = images; + + var loader = new FileLoader( this.manager ); + loader.setPath( this.path ); + loader.setResponseType( 'arraybuffer' ); + + function loadTexture( i ) { + + loader.load( url[ i ], function ( buffer ) { + + var texDatas = scope._parser( buffer, true ); + + images[ i ] = { + width: texDatas.width, + height: texDatas.height, + format: texDatas.format, + mipmaps: texDatas.mipmaps + }; + + loaded += 1; + + if ( loaded === 6 ) { + + if ( texDatas.mipmapCount === 1 ) + texture.minFilter = LinearFilter; + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, onProgress, onError ); + + } + + if ( Array.isArray( url ) ) { + + var loaded = 0; + + for ( var i = 0, il = url.length; i < il; ++ i ) { + + loadTexture( i ); + + } + + } else { + + // compressed cubemap texture stored in a single DDS file + + loader.load( url, function ( buffer ) { + + var texDatas = scope._parser( buffer, true ); + + if ( texDatas.isCubemap ) { + + var faces = texDatas.mipmaps.length / texDatas.mipmapCount; + + for ( var f = 0; f < faces; f ++ ) { + + images[ f ] = { mipmaps : [] }; + + for ( var i = 0; i < texDatas.mipmapCount; i ++ ) { + + images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); + images[ f ].format = texDatas.format; + images[ f ].width = texDatas.width; + images[ f ].height = texDatas.height; + + } + + } + + } else { + + texture.image.width = texDatas.width; + texture.image.height = texDatas.height; + texture.mipmaps = texDatas.mipmaps; + + } + + if ( texDatas.mipmapCount === 1 ) { + + texture.minFilter = LinearFilter; + + } + + texture.format = texDatas.format; + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + }, onProgress, onError ); + + } + + return texture; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author Nikos M. / https://github.com/foo123/ + * + * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) + */ + +function DataTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + // override in sub classes + this._parser = null; + +} + +Object.assign( DataTextureLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var texture = new DataTexture(); + + var loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + + loader.load( url, function ( buffer ) { + + var texData = scope._parser( buffer ); + + if ( ! texData ) return; + + if ( undefined !== texData.image ) { + + texture.image = texData.image; + + } else if ( undefined !== texData.data ) { + + texture.image.width = texData.width; + texture.image.height = texData.height; + texture.image.data = texData.data; + + } + + texture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping; + texture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping; + + texture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter; + texture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter; + + texture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1; + + if ( undefined !== texData.format ) { + + texture.format = texData.format; + + } + if ( undefined !== texData.type ) { + + texture.type = texData.type; + + } + + if ( undefined !== texData.mipmaps ) { + + texture.mipmaps = texData.mipmaps; + + } + + if ( 1 === texData.mipmapCount ) { + + texture.minFilter = LinearFilter; + + } + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture, texData ); + + }, onProgress, onError ); + + + return texture; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ImageLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( ImageLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( url, onLoad, onProgress, onError ) { + + if ( url === undefined ) url = ''; + + if ( this.path !== undefined ) url = this.path + url; + + var scope = this; + + var cached = Cache.get( url ); + + if ( cached !== undefined ) { + + scope.manager.itemStart( url ); + + setTimeout( function () { + + if ( onLoad ) onLoad( cached ); + + scope.manager.itemEnd( url ); + + }, 0 ); + + return cached; + + } + + var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); + + image.addEventListener( 'load', function () { + + Cache.add( url, this ); + + if ( onLoad ) onLoad( this ); + + scope.manager.itemEnd( url ); + + }, false ); + + /* + image.addEventListener( 'progress', function ( event ) { + + if ( onProgress ) onProgress( event ); + + }, false ); + */ + + image.addEventListener( 'error', function ( event ) { + + if ( onError ) onError( event ); + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + }, false ); + + if ( url.substr( 0, 5 ) !== 'data:' ) { + + if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; + + } + + scope.manager.itemStart( url ); + + image.src = url; + + return image; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function CubeTextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( CubeTextureLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( urls, onLoad, onProgress, onError ) { + + var texture = new CubeTexture(); + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + var loaded = 0; + + function loadTexture( i ) { + + loader.load( urls[ i ], function ( image ) { + + texture.images[ i ] = image; + + loaded ++; + + if ( loaded === 6 ) { + + texture.needsUpdate = true; + + if ( onLoad ) onLoad( texture ); + + } + + }, undefined, onError ); + + } + + for ( var i = 0; i < urls.length; ++ i ) { + + loadTexture( i ); + + } + + return texture; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function TextureLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( TextureLoader.prototype, { + + crossOrigin: 'Anonymous', + + load: function ( url, onLoad, onProgress, onError ) { + + var loader = new ImageLoader( this.manager ); + loader.setCrossOrigin( this.crossOrigin ); + loader.setPath( this.path ); + + var texture = new Texture(); + texture.image = loader.load( url, function () { + + // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. + var isJPEG = url.search( /\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; + + texture.format = isJPEG ? RGBFormat : RGBAFormat; + texture.needsUpdate = true; + + if ( onLoad !== undefined ) { + + onLoad( texture ); + + } + + }, onProgress, onError ); + + return texture; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + return this; + + }, + + setPath: function ( value ) { + + this.path = value; + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function Light( color, intensity ) { + + Object3D.call( this ); + + this.type = 'Light'; + + this.color = new Color( color ); + this.intensity = intensity !== undefined ? intensity : 1; + + this.receiveShadow = undefined; + +} + +Light.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Light, + + isLight: true, + + copy: function ( source ) { + + Object3D.prototype.copy.call( this, source ); + + this.color.copy( source.color ); + this.intensity = source.intensity; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Object3D.prototype.toJSON.call( this, meta ); + + data.object.color = this.color.getHex(); + data.object.intensity = this.intensity; + + if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); + + if ( this.distance !== undefined ) data.object.distance = this.distance; + if ( this.angle !== undefined ) data.object.angle = this.angle; + if ( this.decay !== undefined ) data.object.decay = this.decay; + if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; + + if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); + + return data; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function HemisphereLight( skyColor, groundColor, intensity ) { + + Light.call( this, skyColor, intensity ); + + this.type = 'HemisphereLight'; + + this.castShadow = undefined; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.groundColor = new Color( groundColor ); + +} + +HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: HemisphereLight, + + isHemisphereLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.groundColor.copy( source.groundColor ); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function LightShadow( camera ) { + + this.camera = camera; + + this.bias = 0; + this.radius = 1; + + this.mapSize = new Vector2( 512, 512 ); + + this.map = null; + this.matrix = new Matrix4(); + +} + +Object.assign( LightShadow.prototype, { + + copy: function ( source ) { + + this.camera = source.camera.clone(); + + this.bias = source.bias; + this.radius = source.radius; + + this.mapSize.copy( source.mapSize ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + toJSON: function () { + + var object = {}; + + if ( this.bias !== 0 ) object.bias = this.bias; + if ( this.radius !== 1 ) object.radius = this.radius; + if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); + + object.camera = this.camera.toJSON( false ).object; + delete object.camera.matrix; + + return object; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function SpotLightShadow() { + + LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); + +} + +SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: SpotLightShadow, + + isSpotLightShadow: true, + + update: function ( light ) { + + var camera = this.camera; + + var fov = _Math.RAD2DEG * 2 * light.angle; + var aspect = this.mapSize.width / this.mapSize.height; + var far = light.distance || camera.far; + + if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { + + camera.fov = fov; + camera.aspect = aspect; + camera.far = far; + camera.updateProjectionMatrix(); + + } + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function SpotLight( color, intensity, distance, angle, penumbra, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'SpotLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + Object.defineProperty( this, 'power', { + get: function () { + // intensity = power per solid angle. + // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + return this.intensity * Math.PI; + }, + set: function ( power ) { + // intensity = power per solid angle. + // ref: equation (17) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + this.intensity = power / Math.PI; + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; + this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new SpotLightShadow(); + +} + +SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: SpotLight, + + isSpotLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.angle = source.angle; + this.penumbra = source.penumbra; + this.decay = source.decay; + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + + +function PointLight( color, intensity, distance, decay ) { + + Light.call( this, color, intensity ); + + this.type = 'PointLight'; + + Object.defineProperty( this, 'power', { + get: function () { + // intensity = power per solid angle. + // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + return this.intensity * 4 * Math.PI; + + }, + set: function ( power ) { + // intensity = power per solid angle. + // ref: equation (15) from http://www.frostbite.com/wp-content/uploads/2014/11/course_notes_moving_frostbite_to_pbr.pdf + this.intensity = power / ( 4 * Math.PI ); + } + } ); + + this.distance = ( distance !== undefined ) ? distance : 0; + this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. + + this.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) ); + +} + +PointLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: PointLight, + + isPointLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.distance = source.distance; + this.decay = source.decay; + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function DirectionalLightShadow( ) { + + LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); + +} + +DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { + + constructor: DirectionalLightShadow + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function DirectionalLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'DirectionalLight'; + + this.position.copy( Object3D.DefaultUp ); + this.updateMatrix(); + + this.target = new Object3D(); + + this.shadow = new DirectionalLightShadow(); + +} + +DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: DirectionalLight, + + isDirectionalLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.target = source.target.clone(); + + this.shadow = source.shadow.clone(); + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AmbientLight( color, intensity ) { + + Light.call( this, color, intensity ); + + this.type = 'AmbientLight'; + + this.castShadow = undefined; + +} + +AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: AmbientLight, + + isAmbientLight: true + +} ); + +/** + * @author abelnation / http://github.com/abelnation + */ + +function RectAreaLight( color, intensity, width, height ) { + + Light.call( this, color, intensity ); + + this.type = 'RectAreaLight'; + + this.position.set( 0, 1, 0 ); + this.updateMatrix(); + + this.width = ( width !== undefined ) ? width : 10; + this.height = ( height !== undefined ) ? height : 10; + + // TODO (abelnation): distance/decay + + // TODO (abelnation): update method for RectAreaLight to update transform to lookat target + + // TODO (abelnation): shadows + +} + +// TODO (abelnation): RectAreaLight update when light shape is changed +RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { + + constructor: RectAreaLight, + + isRectAreaLight: true, + + copy: function ( source ) { + + Light.prototype.copy.call( this, source ); + + this.width = source.width; + this.height = source.height; + + return this; + + }, + + toJSON: function ( meta ) { + + var data = Light.prototype.toJSON.call( this, meta ); + + data.object.width = this.width; + data.object.height = this.height; + + return data; + + } + +} ); + +/** + * @author tschw + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + */ + +var AnimationUtils = { + + // same as Array.prototype.slice, but also works on typed arrays + arraySlice: function ( array, from, to ) { + + if ( AnimationUtils.isTypedArray( array ) ) { + + // in ios9 array.subarray(from, undefined) will return empty array + // but array.subarray(from) or array.subarray(from, len) is correct + return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); + + } + + return array.slice( from, to ); + + }, + + // converts an array to a specific type + convertArray: function ( array, type, forceClone ) { + + if ( ! array || // let 'undefined' and 'null' pass + ! forceClone && array.constructor === type ) return array; + + if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { + + return new type( array ); // create typed array + + } + + return Array.prototype.slice.call( array ); // create Array + + }, + + isTypedArray: function ( object ) { + + return ArrayBuffer.isView( object ) && + ! ( object instanceof DataView ); + + }, + + // returns an array by which times and values can be sorted + getKeyframeOrder: function ( times ) { + + function compareTime( i, j ) { + + return times[ i ] - times[ j ]; + + } + + var n = times.length; + var result = new Array( n ); + for ( var i = 0; i !== n; ++ i ) result[ i ] = i; + + result.sort( compareTime ); + + return result; + + }, + + // uses the array previously returned by 'getKeyframeOrder' to sort data + sortedArray: function ( values, stride, order ) { + + var nValues = values.length; + var result = new values.constructor( nValues ); + + for ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { + + var srcOffset = order[ i ] * stride; + + for ( var j = 0; j !== stride; ++ j ) { + + result[ dstOffset ++ ] = values[ srcOffset + j ]; + + } + + } + + return result; + + }, + + // function for parsing AOS keyframe formats + flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { + + var i = 1, key = jsonKeys[ 0 ]; + + while ( key !== undefined && key[ valuePropertyName ] === undefined ) { + + key = jsonKeys[ i ++ ]; + + } + + if ( key === undefined ) return; // no data + + var value = key[ valuePropertyName ]; + if ( value === undefined ) return; // no data + + if ( Array.isArray( value ) ) { + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push.apply( values, value ); // push all elements + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else if ( value.toArray !== undefined ) { + + // ...assume THREE.Math-ish + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + value.toArray( values, values.length ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } else { + + // otherwise push as-is + + do { + + value = key[ valuePropertyName ]; + + if ( value !== undefined ) { + + times.push( key.time ); + values.push( value ); + + } + + key = jsonKeys[ i ++ ]; + + } while ( key !== undefined ); + + } + + } + +}; + +/** + * Abstract base class of interpolants over parametric samples. + * + * The parameter domain is one dimensional, typically the time or a path + * along a curve defined by the data. + * + * The sample values can have any dimensionality and derived classes may + * apply special interpretations to the data. + * + * This class provides the interval seek in a Template Method, deferring + * the actual interpolation to derived classes. + * + * Time complexity is O(1) for linear access crossing at most two points + * and O(log N) for random access, where N is the number of positions. + * + * References: + * + * http://www.oodesign.com/template-method-pattern.html + * + * @author tschw + */ + +function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + this.parameterPositions = parameterPositions; + this._cachedIndex = 0; + + this.resultBuffer = resultBuffer !== undefined ? + resultBuffer : new sampleValues.constructor( sampleSize ); + this.sampleValues = sampleValues; + this.valueSize = sampleSize; + +} + +Object.assign( Interpolant.prototype, { + + evaluate: function( t ) { + + var pp = this.parameterPositions, + i1 = this._cachedIndex, + + t1 = pp[ i1 ], + t0 = pp[ i1 - 1 ]; + + validate_interval: { + + seek: { + + var right; + + linear_scan: { + //- See http://jsperf.com/comparison-to-undefined/3 + //- slower code: + //- + //- if ( t >= t1 || t1 === undefined ) { + forward_scan: if ( ! ( t < t1 ) ) { + + for ( var giveUpAt = i1 + 2; ;) { + + if ( t1 === undefined ) { + + if ( t < t0 ) break forward_scan; + + // after end + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t, t0 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t0 = t1; + t1 = pp[ ++ i1 ]; + + if ( t < t1 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the right side of the index + right = pp.length; + break linear_scan; + + } + + //- slower code: + //- if ( t < t0 || t0 === undefined ) { + if ( ! ( t >= t0 ) ) { + + // looping? + + var t1global = pp[ 1 ]; + + if ( t < t1global ) { + + i1 = 2; // + 1, using the scan for the details + t0 = t1global; + + } + + // linear reverse scan + + for ( var giveUpAt = i1 - 2; ;) { + + if ( t0 === undefined ) { + + // before start + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( i1 === giveUpAt ) break; // this loop + + t1 = t0; + t0 = pp[ -- i1 - 1 ]; + + if ( t >= t0 ) { + + // we have arrived at the sought interval + break seek; + + } + + } + + // prepare binary search on the left side of the index + right = i1; + i1 = 0; + break linear_scan; + + } + + // the interval is valid + + break validate_interval; + + } // linear scan + + // binary search + + while ( i1 < right ) { + + var mid = ( i1 + right ) >>> 1; + + if ( t < pp[ mid ] ) { + + right = mid; + + } else { + + i1 = mid + 1; + + } + + } + + t1 = pp[ i1 ]; + t0 = pp[ i1 - 1 ]; + + // check boundary cases, again + + if ( t0 === undefined ) { + + this._cachedIndex = 0; + return this.beforeStart_( 0, t, t1 ); + + } + + if ( t1 === undefined ) { + + i1 = pp.length; + this._cachedIndex = i1; + return this.afterEnd_( i1 - 1, t0, t ); + + } + + } // seek + + this._cachedIndex = i1; + + this.intervalChanged_( i1, t0, t1 ); + + } // validate_interval + + return this.interpolate_( i1, t0, t, t1 ); + + }, + + settings: null, // optional, subclass-specific settings structure + // Note: The indirection allows central control of many interpolants. + + // --- Protected interface + + DefaultSettings_: {}, + + getSettings_: function() { + + return this.settings || this.DefaultSettings_; + + }, + + copySampleValue_: function( index ) { + + // copies a sample value to the result buffer + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + offset = index * stride; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = values[ offset + i ]; + + } + + return result; + + }, + + // Template methods for derived classes: + + interpolate_: function( i1, t0, t, t1 ) { + + throw new Error( "call to abstract method" ); + // implementations shall return this.resultBuffer + + }, + + intervalChanged_: function( i1, t0, t1 ) { + + // empty + + } + +} ); + +//!\ DECLARE ALIAS AFTER assign prototype ! +Object.assign( Interpolant.prototype, { + + //( 0, t, t0 ), returns this.resultBuffer + beforeStart_: Interpolant.prototype.copySampleValue_, + + //( N-1, tN-1, t ), returns this.resultBuffer + afterEnd_: Interpolant.prototype.copySampleValue_, + +} ); + +/** + * Fast and simple cubic spline interpolant. + * + * It was derived from a Hermitian construction setting the first derivative + * at each sample position to the linear slope between neighboring positions + * over their parameter interval. + * + * @author tschw + */ + +function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( + this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + + this._weightPrev = -0; + this._offsetPrev = -0; + this._weightNext = -0; + this._offsetNext = -0; + +} + +CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: CubicInterpolant, + + DefaultSettings_: { + + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + + }, + + intervalChanged_: function( i1, t0, t1 ) { + + var pp = this.parameterPositions, + iPrev = i1 - 2, + iNext = i1 + 1, + + tPrev = pp[ iPrev ], + tNext = pp[ iNext ]; + + if ( tPrev === undefined ) { + + switch ( this.getSettings_().endingStart ) { + + case ZeroSlopeEnding: + + // f'(t0) = 0 + iPrev = i1; + tPrev = 2 * t0 - t1; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iPrev = pp.length - 2; + tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(t0) = 0 a.k.a. Natural Spline + iPrev = i1; + tPrev = t1; + + } + + } + + if ( tNext === undefined ) { + + switch ( this.getSettings_().endingEnd ) { + + case ZeroSlopeEnding: + + // f'(tN) = 0 + iNext = i1; + tNext = 2 * t1 - t0; + + break; + + case WrapAroundEnding: + + // use the other end of the curve + iNext = 1; + tNext = t1 + pp[ 1 ] - pp[ 0 ]; + + break; + + default: // ZeroCurvatureEnding + + // f''(tN) = 0, a.k.a. Natural Spline + iNext = i1 - 1; + tNext = t0; + + } + + } + + var halfDt = ( t1 - t0 ) * 0.5, + stride = this.valueSize; + + this._weightPrev = halfDt / ( t0 - tPrev ); + this._weightNext = halfDt / ( tNext - t1 ); + this._offsetPrev = iPrev * stride; + this._offsetNext = iNext * stride; + + }, + + interpolate_: function( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + o1 = i1 * stride, o0 = o1 - stride, + oP = this._offsetPrev, oN = this._offsetNext, + wP = this._weightPrev, wN = this._weightNext, + + p = ( t - t0 ) / ( t1 - t0 ), + pp = p * p, + ppp = pp * p; + + // evaluate polynomials + + var sP = - wP * ppp + 2 * wP * pp - wP * p; + var s0 = ( 1 + wP ) * ppp + (-1.5 - 2 * wP ) * pp + ( -0.5 + wP ) * p + 1; + var s1 = (-1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; + var sN = wN * ppp - wN * pp; + + // combine data linearly + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + sP * values[ oP + i ] + + s0 * values[ o0 + i ] + + s1 * values[ o1 + i ] + + sN * values[ oN + i ]; + + } + + return result; + + } + +} ); + +/** + * @author tschw + */ + +function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: LinearInterpolant, + + interpolate_: function( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset1 = i1 * stride, + offset0 = offset1 - stride, + + weight1 = ( t - t0 ) / ( t1 - t0 ), + weight0 = 1 - weight1; + + for ( var i = 0; i !== stride; ++ i ) { + + result[ i ] = + values[ offset0 + i ] * weight0 + + values[ offset1 + i ] * weight1; + + } + + return result; + + } + +} ); + +/** + * + * Interpolant that evaluates to the sample value at the position preceeding + * the parameter. + * + * @author tschw + */ + +function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: DiscreteInterpolant, + + interpolate_: function( i1, t0, t, t1 ) { + + return this.copySampleValue_( i1 - 1 ); + + } + +} ); + +var KeyframeTrackPrototype; + +KeyframeTrackPrototype = { + + TimeBufferType: Float32Array, + ValueBufferType: Float32Array, + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodDiscrete: function ( result ) { + + return new DiscreteInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodLinear: function ( result ) { + + return new LinearInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: function ( result ) { + + return new CubicInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + setInterpolation: function ( interpolation ) { + + var factoryMethod; + + switch ( interpolation ) { + + case InterpolateDiscrete: + + factoryMethod = this.InterpolantFactoryMethodDiscrete; + + break; + + case InterpolateLinear: + + factoryMethod = this.InterpolantFactoryMethodLinear; + + break; + + case InterpolateSmooth: + + factoryMethod = this.InterpolantFactoryMethodSmooth; + + break; + + } + + if ( factoryMethod === undefined ) { + + var message = "unsupported interpolation for " + + this.ValueTypeName + " keyframe track named " + this.name; + + if ( this.createInterpolant === undefined ) { + + // fall back to default, unless the default itself is messed up + if ( interpolation !== this.DefaultInterpolation ) { + + this.setInterpolation( this.DefaultInterpolation ); + + } else { + + throw new Error( message ); // fatal, in this case + + } + + } + + console.warn( 'THREE.KeyframeTrackPrototype:', message ); + return; + + } + + this.createInterpolant = factoryMethod; + + }, + + getInterpolation: function () { + + switch ( this.createInterpolant ) { + + case this.InterpolantFactoryMethodDiscrete: + + return InterpolateDiscrete; + + case this.InterpolantFactoryMethodLinear: + + return InterpolateLinear; + + case this.InterpolantFactoryMethodSmooth: + + return InterpolateSmooth; + + } + + }, + + getValueSize: function () { + + return this.values.length / this.times.length; + + }, + + // move all keyframes either forwards or backwards in time + shift: function ( timeOffset ) { + + if ( timeOffset !== 0.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] += timeOffset; + + } + + } + + return this; + + }, + + // scale all keyframe times by a factor (useful for frame <-> seconds conversions) + scale: function ( timeScale ) { + + if ( timeScale !== 1.0 ) { + + var times = this.times; + + for ( var i = 0, n = times.length; i !== n; ++ i ) { + + times[ i ] *= timeScale; + + } + + } + + return this; + + }, + + // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. + // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values + trim: function ( startTime, endTime ) { + + var times = this.times, + nKeys = times.length, + from = 0, + to = nKeys - 1; + + while ( from !== nKeys && times[ from ] < startTime ) ++ from; + while ( to !== - 1 && times[ to ] > endTime ) -- to; + + ++ to; // inclusive -> exclusive bound + + if ( from !== 0 || to !== nKeys ) { + + // empty tracks are forbidden, so keep at least one keyframe + if ( from >= to ) to = Math.max( to, 1 ), from = to - 1; + + var stride = this.getValueSize(); + this.times = AnimationUtils.arraySlice( times, from, to ); + this.values = AnimationUtils. + arraySlice( this.values, from * stride, to * stride ); + + } + + return this; + + }, + + // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable + validate: function () { + + var valid = true; + + var valueSize = this.getValueSize(); + if ( valueSize - Math.floor( valueSize ) !== 0 ) { + + console.error( 'THREE.KeyframeTrackPrototype: Invalid value size in track.', this ); + valid = false; + + } + + var times = this.times, + values = this.values, + + nKeys = times.length; + + if ( nKeys === 0 ) { + + console.error( 'THREE.KeyframeTrackPrototype: Track is empty.', this ); + valid = false; + + } + + var prevTime = null; + + for ( var i = 0; i !== nKeys; i ++ ) { + + var currTime = times[ i ]; + + if ( typeof currTime === 'number' && isNaN( currTime ) ) { + + console.error( 'THREE.KeyframeTrackPrototype: Time is not a valid number.', this, i, currTime ); + valid = false; + break; + + } + + if ( prevTime !== null && prevTime > currTime ) { + + console.error( 'THREE.KeyframeTrackPrototype: Out of order keys.', this, i, currTime, prevTime ); + valid = false; + break; + + } + + prevTime = currTime; + + } + + if ( values !== undefined ) { + + if ( AnimationUtils.isTypedArray( values ) ) { + + for ( var i = 0, n = values.length; i !== n; ++ i ) { + + var value = values[ i ]; + + if ( isNaN( value ) ) { + + console.error( 'THREE.KeyframeTrackPrototype: Value is not a valid number.', this, i, value ); + valid = false; + break; + + } + + } + + } + + } + + return valid; + + }, + + // removes equivalent sequential keys as common in morph target sequences + // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) + optimize: function () { + + var times = this.times, + values = this.values, + stride = this.getValueSize(), + + smoothInterpolation = this.getInterpolation() === InterpolateSmooth, + + writeIndex = 1, + lastIndex = times.length - 1; + + for ( var i = 1; i < lastIndex; ++ i ) { + + var keep = false; + + var time = times[ i ]; + var timeNext = times[ i + 1 ]; + + // remove adjacent keyframes scheduled at the same time + + if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { + + if ( ! smoothInterpolation ) { + + // remove unnecessary keyframes same as their neighbors + + var offset = i * stride, + offsetP = offset - stride, + offsetN = offset + stride; + + for ( var j = 0; j !== stride; ++ j ) { + + var value = values[ offset + j ]; + + if ( value !== values[ offsetP + j ] || + value !== values[ offsetN + j ] ) { + + keep = true; + break; + + } + + } + + } else keep = true; + + } + + // in-place compaction + + if ( keep ) { + + if ( i !== writeIndex ) { + + times[ writeIndex ] = times[ i ]; + + var readOffset = i * stride, + writeOffset = writeIndex * stride; + + for ( var j = 0; j !== stride; ++ j ) + + values[ writeOffset + j ] = values[ readOffset + j ]; + + } + + ++ writeIndex; + + } + + } + + // flush last keyframe (compaction looks ahead) + + if ( lastIndex > 0 ) { + + times[ writeIndex ] = times[ lastIndex ]; + + for ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) + + values[ writeOffset + j ] = values[ readOffset + j ]; + + ++ writeIndex; + + } + + if ( writeIndex !== times.length ) { + + this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); + this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); + + } + + return this; + + } + +}; + +function KeyframeTrackConstructor( name, times, values, interpolation ) { + + if ( name === undefined ) throw new Error( "track name is undefined" ); + + if ( times === undefined || times.length === 0 ) { + + throw new Error( "no keyframes in track named " + name ); + + } + + this.name = name; + + this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); + this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); + + this.setInterpolation( interpolation || this.DefaultInterpolation ); + + this.validate(); + this.optimize(); + +} + +/** + * + * A Track of vectored keyframe values. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function VectorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +VectorKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: VectorKeyframeTrack, + + ValueTypeName: 'vector' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + +} ); + +/** + * Spherical linear unit quaternion interpolant. + * + * @author tschw + */ + +function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { + + Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); + +} + +QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { + + constructor: QuaternionLinearInterpolant, + + interpolate_: function( i1, t0, t, t1 ) { + + var result = this.resultBuffer, + values = this.sampleValues, + stride = this.valueSize, + + offset = i1 * stride, + + alpha = ( t - t0 ) / ( t1 - t0 ); + + for ( var end = offset + stride; offset !== end; offset += 4 ) { + + Quaternion.slerpFlat( result, 0, + values, offset - stride, values, offset, alpha ); + + } + + return result; + + } + +} ); + +/** + * + * A Track of quaternion keyframe values. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function QuaternionKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +QuaternionKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: QuaternionKeyframeTrack, + + ValueTypeName: 'quaternion', + + // ValueBufferType is inherited + + DefaultInterpolation: InterpolateLinear, + + InterpolantFactoryMethodLinear: function( result ) { + + return new QuaternionLinearInterpolant( + this.times, this.values, this.getValueSize(), result ); + + }, + + InterpolantFactoryMethodSmooth: undefined // not yet implemented + +} ); + +/** + * + * A Track of numeric keyframe values. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function NumberKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +NumberKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: NumberKeyframeTrack, + + ValueTypeName: 'number' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + +} ); + +/** + * + * A Track that interpolates Strings + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function StringKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +StringKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: StringKeyframeTrack, + + ValueTypeName: 'string', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + + InterpolantFactoryMethodSmooth: undefined + +} ); + +/** + * + * A Track of Boolean keyframe values. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function BooleanKeyframeTrack( name, times, values ) { + + KeyframeTrackConstructor.call( this, name, times, values ); + +} + +BooleanKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: BooleanKeyframeTrack, + + ValueTypeName: 'bool', + ValueBufferType: Array, + + DefaultInterpolation: InterpolateDiscrete, + + InterpolantFactoryMethodLinear: undefined, + InterpolantFactoryMethodSmooth: undefined + + // Note: Actually this track could have a optimized / compressed + // representation of a single value and a custom interpolant that + // computes "firstValue ^ isOdd( index )". + +} ); + +/** + * + * A Track of keyframe values that represent color. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function ColorKeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.call( this, name, times, values, interpolation ); + +} + +ColorKeyframeTrack.prototype = + Object.assign( Object.create( KeyframeTrackPrototype ), { + + constructor: ColorKeyframeTrack, + + ValueTypeName: 'color' + + // ValueBufferType is inherited + + // DefaultInterpolation is inherited + + + // Note: Very basic implementation and nothing special yet. + // However, this is the place for color space parameterization. + +} ); + +/** + * + * A timed sequence of keyframes for a specific property. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function KeyframeTrack( name, times, values, interpolation ) { + + KeyframeTrackConstructor.apply( this, arguments ); + +} + +KeyframeTrack.prototype = KeyframeTrackPrototype; +KeyframeTrackPrototype.constructor = KeyframeTrack; + +// Static methods: + +Object.assign( KeyframeTrack, { + + // Serialization (in static context, because of constructor invocation + // and automatic invocation of .toJSON): + + parse: function( json ) { + + if( json.type === undefined ) { + + throw new Error( "track type undefined, can not parse" ); + + } + + var trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type ); + + if ( json.times === undefined ) { + + var times = [], values = []; + + AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); + + json.times = times; + json.values = values; + + } + + // derived classes can define a static parse method + if ( trackType.parse !== undefined ) { + + return trackType.parse( json ); + + } else { + + // by default, we assume a constructor compatible with the base + return new trackType( + json.name, json.times, json.values, json.interpolation ); + + } + + }, + + toJSON: function( track ) { + + var trackType = track.constructor; + + var json; + + // derived classes can define a static toJSON method + if ( trackType.toJSON !== undefined ) { + + json = trackType.toJSON( track ); + + } else { + + // by default, we assume the data can be serialized as-is + json = { + + 'name': track.name, + 'times': AnimationUtils.convertArray( track.times, Array ), + 'values': AnimationUtils.convertArray( track.values, Array ) + + }; + + var interpolation = track.getInterpolation(); + + if ( interpolation !== track.DefaultInterpolation ) { + + json.interpolation = interpolation; + + } + + } + + json.type = track.ValueTypeName; // mandatory + + return json; + + }, + + _getTrackTypeForValueTypeName: function( typeName ) { + + switch( typeName.toLowerCase() ) { + + case "scalar": + case "double": + case "float": + case "number": + case "integer": + + return NumberKeyframeTrack; + + case "vector": + case "vector2": + case "vector3": + case "vector4": + + return VectorKeyframeTrack; + + case "color": + + return ColorKeyframeTrack; + + case "quaternion": + + return QuaternionKeyframeTrack; + + case "bool": + case "boolean": + + return BooleanKeyframeTrack; + + case "string": + + return StringKeyframeTrack; + + } + + throw new Error( "Unsupported typeName: " + typeName ); + + } + +} ); + +/** + * + * Reusable set of Tracks that represent an animation. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + */ + +function AnimationClip( name, duration, tracks ) { + + this.name = name; + this.tracks = tracks; + this.duration = ( duration !== undefined ) ? duration : - 1; + + this.uuid = _Math.generateUUID(); + + // this means it should figure out its duration by scanning the tracks + if ( this.duration < 0 ) { + + this.resetDuration(); + + } + + this.optimize(); + +} + +Object.assign( AnimationClip, { + + parse: function ( json ) { + + var tracks = [], + jsonTracks = json.tracks, + frameTime = 1.0 / ( json.fps || 1.0 ); + + for ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) ); + + } + + return new AnimationClip( json.name, json.duration, tracks ); + + }, + + toJSON: function ( clip ) { + + var tracks = [], + clipTracks = clip.tracks; + + var json = { + + 'name': clip.name, + 'duration': clip.duration, + 'tracks': tracks + + }; + + for ( var i = 0, n = clipTracks.length; i !== n; ++ i ) { + + tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); + + } + + return json; + + }, + + CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { + + var numMorphTargets = morphTargetSequence.length; + var tracks = []; + + for ( var i = 0; i < numMorphTargets; i ++ ) { + + var times = []; + var values = []; + + times.push( + ( i + numMorphTargets - 1 ) % numMorphTargets, + i, + ( i + 1 ) % numMorphTargets ); + + values.push( 0, 1, 0 ); + + var order = AnimationUtils.getKeyframeOrder( times ); + times = AnimationUtils.sortedArray( times, 1, order ); + values = AnimationUtils.sortedArray( values, 1, order ); + + // if there is a key at the first frame, duplicate it as the + // last frame as well for perfect loop. + if ( ! noLoop && times[ 0 ] === 0 ) { + + times.push( numMorphTargets ); + values.push( values[ 0 ] ); + + } + + tracks.push( + new NumberKeyframeTrack( + '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', + times, values + ).scale( 1.0 / fps ) ); + + } + + return new AnimationClip( name, - 1, tracks ); + + }, + + findByName: function ( objectOrClipArray, name ) { + + var clipArray = objectOrClipArray; + + if ( ! Array.isArray( objectOrClipArray ) ) { + + var o = objectOrClipArray; + clipArray = o.geometry && o.geometry.animations || o.animations; + + } + + for ( var i = 0; i < clipArray.length; i ++ ) { + + if ( clipArray[ i ].name === name ) { + + return clipArray[ i ]; + + } + + } + + return null; + + }, + + CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { + + var animationToMorphTargets = {}; + + // tested with https://regex101.com/ on trick sequences + // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 + var pattern = /^([\w-]*?)([\d]+)$/; + + // sort morph target names into animation groups based + // patterns like Walk_001, Walk_002, Run_001, Run_002 + for ( var i = 0, il = morphTargets.length; i < il; i ++ ) { + + var morphTarget = morphTargets[ i ]; + var parts = morphTarget.name.match( pattern ); + + if ( parts && parts.length > 1 ) { + + var name = parts[ 1 ]; + + var animationMorphTargets = animationToMorphTargets[ name ]; + if ( ! animationMorphTargets ) { + + animationToMorphTargets[ name ] = animationMorphTargets = []; + + } + + animationMorphTargets.push( morphTarget ); + + } + + } + + var clips = []; + + for ( var name in animationToMorphTargets ) { + + clips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); + + } + + return clips; + + }, + + // parse the animation.hierarchy format + parseAnimation: function ( animation, bones ) { + + if ( ! animation ) { + + console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); + return null; + + } + + var addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { + + // only return track if there are actually keys. + if ( animationKeys.length !== 0 ) { + + var times = []; + var values = []; + + AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); + + // empty keys are filtered out, so check again + if ( times.length !== 0 ) { + + destTracks.push( new trackType( trackName, times, values ) ); + + } + + } + + }; + + var tracks = []; + + var clipName = animation.name || 'default'; + // automatic length determination in AnimationClip. + var duration = animation.length || - 1; + var fps = animation.fps || 30; + + var hierarchyTracks = animation.hierarchy || []; + + for ( var h = 0; h < hierarchyTracks.length; h ++ ) { + + var animationKeys = hierarchyTracks[ h ].keys; + + // skip empty tracks + if ( ! animationKeys || animationKeys.length === 0 ) continue; + + // process morph targets + if ( animationKeys[ 0 ].morphTargets ) { + + // figure out all morph targets used in this track + var morphTargetNames = {}; + + for ( var k = 0; k < animationKeys.length; k ++ ) { + + if ( animationKeys[ k ].morphTargets ) { + + for ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { + + morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; + + } + + } + + } + + // create a track for each morph target with all zero + // morphTargetInfluences except for the keys in which + // the morphTarget is named. + for ( var morphTargetName in morphTargetNames ) { + + var times = []; + var values = []; + + for ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { + + var animationKey = animationKeys[ k ]; + + times.push( animationKey.time ); + values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); + + } + + tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); + + } + + duration = morphTargetNames.length * ( fps || 1.0 ); + + } else { + + // ...assume skeletal animation + + var boneName = '.bones[' + bones[ h ].name + ']'; + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.position', + animationKeys, 'pos', tracks ); + + addNonemptyTrack( + QuaternionKeyframeTrack, boneName + '.quaternion', + animationKeys, 'rot', tracks ); + + addNonemptyTrack( + VectorKeyframeTrack, boneName + '.scale', + animationKeys, 'scl', tracks ); + + } + + } + + if ( tracks.length === 0 ) { + + return null; + + } + + var clip = new AnimationClip( clipName, duration, tracks ); + + return clip; + + } + +} ); + +Object.assign( AnimationClip.prototype, { + + resetDuration: function () { + + var tracks = this.tracks, duration = 0; + + for ( var i = 0, n = tracks.length; i !== n; ++ i ) { + + var track = this.tracks[ i ]; + + duration = Math.max( duration, track.times[ track.times.length - 1 ] ); + + } + + this.duration = duration; + + }, + + trim: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].trim( 0, this.duration ); + + } + + return this; + + }, + + optimize: function () { + + for ( var i = 0; i < this.tracks.length; i ++ ) { + + this.tracks[ i ].optimize(); + + } + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function MaterialLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + this.textures = {}; + +} + +Object.assign( MaterialLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + }, onProgress, onError ); + + }, + + setTextures: function ( value ) { + + this.textures = value; + + }, + + parse: function ( json ) { + + var textures = this.textures; + + function getTexture( name ) { + + if ( textures[ name ] === undefined ) { + + console.warn( 'THREE.MaterialLoader: Undefined texture', name ); + + } + + return textures[ name ]; + + } + + var material = new Materials[ json.type ](); + + if ( json.uuid !== undefined ) material.uuid = json.uuid; + if ( json.name !== undefined ) material.name = json.name; + if ( json.color !== undefined ) material.color.setHex( json.color ); + if ( json.roughness !== undefined ) material.roughness = json.roughness; + if ( json.metalness !== undefined ) material.metalness = json.metalness; + if ( json.emissive !== undefined ) material.emissive.setHex( json.emissive ); + if ( json.specular !== undefined ) material.specular.setHex( json.specular ); + if ( json.shininess !== undefined ) material.shininess = json.shininess; + if ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat; + if ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness; + if ( json.uniforms !== undefined ) material.uniforms = json.uniforms; + if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; + if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; + if ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors; + if ( json.fog !== undefined ) material.fog = json.fog; + if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; + if ( json.blending !== undefined ) material.blending = json.blending; + if ( json.side !== undefined ) material.side = json.side; + if ( json.opacity !== undefined ) material.opacity = json.opacity; + if ( json.transparent !== undefined ) material.transparent = json.transparent; + if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; + if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; + if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; + if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; + if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; + if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; + if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; + if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; + + if ( json.skinning !== undefined ) material.skinning = json.skinning; + if ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets; + if ( json.dithering !== undefined ) material.dithering = json.dithering; + + if ( json.visible !== undefined ) material.visible = json.visible; + if ( json.userData !== undefined ) material.userData = json.userData; + + // Deprecated + + if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading + + // for PointsMaterial + + if ( json.size !== undefined ) material.size = json.size; + if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; + + // maps + + if ( json.map !== undefined ) material.map = getTexture( json.map ); + + if ( json.alphaMap !== undefined ) { + + material.alphaMap = getTexture( json.alphaMap ); + material.transparent = true; + + } + + if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); + if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; + + if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); + if ( json.normalScale !== undefined ) { + + var normalScale = json.normalScale; + + if ( Array.isArray( normalScale ) === false ) { + + // Blender exporter used to export a scalar. See #7459 + + normalScale = [ normalScale, normalScale ]; + + } + + material.normalScale = new Vector2().fromArray( normalScale ); + + } + + if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); + if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; + if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; + + if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); + if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); + + if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); + if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; + + if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); + + if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); + + if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; + + if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); + if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; + + if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); + if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; + + if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); + + return material; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function BufferGeometryLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( BufferGeometryLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + onLoad( scope.parse( JSON.parse( text ) ) ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + var geometry = new BufferGeometry(); + + var index = json.data.index; + + if ( index !== undefined ) { + + var typedArray = new TYPED_ARRAYS[ index.type ]( index.array ); + geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); + + } + + var attributes = json.data.attributes; + + for ( var key in attributes ) { + + var attribute = attributes[ key ]; + var typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array ); + + geometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) ); + + } + + var groups = json.data.groups || json.data.drawcalls || json.data.offsets; + + if ( groups !== undefined ) { + + for ( var i = 0, n = groups.length; i !== n; ++ i ) { + + var group = groups[ i ]; + + geometry.addGroup( group.start, group.count, group.materialIndex ); + + } + + } + + var boundingSphere = json.data.boundingSphere; + + if ( boundingSphere !== undefined ) { + + var center = new Vector3(); + + if ( boundingSphere.center !== undefined ) { + + center.fromArray( boundingSphere.center ); + + } + + geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); + + } + + return geometry; + + } + +} ); + +var TYPED_ARRAYS = { + Int8Array: Int8Array, + Uint8Array: Uint8Array, + // Workaround for IE11 pre KB2929437. See #11440 + Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, + Int16Array: Int16Array, + Uint16Array: Uint16Array, + Int32Array: Int32Array, + Uint32Array: Uint32Array, + Float32Array: Float32Array, + Float64Array: Float64Array +}; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Loader() { + + this.onLoadStart = function () {}; + this.onLoadProgress = function () {}; + this.onLoadComplete = function () {}; + +} + +Loader.Handlers = { + + handlers: [], + + add: function ( regex, loader ) { + + this.handlers.push( regex, loader ); + + }, + + get: function ( file ) { + + var handlers = this.handlers; + + for ( var i = 0, l = handlers.length; i < l; i += 2 ) { + + var regex = handlers[ i ]; + var loader = handlers[ i + 1 ]; + + if ( regex.test( file ) ) { + + return loader; + + } + + } + + return null; + + } + +}; + +Object.assign( Loader.prototype, { + + crossOrigin: undefined, + + extractUrlBase: function ( url ) { + + var parts = url.split( '/' ); + + if ( parts.length === 1 ) return './'; + + parts.pop(); + + return parts.join( '/' ) + '/'; + + }, + + initMaterials: function ( materials, texturePath, crossOrigin ) { + + var array = []; + + for ( var i = 0; i < materials.length; ++ i ) { + + array[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin ); + + } + + return array; + + }, + + createMaterial: ( function () { + + var BlendingMode = { + NoBlending: NoBlending, + NormalBlending: NormalBlending, + AdditiveBlending: AdditiveBlending, + SubtractiveBlending: SubtractiveBlending, + MultiplyBlending: MultiplyBlending, + CustomBlending: CustomBlending + }; + + var color = new Color(); + var textureLoader = new TextureLoader(); + var materialLoader = new MaterialLoader(); + + return function createMaterial( m, texturePath, crossOrigin ) { + + // convert from old material format + + var textures = {}; + + function loadTexture( path, repeat, offset, wrap, anisotropy ) { + + var fullPath = texturePath + path; + var loader = Loader.Handlers.get( fullPath ); + + var texture; + + if ( loader !== null ) { + + texture = loader.load( fullPath ); + + } else { + + textureLoader.setCrossOrigin( crossOrigin ); + texture = textureLoader.load( fullPath ); + + } + + if ( repeat !== undefined ) { + + texture.repeat.fromArray( repeat ); + + if ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping; + if ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping; + + } + + if ( offset !== undefined ) { + + texture.offset.fromArray( offset ); + + } + + if ( wrap !== undefined ) { + + if ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping; + if ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping; + + if ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping; + if ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping; + + } + + if ( anisotropy !== undefined ) { + + texture.anisotropy = anisotropy; + + } + + var uuid = _Math.generateUUID(); + + textures[ uuid ] = texture; + + return uuid; + + } + + // + + var json = { + uuid: _Math.generateUUID(), + type: 'MeshLambertMaterial' + }; + + for ( var name in m ) { + + var value = m[ name ]; + + switch ( name ) { + + case 'DbgColor': + case 'DbgIndex': + case 'opticalDensity': + case 'illumination': + break; + case 'DbgName': + json.name = value; + break; + case 'blending': + json.blending = BlendingMode[ value ]; + break; + case 'colorAmbient': + case 'mapAmbient': + console.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' ); + break; + case 'colorDiffuse': + json.color = color.fromArray( value ).getHex(); + break; + case 'colorSpecular': + json.specular = color.fromArray( value ).getHex(); + break; + case 'colorEmissive': + json.emissive = color.fromArray( value ).getHex(); + break; + case 'specularCoef': + json.shininess = value; + break; + case 'shading': + if ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial'; + if ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial'; + if ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial'; + break; + case 'mapDiffuse': + json.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy ); + break; + case 'mapDiffuseRepeat': + case 'mapDiffuseOffset': + case 'mapDiffuseWrap': + case 'mapDiffuseAnisotropy': + break; + case 'mapEmissive': + json.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy ); + break; + case 'mapEmissiveRepeat': + case 'mapEmissiveOffset': + case 'mapEmissiveWrap': + case 'mapEmissiveAnisotropy': + break; + case 'mapLight': + json.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy ); + break; + case 'mapLightRepeat': + case 'mapLightOffset': + case 'mapLightWrap': + case 'mapLightAnisotropy': + break; + case 'mapAO': + json.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy ); + break; + case 'mapAORepeat': + case 'mapAOOffset': + case 'mapAOWrap': + case 'mapAOAnisotropy': + break; + case 'mapBump': + json.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy ); + break; + case 'mapBumpScale': + json.bumpScale = value; + break; + case 'mapBumpRepeat': + case 'mapBumpOffset': + case 'mapBumpWrap': + case 'mapBumpAnisotropy': + break; + case 'mapNormal': + json.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy ); + break; + case 'mapNormalFactor': + json.normalScale = [ value, value ]; + break; + case 'mapNormalRepeat': + case 'mapNormalOffset': + case 'mapNormalWrap': + case 'mapNormalAnisotropy': + break; + case 'mapSpecular': + json.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy ); + break; + case 'mapSpecularRepeat': + case 'mapSpecularOffset': + case 'mapSpecularWrap': + case 'mapSpecularAnisotropy': + break; + case 'mapMetalness': + json.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy ); + break; + case 'mapMetalnessRepeat': + case 'mapMetalnessOffset': + case 'mapMetalnessWrap': + case 'mapMetalnessAnisotropy': + break; + case 'mapRoughness': + json.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy ); + break; + case 'mapRoughnessRepeat': + case 'mapRoughnessOffset': + case 'mapRoughnessWrap': + case 'mapRoughnessAnisotropy': + break; + case 'mapAlpha': + json.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy ); + break; + case 'mapAlphaRepeat': + case 'mapAlphaOffset': + case 'mapAlphaWrap': + case 'mapAlphaAnisotropy': + break; + case 'flipSided': + json.side = BackSide; + break; + case 'doubleSided': + json.side = DoubleSide; + break; + case 'transparency': + console.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' ); + json.opacity = value; + break; + case 'depthTest': + case 'depthWrite': + case 'colorWrite': + case 'opacity': + case 'reflectivity': + case 'transparent': + case 'visible': + case 'wireframe': + json[ name ] = value; + break; + case 'vertexColors': + if ( value === true ) json.vertexColors = VertexColors; + if ( value === 'face' ) json.vertexColors = FaceColors; + break; + default: + console.error( 'THREE.Loader.createMaterial: Unsupported', name, value ); + break; + + } + + } + + if ( json.type === 'MeshBasicMaterial' ) delete json.emissive; + if ( json.type !== 'MeshPhongMaterial' ) delete json.specular; + + if ( json.opacity < 1 ) json.transparent = true; + + materialLoader.setTextures( textures ); + + return materialLoader.parse( json ); + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author alteredq / http://alteredqualia.com/ + */ + +function JSONLoader( manager ) { + + if ( typeof manager === 'boolean' ) { + + console.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' ); + manager = undefined; + + } + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + + this.withCredentials = false; + +} + +Object.assign( JSONLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var texturePath = this.texturePath && ( typeof this.texturePath === "string" ) ? this.texturePath : Loader.prototype.extractUrlBase( url ); + + var loader = new FileLoader( this.manager ); + loader.setWithCredentials( this.withCredentials ); + loader.load( url, function ( text ) { + + var json = JSON.parse( text ); + var metadata = json.metadata; + + if ( metadata !== undefined ) { + + var type = metadata.type; + + if ( type !== undefined ) { + + if ( type.toLowerCase() === 'object' ) { + + console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' ); + return; + + } + + if ( type.toLowerCase() === 'scene' ) { + + console.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.SceneLoader instead.' ); + return; + + } + + } + + } + + var object = scope.parse( json, texturePath ); + onLoad( object.geometry, object.materials ); + + }, onProgress, onError ); + + }, + + setTexturePath: function ( value ) { + + this.texturePath = value; + + }, + + parse: ( function () { + + function parseModel( json, geometry ) { + + function isBitSet( value, position ) { + + return value & ( 1 << position ); + + } + + var i, j, fi, + + offset, zLength, + + colorIndex, normalIndex, uvIndex, materialIndex, + + type, + isQuad, + hasMaterial, + hasFaceVertexUv, + hasFaceNormal, hasFaceVertexNormal, + hasFaceColor, hasFaceVertexColor, + + vertex, face, faceA, faceB, hex, normal, + + uvLayer, uv, u, v, + + faces = json.faces, + vertices = json.vertices, + normals = json.normals, + colors = json.colors, + + scale = json.scale, + + nUvLayers = 0; + + + if ( json.uvs !== undefined ) { + + // disregard empty arrays + + for ( i = 0; i < json.uvs.length; i ++ ) { + + if ( json.uvs[ i ].length ) nUvLayers ++; + + } + + for ( i = 0; i < nUvLayers; i ++ ) { + + geometry.faceVertexUvs[ i ] = []; + + } + + } + + offset = 0; + zLength = vertices.length; + + while ( offset < zLength ) { + + vertex = new Vector3(); + + vertex.x = vertices[ offset ++ ] * scale; + vertex.y = vertices[ offset ++ ] * scale; + vertex.z = vertices[ offset ++ ] * scale; + + geometry.vertices.push( vertex ); + + } + + offset = 0; + zLength = faces.length; + + while ( offset < zLength ) { + + type = faces[ offset ++ ]; + + isQuad = isBitSet( type, 0 ); + hasMaterial = isBitSet( type, 1 ); + hasFaceVertexUv = isBitSet( type, 3 ); + hasFaceNormal = isBitSet( type, 4 ); + hasFaceVertexNormal = isBitSet( type, 5 ); + hasFaceColor = isBitSet( type, 6 ); + hasFaceVertexColor = isBitSet( type, 7 ); + + // console.log("type", type, "bits", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor); + + if ( isQuad ) { + + faceA = new Face3(); + faceA.a = faces[ offset ]; + faceA.b = faces[ offset + 1 ]; + faceA.c = faces[ offset + 3 ]; + + faceB = new Face3(); + faceB.a = faces[ offset + 1 ]; + faceB.b = faces[ offset + 2 ]; + faceB.c = faces[ offset + 3 ]; + + offset += 4; + + if ( hasMaterial ) { + + materialIndex = faces[ offset ++ ]; + faceA.materialIndex = materialIndex; + faceB.materialIndex = materialIndex; + + } + + // to get face <=> uv index correspondence + + fi = geometry.faces.length; + + if ( hasFaceVertexUv ) { + + for ( i = 0; i < nUvLayers; i ++ ) { + + uvLayer = json.uvs[ i ]; + + geometry.faceVertexUvs[ i ][ fi ] = []; + geometry.faceVertexUvs[ i ][ fi + 1 ] = []; + + for ( j = 0; j < 4; j ++ ) { + + uvIndex = faces[ offset ++ ]; + + u = uvLayer[ uvIndex * 2 ]; + v = uvLayer[ uvIndex * 2 + 1 ]; + + uv = new Vector2( u, v ); + + if ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv ); + if ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv ); + + } + + } + + } + + if ( hasFaceNormal ) { + + normalIndex = faces[ offset ++ ] * 3; + + faceA.normal.set( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + faceB.normal.copy( faceA.normal ); + + } + + if ( hasFaceVertexNormal ) { + + for ( i = 0; i < 4; i ++ ) { + + normalIndex = faces[ offset ++ ] * 3; + + normal = new Vector3( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + + if ( i !== 2 ) faceA.vertexNormals.push( normal ); + if ( i !== 0 ) faceB.vertexNormals.push( normal ); + + } + + } + + + if ( hasFaceColor ) { + + colorIndex = faces[ offset ++ ]; + hex = colors[ colorIndex ]; + + faceA.color.setHex( hex ); + faceB.color.setHex( hex ); + + } + + + if ( hasFaceVertexColor ) { + + for ( i = 0; i < 4; i ++ ) { + + colorIndex = faces[ offset ++ ]; + hex = colors[ colorIndex ]; + + if ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) ); + if ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) ); + + } + + } + + geometry.faces.push( faceA ); + geometry.faces.push( faceB ); + + } else { + + face = new Face3(); + face.a = faces[ offset ++ ]; + face.b = faces[ offset ++ ]; + face.c = faces[ offset ++ ]; + + if ( hasMaterial ) { + + materialIndex = faces[ offset ++ ]; + face.materialIndex = materialIndex; + + } + + // to get face <=> uv index correspondence + + fi = geometry.faces.length; + + if ( hasFaceVertexUv ) { + + for ( i = 0; i < nUvLayers; i ++ ) { + + uvLayer = json.uvs[ i ]; + + geometry.faceVertexUvs[ i ][ fi ] = []; + + for ( j = 0; j < 3; j ++ ) { + + uvIndex = faces[ offset ++ ]; + + u = uvLayer[ uvIndex * 2 ]; + v = uvLayer[ uvIndex * 2 + 1 ]; + + uv = new Vector2( u, v ); + + geometry.faceVertexUvs[ i ][ fi ].push( uv ); + + } + + } + + } + + if ( hasFaceNormal ) { + + normalIndex = faces[ offset ++ ] * 3; + + face.normal.set( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + } + + if ( hasFaceVertexNormal ) { + + for ( i = 0; i < 3; i ++ ) { + + normalIndex = faces[ offset ++ ] * 3; + + normal = new Vector3( + normals[ normalIndex ++ ], + normals[ normalIndex ++ ], + normals[ normalIndex ] + ); + + face.vertexNormals.push( normal ); + + } + + } + + + if ( hasFaceColor ) { + + colorIndex = faces[ offset ++ ]; + face.color.setHex( colors[ colorIndex ] ); + + } + + + if ( hasFaceVertexColor ) { + + for ( i = 0; i < 3; i ++ ) { + + colorIndex = faces[ offset ++ ]; + face.vertexColors.push( new Color( colors[ colorIndex ] ) ); + + } + + } + + geometry.faces.push( face ); + + } + + } + + } + + function parseSkin( json, geometry ) { + + var influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2; + + if ( json.skinWeights ) { + + for ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) { + + var x = json.skinWeights[ i ]; + var y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0; + var z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0; + var w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0; + + geometry.skinWeights.push( new Vector4( x, y, z, w ) ); + + } + + } + + if ( json.skinIndices ) { + + for ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) { + + var a = json.skinIndices[ i ]; + var b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0; + var c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0; + var d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0; + + geometry.skinIndices.push( new Vector4( a, b, c, d ) ); + + } + + } + + geometry.bones = json.bones; + + if ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) { + + console.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' + + geometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' ); + + } + + } + + function parseMorphing( json, geometry ) { + + var scale = json.scale; + + if ( json.morphTargets !== undefined ) { + + for ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) { + + geometry.morphTargets[ i ] = {}; + geometry.morphTargets[ i ].name = json.morphTargets[ i ].name; + geometry.morphTargets[ i ].vertices = []; + + var dstVertices = geometry.morphTargets[ i ].vertices; + var srcVertices = json.morphTargets[ i ].vertices; + + for ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) { + + var vertex = new Vector3(); + vertex.x = srcVertices[ v ] * scale; + vertex.y = srcVertices[ v + 1 ] * scale; + vertex.z = srcVertices[ v + 2 ] * scale; + + dstVertices.push( vertex ); + + } + + } + + } + + if ( json.morphColors !== undefined && json.morphColors.length > 0 ) { + + console.warn( 'THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.' ); + + var faces = geometry.faces; + var morphColors = json.morphColors[ 0 ].colors; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + faces[ i ].color.fromArray( morphColors, i * 3 ); + + } + + } + + } + + function parseAnimations( json, geometry ) { + + var outputAnimations = []; + + // parse old style Bone/Hierarchy animations + var animations = []; + + if ( json.animation !== undefined ) { + + animations.push( json.animation ); + + } + + if ( json.animations !== undefined ) { + + if ( json.animations.length ) { + + animations = animations.concat( json.animations ); + + } else { + + animations.push( json.animations ); + + } + + } + + for ( var i = 0; i < animations.length; i ++ ) { + + var clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones ); + if ( clip ) outputAnimations.push( clip ); + + } + + // parse implicit morph animations + if ( geometry.morphTargets ) { + + // TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary. + var morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 ); + outputAnimations = outputAnimations.concat( morphAnimationClips ); + + } + + if ( outputAnimations.length > 0 ) geometry.animations = outputAnimations; + + } + + return function ( json, texturePath ) { + + if ( json.data !== undefined ) { + + // Geometry 4.0 spec + json = json.data; + + } + + if ( json.scale !== undefined ) { + + json.scale = 1.0 / json.scale; + + } else { + + json.scale = 1.0; + + } + + var geometry = new Geometry(); + + parseModel( json, geometry ); + parseSkin( json, geometry ); + parseMorphing( json, geometry ); + parseAnimations( json, geometry ); + + geometry.computeFaceNormals(); + geometry.computeBoundingSphere(); + + if ( json.materials === undefined || json.materials.length === 0 ) { + + return { geometry: geometry }; + + } else { + + var materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin ); + + return { geometry: geometry, materials: materials }; + + } + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function ObjectLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + this.texturePath = ''; + +} + +Object.assign( ObjectLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + if ( this.texturePath === '' ) { + + this.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 ); + + } + + var scope = this; + + var loader = new FileLoader( scope.manager ); + loader.load( url, function ( text ) { + + var json = null; + + try { + + json = JSON.parse( text ); + + } catch ( error ) { + + if ( onError !== undefined ) onError( error ); + + console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); + + return; + + } + + var metadata = json.metadata; + + if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { + + console.error( 'THREE.ObjectLoader: Can\'t load ' + url + '. Use THREE.JSONLoader instead.' ); + return; + + } + + scope.parse( json, onLoad ); + + }, onProgress, onError ); + + }, + + setTexturePath: function ( value ) { + + this.texturePath = value; + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + + }, + + parse: function ( json, onLoad ) { + + var geometries = this.parseGeometries( json.geometries ); + + var images = this.parseImages( json.images, function () { + + if ( onLoad !== undefined ) onLoad( object ); + + } ); + + var textures = this.parseTextures( json.textures, images ); + var materials = this.parseMaterials( json.materials, textures ); + + var object = this.parseObject( json.object, geometries, materials ); + + if ( json.animations ) { + + object.animations = this.parseAnimations( json.animations ); + + } + + if ( json.images === undefined || json.images.length === 0 ) { + + if ( onLoad !== undefined ) onLoad( object ); + + } + + return object; + + }, + + parseGeometries: function ( json ) { + + var geometries = {}; + + if ( json !== undefined ) { + + var geometryLoader = new JSONLoader(); + var bufferGeometryLoader = new BufferGeometryLoader(); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var geometry; + var data = json[ i ]; + + switch ( data.type ) { + + case 'PlaneGeometry': + case 'PlaneBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.widthSegments, + data.heightSegments + ); + + break; + + case 'BoxGeometry': + case 'BoxBufferGeometry': + case 'CubeGeometry': // backwards compatible + + geometry = new Geometries[ data.type ]( + data.width, + data.height, + data.depth, + data.widthSegments, + data.heightSegments, + data.depthSegments + ); + + break; + + case 'CircleGeometry': + case 'CircleBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.segments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'CylinderGeometry': + case 'CylinderBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radiusTop, + data.radiusBottom, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'ConeGeometry': + case 'ConeBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.height, + data.radialSegments, + data.heightSegments, + data.openEnded, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'SphereGeometry': + case 'SphereBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.widthSegments, + data.heightSegments, + data.phiStart, + data.phiLength, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'DodecahedronGeometry': + case 'IcosahedronGeometry': + case 'OctahedronGeometry': + case 'TetrahedronGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.detail + ); + + break; + + case 'RingGeometry': + case 'RingBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.innerRadius, + data.outerRadius, + data.thetaSegments, + data.phiSegments, + data.thetaStart, + data.thetaLength + ); + + break; + + case 'TorusGeometry': + case 'TorusBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.radialSegments, + data.tubularSegments, + data.arc + ); + + break; + + case 'TorusKnotGeometry': + case 'TorusKnotBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.radius, + data.tube, + data.tubularSegments, + data.radialSegments, + data.p, + data.q + ); + + break; + + case 'LatheGeometry': + case 'LatheBufferGeometry': + + geometry = new Geometries[ data.type ]( + data.points, + data.segments, + data.phiStart, + data.phiLength + ); + + break; + + case 'BufferGeometry': + + geometry = bufferGeometryLoader.parse( data ); + + break; + + case 'Geometry': + + geometry = geometryLoader.parse( data, this.texturePath ).geometry; + + break; + + default: + + console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); + + continue; + + } + + geometry.uuid = data.uuid; + + if ( data.name !== undefined ) geometry.name = data.name; + + geometries[ data.uuid ] = geometry; + + } + + } + + return geometries; + + }, + + parseMaterials: function ( json, textures ) { + + var materials = {}; + + if ( json !== undefined ) { + + var loader = new MaterialLoader(); + loader.setTextures( textures ); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.type === 'MultiMaterial' ) { + + // Deprecated + + var array = []; + + for ( var j = 0; j < data.materials.length; j ++ ) { + + array.push( loader.parse( data.materials[ j ] ) ); + + } + + materials[ data.uuid ] = array; + + } else { + + materials[ data.uuid ] = loader.parse( data ); + + } + + } + + } + + return materials; + + }, + + parseAnimations: function ( json ) { + + var animations = []; + + for ( var i = 0; i < json.length; i ++ ) { + + var clip = AnimationClip.parse( json[ i ] ); + + animations.push( clip ); + + } + + return animations; + + }, + + parseImages: function ( json, onLoad ) { + + var scope = this; + var images = {}; + + function loadImage( url ) { + + scope.manager.itemStart( url ); + + return loader.load( url, function () { + + scope.manager.itemEnd( url ); + + }, undefined, function () { + + scope.manager.itemEnd( url ); + scope.manager.itemError( url ); + + } ); + + } + + if ( json !== undefined && json.length > 0 ) { + + var manager = new LoadingManager( onLoad ); + + var loader = new ImageLoader( manager ); + loader.setCrossOrigin( this.crossOrigin ); + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var image = json[ i ]; + var path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url; + + images[ image.uuid ] = loadImage( path ); + + } + + } + + return images; + + }, + + parseTextures: function ( json, images ) { + + function parseConstant( value, type ) { + + if ( typeof( value ) === 'number' ) return value; + + console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); + + return type[ value ]; + + } + + var textures = {}; + + if ( json !== undefined ) { + + for ( var i = 0, l = json.length; i < l; i ++ ) { + + var data = json[ i ]; + + if ( data.image === undefined ) { + + console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); + + } + + if ( images[ data.image ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); + + } + + var texture = new Texture( images[ data.image ] ); + texture.needsUpdate = true; + + texture.uuid = data.uuid; + + if ( data.name !== undefined ) texture.name = data.name; + + if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); + + if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); + if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); + if ( data.wrap !== undefined ) { + + texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); + texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); + + } + + if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); + if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); + if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; + + if ( data.flipY !== undefined ) texture.flipY = data.flipY; + + textures[ data.uuid ] = texture; + + } + + } + + return textures; + + }, + + parseObject: function () { + + var matrix = new Matrix4(); + + return function parseObject( data, geometries, materials ) { + + var object; + + function getGeometry( name ) { + + if ( geometries[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); + + } + + return geometries[ name ]; + + } + + function getMaterial( name ) { + + if ( name === undefined ) return undefined; + + if ( Array.isArray( name ) ) { + + var array = []; + + for ( var i = 0, l = name.length; i < l; i ++ ) { + + var uuid = name[ i ]; + + if ( materials[ uuid ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); + + } + + array.push( materials[ uuid ] ); + + } + + return array; + + } + + if ( materials[ name ] === undefined ) { + + console.warn( 'THREE.ObjectLoader: Undefined material', name ); + + } + + return materials[ name ]; + + } + + switch ( data.type ) { + + case 'Scene': + + object = new Scene(); + + if ( data.background !== undefined ) { + + if ( Number.isInteger( data.background ) ) { + + object.background = new Color( data.background ); + + } + + } + + if ( data.fog !== undefined ) { + + if ( data.fog.type === 'Fog' ) { + + object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); + + } else if ( data.fog.type === 'FogExp2' ) { + + object.fog = new FogExp2( data.fog.color, data.fog.density ); + + } + + } + + break; + + case 'PerspectiveCamera': + + object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); + + if ( data.focus !== undefined ) object.focus = data.focus; + if ( data.zoom !== undefined ) object.zoom = data.zoom; + if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; + if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; + if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); + + break; + + case 'OrthographicCamera': + + object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); + + break; + + case 'AmbientLight': + + object = new AmbientLight( data.color, data.intensity ); + + break; + + case 'DirectionalLight': + + object = new DirectionalLight( data.color, data.intensity ); + + break; + + case 'PointLight': + + object = new PointLight( data.color, data.intensity, data.distance, data.decay ); + + break; + + case 'RectAreaLight': + + object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); + + break; + + case 'SpotLight': + + object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); + + break; + + case 'HemisphereLight': + + object = new HemisphereLight( data.color, data.groundColor, data.intensity ); + + break; + + case 'SkinnedMesh': + + console.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' ); + + case 'Mesh': + + var geometry = getGeometry( data.geometry ); + var material = getMaterial( data.material ); + + if ( geometry.bones && geometry.bones.length > 0 ) { + + object = new SkinnedMesh( geometry, material ); + + } else { + + object = new Mesh( geometry, material ); + + } + + break; + + case 'LOD': + + object = new LOD(); + + break; + + case 'Line': + + object = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode ); + + break; + + case 'LineLoop': + + object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'LineSegments': + + object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'PointCloud': + case 'Points': + + object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); + + break; + + case 'Sprite': + + object = new Sprite( getMaterial( data.material ) ); + + break; + + case 'Group': + + object = new Group(); + + break; + + default: + + object = new Object3D(); + + } + + object.uuid = data.uuid; + + if ( data.name !== undefined ) object.name = data.name; + if ( data.matrix !== undefined ) { + + matrix.fromArray( data.matrix ); + matrix.decompose( object.position, object.quaternion, object.scale ); + + } else { + + if ( data.position !== undefined ) object.position.fromArray( data.position ); + if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); + if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); + if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); + + } + + if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; + if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; + + if ( data.shadow ) { + + if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; + if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; + if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); + if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); + + } + + if ( data.visible !== undefined ) object.visible = data.visible; + if ( data.userData !== undefined ) object.userData = data.userData; + + if ( data.children !== undefined ) { + + var children = data.children; + + for ( var i = 0; i < children.length; i ++ ) { + + object.add( this.parseObject( children[ i ], geometries, materials ) ); + + } + + } + + if ( data.type === 'LOD' ) { + + var levels = data.levels; + + for ( var l = 0; l < levels.length; l ++ ) { + + var level = levels[ l ]; + var child = object.getObjectByProperty( 'uuid', level.object ); + + if ( child !== undefined ) { + + object.addLevel( child, level.distance ); + + } + + } + + } + + return object; + + }; + + }() + +} ); + +var TEXTURE_MAPPING = { + UVMapping: UVMapping, + CubeReflectionMapping: CubeReflectionMapping, + CubeRefractionMapping: CubeRefractionMapping, + EquirectangularReflectionMapping: EquirectangularReflectionMapping, + EquirectangularRefractionMapping: EquirectangularRefractionMapping, + SphericalReflectionMapping: SphericalReflectionMapping, + CubeUVReflectionMapping: CubeUVReflectionMapping, + CubeUVRefractionMapping: CubeUVRefractionMapping +}; + +var TEXTURE_WRAPPING = { + RepeatWrapping: RepeatWrapping, + ClampToEdgeWrapping: ClampToEdgeWrapping, + MirroredRepeatWrapping: MirroredRepeatWrapping +}; + +var TEXTURE_FILTER = { + NearestFilter: NearestFilter, + NearestMipMapNearestFilter: NearestMipMapNearestFilter, + NearestMipMapLinearFilter: NearestMipMapLinearFilter, + LinearFilter: LinearFilter, + LinearMipMapNearestFilter: LinearMipMapNearestFilter, + LinearMipMapLinearFilter: LinearMipMapLinearFilter +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + * Bezier Curves formulas obtained from + * http://en.wikipedia.org/wiki/Bézier_curve + */ + +function CatmullRom( t, p0, p1, p2, p3 ) { + + var v0 = ( p2 - p0 ) * 0.5; + var v1 = ( p3 - p1 ) * 0.5; + var t2 = t * t; + var t3 = t * t2; + return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; + +} + +// + +function QuadraticBezierP0( t, p ) { + + var k = 1 - t; + return k * k * p; + +} + +function QuadraticBezierP1( t, p ) { + + return 2 * ( 1 - t ) * t * p; + +} + +function QuadraticBezierP2( t, p ) { + + return t * t * p; + +} + +function QuadraticBezier( t, p0, p1, p2 ) { + + return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + + QuadraticBezierP2( t, p2 ); + +} + +// + +function CubicBezierP0( t, p ) { + + var k = 1 - t; + return k * k * k * p; + +} + +function CubicBezierP1( t, p ) { + + var k = 1 - t; + return 3 * k * k * t * p; + +} + +function CubicBezierP2( t, p ) { + + return 3 * ( 1 - t ) * t * t * p; + +} + +function CubicBezierP3( t, p ) { + + return t * t * t * p; + +} + +function CubicBezier( t, p0, p1, p2, p3 ) { + + return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + + CubicBezierP3( t, p3 ); + +} + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Extensible curve object + * + * Some common of curve methods: + * .getPoint(t), getTangent(t) + * .getPointAt(u), getTangentAt(u) + * .getPoints(), .getSpacedPoints() + * .getLength() + * .updateArcLengths() + * + * This following curves inherit from THREE.Curve: + * + * -- 2D curves -- + * THREE.ArcCurve + * THREE.CubicBezierCurve + * THREE.EllipseCurve + * THREE.LineCurve + * THREE.QuadraticBezierCurve + * THREE.SplineCurve + * + * -- 3D curves -- + * THREE.CatmullRomCurve3 + * THREE.CubicBezierCurve3 + * THREE.LineCurve3 + * THREE.QuadraticBezierCurve3 + * + * A series of curves can be represented as a THREE.CurvePath. + * + **/ + +/************************************************************** + * Abstract Curve base class + **************************************************************/ + +function Curve() { + + this.arcLengthDivisions = 200; + +} + +Object.assign( Curve.prototype, { + + // Virtual base class method to overwrite and implement in subclasses + // - t [0 .. 1] + + getPoint: function () { + + console.warn( 'THREE.Curve: .getPoint() not implemented.' ); + return null; + + }, + + // Get point at relative position in curve according to arc length + // - u [0 .. 1] + + getPointAt: function ( u ) { + + var t = this.getUtoTmapping( u ); + return this.getPoint( t ); + + }, + + // Get sequence of points using getPoint( t ) + + getPoints: function ( divisions ) { + + if ( divisions === undefined ) divisions = 5; + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPoint( d / divisions ) ); + + } + + return points; + + }, + + // Get sequence of points using getPointAt( u ) + + getSpacedPoints: function ( divisions ) { + + if ( divisions === undefined ) divisions = 5; + + var points = []; + + for ( var d = 0; d <= divisions; d ++ ) { + + points.push( this.getPointAt( d / divisions ) ); + + } + + return points; + + }, + + // Get total curve arc length + + getLength: function () { + + var lengths = this.getLengths(); + return lengths[ lengths.length - 1 ]; + + }, + + // Get list of cumulative segment lengths + + getLengths: function ( divisions ) { + + if ( divisions === undefined ) divisions = this.arcLengthDivisions; + + if ( this.cacheArcLengths && + ( this.cacheArcLengths.length === divisions + 1 ) && + ! this.needsUpdate ) { + + return this.cacheArcLengths; + + } + + this.needsUpdate = false; + + var cache = []; + var current, last = this.getPoint( 0 ); + var p, sum = 0; + + cache.push( 0 ); + + for ( p = 1; p <= divisions; p ++ ) { + + current = this.getPoint( p / divisions ); + sum += current.distanceTo( last ); + cache.push( sum ); + last = current; + + } + + this.cacheArcLengths = cache; + + return cache; // { sums: cache, sum: sum }; Sum is in the last element. + + }, + + updateArcLengths: function () { + + this.needsUpdate = true; + this.getLengths(); + + }, + + // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant + + getUtoTmapping: function ( u, distance ) { + + var arcLengths = this.getLengths(); + + var i = 0, il = arcLengths.length; + + var targetArcLength; // The targeted u distance value to get + + if ( distance ) { + + targetArcLength = distance; + + } else { + + targetArcLength = u * arcLengths[ il - 1 ]; + + } + + // binary search for the index with largest value smaller than target u distance + + var low = 0, high = il - 1, comparison; + + while ( low <= high ) { + + i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats + + comparison = arcLengths[ i ] - targetArcLength; + + if ( comparison < 0 ) { + + low = i + 1; + + } else if ( comparison > 0 ) { + + high = i - 1; + + } else { + + high = i; + break; + + // DONE + + } + + } + + i = high; + + if ( arcLengths[ i ] === targetArcLength ) { + + return i / ( il - 1 ); + + } + + // we could get finer grain at lengths, or use simple interpolation between two points + + var lengthBefore = arcLengths[ i ]; + var lengthAfter = arcLengths[ i + 1 ]; + + var segmentLength = lengthAfter - lengthBefore; + + // determine where we are between the 'before' and 'after' points + + var segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; + + // add that fractional amount to t + + var t = ( i + segmentFraction ) / ( il - 1 ); + + return t; + + }, + + // Returns a unit vector tangent at t + // In case any sub curve does not implement its tangent derivation, + // 2 points a small delta apart will be used to find its gradient + // which seems to give a reasonable approximation + + getTangent: function ( t ) { + + var delta = 0.0001; + var t1 = t - delta; + var t2 = t + delta; + + // Capping in case of danger + + if ( t1 < 0 ) t1 = 0; + if ( t2 > 1 ) t2 = 1; + + var pt1 = this.getPoint( t1 ); + var pt2 = this.getPoint( t2 ); + + var vec = pt2.clone().sub( pt1 ); + return vec.normalize(); + + }, + + getTangentAt: function ( u ) { + + var t = this.getUtoTmapping( u ); + return this.getTangent( t ); + + }, + + computeFrenetFrames: function ( segments, closed ) { + + // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf + + var normal = new Vector3(); + + var tangents = []; + var normals = []; + var binormals = []; + + var vec = new Vector3(); + var mat = new Matrix4(); + + var i, u, theta; + + // compute the tangent vectors for each segment on the curve + + for ( i = 0; i <= segments; i ++ ) { + + u = i / segments; + + tangents[ i ] = this.getTangentAt( u ); + tangents[ i ].normalize(); + + } + + // select an initial normal vector perpendicular to the first tangent vector, + // and in the direction of the minimum tangent xyz component + + normals[ 0 ] = new Vector3(); + binormals[ 0 ] = new Vector3(); + var min = Number.MAX_VALUE; + var tx = Math.abs( tangents[ 0 ].x ); + var ty = Math.abs( tangents[ 0 ].y ); + var tz = Math.abs( tangents[ 0 ].z ); + + if ( tx <= min ) { + + min = tx; + normal.set( 1, 0, 0 ); + + } + + if ( ty <= min ) { + + min = ty; + normal.set( 0, 1, 0 ); + + } + + if ( tz <= min ) { + + normal.set( 0, 0, 1 ); + + } + + vec.crossVectors( tangents[ 0 ], normal ).normalize(); + + normals[ 0 ].crossVectors( tangents[ 0 ], vec ); + binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); + + + // compute the slowly-varying normal and binormal vectors for each segment on the curve + + for ( i = 1; i <= segments; i ++ ) { + + normals[ i ] = normals[ i - 1 ].clone(); + + binormals[ i ] = binormals[ i - 1 ].clone(); + + vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); + + if ( vec.length() > Number.EPSILON ) { + + vec.normalize(); + + theta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors + + normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); + + } + + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same + + if ( closed === true ) { + + theta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); + theta /= segments; + + if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { + + theta = - theta; + + } + + for ( i = 1; i <= segments; i ++ ) { + + // twist a little... + normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); + binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); + + } + + } + + return { + tangents: tangents, + normals: normals, + binormals: binormals + }; + + } + +} ); + +function LineCurve( v1, v2 ) { + + Curve.call( this ); + + this.v1 = v1; + this.v2 = v2; + +} + +LineCurve.prototype = Object.create( Curve.prototype ); +LineCurve.prototype.constructor = LineCurve; + +LineCurve.prototype.isLineCurve = true; + +LineCurve.prototype.getPoint = function ( t ) { + + if ( t === 1 ) { + + return this.v2.clone(); + + } + + var point = this.v2.clone().sub( this.v1 ); + point.multiplyScalar( t ).add( this.v1 ); + + return point; + +}; + +// Line curve is linear, so we can overwrite default getPointAt + +LineCurve.prototype.getPointAt = function ( u ) { + + return this.getPoint( u ); + +}; + +LineCurve.prototype.getTangent = function ( t ) { + + var tangent = this.v2.clone().sub( this.v1 ); + + return tangent.normalize(); + +}; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * + **/ + +/************************************************************** + * Curved Path - a curve path is simply a array of connected + * curves, but retains the api of a curve + **************************************************************/ + +function CurvePath() { + + Curve.call( this ); + + this.curves = []; + + this.autoClose = false; // Automatically closes the path + +} + +CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { + + constructor: CurvePath, + + add: function ( curve ) { + + this.curves.push( curve ); + + }, + + closePath: function () { + + // Add a line curve if start and end of lines are not connected + var startPoint = this.curves[ 0 ].getPoint( 0 ); + var endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); + + if ( ! startPoint.equals( endPoint ) ) { + + this.curves.push( new LineCurve( endPoint, startPoint ) ); + + } + + }, + + // To get accurate point with reference to + // entire path distance at time t, + // following has to be done: + + // 1. Length of each sub path have to be known + // 2. Locate and identify type of curve + // 3. Get t for the curve + // 4. Return curve.getPointAt(t') + + getPoint: function ( t ) { + + var d = t * this.getLength(); + var curveLengths = this.getCurveLengths(); + var i = 0; + + // To think about boundaries points. + + while ( i < curveLengths.length ) { + + if ( curveLengths[ i ] >= d ) { + + var diff = curveLengths[ i ] - d; + var curve = this.curves[ i ]; + + var segmentLength = curve.getLength(); + var u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; + + return curve.getPointAt( u ); + + } + + i ++; + + } + + return null; + + // loop where sum != 0, sum > d , sum+1 1 && !points[ points.length - 1 ].equals( points[ 0 ] ) ) { + + points.push( points[ 0 ] ); + + } + + return points; + + }, + + /************************************************************** + * Create Geometries Helpers + **************************************************************/ + + /// Generate geometry from path points (for Line or Points objects) + + createPointsGeometry: function ( divisions ) { + + var pts = this.getPoints( divisions ); + return this.createGeometry( pts ); + + }, + + // Generate geometry from equidistant sampling along the path + + createSpacedPointsGeometry: function ( divisions ) { + + var pts = this.getSpacedPoints( divisions ); + return this.createGeometry( pts ); + + }, + + createGeometry: function ( points ) { + + var geometry = new Geometry(); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + var point = points[ i ]; + geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); + + } + + return geometry; + + } + +} ); + +function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + Curve.call( this ); + + this.aX = aX; + this.aY = aY; + + this.xRadius = xRadius; + this.yRadius = yRadius; + + this.aStartAngle = aStartAngle; + this.aEndAngle = aEndAngle; + + this.aClockwise = aClockwise; + + this.aRotation = aRotation || 0; + +} + +EllipseCurve.prototype = Object.create( Curve.prototype ); +EllipseCurve.prototype.constructor = EllipseCurve; + +EllipseCurve.prototype.isEllipseCurve = true; + +EllipseCurve.prototype.getPoint = function ( t ) { + + var twoPi = Math.PI * 2; + var deltaAngle = this.aEndAngle - this.aStartAngle; + var samePoints = Math.abs( deltaAngle ) < Number.EPSILON; + + // ensures that deltaAngle is 0 .. 2 PI + while ( deltaAngle < 0 ) deltaAngle += twoPi; + while ( deltaAngle > twoPi ) deltaAngle -= twoPi; + + if ( deltaAngle < Number.EPSILON ) { + + if ( samePoints ) { + + deltaAngle = 0; + + } else { + + deltaAngle = twoPi; + + } + + } + + if ( this.aClockwise === true && ! samePoints ) { + + if ( deltaAngle === twoPi ) { + + deltaAngle = - twoPi; + + } else { + + deltaAngle = deltaAngle - twoPi; + + } + + } + + var angle = this.aStartAngle + t * deltaAngle; + var x = this.aX + this.xRadius * Math.cos( angle ); + var y = this.aY + this.yRadius * Math.sin( angle ); + + if ( this.aRotation !== 0 ) { + + var cos = Math.cos( this.aRotation ); + var sin = Math.sin( this.aRotation ); + + var tx = x - this.aX; + var ty = y - this.aY; + + // Rotate the point about the center of the ellipse. + x = tx * cos - ty * sin + this.aX; + y = tx * sin + ty * cos + this.aY; + + } + + return new Vector2( x, y ); + +}; + +function SplineCurve( points /* array of Vector2 */ ) { + + Curve.call( this ); + + this.points = ( points === undefined ) ? [] : points; + +} + +SplineCurve.prototype = Object.create( Curve.prototype ); +SplineCurve.prototype.constructor = SplineCurve; + +SplineCurve.prototype.isSplineCurve = true; + +SplineCurve.prototype.getPoint = function ( t ) { + + var points = this.points; + var point = ( points.length - 1 ) * t; + + var intPoint = Math.floor( point ); + var weight = point - intPoint; + + var point0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; + var point1 = points[ intPoint ]; + var point2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; + var point3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; + + return new Vector2( + CatmullRom( weight, point0.x, point1.x, point2.x, point3.x ), + CatmullRom( weight, point0.y, point1.y, point2.y, point3.y ) + ); + +}; + +function CubicBezierCurve( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + +} + +CubicBezierCurve.prototype = Object.create( Curve.prototype ); +CubicBezierCurve.prototype.constructor = CubicBezierCurve; + +CubicBezierCurve.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + return new Vector2( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) + ); + +}; + +function QuadraticBezierCurve( v0, v1, v2 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + +} + +QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); +QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; + +QuadraticBezierCurve.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + return new Vector2( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ) + ); + +}; + +var PathPrototype = Object.assign( Object.create( CurvePath.prototype ), { + + fromPoints: function ( vectors ) { + + this.moveTo( vectors[ 0 ].x, vectors[ 0 ].y ); + + for ( var i = 1, l = vectors.length; i < l; i ++ ) { + + this.lineTo( vectors[ i ].x, vectors[ i ].y ); + + } + + }, + + moveTo: function ( x, y ) { + + this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? + + }, + + lineTo: function ( x, y ) { + + var curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); + this.curves.push( curve ); + + this.currentPoint.set( x, y ); + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + var curve = new QuadraticBezierCurve( + this.currentPoint.clone(), + new Vector2( aCPx, aCPy ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + var curve = new CubicBezierCurve( + this.currentPoint.clone(), + new Vector2( aCP1x, aCP1y ), + new Vector2( aCP2x, aCP2y ), + new Vector2( aX, aY ) + ); + + this.curves.push( curve ); + + this.currentPoint.set( aX, aY ); + + }, + + splineThru: function ( pts /*Array of Vector*/ ) { + + var npts = [ this.currentPoint.clone() ].concat( pts ); + + var curve = new SplineCurve( npts ); + this.curves.push( curve ); + + this.currentPoint.copy( pts[ pts.length - 1 ] ); + + }, + + arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absarc( aX + x0, aY + y0, aRadius, + aStartAngle, aEndAngle, aClockwise ); + + }, + + absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + + }, + + ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var x0 = this.currentPoint.x; + var y0 = this.currentPoint.y; + + this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + }, + + absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { + + var curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); + + if ( this.curves.length > 0 ) { + + // if a previous curve is present, attempt to join + var firstPoint = curve.getPoint( 0 ); + + if ( ! firstPoint.equals( this.currentPoint ) ) { + + this.lineTo( firstPoint.x, firstPoint.y ); + + } + + } + + this.curves.push( curve ); + + var lastPoint = curve.getPoint( 1 ); + this.currentPoint.copy( lastPoint ); + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Creates free form 2d path using series of points, lines or curves. + **/ + +function Path( points ) { + + CurvePath.call( this ); + this.currentPoint = new Vector2(); + + if ( points ) { + + this.fromPoints( points ); + + } + +} + +Path.prototype = PathPrototype; +PathPrototype.constructor = Path; + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * Defines a 2d shape plane using paths. + **/ + +// STEP 1 Create a path. +// STEP 2 Turn path into shape. +// STEP 3 ExtrudeGeometry takes in Shape/Shapes +// STEP 3a - Extract points from each shape, turn to vertices +// STEP 3b - Triangulate each shape, add faces. + +function Shape() { + + Path.apply( this, arguments ); + + this.holes = []; + +} + +Shape.prototype = Object.assign( Object.create( PathPrototype ), { + + constructor: Shape, + + getPointsHoles: function ( divisions ) { + + var holesPts = []; + + for ( var i = 0, l = this.holes.length; i < l; i ++ ) { + + holesPts[ i ] = this.holes[ i ].getPoints( divisions ); + + } + + return holesPts; + + }, + + // Get points of shape and holes (keypoints based on segments parameter) + + extractAllPoints: function ( divisions ) { + + return { + + shape: this.getPoints( divisions ), + holes: this.getPointsHoles( divisions ) + + }; + + }, + + extractPoints: function ( divisions ) { + + return this.extractAllPoints( divisions ); + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * minimal class for proxing functions to Path. Replaces old "extractSubpaths()" + **/ + +function ShapePath() { + + this.subPaths = []; + this.currentPath = null; + +} + +Object.assign( ShapePath.prototype, { + + moveTo: function ( x, y ) { + + this.currentPath = new Path(); + this.subPaths.push( this.currentPath ); + this.currentPath.moveTo( x, y ); + + }, + + lineTo: function ( x, y ) { + + this.currentPath.lineTo( x, y ); + + }, + + quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { + + this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); + + }, + + bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { + + this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); + + }, + + splineThru: function ( pts ) { + + this.currentPath.splineThru( pts ); + + }, + + toShapes: function ( isCCW, noHoles ) { + + function toShapesNoHoles( inSubpaths ) { + + var shapes = []; + + for ( var i = 0, l = inSubpaths.length; i < l; i ++ ) { + + var tmpPath = inSubpaths[ i ]; + + var tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + + shapes.push( tmpShape ); + + } + + return shapes; + + } + + function isPointInsidePolygon( inPt, inPolygon ) { + + var polyLen = inPolygon.length; + + // inPt on polygon contour => immediate success or + // toggling of inside/outside at every single! intersection point of an edge + // with the horizontal line through inPt, left of inPt + // not counting lowerY endpoints of edges and whole edges on that line + var inside = false; + for ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { + + var edgeLowPt = inPolygon[ p ]; + var edgeHighPt = inPolygon[ q ]; + + var edgeDx = edgeHighPt.x - edgeLowPt.x; + var edgeDy = edgeHighPt.y - edgeLowPt.y; + + if ( Math.abs( edgeDy ) > Number.EPSILON ) { + + // not parallel + if ( edgeDy < 0 ) { + + edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; + edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; + + } + if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; + + if ( inPt.y === edgeLowPt.y ) { + + if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? + // continue; // no intersection or edgeLowPt => doesn't count !!! + + } else { + + var perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); + if ( perpEdge === 0 ) return true; // inPt is on contour ? + if ( perpEdge < 0 ) continue; + inside = ! inside; // true intersection left of inPt + + } + + } else { + + // parallel or collinear + if ( inPt.y !== edgeLowPt.y ) continue; // parallel + // edge lies on the same horizontal line as inPt + if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || + ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! + // continue; + + } + + } + + return inside; + + } + + var isClockWise = ShapeUtils.isClockWise; + + var subPaths = this.subPaths; + if ( subPaths.length === 0 ) return []; + + if ( noHoles === true ) return toShapesNoHoles( subPaths ); + + + var solid, tmpPath, tmpShape, shapes = []; + + if ( subPaths.length === 1 ) { + + tmpPath = subPaths[ 0 ]; + tmpShape = new Shape(); + tmpShape.curves = tmpPath.curves; + shapes.push( tmpShape ); + return shapes; + + } + + var holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); + holesFirst = isCCW ? ! holesFirst : holesFirst; + + // console.log("Holes first", holesFirst); + + var betterShapeHoles = []; + var newShapes = []; + var newShapeHoles = []; + var mainIdx = 0; + var tmpPoints; + + newShapes[ mainIdx ] = undefined; + newShapeHoles[ mainIdx ] = []; + + for ( var i = 0, l = subPaths.length; i < l; i ++ ) { + + tmpPath = subPaths[ i ]; + tmpPoints = tmpPath.getPoints(); + solid = isClockWise( tmpPoints ); + solid = isCCW ? ! solid : solid; + + if ( solid ) { + + if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; + + newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; + newShapes[ mainIdx ].s.curves = tmpPath.curves; + + if ( holesFirst ) mainIdx ++; + newShapeHoles[ mainIdx ] = []; + + //console.log('cw', i); + + } else { + + newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); + + //console.log('ccw', i); + + } + + } + + // only Holes? -> probably all Shapes with wrong orientation + if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); + + + if ( newShapes.length > 1 ) { + + var ambiguous = false; + var toChange = []; + + for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + betterShapeHoles[ sIdx ] = []; + + } + + for ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { + + var sho = newShapeHoles[ sIdx ]; + + for ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) { + + var ho = sho[ hIdx ]; + var hole_unassigned = true; + + for ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { + + if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { + + if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); + if ( hole_unassigned ) { + + hole_unassigned = false; + betterShapeHoles[ s2Idx ].push( ho ); + + } else { + + ambiguous = true; + + } + + } + + } + if ( hole_unassigned ) { + + betterShapeHoles[ sIdx ].push( ho ); + + } + + } + + } + // console.log("ambiguous: ", ambiguous); + if ( toChange.length > 0 ) { + + // console.log("to change: ", toChange); + if ( ! ambiguous ) newShapeHoles = betterShapeHoles; + + } + + } + + var tmpHoles; + + for ( var i = 0, il = newShapes.length; i < il; i ++ ) { + + tmpShape = newShapes[ i ].s; + shapes.push( tmpShape ); + tmpHoles = newShapeHoles[ i ]; + + for ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) { + + tmpShape.holes.push( tmpHoles[ j ].h ); + + } + + } + + //console.log("shape", shapes); + + return shapes; + + } + +} ); + +/** + * @author zz85 / http://www.lab4games.net/zz85/blog + * @author mrdoob / http://mrdoob.com/ + */ + +function Font( data ) { + + this.data = data; + +} + +Object.assign( Font.prototype, { + + isFont: true, + + generateShapes: function ( text, size, divisions ) { + + function createPaths( text ) { + + var chars = String( text ).split( '' ); + var scale = size / data.resolution; + var line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; + + var offsetX = 0, offsetY = 0; + + var paths = []; + + for ( var i = 0; i < chars.length; i ++ ) { + + var char = chars[ i ]; + + if ( char === '\n' ) { + + offsetX = 0; + offsetY -= line_height; + + } else { + + var ret = createPath( char, scale, offsetX, offsetY ); + offsetX += ret.offsetX; + paths.push( ret.path ); + + } + + } + + return paths; + + } + + function createPath( c, scale, offsetX, offsetY ) { + + var glyph = data.glyphs[ c ] || data.glyphs[ '?' ]; + + if ( ! glyph ) return; + + var path = new ShapePath(); + + var pts = []; + var x, y, cpx, cpy, cpx0, cpy0, cpx1, cpy1, cpx2, cpy2, laste; + + if ( glyph.o ) { + + var outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); + + for ( var i = 0, l = outline.length; i < l; ) { + + var action = outline[ i ++ ]; + + switch ( action ) { + + case 'm': // moveTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.moveTo( x, y ); + + break; + + case 'l': // lineTo + + x = outline[ i ++ ] * scale + offsetX; + y = outline[ i ++ ] * scale + offsetY; + + path.lineTo( x, y ); + + break; + + case 'q': // quadraticCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + + path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); + + laste = pts[ pts.length - 1 ]; + + if ( laste ) { + + cpx0 = laste.x; + cpy0 = laste.y; + + for ( var i2 = 1; i2 <= divisions; i2 ++ ) { + + var t = i2 / divisions; + QuadraticBezier( t, cpx0, cpx1, cpx ); + QuadraticBezier( t, cpy0, cpy1, cpy ); + + } + + } + + break; + + case 'b': // bezierCurveTo + + cpx = outline[ i ++ ] * scale + offsetX; + cpy = outline[ i ++ ] * scale + offsetY; + cpx1 = outline[ i ++ ] * scale + offsetX; + cpy1 = outline[ i ++ ] * scale + offsetY; + cpx2 = outline[ i ++ ] * scale + offsetX; + cpy2 = outline[ i ++ ] * scale + offsetY; + + path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); + + laste = pts[ pts.length - 1 ]; + + if ( laste ) { + + cpx0 = laste.x; + cpy0 = laste.y; + + for ( var i2 = 1; i2 <= divisions; i2 ++ ) { + + var t = i2 / divisions; + CubicBezier( t, cpx0, cpx1, cpx2, cpx ); + CubicBezier( t, cpy0, cpy1, cpy2, cpy ); + + } + + } + + break; + + } + + } + + } + + return { offsetX: glyph.ha * scale, path: path }; + + } + + // + + if ( size === undefined ) size = 100; + if ( divisions === undefined ) divisions = 4; + + var data = this.data; + + var paths = createPaths( text ); + var shapes = []; + + for ( var p = 0, pl = paths.length; p < pl; p ++ ) { + + Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); + + } + + return shapes; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function FontLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( FontLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var loader = new FileLoader( this.manager ); + loader.load( url, function ( text ) { + + var json; + + try { + + json = JSON.parse( text ); + + } catch ( e ) { + + console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); + json = JSON.parse( text.substring( 65, text.length - 2 ) ); + + } + + var font = scope.parse( json ); + + if ( onLoad ) onLoad( font ); + + }, onProgress, onError ); + + }, + + parse: function ( json ) { + + return new Font( json ); + + } + +} ); + +var context; + +var AudioContext = { + + getContext: function () { + + if ( context === undefined ) { + + context = new ( window.AudioContext || window.webkitAudioContext )(); + + } + + return context; + + }, + + setContext: function ( value ) { + + context = value; + + } + +}; + +/** + * @author Reece Aaron Lecrivain / http://reecenotes.com/ + */ + +function AudioLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; + +} + +Object.assign( AudioLoader.prototype, { + + load: function ( url, onLoad, onProgress, onError ) { + + var loader = new FileLoader( this.manager ); + loader.setResponseType( 'arraybuffer' ); + loader.load( url, function ( buffer ) { + + var context = AudioContext.getContext(); + + context.decodeAudioData( buffer, function ( audioBuffer ) { + + onLoad( audioBuffer ); + + } ); + + }, onProgress, onError ); + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function StereoCamera() { + + this.type = 'StereoCamera'; + + this.aspect = 1; + + this.eyeSep = 0.064; + + this.cameraL = new PerspectiveCamera(); + this.cameraL.layers.enable( 1 ); + this.cameraL.matrixAutoUpdate = false; + + this.cameraR = new PerspectiveCamera(); + this.cameraR.layers.enable( 2 ); + this.cameraR.matrixAutoUpdate = false; + +} + +Object.assign( StereoCamera.prototype, { + + update: ( function () { + + var instance, focus, fov, aspect, near, far, zoom, eyeSep; + + var eyeRight = new Matrix4(); + var eyeLeft = new Matrix4(); + + return function update( camera ) { + + var needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov || + aspect !== camera.aspect * this.aspect || near !== camera.near || + far !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep; + + if ( needsUpdate ) { + + instance = this; + focus = camera.focus; + fov = camera.fov; + aspect = camera.aspect * this.aspect; + near = camera.near; + far = camera.far; + zoom = camera.zoom; + + // Off-axis stereoscopic effect based on + // http://paulbourke.net/stereographics/stereorender/ + + var projectionMatrix = camera.projectionMatrix.clone(); + eyeSep = this.eyeSep / 2; + var eyeSepOnProjection = eyeSep * near / focus; + var ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom; + var xmin, xmax; + + // translate xOffset + + eyeLeft.elements[ 12 ] = - eyeSep; + eyeRight.elements[ 12 ] = eyeSep; + + // for left eye + + xmin = - ymax * aspect + eyeSepOnProjection; + xmax = ymax * aspect + eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraL.projectionMatrix.copy( projectionMatrix ); + + // for right eye + + xmin = - ymax * aspect - eyeSepOnProjection; + xmax = ymax * aspect - eyeSepOnProjection; + + projectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin ); + projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); + + this.cameraR.projectionMatrix.copy( projectionMatrix ); + + } + + this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft ); + this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight ); + + }; + + } )() + +} ); + +/** + * Camera for rendering cube maps + * - renders scene into axis-aligned cube + * + * @author alteredq / http://alteredqualia.com/ + */ + +function CubeCamera( near, far, cubeResolution ) { + + Object3D.call( this ); + + this.type = 'CubeCamera'; + + var fov = 90, aspect = 1; + + var cameraPX = new PerspectiveCamera( fov, aspect, near, far ); + cameraPX.up.set( 0, - 1, 0 ); + cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); + this.add( cameraPX ); + + var cameraNX = new PerspectiveCamera( fov, aspect, near, far ); + cameraNX.up.set( 0, - 1, 0 ); + cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); + this.add( cameraNX ); + + var cameraPY = new PerspectiveCamera( fov, aspect, near, far ); + cameraPY.up.set( 0, 0, 1 ); + cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); + this.add( cameraPY ); + + var cameraNY = new PerspectiveCamera( fov, aspect, near, far ); + cameraNY.up.set( 0, 0, - 1 ); + cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); + this.add( cameraNY ); + + var cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraPZ.up.set( 0, - 1, 0 ); + cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); + this.add( cameraPZ ); + + var cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); + cameraNZ.up.set( 0, - 1, 0 ); + cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); + this.add( cameraNZ ); + + var options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter }; + + this.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options ); + this.renderTarget.texture.name = "CubeCamera"; + + this.update = function ( renderer, scene ) { + + if ( this.parent === null ) this.updateMatrixWorld(); + + var renderTarget = this.renderTarget; + var generateMipmaps = renderTarget.texture.generateMipmaps; + + renderTarget.texture.generateMipmaps = false; + + renderTarget.activeCubeFace = 0; + renderer.render( scene, cameraPX, renderTarget ); + + renderTarget.activeCubeFace = 1; + renderer.render( scene, cameraNX, renderTarget ); + + renderTarget.activeCubeFace = 2; + renderer.render( scene, cameraPY, renderTarget ); + + renderTarget.activeCubeFace = 3; + renderer.render( scene, cameraNY, renderTarget ); + + renderTarget.activeCubeFace = 4; + renderer.render( scene, cameraPZ, renderTarget ); + + renderTarget.texture.generateMipmaps = generateMipmaps; + + renderTarget.activeCubeFace = 5; + renderer.render( scene, cameraNZ, renderTarget ); + + renderer.setRenderTarget( null ); + + }; + + this.clear = function ( renderer, color, depth, stencil ) { + + var renderTarget = this.renderTarget; + + for ( var i = 0; i < 6; i ++ ) { + + renderTarget.activeCubeFace = i; + renderer.setRenderTarget( renderTarget ); + + renderer.clear( color, depth, stencil ); + + } + + renderer.setRenderTarget( null ); + + }; + +} + +CubeCamera.prototype = Object.create( Object3D.prototype ); +CubeCamera.prototype.constructor = CubeCamera; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AudioListener() { + + Object3D.call( this ); + + this.type = 'AudioListener'; + + this.context = AudioContext.getContext(); + + this.gain = this.context.createGain(); + this.gain.connect( this.context.destination ); + + this.filter = null; + +} + +AudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: AudioListener, + + getInput: function () { + + return this.gain; + + }, + + removeFilter: function ( ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + this.gain.connect( this.context.destination ); + this.filter = null; + + } + + }, + + getFilter: function () { + + return this.filter; + + }, + + setFilter: function ( value ) { + + if ( this.filter !== null ) { + + this.gain.disconnect( this.filter ); + this.filter.disconnect( this.context.destination ); + + } else { + + this.gain.disconnect( this.context.destination ); + + } + + this.filter = value; + this.gain.connect( this.filter ); + this.filter.connect( this.context.destination ); + + }, + + getMasterVolume: function () { + + return this.gain.gain.value; + + }, + + setMasterVolume: function ( value ) { + + this.gain.gain.value = value; + + }, + + updateMatrixWorld: ( function () { + + var position = new Vector3(); + var quaternion = new Quaternion(); + var scale = new Vector3(); + + var orientation = new Vector3(); + + return function updateMatrixWorld( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + var listener = this.context.listener; + var up = this.up; + + this.matrixWorld.decompose( position, quaternion, scale ); + + orientation.set( 0, 0, - 1 ).applyQuaternion( quaternion ); + + if ( listener.positionX ) { + + listener.positionX.setValueAtTime( position.x, this.context.currentTime ); + listener.positionY.setValueAtTime( position.y, this.context.currentTime ); + listener.positionZ.setValueAtTime( position.z, this.context.currentTime ); + listener.forwardX.setValueAtTime( orientation.x, this.context.currentTime ); + listener.forwardY.setValueAtTime( orientation.y, this.context.currentTime ); + listener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime ); + listener.upX.setValueAtTime( up.x, this.context.currentTime ); + listener.upY.setValueAtTime( up.y, this.context.currentTime ); + listener.upZ.setValueAtTime( up.z, this.context.currentTime ); + + } else { + + listener.setPosition( position.x, position.y, position.z ); + listener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z ); + + } + + }; + + } )() + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Reece Aaron Lecrivain / http://reecenotes.com/ + */ + +function Audio( listener ) { + + Object3D.call( this ); + + this.type = 'Audio'; + + this.context = listener.context; + + this.gain = this.context.createGain(); + this.gain.connect( listener.getInput() ); + + this.autoplay = false; + + this.buffer = null; + this.loop = false; + this.startTime = 0; + this.playbackRate = 1; + this.isPlaying = false; + this.hasPlaybackControl = true; + this.sourceType = 'empty'; + + this.filters = []; + +} + +Audio.prototype = Object.assign( Object.create( Object3D.prototype ), { + + constructor: Audio, + + getOutput: function () { + + return this.gain; + + }, + + setNodeSource: function ( audioNode ) { + + this.hasPlaybackControl = false; + this.sourceType = 'audioNode'; + this.source = audioNode; + this.connect(); + + return this; + + }, + + setBuffer: function ( audioBuffer ) { + + this.buffer = audioBuffer; + this.sourceType = 'buffer'; + + if ( this.autoplay ) this.play(); + + return this; + + }, + + play: function () { + + if ( this.isPlaying === true ) { + + console.warn( 'THREE.Audio: Audio is already playing.' ); + return; + + } + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + var source = this.context.createBufferSource(); + + source.buffer = this.buffer; + source.loop = this.loop; + source.onended = this.onEnded.bind( this ); + source.playbackRate.setValueAtTime( this.playbackRate, this.startTime ); + source.start( 0, this.startTime ); + + this.isPlaying = true; + + this.source = source; + + return this.connect(); + + }, + + pause: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.source.stop(); + this.startTime = this.context.currentTime; + this.isPlaying = false; + + return this; + + }, + + stop: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.source.stop(); + this.startTime = 0; + this.isPlaying = false; + + return this; + + }, + + connect: function () { + + if ( this.filters.length > 0 ) { + + this.source.connect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].connect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); + + } else { + + this.source.connect( this.getOutput() ); + + } + + return this; + + }, + + disconnect: function () { + + if ( this.filters.length > 0 ) { + + this.source.disconnect( this.filters[ 0 ] ); + + for ( var i = 1, l = this.filters.length; i < l; i ++ ) { + + this.filters[ i - 1 ].disconnect( this.filters[ i ] ); + + } + + this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); + + } else { + + this.source.disconnect( this.getOutput() ); + + } + + return this; + + }, + + getFilters: function () { + + return this.filters; + + }, + + setFilters: function ( value ) { + + if ( ! value ) value = []; + + if ( this.isPlaying === true ) { + + this.disconnect(); + this.filters = value; + this.connect(); + + } else { + + this.filters = value; + + } + + return this; + + }, + + getFilter: function () { + + return this.getFilters()[ 0 ]; + + }, + + setFilter: function ( filter ) { + + return this.setFilters( filter ? [ filter ] : [] ); + + }, + + setPlaybackRate: function ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.playbackRate = value; + + if ( this.isPlaying === true ) { + + this.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime ); + + } + + return this; + + }, + + getPlaybackRate: function () { + + return this.playbackRate; + + }, + + onEnded: function () { + + this.isPlaying = false; + + }, + + getLoop: function () { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return false; + + } + + return this.loop; + + }, + + setLoop: function ( value ) { + + if ( this.hasPlaybackControl === false ) { + + console.warn( 'THREE.Audio: this Audio has no playback control.' ); + return; + + } + + this.loop = value; + + if ( this.isPlaying === true ) { + + this.source.loop = this.loop; + + } + + return this; + + }, + + getVolume: function () { + + return this.gain.gain.value; + + }, + + setVolume: function ( value ) { + + this.gain.gain.value = value; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function PositionalAudio( listener ) { + + Audio.call( this, listener ); + + this.panner = this.context.createPanner(); + this.panner.connect( this.gain ); + +} + +PositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), { + + constructor: PositionalAudio, + + getOutput: function () { + + return this.panner; + + }, + + getRefDistance: function () { + + return this.panner.refDistance; + + }, + + setRefDistance: function ( value ) { + + this.panner.refDistance = value; + + }, + + getRolloffFactor: function () { + + return this.panner.rolloffFactor; + + }, + + setRolloffFactor: function ( value ) { + + this.panner.rolloffFactor = value; + + }, + + getDistanceModel: function () { + + return this.panner.distanceModel; + + }, + + setDistanceModel: function ( value ) { + + this.panner.distanceModel = value; + + }, + + getMaxDistance: function () { + + return this.panner.maxDistance; + + }, + + setMaxDistance: function ( value ) { + + this.panner.maxDistance = value; + + }, + + updateMatrixWorld: ( function () { + + var position = new Vector3(); + + return function updateMatrixWorld( force ) { + + Object3D.prototype.updateMatrixWorld.call( this, force ); + + position.setFromMatrixPosition( this.matrixWorld ); + + this.panner.setPosition( position.x, position.y, position.z ); + + }; + + } )() + + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function AudioAnalyser( audio, fftSize ) { + + this.analyser = audio.context.createAnalyser(); + this.analyser.fftSize = fftSize !== undefined ? fftSize : 2048; + + this.data = new Uint8Array( this.analyser.frequencyBinCount ); + + audio.getOutput().connect( this.analyser ); + +} + +Object.assign( AudioAnalyser.prototype, { + + getFrequencyData: function () { + + this.analyser.getByteFrequencyData( this.data ); + + return this.data; + + }, + + getAverageFrequency: function () { + + var value = 0, data = this.getFrequencyData(); + + for ( var i = 0; i < data.length; i ++ ) { + + value += data[ i ]; + + } + + return value / data.length; + + } + +} ); + +/** + * + * Buffered scene graph property that allows weighted accumulation. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function PropertyMixer( binding, typeName, valueSize ) { + + this.binding = binding; + this.valueSize = valueSize; + + var bufferType = Float64Array, + mixFunction; + + switch ( typeName ) { + + case 'quaternion': + mixFunction = this._slerp; + break; + + case 'string': + case 'bool': + bufferType = Array; + mixFunction = this._select; + break; + + default: + mixFunction = this._lerp; + + } + + this.buffer = new bufferType( valueSize * 4 ); + // layout: [ incoming | accu0 | accu1 | orig ] + // + // interpolators can use .buffer as their .result + // the data then goes to 'incoming' + // + // 'accu0' and 'accu1' are used frame-interleaved for + // the cumulative result and are compared to detect + // changes + // + // 'orig' stores the original state of the property + + this._mixBufferRegion = mixFunction; + + this.cumulativeWeight = 0; + + this.useCount = 0; + this.referenceCount = 0; + +} + +Object.assign( PropertyMixer.prototype, { + + // accumulate data in the 'incoming' region into 'accu' + accumulate: function ( accuIndex, weight ) { + + // note: happily accumulating nothing when weight = 0, the caller knows + // the weight and shouldn't have made the call in the first place + + var buffer = this.buffer, + stride = this.valueSize, + offset = accuIndex * stride + stride, + + currentWeight = this.cumulativeWeight; + + if ( currentWeight === 0 ) { + + // accuN := incoming * weight + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ offset + i ] = buffer[ i ]; + + } + + currentWeight = weight; + + } else { + + // accuN := accuN + incoming * weight + + currentWeight += weight; + var mix = weight / currentWeight; + this._mixBufferRegion( buffer, offset, 0, mix, stride ); + + } + + this.cumulativeWeight = currentWeight; + + }, + + // apply the state of 'accu' to the binding when accus differ + apply: function ( accuIndex ) { + + var stride = this.valueSize, + buffer = this.buffer, + offset = accuIndex * stride + stride, + + weight = this.cumulativeWeight, + + binding = this.binding; + + this.cumulativeWeight = 0; + + if ( weight < 1 ) { + + // accuN := accuN + original * ( 1 - cumulativeWeight ) + + var originalValueOffset = stride * 3; + + this._mixBufferRegion( + buffer, offset, originalValueOffset, 1 - weight, stride ); + + } + + for ( var i = stride, e = stride + stride; i !== e; ++ i ) { + + if ( buffer[ i ] !== buffer[ i + stride ] ) { + + // value has changed -> update scene graph + + binding.setValue( buffer, offset ); + break; + + } + + } + + }, + + // remember the state of the bound property and copy it to both accus + saveOriginalState: function () { + + var binding = this.binding; + + var buffer = this.buffer, + stride = this.valueSize, + + originalValueOffset = stride * 3; + + binding.getValue( buffer, originalValueOffset ); + + // accu[0..1] := orig -- initially detect changes against the original + for ( var i = stride, e = originalValueOffset; i !== e; ++ i ) { + + buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; + + } + + this.cumulativeWeight = 0; + + }, + + // apply the state previously taken via 'saveOriginalState' to the binding + restoreOriginalState: function () { + + var originalValueOffset = this.valueSize * 3; + this.binding.setValue( this.buffer, originalValueOffset ); + + }, + + + // mix functions + + _select: function ( buffer, dstOffset, srcOffset, t, stride ) { + + if ( t >= 0.5 ) { + + for ( var i = 0; i !== stride; ++ i ) { + + buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; + + } + + } + + }, + + _slerp: function ( buffer, dstOffset, srcOffset, t ) { + + Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); + + }, + + _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { + + var s = 1 - t; + + for ( var i = 0; i !== stride; ++ i ) { + + var j = dstOffset + i; + + buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; + + } + + } + +} ); + +/** + * + * A reference to a real property in the scene graph. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function Composite( targetGroup, path, optionalParsedPath ) { + + var parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); + + this._targetGroup = targetGroup; + this._bindings = targetGroup.subscribe_( path, parsedPath ); + +} + +Object.assign( Composite.prototype, { + + getValue: function ( array, offset ) { + + this.bind(); // bind all binding + + var firstValidIndex = this._targetGroup.nCachedObjects_, + binding = this._bindings[ firstValidIndex ]; + + // and only call .getValue on the first + if ( binding !== undefined ) binding.getValue( array, offset ); + + }, + + setValue: function ( array, offset ) { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].setValue( array, offset ); + + } + + }, + + bind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].bind(); + + } + + }, + + unbind: function () { + + var bindings = this._bindings; + + for ( var i = this._targetGroup.nCachedObjects_, + n = bindings.length; i !== n; ++ i ) { + + bindings[ i ].unbind(); + + } + + } + +} ); + + +function PropertyBinding( rootNode, path, parsedPath ) { + + this.path = path; + this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); + + this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; + + this.rootNode = rootNode; + +} + +Object.assign( PropertyBinding, { + + Composite: Composite, + + create: function ( root, path, parsedPath ) { + + if ( ! ( root && root.isAnimationObjectGroup ) ) { + + return new PropertyBinding( root, path, parsedPath ); + + } else { + + return new PropertyBinding.Composite( root, path, parsedPath ); + + } + + }, + + /** + * Replaces spaces with underscores and removes unsupported characters from + * node names, to ensure compatibility with parseTrackName(). + * + * @param {string} name Node name to be sanitized. + * @return {string} + */ + sanitizeNodeName: function ( name ) { + + return name.replace( /\s/g, '_' ).replace( /[^\w-]/g, '' ); + + }, + + parseTrackName: function () { + + // Parent directories, delimited by '/' or ':'. Currently unused, but must + // be matched to parse the rest of the track name. + var directoryRe = /((?:[\w-]+[\/:])*)/; + + // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. + var nodeRe = /([\w-\.]+)?/; + + // Object on target node, and accessor. Name may contain only word + // characters. Accessor may contain any character except closing bracket. + var objectRe = /(?:\.([\w-]+)(?:\[(.+)\])?)?/; + + // Property and accessor. May contain only word characters. Accessor may + // contain any non-bracket characters. + var propertyRe = /\.([\w-]+)(?:\[(.+)\])?/; + + var trackRe = new RegExp('' + + '^' + + directoryRe.source + + nodeRe.source + + objectRe.source + + propertyRe.source + + '$' + ); + + var supportedObjectNames = [ 'material', 'materials', 'bones' ]; + + return function ( trackName ) { + + var matches = trackRe.exec( trackName ); + + if ( ! matches ) { + + throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); + + } + + var results = { + // directoryName: matches[ 1 ], // (tschw) currently unused + nodeName: matches[ 2 ], + objectName: matches[ 3 ], + objectIndex: matches[ 4 ], + propertyName: matches[ 5 ], // required + propertyIndex: matches[ 6 ] + }; + + var lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); + + if ( lastDot !== undefined && lastDot !== -1 ) { + + var objectName = results.nodeName.substring( lastDot + 1 ); + + // Object names must be checked against a whitelist. Otherwise, there + // is no way to parse 'foo.bar.baz': 'baz' must be a property, but + // 'bar' could be the objectName, or part of a nodeName (which can + // include '.' characters). + if ( supportedObjectNames.indexOf( objectName ) !== -1 ) { + + results.nodeName = results.nodeName.substring( 0, lastDot ); + results.objectName = objectName; + + } + + } + + if ( results.propertyName === null || results.propertyName.length === 0 ) { + + throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); + + } + + return results; + + }; + + }(), + + findNode: function ( root, nodeName ) { + + if ( ! nodeName || nodeName === "" || nodeName === "root" || nodeName === "." || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { + + return root; + + } + + // search into skeleton bones. + if ( root.skeleton ) { + + var searchSkeleton = function ( skeleton ) { + + for ( var i = 0; i < skeleton.bones.length; i ++ ) { + + var bone = skeleton.bones[ i ]; + + if ( bone.name === nodeName ) { + + return bone; + + } + + } + + return null; + + }; + + var bone = searchSkeleton( root.skeleton ); + + if ( bone ) { + + return bone; + + } + + } + + // search into node subtree. + if ( root.children ) { + + var searchNodeSubtree = function ( children ) { + + for ( var i = 0; i < children.length; i ++ ) { + + var childNode = children[ i ]; + + if ( childNode.name === nodeName || childNode.uuid === nodeName ) { + + return childNode; + + } + + var result = searchNodeSubtree( childNode.children ); + + if ( result ) return result; + + } + + return null; + + }; + + var subTreeNode = searchNodeSubtree( root.children ); + + if ( subTreeNode ) { + + return subTreeNode; + + } + + } + + return null; + + } + +} ); + +Object.assign( PropertyBinding.prototype, { // prototype, continued + + // these are used to "bind" a nonexistent property + _getValue_unavailable: function () {}, + _setValue_unavailable: function () {}, + + BindingType: { + Direct: 0, + EntireArray: 1, + ArrayElement: 2, + HasFromToArray: 3 + }, + + Versioning: { + None: 0, + NeedsUpdate: 1, + MatrixWorldNeedsUpdate: 2 + }, + + GetterByBindingType: [ + + function getValue_direct( buffer, offset ) { + + buffer[ offset ] = this.node[ this.propertyName ]; + + }, + + function getValue_array( buffer, offset ) { + + var source = this.resolvedProperty; + + for ( var i = 0, n = source.length; i !== n; ++ i ) { + + buffer[ offset ++ ] = source[ i ]; + + } + + }, + + function getValue_arrayElement( buffer, offset ) { + + buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; + + }, + + function getValue_toArray( buffer, offset ) { + + this.resolvedProperty.toArray( buffer, offset ); + + } + + ], + + SetterByBindingTypeAndVersioning: [ + + [ + // Direct + + function setValue_direct( buffer, offset ) { + + this.node[ this.propertyName ] = buffer[ offset ]; + + }, + + function setValue_direct_setNeedsUpdate( buffer, offset ) { + + this.node[ this.propertyName ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.node[ this.propertyName ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // EntireArray + + function setValue_array( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + }, + + function setValue_array_setNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.needsUpdate = true; + + }, + + function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { + + var dest = this.resolvedProperty; + + for ( var i = 0, n = dest.length; i !== n; ++ i ) { + + dest[ i ] = buffer[ offset ++ ]; + + } + + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // ArrayElement + + function setValue_arrayElement( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + + }, + + function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.needsUpdate = true; + + }, + + function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ], [ + + // HasToFromArray + + function setValue_fromArray( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + + }, + + function setValue_fromArray_setNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.needsUpdate = true; + + }, + + function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { + + this.resolvedProperty.fromArray( buffer, offset ); + this.targetObject.matrixWorldNeedsUpdate = true; + + } + + ] + + ], + + getValue: function getValue_unbound( targetArray, offset ) { + + this.bind(); + this.getValue( targetArray, offset ); + + // Note: This class uses a State pattern on a per-method basis: + // 'bind' sets 'this.getValue' / 'setValue' and shadows the + // prototype version of these methods with one that represents + // the bound state. When the property is not found, the methods + // become no-ops. + + }, + + setValue: function getValue_unbound( sourceArray, offset ) { + + this.bind(); + this.setValue( sourceArray, offset ); + + }, + + // create getter / setter pair for a property in the scene graph + bind: function () { + + var targetObject = this.node, + parsedPath = this.parsedPath, + + objectName = parsedPath.objectName, + propertyName = parsedPath.propertyName, + propertyIndex = parsedPath.propertyIndex; + + if ( ! targetObject ) { + + targetObject = PropertyBinding.findNode( + this.rootNode, parsedPath.nodeName ) || this.rootNode; + + this.node = targetObject; + + } + + // set fail state so we can just 'return' on error + this.getValue = this._getValue_unavailable; + this.setValue = this._setValue_unavailable; + + // ensure there is a value node + if ( ! targetObject ) { + + console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); + return; + + } + + if ( objectName ) { + + var objectIndex = parsedPath.objectIndex; + + // special cases were we need to reach deeper into the hierarchy to get the face materials.... + switch ( objectName ) { + + case 'materials': + + if ( ! targetObject.material ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); + return; + + } + + if ( ! targetObject.material.materials ) { + + console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); + return; + + } + + targetObject = targetObject.material.materials; + + break; + + case 'bones': + + if ( ! targetObject.skeleton ) { + + console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); + return; + + } + + // potential future optimization: skip this if propertyIndex is already an integer + // and convert the integer string to a true integer. + + targetObject = targetObject.skeleton.bones; + + // support resolving morphTarget names into indices. + for ( var i = 0; i < targetObject.length; i ++ ) { + + if ( targetObject[ i ].name === objectIndex ) { + + objectIndex = i; + break; + + } + + } + + break; + + default: + + if ( targetObject[ objectName ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); + return; + + } + + targetObject = targetObject[ objectName ]; + + } + + + if ( objectIndex !== undefined ) { + + if ( targetObject[ objectIndex ] === undefined ) { + + console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); + return; + + } + + targetObject = targetObject[ objectIndex ]; + + } + + } + + // resolve property + var nodeProperty = targetObject[ propertyName ]; + + if ( nodeProperty === undefined ) { + + var nodeName = parsedPath.nodeName; + + console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + + '.' + propertyName + ' but it wasn\'t found.', targetObject ); + return; + + } + + // determine versioning scheme + var versioning = this.Versioning.None; + + if ( targetObject.needsUpdate !== undefined ) { // material + + versioning = this.Versioning.NeedsUpdate; + this.targetObject = targetObject; + + } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform + + versioning = this.Versioning.MatrixWorldNeedsUpdate; + this.targetObject = targetObject; + + } + + // determine how the property gets bound + var bindingType = this.BindingType.Direct; + + if ( propertyIndex !== undefined ) { + + // access a sub element of the property array (only primitives are supported right now) + + if ( propertyName === "morphTargetInfluences" ) { + + // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. + + // support resolving morphTarget names into indices. + if ( ! targetObject.geometry ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); + return; + + } + + if ( targetObject.geometry.isBufferGeometry ) { + + if ( ! targetObject.geometry.morphAttributes ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); + return; + + } + + for ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) { + + if ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) { + + propertyIndex = i; + break; + + } + + } + + + } else { + + if ( ! targetObject.geometry.morphTargets ) { + + console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this ); + return; + + } + + for ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) { + + if ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) { + + propertyIndex = i; + break; + + } + + } + + } + + } + + bindingType = this.BindingType.ArrayElement; + + this.resolvedProperty = nodeProperty; + this.propertyIndex = propertyIndex; + + } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { + + // must use copy for Object3D.Euler/Quaternion + + bindingType = this.BindingType.HasFromToArray; + + this.resolvedProperty = nodeProperty; + + } else if ( Array.isArray( nodeProperty ) ) { + + bindingType = this.BindingType.EntireArray; + + this.resolvedProperty = nodeProperty; + + } else { + + this.propertyName = propertyName; + + } + + // select getter / setter + this.getValue = this.GetterByBindingType[ bindingType ]; + this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; + + }, + + unbind: function () { + + this.node = null; + + // back to the prototype version of getValue / setValue + // note: avoiding to mutate the shape of 'this' via 'delete' + this.getValue = this._getValue_unbound; + this.setValue = this._setValue_unbound; + + } + +} ); + +//!\ DECLARE ALIAS AFTER assign prototype ! +Object.assign( PropertyBinding.prototype, { + + // initial state of these methods that calls 'bind' + _getValue_unbound: PropertyBinding.prototype.getValue, + _setValue_unbound: PropertyBinding.prototype.setValue, + +} ); + +/** + * + * A group of objects that receives a shared animation state. + * + * Usage: + * + * - Add objects you would otherwise pass as 'root' to the + * constructor or the .clipAction method of AnimationMixer. + * + * - Instead pass this object as 'root'. + * + * - You can also add and remove objects later when the mixer + * is running. + * + * Note: + * + * Objects of this class appear as one object to the mixer, + * so cache control of the individual objects must be done + * on the group. + * + * Limitation: + * + * - The animated properties must be compatible among the + * all objects in the group. + * + * - A single property can either be controlled through a + * target group or directly, but not both. + * + * @author tschw + */ + +function AnimationObjectGroup( var_args ) { + + this.uuid = _Math.generateUUID(); + + // cached objects followed by the active ones + this._objects = Array.prototype.slice.call( arguments ); + + this.nCachedObjects_ = 0; // threshold + // note: read by PropertyBinding.Composite + + var indices = {}; + this._indicesByUUID = indices; // for bookkeeping + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + indices[ arguments[ i ].uuid ] = i; + + } + + this._paths = []; // inside: string + this._parsedPaths = []; // inside: { we don't care, here } + this._bindings = []; // inside: Array< PropertyBinding > + this._bindingsIndicesByPath = {}; // inside: indices in these arrays + + var scope = this; + + this.stats = { + + objects: { + get total() { return scope._objects.length; }, + get inUse() { return this.total - scope.nCachedObjects_; } + }, + + get bindingsPerObject() { return scope._bindings.length; } + + }; + +} + +Object.assign( AnimationObjectGroup.prototype, { + + isAnimationObjectGroup: true, + + add: function( var_args ) { + + var objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ], + knownObject = undefined; + + if ( index === undefined ) { + + // unknown object -> add it to the ACTIVE region + + index = nObjects ++; + indicesByUUID[ uuid ] = index; + objects.push( object ); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + bindings[ j ].push( + new PropertyBinding( + object, paths[ j ], parsedPaths[ j ] ) ); + + } + + } else if ( index < nCachedObjects ) { + + knownObject = objects[ index ]; + + // move existing object to the ACTIVE region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ]; + + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + indicesByUUID[ uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = lastCached; + + if ( binding === undefined ) { + + // since we do not bother to create new bindings + // for objects that are cached, the binding may + // or may not exist + + binding = new PropertyBinding( + object, paths[ j ], parsedPaths[ j ] ); + + } + + bindingsForPath[ firstActiveIndex ] = binding; + + } + + } else if ( objects[ index ] !== knownObject ) { + + console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); + + } // else the object is already where we want it to be + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + remove: function( var_args ) { + + var objects = this._objects, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined && index >= nCachedObjects ) { + + // move existing object into the CACHED region + + var lastCachedIndex = nCachedObjects ++, + firstActiveObject = objects[ lastCachedIndex ]; + + indicesByUUID[ firstActiveObject.uuid ] = index; + objects[ index ] = firstActiveObject; + + indicesByUUID[ uuid ] = lastCachedIndex; + objects[ lastCachedIndex ] = object; + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + firstActive = bindingsForPath[ lastCachedIndex ], + binding = bindingsForPath[ index ]; + + bindingsForPath[ index ] = firstActive; + bindingsForPath[ lastCachedIndex ] = binding; + + } + + } + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // remove & forget + uncache: function( var_args ) { + + var objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + indicesByUUID = this._indicesByUUID, + bindings = this._bindings, + nBindings = bindings.length; + + for ( var i = 0, n = arguments.length; i !== n; ++ i ) { + + var object = arguments[ i ], + uuid = object.uuid, + index = indicesByUUID[ uuid ]; + + if ( index !== undefined ) { + + delete indicesByUUID[ uuid ]; + + if ( index < nCachedObjects ) { + + // object is cached, shrink the CACHED region + + var firstActiveIndex = -- nCachedObjects, + lastCachedObject = objects[ firstActiveIndex ], + lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + // last cached object takes this object's place + indicesByUUID[ lastCachedObject.uuid ] = index; + objects[ index ] = lastCachedObject; + + // last object goes to the activated slot and pop + indicesByUUID[ lastObject.uuid ] = firstActiveIndex; + objects[ firstActiveIndex ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ], + lastCached = bindingsForPath[ firstActiveIndex ], + last = bindingsForPath[ lastIndex ]; + + bindingsForPath[ index ] = lastCached; + bindingsForPath[ firstActiveIndex ] = last; + bindingsForPath.pop(); + + } + + } else { + + // object is active, just swap with the last and pop + + var lastIndex = -- nObjects, + lastObject = objects[ lastIndex ]; + + indicesByUUID[ lastObject.uuid ] = index; + objects[ index ] = lastObject; + objects.pop(); + + // accounting is done, now do the same for all bindings + + for ( var j = 0, m = nBindings; j !== m; ++ j ) { + + var bindingsForPath = bindings[ j ]; + + bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; + bindingsForPath.pop(); + + } + + } // cached or active + + } // if object is known + + } // for arguments + + this.nCachedObjects_ = nCachedObjects; + + }, + + // Internal interface used by befriended PropertyBinding.Composite: + + subscribe_: function ( path, parsedPath ) { + + // returns an array of bindings for the given path that is changed + // according to the contained objects in the group + + var indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ], + bindings = this._bindings; + + if ( index !== undefined ) return bindings[ index ]; + + var paths = this._paths, + parsedPaths = this._parsedPaths, + objects = this._objects, + nObjects = objects.length, + nCachedObjects = this.nCachedObjects_, + bindingsForPath = new Array( nObjects ); + + index = bindings.length; + + indicesByPath[ path ] = index; + + paths.push( path ); + parsedPaths.push( parsedPath ); + bindings.push( bindingsForPath ); + + for ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) { + + var object = objects[ i ]; + bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); + + } + + return bindingsForPath; + + }, + + unsubscribe_: function ( path ) { + + // tells the group to forget about a property path and no longer + // update the array previously obtained with 'subscribe_' + + var indicesByPath = this._bindingsIndicesByPath, + index = indicesByPath[ path ]; + + if ( index !== undefined ) { + + var paths = this._paths, + parsedPaths = this._parsedPaths, + bindings = this._bindings, + lastBindingsIndex = bindings.length - 1, + lastBindings = bindings[ lastBindingsIndex ], + lastBindingsPath = path[ lastBindingsIndex ]; + + indicesByPath[ lastBindingsPath ] = index; + + bindings[ index ] = lastBindings; + bindings.pop(); + + parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; + parsedPaths.pop(); + + paths[ index ] = paths[ lastBindingsIndex ]; + paths.pop(); + + } + + } + +} ); + +/** + * + * Action provided by AnimationMixer for scheduling clip playback on specific + * objects. + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + * + */ + +function AnimationAction( mixer, clip, localRoot ) { + + this._mixer = mixer; + this._clip = clip; + this._localRoot = localRoot || null; + + var tracks = clip.tracks, + nTracks = tracks.length, + interpolants = new Array( nTracks ); + + var interpolantSettings = { + endingStart: ZeroCurvatureEnding, + endingEnd: ZeroCurvatureEnding + }; + + for ( var i = 0; i !== nTracks; ++ i ) { + + var interpolant = tracks[ i ].createInterpolant( null ); + interpolants[ i ] = interpolant; + interpolant.settings = interpolantSettings; + + } + + this._interpolantSettings = interpolantSettings; + + this._interpolants = interpolants; // bound by the mixer + + // inside: PropertyMixer (managed by the mixer) + this._propertyBindings = new Array( nTracks ); + + this._cacheIndex = null; // for the memory manager + this._byClipCacheIndex = null; // for the memory manager + + this._timeScaleInterpolant = null; + this._weightInterpolant = null; + + this.loop = LoopRepeat; + this._loopCount = -1; + + // global mixer time when the action is to be started + // it's set back to 'null' upon start of the action + this._startTime = null; + + // scaled local time of the action + // gets clamped or wrapped to 0..clip.duration according to loop + this.time = 0; + + this.timeScale = 1; + this._effectiveTimeScale = 1; + + this.weight = 1; + this._effectiveWeight = 1; + + this.repetitions = Infinity; // no. of repetitions when looping + + this.paused = false; // true -> zero effective time scale + this.enabled = true; // false -> zero effective weight + + this.clampWhenFinished = false; // keep feeding the last frame? + + this.zeroSlopeAtStart = true; // for smooth interpolation w/o separate + this.zeroSlopeAtEnd = true; // clips for start, loop and end + +} + +Object.assign( AnimationAction.prototype, { + + // State & Scheduling + + play: function() { + + this._mixer._activateAction( this ); + + return this; + + }, + + stop: function() { + + this._mixer._deactivateAction( this ); + + return this.reset(); + + }, + + reset: function() { + + this.paused = false; + this.enabled = true; + + this.time = 0; // restart clip + this._loopCount = -1; // forget previous loops + this._startTime = null; // forget scheduling + + return this.stopFading().stopWarping(); + + }, + + isRunning: function() { + + return this.enabled && ! this.paused && this.timeScale !== 0 && + this._startTime === null && this._mixer._isActiveAction( this ); + + }, + + // return true when play has been called + isScheduled: function() { + + return this._mixer._isActiveAction( this ); + + }, + + startAt: function( time ) { + + this._startTime = time; + + return this; + + }, + + setLoop: function( mode, repetitions ) { + + this.loop = mode; + this.repetitions = repetitions; + + return this; + + }, + + // Weight + + // set the weight stopping any scheduled fading + // although .enabled = false yields an effective weight of zero, this + // method does *not* change .enabled, because it would be confusing + setEffectiveWeight: function( weight ) { + + this.weight = weight; + + // note: same logic as when updated at runtime + this._effectiveWeight = this.enabled ? weight : 0; + + return this.stopFading(); + + }, + + // return the weight considering fading and .enabled + getEffectiveWeight: function() { + + return this._effectiveWeight; + + }, + + fadeIn: function( duration ) { + + return this._scheduleFading( duration, 0, 1 ); + + }, + + fadeOut: function( duration ) { + + return this._scheduleFading( duration, 1, 0 ); + + }, + + crossFadeFrom: function( fadeOutAction, duration, warp ) { + + fadeOutAction.fadeOut( duration ); + this.fadeIn( duration ); + + if( warp ) { + + var fadeInDuration = this._clip.duration, + fadeOutDuration = fadeOutAction._clip.duration, + + startEndRatio = fadeOutDuration / fadeInDuration, + endStartRatio = fadeInDuration / fadeOutDuration; + + fadeOutAction.warp( 1.0, startEndRatio, duration ); + this.warp( endStartRatio, 1.0, duration ); + + } + + return this; + + }, + + crossFadeTo: function( fadeInAction, duration, warp ) { + + return fadeInAction.crossFadeFrom( this, duration, warp ); + + }, + + stopFading: function() { + + var weightInterpolant = this._weightInterpolant; + + if ( weightInterpolant !== null ) { + + this._weightInterpolant = null; + this._mixer._takeBackControlInterpolant( weightInterpolant ); + + } + + return this; + + }, + + // Time Scale Control + + // set the time scale stopping any scheduled warping + // although .paused = true yields an effective time scale of zero, this + // method does *not* change .paused, because it would be confusing + setEffectiveTimeScale: function( timeScale ) { + + this.timeScale = timeScale; + this._effectiveTimeScale = this.paused ? 0 :timeScale; + + return this.stopWarping(); + + }, + + // return the time scale considering warping and .paused + getEffectiveTimeScale: function() { + + return this._effectiveTimeScale; + + }, + + setDuration: function( duration ) { + + this.timeScale = this._clip.duration / duration; + + return this.stopWarping(); + + }, + + syncWith: function( action ) { + + this.time = action.time; + this.timeScale = action.timeScale; + + return this.stopWarping(); + + }, + + halt: function( duration ) { + + return this.warp( this._effectiveTimeScale, 0, duration ); + + }, + + warp: function( startTimeScale, endTimeScale, duration ) { + + var mixer = this._mixer, now = mixer.time, + interpolant = this._timeScaleInterpolant, + + timeScale = this.timeScale; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._timeScaleInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; + times[ 1 ] = now + duration; + + values[ 0 ] = startTimeScale / timeScale; + values[ 1 ] = endTimeScale / timeScale; + + return this; + + }, + + stopWarping: function() { + + var timeScaleInterpolant = this._timeScaleInterpolant; + + if ( timeScaleInterpolant !== null ) { + + this._timeScaleInterpolant = null; + this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); + + } + + return this; + + }, + + // Object Accessors + + getMixer: function() { + + return this._mixer; + + }, + + getClip: function() { + + return this._clip; + + }, + + getRoot: function() { + + return this._localRoot || this._mixer._root; + + }, + + // Interna + + _update: function( time, deltaTime, timeDirection, accuIndex ) { + + // called by the mixer + + if ( ! this.enabled ) { + + // call ._updateWeight() to update ._effectiveWeight + + this._updateWeight( time ); + return; + + } + + var startTime = this._startTime; + + if ( startTime !== null ) { + + // check for scheduled start of action + + var timeRunning = ( time - startTime ) * timeDirection; + if ( timeRunning < 0 || timeDirection === 0 ) { + + return; // yet to come / don't decide when delta = 0 + + } + + // start + + this._startTime = null; // unschedule + deltaTime = timeDirection * timeRunning; + + } + + // apply time scale and advance time + + deltaTime *= this._updateTimeScale( time ); + var clipTime = this._updateTime( deltaTime ); + + // note: _updateTime may disable the action resulting in + // an effective weight of 0 + + var weight = this._updateWeight( time ); + + if ( weight > 0 ) { + + var interpolants = this._interpolants; + var propertyMixers = this._propertyBindings; + + for ( var j = 0, m = interpolants.length; j !== m; ++ j ) { + + interpolants[ j ].evaluate( clipTime ); + propertyMixers[ j ].accumulate( accuIndex, weight ); + + } + + } + + }, + + _updateWeight: function( time ) { + + var weight = 0; + + if ( this.enabled ) { + + weight = this.weight; + var interpolant = this._weightInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + weight *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopFading(); + + if ( interpolantValue === 0 ) { + + // faded out, disable + this.enabled = false; + + } + + } + + } + + } + + this._effectiveWeight = weight; + return weight; + + }, + + _updateTimeScale: function( time ) { + + var timeScale = 0; + + if ( ! this.paused ) { + + timeScale = this.timeScale; + + var interpolant = this._timeScaleInterpolant; + + if ( interpolant !== null ) { + + var interpolantValue = interpolant.evaluate( time )[ 0 ]; + + timeScale *= interpolantValue; + + if ( time > interpolant.parameterPositions[ 1 ] ) { + + this.stopWarping(); + + if ( timeScale === 0 ) { + + // motion has halted, pause + this.paused = true; + + } else { + + // warp done - apply final time scale + this.timeScale = timeScale; + + } + + } + + } + + } + + this._effectiveTimeScale = timeScale; + return timeScale; + + }, + + _updateTime: function( deltaTime ) { + + var time = this.time + deltaTime; + + if ( deltaTime === 0 ) return time; + + var duration = this._clip.duration, + + loop = this.loop, + loopCount = this._loopCount; + + if ( loop === LoopOnce ) { + + if ( loopCount === -1 ) { + // just started + + this._loopCount = 0; + this._setEndings( true, true, false ); + + } + + handle_stop: { + + if ( time >= duration ) { + + time = duration; + + } else if ( time < 0 ) { + + time = 0; + + } else break handle_stop; + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime < 0 ? -1 : 1 + } ); + + } + + } else { // repetitive Repeat or PingPong + + var pingPong = ( loop === LoopPingPong ); + + if ( loopCount === -1 ) { + // just started + + if ( deltaTime >= 0 ) { + + loopCount = 0; + + this._setEndings( + true, this.repetitions === 0, pingPong ); + + } else { + + // when looping in reverse direction, the initial + // transition through zero counts as a repetition, + // so leave loopCount at -1 + + this._setEndings( + this.repetitions === 0, true, pingPong ); + + } + + } + + if ( time >= duration || time < 0 ) { + // wrap around + + var loopDelta = Math.floor( time / duration ); // signed + time -= duration * loopDelta; + + loopCount += Math.abs( loopDelta ); + + var pending = this.repetitions - loopCount; + + if ( pending < 0 ) { + // have to stop (switch state, clamp time, fire event) + + if ( this.clampWhenFinished ) this.paused = true; + else this.enabled = false; + + time = deltaTime > 0 ? duration : 0; + + this._mixer.dispatchEvent( { + type: 'finished', action: this, + direction: deltaTime > 0 ? 1 : -1 + } ); + + } else { + // keep running + + if ( pending === 0 ) { + // entering the last round + + var atStart = deltaTime < 0; + this._setEndings( atStart, ! atStart, pingPong ); + + } else { + + this._setEndings( false, false, pingPong ); + + } + + this._loopCount = loopCount; + + this._mixer.dispatchEvent( { + type: 'loop', action: this, loopDelta: loopDelta + } ); + + } + + } + + if ( pingPong && ( loopCount & 1 ) === 1 ) { + // invert time for the "pong round" + + this.time = time; + return duration - time; + + } + + } + + this.time = time; + return time; + + }, + + _setEndings: function( atStart, atEnd, pingPong ) { + + var settings = this._interpolantSettings; + + if ( pingPong ) { + + settings.endingStart = ZeroSlopeEnding; + settings.endingEnd = ZeroSlopeEnding; + + } else { + + // assuming for LoopOnce atStart == atEnd == true + + if ( atStart ) { + + settings.endingStart = this.zeroSlopeAtStart ? + ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingStart = WrapAroundEnding; + + } + + if ( atEnd ) { + + settings.endingEnd = this.zeroSlopeAtEnd ? + ZeroSlopeEnding : ZeroCurvatureEnding; + + } else { + + settings.endingEnd = WrapAroundEnding; + + } + + } + + }, + + _scheduleFading: function( duration, weightNow, weightThen ) { + + var mixer = this._mixer, now = mixer.time, + interpolant = this._weightInterpolant; + + if ( interpolant === null ) { + + interpolant = mixer._lendControlInterpolant(); + this._weightInterpolant = interpolant; + + } + + var times = interpolant.parameterPositions, + values = interpolant.sampleValues; + + times[ 0 ] = now; values[ 0 ] = weightNow; + times[ 1 ] = now + duration; values[ 1 ] = weightThen; + + return this; + + } + +} ); + +/** + * + * Player for AnimationClips. + * + * + * @author Ben Houston / http://clara.io/ + * @author David Sarno / http://lighthaus.us/ + * @author tschw + */ + +function AnimationMixer( root ) { + + this._root = root; + this._initMemoryManager(); + this._accuIndex = 0; + + this.time = 0; + + this.timeScale = 1.0; + +} + +Object.assign( AnimationMixer.prototype, EventDispatcher.prototype, { + + _bindAction: function ( action, prototypeAction ) { + + var root = action._localRoot || this._root, + tracks = action._clip.tracks, + nTracks = tracks.length, + bindings = action._propertyBindings, + interpolants = action._interpolants, + rootUuid = root.uuid, + bindingsByRoot = this._bindingsByRootAndName, + bindingsByName = bindingsByRoot[ rootUuid ]; + + if ( bindingsByName === undefined ) { + + bindingsByName = {}; + bindingsByRoot[ rootUuid ] = bindingsByName; + + } + + for ( var i = 0; i !== nTracks; ++ i ) { + + var track = tracks[ i ], + trackName = track.name, + binding = bindingsByName[ trackName ]; + + if ( binding !== undefined ) { + + bindings[ i ] = binding; + + } else { + + binding = bindings[ i ]; + + if ( binding !== undefined ) { + + // existing binding, make sure the cache knows + + if ( binding._cacheIndex === null ) { + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + } + + continue; + + } + + var path = prototypeAction && prototypeAction. + _propertyBindings[ i ].binding.parsedPath; + + binding = new PropertyMixer( + PropertyBinding.create( root, trackName, path ), + track.ValueTypeName, track.getValueSize() ); + + ++ binding.referenceCount; + this._addInactiveBinding( binding, rootUuid, trackName ); + + bindings[ i ] = binding; + + } + + interpolants[ i ].resultBuffer = binding.buffer; + + } + + }, + + _activateAction: function ( action ) { + + if ( ! this._isActiveAction( action ) ) { + + if ( action._cacheIndex === null ) { + + // this action has been forgotten by the cache, but the user + // appears to be still using it -> rebind + + var rootUuid = ( action._localRoot || this._root ).uuid, + clipUuid = action._clip.uuid, + actionsForClip = this._actionsByClip[ clipUuid ]; + + this._bindAction( action, + actionsForClip && actionsForClip.knownActions[ 0 ] ); + + this._addInactiveAction( action, clipUuid, rootUuid ); + + } + + var bindings = action._propertyBindings; + + // increment reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( binding.useCount ++ === 0 ) { + + this._lendBinding( binding ); + binding.saveOriginalState(); + + } + + } + + this._lendAction( action ); + + } + + }, + + _deactivateAction: function ( action ) { + + if ( this._isActiveAction( action ) ) { + + var bindings = action._propertyBindings; + + // decrement reference counts / sort out state + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.useCount === 0 ) { + + binding.restoreOriginalState(); + this._takeBackBinding( binding ); + + } + + } + + this._takeBackAction( action ); + + } + + }, + + // Memory manager + + _initMemoryManager: function () { + + this._actions = []; // 'nActiveActions' followed by inactive ones + this._nActiveActions = 0; + + this._actionsByClip = {}; + // inside: + // { + // knownActions: Array< AnimationAction > - used as prototypes + // actionByRoot: AnimationAction - lookup + // } + + + this._bindings = []; // 'nActiveBindings' followed by inactive ones + this._nActiveBindings = 0; + + this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > + + + this._controlInterpolants = []; // same game as above + this._nActiveControlInterpolants = 0; + + var scope = this; + + this.stats = { + + actions: { + get total() { return scope._actions.length; }, + get inUse() { return scope._nActiveActions; } + }, + bindings: { + get total() { return scope._bindings.length; }, + get inUse() { return scope._nActiveBindings; } + }, + controlInterpolants: { + get total() { return scope._controlInterpolants.length; }, + get inUse() { return scope._nActiveControlInterpolants; } + } + + }; + + }, + + // Memory management for AnimationAction objects + + _isActiveAction: function ( action ) { + + var index = action._cacheIndex; + return index !== null && index < this._nActiveActions; + + }, + + _addInactiveAction: function ( action, clipUuid, rootUuid ) { + + var actions = this._actions, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip === undefined ) { + + actionsForClip = { + + knownActions: [ action ], + actionByRoot: {} + + }; + + action._byClipCacheIndex = 0; + + actionsByClip[ clipUuid ] = actionsForClip; + + } else { + + var knownActions = actionsForClip.knownActions; + + action._byClipCacheIndex = knownActions.length; + knownActions.push( action ); + + } + + action._cacheIndex = actions.length; + actions.push( action ); + + actionsForClip.actionByRoot[ rootUuid ] = action; + + }, + + _removeInactiveAction: function ( action ) { + + var actions = this._actions, + lastInactiveAction = actions[ actions.length - 1 ], + cacheIndex = action._cacheIndex; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + action._cacheIndex = null; + + + var clipUuid = action._clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ], + knownActionsForClip = actionsForClip.knownActions, + + lastKnownAction = + knownActionsForClip[ knownActionsForClip.length - 1 ], + + byClipCacheIndex = action._byClipCacheIndex; + + lastKnownAction._byClipCacheIndex = byClipCacheIndex; + knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; + knownActionsForClip.pop(); + + action._byClipCacheIndex = null; + + + var actionByRoot = actionsForClip.actionByRoot, + rootUuid = ( action._localRoot || this._root ).uuid; + + delete actionByRoot[ rootUuid ]; + + if ( knownActionsForClip.length === 0 ) { + + delete actionsByClip[ clipUuid ]; + + } + + this._removeInactiveBindingsForAction( action ); + + }, + + _removeInactiveBindingsForAction: function ( action ) { + + var bindings = action._propertyBindings; + for ( var i = 0, n = bindings.length; i !== n; ++ i ) { + + var binding = bindings[ i ]; + + if ( -- binding.referenceCount === 0 ) { + + this._removeInactiveBinding( binding ); + + } + + } + + }, + + _lendAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions >| inactive actions ] + // s a + // <-swap-> + // a s + + var actions = this._actions, + prevIndex = action._cacheIndex, + + lastActiveIndex = this._nActiveActions ++, + + firstInactiveAction = actions[ lastActiveIndex ]; + + action._cacheIndex = lastActiveIndex; + actions[ lastActiveIndex ] = action; + + firstInactiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = firstInactiveAction; + + }, + + _takeBackAction: function ( action ) { + + // [ active actions | inactive actions ] + // [ active actions |< inactive actions ] + // a s + // <-swap-> + // s a + + var actions = this._actions, + prevIndex = action._cacheIndex, + + firstInactiveIndex = -- this._nActiveActions, + + lastActiveAction = actions[ firstInactiveIndex ]; + + action._cacheIndex = firstInactiveIndex; + actions[ firstInactiveIndex ] = action; + + lastActiveAction._cacheIndex = prevIndex; + actions[ prevIndex ] = lastActiveAction; + + }, + + // Memory management for PropertyMixer objects + + _addInactiveBinding: function ( binding, rootUuid, trackName ) { + + var bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + bindings = this._bindings; + + if ( bindingByName === undefined ) { + + bindingByName = {}; + bindingsByRoot[ rootUuid ] = bindingByName; + + } + + bindingByName[ trackName ] = binding; + + binding._cacheIndex = bindings.length; + bindings.push( binding ); + + }, + + _removeInactiveBinding: function ( binding ) { + + var bindings = this._bindings, + propBinding = binding.binding, + rootUuid = propBinding.rootNode.uuid, + trackName = propBinding.path, + bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ], + + lastInactiveBinding = bindings[ bindings.length - 1 ], + cacheIndex = binding._cacheIndex; + + lastInactiveBinding._cacheIndex = cacheIndex; + bindings[ cacheIndex ] = lastInactiveBinding; + bindings.pop(); + + delete bindingByName[ trackName ]; + + remove_empty_map: { + + for ( var _ in bindingByName ) break remove_empty_map; + + delete bindingsByRoot[ rootUuid ]; + + } + + }, + + _lendBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + lastActiveIndex = this._nActiveBindings ++, + + firstInactiveBinding = bindings[ lastActiveIndex ]; + + binding._cacheIndex = lastActiveIndex; + bindings[ lastActiveIndex ] = binding; + + firstInactiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = firstInactiveBinding; + + }, + + _takeBackBinding: function ( binding ) { + + var bindings = this._bindings, + prevIndex = binding._cacheIndex, + + firstInactiveIndex = -- this._nActiveBindings, + + lastActiveBinding = bindings[ firstInactiveIndex ]; + + binding._cacheIndex = firstInactiveIndex; + bindings[ firstInactiveIndex ] = binding; + + lastActiveBinding._cacheIndex = prevIndex; + bindings[ prevIndex ] = lastActiveBinding; + + }, + + + // Memory management of Interpolants for weight and time scale + + _lendControlInterpolant: function () { + + var interpolants = this._controlInterpolants, + lastActiveIndex = this._nActiveControlInterpolants ++, + interpolant = interpolants[ lastActiveIndex ]; + + if ( interpolant === undefined ) { + + interpolant = new LinearInterpolant( + new Float32Array( 2 ), new Float32Array( 2 ), + 1, this._controlInterpolantsResultBuffer ); + + interpolant.__cacheIndex = lastActiveIndex; + interpolants[ lastActiveIndex ] = interpolant; + + } + + return interpolant; + + }, + + _takeBackControlInterpolant: function ( interpolant ) { + + var interpolants = this._controlInterpolants, + prevIndex = interpolant.__cacheIndex, + + firstInactiveIndex = -- this._nActiveControlInterpolants, + + lastActiveInterpolant = interpolants[ firstInactiveIndex ]; + + interpolant.__cacheIndex = firstInactiveIndex; + interpolants[ firstInactiveIndex ] = interpolant; + + lastActiveInterpolant.__cacheIndex = prevIndex; + interpolants[ prevIndex ] = lastActiveInterpolant; + + }, + + _controlInterpolantsResultBuffer: new Float32Array( 1 ), + + // return an action for a clip optionally using a custom root target + // object (this method allocates a lot of dynamic memory in case a + // previously unknown clip/root combination is specified) + clipAction: function ( clip, optionalRoot ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject !== null ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ], + prototypeAction = null; + + if ( actionsForClip !== undefined ) { + + var existingAction = + actionsForClip.actionByRoot[ rootUuid ]; + + if ( existingAction !== undefined ) { + + return existingAction; + + } + + // we know the clip, so we don't have to parse all + // the bindings again but can just copy + prototypeAction = actionsForClip.knownActions[ 0 ]; + + // also, take the clip from the prototype action + if ( clipObject === null ) + clipObject = prototypeAction._clip; + + } + + // clip must be known when specified via string + if ( clipObject === null ) return null; + + // allocate all resources required to run it + var newAction = new AnimationAction( this, clipObject, optionalRoot ); + + this._bindAction( newAction, prototypeAction ); + + // and make the action known to the memory manager + this._addInactiveAction( newAction, clipUuid, rootUuid ); + + return newAction; + + }, + + // get an existing action + existingAction: function ( clip, optionalRoot ) { + + var root = optionalRoot || this._root, + rootUuid = root.uuid, + + clipObject = typeof clip === 'string' ? + AnimationClip.findByName( root, clip ) : clip, + + clipUuid = clipObject ? clipObject.uuid : clip, + + actionsForClip = this._actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + return actionsForClip.actionByRoot[ rootUuid ] || null; + + } + + return null; + + }, + + // deactivates all previously scheduled actions + stopAllAction: function () { + + var actions = this._actions, + nActions = this._nActiveActions, + bindings = this._bindings, + nBindings = this._nActiveBindings; + + this._nActiveActions = 0; + this._nActiveBindings = 0; + + for ( var i = 0; i !== nActions; ++ i ) { + + actions[ i ].reset(); + + } + + for ( var i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].useCount = 0; + + } + + return this; + + }, + + // advance the time and update apply the animation + update: function ( deltaTime ) { + + deltaTime *= this.timeScale; + + var actions = this._actions, + nActions = this._nActiveActions, + + time = this.time += deltaTime, + timeDirection = Math.sign( deltaTime ), + + accuIndex = this._accuIndex ^= 1; + + // run active actions + + for ( var i = 0; i !== nActions; ++ i ) { + + var action = actions[ i ]; + + action._update( time, deltaTime, timeDirection, accuIndex ); + + } + + // update scene graph + + var bindings = this._bindings, + nBindings = this._nActiveBindings; + + for ( var i = 0; i !== nBindings; ++ i ) { + + bindings[ i ].apply( accuIndex ); + + } + + return this; + + }, + + // return this mixer's root target object + getRoot: function () { + + return this._root; + + }, + + // free all resources specific to a particular clip + uncacheClip: function ( clip ) { + + var actions = this._actions, + clipUuid = clip.uuid, + actionsByClip = this._actionsByClip, + actionsForClip = actionsByClip[ clipUuid ]; + + if ( actionsForClip !== undefined ) { + + // note: just calling _removeInactiveAction would mess up the + // iteration state and also require updating the state we can + // just throw away + + var actionsToRemove = actionsForClip.knownActions; + + for ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) { + + var action = actionsToRemove[ i ]; + + this._deactivateAction( action ); + + var cacheIndex = action._cacheIndex, + lastInactiveAction = actions[ actions.length - 1 ]; + + action._cacheIndex = null; + action._byClipCacheIndex = null; + + lastInactiveAction._cacheIndex = cacheIndex; + actions[ cacheIndex ] = lastInactiveAction; + actions.pop(); + + this._removeInactiveBindingsForAction( action ); + + } + + delete actionsByClip[ clipUuid ]; + + } + + }, + + // free all resources specific to a particular root target object + uncacheRoot: function ( root ) { + + var rootUuid = root.uuid, + actionsByClip = this._actionsByClip; + + for ( var clipUuid in actionsByClip ) { + + var actionByRoot = actionsByClip[ clipUuid ].actionByRoot, + action = actionByRoot[ rootUuid ]; + + if ( action !== undefined ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + + var bindingsByRoot = this._bindingsByRootAndName, + bindingByName = bindingsByRoot[ rootUuid ]; + + if ( bindingByName !== undefined ) { + + for ( var trackName in bindingByName ) { + + var binding = bindingByName[ trackName ]; + binding.restoreOriginalState(); + this._removeInactiveBinding( binding ); + + } + + } + + }, + + // remove a targeted clip from the cache + uncacheAction: function ( clip, optionalRoot ) { + + var action = this.existingAction( clip, optionalRoot ); + + if ( action !== null ) { + + this._deactivateAction( action ); + this._removeInactiveAction( action ); + + } + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Uniform( value ) { + + if ( typeof value === 'string' ) { + + console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); + value = arguments[ 1 ]; + + } + + this.value = value; + +} + +Uniform.prototype.clone = function () { + + return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); + +}; + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedBufferGeometry() { + + BufferGeometry.call( this ); + + this.type = 'InstancedBufferGeometry'; + this.maxInstancedCount = undefined; + +} + +InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { + + constructor: InstancedBufferGeometry, + + isInstancedBufferGeometry: true, + + addGroup: function ( start, count, materialIndex ) { + + this.groups.push( { + + start: start, + count: count, + materialIndex: materialIndex + + } ); + + }, + + copy: function ( source ) { + + var index = source.index; + + if ( index !== null ) { + + this.setIndex( index.clone() ); + + } + + var attributes = source.attributes; + + for ( var name in attributes ) { + + var attribute = attributes[ name ]; + this.addAttribute( name, attribute.clone() ); + + } + + var groups = source.groups; + + for ( var i = 0, l = groups.length; i < l; i ++ ) { + + var group = groups[ i ]; + this.addGroup( group.start, group.count, group.materialIndex ); + + } + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { + + this.uuid = _Math.generateUUID(); + + this.data = interleavedBuffer; + this.itemSize = itemSize; + this.offset = offset; + + this.normalized = normalized === true; + +} + +Object.defineProperties( InterleavedBufferAttribute.prototype, { + + count: { + + get: function () { + + return this.data.count; + + } + + }, + + array: { + + get: function () { + + return this.data.array; + + } + + } + +} ); + +Object.assign( InterleavedBufferAttribute.prototype, { + + isInterleavedBufferAttribute: true, + + setX: function ( index, x ) { + + this.data.array[ index * this.data.stride + this.offset ] = x; + + return this; + + }, + + setY: function ( index, y ) { + + this.data.array[ index * this.data.stride + this.offset + 1 ] = y; + + return this; + + }, + + setZ: function ( index, z ) { + + this.data.array[ index * this.data.stride + this.offset + 2 ] = z; + + return this; + + }, + + setW: function ( index, w ) { + + this.data.array[ index * this.data.stride + this.offset + 3 ] = w; + + return this; + + }, + + getX: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset ]; + + }, + + getY: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 1 ]; + + }, + + getZ: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 2 ]; + + }, + + getW: function ( index ) { + + return this.data.array[ index * this.data.stride + this.offset + 3 ]; + + }, + + setXY: function ( index, x, y ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + + return this; + + }, + + setXYZ: function ( index, x, y, z ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + + return this; + + }, + + setXYZW: function ( index, x, y, z, w ) { + + index = index * this.data.stride + this.offset; + + this.data.array[ index + 0 ] = x; + this.data.array[ index + 1 ] = y; + this.data.array[ index + 2 ] = z; + this.data.array[ index + 3 ] = w; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InterleavedBuffer( array, stride ) { + + this.uuid = _Math.generateUUID(); + + this.array = array; + this.stride = stride; + this.count = array !== undefined ? array.length / stride : 0; + + this.dynamic = false; + this.updateRange = { offset: 0, count: - 1 }; + + this.onUploadCallback = function () {}; + + this.version = 0; + +} + +Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { + + set: function ( value ) { + + if ( value === true ) this.version ++; + + } + +} ); + +Object.assign( InterleavedBuffer.prototype, { + + isInterleavedBuffer: true, + + setArray: function ( array ) { + + if ( Array.isArray( array ) ) { + + throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); + + } + + this.count = array !== undefined ? array.length / this.stride : 0; + this.array = array; + + }, + + setDynamic: function ( value ) { + + this.dynamic = value; + + return this; + + }, + + copy: function ( source ) { + + this.array = new source.array.constructor( source.array ); + this.count = source.count; + this.stride = source.stride; + this.dynamic = source.dynamic; + + return this; + + }, + + copyAt: function ( index1, attribute, index2 ) { + + index1 *= this.stride; + index2 *= attribute.stride; + + for ( var i = 0, l = this.stride; i < l; i ++ ) { + + this.array[ index1 + i ] = attribute.array[ index2 + i ]; + + } + + return this; + + }, + + set: function ( value, offset ) { + + if ( offset === undefined ) offset = 0; + + this.array.set( value, offset ); + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + onUpload: function ( callback ) { + + this.onUploadCallback = callback; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { + + InterleavedBuffer.call( this, array, stride ); + + this.meshPerAttribute = meshPerAttribute || 1; + +} + +InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { + + constructor: InstancedInterleavedBuffer, + + isInstancedInterleavedBuffer: true, + + copy: function ( source ) { + + InterleavedBuffer.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + +} ); + +/** + * @author benaadams / https://twitter.com/ben_a_adams + */ + +function InstancedBufferAttribute( array, itemSize, meshPerAttribute ) { + + BufferAttribute.call( this, array, itemSize ); + + this.meshPerAttribute = meshPerAttribute || 1; + +} + +InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { + + constructor: InstancedBufferAttribute, + + isInstancedBufferAttribute: true, + + copy: function ( source ) { + + BufferAttribute.prototype.copy.call( this, source ); + + this.meshPerAttribute = source.meshPerAttribute; + + return this; + + } + +} ); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author bhouston / http://clara.io/ + * @author stephomi / http://stephaneginier.com/ + */ + +function Raycaster( origin, direction, near, far ) { + + this.ray = new Ray( origin, direction ); + // direction is assumed to be normalized (for accurate distance calculations) + + this.near = near || 0; + this.far = far || Infinity; + + this.params = { + Mesh: {}, + Line: {}, + LOD: {}, + Points: { threshold: 1 }, + Sprite: {} + }; + + Object.defineProperties( this.params, { + PointCloud: { + get: function () { + console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); + return this.Points; + } + } + } ); + +} + +function ascSort( a, b ) { + + return a.distance - b.distance; + +} + +function intersectObject( object, raycaster, intersects, recursive ) { + + if ( object.visible === false ) return; + + object.raycast( raycaster, intersects ); + + if ( recursive === true ) { + + var children = object.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + intersectObject( children[ i ], raycaster, intersects, true ); + + } + + } + +} + +Object.assign( Raycaster.prototype, { + + linePrecision: 1, + + set: function ( origin, direction ) { + + // direction is assumed to be normalized (for accurate distance calculations) + + this.ray.set( origin, direction ); + + }, + + setFromCamera: function ( coords, camera ) { + + if ( ( camera && camera.isPerspectiveCamera ) ) { + + this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); + this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); + + } else if ( ( camera && camera.isOrthographicCamera ) ) { + + this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera + this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); + + } else { + + console.error( 'THREE.Raycaster: Unsupported camera type.' ); + + } + + }, + + intersectObject: function ( object, recursive ) { + + var intersects = []; + + intersectObject( object, this, intersects, recursive ); + + intersects.sort( ascSort ); + + return intersects; + + }, + + intersectObjects: function ( objects, recursive ) { + + var intersects = []; + + if ( Array.isArray( objects ) === false ) { + + console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); + return intersects; + + } + + for ( var i = 0, l = objects.length; i < l; i ++ ) { + + intersectObject( objects[ i ], this, intersects, recursive ); + + } + + intersects.sort( ascSort ); + + return intersects; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function Clock( autoStart ) { + + this.autoStart = ( autoStart !== undefined ) ? autoStart : true; + + this.startTime = 0; + this.oldTime = 0; + this.elapsedTime = 0; + + this.running = false; + +} + +Object.assign( Clock.prototype, { + + start: function () { + + this.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 + + this.oldTime = this.startTime; + this.elapsedTime = 0; + this.running = true; + + }, + + stop: function () { + + this.getElapsedTime(); + this.running = false; + this.autoStart = false; + + }, + + getElapsedTime: function () { + + this.getDelta(); + return this.elapsedTime; + + }, + + getDelta: function () { + + var diff = 0; + + if ( this.autoStart && ! this.running ) { + + this.start(); + return 0; + + } + + if ( this.running ) { + + var newTime = ( typeof performance === 'undefined' ? Date : performance ).now(); + + diff = ( newTime - this.oldTime ) / 1000; + this.oldTime = newTime; + + this.elapsedTime += diff; + + } + + return diff; + + } + +} ); + +/** + * @author bhouston / http://clara.io + * @author WestLangley / http://github.com/WestLangley + * + * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system + * + * The poles (phi) are at the positive and negative y axis. + * The equator starts at positive z. + */ + +function Spherical( radius, phi, theta ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; + this.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole + this.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere + + return this; + +} + +Object.assign( Spherical.prototype, { + + set: function ( radius, phi, theta ) { + + this.radius = radius; + this.phi = phi; + this.theta = theta; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( other ) { + + this.radius = other.radius; + this.phi = other.phi; + this.theta = other.theta; + + return this; + + }, + + // restrict phi to be betwee EPS and PI-EPS + makeSafe: function() { + + var EPS = 0.000001; + this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); + + return this; + + }, + + setFromVector3: function( vec3 ) { + + this.radius = vec3.length(); + + if ( this.radius === 0 ) { + + this.theta = 0; + this.phi = 0; + + } else { + + this.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis + this.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle + + } + + return this; + + } + +} ); + +/** + * @author Mugen87 / https://github.com/Mugen87 + * + * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system + * + */ + +function Cylindrical( radius, theta, y ) { + + this.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane + this.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis + this.y = ( y !== undefined ) ? y : 0; // height above the x-z plane + + return this; + +} + +Object.assign( Cylindrical.prototype, { + + set: function ( radius, theta, y ) { + + this.radius = radius; + this.theta = theta; + this.y = y; + + return this; + + }, + + clone: function () { + + return new this.constructor().copy( this ); + + }, + + copy: function ( other ) { + + this.radius = other.radius; + this.theta = other.theta; + this.y = other.y; + + return this; + + }, + + setFromVector3: function( vec3 ) { + + this.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z ); + this.theta = Math.atan2( vec3.x, vec3.z ); + this.y = vec3.y; + + return this; + + } + +} ); + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +function ImmediateRenderObject( material ) { + + Object3D.call( this ); + + this.material = material; + this.render = function ( renderCallback ) {}; + +} + +ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); +ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; + +ImmediateRenderObject.prototype.isImmediateRenderObject = true; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function VertexNormalsHelper( object, size, hex, linewidth ) { + + this.object = object; + + this.size = ( size !== undefined ) ? size : 1; + + var color = ( hex !== undefined ) ? hex : 0xff0000; + + var width = ( linewidth !== undefined ) ? linewidth : 1; + + // + + var nNormals = 0; + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + nNormals = objGeometry.faces.length * 3; + + } else if ( objGeometry && objGeometry.isBufferGeometry ) { + + nNormals = objGeometry.attributes.normal.count; + + } + + // + + var geometry = new BufferGeometry(); + + var positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 ); + + geometry.addAttribute( 'position', positions ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) ); + + // + + this.matrixAutoUpdate = false; + + this.update(); + +} + +VertexNormalsHelper.prototype = Object.create( LineSegments.prototype ); +VertexNormalsHelper.prototype.constructor = VertexNormalsHelper; + +VertexNormalsHelper.prototype.update = ( function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var normalMatrix = new Matrix3(); + + return function update() { + + var keys = [ 'a', 'b', 'c' ]; + + this.object.updateMatrixWorld( true ); + + normalMatrix.getNormalMatrix( this.object.matrixWorld ); + + var matrixWorld = this.object.matrixWorld; + + var position = this.geometry.attributes.position; + + // + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + var vertices = objGeometry.vertices; + + var faces = objGeometry.faces; + + var idx = 0; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + for ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { + + var vertex = vertices[ face[ keys[ j ] ] ]; + + var normal = face.vertexNormals[ j ]; + + v1.copy( vertex ).applyMatrix4( matrixWorld ); + + v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + } + + } else if ( objGeometry && objGeometry.isBufferGeometry ) { + + var objPos = objGeometry.attributes.position; + + var objNorm = objGeometry.attributes.normal; + + var idx = 0; + + // for simplicity, ignore index and drawcalls, and render every normal + + for ( var j = 0, jl = objPos.count; j < jl; j ++ ) { + + v1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld ); + + v2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) ); + + v2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + } + + position.needsUpdate = true; + + }; + +}() ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function SpotLightHelper( light, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new BufferGeometry(); + + var positions = [ + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 1, + 0, 0, 0, - 1, 0, 1, + 0, 0, 0, 0, 1, 1, + 0, 0, 0, 0, - 1, 1 + ]; + + for ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { + + var p1 = ( i / l ) * Math.PI * 2; + var p2 = ( j / l ) * Math.PI * 2; + + positions.push( + Math.cos( p1 ), Math.sin( p1 ), 1, + Math.cos( p2 ), Math.sin( p2 ), 1 + ); + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + var material = new LineBasicMaterial( { fog: false } ); + + this.cone = new LineSegments( geometry, material ); + this.add( this.cone ); + + this.update(); + +} + +SpotLightHelper.prototype = Object.create( Object3D.prototype ); +SpotLightHelper.prototype.constructor = SpotLightHelper; + +SpotLightHelper.prototype.dispose = function () { + + this.cone.geometry.dispose(); + this.cone.material.dispose(); + +}; + +SpotLightHelper.prototype.update = function () { + + var vector = new Vector3(); + var vector2 = new Vector3(); + + return function update() { + + this.light.updateMatrixWorld(); + + var coneLength = this.light.distance ? this.light.distance : 1000; + var coneWidth = coneLength * Math.tan( this.light.angle ); + + this.cone.scale.set( coneWidth, coneWidth, coneLength ); + + vector.setFromMatrixPosition( this.light.matrixWorld ); + vector2.setFromMatrixPosition( this.light.target.matrixWorld ); + + this.cone.lookAt( vector2.sub( vector ) ); + + if ( this.color !== undefined ) { + + this.cone.material.color.set( this.color ); + + } else { + + this.cone.material.color.copy( this.light.color ); + + } + + }; + +}(); + +/** + * @author Sean Griffin / http://twitter.com/sgrif + * @author Michael Guerrero / http://realitymeltdown.com + * @author mrdoob / http://mrdoob.com/ + * @author ikerr / http://verold.com + * @author Mugen87 / https://github.com/Mugen87 + */ + +function getBoneList( object ) { + + var boneList = []; + + if ( object && object.isBone ) { + + boneList.push( object ); + + } + + for ( var i = 0; i < object.children.length; i ++ ) { + + boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); + + } + + return boneList; + +} + +function SkeletonHelper( object ) { + + var bones = getBoneList( object ); + + var geometry = new BufferGeometry(); + + var vertices = []; + var colors = []; + + var color1 = new Color( 0, 0, 1 ); + var color2 = new Color( 0, 1, 0 ); + + for ( var i = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + vertices.push( 0, 0, 0 ); + vertices.push( 0, 0, 0 ); + colors.push( color1.r, color1.g, color1.b ); + colors.push( color2.r, color2.g, color2.b ); + + } + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } ); + + LineSegments.call( this, geometry, material ); + + this.root = object; + this.bones = bones; + + this.matrix = object.matrixWorld; + this.matrixAutoUpdate = false; + + this.onBeforeRender(); + +} + +SkeletonHelper.prototype = Object.create( LineSegments.prototype ); +SkeletonHelper.prototype.constructor = SkeletonHelper; + +SkeletonHelper.prototype.onBeforeRender = function () { + + var vector = new Vector3(); + + var boneMatrix = new Matrix4(); + var matrixWorldInv = new Matrix4(); + + return function onBeforeRender() { + + var bones = this.bones; + + var geometry = this.geometry; + var position = geometry.getAttribute( 'position' ); + + matrixWorldInv.getInverse( this.root.matrixWorld ); + + for ( var i = 0, j = 0; i < bones.length; i ++ ) { + + var bone = bones[ i ]; + + if ( bone.parent && bone.parent.isBone ) { + + boneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld ); + vector.setFromMatrixPosition( boneMatrix ); + position.setXYZ( j, vector.x, vector.y, vector.z ); + + boneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld ); + vector.setFromMatrixPosition( boneMatrix ); + position.setXYZ( j + 1, vector.x, vector.y, vector.z ); + + j += 2; + + } + + } + + geometry.getAttribute( 'position' ).needsUpdate = true; + + }; + +}(); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + */ + +function PointLightHelper( light, sphereSize, color ) { + + this.light = light; + this.light.updateMatrixWorld(); + + this.color = color; + + var geometry = new SphereBufferGeometry( sphereSize, 4, 2 ); + var material = new MeshBasicMaterial( { wireframe: true, fog: false } ); + + Mesh.call( this, geometry, material ); + + this.matrix = this.light.matrixWorld; + this.matrixAutoUpdate = false; + + this.update(); + + + /* + var distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 ); + var distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); + + this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); + this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); + + var d = light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.scale.set( d, d, d ); + + } + + this.add( this.lightDistance ); + */ + +} + +PointLightHelper.prototype = Object.create( Mesh.prototype ); +PointLightHelper.prototype.constructor = PointLightHelper; + +PointLightHelper.prototype.dispose = function () { + + this.geometry.dispose(); + this.material.dispose(); + +}; + +PointLightHelper.prototype.update = function () { + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + this.material.color.copy( this.light.color ); + + } + + /* + var d = this.light.distance; + + if ( d === 0.0 ) { + + this.lightDistance.visible = false; + + } else { + + this.lightDistance.visible = true; + this.lightDistance.scale.set( d, d, d ); + + } + */ + +}; + +/** + * @author abelnation / http://github.com/abelnation + * @author Mugen87 / http://github.com/Mugen87 + * @author WestLangley / http://github.com/WestLangley + */ + +function RectAreaLightHelper( light, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var material = new LineBasicMaterial( { fog: false } ); + + var geometry = new BufferGeometry(); + + geometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) ); + + this.line = new Line( geometry, material ); + this.add( this.line ); + + + this.update(); + +} + +RectAreaLightHelper.prototype = Object.create( Object3D.prototype ); +RectAreaLightHelper.prototype.constructor = RectAreaLightHelper; + +RectAreaLightHelper.prototype.dispose = function () { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + +}; + +RectAreaLightHelper.prototype.update = function () { + + // calculate new dimensions of the helper + + var hx = this.light.width * 0.5; + var hy = this.light.height * 0.5; + + var position = this.line.geometry.attributes.position; + var array = position.array; + + // update vertices + + array[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0; + array[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0; + array[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0; + array[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0; + array[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0; + + position.needsUpdate = true; + + if ( this.color !== undefined ) { + + this.line.material.color.set( this.color ); + + } else { + + this.line.material.color.copy( this.light.color ); + + } + +}; + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / https://github.com/Mugen87 + */ + +function HemisphereLightHelper( light, size, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + var geometry = new OctahedronBufferGeometry( size ); + geometry.rotateY( Math.PI * 0.5 ); + + this.material = new MeshBasicMaterial( { wireframe: true, fog: false } ); + if ( this.color === undefined ) this.material.vertexColors = VertexColors; + + var position = geometry.getAttribute( 'position' ); + var colors = new Float32Array( position.count * 3 ); + + geometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) ); + + this.add( new Mesh( geometry, this.material ) ); + + this.update(); + +} + +HemisphereLightHelper.prototype = Object.create( Object3D.prototype ); +HemisphereLightHelper.prototype.constructor = HemisphereLightHelper; + +HemisphereLightHelper.prototype.dispose = function () { + + this.children[ 0 ].geometry.dispose(); + this.children[ 0 ].material.dispose(); + +}; + +HemisphereLightHelper.prototype.update = function () { + + var vector = new Vector3(); + + var color1 = new Color(); + var color2 = new Color(); + + return function update() { + + var mesh = this.children[ 0 ]; + + if ( this.color !== undefined ) { + + this.material.color.set( this.color ); + + } else { + + var colors = mesh.geometry.getAttribute( 'color' ); + + color1.copy( this.light.color ); + color2.copy( this.light.groundColor ); + + for ( var i = 0, l = colors.count; i < l; i ++ ) { + + var color = ( i < ( l / 2 ) ) ? color1 : color2; + + colors.setXYZ( i, color.r, color.g, color.b ); + + } + + colors.needsUpdate = true; + + } + + mesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() ); + + }; + +}(); + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function GridHelper( size, divisions, color1, color2 ) { + + size = size || 10; + divisions = divisions || 10; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var center = divisions / 2; + var step = size / divisions; + var halfSize = size / 2; + + var vertices = [], colors = []; + + for ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { + + vertices.push( - halfSize, 0, k, halfSize, 0, k ); + vertices.push( k, 0, - halfSize, k, 0, halfSize ); + + var color = i === center ? color1 : color2; + + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + color.toArray( colors, j ); j += 3; + + } + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +GridHelper.prototype = Object.create( LineSegments.prototype ); +GridHelper.prototype.constructor = GridHelper; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / http://github.com/Mugen87 + * @author Hectate / http://www.github.com/Hectate + */ + +function PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) { + + radius = radius || 10; + radials = radials || 16; + circles = circles || 8; + divisions = divisions || 64; + color1 = new Color( color1 !== undefined ? color1 : 0x444444 ); + color2 = new Color( color2 !== undefined ? color2 : 0x888888 ); + + var vertices = []; + var colors = []; + + var x, z; + var v, i, j, r, color; + + // create the radials + + for ( i = 0; i <= radials; i ++ ) { + + v = ( i / radials ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * radius; + z = Math.cos( v ) * radius; + + vertices.push( 0, 0, 0 ); + vertices.push( x, 0, z ); + + color = ( i & 1 ) ? color1 : color2; + + colors.push( color.r, color.g, color.b ); + colors.push( color.r, color.g, color.b ); + + } + + // create the circles + + for ( i = 0; i <= circles; i ++ ) { + + color = ( i & 1 ) ? color1 : color2; + + r = radius - ( radius / circles * i ); + + for ( j = 0; j < divisions; j ++ ) { + + // first vertex + + v = ( j / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + // second vertex + + v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); + + x = Math.sin( v ) * r; + z = Math.cos( v ) * r; + + vertices.push( x, 0, z ); + colors.push( color.r, color.g, color.b ); + + } + + } + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +PolarGridHelper.prototype = Object.create( LineSegments.prototype ); +PolarGridHelper.prototype.constructor = PolarGridHelper; + +/** + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function FaceNormalsHelper( object, size, hex, linewidth ) { + + // FaceNormalsHelper only supports THREE.Geometry + + this.object = object; + + this.size = ( size !== undefined ) ? size : 1; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var width = ( linewidth !== undefined ) ? linewidth : 1; + + // + + var nNormals = 0; + + var objGeometry = this.object.geometry; + + if ( objGeometry && objGeometry.isGeometry ) { + + nNormals = objGeometry.faces.length; + + } else { + + console.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' ); + + } + + // + + var geometry = new BufferGeometry(); + + var positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 ); + + geometry.addAttribute( 'position', positions ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) ); + + // + + this.matrixAutoUpdate = false; + this.update(); + +} + +FaceNormalsHelper.prototype = Object.create( LineSegments.prototype ); +FaceNormalsHelper.prototype.constructor = FaceNormalsHelper; + +FaceNormalsHelper.prototype.update = ( function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var normalMatrix = new Matrix3(); + + return function update() { + + this.object.updateMatrixWorld( true ); + + normalMatrix.getNormalMatrix( this.object.matrixWorld ); + + var matrixWorld = this.object.matrixWorld; + + var position = this.geometry.attributes.position; + + // + + var objGeometry = this.object.geometry; + + var vertices = objGeometry.vertices; + + var faces = objGeometry.faces; + + var idx = 0; + + for ( var i = 0, l = faces.length; i < l; i ++ ) { + + var face = faces[ i ]; + + var normal = face.normal; + + v1.copy( vertices[ face.a ] ) + .add( vertices[ face.b ] ) + .add( vertices[ face.c ] ) + .divideScalar( 3 ) + .applyMatrix4( matrixWorld ); + + v2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 ); + + position.setXYZ( idx, v1.x, v1.y, v1.z ); + + idx = idx + 1; + + position.setXYZ( idx, v2.x, v2.y, v2.z ); + + idx = idx + 1; + + } + + position.needsUpdate = true; + + }; + +}() ); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author mrdoob / http://mrdoob.com/ + * @author WestLangley / http://github.com/WestLangley + */ + +function DirectionalLightHelper( light, size, color ) { + + Object3D.call( this ); + + this.light = light; + this.light.updateMatrixWorld(); + + this.matrix = light.matrixWorld; + this.matrixAutoUpdate = false; + + this.color = color; + + if ( size === undefined ) size = 1; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( [ + - size, size, 0, + size, size, 0, + size, - size, 0, + - size, - size, 0, + - size, size, 0 + ], 3 ) ); + + var material = new LineBasicMaterial( { fog: false } ); + + this.lightPlane = new Line( geometry, material ); + this.add( this.lightPlane ); + + geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); + + this.targetLine = new Line( geometry, material ); + this.add( this.targetLine ); + + this.update(); + +} + +DirectionalLightHelper.prototype = Object.create( Object3D.prototype ); +DirectionalLightHelper.prototype.constructor = DirectionalLightHelper; + +DirectionalLightHelper.prototype.dispose = function () { + + this.lightPlane.geometry.dispose(); + this.lightPlane.material.dispose(); + this.targetLine.geometry.dispose(); + this.targetLine.material.dispose(); + +}; + +DirectionalLightHelper.prototype.update = function () { + + var v1 = new Vector3(); + var v2 = new Vector3(); + var v3 = new Vector3(); + + return function update() { + + v1.setFromMatrixPosition( this.light.matrixWorld ); + v2.setFromMatrixPosition( this.light.target.matrixWorld ); + v3.subVectors( v2, v1 ); + + this.lightPlane.lookAt( v3 ); + + if ( this.color !== undefined ) { + + this.lightPlane.material.color.set( this.color ); + this.targetLine.material.color.set( this.color ); + + } else { + + this.lightPlane.material.color.copy( this.light.color ); + this.targetLine.material.color.copy( this.light.color ); + + } + + this.targetLine.lookAt( v3 ); + this.targetLine.scale.z = v3.length(); + + }; + +}(); + +/** + * @author alteredq / http://alteredqualia.com/ + * @author Mugen87 / https://github.com/Mugen87 + * + * - shows frustum, line of sight and up of the camera + * - suitable for fast updates + * - based on frustum visualization in lightgl.js shadowmap example + * http://evanw.github.com/lightgl.js/tests/shadowmap.html + */ + +function CameraHelper( camera ) { + + var geometry = new BufferGeometry(); + var material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } ); + + var vertices = []; + var colors = []; + + var pointMap = {}; + + // colors + + var colorFrustum = new Color( 0xffaa00 ); + var colorCone = new Color( 0xff0000 ); + var colorUp = new Color( 0x00aaff ); + var colorTarget = new Color( 0xffffff ); + var colorCross = new Color( 0x333333 ); + + // near + + addLine( "n1", "n2", colorFrustum ); + addLine( "n2", "n4", colorFrustum ); + addLine( "n4", "n3", colorFrustum ); + addLine( "n3", "n1", colorFrustum ); + + // far + + addLine( "f1", "f2", colorFrustum ); + addLine( "f2", "f4", colorFrustum ); + addLine( "f4", "f3", colorFrustum ); + addLine( "f3", "f1", colorFrustum ); + + // sides + + addLine( "n1", "f1", colorFrustum ); + addLine( "n2", "f2", colorFrustum ); + addLine( "n3", "f3", colorFrustum ); + addLine( "n4", "f4", colorFrustum ); + + // cone + + addLine( "p", "n1", colorCone ); + addLine( "p", "n2", colorCone ); + addLine( "p", "n3", colorCone ); + addLine( "p", "n4", colorCone ); + + // up + + addLine( "u1", "u2", colorUp ); + addLine( "u2", "u3", colorUp ); + addLine( "u3", "u1", colorUp ); + + // target + + addLine( "c", "t", colorTarget ); + addLine( "p", "c", colorCross ); + + // cross + + addLine( "cn1", "cn2", colorCross ); + addLine( "cn3", "cn4", colorCross ); + + addLine( "cf1", "cf2", colorCross ); + addLine( "cf3", "cf4", colorCross ); + + function addLine( a, b, color ) { + + addPoint( a, color ); + addPoint( b, color ); + + } + + function addPoint( id, color ) { + + vertices.push( 0, 0, 0 ); + colors.push( color.r, color.g, color.b ); + + if ( pointMap[ id ] === undefined ) { + + pointMap[ id ] = []; + + } + + pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); + + } + + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + LineSegments.call( this, geometry, material ); + + this.camera = camera; + if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); + + this.matrix = camera.matrixWorld; + this.matrixAutoUpdate = false; + + this.pointMap = pointMap; + + this.update(); + +} + +CameraHelper.prototype = Object.create( LineSegments.prototype ); +CameraHelper.prototype.constructor = CameraHelper; + +CameraHelper.prototype.update = function () { + + var geometry, pointMap; + + var vector = new Vector3(); + var camera = new Camera(); + + function setPoint( point, x, y, z ) { + + vector.set( x, y, z ).unproject( camera ); + + var points = pointMap[ point ]; + + if ( points !== undefined ) { + + var position = geometry.getAttribute( 'position' ); + + for ( var i = 0, l = points.length; i < l; i ++ ) { + + position.setXYZ( points[ i ], vector.x, vector.y, vector.z ); + + } + + } + + } + + return function update() { + + geometry = this.geometry; + pointMap = this.pointMap; + + var w = 1, h = 1; + + // we need just camera projection matrix + // world matrix must be identity + + camera.projectionMatrix.copy( this.camera.projectionMatrix ); + + // center / target + + setPoint( "c", 0, 0, - 1 ); + setPoint( "t", 0, 0, 1 ); + + // near + + setPoint( "n1", - w, - h, - 1 ); + setPoint( "n2", w, - h, - 1 ); + setPoint( "n3", - w, h, - 1 ); + setPoint( "n4", w, h, - 1 ); + + // far + + setPoint( "f1", - w, - h, 1 ); + setPoint( "f2", w, - h, 1 ); + setPoint( "f3", - w, h, 1 ); + setPoint( "f4", w, h, 1 ); + + // up + + setPoint( "u1", w * 0.7, h * 1.1, - 1 ); + setPoint( "u2", - w * 0.7, h * 1.1, - 1 ); + setPoint( "u3", 0, h * 2, - 1 ); + + // cross + + setPoint( "cf1", - w, 0, 1 ); + setPoint( "cf2", w, 0, 1 ); + setPoint( "cf3", 0, - h, 1 ); + setPoint( "cf4", 0, h, 1 ); + + setPoint( "cn1", - w, 0, - 1 ); + setPoint( "cn2", w, 0, - 1 ); + setPoint( "cn3", 0, - h, - 1 ); + setPoint( "cn4", 0, h, - 1 ); + + geometry.getAttribute( 'position' ).needsUpdate = true; + + }; + +}(); + +/** + * @author mrdoob / http://mrdoob.com/ + * @author Mugen87 / http://github.com/Mugen87 + */ + +function BoxHelper( object, color ) { + + this.object = object; + + if ( color === undefined ) color = 0xffff00; + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + var positions = new Float32Array( 8 * 3 ); + + var geometry = new BufferGeometry(); + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + geometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + this.matrixAutoUpdate = false; + + this.update(); + +} + +BoxHelper.prototype = Object.create( LineSegments.prototype ); +BoxHelper.prototype.constructor = BoxHelper; + +BoxHelper.prototype.update = ( function () { + + var box = new Box3(); + + return function update( object ) { + + if ( object !== undefined ) { + + console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); + + } + + if ( this.object !== undefined ) { + + box.setFromObject( this.object ); + + } + + if ( box.isEmpty() ) return; + + var min = box.min; + var max = box.max; + + /* + 5____4 + 1/___0/| + | 6__|_7 + 2/___3/ + + 0: max.x, max.y, max.z + 1: min.x, max.y, max.z + 2: min.x, min.y, max.z + 3: max.x, min.y, max.z + 4: max.x, max.y, min.z + 5: min.x, max.y, min.z + 6: min.x, min.y, min.z + 7: max.x, min.y, min.z + */ + + var position = this.geometry.attributes.position; + var array = position.array; + + array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; + array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; + array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; + array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; + array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; + array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; + array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; + array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; + + position.needsUpdate = true; + + this.geometry.computeBoundingSphere(); + + }; + +} )(); + +BoxHelper.prototype.setFromObject = function ( object ) { + + this.object = object; + this.update(); + + return this; + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + */ + +function Box3Helper( box, hex ) { + + this.type = 'Box3Helper'; + + this.box = box; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); + + var positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ]; + + var geometry = new BufferGeometry(); + + geometry.setIndex( new BufferAttribute( indices, 1 ) ); + + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + + LineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + this.geometry.computeBoundingSphere(); + + this.onBeforeRender(); + +} + +Box3Helper.prototype = Object.create( LineSegments.prototype ); +Box3Helper.prototype.constructor = Box3Helper; + +Box3Helper.prototype.onBeforeRender = function () { + + var box = this.box; + + if ( box.isEmpty() ) return; + + box.getCenter( this.position ); + + box.getSize( this.scale ); + + this.scale.multiplyScalar( 0.5 ); + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + */ + +function PlaneHelper( plane, size, hex ) { + + this.type = 'PlaneHelper'; + + this.plane = plane; + + this.size = ( size === undefined ) ? 1 : size; + + var color = ( hex !== undefined ) ? hex : 0xffff00; + + var positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ]; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); + geometry.computeBoundingSphere(); + + Line.call( this, geometry, new LineBasicMaterial( { color: color } ) ); + + // + + var positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ]; + + var geometry2 = new BufferGeometry(); + geometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); + geometry2.computeBoundingSphere(); + + this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) ); + + // + + this.onBeforeRender(); + +} + +PlaneHelper.prototype = Object.create( Line.prototype ); +PlaneHelper.prototype.constructor = PlaneHelper; + +PlaneHelper.prototype.onBeforeRender = function () { + + var scale = - this.plane.constant; + + if ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter + + this.scale.set( 0.5 * this.size, 0.5 * this.size, scale ); + + this.lookAt( this.plane.normal ); + + this.updateMatrixWorld(); + +}; + +/** + * @author WestLangley / http://github.com/WestLangley + * @author zz85 / http://github.com/zz85 + * @author bhouston / http://clara.io + * + * Creates an arrow for visualizing directions + * + * Parameters: + * dir - Vector3 + * origin - Vector3 + * length - Number + * color - color in hex value + * headLength - Number + * headWidth - Number + */ + +var lineGeometry; +var coneGeometry; + +function ArrowHelper( dir, origin, length, color, headLength, headWidth ) { + + // dir is assumed to be normalized + + Object3D.call( this ); + + if ( color === undefined ) color = 0xffff00; + if ( length === undefined ) length = 1; + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + if ( lineGeometry === undefined ) { + + lineGeometry = new BufferGeometry(); + lineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); + + coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 ); + coneGeometry.translate( 0, - 0.5, 0 ); + + } + + this.position.copy( origin ); + + this.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) ); + this.line.matrixAutoUpdate = false; + this.add( this.line ); + + this.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) ); + this.cone.matrixAutoUpdate = false; + this.add( this.cone ); + + this.setDirection( dir ); + this.setLength( length, headLength, headWidth ); + +} + +ArrowHelper.prototype = Object.create( Object3D.prototype ); +ArrowHelper.prototype.constructor = ArrowHelper; + +ArrowHelper.prototype.setDirection = ( function () { + + var axis = new Vector3(); + var radians; + + return function setDirection( dir ) { + + // dir is assumed to be normalized + + if ( dir.y > 0.99999 ) { + + this.quaternion.set( 0, 0, 0, 1 ); + + } else if ( dir.y < - 0.99999 ) { + + this.quaternion.set( 1, 0, 0, 0 ); + + } else { + + axis.set( dir.z, 0, - dir.x ).normalize(); + + radians = Math.acos( dir.y ); + + this.quaternion.setFromAxisAngle( axis, radians ); + + } + + }; + +}() ); + +ArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) { + + if ( headLength === undefined ) headLength = 0.2 * length; + if ( headWidth === undefined ) headWidth = 0.2 * headLength; + + this.line.scale.set( 1, Math.max( 0, length - headLength ), 1 ); + this.line.updateMatrix(); + + this.cone.scale.set( headWidth, headLength, headWidth ); + this.cone.position.y = length; + this.cone.updateMatrix(); + +}; + +ArrowHelper.prototype.setColor = function ( color ) { + + this.line.material.color.copy( color ); + this.cone.material.color.copy( color ); + +}; + +/** + * @author sroucheray / http://sroucheray.org/ + * @author mrdoob / http://mrdoob.com/ + */ + +function AxisHelper( size ) { + + size = size || 1; + + var vertices = [ + 0, 0, 0, size, 0, 0, + 0, 0, 0, 0, size, 0, + 0, 0, 0, 0, 0, size + ]; + + var colors = [ + 1, 0, 0, 1, 0.6, 0, + 0, 1, 0, 0.6, 1, 0, + 0, 0, 1, 0, 0.6, 1 + ]; + + var geometry = new BufferGeometry(); + geometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); + geometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); + + var material = new LineBasicMaterial( { vertexColors: VertexColors } ); + + LineSegments.call( this, geometry, material ); + +} + +AxisHelper.prototype = Object.create( LineSegments.prototype ); +AxisHelper.prototype.constructor = AxisHelper; + +/** + * @author zz85 https://github.com/zz85 + * + * Centripetal CatmullRom Curve - which is useful for avoiding + * cusps and self-intersections in non-uniform catmull rom curves. + * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf + * + * curve.type accepts centripetal(default), chordal and catmullrom + * curve.tension is used for catmullrom which defaults to 0.5 + */ + + +/* +Based on an optimized c++ solution in + - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ + - http://ideone.com/NoEbVM + +This CubicPoly class could be used for reusing some variables and calculations, +but for three.js curve use, it could be possible inlined and flatten into a single function call +which can be placed in CurveUtils. +*/ + +function CubicPoly() { + + var c0 = 0, c1 = 0, c2 = 0, c3 = 0; + + /* + * Compute coefficients for a cubic polynomial + * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 + * such that + * p(0) = x0, p(1) = x1 + * and + * p'(0) = t0, p'(1) = t1. + */ + function init( x0, x1, t0, t1 ) { + + c0 = x0; + c1 = t0; + c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; + c3 = 2 * x0 - 2 * x1 + t0 + t1; + + } + + return { + + initCatmullRom: function ( x0, x1, x2, x3, tension ) { + + init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); + + }, + + initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { + + // compute tangents when parameterized in [t1,t2] + var t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; + var t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; + + // rescale tangents for parametrization in [0,1] + t1 *= dt1; + t2 *= dt1; + + init( x1, x2, t1, t2 ); + + }, + + calc: function ( t ) { + + var t2 = t * t; + var t3 = t2 * t; + return c0 + c1 * t + c2 * t2 + c3 * t3; + + } + + }; + +} + +// + +var tmp = new Vector3(); +var px = new CubicPoly(); +var py = new CubicPoly(); +var pz = new CubicPoly(); + +function CatmullRomCurve3( points ) { + + Curve.call( this ); + + if ( points.length < 2 ) console.warn( 'THREE.CatmullRomCurve3: Points array needs at least two entries.' ); + + this.points = points || []; + this.closed = false; + +} + +CatmullRomCurve3.prototype = Object.create( Curve.prototype ); +CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; + +CatmullRomCurve3.prototype.getPoint = function ( t ) { + + var points = this.points; + var l = points.length; + + var point = ( l - ( this.closed ? 0 : 1 ) ) * t; + var intPoint = Math.floor( point ); + var weight = point - intPoint; + + if ( this.closed ) { + + intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / points.length ) + 1 ) * points.length; + + } else if ( weight === 0 && intPoint === l - 1 ) { + + intPoint = l - 2; + weight = 1; + + } + + var p0, p1, p2, p3; // 4 points + + if ( this.closed || intPoint > 0 ) { + + p0 = points[ ( intPoint - 1 ) % l ]; + + } else { + + // extrapolate first point + tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); + p0 = tmp; + + } + + p1 = points[ intPoint % l ]; + p2 = points[ ( intPoint + 1 ) % l ]; + + if ( this.closed || intPoint + 2 < l ) { + + p3 = points[ ( intPoint + 2 ) % l ]; + + } else { + + // extrapolate last point + tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); + p3 = tmp; + + } + + if ( this.type === undefined || this.type === 'centripetal' || this.type === 'chordal' ) { + + // init Centripetal / Chordal Catmull-Rom + var pow = this.type === 'chordal' ? 0.5 : 0.25; + var dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); + var dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); + var dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); + + // safety check for repeated points + if ( dt1 < 1e-4 ) dt1 = 1.0; + if ( dt0 < 1e-4 ) dt0 = dt1; + if ( dt2 < 1e-4 ) dt2 = dt1; + + px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); + py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); + pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); + + } else if ( this.type === 'catmullrom' ) { + + var tension = this.tension !== undefined ? this.tension : 0.5; + px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, tension ); + py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, tension ); + pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, tension ); + + } + + return new Vector3( px.calc( weight ), py.calc( weight ), pz.calc( weight ) ); + +}; + +function CubicBezierCurve3( v0, v1, v2, v3 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + this.v3 = v3; + +} + +CubicBezierCurve3.prototype = Object.create( Curve.prototype ); +CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; + +CubicBezierCurve3.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; + + return new Vector3( + CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), + CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), + CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) + ); + +}; + +function QuadraticBezierCurve3( v0, v1, v2 ) { + + Curve.call( this ); + + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + +} + +QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); +QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; + +QuadraticBezierCurve3.prototype.getPoint = function ( t ) { + + var v0 = this.v0, v1 = this.v1, v2 = this.v2; + + return new Vector3( + QuadraticBezier( t, v0.x, v1.x, v2.x ), + QuadraticBezier( t, v0.y, v1.y, v2.y ), + QuadraticBezier( t, v0.z, v1.z, v2.z ) + ); + +}; + +function LineCurve3( v1, v2 ) { + + Curve.call( this ); + + this.v1 = v1; + this.v2 = v2; + +} + +LineCurve3.prototype = Object.create( Curve.prototype ); +LineCurve3.prototype.constructor = LineCurve3; + +LineCurve3.prototype.getPoint = function ( t ) { + + if ( t === 1 ) { + + return this.v2.clone(); + + } + + var vector = new Vector3(); + + vector.subVectors( this.v2, this.v1 ); // diff + vector.multiplyScalar( t ); + vector.add( this.v1 ); + + return vector; + +}; + +function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { + + EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); + +} + +ArcCurve.prototype = Object.create( EllipseCurve.prototype ); +ArcCurve.prototype.constructor = ArcCurve; + +/** + * @author alteredq / http://alteredqualia.com/ + */ + +var SceneUtils = { + + createMultiMaterialObject: function ( geometry, materials ) { + + var group = new Group(); + + for ( var i = 0, l = materials.length; i < l; i ++ ) { + + group.add( new Mesh( geometry, materials[ i ] ) ); + + } + + return group; + + }, + + detach: function ( child, parent, scene ) { + + child.applyMatrix( parent.matrixWorld ); + parent.remove( child ); + scene.add( child ); + + }, + + attach: function ( child, scene, parent ) { + + child.applyMatrix( new Matrix4().getInverse( parent.matrixWorld ) ); + + scene.remove( child ); + parent.add( child ); + + } + +}; + +/** + * @author mrdoob / http://mrdoob.com/ + */ + +function Face4( a, b, c, d, normal, color, materialIndex ) { + + console.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' ); + return new Face3( a, b, c, normal, color, materialIndex ); + +} + +var LineStrip = 0; + +var LinePieces = 1; + +function MeshFaceMaterial( materials ) { + + console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' ); + return materials; + +} + +function MultiMaterial( materials ) { + + if ( materials === undefined ) materials = []; + + console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' ); + materials.isMultiMaterial = true; + materials.materials = materials; + materials.clone = function () { + + return materials.slice(); + + }; + return materials; + +} + +function PointCloud( geometry, material ) { + + console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function Particle( material ) { + + console.warn( 'THREE.Particle has been renamed to THREE.Sprite.' ); + return new Sprite( material ); + +} + +function ParticleSystem( geometry, material ) { + + console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); + return new Points( geometry, material ); + +} + +function PointCloudMaterial( parameters ) { + + console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleBasicMaterial( parameters ) { + + console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function ParticleSystemMaterial( parameters ) { + + console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); + return new PointsMaterial( parameters ); + +} + +function Vertex( x, y, z ) { + + console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); + return new Vector3( x, y, z ); + +} + +// + +function DynamicBufferAttribute( array, itemSize ) { + + console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' ); + return new BufferAttribute( array, itemSize ).setDynamic( true ); + +} + +function Int8Attribute( array, itemSize ) { + + console.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' ); + return new Int8BufferAttribute( array, itemSize ); + +} + +function Uint8Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' ); + return new Uint8BufferAttribute( array, itemSize ); + +} + +function Uint8ClampedAttribute( array, itemSize ) { + + console.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' ); + return new Uint8ClampedBufferAttribute( array, itemSize ); + +} + +function Int16Attribute( array, itemSize ) { + + console.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' ); + return new Int16BufferAttribute( array, itemSize ); + +} + +function Uint16Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' ); + return new Uint16BufferAttribute( array, itemSize ); + +} + +function Int32Attribute( array, itemSize ) { + + console.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' ); + return new Int32BufferAttribute( array, itemSize ); + +} + +function Uint32Attribute( array, itemSize ) { + + console.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' ); + return new Uint32BufferAttribute( array, itemSize ); + +} + +function Float32Attribute( array, itemSize ) { + + console.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' ); + return new Float32BufferAttribute( array, itemSize ); + +} + +function Float64Attribute( array, itemSize ) { + + console.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' ); + return new Float64BufferAttribute( array, itemSize ); + +} + +// + +Curve.create = function ( construct, getPoint ) { + + console.log( 'THREE.Curve.create() has been deprecated' ); + + construct.prototype = Object.create( Curve.prototype ); + construct.prototype.constructor = construct; + construct.prototype.getPoint = getPoint; + + return construct; + +}; + +// + +function ClosedSplineCurve3( points ) { + + console.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + this.closed = true; + +} + +ClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + +// + +function SplineCurve3( points ) { + + console.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + +} + +SplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); + +// + +function Spline( points ) { + + console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); + + CatmullRomCurve3.call( this, points ); + this.type = 'catmullrom'; + +} + +Spline.prototype = Object.create( CatmullRomCurve3.prototype ); + +Object.assign( Spline.prototype, { + + initFromArray: function ( a ) { + + console.error( 'THREE.Spline: .initFromArray() has been removed.' ); + + }, + getControlPointsArray: function ( optionalTarget ) { + + console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); + + }, + reparametrizeByArcLength: function ( samplingCoef ) { + + console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); + + } + +} ); + +// +function BoundingBoxHelper( object, color ) { + + console.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' ); + return new BoxHelper( object, color ); + +} + +function EdgesHelper( object, hex ) { + + console.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' ); + return new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +GridHelper.prototype.setColors = function () { + + console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); + +}; + +SkeletonHelper.prototype.update = function () { + + console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); + +}; + +function WireframeHelper( object, hex ) { + + console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' ); + return new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); + +} + +// + +function XHRLoader( manager ) { + + console.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' ); + return new FileLoader( manager ); + +} + +function BinaryTextureLoader( manager ) { + + console.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' ); + return new DataTextureLoader( manager ); + +} + +// + +Object.assign( Box2.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } +} ); + +Object.assign( Box3.prototype, { + + center: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + + }, + empty: function () { + + console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); + return this.isEmpty(); + + }, + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + }, + size: function ( optionalTarget ) { + + console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); + return this.getSize( optionalTarget ); + + } +} ); + +Line3.prototype.center = function ( optionalTarget ) { + + console.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' ); + return this.getCenter( optionalTarget ); + +}; + +_Math.random16 = function () { + + console.warn( 'THREE.Math.random16() has been deprecated. Use Math.random() instead.' ); + return Math.random(); + +}; + +Object.assign( Matrix3.prototype, { + + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); + return vector.applyMatrix3( this ); + + }, + multiplyVector3Array: function ( a ) { + + console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); + + }, + applyToBuffer: function( buffer, offset, length ) { + + console.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' ); + return this.applyToBufferAttribute( buffer ); + + }, + applyToVector3Array: function( array, offset, length ) { + + console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); + + } + +} ); + +Object.assign( Matrix4.prototype, { + + extractPosition: function ( m ) { + + console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); + return this.copyPosition( m ); + + }, + flattenToArrayOffset: function ( array, offset ) { + + console.warn( "THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead." ); + return this.toArray( array, offset ); + + }, + getPosition: function () { + + var v1; + + return function getPosition() { + + if ( v1 === undefined ) v1 = new Vector3(); + console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); + return v1.setFromMatrixColumn( this, 3 ); + + }; + + }(), + setRotationFromQuaternion: function ( q ) { + + console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); + return this.makeRotationFromQuaternion( q ); + + }, + multiplyToArray: function () { + + console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); + + }, + multiplyVector3: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector4: function ( vector ) { + + console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + multiplyVector3Array: function ( a ) { + + console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); + + }, + rotateAxis: function ( v ) { + + console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); + v.transformDirection( this ); + + }, + crossVector: function ( vector ) { + + console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); + return vector.applyMatrix4( this ); + + }, + translate: function () { + + console.error( 'THREE.Matrix4: .translate() has been removed.' ); + + }, + rotateX: function () { + + console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); + + }, + rotateY: function () { + + console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); + + }, + rotateZ: function () { + + console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); + + }, + rotateByAxis: function () { + + console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); + + }, + applyToBuffer: function( buffer, offset, length ) { + + console.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' ); + return this.applyToBufferAttribute( buffer ); + + }, + applyToVector3Array: function( array, offset, length ) { + + console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); + + }, + makeFrustum: function( left, right, bottom, top, near, far ) { + + console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); + return this.makePerspective( left, right, top, bottom, near, far ); + + } + +} ); + +Plane.prototype.isIntersectionLine = function ( line ) { + + console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); + return this.intersectsLine( line ); + +}; + +Quaternion.prototype.multiplyVector3 = function ( vector ) { + + console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); + return vector.applyQuaternion( this ); + +}; + +Object.assign( Ray.prototype, { + + isIntersectionBox: function ( box ) { + + console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); + return this.intersectsBox( box ); + + }, + isIntersectionPlane: function ( plane ) { + + console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); + return this.intersectsPlane( plane ); + + }, + isIntersectionSphere: function ( sphere ) { + + console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); + return this.intersectsSphere( sphere ); + + } + +} ); + +Object.assign( Shape.prototype, { + + extrude: function ( options ) { + + console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); + return new ExtrudeGeometry( this, options ); + + }, + makeGeometry: function ( options ) { + + console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); + return new ShapeGeometry( this, options ); + + } + +} ); + +Object.assign( Vector2.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.error( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + } + +} ); + +Object.assign( Vector3.prototype, { + + setEulerFromRotationMatrix: function () { + + console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); + + }, + setEulerFromQuaternion: function () { + + console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); + + }, + getPositionFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); + return this.setFromMatrixPosition( m ); + + }, + getScaleFromMatrix: function ( m ) { + + console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); + return this.setFromMatrixScale( m ); + + }, + getColumnFromMatrix: function ( index, matrix ) { + + console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); + return this.setFromMatrixColumn( matrix, index ); + + }, + applyProjection: function ( m ) { + + console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); + return this.applyMatrix4( m ); + + }, + fromAttribute: function ( attribute, index, offset ) { + + console.error( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + } + +} ); + +Object.assign( Vector4.prototype, { + + fromAttribute: function ( attribute, index, offset ) { + + console.error( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); + return this.fromBufferAttribute( attribute, index, offset ); + + } + +} ); + +// + +Geometry.prototype.computeTangents = function () { + + console.warn( 'THREE.Geometry: .computeTangents() has been removed.' ); + +}; + +Object.assign( Object3D.prototype, { + + getChildByName: function ( name ) { + + console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); + return this.getObjectByName( name ); + + }, + renderDepth: function () { + + console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); + + }, + translate: function ( distance, axis ) { + + console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); + return this.translateOnAxis( axis, distance ); + + } + +} ); + +Object.defineProperties( Object3D.prototype, { + + eulerOrder: { + get: function () { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + return this.rotation.order; + + }, + set: function ( value ) { + + console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); + this.rotation.order = value; + + } + }, + useQuaternion: { + get: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + }, + set: function () { + + console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); + + } + } + +} ); + +Object.defineProperties( LOD.prototype, { + + objects: { + get: function () { + + console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); + return this.levels; + + } + } + +} ); + +Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { + + get: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); + + } + +} ); + +Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { + + get: function () { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + return this.arcLengthDivisions; + + }, + set: function ( value ) { + + console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); + this.arcLengthDivisions = value; + + } + +} ); + +// + +PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { + + console.warn( "THREE.PerspectiveCamera.setLens is deprecated. " + + "Use .setFocalLength and .filmGauge for a photographic setup." ); + + if ( filmGauge !== undefined ) this.filmGauge = filmGauge; + this.setFocalLength( focalLength ); + +}; + +// + +Object.defineProperties( Light.prototype, { + onlyShadow: { + set: function () { + + console.warn( 'THREE.Light: .onlyShadow has been removed.' ); + + } + }, + shadowCameraFov: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); + this.shadow.camera.fov = value; + + } + }, + shadowCameraLeft: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); + this.shadow.camera.left = value; + + } + }, + shadowCameraRight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); + this.shadow.camera.right = value; + + } + }, + shadowCameraTop: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); + this.shadow.camera.top = value; + + } + }, + shadowCameraBottom: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); + this.shadow.camera.bottom = value; + + } + }, + shadowCameraNear: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); + this.shadow.camera.near = value; + + } + }, + shadowCameraFar: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); + this.shadow.camera.far = value; + + } + }, + shadowCameraVisible: { + set: function () { + + console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); + + } + }, + shadowBias: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); + this.shadow.bias = value; + + } + }, + shadowDarkness: { + set: function () { + + console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); + + } + }, + shadowMapWidth: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); + this.shadow.mapSize.width = value; + + } + }, + shadowMapHeight: { + set: function ( value ) { + + console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); + this.shadow.mapSize.height = value; + + } + } +} ); + +// + +Object.defineProperties( BufferAttribute.prototype, { + + length: { + get: function () { + + console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); + return this.array.length; + + } + } + +} ); + +Object.assign( BufferGeometry.prototype, { + + addIndex: function ( index ) { + + console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); + this.setIndex( index ); + + }, + addDrawCall: function ( start, count, indexOffset ) { + + if ( indexOffset !== undefined ) { + + console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); + + } + console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); + this.addGroup( start, count ); + + }, + clearDrawCalls: function () { + + console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); + this.clearGroups(); + + }, + computeTangents: function () { + + console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); + + }, + computeOffsets: function () { + + console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); + + } + +} ); + +Object.defineProperties( BufferGeometry.prototype, { + + drawcalls: { + get: function () { + + console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); + return this.groups; + + } + }, + offsets: { + get: function () { + + console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); + return this.groups; + + } + } + +} ); + +// + +Object.defineProperties( Uniform.prototype, { + + dynamic: { + set: function () { + + console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); + + } + }, + onUpdate: { + value: function () { + + console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); + return this; + + } + } + +} ); + +// + +Object.defineProperties( Material.prototype, { + + wrapAround: { + get: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + }, + set: function () { + + console.warn( 'THREE.Material: .wrapAround has been removed.' ); + + } + }, + wrapRGB: { + get: function () { + + console.warn( 'THREE.Material: .wrapRGB has been removed.' ); + return new Color(); + + } + }, + + shading: { + get: function () { + + console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + + }, + set: function ( value ) { + + console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); + this.flatShading = ( value === FlatShading ); + + } + } + +} ); + +Object.defineProperties( MeshPhongMaterial.prototype, { + + metal: { + get: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); + return false; + + }, + set: function () { + + console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); + + } + } + +} ); + +Object.defineProperties( ShaderMaterial.prototype, { + + derivatives: { + get: function () { + + console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + return this.extensions.derivatives; + + }, + set: function ( value ) { + + console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); + this.extensions.derivatives = value; + + } + } + +} ); + +// + +Object.assign( WebGLRenderer.prototype, { + + getCurrentRenderTarget: function () { + + console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); + return this.getRenderTarget(); + + }, + + getMaxAnisotropy: function () { + + console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); + return this.capabilities.getMaxAnisotropy(); + + }, + + getPrecision: function () { + + console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); + return this.capabilities.precision; + + }, + + supportsFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); + return this.extensions.get( 'OES_texture_float' ); + + }, + supportsHalfFloatTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); + return this.extensions.get( 'OES_texture_half_float' ); + + }, + supportsStandardDerivatives: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); + return this.extensions.get( 'OES_standard_derivatives' ); + + }, + supportsCompressedTextureS3TC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); + + }, + supportsCompressedTexturePVRTC: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); + return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); + + }, + supportsBlendMinMax: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); + return this.extensions.get( 'EXT_blend_minmax' ); + + }, + supportsVertexTextures: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); + return this.capabilities.vertexTextures; + + }, + supportsInstancedArrays: function () { + + console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); + return this.extensions.get( 'ANGLE_instanced_arrays' ); + + }, + enableScissorTest: function ( boolean ) { + + console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); + this.setScissorTest( boolean ); + + }, + initMaterial: function () { + + console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); + + }, + addPrePlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); + + }, + addPostPlugin: function () { + + console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); + + }, + updateShadowMap: function () { + + console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); + + } + +} ); + +Object.defineProperties( WebGLRenderer.prototype, { + + shadowMapEnabled: { + get: function () { + + return this.shadowMap.enabled; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); + this.shadowMap.enabled = value; + + } + }, + shadowMapType: { + get: function () { + + return this.shadowMap.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); + this.shadowMap.type = value; + + } + }, + shadowMapCullFace: { + get: function () { + + return this.shadowMap.cullFace; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace is now .shadowMap.cullFace.' ); + this.shadowMap.cullFace = value; + + } + } +} ); + +Object.defineProperties( WebGLShadowMap.prototype, { + + cullFace: { + get: function () { + + return this.renderReverseSided ? CullFaceFront : CullFaceBack; + + }, + set: function ( cullFace ) { + + var value = ( cullFace !== CullFaceBack ); + console.warn( "WebGLRenderer: .shadowMap.cullFace is deprecated. Set .shadowMap.renderReverseSided to " + value + "." ); + this.renderReverseSided = value; + + } + } + +} ); + +// + +Object.defineProperties( WebGLRenderTarget.prototype, { + + wrapS: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + return this.texture.wrapS; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); + this.texture.wrapS = value; + + } + }, + wrapT: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + return this.texture.wrapT; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); + this.texture.wrapT = value; + + } + }, + magFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + return this.texture.magFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); + this.texture.magFilter = value; + + } + }, + minFilter: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + return this.texture.minFilter; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); + this.texture.minFilter = value; + + } + }, + anisotropy: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + return this.texture.anisotropy; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); + this.texture.anisotropy = value; + + } + }, + offset: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + return this.texture.offset; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); + this.texture.offset = value; + + } + }, + repeat: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + return this.texture.repeat; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); + this.texture.repeat = value; + + } + }, + format: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + return this.texture.format; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); + this.texture.format = value; + + } + }, + type: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + return this.texture.type; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); + this.texture.type = value; + + } + }, + generateMipmaps: { + get: function () { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + return this.texture.generateMipmaps; + + }, + set: function ( value ) { + + console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); + this.texture.generateMipmaps = value; + + } + } + +} ); + +// + +Audio.prototype.load = function ( file ) { + + console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); + var scope = this; + var audioLoader = new AudioLoader(); + audioLoader.load( file, function ( buffer ) { + + scope.setBuffer( buffer ); + + } ); + return this; + +}; + +AudioAnalyser.prototype.getData = function () { + + console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); + return this.getFrequencyData(); + +}; + +// + +CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { + + console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); + return this.update( renderer, scene ); + +}; + +// + +var GeometryUtils = { + + merge: function ( geometry1, geometry2, materialIndexOffset ) { + + console.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' ); + var matrix; + + if ( geometry2.isMesh ) { + + geometry2.matrixAutoUpdate && geometry2.updateMatrix(); + + matrix = geometry2.matrix; + geometry2 = geometry2.geometry; + + } + + geometry1.merge( geometry2, matrix, materialIndexOffset ); + + }, + + center: function ( geometry ) { + + console.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' ); + return geometry.center(); + + } + +}; + +var ImageUtils = { + + crossOrigin: undefined, + + loadTexture: function ( url, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); + + var loader = new TextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( url, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }, + + loadTextureCube: function ( urls, mapping, onLoad, onError ) { + + console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); + + var loader = new CubeTextureLoader(); + loader.setCrossOrigin( this.crossOrigin ); + + var texture = loader.load( urls, onLoad, undefined, onError ); + + if ( mapping ) texture.mapping = mapping; + + return texture; + + }, + + loadCompressedTexture: function () { + + console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); + + }, + + loadCompressedTextureCube: function () { + + console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); + + } + +}; + +// + +function Projector() { + + console.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' ); + + this.projectVector = function ( vector, camera ) { + + console.warn( 'THREE.Projector: .projectVector() is now vector.project().' ); + vector.project( camera ); + + }; + + this.unprojectVector = function ( vector, camera ) { + + console.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' ); + vector.unproject( camera ); + + }; + + this.pickingRay = function () { + + console.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' ); + + }; + +} + +// + +function CanvasRenderer() { + + console.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' ); + + this.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); + this.clear = function () {}; + this.render = function () {}; + this.setClearColor = function () {}; + this.setSize = function () {}; + +} + + + + +/***/ }), +/* 1 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Viewer", function() { return Viewer; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AvatarSystem", function() { return AvatarSystem; }); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__ = __webpack_require__(4); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__GLTFAvatarMerge_js__ = __webpack_require__(5); +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__lib_makeglb_js__ = __webpack_require__(6); +var THREE = __webpack_require__(0); +THREE.OrbitControls = __webpack_require__(2)(THREE); +THREE.GLTFLoader = __webpack_require__(3)(THREE); + + + + + +var clock = new THREE.Clock(); + + + + +function Viewer(preserveDrawingBuffer) { + + // for canvas snapshot purpose + this.preserveDrawingBuffer = preserveDrawingBuffer || false; + + // this.container = null; + this.canvas = null; + this.fullWindow = true; + + this.skeletonMixer = null; + this.skinMixers = []; // animation mixer for skin files + + this.gltf_skeleton = null; + + this.renderer = null; + this.scene = null; + this.camera = null; + this.orbitControls = null; + + this.loader = null; + + + this.skeletonAnimations = []; // temp for control block, just animation name || id + this.skeletonClips = {}; // for mixing + this.skeletonActionStates = {}; // true or false + // // exposed for gui + // this.control = { + + // }; + + this.skeletonUpdateCallback = null; // (key) => void + this.skinUpdateCallback = null; // (cat, key) => void +} + +// Viewer.prototype.setCanvas = function(canvas) { +// this.canvas; +// }; + +Viewer.prototype.init = function(canvas) { + + + + if (canvas) { + this.canvas = canvas; + this.fullWindow = false; + this.renderer = new THREE.WebGLRenderer( + { + canvas: this.canvas, + antialias: true, + preserveDrawingBuffer: this.preserveDrawingBuffer + } + ); + } else { + this.renderer = new THREE.WebGLRenderer( { + antialias: true , + preserveDrawingBuffer: this.preserveDrawingBuffer + } ); + this.canvas = this.renderer.domElement; + this.fullWindow = true; + this.canvas.width = window.innerWidth; + this.canvas.height = window.innerHeight; + this.renderer.setSize( window.innerWidth, window.innerHeight ); // test + document.getElementById('container').appendChild(this.canvas); + } + + + // this.camera = new THREE.PerspectiveCamera( 45, container.offsetWidth / container.offsetHeight, 0.001, 1000 ); + + + // this.renderer.setSize( this.canvas.width, this.canvas.height ); // test + this.camera = new THREE.PerspectiveCamera( 45, this.canvas.width / this.canvas.height, 0.01, 100 ); + + this.renderer.setPixelRatio(window.devicePixelRatio); + // this.renderer.setPixelRatio(this.canvas.width / this.canvas.height); + + // this.renderer.setSize( window.innerWidth, window.innerHeight ); + // this.renderer.setSize( container.width, container.height ); + + // scene info: add light, add ground, shadow + + this.loader = new THREE.GLTFLoader(); + this.orbitControls = new THREE.OrbitControls(this.camera, this.renderer.domElement); + + + this.onWindowResize(); + window.addEventListener( 'resize', this.onWindowResize.bind(this), false ); + + + this.initScene(); + + + // this.selectSkeleton('mixamo'); + this.selectSkeleton(Object.keys(__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].repo.skeletons)[0]); + + this.animate(); + +}; + +Viewer.prototype.initScene = function () { + this.scene = new THREE.Scene(); + this.scene.background = new THREE.Color( 0x222222 ); + + this.scene.add(this.camera); + // test add lights + var ambient = new THREE.AmbientLight( 0x222222 ); + this.scene.add( ambient ); + var directionalLight = new THREE.DirectionalLight( 0xdddddd ); + directionalLight.position.set( 1, 1, 1 ).normalize(); + this.scene.add( directionalLight ); + + var spot1 = new THREE.SpotLight( 0xffffff, 1 ); + // spot1.position.set( 10, 20, 10 ); + spot1.position.set( 10, 20, -30 ); + spot1.angle = 0.25; + spot1.distance = 1024; + spot1.penumbra = 0.75; + // if ( sceneInfo.shadows ) { + // spot1.castShadow = true; + // spot1.shadow.bias = 0.0001; + // spot1.shadow.mapSize.width = 2048; + // spot1.shadow.mapSize.height = 2048; + // } + this.scene.add( spot1 ); +}; + +Viewer.prototype.cleanup = function() { + if (this.skeletonMixer) { + this.skeletonMixer.stopAllAction(); + this.skeletonMixer = null; + } + + if (this.skinMixers) { + for (var i = 0, len = this.skinMixers.length; i < len; i++) { + this.skinMixers[i].stopAllAction(); + } + this.skinMixers = []; + } + + if (this.scene) { + for (var i = 0, len = this.scene.children.length; i < len; i++) { + this.scene.remove(this.scene.children[i]); + } + } + + this.initScene(); + +}; + +var onWindowResize = Viewer.prototype.onWindowResize = function() { + + // var i, len = cameras.length; + // for (i = 0; i < len; i++) { // just do it for default + // cameras[i].aspect = container.offsetWidth / container.offsetHeight; + // cameras[i].updateProjectionMatrix(); + // } + // renderer.setSize( window.innerWidth, window.innerHeight ); + if (this.fullWindow) { + this.renderer.setSize( window.innerWidth, window.innerHeight ); + } else { + this.renderer.setSize(this.canvas.width, this.canvas.height); + } + + this.camera.aspect = this.canvas.width / this.canvas.height; + this.camera.updateProjectionMatrix(); +}; + +var animate = Viewer.prototype.animate = function() { + requestAnimationFrame( this.animate.bind(this) ); + // requestAnimationFrame( animate ); + + var delta = clock.getDelta(); + + if (this.skeletonMixer) { + this.skeletonMixer.update(delta); + } + + for (var i = 0, len = this.skinMixers.length; i < len; i++) { + this.skinMixers[i].update(delta); + } + + // if (cameraIndex == 0) + // orbitControls.update(); + this.orbitControls.update(); + + // render(); + this.renderer.render(this.scene, this.camera); +}; + +// TODO: get envmap + +// skeleton animation +Viewer.prototype.playAnimation = function(index) { + if (this.skeletonMixer) { + this.skeletonMixer.stopAllAction(); + this.skeletonMixer.clipAction(this.gltf_skeleton.animations[index]).play(); + } +}; + +// skeleton animation +Viewer.prototype.playAnimationMixing = function(key, isPlaying) { + if (this.skeletonMixer) { + var action = this.skeletonMixer.clipAction(this.skeletonClips[key]); + action.setEffectiveTimeScale(1); + isPlaying ? action.play() : action.stop(); + } +}; + +Viewer.prototype.updateVisibilityArray = function(v, v1) { + for (var i = 0, len = v1.length; i < len; i++) { + v[i] = v1[i] ? v[i] : 0; + } + + // // gl_avatar_linked_skeleton.visibilityLUT.data = gl_avatar_linked_skeleton.visibility; + // for (var i, len = v.length; i < len; i++) { + // gl_avatar_linked_skeleton.visibilityLUT.image.data[i] = v[i] * 255; + // } + this.gltf_skeleton.gl_avatar.visibilityLUT.needsUpdate = true; +}; + +Viewer.prototype.selectSkin = function(type, key, uri) { + + if (!uri) { + // skin from repo + uri = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].repo[type][key]; + } + + // var uri = glAvatarSystem.repo[type][key]; + + // console.log(glAvatarSystem); + if (__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].isLoaded(type, key)) { + this.skinOnload(type, key, __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[type][key].gltf); + } else { + var self = this; + this.loader.setGlAvatarOfLinkingSkeleton(this.gltf_skeleton.gl_avatar); + this.loader.load( uri, function(data, json, bins, imgs) { + // glAvatarSystem.accessories[type][key] = data; + // console.log(bins); + // console.log(imgs); + + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[type][key] = { + gltf: data, + + json: json, + bins: bins, + imgs: imgs + }; + // TODO + self.skinOnload(type, key, data); + }, undefined, function ( error ) { + console.error( error ); + } ); + } + +}; + +Viewer.prototype.skinOnload = function(type, key, data) { + var c = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[type]; + + var skinMixers = this.skinMixers; + + if (key === c.name) { + console.log('same ' + type); + return; + } + + + // remove current replaced accessory + if (c.scene) { + // delete previous component + c.scene.parent.remove(c.scene); + if (c.scene.attach_child) { + console.log('has attach child (sub skeleton or rigid bind)'); + c.scene.attach_child.parent.remove(c.scene.attach_child); + } + + if (c.scene.skinMixer) { + // c.scene.skinMixer.stopAllAction(); + + for ( var i = 0, len = skinMixers.length; i < len; i ++ ) { + if (skinMixers[i] == c.scene.skinMixer) { + // remove the skin mixer for previous skin file, if exists + skinMixers.splice(i, 1); + break; + } + } + } + + // refresh visibility array + this.gltf_skeleton.gl_avatar.visibility.fill(255); + for (var t in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories) { + if (t !== type && __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[t].scene) { + var a = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[t]; + this.updateVisibilityArray(this.gltf_skeleton.gl_avatar.visibility, __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[t][a.name].gltf.gl_avatar.visibility); + } + } + } + + // -------------------------- + + // update current new skin file + if (this.loader.enableGLTFAvatar) { + this.updateVisibilityArray(this.gltf_skeleton.gl_avatar.visibility, data.gl_avatar.visibility); + } + + // gltf = data; + var gltf = data; + var object = gltf.scene; + + c.name = key; + c.scene = object; + + // status.innerHTML = "Load time: " + ( performance.now() - loadStartTime ).toFixed( 2 ) + " ms."; + + // temp + // console.log(gltf_skeleton); + + + object.traverse( function ( node ) { + if ( node.isMesh ) node.castShadow = true; + } ); + + + // rigid bind, if any + if (object.attach_child) { + // assume attach_child has gl_avatar_base_root + object.attach_child.gl_avatar_base_root.add(object.attach_child); + object.attach_child.updateMatrixWorld(); + // object.attach_child.updateMatrix(); + } + + + + // var optionalSceneRoot = gltf_skeleton.gl_avatar.nodes['head-end'].children[0]; // point to lily hair root try + + if (!object.skinMixer) { + var animations = gltf.animations; + if ( animations && animations.length ) { + // var mixer = new THREE.AnimationMixer( object ); + // var mixer = new THREE.AnimationMixer( optionalSceneRoot ); + var mixer = new THREE.AnimationMixer( object.attach_child || object ); + + for ( var i = 0, len = animations.length; i < len; i ++ ) { + var animation = animations[ i ]; + // mixer.clipAction( animation, optionalSceneRoot ).play(); + mixer.clipAction( animation ).play(); + } + + // temp: assuming only one mixer + skinMixers.push(mixer); + object.skinMixer = mixer; + } + } + else { + var m = object.skinMixer; + // for ( var i = 0, len = m._actions.length; i < len; i ++ ) { + // m._actions[i].play(); + // } + skinMixers.push(m); + // // console.log(m); + } + + + this.scene.add(object); + object.updateMatrixWorld(); + // object.updateMatrix(); + // object.children[0].updateMatrix(); + + // this.onWindowResize(); + + if (this.skinUpdateCallback) { + this.skinUpdateCallback(type, key); + } +}; + + + + + + + + +Viewer.prototype.selectSkeleton = function(key, uri) { + var info = null; + if (!uri) { + // uri = glAvatarSystem.repo.skeletons[key].url; + info = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].repo.skeletons[key]; + uri = info.url; + } + + + + + + // scene, mixer, cleanup + var self = this; + + this.loader.load( uri, function(data, json, bins, imgs) { + // glAvatarSystem.accessories[type][key] = data; + // console.log(bins); + // console.log(imgs); + + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].skeletons[key] = { + gltf: data, + + json: json, + bins: bins, + imgs: imgs + }; + + + self.cleanup(); + + // camera setting + if (info) { + self.camera.position.copy(info.cameraPos); + self.orbitControls.target.copy(info.center); + data.scene.rotation.copy(info.objectRotation); + + // self.skeletonOnLoad(key, data); + + + } + + self.skeletonOnLoad(key, data); + + if (info) { + for (var key in info.skins) { + var skin = info.skins[key]; + if (skin) { + self.selectSkin(key, info.skins[key]); + } + } + } + + + }, undefined, function ( error ) { + console.error( error ); + } ); +}; + + +Viewer.prototype.skeletonOnLoad = function(key, data) { + var gltf = data; + + this.gltf_skeleton = gltf; + + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curSkeleton.name = key; + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curSkeleton.scene = gltf.scene; + + // clear accessories (TODO: these logic should go into gltfavatarsystem) + for (var cat in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories) { + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[cat].name = null; + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[cat].scene = null; + } + + for (var cat in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories) { + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[cat] = {}; + } + + // animations + var animations = gltf.animations; + if ( animations && animations.length ) { + + + // TODO: gui interface + // removeOptions(animationSelector); + this.skeletonAnimations = []; // for control block + + this.skeletonClips = {}; + this.skeletonActionStates = {}; + // this.skeletonActionStates = new Map(); + + this.skeletonMixer = new THREE.AnimationMixer( gltf.scene ); + for ( var i = 0; i < animations.length; i ++ ) { + var animation = animations[ i ]; + // var o = document.createElement('option'); + // o.text = animation.name || i; + // animationSelector.add(o); + this.skeletonAnimations.push(animation.name || i.toFixed()); + + + // clips mixing + var key = animation.name || i; + this.skeletonActionStates[key] = false; + this.skeletonClips[key] = animation; + + if (i === 0) { + this.skeletonActionStates[key] = true; + this.playAnimationMixing(key, true); + } + } + + // this.playAnimation(0); + } + this.scene.add( gltf.scene ); + + if (this.skeletonUpdateCallback) { + this.skeletonUpdateCallback(key); + } +}; + + +Viewer.prototype.mergeAndExport = function() { + var skinArray = []; + + for (var cat in __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories) { + var c = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curAccessories[cat]; + if (c.name) { + skinArray.push(__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].accessories[cat][c.name]); + } + } + + var merged = Object(__WEBPACK_IMPORTED_MODULE_1__GLTFAvatarMerge_js__["a" /* mergeGLTFAvatar */])( + __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].skeletons[__WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */].curSkeleton.name], + skinArray + ); + + Object(__WEBPACK_IMPORTED_MODULE_2__lib_makeglb_js__["a" /* fileSave */])(merged.json, merged.bins, merged.imgs); +}; + + +var AvatarSystem = __WEBPACK_IMPORTED_MODULE_0__GLTFAvatarSystem_js__["a" /* glAvatarSystem */]; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + +module.exports = function( THREE ) { + /** + * @author qiao / https://github.com/qiao + * @author mrdoob / http://mrdoob.com + * @author alteredq / http://alteredqualia.com/ + * @author WestLangley / http://github.com/WestLangley + * @author erich666 / http://erichaines.com + */ + +// This set of controls performs orbiting, dollying (zooming), and panning. +// Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default). +// +// Orbit - left mouse / touch: one finger move +// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish +// Pan - right mouse, or arrow keys / touch: three finter swipe + + function OrbitControls( object, domElement ) { + + this.object = object; + + this.domElement = ( domElement !== undefined ) ? domElement : document; + + // Set to false to disable this control + this.enabled = true; + + // "target" sets the location of focus, where the object orbits around + this.target = new THREE.Vector3(); + + // How far you can dolly in and out ( PerspectiveCamera only ) + this.minDistance = 0; + this.maxDistance = Infinity; + + // How far you can zoom in and out ( OrthographicCamera only ) + this.minZoom = 0; + this.maxZoom = Infinity; + + // How far you can orbit vertically, upper and lower limits. + // Range is 0 to Math.PI radians. + this.minPolarAngle = 0; // radians + this.maxPolarAngle = Math.PI; // radians + + // How far you can orbit horizontally, upper and lower limits. + // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ]. + this.minAzimuthAngle = - Infinity; // radians + this.maxAzimuthAngle = Infinity; // radians + + // Set to true to enable damping (inertia) + // If damping is enabled, you must call controls.update() in your animation loop + this.enableDamping = false; + this.dampingFactor = 0.25; + + // This option actually enables dollying in and out; left as "zoom" for backwards compatibility. + // Set to false to disable zooming + this.enableZoom = true; + this.zoomSpeed = 1.0; + + // Set to false to disable rotating + this.enableRotate = true; + this.rotateSpeed = 1.0; + + // Set to false to disable panning + this.enablePan = true; + this.keyPanSpeed = 7.0; // pixels moved per arrow key push + + // Set to true to automatically rotate around the target + // If auto-rotate is enabled, you must call controls.update() in your animation loop + this.autoRotate = false; + this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60 + + // Set to false to disable use of the keys + this.enableKeys = true; + + // The four arrow keys + this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }; + + // Mouse buttons + this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT }; + + // for reset + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + + // + // public methods + // + + this.getPolarAngle = function () { + + return spherical.phi; + + }; + + this.getAzimuthalAngle = function () { + + return spherical.theta; + + }; + + this.reset = function () { + + scope.target.copy( scope.target0 ); + scope.object.position.copy( scope.position0 ); + scope.object.zoom = scope.zoom0; + + scope.object.updateProjectionMatrix(); + scope.dispatchEvent( changeEvent ); + + scope.update(); + + state = STATE.NONE; + + }; + + // this method is exposed, but perhaps it would be better if we can make it private... + this.update = function() { + + var offset = new THREE.Vector3(); + + // so camera.up is the orbit axis + var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) ); + var quatInverse = quat.clone().inverse(); + + var lastPosition = new THREE.Vector3(); + var lastQuaternion = new THREE.Quaternion(); + + return function update () { + + var position = scope.object.position; + + offset.copy( position ).sub( scope.target ); + + // rotate offset to "y-axis-is-up" space + offset.applyQuaternion( quat ); + + // angle from z-axis around y-axis + spherical.setFromVector3( offset ); + + if ( scope.autoRotate && state === STATE.NONE ) { + + rotateLeft( getAutoRotationAngle() ); + + } + + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + + // restrict theta to be between desired limits + spherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) ); + + // restrict phi to be between desired limits + spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) ); + + spherical.makeSafe(); + + + spherical.radius *= scale; + + // restrict radius to be between desired limits + spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) ); + + // move target to panned location + scope.target.add( panOffset ); + + offset.setFromSpherical( spherical ); + + // rotate offset back to "camera-up-vector-is-up" space + offset.applyQuaternion( quatInverse ); + + position.copy( scope.target ).add( offset ); + + scope.object.lookAt( scope.target ); + + if ( scope.enableDamping === true ) { + + sphericalDelta.theta *= ( 1 - scope.dampingFactor ); + sphericalDelta.phi *= ( 1 - scope.dampingFactor ); + + } else { + + sphericalDelta.set( 0, 0, 0 ); + + } + + scale = 1; + panOffset.set( 0, 0, 0 ); + + // update condition is: + // min(camera displacement, camera rotation in radians)^2 > EPS + // using small-angle approximation cos(x/2) = 1 - x^2 / 8 + + if ( zoomChanged || + lastPosition.distanceToSquared( scope.object.position ) > EPS || + 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) { + + scope.dispatchEvent( changeEvent ); + + lastPosition.copy( scope.object.position ); + lastQuaternion.copy( scope.object.quaternion ); + zoomChanged = false; + + return true; + + } + + return false; + + }; + + }(); + + this.dispose = function() { + + scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false ); + scope.domElement.removeEventListener( 'mousedown', onMouseDown, false ); + scope.domElement.removeEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.removeEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.removeEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.removeEventListener( 'touchmove', onTouchMove, false ); + + document.removeEventListener( 'mousemove', onMouseMove, false ); + document.removeEventListener( 'mouseup', onMouseUp, false ); + + window.removeEventListener( 'keydown', onKeyDown, false ); + + //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here? + + }; + + // + // internals + // + + var scope = this; + + var changeEvent = { type: 'change' }; + var startEvent = { type: 'start' }; + var endEvent = { type: 'end' }; + + var STATE = { NONE : - 1, ROTATE : 0, DOLLY : 1, PAN : 2, TOUCH_ROTATE : 3, TOUCH_DOLLY : 4, TOUCH_PAN : 5 }; + + var state = STATE.NONE; + + var EPS = 0.000001; + + // current position in spherical coordinates + var spherical = new THREE.Spherical(); + var sphericalDelta = new THREE.Spherical(); + + var scale = 1; + var panOffset = new THREE.Vector3(); + var zoomChanged = false; + + var rotateStart = new THREE.Vector2(); + var rotateEnd = new THREE.Vector2(); + var rotateDelta = new THREE.Vector2(); + + var panStart = new THREE.Vector2(); + var panEnd = new THREE.Vector2(); + var panDelta = new THREE.Vector2(); + + var dollyStart = new THREE.Vector2(); + var dollyEnd = new THREE.Vector2(); + var dollyDelta = new THREE.Vector2(); + + function getAutoRotationAngle() { + + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + + } + + function getZoomScale() { + + return Math.pow( 0.95, scope.zoomSpeed ); + + } + + function rotateLeft( angle ) { + + sphericalDelta.theta -= angle; + + } + + function rotateUp( angle ) { + + sphericalDelta.phi -= angle; + + } + + var panLeft = function() { + + var v = new THREE.Vector3(); + + return function panLeft( distance, objectMatrix ) { + + v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix + v.multiplyScalar( - distance ); + + panOffset.add( v ); + + }; + + }(); + + var panUp = function() { + + var v = new THREE.Vector3(); + + return function panUp( distance, objectMatrix ) { + + v.setFromMatrixColumn( objectMatrix, 1 ); // get Y column of objectMatrix + v.multiplyScalar( distance ); + + panOffset.add( v ); + + }; + + }(); + + // deltaX and deltaY are in pixels; right and down are positive + var pan = function() { + + var offset = new THREE.Vector3(); + + return function pan ( deltaX, deltaY ) { + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + if ( scope.object instanceof THREE.PerspectiveCamera ) { + + // perspective + var position = scope.object.position; + offset.copy( position ).sub( scope.target ); + var targetDistance = offset.length(); + + // half of the fov is center to top of screen + targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 ); + + // we actually don't use screenWidth, since perspective camera is fixed to screen height + panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix ); + panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix ); + + } else if ( scope.object instanceof THREE.OrthographicCamera ) { + + // orthographic + panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix ); + panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix ); + + } else { + + // camera neither orthographic nor perspective + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' ); + scope.enablePan = false; + + } + + }; + + }(); + + function dollyIn( dollyScale ) { + + if ( scope.object instanceof THREE.PerspectiveCamera ) { + + scale /= dollyScale; + + } else if ( scope.object instanceof THREE.OrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + function dollyOut( dollyScale ) { + + if ( scope.object instanceof THREE.PerspectiveCamera ) { + + scale *= dollyScale; + + } else if ( scope.object instanceof THREE.OrthographicCamera ) { + + scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) ); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + + } else { + + console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' ); + scope.enableZoom = false; + + } + + } + + // + // event callbacks - update the object state + // + + function handleMouseDownRotate( event ) { + + //console.log( 'handleMouseDownRotate' ); + + rotateStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownDolly( event ) { + + //console.log( 'handleMouseDownDolly' ); + + dollyStart.set( event.clientX, event.clientY ); + + } + + function handleMouseDownPan( event ) { + + //console.log( 'handleMouseDownPan' ); + + panStart.set( event.clientX, event.clientY ); + + } + + function handleMouseMoveRotate( event ) { + + //console.log( 'handleMouseMoveRotate' ); + + rotateEnd.set( event.clientX, event.clientY ); + rotateDelta.subVectors( rotateEnd, rotateStart ); + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + // rotating across whole screen goes 360 degrees around + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed ); + + // rotating up and down along whole screen attempts to go 360, but limited to 180 + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed ); + + rotateStart.copy( rotateEnd ); + + scope.update(); + + } + + function handleMouseMoveDolly( event ) { + + //console.log( 'handleMouseMoveDolly' ); + + dollyEnd.set( event.clientX, event.clientY ); + + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + dollyIn( getZoomScale() ); + + } else if ( dollyDelta.y < 0 ) { + + dollyOut( getZoomScale() ); + + } + + dollyStart.copy( dollyEnd ); + + scope.update(); + + } + + function handleMouseMovePan( event ) { + + //console.log( 'handleMouseMovePan' ); + + panEnd.set( event.clientX, event.clientY ); + + panDelta.subVectors( panEnd, panStart ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + scope.update(); + + } + + function handleMouseUp( event ) { + + //console.log( 'handleMouseUp' ); + + } + + function handleMouseWheel( event ) { + + //console.log( 'handleMouseWheel' ); + + if ( event.deltaY < 0 ) { + + dollyOut( getZoomScale() ); + + } else if ( event.deltaY > 0 ) { + + dollyIn( getZoomScale() ); + + } + + scope.update(); + + } + + function handleKeyDown( event ) { + + //console.log( 'handleKeyDown' ); + + switch ( event.keyCode ) { + + case scope.keys.UP: + pan( 0, scope.keyPanSpeed ); + scope.update(); + break; + + case scope.keys.BOTTOM: + pan( 0, - scope.keyPanSpeed ); + scope.update(); + break; + + case scope.keys.LEFT: + pan( scope.keyPanSpeed, 0 ); + scope.update(); + break; + + case scope.keys.RIGHT: + pan( - scope.keyPanSpeed, 0 ); + scope.update(); + break; + + } + + } + + function handleTouchStartRotate( event ) { + + //console.log( 'handleTouchStartRotate' ); + + rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } + + function handleTouchStartDolly( event ) { + + //console.log( 'handleTouchStartDolly' ); + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyStart.set( 0, distance ); + + } + + function handleTouchStartPan( event ) { + + //console.log( 'handleTouchStartPan' ); + + panStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + } + + function handleTouchMoveRotate( event ) { + + //console.log( 'handleTouchMoveRotate' ); + + rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + rotateDelta.subVectors( rotateEnd, rotateStart ); + + var element = scope.domElement === document ? scope.domElement.body : scope.domElement; + + // rotating across whole screen goes 360 degrees around + rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed ); + + // rotating up and down along whole screen attempts to go 360, but limited to 180 + rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed ); + + rotateStart.copy( rotateEnd ); + + scope.update(); + + } + + function handleTouchMoveDolly( event ) { + + //console.log( 'handleTouchMoveDolly' ); + + var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; + var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; + + var distance = Math.sqrt( dx * dx + dy * dy ); + + dollyEnd.set( 0, distance ); + + dollyDelta.subVectors( dollyEnd, dollyStart ); + + if ( dollyDelta.y > 0 ) { + + dollyOut( getZoomScale() ); + + } else if ( dollyDelta.y < 0 ) { + + dollyIn( getZoomScale() ); + + } + + dollyStart.copy( dollyEnd ); + + scope.update(); + + } + + function handleTouchMovePan( event ) { + + //console.log( 'handleTouchMovePan' ); + + panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); + + panDelta.subVectors( panEnd, panStart ); + + pan( panDelta.x, panDelta.y ); + + panStart.copy( panEnd ); + + scope.update(); + + } + + function handleTouchEnd( event ) { + + //console.log( 'handleTouchEnd' ); + + } + + // + // event handlers - FSM: listen for events and reset state + // + + function onMouseDown( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + if ( event.button === scope.mouseButtons.ORBIT ) { + + if ( scope.enableRotate === false ) return; + + handleMouseDownRotate( event ); + + state = STATE.ROTATE; + + } else if ( event.button === scope.mouseButtons.ZOOM ) { + + if ( scope.enableZoom === false ) return; + + handleMouseDownDolly( event ); + + state = STATE.DOLLY; + + } else if ( event.button === scope.mouseButtons.PAN ) { + + if ( scope.enablePan === false ) return; + + handleMouseDownPan( event ); + + state = STATE.PAN; + + } + + if ( state !== STATE.NONE ) { + + document.addEventListener( 'mousemove', onMouseMove, false ); + document.addEventListener( 'mouseup', onMouseUp, false ); + + scope.dispatchEvent( startEvent ); + + } + + } + + function onMouseMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + + if ( state === STATE.ROTATE ) { + + if ( scope.enableRotate === false ) return; + + handleMouseMoveRotate( event ); + + } else if ( state === STATE.DOLLY ) { + + if ( scope.enableZoom === false ) return; + + handleMouseMoveDolly( event ); + + } else if ( state === STATE.PAN ) { + + if ( scope.enablePan === false ) return; + + handleMouseMovePan( event ); + + } + + } + + function onMouseUp( event ) { + + if ( scope.enabled === false ) return; + + handleMouseUp( event ); + + document.removeEventListener( 'mousemove', onMouseMove, false ); + document.removeEventListener( 'mouseup', onMouseUp, false ); + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onMouseWheel( event ) { + + if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return; + + event.preventDefault(); + event.stopPropagation(); + + handleMouseWheel( event ); + + scope.dispatchEvent( startEvent ); // not sure why these are here... + scope.dispatchEvent( endEvent ); + + } + + function onKeyDown( event ) { + + if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return; + + handleKeyDown( event ); + + } + + function onTouchStart( event ) { + + if ( scope.enabled === false ) return; + + switch ( event.touches.length ) { + + case 1: // one-fingered touch: rotate + + if ( scope.enableRotate === false ) return; + + handleTouchStartRotate( event ); + + state = STATE.TOUCH_ROTATE; + + break; + + case 2: // two-fingered touch: dolly + + if ( scope.enableZoom === false ) return; + + handleTouchStartDolly( event ); + + state = STATE.TOUCH_DOLLY; + + break; + + case 3: // three-fingered touch: pan + + if ( scope.enablePan === false ) return; + + handleTouchStartPan( event ); + + state = STATE.TOUCH_PAN; + + break; + + default: + + state = STATE.NONE; + + } + + if ( state !== STATE.NONE ) { + + scope.dispatchEvent( startEvent ); + + } + + } + + function onTouchMove( event ) { + + if ( scope.enabled === false ) return; + + event.preventDefault(); + event.stopPropagation(); + + switch ( event.touches.length ) { + + case 1: // one-fingered touch: rotate + + if ( scope.enableRotate === false ) return; + if ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?... + + handleTouchMoveRotate( event ); + + break; + + case 2: // two-fingered touch: dolly + + if ( scope.enableZoom === false ) return; + if ( state !== STATE.TOUCH_DOLLY ) return; // is this needed?... + + handleTouchMoveDolly( event ); + + break; + + case 3: // three-fingered touch: pan + + if ( scope.enablePan === false ) return; + if ( state !== STATE.TOUCH_PAN ) return; // is this needed?... + + handleTouchMovePan( event ); + + break; + + default: + + state = STATE.NONE; + + } + + } + + function onTouchEnd( event ) { + + if ( scope.enabled === false ) return; + + handleTouchEnd( event ); + + scope.dispatchEvent( endEvent ); + + state = STATE.NONE; + + } + + function onContextMenu( event ) { + + event.preventDefault(); + + } + + // + + scope.domElement.addEventListener( 'contextmenu', onContextMenu, false ); + + scope.domElement.addEventListener( 'mousedown', onMouseDown, false ); + scope.domElement.addEventListener( 'wheel', onMouseWheel, false ); + + scope.domElement.addEventListener( 'touchstart', onTouchStart, false ); + scope.domElement.addEventListener( 'touchend', onTouchEnd, false ); + scope.domElement.addEventListener( 'touchmove', onTouchMove, false ); + + window.addEventListener( 'keydown', onKeyDown, false ); + + // force an update at start + + this.update(); + + }; + + OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype ); + OrbitControls.prototype.constructor = OrbitControls; + + Object.defineProperties( OrbitControls.prototype, { + + center: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .center has been renamed to .target' ); + return this.target; + + } + + }, + + // backward compatibility + + noZoom: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' ); + return ! this.enableZoom; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' ); + this.enableZoom = ! value; + + } + + }, + + noRotate: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' ); + return ! this.enableRotate; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' ); + this.enableRotate = ! value; + + } + + }, + + noPan: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' ); + return ! this.enablePan; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' ); + this.enablePan = ! value; + + } + + }, + + noKeys: { + + get: function () { + + console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' ); + return ! this.enableKeys; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' ); + this.enableKeys = ! value; + + } + + }, + + staticMoving : { + + get: function () { + + console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' ); + return ! this.enableDamping; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' ); + this.enableDamping = ! value; + + } + + }, + + dynamicDampingFactor : { + + get: function () { + + console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' ); + return this.dampingFactor; + + }, + + set: function ( value ) { + + console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' ); + this.dampingFactor = value; + + } + + } + + } ); + + return OrbitControls; +}; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + +/** + * @author Rich Tibbett / https://github.com/richtr + * @author mrdoob / http://mrdoob.com/ + * @author Tony Parisi / http://www.tonyparisi.com/ + * @author Takahiro / https://github.com/takahirox + * @author Don McCurdy / https://www.donmccurdy.com + * + * modified by shrekshao for glavatar use + */ +module.exports = function( THREE ) { + + return ( function () { + + function GLTFLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; + + } + + // used by clothes file + // set by the skeleton file before loading + var gl_avatar_skeletons = null; + + // gl_avatar extension of the skeleton file + var gl_avatar_linked_skeleton = null; + + // use data texture as workaround for visibility array in webgl 1 + + + GLTFLoader.prototype = { + + enableGLTFAvatar: true, + // enableGLTFAvatar: false, + // enableGLTFAvatarPhysics: true, + + constructor: GLTFLoader, + + crossOrigin: 'Anonymous', + + setGlAvatarOfLinkingSkeleton: function(g) { + if (this.enableGLTFAvatar && g) { + gl_avatar_linked_skeleton = g; + gl_avatar_skeletons = g.skeletons; + } + }, + + // setGlAvatarSkeltonMap : function (g) { + // gl_avatar_skeletons = g; + // }, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var path = this.path && ( typeof this.path === 'string' ) ? this.path : THREE.Loader.prototype.extractUrlBase( url ); + + var loader = new THREE.FileLoader( scope.manager ); + + loader.setResponseType( 'arraybuffer' ); + + loader.load( url, function ( data ) { + + try { + + scope.parse( data, path, onLoad, onError ); + + } catch ( e ) { + + // For SyntaxError or TypeError, return a generic failure message. + onError( e.constructor === Error ? e : new Error( 'THREE.GLTFLoader: Unable to parse model.' ) ); + + } + + }, onProgress, onError ); + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + + }, + + setPath: function ( value ) { + + this.path = value; + + }, + + parse: function ( data, path, onLoad, onError ) { + + var content; + var extensions = {}; + + var magic = convertUint8ArrayToString( new Uint8Array( data, 0, 4 ) ); + + if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) { + + extensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data ); + content = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content; + + } else { + + content = convertUint8ArrayToString( new Uint8Array( data ) ); + + } + + var json = JSON.parse( content ); + + if ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) { + + onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) ); + return; + + } + + if ( json.extensionsUsed ) { + + if( json.extensionsUsed.indexOf( EXTENSIONS.GL_AVATAR ) >= 0 && this.enableGLTFAvatar) { + + extensions[ EXTENSIONS.GL_AVATAR ] = new GLTFAvatarExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_LIGHTS ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_LIGHTS ] = new GLTFLightsExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_COMMON ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] = new GLTFMaterialsCommonExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] = new GLTFMaterialsPbrSpecularGlossinessExtension(); + + } + + } + + console.time( 'GLTFLoader' ); + + var parser = new GLTFParser( json, extensions, { + + path: path || this.path, + crossOrigin: this.crossOrigin + + } ); + + parser.parse( function ( scene, scenes, cameras, animations ) { + + console.timeEnd( 'GLTFLoader' ); + + var glTF = { + scene: scene, + scenes: scenes, + cameras: cameras, + animations: animations, + + gl_avatar: parser.extensions && parser.extensions['gl_avatar'] + }; + + + + // !note: modified + + onLoad( glTF, parser.json, parser.buffers, parser.images ); + + // parser._withDependencies([ + // 'buffers', + // 'textures', + // 'nodes' + // ]).then(function(dependencies) { + // onLoad( glTF, parser.json, dependencies.buffers, dependencies.textures ); + // }); + + + + }, onError ); + + } + + }; + + /* GLTFREGISTRY */ + + function GLTFRegistry() { + + var objects = {}; + + return { + + get: function ( key ) { + + return objects[ key ]; + + }, + + add: function ( key, object ) { + + objects[ key ] = object; + + }, + + remove: function ( key ) { + + delete objects[ key ]; + + }, + + removeAll: function () { + + objects = {}; + + }, + + update: function ( scene, camera ) { + + for ( var name in objects ) { + + var object = objects[ name ]; + + if ( object.update ) { + + object.update( scene, camera ); + + } + + } + + } + + }; + + } + + /*********************************/ + /********** EXTENSIONS ***********/ + /*********************************/ + + var EXTENSIONS = { + KHR_BINARY_GLTF: 'KHR_binary_glTF', + KHR_LIGHTS: 'KHR_lights', + KHR_MATERIALS_COMMON: 'KHR_materials_common', + KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness', + GL_AVATAR: 'gl_avatar' + }; + + // var isUsingGlAvatar = false; + + var GL_AVATAR_VISIBILITY_LENGTH = 60; + + function updateVisibilityArray(v, v1) { + for (var i = 0, len = v1.length; i < len; i++) { + v[i] = v1[i] ? v[i] : 0; + } + + // // gl_avatar_linked_skeleton.visibilityLUT.data = gl_avatar_linked_skeleton.visibility; + // for (var i, len = v.length; i < len; i++) { + // gl_avatar_linked_skeleton.visibilityLUT.image.data[i] = v[i] * 255; + // } + gl_avatar_linked_skeleton.visibilityLUT.needsUpdate = true; + } + + + /** + * gl_avatar + */ + function GLTFAvatarExtension( json ) { + this.name = EXTENSIONS.GL_AVATAR; + + var extension = ( json.extensions && json.extensions[ EXTENSIONS.GL_AVATAR ] ) || {}; + + var type = this.type = extension.type || "skeleton"; + + if (type === "skeleton") { + + // parser + + this.skeletons = {}; + this.skinId2SkeletonKey = {}; + this.visibility = new Uint8Array(256).fill(255); + var skins = extension.skins || {}; + + // store id first, will get replaced with skeleton object in parser + for (var s in skins) { + this.skeletons[s] = skins[s]; + this.skinId2SkeletonKey[skins[s]] = s; + } + + + // reference to node + // may attach sub skeleton + var nodes = extension.nodes || {}; + this.nodes = {}; + this.nodeId2Name = {}; + // store id first, will get replaced with real object in parser + for (var n in nodes) { + this.nodes[n] = nodes[n]; + this.nodeId2Name[ nodes[n] ] = n; + } + + } else { + // must be skin (clothes) + if (!gl_avatar_skeletons) { + console.error('gl avatar linking skeletons not set!'); + } + this.visibility = extension.visibility; + + + // put linkedSkeletons to skins + json.skins = json.skins || []; + + if (extension.linkedSkeletons) { + var ls; + for (var i = 0, len = extension.linkedSkeletons.length; i < len; i++) { + ls = extension.linkedSkeletons[i]; + json.skins.push({ + // 'gl_avatar': json.skins.length, + 'gl_avatar': 1, + 'skeleton': ls.skeleton, + 'inverseBindMatrices': ls.inverseBindMatrices, + 'joints': [] + }); + } + } + + + + } + } + + + + /** + * Lights Extension + * + * Specification: PENDING + */ + function GLTFLightsExtension( json ) { + + this.name = EXTENSIONS.KHR_LIGHTS; + + this.lights = {}; + + var extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {}; + var lights = extension.lights || {}; + + for ( var lightId in lights ) { + + var light = lights[ lightId ]; + var lightNode; + + var color = new THREE.Color().fromArray( light.color ); + + switch ( light.type ) { + + case 'directional': + lightNode = new THREE.DirectionalLight( color ); + lightNode.position.set( 0, 0, 1 ); + break; + + case 'point': + lightNode = new THREE.PointLight( color ); + break; + + case 'spot': + lightNode = new THREE.SpotLight( color ); + lightNode.position.set( 0, 0, 1 ); + break; + + case 'ambient': + lightNode = new THREE.AmbientLight( color ); + break; + + } + + if ( lightNode ) { + + if ( light.constantAttenuation !== undefined ) { + + lightNode.intensity = light.constantAttenuation; + + } + + if ( light.linearAttenuation !== undefined ) { + + lightNode.distance = 1 / light.linearAttenuation; + + } + + if ( light.quadraticAttenuation !== undefined ) { + + lightNode.decay = light.quadraticAttenuation; + + } + + if ( light.fallOffAngle !== undefined ) { + + lightNode.angle = light.fallOffAngle; + + } + + if ( light.fallOffExponent !== undefined ) { + + console.warn( 'THREE.GLTFLoader:: light.fallOffExponent not currently supported.' ); + + } + + lightNode.name = light.name || ( 'light_' + lightId ); + this.lights[ lightId ] = lightNode; + + } + + } + + } + + /** + * Common Materials Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_common + */ + function GLTFMaterialsCommonExtension( json ) { + + this.name = EXTENSIONS.KHR_MATERIALS_COMMON; + + } + + GLTFMaterialsCommonExtension.prototype.getMaterialType = function ( material ) { + + var khrMaterial = material.extensions[ this.name ]; + + switch ( khrMaterial.type ) { + + case 'commonBlinn' : + case 'commonPhong' : + return THREE.MeshPhongMaterial; + + case 'commonLambert' : + return THREE.MeshLambertMaterial; + + case 'commonConstant' : + default : + return THREE.MeshBasicMaterial; + + } + + }; + + GLTFMaterialsCommonExtension.prototype.extendParams = function ( materialParams, material, parser ) { + + var khrMaterial = material.extensions[ this.name ]; + + var pending = []; + + var keys = []; + + // TODO: Currently ignored: 'ambientFactor', 'ambientTexture' + switch ( khrMaterial.type ) { + + case 'commonBlinn' : + case 'commonPhong' : + keys.push( 'diffuseFactor', 'diffuseTexture', 'specularFactor', 'specularTexture', 'shininessFactor' ); + break; + + case 'commonLambert' : + keys.push( 'diffuseFactor', 'diffuseTexture' ); + break; + + case 'commonConstant' : + default : + break; + + } + + var materialValues = {}; + + keys.forEach( function( v ) { + + if ( khrMaterial[ v ] !== undefined ) materialValues[ v ] = khrMaterial[ v ]; + + } ); + + if ( materialValues.diffuseFactor !== undefined ) { + + materialParams.color = new THREE.Color().fromArray( materialValues.diffuseFactor ); + materialParams.opacity = materialValues.diffuseFactor[ 3 ]; + + } + + if ( materialValues.diffuseTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', materialValues.diffuseTexture.index ) ); + + } + + if ( materialValues.specularFactor !== undefined ) { + + materialParams.specular = new THREE.Color().fromArray( materialValues.specularFactor ); + + } + + if ( materialValues.specularTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'specularMap', materialValues.specularTexture.index ) ); + + } + + if ( materialValues.shininessFactor !== undefined ) { + + materialParams.shininess = materialValues.shininessFactor; + + } + + return Promise.all( pending ); + + }; + + /* BINARY EXTENSION */ + + var BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF'; + var BINARY_EXTENSION_HEADER_MAGIC = 'glTF'; + var BINARY_EXTENSION_HEADER_LENGTH = 12; + var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 }; + + function GLTFBinaryExtension( data ) { + + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + + var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH ); + + this.header = { + magic: convertUint8ArrayToString( new Uint8Array( data.slice( 0, 4 ) ) ), + version: headerView.getUint32( 4, true ), + length: headerView.getUint32( 8, true ) + }; + + if ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) { + + throw new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' ); + + } else if ( this.header.version < 2.0 ) { + + throw new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use GLTFLoader instead.' ); + + } + + var chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH ); + var chunkIndex = 0; + + while ( chunkIndex < chunkView.byteLength ) { + + var chunkLength = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + var chunkType = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) { + + var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength ); + this.content = convertUint8ArrayToString( contentArray ); + + } else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) { + + var byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data.slice( byteOffset, byteOffset + chunkLength ); + + } + + // Clients must ignore chunks with unknown types. + + chunkIndex += chunkLength; + + } + + if ( this.content === null ) { + + throw new Error( 'THREE.GLTFLoader: JSON content not found.' ); + + } + + } + + /** + * Specular-Glossiness Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_pbrSpecularGlossiness + */ + function GLTFMaterialsPbrSpecularGlossinessExtension() { + + return { + + name: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, + + getMaterialType: function () { + + return THREE.ShaderMaterial; + + }, + + extendParams: function ( params, material, parser ) { + + var pbrSpecularGlossiness = material.extensions[ this.name ]; + + var shader = THREE.ShaderLib[ 'standard' ]; + + var uniforms = THREE.UniformsUtils.clone( shader.uniforms ); + + var specularMapParsFragmentChunk = [ + '#ifdef USE_SPECULARMAP', + ' uniform sampler2D specularMap;', + '#endif' + ].join( '\n' ); + + var glossinessMapParsFragmentChunk = [ + '#ifdef USE_GLOSSINESSMAP', + ' uniform sampler2D glossinessMap;', + '#endif' + ].join( '\n' ); + + var specularMapFragmentChunk = [ + 'vec3 specularFactor = specular;', + '#ifdef USE_SPECULARMAP', + ' vec4 texelSpecular = texture2D( specularMap, vUv );', + ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' specularFactor *= texelSpecular.rgb;', + '#endif' + ].join( '\n' ); + + var glossinessMapFragmentChunk = [ + 'float glossinessFactor = glossiness;', + '#ifdef USE_GLOSSINESSMAP', + ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );', + ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' glossinessFactor *= texelGlossiness.a;', + '#endif' + ].join( '\n' ); + + var lightPhysicalFragmentChunk = [ + 'PhysicalMaterial material;', + 'material.diffuseColor = diffuseColor.rgb;', + 'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );', + 'material.specularColor = specularFactor.rgb;', + ].join( '\n' ); + + var fragmentShader = shader.fragmentShader + .replace( '#include ', '' ) + .replace( 'uniform float roughness;', 'uniform vec3 specular;' ) + .replace( 'uniform float metalness;', 'uniform float glossiness;' ) + .replace( '#include ', specularMapParsFragmentChunk ) + .replace( '#include ', glossinessMapParsFragmentChunk ) + .replace( '#include ', specularMapFragmentChunk ) + .replace( '#include ', glossinessMapFragmentChunk ) + .replace( '#include ', lightPhysicalFragmentChunk ); + + delete uniforms.roughness; + delete uniforms.metalness; + delete uniforms.roughnessMap; + delete uniforms.metalnessMap; + + uniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) }; + uniforms.glossiness = { value: 0.5 }; + uniforms.specularMap = { value: null }; + uniforms.glossinessMap = { value: null }; + + params.vertexShader = shader.vertexShader; + params.fragmentShader = fragmentShader; + params.uniforms = uniforms; + params.defines = { 'STANDARD': '' }; + + params.color = new THREE.Color( 1.0, 1.0, 1.0 ); + params.opacity = 1.0; + + var pending = []; + + if ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) { + + var array = pbrSpecularGlossiness.diffuseFactor; + + params.color.fromArray( array ); + params.opacity = array[ 3 ]; + + } + + if ( pbrSpecularGlossiness.diffuseTexture !== undefined ) { + + pending.push( parser.assignTexture( params, 'map', pbrSpecularGlossiness.diffuseTexture.index ) ); + + } + + params.emissive = new THREE.Color( 0.0, 0.0, 0.0 ); + params.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0; + params.specular = new THREE.Color( 1.0, 1.0, 1.0 ); + + if ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) { + + params.specular.fromArray( pbrSpecularGlossiness.specularFactor ); + + } + + if ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) { + + var specGlossIndex = pbrSpecularGlossiness.specularGlossinessTexture.index; + pending.push( parser.assignTexture( params, 'glossinessMap', specGlossIndex ) ); + pending.push( parser.assignTexture( params, 'specularMap', specGlossIndex ) ); + + } + + return Promise.all( pending ); + + }, + + createMaterial: function ( params ) { + + // setup material properties based on MeshStandardMaterial for Specular-Glossiness + + var material = new THREE.ShaderMaterial( { + defines: params.defines, + vertexShader: params.vertexShader, + fragmentShader: params.fragmentShader, + uniforms: params.uniforms, + fog: true, + lights: true, + opacity: params.opacity, + transparent: params.transparent + } ); + + material.isGLTFSpecularGlossinessMaterial = true; + + material.color = params.color; + + material.map = params.map === undefined ? null : params.map; + + material.lightMap = null; + material.lightMapIntensity = 1.0; + + material.aoMap = params.aoMap === undefined ? null : params.aoMap; + material.aoMapIntensity = 1.0; + + material.emissive = params.emissive; + material.emissiveIntensity = 1.0; + material.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap; + + material.bumpMap = params.bumpMap === undefined ? null : params.bumpMap; + material.bumpScale = 1; + + material.normalMap = params.normalMap === undefined ? null : params.normalMap; + material.normalScale = new THREE.Vector2( 1, 1 ); + + material.displacementMap = null; + material.displacementScale = 1; + material.displacementBias = 0; + + material.specularMap = params.specularMap === undefined ? null : params.specularMap; + material.specular = params.specular; + + material.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap; + material.glossiness = params.glossiness; + + material.alphaMap = null; + + material.envMap = params.envMap === undefined ? null : params.envMap; + material.envMapIntensity = 1.0; + + material.refractionRatio = 0.98; + + material.extensions.derivatives = true; + + return material; + + }, + + // Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer. + refreshUniforms: function ( renderer, scene, camera, geometry, material, group ) { + + var uniforms = material.uniforms; + var defines = material.defines; + + uniforms.opacity.value = material.opacity; + + uniforms.diffuse.value.copy( material.color ); + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + uniforms.map.value = material.map; + uniforms.specularMap.value = material.specularMap; + uniforms.alphaMap.value = material.alphaMap; + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. normal map + // 4. bump map + // 5. alpha map + // 6. emissive map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.glossinessMap ) { + + uvScaleMap = material.glossinessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + var offset = uvScaleMap.offset; + var repeat = uvScaleMap.repeat; + + uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); + + } + + uniforms.envMap.value = material.envMap; + uniforms.envMapIntensity.value = material.envMapIntensity; + uniforms.flipEnvMap.value = ( material.envMap && material.envMap.isCubeTexture ) ? -1 : 1; + + uniforms.refractionRatio.value = material.refractionRatio; + + uniforms.specular.value.copy( material.specular ); + uniforms.glossiness.value = material.glossiness; + + uniforms.glossinessMap.value = material.glossinessMap; + + uniforms.emissiveMap.value = material.emissiveMap; + uniforms.bumpMap.value = material.bumpMap; + uniforms.normalMap.value = material.normalMap; + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + if ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) { + + defines.USE_GLOSSINESSMAP = ''; + // set USE_ROUGHNESSMAP to enable vUv + defines.USE_ROUGHNESSMAP = ''; + + } + + if ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) { + + delete defines.USE_GLOSSINESSMAP; + delete defines.USE_ROUGHNESSMAP; + + } + + } + + }; + + } + + /*********************************/ + /********** INTERNALS ************/ + /*********************************/ + + /* CONSTANTS */ + + var WEBGL_CONSTANTS = { + FLOAT: 5126, + //FLOAT_MAT2: 35674, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 + }; + + var WEBGL_TYPE = { + 5126: Number, + //35674: THREE.Matrix2, + 35675: THREE.Matrix3, + 35676: THREE.Matrix4, + 35664: THREE.Vector2, + 35665: THREE.Vector3, + 35666: THREE.Vector4, + 35678: THREE.Texture + }; + + var WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }; + + var WEBGL_FILTERS = { + 9728: THREE.NearestFilter, + 9729: THREE.LinearFilter, + 9984: THREE.NearestMipMapNearestFilter, + 9985: THREE.LinearMipMapNearestFilter, + 9986: THREE.NearestMipMapLinearFilter, + 9987: THREE.LinearMipMapLinearFilter + }; + + var WEBGL_WRAPPINGS = { + 33071: THREE.ClampToEdgeWrapping, + 33648: THREE.MirroredRepeatWrapping, + 10497: THREE.RepeatWrapping + }; + + var WEBGL_TEXTURE_FORMATS = { + 6406: THREE.AlphaFormat, + 6407: THREE.RGBFormat, + 6408: THREE.RGBAFormat, + 6409: THREE.LuminanceFormat, + 6410: THREE.LuminanceAlphaFormat + }; + + var WEBGL_TEXTURE_DATATYPES = { + 5121: THREE.UnsignedByteType, + 32819: THREE.UnsignedShort4444Type, + 32820: THREE.UnsignedShort5551Type, + 33635: THREE.UnsignedShort565Type + }; + + var WEBGL_SIDES = { + 1028: THREE.BackSide, // Culling front + 1029: THREE.FrontSide // Culling back + //1032: THREE.NoSide // Culling front and back, what to do? + }; + + var WEBGL_DEPTH_FUNCS = { + 512: THREE.NeverDepth, + 513: THREE.LessDepth, + 514: THREE.EqualDepth, + 515: THREE.LessEqualDepth, + 516: THREE.GreaterEqualDepth, + 517: THREE.NotEqualDepth, + 518: THREE.GreaterEqualDepth, + 519: THREE.AlwaysDepth + }; + + var WEBGL_BLEND_EQUATIONS = { + 32774: THREE.AddEquation, + 32778: THREE.SubtractEquation, + 32779: THREE.ReverseSubtractEquation + }; + + var WEBGL_BLEND_FUNCS = { + 0: THREE.ZeroFactor, + 1: THREE.OneFactor, + 768: THREE.SrcColorFactor, + 769: THREE.OneMinusSrcColorFactor, + 770: THREE.SrcAlphaFactor, + 771: THREE.OneMinusSrcAlphaFactor, + 772: THREE.DstAlphaFactor, + 773: THREE.OneMinusDstAlphaFactor, + 774: THREE.DstColorFactor, + 775: THREE.OneMinusDstColorFactor, + 776: THREE.SrcAlphaSaturateFactor + // The followings are not supported by Three.js yet + //32769: CONSTANT_COLOR, + //32770: ONE_MINUS_CONSTANT_COLOR, + //32771: CONSTANT_ALPHA, + //32772: ONE_MINUS_CONSTANT_COLOR + }; + + var WEBGL_TYPE_SIZES = { + 'SCALAR': 1, + 'VEC2': 2, + 'VEC3': 3, + 'VEC4': 4, + 'MAT2': 4, + 'MAT3': 9, + 'MAT4': 16 + }; + + var PATH_PROPERTIES = { + scale: 'scale', + translation: 'position', + rotation: 'quaternion', + weights: 'morphTargetInfluences' + }; + + var INTERPOLATION = { + CATMULLROMSPLINE: THREE.InterpolateSmooth, + CUBICSPLINE: THREE.InterpolateSmooth, + LINEAR: THREE.InterpolateLinear, + STEP: THREE.InterpolateDiscrete + }; + + var STATES_ENABLES = { + 2884: 'CULL_FACE', + 2929: 'DEPTH_TEST', + 3042: 'BLEND', + 3089: 'SCISSOR_TEST', + 32823: 'POLYGON_OFFSET_FILL', + 32926: 'SAMPLE_ALPHA_TO_COVERAGE' + }; + + var ALPHA_MODES = { + OPAQUE: 'OPAQUE', + MASK: 'MASK', + BLEND: 'BLEND' + }; + + /* UTILITY FUNCTIONS */ + + function _each( object, callback, thisObj ) { + + if ( !object ) { + return Promise.resolve(); + } + + var results; + var fns = []; + + if ( Object.prototype.toString.call( object ) === '[object Array]' ) { + + results = []; + + var length = object.length; + + for ( var idx = 0; idx < length; idx ++ ) { + + var value = callback.call( thisObj || this, object[ idx ], idx ); + + if ( value ) { + + fns.push( value ); + + if ( value instanceof Promise ) { + + value.then( function( key, value ) { + + results[ key ] = value; + + }.bind( this, idx )); + + } else { + + results[ idx ] = value; + + } + + } + + } + + } else { + + results = {}; + + for ( var key in object ) { + + if ( object.hasOwnProperty( key ) ) { + + var value = callback.call( thisObj || this, object[ key ], key ); + + if ( value ) { + + fns.push( value ); + + if ( value instanceof Promise ) { + + value.then( function( key, value ) { + + results[ key ] = value; + + }.bind( this, key )); + + } else { + + results[ key ] = value; + + } + + } + + } + + } + + } + + return Promise.all( fns ).then( function() { + + return results; + + }); + + } + + function resolveURL( url, path ) { + + // Invalid URL + if ( typeof url !== 'string' || url === '' ) + return ''; + + // Absolute URL http://,https://,// + if ( /^(https?:)?\/\//i.test( url ) ) { + + return url; + + } + + // Data URI + if ( /^data:.*,.*$/i.test( url ) ) { + + return url; + + } + + // Blob URL + if ( /^blob:.*$/i.test( url ) ) { + + return url; + + } + + // Relative URL + return ( path || '' ) + url; + + } + + function convertUint8ArrayToString( array ) { + + if ( window.TextDecoder !== undefined ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + var s = ''; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + s += String.fromCharCode( array[ i ] ); + + } + + return s; + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material + */ + function createDefaultMaterial() { + + return new THREE.MeshStandardMaterial( { + color: 0xFFFFFF, + emissive: 0x000000, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: THREE.FrontSide + } ); + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets + * @param {THREE.Mesh} mesh + * @param {GLTF.Mesh} meshDef + * @param {GLTF.Primitive} primitiveDef + * @param {Object} dependencies + */ + function addMorphTargets ( mesh, meshDef, primitiveDef, dependencies ) { + + var geometry = mesh.geometry; + var material = mesh.material; + + var targets = primitiveDef.targets; + var morphAttributes = geometry.morphAttributes; + + morphAttributes.position = []; + morphAttributes.normal = []; + + material.morphTargets = true; + + for ( var i = 0, il = targets.length; i < il; i ++ ) { + + var target = targets[ i ]; + var attributeName = 'morphTarget' + i; + + var positionAttribute, normalAttribute; + + if ( target.POSITION !== undefined ) { + + // Three.js morph formula is + // position + // + weight0 * ( morphTarget0 - position ) + // + weight1 * ( morphTarget1 - position ) + // ... + // while the glTF one is + // position + // + weight0 * morphTarget0 + // + weight1 * morphTarget1 + // ... + // then adding position to morphTarget. + // So morphTarget value will depend on mesh's position, then cloning attribute + // for the case if attribute is shared among two or more meshes. + + positionAttribute = dependencies.accessors[ target.POSITION ].clone(); + var position = geometry.attributes.position; + + for ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) { + + positionAttribute.setXYZ( + j, + positionAttribute.getX( j ) + position.getX( j ), + positionAttribute.getY( j ) + position.getY( j ), + positionAttribute.getZ( j ) + position.getZ( j ) + ); + + } + + } else { + + // Copying the original position not to affect the final position. + // See the formula above. + positionAttribute = geometry.attributes.position.clone(); + + } + + if ( target.NORMAL !== undefined ) { + + material.morphNormals = true; + + // see target.POSITION's comment + + normalAttribute = dependencies.accessors[ target.NORMAL ].clone(); + var normal = geometry.attributes.normal; + + for ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) { + + normalAttribute.setXYZ( + j, + normalAttribute.getX( j ) + normal.getX( j ), + normalAttribute.getY( j ) + normal.getY( j ), + normalAttribute.getZ( j ) + normal.getZ( j ) + ); + + } + + } else { + + normalAttribute = geometry.attributes.normal.clone(); + + } + + if ( target.TANGENT !== undefined ) { + + // TODO: implement + + } + + positionAttribute.name = attributeName; + normalAttribute.name = attributeName; + + morphAttributes.position.push( positionAttribute ); + morphAttributes.normal.push( normalAttribute ); + + } + + mesh.updateMorphTargets(); + + if ( meshDef.weights !== undefined ) { + + for ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) { + + mesh.morphTargetInfluences[ i ] = meshDef.weights[ i ]; + + } + + } + + } + + /* GLTF PARSER */ + + function GLTFParser( json, extensions, options ) { + + this.json = json || {}; + this.extensions = extensions || {}; + this.options = options || {}; + + // loader object cache + this.cache = new GLTFRegistry(); + + this.enableGLTFAvatar = extensions[EXTENSIONS.GL_AVATAR] ? true : false; + + } + + GLTFParser.prototype._withDependencies = function ( dependencies ) { + + var _dependencies = {}; + + for ( var i = 0; i < dependencies.length; i ++ ) { + + var dependency = dependencies[ i ]; + var fnName = 'load' + dependency.charAt( 0 ).toUpperCase() + dependency.slice( 1 ); + + var cached = this.cache.get( dependency ); + + if ( cached !== undefined ) { + + _dependencies[ dependency ] = cached; + + } else if ( this[ fnName ] ) { + + var fn = this[ fnName ](); + this.cache.add( dependency, fn ); + + _dependencies[ dependency ] = fn; + + } + + } + + return _each( _dependencies, function ( dependency ) { + + return dependency; + + } ); + + }; + + GLTFParser.prototype.parse = function ( onLoad, onError ) { + + var json = this.json; + + // Clear the loader cache + this.cache.removeAll(); + + // !! modified + this.buffers = {}; + this.images = {}; //external sources + + // Fire the callback on complete + this._withDependencies( [ + + 'scenes', + 'cameras', + 'animations' + + ] ).then( function ( dependencies ) { + + var scenes = []; + + for ( var name in dependencies.scenes ) { + + scenes.push( dependencies.scenes[ name ] ); + + } + + var scene = json.scene !== undefined ? dependencies.scenes[ json.scene ] : scenes[ 0 ]; + + var cameras = []; + + for ( var name in dependencies.cameras ) { + + var camera = dependencies.cameras[ name ]; + cameras.push( camera ); + + } + + var animations = []; + + for ( var name in dependencies.animations ) { + + animations.push( dependencies.animations[ name ] ); + + } + + onLoad( scene, scenes, cameras, animations ); + + } ).catch( onError ); + + }; + + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + GLTFParser.prototype.getDependency = function ( type, index ) { + + var cacheKey = type + ':' + index; + var dependency = this.cache.get( cacheKey ); + + if ( !dependency ) { + + var fnName = 'load' + type.charAt( 0 ).toUpperCase() + type.slice( 1 ); + dependency = this[ fnName ]( index ); + this.cache.add( cacheKey, dependency ); + + } + + return dependency; + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBuffer = function ( bufferIndex ) { + + var bufferDef = this.json.buffers[ bufferIndex ]; + + if ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) { + + throw new Error( 'THREE.GLTFLoader: %s buffer type is not supported.', bufferDef.type ); + + } + + // If present, GLB container is required to be the first buffer. + if ( bufferDef.uri === undefined && bufferIndex === 0 ) { + + return Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body ); + + } + + var options = this.options; + + return new Promise( function ( resolve ) { + + var loader = new THREE.FileLoader(); + loader.setResponseType( 'arraybuffer' ); + loader.load( resolveURL( bufferDef.uri, options.path ), resolve); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) { + + var bufferViewDef = this.json.bufferViews[ bufferViewIndex ]; + + // temp: assume there is + var parser = this; + var bufferURI = this.json.buffers[bufferViewDef.buffer].uri || null; + + return this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) { + + if (bufferURI && !parser.buffers[bufferURI]) { + parser.buffers[bufferURI] = buffer; + } + + var byteLength = bufferViewDef.byteLength || 0; + var byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice( byteOffset, byteOffset + byteLength ); + + } ); + + }; + + GLTFParser.prototype.loadAccessors = function () { + + var parser = this; + var json = this.json; + + return _each( json.accessors, function ( accessor ) { + + return parser.getDependency( 'bufferView', accessor.bufferView ).then( function ( bufferView ) { + + var itemSize = WEBGL_TYPE_SIZES[ accessor.type ]; + var TypedArray = WEBGL_COMPONENT_TYPES[ accessor.componentType ]; + + // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12. + var elementBytes = TypedArray.BYTES_PER_ELEMENT; + var itemBytes = elementBytes * itemSize; + var byteStride = json.bufferViews[ accessor.bufferView ].byteStride; + var array; + + // The buffer is not interleaved if the stride is the item size in bytes. + if ( byteStride && byteStride !== itemBytes ) { + + // Use the full buffer if it's interleaved. + array = new TypedArray( bufferView ); + + // Integer parameters to IB/IBA are in array elements, not bytes. + var ib = new THREE.InterleavedBuffer( array, byteStride / elementBytes ); + + return new THREE.InterleavedBufferAttribute( ib, itemSize, accessor.byteOffset / elementBytes ); + + } else { + + array = new TypedArray( bufferView, accessor.byteOffset, accessor.count * itemSize ); + + return new THREE.BufferAttribute( array, itemSize ); + + } + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + GLTFParser.prototype.loadTexture = function ( textureIndex ) { + + var parser = this; + var json = this.json; + var options = this.options; + + var URL = window.URL || window.webkitURL; + + var textureDef = json.textures[ textureIndex ]; + var source = json.images[ textureDef.source ]; + var sourceURI = source.uri; + var isObjectURL = false; + + if ( source.bufferView !== undefined ) { + + // Load binary image data from bufferView, if provided. + + sourceURI = parser.getDependency( 'bufferView', source.bufferView ) + .then( function ( bufferView ) { + + isObjectURL = true; + var blob = new Blob( [ bufferView ], { type: source.mimeType } ); + sourceURI = URL.createObjectURL( blob ); + return sourceURI; + + } ); + + } + + return Promise.resolve( sourceURI ).then( function ( sourceURI ) { + + // Load Texture resource. + + var textureLoader = THREE.Loader.Handlers.get( sourceURI ) || new THREE.TextureLoader(); + textureLoader.setCrossOrigin( options.crossOrigin ); + + return new Promise( function ( resolve, reject ) { + + textureLoader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject ); + + } ); + + } ).then( function ( texture ) { + + // Clean up resources and configure Texture. + + if ( isObjectURL !== undefined ) { + + URL.revokeObjectURL( sourceURI ); + + } + + texture.flipY = false; + + if ( textureDef.name !== undefined ) texture.name = textureDef.name; + + texture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat; + + if ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) { + + console.warn( 'THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. ' + + 'internalFormat will be forced to be the same value as format.' ); + + } + + texture.type = textureDef.type !== undefined ? WEBGL_TEXTURE_DATATYPES[ textureDef.type ] : THREE.UnsignedByteType; + + var samplers = json.samplers || {}; + var sampler = samplers[ textureDef.sampler ] || {}; + + texture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter; + texture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter; + texture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping; + texture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping; + + return texture; + + } ); + + }; + + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} textureName + * @param {number} textureIndex + * @return {Promise} + */ + GLTFParser.prototype.assignTexture = function ( materialParams, textureName, textureIndex ) { + + var parser = this; + var imageURI = this.json.images[ this.json.textures[textureIndex].source ].uri || null; + + return this.getDependency( 'texture', textureIndex ).then( function ( texture ) { + + + // TODO: !! this has to be raw arraybuffer from xhr + if (imageURI && !parser.images[imageURI]) { + parser.images[imageURI] = texture.image; + } + + materialParams[ textureName ] = texture; + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @return {Promise>} + */ + GLTFParser.prototype.loadMaterials = function () { + + var parser = this; + var json = this.json; + var extensions = this.extensions; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[ EXTENSIONS.GL_AVATAR ] : null; + + return _each( json.materials, function ( material ) { + + var materialType; + var materialParams = {}; + var materialExtensions = material.extensions || {}; + + var pending = []; + + if ( gl_avatar && materialExtensions[ EXTENSIONS.GL_AVATAR ] ) { + + // bodyIdLUT + if (materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT !== undefined) { + pending.push( parser.assignTexture( materialParams, 'bodyIdLUT', materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT ) ); + var visibilityLUTArray = gl_avatar.visibility; + // // TODO: change to 16x16 to save mem + var texture = gl_avatar.visibilityLUT = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, 256, 1, THREE.AlphaFormat, THREE.UnsignedByteType); + // var texture = gl_avatar.visibilityLUT = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, GL_AVATAR_VISIBILITY_LENGTH, 1, THREE.AlphaFormat, THREE.UnsignedByteType); + // var texture = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, 16, 16, THREE.AlphaFormat, THREE.UnsignedByteType); + texture.magFilter = THREE.NearestFilter; + texture.minFilter = THREE.NearestFilter; + texture.wrapS = THREE.ClampToEdgeWrapping; + texture.wrapT = THREE.ClampToEdgeWrapping; + texture.needsUpdate = true; + } + + } + + // if ( materialExtensions[ EXTENSIONS.GL_AVATAR ] && materialExtensions[ EXTENSIONS.GL_AVATAR ].toon !== undefined) { + // // toon shading material test + // var toon = materialExtensions[ EXTENSIONS.GL_AVATAR ].toon; + // console.log(toon); + // // materialType = THREE.MeshPhongMaterial; + // materialType = THREE.MeshToonMaterial; + + // materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 ); + // materialParams.opacity = 1.0; + + // if ( Array.isArray( toon.color ) ) { + + // var array = toon.color; + + // materialParams.color.fromArray( array ); + // materialParams.opacity = array[ 3 ]; + + // } + + // if ( toon.map !== undefined ) { + + // pending.push( parser.assignTexture( materialParams, 'map', toon.map.index ) ); + + // } + + // } + // else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] ) { + if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] ) { + + var khcExtension = extensions[ EXTENSIONS.KHR_MATERIALS_COMMON ]; + materialType = khcExtension.getMaterialType( material ); + pending.push( khcExtension.extendParams( materialParams, material, parser ) ); + + } else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) { + + var sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ]; + materialType = sgExtension.getMaterialType( material ); + pending.push( sgExtension.extendParams( materialParams, material, parser ) ); + + } else if ( material.pbrMetallicRoughness !== undefined ) { + + // Specification: + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material + + materialType = THREE.MeshStandardMaterial; + + var metallicRoughness = material.pbrMetallicRoughness; + + materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 ); + materialParams.opacity = 1.0; + + if ( Array.isArray( metallicRoughness.baseColorFactor ) ) { + + var array = metallicRoughness.baseColorFactor; + + materialParams.color.fromArray( array ); + materialParams.opacity = array[ 3 ]; + + } + + if ( metallicRoughness.baseColorTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) ); + + } + + materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0; + materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0; + + if ( metallicRoughness.metallicRoughnessTexture !== undefined ) { + + var textureIndex = metallicRoughness.metallicRoughnessTexture.index; + pending.push( parser.assignTexture( materialParams, 'metalnessMap', textureIndex ) ); + pending.push( parser.assignTexture( materialParams, 'roughnessMap', textureIndex ) ); + + } + + } else { + + materialType = THREE.MeshPhongMaterial; + + } + + if ( material.doubleSided === true ) { + + materialParams.side = THREE.DoubleSide; + + } + + var alphaMode = material.alphaMode || ALPHA_MODES.OPAQUE; + + if ( alphaMode !== ALPHA_MODES.OPAQUE ) { + + materialParams.transparent = true; + + } else { + + materialParams.transparent = false; + + } + + if ( material.normalTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'normalMap', material.normalTexture.index ) ); + + } + + if ( material.occlusionTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'aoMap', material.occlusionTexture.index ) ); + + } + + if ( material.emissiveFactor !== undefined ) { + + if ( materialType === THREE.MeshBasicMaterial ) { + + materialParams.color = new THREE.Color().fromArray( material.emissiveFactor ); + + } else { + + materialParams.emissive = new THREE.Color().fromArray( material.emissiveFactor ); + + } + + } + + if ( material.emissiveTexture !== undefined ) { + + if ( materialType === THREE.MeshBasicMaterial ) { + + pending.push( parser.assignTexture( materialParams, 'map', material.emissiveTexture.index ) ); + + } else { + + pending.push( parser.assignTexture( materialParams, 'emissiveMap', material.emissiveTexture.index ) ); + + } + + } + + + + return Promise.all( pending ).then( function () { + + var _material; + + if ( materialType === THREE.ShaderMaterial ) { + + _material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams ); + + } else { + + _material = new materialType( materialParams ); + + } + + + if ( gl_avatar && materialExtensions[ EXTENSIONS.GL_AVATAR ] ) { + var bodyIdLUT = materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT; + if (bodyIdLUT !== undefined) { + _material.onBeforeCompile = function (shader) { + shader.uniforms.bodyIdLUT = { + type: 't', + value: materialParams.bodyIdLUT + }; + + shader.uniforms.visibilityLUT = { + type: 't', + value: materialParams.visibilityLUT + }; + + // TODO: uniform buffer of visibility array + + // console.log(shader.fragmentShader); + shader.fragmentShader = shader.fragmentShader.replace( + 'void main() {', + [ + '#define GLAVATAR_HAS_BODY_ID_LUT', + + '#ifdef GLAVATAR_HAS_BODY_ID_LUT', + '#define GLAVATAR_BODY_VISIBILITY_LENGTH 60', + // 'uniform usampler2D bodyIdLUT;', + 'uniform sampler2D bodyIdLUT;', + // 'uniform bool visibility[GLAVATAR_BODY_VISIBILITY_LENGTH]; //wait for webgl2 to use uniform buffer', + 'uniform sampler2D visibilityLUT;', + '#endif', + + 'void main()', + '{', + '#ifdef GLAVATAR_HAS_BODY_ID_LUT', + // ' uint bodyId = texture(bodyIdLUT, v_uv).r;', + // ' int bodyId = int(texture2D(bodyIdLUT, vUv).r * 255.0);', + // ' int bodyId = int(texture2D(bodyIdLUT, vUv).r * 255.0);', + ' vec2 bodyId = vec2(texture2D(bodyIdLUT, vUv).r, 0.5);', + // ' gl_FragColor = vec4(bodyId.r, bodyId.r, bodyId.r, 1.0);', + // ' float t = texture2D(visibilityLUT, vec2(vUv.x, 0.5)).a;', + // ' float t = texture2D(visibilityLUT, vec2(0.0, 0.0)).a;', + + // ' float t = texture2D(visibilityLUT, bodyId).a;', + // ' gl_FragColor = vec4(t,t,t, 1.0);', + // ' return;', + + // ' if (bodyId < GLAVATAR_BODY_VISIBILITY_LENGTH)', + // ' {', + // ' if (!visibility[bodyId])', + // ' if (1)', + // ' if (0u == visibility[bodyId])', + ' if (texture2D(visibilityLUT, bodyId).a < 0.5)', + ' {', + ' discard;', + ' }', + // ' }', + '#endif' + ].join('\n') + ); + + + }; + } + + } + + if ( material.name !== undefined ) _material.name = material.name; + + // Normal map textures use OpenGL conventions: + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materialnormaltexture + _material.normalScale.x = -1; + + _material.userData = material.extras; + + return _material; + + } ); + + } ); + + }; + + GLTFParser.prototype.loadGeometries = function ( primitives ) { + + return this._withDependencies( [ + + 'accessors', + + ] ).then( function ( dependencies ) { + + return _each( primitives, function ( primitive ) { + + var geometry = new THREE.BufferGeometry(); + + var attributes = primitive.attributes; + + for ( var attributeId in attributes ) { + + var attributeEntry = attributes[ attributeId ]; + + if ( attributeEntry === undefined ) return; + + var bufferAttribute = dependencies.accessors[ attributeEntry ]; + + switch ( attributeId ) { + + case 'POSITION': + + geometry.addAttribute( 'position', bufferAttribute ); + break; + + case 'NORMAL': + + geometry.addAttribute( 'normal', bufferAttribute ); + break; + + case 'TEXCOORD_0': + case 'TEXCOORD0': + case 'TEXCOORD': + + geometry.addAttribute( 'uv', bufferAttribute ); + break; + + case 'TEXCOORD_1': + + geometry.addAttribute( 'uv2', bufferAttribute ); + break; + + case 'COLOR_0': + case 'COLOR0': + case 'COLOR': + + geometry.addAttribute( 'color', bufferAttribute ); + break; + + case 'WEIGHTS_0': + case 'WEIGHT': // WEIGHT semantic deprecated. + + geometry.addAttribute( 'skinWeight', bufferAttribute ); + break; + + case 'JOINTS_0': + case 'JOINT': // JOINT semantic deprecated. + + geometry.addAttribute( 'skinIndex', bufferAttribute ); + break; + + } + + } + + if ( primitive.indices !== undefined ) { + + geometry.setIndex( dependencies.accessors[ primitive.indices ] ); + + } + + return geometry; + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + */ + GLTFParser.prototype.loadMeshes = function () { + + var scope = this; + var json = this.json; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + return this._withDependencies( [ + + 'accessors', + 'materials' + + ] ).then( function ( dependencies ) { + + return _each( json.meshes, function ( meshDef ) { + + var group = new THREE.Group(); + + if ( meshDef.name !== undefined ) group.name = meshDef.name; + if ( meshDef.extras ) group.userData = meshDef.extras; + + var primitives = meshDef.primitives || []; + + if (gl_avatar) { + // gl_avatar for clothes + // move attributes from extension field to actual primitive attribute field + for (var i = 0, len = primitives.length; i < len; i++) { + if (primitives[i].extensions && primitives[i].extensions.gl_avatar) { + var att = primitives[i].extensions.gl_avatar.attributes; + for (var a in att) { + primitives[i].attributes[a] = att[a]; + } + } + } + } + + + return scope.loadGeometries( primitives ).then( function ( geometries ) { + + for ( var name in primitives ) { + + var primitive = primitives[ name ]; + var geometry = geometries[ name ]; + + var material = primitive.material === undefined + ? createDefaultMaterial() + : dependencies.materials[ primitive.material ]; + + if ( material.aoMap + && geometry.attributes.uv2 === undefined + && geometry.attributes.uv !== undefined ) { + + console.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' ); + geometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) ); + + } + + if ( geometry.attributes.color !== undefined ) { + + material.vertexColors = THREE.VertexColors; + material.needsUpdate = true; + + } + + if ( geometry.attributes.normal === undefined ) { + + if ( material.flatShading !== undefined ) { + + material.flatShading = true; + + } else { + + // TODO: Remove this backwards-compatibility fix after r87 release. + material.shading = THREE.FlatShading; + + } + + } + + var mesh; + + if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === undefined ) { + + mesh = new THREE.Mesh( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) { + + mesh = new THREE.Mesh( geometry, material ); + mesh.drawMode = THREE.TriangleStripDrawMode; + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) { + + mesh = new THREE.Mesh( geometry, material ); + mesh.drawMode = THREE.TriangleFanDrawMode; + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) { + + mesh = new THREE.LineSegments( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) { + + mesh = new THREE.Line( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) { + + mesh = new THREE.LineLoop( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) { + + mesh = new THREE.Points( geometry, material ); + + } else { + + throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ', primitive.mode ); + + } + + mesh.name = group.name + '_' + name; + + if ( primitive.targets !== undefined ) { + + addMorphTargets( mesh, meshDef, primitive, dependencies ); + + } + + if ( primitive.extras ) mesh.userData = primitive.extras; + + group.add( mesh ); + + } + + return group; + + } ); + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + */ + GLTFParser.prototype.loadCameras = function () { + + var json = this.json; + + return _each( json.cameras, function ( camera ) { + + var _camera; + + var params = camera[ camera.type ]; + + if ( !params ) { + + console.warn( 'THREE.GLTFLoader: Missing camera parameters.' ); + return; + + } + + if ( camera.type === 'perspective' ) { + + var aspectRatio = params.aspectRatio || 1; + var xfov = params.yfov * aspectRatio; + + _camera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( xfov ), aspectRatio, params.znear || 1, params.zfar || 2e6 ); + + } else if ( camera.type === 'orthographic' ) { + + _camera = new THREE.OrthographicCamera( params.xmag / -2, params.xmag / 2, params.ymag / 2, params.ymag / -2, params.znear, params.zfar ); + + } + + if ( camera.name !== undefined ) _camera.name = camera.name; + if ( camera.extras ) _camera.userData = camera.extras; + + return _camera; + + } ); + + }; + + GLTFParser.prototype.loadSkins = function () { + + var json = this.json; + var parser = this; + + return this._withDependencies( [ + + 'accessors' + + ] ).then( function ( dependencies ) { + + return _each( json.skins, function ( skin ) { + + // console.log(skin); + + // this is for linked skeleton + // here gl_avatar also indicates id in newly created skins array + if (parser.enableGLTFAvatar && skin.gl_avatar !== undefined) { + var _skinlink = { + link: skin.skeleton, + inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ] + }; + return _skinlink; + } + + var _skin = { + joints: skin.joints, + inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ] + }; + + // // clothes file sub skeleton extensions + // if (skin.extensions && skin.extensions.gl_avatar) { + // var gla = skin.extensions.gl_avatar; + // if (gla.root) { + // // console.log(gl_avatar_linked_skeleton); + // var root = gl_avatar_linked_skeleton.nodes[gla.root]; + // _skin.root = root; + // // console.log(root); + // } + // } + + return _skin; + + } ); + + } ); + + }; + + GLTFParser.prototype.loadAnimations = function () { + + var json = this.json; + + return this._withDependencies( [ + + 'accessors', + 'nodes' + + ] ).then( function ( dependencies ) { + + return _each( json.animations, function ( animation, animationId ) { + + var tracks = []; + + for ( var channelId in animation.channels ) { + + var channel = animation.channels[ channelId ]; + var sampler = animation.samplers[ channel.sampler ]; + + if ( sampler ) { + + var target = channel.target; + var name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated. + var input = animation.parameters !== undefined ? animation.parameters[ sampler.input ] : sampler.input; + var output = animation.parameters !== undefined ? animation.parameters[ sampler.output ] : sampler.output; + + var inputAccessor = dependencies.accessors[ input ]; + var outputAccessor = dependencies.accessors[ output ]; + + var node = dependencies.nodes[ name ]; + + if ( node ) { + + node.updateMatrix(); + node.matrixAutoUpdate = true; + + var TypedKeyframeTrack; + + switch ( PATH_PROPERTIES[ target.path ] ) { + + case PATH_PROPERTIES.weights: + + TypedKeyframeTrack = THREE.NumberKeyframeTrack; + break; + + case PATH_PROPERTIES.rotation: + + TypedKeyframeTrack = THREE.QuaternionKeyframeTrack; + break; + + case PATH_PROPERTIES.position: + case PATH_PROPERTIES.scale: + default: + + TypedKeyframeTrack = THREE.VectorKeyframeTrack; + break; + + } + + var targetName = node.name ? node.name : node.uuid; + + if ( sampler.interpolation === 'CATMULLROMSPLINE' ) { + + console.warn( 'THREE.GLTFLoader: CATMULLROMSPLINE interpolation is not supported. Using CUBICSPLINE instead.' ); + + } + + var interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear; + + var targetNames = []; + + if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) { + + // node should be THREE.Group here but + // PATH_PROPERTIES.weights(morphTargetInfluences) should be + // the property of a mesh object under node. + // So finding targets here. + + node.traverse( function ( object ) { + + if ( object.isMesh === true && object.material.morphTargets === true ) { + + targetNames.push( object.name ? object.name : object.uuid ); + + } + + } ); + + } else { + + targetNames.push( targetName ); + + } + + // KeyframeTrack.optimize() will modify given 'times' and 'values' + // buffers before creating a truncated copy to keep. Because buffers may + // be reused by other tracks, make copies here. + for ( var i = 0, il = targetNames.length; i < il; i ++ ) { + + tracks.push( new TypedKeyframeTrack( + targetNames[ i ] + '.' + PATH_PROPERTIES[ target.path ], + THREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ), + THREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ), + interpolation + ) ); + + } + + } + + } + + } + + var name = animation.name !== undefined ? animation.name : 'animation_' + animationId; + + return new THREE.AnimationClip( name, undefined, tracks ); + + } ); + + } ); + + }; + + GLTFParser.prototype.loadNodes = function () { + + var json = this.json; + var extensions = this.extensions; + var scope = this; + + var nodes = json.nodes || []; + var skins = json.skins || []; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + // Nothing in the node definition indicates whether it is a Bone or an + // Object3D. Use the skins' joint references to mark bones. + skins.forEach( function ( skin ) { + + skin.joints.forEach( function ( id ) { + + nodes[ id ].isBone = true; + + } ); + + } ); + + return _each( json.nodes, function ( node ) { + + var matrix = new THREE.Matrix4(); + + var _node = node.isBone === true ? new THREE.Bone() : new THREE.Object3D(); + + if ( node.name !== undefined ) { + + _node.name = THREE.PropertyBinding.sanitizeNodeName( node.name ); + + } + + if ( node.extras ) _node.userData = node.extras; + + if ( node.matrix !== undefined ) { + + matrix.fromArray( node.matrix ); + _node.applyMatrix( matrix ); + + } else { + + if ( node.translation !== undefined ) { + + _node.position.fromArray( node.translation ); + + } + + if ( node.rotation !== undefined ) { + + _node.quaternion.fromArray( node.rotation ); + + } + + if ( node.scale !== undefined ) { + + _node.scale.fromArray( node.scale ); + + } + + } + + return _node; + + } ).then( function ( __nodes ) { + + return scope._withDependencies( [ + + 'meshes', + 'skins', + 'cameras' + + ] ).then( function ( dependencies ) { + + return _each( __nodes, function ( _node, nodeId ) { + + var node = json.nodes[ nodeId ]; + + var meshes; + + if ( node.mesh !== undefined) { + + meshes = [ node.mesh ]; + + } else if ( node.meshes !== undefined ) { + + console.warn( 'THREE.GLTFLoader: Legacy glTF file detected. Nodes may have no more than one mesh.' ); + + meshes = node.meshes; + + } + + if ( meshes !== undefined ) { + + for ( var meshId in meshes ) { + + var mesh = meshes[ meshId ]; + var group = dependencies.meshes[ mesh ]; + + if ( group === undefined ) { + + console.warn( 'THREE.GLTFLoader: Could not find node "' + mesh + '".' ); + continue; + + } + + // do not clone children as they will be replaced anyway + var clonedgroup = group.clone( false ); + + for ( var childrenId in group.children ) { + + var child = group.children[ childrenId ]; + var originalChild = child; + + // clone Mesh to add to _node + + var originalMaterial = child.material; + var originalGeometry = child.geometry; + var originalInfluences = child.morphTargetInfluences; + var originalUserData = child.userData; + var originalName = child.name; + + var material = originalMaterial; + + switch ( child.type ) { + + case 'LineSegments': + child = new THREE.LineSegments( originalGeometry, material ); + break; + + case 'LineLoop': + child = new THREE.LineLoop( originalGeometry, material ); + break; + + case 'Line': + child = new THREE.Line( originalGeometry, material ); + break; + + case 'Points': + child = new THREE.Points( originalGeometry, material ); + break; + + default: + child = new THREE.Mesh( originalGeometry, material ); + child.drawMode = originalChild.drawMode; + + } + + child.castShadow = true; + child.morphTargetInfluences = originalInfluences; + child.userData = originalUserData; + child.name = originalName; + + var skinEntry; + + if ( node.skin !== undefined ) { + + skinEntry = dependencies.skins[ node.skin ]; + + } + + var linkSkeleton = null; + if (gl_avatar) { + if (gl_avatar.type === "skin") { + if (node.extensions && node.extensions.gl_avatar) { + // skinEntry + // bind skeleton from main skeleton file + var s = node.extensions.gl_avatar.skin; + skinEntry = dependencies.skins[ s ]; + + var link = skinEntry.link; + + linkSkeleton = gl_avatar_skeletons[link]; + } + } + } + + // Replace Mesh with SkinnedMesh in library + if ( skinEntry ) { + + var geometry = originalGeometry; + material = originalMaterial; + material.skinning = true; + + child = new THREE.SkinnedMesh( geometry, material ); + child.castShadow = true; + child.userData = originalUserData; + child.name = originalName; + + var skeleton; + if (linkSkeleton) { + var boneInverses = []; + var m = skinEntry.inverseBindMatrices.array; + for ( var i = 0, l = linkSkeleton.bones.length; i < l; i ++ ) { + var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + boneInverses.push( mat ); + } + + skeleton = new THREE.Skeleton(linkSkeleton.bones, boneInverses); + } else { + var bones = []; + var boneInverses = []; + + for ( var i = 0, l = skinEntry.joints.length; i < l; i ++ ) { + + var jointId = skinEntry.joints[ i ]; + var jointNode = __nodes[ jointId ]; + + if ( jointNode ) { + + bones.push( jointNode ); + + var m = skinEntry.inverseBindMatrices.array; + var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + boneInverses.push( mat ); + + } else { + + console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', jointId ); + + } + + } + + + + + // if (gl_avatar && gl_avatar.type === "skin") { + // if (skinEntry.root) { + // // sub_skeleton module + + // // assume bones[0] is root(skeleton) of this skeleton (joint list) + // bones[0].gl_avatar_base_root = skinEntry.root; + // } + // } + + + // gl_avatar: only referenced skeleton will be created + // this can be modified in the furture + // to enable pure skeleton file without skin? + skeleton = new THREE.Skeleton( bones, boneInverses ); + + + } + + + + if ( gl_avatar ) { + if (gl_avatar.type === "skeleton") { + if (node.skin in gl_avatar.skinId2SkeletonKey) { + gl_avatar.skeletons[gl_avatar.skinId2SkeletonKey[node.skin]] = skeleton; + } + + + + // if there's manually created full joint list skin + // enter this branch + if (node.extensions && node.extensions.gl_avatar) { + + var externalSkins; + if (node.extensions.gl_avatar.skin !== undefined) { + if (Array.isArray(node.extensions.gl_avatar.skin)) { + externalSkins = node.extensions.gl_avatar.skin; + } else { + // one number id + externalSkins = [node.extensions.gl_avatar.skin] + } + } else { + externalSkins = []; + } + + + // var s = node.extensions.gl_avatar.skin; + // assert( skeleton === null ) + var s; + for (var sid = 0, sidl = externalSkins.length; sid < sidl; sid++) { + s = externalSkins[sid]; + + if (s !== undefined) { + console.log('manually added joint list skin: ' + s); + + skinEntry = dependencies.skins[ s ]; + + var bones = []; + // assert( no boneinverses ) + + for ( var i = 0, l = skinEntry.joints.length; i < l; i ++ ) { + + var jointId = skinEntry.joints[ i ]; + var jointNode = __nodes[ jointId ]; + + if ( jointNode ) { + + bones.push( jointNode ); + + // var m = skinEntry.inverseBindMatrices.array; + // var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + // boneInverses.push( mat ); + + } else { + + console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', jointId ); + + } + + } + + + if (s in gl_avatar.skinId2SkeletonKey) { + gl_avatar.skeletons[gl_avatar.skinId2SkeletonKey[s]] = new THREE.Skeleton(bones); + } + } + + } + } + + + + + } + } + + child.bind( skeleton, child.matrixWorld ); + + } + + clonedgroup.add( child ); + + } + + if (gl_avatar_linked_skeleton) { + console.log( gl_avatar_linked_skeleton.nodes.head.children ); + } + + _node.add( clonedgroup ); + + } + + } + + if ( node.camera !== undefined ) { + + var camera = dependencies.cameras[ node.camera ]; + + _node.add( camera ); + + } + + if ( node.extensions + && node.extensions[ EXTENSIONS.KHR_LIGHTS ] + && node.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) { + + var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights; + _node.add( lights[ node.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] ); + + } + + + // for skeleton, add special node to node map for future reference + if ( gl_avatar ) { + if (gl_avatar.type === "skeleton") { + if (nodeId in gl_avatar.nodeId2Name) { + gl_avatar.nodes[gl_avatar.nodeId2Name[nodeId]] = _node; + } + } else { + // skin + if (node.extensions && node.extensions.gl_avatar) { + var gla = node.extensions.gl_avatar; + if (gla.root !== undefined) { + // rigid bind + _node.gl_avatar_base_root = gl_avatar_linked_skeleton.nodes[gla.root]; + } + } + } + } + + return _node; + + } ); + + } ); + + } ); + + }; + + GLTFParser.prototype.loadScenes = function () { + + var json = this.json; + var extensions = this.extensions; + + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + // scene node hierachy builder + + function buildNodeHierachy( nodeId, parentObject, allNodes ) { + + var _node = allNodes[ nodeId ]; + parentObject.add( _node ); + + var node = json.nodes[ nodeId ]; + + if ( node.children ) { + + var children = node.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + var child = children[ i ]; + buildNodeHierachy( child, _node, allNodes ); + + } + + } + + } + + return this._withDependencies( [ + + 'nodes' + + ] ).then( function ( dependencies ) { + + return _each( json.scenes, function ( scene ) { + + var _scene = new THREE.Scene(); + if ( scene.name !== undefined ) _scene.name = scene.name; + + if ( scene.extras ) _scene.userData = scene.extras; + + var nodes = scene.nodes || []; + + for ( var i = 0, l = nodes.length; i < l; i ++ ) { + + var nodeId = nodes[ i ]; + buildNodeHierachy( nodeId, _scene, dependencies.nodes ); + + } + + _scene.traverse( function ( child ) { + + // for Specular-Glossiness. + if ( child.material && child.material.isGLTFSpecularGlossinessMaterial ) { + + child.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms; + + } + + } ); + + + // Ambient lighting, if present, is always attached to the scene root. + if ( scene.extensions + && scene.extensions[ EXTENSIONS.KHR_LIGHTS ] + && scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) { + + var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights; + _scene.add( lights[ scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] ); + + } + + + + + + // gl avatar sub skeleton link test + + if (gl_avatar && gl_avatar.type === "skin") { + // var temp_base_root; + for ( var i = 0, l = dependencies.nodes.length; i < l; i ++ ) { + + var node = dependencies.nodes[ i ]; + if (node.gl_avatar_base_root) { + // node.gl_avatar_base_root.add(node); // move to outsider logic to handle + + + // TODO: might use .userData. field + // !!: assume there's only one attach (rigid bind) node + _scene.attach_child = node; + } + + } + + console.log(_scene); + // console.log(gl_avatar_linked_skeleton); + } + + + return _scene; + + } ); + + } ); + + }; + + return GLTFLoader; + +} )(); +}; + + +/***/ }), +/* 4 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return glAvatarSystem; }); +var THREE = __webpack_require__(0); + +var glAvatarSystem = { + + curSkeleton: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + + curVisibilityArray: null, + + curAccessories: { + clothes: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + hair: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + face: { + name: null, + scene: null + }, + instrument: { + name: null, + scene: null + } + }, + + // assets + skeletons: {}, + + accessories: { + clothes: {}, + hair: {}, + face: {}, + instrument: {} + }, + + + + repo: { + skeletons: { + // 'mixamo': { + // url: 'models/gltf/saber-body-mixamo-animations/saber-body-animations.gltf', + // // scene info (camera, light) + // cameraPos: new THREE.Vector3(1.5, 2, 1.5), + // center: new THREE.Vector3(0, 0.8, 0), + // objectRotation: new THREE.Euler(0, 180, 0), + // // init skins + // skins: { + // hair: 'maid', + // clothes: 'maid-dress' + // } + // }, + // 'stand-pose': { + // url: 'models/gltf/saber-stand-pose/saber-stand-pose.gltf', + + // cameraPos: new THREE.Vector3(1.5, 2, 1.5), + // center: new THREE.Vector3(0, 0.8, 0), + // objectRotation: new THREE.Euler(0, 180, 0), + + // skins: { + // hair: 'lily', + // clothes: 'maid-dress' + // } + // }, + 'no-face': { + url: 'models/gltf/saber-mixamo-body-no-face/saber-body-animations.gltf', + + cameraPos: new THREE.Vector3(1.5, 2, 1.5), + center: new THREE.Vector3(0, 0.8, 0), + objectRotation: new THREE.Euler(0, 180, 0), + + skins: { + hair: 'maid', + clothes: 'maid-dress', + face: 'saber' + } + } + + }, + + // skins + clothes: { + 'maid-dress': 'models/gltf/saber-dress-mixamo/saber-dress.gltf', + 'suit': 'models/gltf/saber-suit/saber-suit.gltf' + }, + hair: { + 'maid': 'models/gltf/saber-maid-hair-mixamo/saber-maid-hair.gltf', + 'lily': 'models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair-sub-skeleton.gltf' + }, + + face: { + 'saber': 'models/gltf/saber-face/saber-face.gltf', + 'eriri': 'models/gltf/saber-face/eriri-face-test.gltf' + }, + + + instrument: { + + } + }, + + isLoaded: function (type, key) { + return key in this.accessories[type]; + } +}; + + + +/***/ }), +/* 5 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return mergeGLTFAvatar; }); +// mergeGLTF util in browser + + +var textureWithVisibility = null; +var bodyIdLUTTexture = null; + +// // this two keys are actually id for skeleton.textures +// var textureWithVisibilityKey = null; +// var bodyIdLUTTextureKey = null; + +var visiblityMaterial = null; + + +var canvas1 = document.createElement('canvas'); +var context1 = canvas1.getContext('2d'); + +function image2Data(img) { + + canvas1.width = img.width; + canvas1.height = img.height; + context1.drawImage(img, 0, 0); + return context1.getImageData(0, 0, img.width, img.height); +} + +function image2PNGDataURI(img) { + canvas1.width = img.width; + canvas1.height = img.height; + context1.drawImage(img, 0, 0); + return canvas1.toDataURL(); // default is png +} + +function mergeGLTFAvatar(skeletonObject, skinObjectArray) { + // { + // json: gltf json object, + // bins: { key: buffer, key: buffer, ...}, + // imgs: { key: img, key: img, ...} + // } + + console.log(skeletonObject.json); + + // TODO: change bins and imgs to array, use index instead of uri + var merged = { + json: Object.assign({}, skeletonObject.json), + bins: Object.assign({}, skeletonObject.bins), + // imgs: Object.assign({}, skeletonObject.imgs) + imgs: {} + }; + + var skeleton = merged.json; + // find texture with bodyIdLUT + for (var i = 0, len = skeleton.materials.length; i < len; i++) { + var m = skeleton.materials[i]; + if (m.extensions && m.extensions.gl_avatar && m.extensions.gl_avatar.bodyIdLUT !== undefined) { + // m has pbr related texture + // assume there's only one such a thing + + visiblityMaterial = m; + // bodyIdLUTTexture = skeleton.textures[m.extensions.gl_avatar.bodyIdLUT]; + bodyIdLUTTexture = skeleton.images[skeleton.textures[m.extensions.gl_avatar.bodyIdLUT].source].uri; + // bodyIdLUTTextureKey = m.extensions.gl_avatar.bodyIdLUT; + // textureWithVisibility = skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index]; + textureWithVisibility = skeleton.images[skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index].source].uri; + // textureWithVisibilityKey = m.pbrMetallicRoughness.baseColorTexture.index; + + merged.imgs[textureWithVisibility] = image2Data(skeletonObject.imgs[textureWithVisibility]); + merged.imgs[bodyIdLUTTexture] = image2Data(skeletonObject.imgs[bodyIdLUTTexture]); + + break; + } + } + + + + // for (var key in merged.imgs) { + // merged.imgs[key] = image2Data(merged.imgs[key]); + // } + for (var key in skeletonObject.imgs) { + if (! (key in merged.imgs)) { + + merged.imgs[key] = image2PNGDataURI(skeletonObject.imgs[key]); + } + } + + + + // merged.bins = merged.bins.concat(skeletonObject.bins); + // merged.imgs = merged.imgs.concat(skeletonObject.imgs); + + + + if(!skeleton.extensions) { + skeleton.extensions = {}; + } + + if (!skeleton.extensions.gl_avatar) { + skeleton.extensions.gl_avatar = {}; + } + + + if (!skeleton.extensions.gl_avatar.visibility) { + skeleton.extensions.gl_avatar.visibility = []; + } + + for (var i = 0, len = skinObjectArray.length; i < len; i++) { + var skin = skinObjectArray[i]; + merge(skeleton, skin.json); + + // temp: this probably didn't support multiple export + for (var key in skin.imgs) { + // skin.imgs[key] = image2Data(skin.imgs[key]); + skin.imgs[key] = image2PNGDataURI(skin.imgs[key]); + } + + // TODO: solve duplicate key issue + merged.bins = Object.assign( merged.bins, skin.bins ); + merged.imgs = Object.assign( merged.imgs, skin.imgs ); + + bakeVisibility(merged, textureWithVisibility, bodyIdLUTTexture, skeleton.extensions.gl_avatar.visibility); + } + + + // + var img = merged.imgs[textureWithVisibility]; + canvas1.width = img.width; + canvas1.height = img.height; + context1.putImageData(img, 0, 0); + merged.imgs[textureWithVisibility] = canvas1.toDataURL(); + + delete merged.imgs[bodyIdLUTTexture]; + + // send merged gltf and buffers & image to makeglb + return merged; +} + + + +/** + * + * @param {*} skeleton gltf json + * @param {*} skin gltf json + */ +function merge(skeleton, skin) { + var i, len, j, lenj; + + var linkedSkeletons = skin.extensions.gl_avatar.linkedSkeletons || []; + + + // buffers + var bufferBaseId = skeleton.buffers.length; + // for (i = 0, len = skin.buffers.length; i < len; i++) { + // skeleton.buffers.push(skin.buffers[i]); + // } + skeleton.buffers = skeleton.buffers.concat(skin.buffers); + + + // bufferViews + var bufferViewBaseId = skeleton.bufferViews.length; + for (i = 0, len = skin.bufferViews.length; i < len; i++) { + skeleton.bufferViews.push(skin.bufferViews[i]); + skeleton.bufferViews[i + bufferViewBaseId].buffer += bufferBaseId; + } + + // accessors + var accessorBaseId = skeleton.accessors.length; + for (i = 0, len = skin.accessors.length; i < len; i++) { + skeleton.accessors.push(skin.accessors[i]); + skeleton.accessors[i + accessorBaseId].bufferView += bufferViewBaseId; + } + + + // images + // TODO: delete bodyIdLUT if exist, and change texture.source + var imageBaseId = skeleton.images.length; + skeleton.images = skeleton.images.concat(skin.images); + + // samplers + var samplerBaseId = skeleton.samplers.length; + skeleton.samplers = skeleton.samplers.concat(skin.samplers); + + // textures + var textureBaseId = skeleton.textures.length; + skeleton.textures = skeleton.textures.concat(skin.textures); + for (i = 0, len = skin.textures.length; i < len; i++) { + var t = skeleton.textures[i + textureBaseId]; + if (t.sampler !== undefined) { + t.sampler += samplerBaseId; + } + if (t.source !== undefined) { + t.source += imageBaseId; + } + } + + // materials + var materialBaseId = skeleton.materials.length; + + // find texture with bodyIdLUT + for (i = 0, len = skeleton.materials.length; i < len; i++) { + var m = skeleton.materials[i]; + if (m.extensions && m.extensions.gl_avatar && m.extensions.gl_avatar.bodyIdLUT !== undefined) { + // m has pbr related texture + // assume there's only one such a thing + + visiblityMaterial = m; + // bodyIdLUTTexture = skeleton.textures[m.extensions.gl_avatar.bodyIdLUT]; + bodyIdLUTTexture = skeleton.images[skeleton.textures[m.extensions.gl_avatar.bodyIdLUT].source].uri; + // bodyIdLUTTextureKey = m.extensions.gl_avatar.bodyIdLUT; + // textureWithVisibility = skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index]; + textureWithVisibility = skeleton.images[skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index].source].uri; + // textureWithVisibilityKey = m.pbrMetallicRoughness.baseColorTexture.index; + + break; + } + } + + + for (i = 0, len = skin.materials.length; i < len; i++) { + skeleton.materials.push(skin.materials[i]); + var m = skeleton.materials[i + materialBaseId]; + if (m.pbrMetallicRoughness !== undefined) { + if (m.pbrMetallicRoughness.baseColorTexture !== undefined) { + var bt = m.pbrMetallicRoughness.baseColorTexture; + for (var tt in bt) { + bt[tt] += imageBaseId; + } + } + } + } + + + + // meshes + var meshBaseId = skeleton.meshes.length; + for (i = 0, len = skin.meshes.length; i < len; i++) { + skeleton.meshes.push(skin.meshes[i]); + var m = skeleton.meshes[i + meshBaseId]; + if (m.primitives !== undefined) { + + for (j = 0, lenj = m.primitives.length; j < lenj; j++) { + var p = m.primitives[j]; + + if (p.indices !== undefined) { + p.indices += accessorBaseId; + } + + if (p.material !== undefined) { + p.material += materialBaseId; + } + + if (p.attributes !== undefined) { + var a = p.attributes; + for (var att in a) { + a[att] += accessorBaseId; + } + } + + if (p.extensions !== undefined) { + if (p.extensions.gl_avatar.attributes) { + var ea = p.extensions.gl_avatar.attributes; + if (!p.attributes) { + p.attributes = {}; + } + for (var att2 in ea) { + p.attributes[att2] = ea[att2] + accessorBaseId; + } + } + + delete p.extensions; + } + } + + } + } + + // nodes + var skinBaseId = skeleton.skins.length; + + var nodeRigidBind = {}; + var nodeBaseId = skeleton.nodes.length; + // var numLinkedSkin = 0; + for (i = 0, len = skin.nodes.length; i < len; i++) { + skeleton.nodes.push(skin.nodes[i]); + var n = skeleton.nodes[i + nodeBaseId]; + + if (n.skin !== undefined) { + n.skin += skinBaseId; + } + + + if (n.children !== undefined) { + var c = n.children; + for (j = 0, lenj = c.length; j < lenj; j++) { + c[j] += nodeBaseId; + } + } + + if (n.mesh !== undefined) { + n.mesh += meshBaseId; + } + + // skins link + if (n.extensions) { + // create a new skin copy of skin linked + // replace inverseBindMatrices + if (n.extensions.gl_avatar) { + if (n.extensions.gl_avatar.skin !== undefined) { + // linked skin + // assume linkedSkeletons exists + var linkedSkinInfo = linkedSkeletons[n.extensions.gl_avatar.skin]; + var skinKey = linkedSkinInfo.skeleton; + var newSkin = Object.assign({}, skeleton.skins[skeleton.extensions.gl_avatar.skins[skinKey]]); + skeleton.skins.push(newSkin); + // numLinkedSkin++; + n.skin = skeleton.skins.length - 1; + newSkin.inverseBindMatrices = linkedSkinInfo.inverseBindMatrices + accessorBaseId; + } + + var root = n.extensions.gl_avatar.root; + if ( root !== undefined) { + // rigid bind / sub skeleton node + + var nid = i + nodeBaseId; + // nodeRigidBind[root] = nid; + nodeRigidBind[nid] = nid; + var newParentNode = skeleton.nodes[skeleton.extensions.gl_avatar.nodes[root]]; + + if (!newParentNode.children) { + newParentNode.children = []; + } + newParentNode.children.push(nid); + } + } + + delete n.extensions; + } + + } + + + // remove rigidbind nodes' original parent node in skin + // var finishUnparenting = false; + var numUnparenting = (Object.keys(nodeRigidBind)).length; + for (i = nodeBaseId, len = skeleton.nodes.length; i < len; i++) { + var n = skeleton.nodes[i]; + if (n.children) { + // for (j = 0, lenj = n.children.length; j < lenj; j++) { + for (j = 0; j < n.children.length; j++) { + if (n.children[j] in nodeRigidBind) { + // delete nodeRigidBind[n.children[j]]; + n.children.splice(j, 1); + j--; + numUnparenting--; + + if (numUnparenting == 0) { + i = len; // early termination + break; + } + + } + } + } + } + + + + // skins (sub-skeleton) + if (skin.skins) { + // if (!skeleton.skins) { + // skeleton.skins = []; + // } + + for (i = 0, len = skin.skins.length; i < len; i++) { + var s = skin.skins[i]; + + if (s.gl_avatar) { + // constructed linked skin in gltf loader + continue; + } + + skeleton.skins.push(s); + + if (s.joints) { + for (j = 0, lenj = s.joints.length; j < lenj; j++) { + s.joints[j] += nodeBaseId; + } + } + + if (s.inverseBindMatrices !== undefined) { + s.inverseBindMatrices += accessorBaseId; + } + + if (s.skeleton !== undefined) { + if (typeof s.skeleton == 'number') { + s.skeleton += nodeBaseId; + } else { + s.skeleton = skeleton.extensions.gl_avatar.skins[s.skeleton]; + } + } + } + } + + + + + + + + // scenes (assume only one scene) + var sceneNodeBaseId = skeleton.scenes[0].nodes.length; + skeleton.scenes[0].nodes = skeleton.scenes[0].nodes.concat(skin.scenes[0].nodes); + for (i = 0, len = skin.scenes[0].nodes.length; i < len; i++) { + // WARNING: TODO: the scene root node might also be rigid bind node + skeleton.scenes[0].nodes[i + sceneNodeBaseId] += nodeBaseId; + } + + + // animations + if (skin.animations) { + if (!skeleton.animations) { + skeleton.animations = []; + } + + for (i = 0, len = skin.animations.length; i < len; i++) { + var a = skin.animations[i]; + + skeleton.animations.push(a); + + if (a.channels) { + for (j = 0, lenj = a.channels.length; j < lenj; j++) { + var c = a.channels[j]; + c.target.node += nodeBaseId; + } + } + + if (a.samplers) { + for (j = 0, lenj = a.samplers.length; j < lenj; j++) { + var s = a.samplers[j]; + s.input += accessorBaseId; + s.output += accessorBaseId; + } + } + } + } + + + + + // TODO: cameras... + + + // extensions: visibility array + visibilityAndOperation(skeleton, skin.extensions.gl_avatar.visibility); + +} + + + + +function visibilityAndOperation(skeleton, vi) { + if (skeleton.extensions.gl_avatar.visibility.length === 0) { + skeleton.extensions.gl_avatar.visibility = vi.slice(0); + return; + } + + var v = skeleton.extensions.gl_avatar.visibility; + var vl = v.length; + for (var i = 0, len = vi.length; i < len; i++) { + if (vl <= i) { + v[i] = vi[i]; + } else { + v[i] = v[i] && vi[i]; + } + } +} + + + +function bakeVisibility(skeleton, texURI, bodyIdLUTURI, visibility) { + if (texURI == null || bodyIdLUTURI == null) { + console.log('No texture with visibility or body id lut in this model'); + return; + } + + + // console.log('texture with visibility: ', texInfo); + // console.log('body Id LUT texture: ', bodyIdLUTInfo); + + visiblityMaterial.alphaMode = "MASK"; + visiblityMaterial.alphaCutOff = 0.5; + + + // // some canvas used to get pixels array data + // var img; + // var canvas1 = document.createElement('canvas'); + // var context1 = canvas1.getContext('2d'); + // // img = texInfo.source; + // img = skeleton.imgs[texURI]; + + // canvas1.width = img.width; + // canvas1.height = img.height; + // context1.drawImage(img, 0, 0); + // var tex = context1.getImageData(0, 0, img.width, img.height); + + // var canvas2 = document.createElement('canvas'); + // var context2 = canvas2.getContext('2d'); + // // img = bodyIdLUTInfo.source; + // img = skeleton.imgs[bodyIdLUTURI]; + + // canvas2.width = img.width; + // canvas2.height = img.height; + // context2.drawImage(img, 0, 0); + // var lut = context2.getImageData(0, 0, img.width, img.height); + + var width = skeleton.imgs[texURI].width; + var height = skeleton.imgs[texURI].height; + + var tex = skeleton.imgs[texURI].data; + var lut = skeleton.imgs[bodyIdLUTURI].data; + + // temp: assume img and lut are of the same size + for (var y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + var idx = (width * y + x) << 2; // * 4 + + var bodyId = lut[idx]; + + if (visibility[bodyId] === 0) { + tex[idx + 3] = 0; + } + } + } + + + // // write pixel back to image object + // context1.putImageData(tex, 0, 0); + + + + // fs.createReadStream(texPath) + // .pipe(new PNG({filterType: 4})) + // .on('parsed', function() { + + // var tex = this; + + // fs.createReadStream(bodyIdLUTPath) + // .pipe(new PNG({filterType: 0})) + // .on('parsed', function() { + // var lut = this; + + // // temp assume same size + // for (var y = 0; y < this.height; y++) { + // for (var x = 0; x < this.width; x++) { + // var idx = (this.width * y + x) << 2; + + // var bodyId = lut.data[idx]; + + // if (visibilty[bodyId] === 0) { + // tex.data[idx + 3] = 0; + // } + // } + // } + + + + // tex.pack().pipe(fs.createWriteStream(texPath)); + + // }); + + + + // }); +} + + + + + +/***/ }), +/* 6 */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return fileSave; }); + var files=[]; + var fileblobs=[]; + var gltf; + var remainingfilestoprocess=0; + var glbfilename; + + var outputBuffers; + var bufferMap; + var bufferOffset; + + + function handleDragOver(event) { + event.stopPropagation(); + event.preventDefault(); + event.dataTransfer.dropEffect = 'copy'; + } + + +// var dropZone = document.getElementById('drop_zone'); +// dropZone.addEventListener('dragover', handleDragOver, false); +// dropZone.addEventListener('drop', handleFileSelect, false); + + + function addDownloadButton() { + var btn = document.createElement("button"); + btn.id="downloadBtn"; + btn.disabled=true; + btn.onclick= startDownload; + btn.appendChild(document.createTextNode("Processing...")); + document.getElementById("download").appendChild(btn); + } + + function startDownload(){ + document.getElementById("downloadLink").click(); + } + + function handleFileSelect(event) { + event.stopPropagation(); + event.preventDefault(); + document.getElementById('list').innerHTML=""; + addDownloadButton(); + var items = event.dataTransfer.items; + remainingfilestoprocess=items.length; + for (var i=0; i ('+ file.type + ') - '+ + file.size+ ' bytes, last modified: '+ file.lastModifiedDate + + ''; + document.getElementById('list').innerHTML += fileitem; + + var extension = file.name.split('.').pop(); + if ( extension === "gltf") + { + glbfilename=file.name.substr(file.name.lastIndexOf('/')+1,file.name.lastIndexOf('.')); + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function(event) { + gltf = JSON.parse(event.target.result); + checkRemaining(); + }; + } + else{ + var reader = new FileReader(); + reader.onload = (function(theFile) { + return function(e) { + fileblobs[theFile.name.toLowerCase()]=(e.target.result); + checkRemaining(); + }; + })(file); + reader.readAsArrayBuffer(file); + } + },function(error){ + console.log(error); + }); + } else if (item.isDirectory) { + var dirReader = item.createReader(); + dirReader.readEntries(function(entries) { + remainingfilestoprocess+=entries.length; + checkRemaining(); + for (var i=0; i + + + + <%= htmlWebpackPlugin.options.title %> + + + + + + Fork me on GitHub +
+ +
+ + + + + + \ No newline at end of file diff --git a/imgs/combination.gif b/imgs/combination.gif new file mode 100644 index 0000000000000000000000000000000000000000..2dc978499cca67f1148d9e7d6756237504ebad0b --- /dev/null +++ b/imgs/combination.gif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37d7cf1a6d9f4c8d6f1ab326446e62a342b4efa171fad63564d0a948217dc003 +size 1665894 diff --git a/imgs/facebook.png b/imgs/facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..5244caa0c99d8eb12a8305f32b0e826880b29c27 Binary files /dev/null and b/imgs/facebook.png differ diff --git a/imgs/gltf-debug-plugin.png b/imgs/gltf-debug-plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..13dd3a0e305f2d8de2ed2327a90e08235cf0c5ed Binary files /dev/null and b/imgs/gltf-debug-plugin.png differ diff --git a/imgs/sub-s.gif b/imgs/sub-s.gif new file mode 100644 index 0000000000000000000000000000000000000000..d4e7913b665e53712a979706b0cd86d599451768 Binary files /dev/null and b/imgs/sub-s.gif differ diff --git a/imgs/with-v.png b/imgs/with-v.png new file mode 100644 index 0000000000000000000000000000000000000000..9421c98361a05b72ab36d7ed58a5460bf6abe0ca Binary files /dev/null and b/imgs/with-v.png differ diff --git a/imgs/without-v.png b/imgs/without-v.png new file mode 100644 index 0000000000000000000000000000000000000000..e312ae4c534b5780a172c08abaf77b5b2e7523b2 Binary files /dev/null and b/imgs/without-v.png differ diff --git a/index.html b/index.html index b0c4b3666032a737f3903db53e6a8a9272483e28..01f5a884ad5c38d7577052bc89a69ede23e00987 100644 --- a/index.html +++ b/index.html @@ -1,19 +1,100 @@ - - - - - - My static Space - - - -
-

Welcome to your static Space!

-

You can modify this app directly by editing index.html in the Files and versions tab.

-

- Also don't forget to check the - Spaces documentation. -

-
- - + + + + + gl-avatar-three-js + + + + + + Fork me on GitHub +
+ +
+ + + + + + \ No newline at end of file diff --git a/licenses/makeglb b/licenses/makeglb new file mode 100644 index 0000000000000000000000000000000000000000..589141ca39740d600682dcf4db189097cb477d65 --- /dev/null +++ b/licenses/makeglb @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Saurabh Bhatia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/models/glb/merged-saber-maid.glb b/models/glb/merged-saber-maid.glb new file mode 100644 index 0000000000000000000000000000000000000000..43c35fdb85de9e44241eb5a89f7401ed7a12b54e --- /dev/null +++ b/models/glb/merged-saber-maid.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23114e329735495ad3c3da55c84ff8850cb31c21583426693f236f977bb70235 +size 5785452 diff --git a/models/glb/merged-saber-stand.glb b/models/glb/merged-saber-stand.glb new file mode 100644 index 0000000000000000000000000000000000000000..3118fc5b4f000754a49960e4f0726062af781594 --- /dev/null +++ b/models/glb/merged-saber-stand.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6618ef8f3da2bd5646489f6fb6c83d5ca211e2ba21784cfbf69ded28a3f32d43 +size 2769448 diff --git a/models/glb/merged.glb b/models/glb/merged.glb new file mode 100644 index 0000000000000000000000000000000000000000..b6d6bed1cff3ea6b1a7e056d76fce3aeb83c4403 --- /dev/null +++ b/models/glb/merged.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:597133d32f25c0dd53a3e518ef02032cd2612c3c51bf99964283a66d5fc16807 +size 6049552 diff --git a/models/gltf/merged-saber-maid/buffer_combined_dress.bin b/models/gltf/merged-saber-maid/buffer_combined_dress.bin new file mode 100644 index 0000000000000000000000000000000000000000..5a7cd1f5c251230a7d4927dcf0489aead8c6299b --- /dev/null +++ b/models/gltf/merged-saber-maid/buffer_combined_dress.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95d60b41b4568307d86023838a4d17e80d50b2ca91c4fe7c6ea18c614f69b0c4 +size 228304 diff --git a/models/gltf/merged-saber-maid/buffer_combined_maid_hair.bin b/models/gltf/merged-saber-maid/buffer_combined_maid_hair.bin new file mode 100644 index 0000000000000000000000000000000000000000..18faec0e6ddb04269f846a2f65127603ca06519e --- /dev/null +++ b/models/gltf/merged-saber-maid/buffer_combined_maid_hair.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f871452037d96fa6d306bc2e3b6c11420c9891cee4796cc26cf53987c143a59 +size 101808 diff --git a/models/gltf/merged-saber-maid/buffer_combined_saber_body.bin b/models/gltf/merged-saber-maid/buffer_combined_saber_body.bin new file mode 100644 index 0000000000000000000000000000000000000000..b46f555ebccf9f28983831ef117927f9c39fa9a9 --- /dev/null +++ b/models/gltf/merged-saber-maid/buffer_combined_saber_body.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dd8a0f6e6eeea89b1a36886365a1268b19c47791fa11fd5f8774565e8081491 +size 2458392 diff --git a/models/gltf/merged-saber-maid/output.gltf b/models/gltf/merged-saber-maid/output.gltf new file mode 100644 index 0000000000000000000000000000000000000000..8cd3513ba2ced0d6fd5d4a6737686f2cf4556f66 --- /dev/null +++ b/models/gltf/merged-saber-maid/output.gltf @@ -0,0 +1 @@ +{"extensionsUsed":["gl_avatar"],"extensions":{"gl_avatar":{"type":"skeleton","skins":{"main":2},"nodes":{"head":8,"head-end":9},"visibility":[0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},"accessors":[{"bufferView":798,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHand_Yawn_2","type":"VEC3"},{"bufferView":462,"byteOffset":0,"componentType":5126,"count":30,"max":[0.08421516418457031,1.9935355186462402,0],"min":[0.08420920372009277,1.993518590927124,-0.0000286102294921875],"name":"accessor_buffer_mixamorig:RightHandThumb3_Walking_0","type":"VEC3"},{"bufferView":413,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:Head_Walking_2","type":"VEC3"},{"bufferView":525,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.8726584911346436,1.342261552810669],"min":[-1.3880643844604492,1.8726342916488647,1.342238426208496],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Walking_0","type":"VEC3"},{"bufferView":67,"byteOffset":0,"componentType":5126,"count":501,"max":[0,5.778028964996338,0],"min":[-0.8288059234619141,5.777997970581055,-0.20810604095458984],"name":"accessor_buffer_mixamorig:RightHandRing1_Idle_0","type":"VEC3"},{"bufferView":764,"byteOffset":0,"componentType":5126,"count":251,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_Yawn_1","type":"VEC4"},{"bufferView":56,"byteOffset":0,"componentType":5126,"count":501,"max":[0.3061813712120056,0,0,0.943814754486084],"min":[0.24054649472236633,-0.03875672072172165,-0.2256726771593094,0.924025297164917],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Idle_1","type":"VEC4"},{"bufferView":664,"byteOffset":0,"componentType":5126,"count":251,"max":[0,5.778042793273926,0],"min":[-0.8288237452507019,5.777987003326416,-0.20811843872070312],"name":"accessor_buffer_mixamorig:RightHandRing1_Yawn_0","type":"VEC3"},{"bufferView":361,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"min":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightFoot_TPose_2","type":"VEC3"},{"bufferView":5,"byteOffset":16,"componentType":5126,"count":1176,"max":[1,0.21810737252235413,0.0008118848782032728,0],"min":[0.7810807824134827,0,0,0],"name":"accessor_buffer_F010_Saber.001_skin_1","type":"VEC4"},{"bufferView":751,"byteOffset":0,"componentType":5126,"count":251,"max":[0.015084788203239441,2.09287691116333,0.000041961669921875],"min":[0.01503366231918335,2.092836856842041,-0.0000019073486328125],"name":"accessor_buffer_mixamorig:RightHandIndex3_Yawn_0","type":"VEC3"},{"bufferView":527,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Walking_2","type":"VEC3"},{"bufferView":91,"byteOffset":0,"componentType":5126,"count":501,"max":[0,2.282504081726074,0],"min":[-0.018561363220214844,2.28246808052063,-0.00002765655517578125],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Idle_0","type":"VEC3"},{"bufferView":55,"byteOffset":0,"componentType":5126,"count":501,"max":[2.1123294830322266,5.15142822265625,0],"min":[2.112313747406006,5.151396751403809,-0.10166263580322266],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Idle_0","type":"VEC3"},{"bufferView":237,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999995231628418],"min":[-0.0000017708856603348977,-0.00008915702346712351,-0.0010598038788884878,0.9999995231628418],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_1","type":"VEC4"},{"bufferView":28,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.4579193592071533,0.000015735626220703125],"min":[-0.014500141143798828,1.4578824043273926,-0.000003814697265625],"name":"accessor_buffer_mixamorig:RightHandPinky4_Idle_0","type":"VEC3"},{"bufferView":153,"byteOffset":0,"componentType":5126,"count":501,"max":[1,1,1],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:Hips_Idle_2","type":"VEC3"},{"bufferView":600,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.5249981880187988,0.0000095367431640625],"min":[-0.0062351226806640625,1.5249826908111572,-0.000001430511474609375],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Walking_0","type":"VEC3"},{"bufferView":445,"byteOffset":0,"componentType":5126,"count":30,"max":[3.608875420724189e-9,2.735760062932968e-9,1.8699211068451405e-9,1],"min":[-3.6088747545903743e-9,-1.3387762010097504e-9,-2.8448998712349294e-9,1],"name":"accessor_buffer_mixamorig:HeadTop_End_Walking_1","type":"VEC4"},{"bufferView":594,"byteOffset":0,"componentType":5126,"count":30,"max":[2.289447784423828,5.801708698272705,0.050652503967285156],"min":[2.2894296646118164,5.801687240600586,0.05063486099243164],"name":"accessor_buffer_mixamorig:RightHandIndex1_Walking_0","type":"VEC3"},{"bufferView":620,"byteOffset":0,"componentType":5126,"count":251,"max":[0.5482349395751953,0.1578584462404251,0,0.8626810312271118],"min":[0.47461917996406555,-0.11056473851203918,-0.12299825996160507,0.8337114453315735],"name":"accessor_buffer_mixamorig:LeftFoot_Yawn_1","type":"VEC4"},{"bufferView":486,"byteOffset":0,"componentType":5126,"count":30,"max":[0.02951812744140625,2.085678815841675,0.0000095367431640625],"min":[0.02950763702392578,2.0856592655181885,-0.00000858306884765625],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Walking_0","type":"VEC3"},{"bufferView":296,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8846017122268677,0],"min":[-0.0597844123840332,1.8846017122268677,-0.00000426173210144043],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_0","type":"VEC3"},{"bufferView":125,"byteOffset":0,"componentType":5126,"count":501,"max":[0.22541102766990662,0,0.001170284696854651,0.9835196733474731],"min":[0.18070849776268005,-0.005687756929546595,-0.007271403446793556,0.9742342829704285],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Idle_1","type":"VEC4"},{"bufferView":325,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":20,"byteOffset":0,"componentType":5126,"count":501,"max":[0.677651047706604,0,0.6039482951164246,0.3589504063129425],"min":[0.6312532424926758,-0.34361618757247925,0.5770201086997986,0.33191004395484924],"name":"accessor_buffer_mixamorig:RightShoulder_Idle_1","type":"VEC4"},{"bufferView":253,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001250505447388,0.9999999403953552,1.000000238418579],"min":[1.0001250505447388,0.9999999403953552,1.000000238418579],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_2","type":"VEC3"},{"bufferView":684,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandRing3_Yawn_2","type":"VEC3"},{"bufferView":323,"byteOffset":0,"componentType":5126,"count":2,"max":[0.615178108215332,5.987785816192627,0],"min":[0.615178108215332,5.987785816192627,-0.2521420121192932],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":700,"byteOffset":0,"componentType":5126,"count":251,"max":[0.011249423027038574,2.2008347511291504,0.00003910064697265625],"min":[0.011196613311767578,2.2007882595062256,-0.0000035762786865234375],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Yawn_0","type":"VEC3"},{"bufferView":437,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1,1.0000001192092896],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandPinky2_Walking_2","type":"VEC3"},{"bufferView":398,"byteOffset":0,"componentType":5126,"count":2,"max":[0,19.023351669311523,0],"min":[-5.494803190231323e-8,19.023351669311523,-0.0000032789830584079027],"name":"accessor_buffer_mixamorig:LeftHand_TPose_0","type":"VEC3"},{"bufferView":778,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000034365803003311157,45.05037307739258,0.000002201646566390991],"min":[-0.0000017881393432617188,45.05034255981445,-0.0000012665987014770508],"name":"accessor_buffer_mixamorig:RightLeg_Yawn_0","type":"VEC3"},{"bufferView":81,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandThumb1_Idle_2","type":"VEC3"},{"bufferView":534,"byteOffset":0,"componentType":5126,"count":30,"max":[0.09870338439941406,2.222611904144287,0.000029802322387695312],"min":[0.09868931770324707,2.222590446472168,0.00000476837158203125],"name":"accessor_buffer_mixamorig:RightHandThumb2_Walking_0","type":"VEC3"},{"bufferView":721,"byteOffset":0,"componentType":5126,"count":251,"max":[0.6151952743530273,5.98781156539917,0],"min":[0.6151564717292786,5.98776912689209,-0.2521657943725586],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Yawn_0","type":"VEC3"},{"bufferView":420,"byteOffset":0,"componentType":5126,"count":30,"max":[9.834766387939453e-7,41.849334716796875,0.0000034570693969726562],"min":[-7.003545761108398e-7,41.84931945800781,-0.000006794929504394531],"name":"accessor_buffer_mixamorig:LeftFoot_Walking_0","type":"VEC3"},{"bufferView":759,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.0000003576278687],"min":[0.9999997615814209,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightFoot_Yawn_2","type":"VEC3"},{"bufferView":498,"byteOffset":0,"componentType":5126,"count":30,"max":[0.004725456237792969,1.5559535026550293,0.00001811981201171875],"min":[0.004705905914306641,1.5559406280517578,-0.0000014901161193847656],"name":"accessor_buffer_mixamorig:RightHandPinky3_Walking_0","type":"VEC3"},{"bufferView":222,"byteOffset":0,"componentType":5126,"count":2,"max":[0.49219897389411926,0.06156006455421448,0,0.8671404123306274],"min":[0.49219897389411926,0.06156006455421448,-0.04492250457406044,0.8671404123306274],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_1","type":"VEC4"},{"bufferView":740,"byteOffset":0,"componentType":5126,"count":251,"max":[0.017513589933514595,0.03453144058585167,0.054572250694036484,0.9989792704582214],"min":[-0.01294967532157898,-0.013272514566779137,0.04488709196448326,0.9981178045272827],"name":"accessor_buffer_mixamorig:Spine2_Yawn_1","type":"VEC4"},{"bufferView":588,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.828077793121338,0],"min":[-0.006542205810546875,1.8280558586120605,-0.000030517578125],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Walking_0","type":"VEC3"},{"bufferView":301,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"min":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_2","type":"VEC3"},{"bufferView":168,"byteOffset":0,"componentType":5126,"count":501,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_Idle_2","type":"VEC3"},{"bufferView":272,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.0912089347839355,0.09324643015861511],"min":[-2.381847381591797,6.0912089347839355,0.09324643015861511],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_0","type":"VEC3"},{"bufferView":0,"byteOffset":0,"componentType":5126,"count":3340,"max":[64.78005981445312,158.17137145996094,13.949725151062012],"min":[-64.76519775390625,0.9852595329284668,-11.520842552185059],"name":"accessor_buffer_F010_Saber.003_0","type":"VEC3"},{"bufferView":15,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:Head_Idle_2","type":"VEC3"},{"bufferView":47,"byteOffset":0,"componentType":5126,"count":501,"max":[1.134321880869038e-8,9.022187441587448e-9,2.0954757928848267e-9,1],"min":[-1.4646502677351236e-8,-1.0888470569625497e-8,-2.444721758365631e-9,1],"name":"accessor_buffer_mixamorig:HeadTop_End_Idle_1","type":"VEC4"},{"bufferView":84,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Idle_2","type":"VEC3"},{"bufferView":697,"byteOffset":0,"componentType":5126,"count":251,"max":[0.004740715026855469,1.555966854095459,0.00003218650817871094],"min":[0.004696190357208252,1.555917739868164,-0.000008106231689453125],"name":"accessor_buffer_mixamorig:RightHandPinky3_Yawn_0","type":"VEC3"},{"bufferView":396,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00083109550178051,0,0.998789370059967],"min":[-0.020914429798722267,0.00083109550178051,-0.04451649263501167,0.998789370059967],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_1","type":"VEC4"},{"bufferView":538,"byteOffset":0,"componentType":5126,"count":30,"max":[0.2081216275691986,0.0009776869555935264,0.042132094502449036,0.9792493581771851],"min":[0.19852440059185028,0.0009399183327332139,0.04071655124425888,0.9771947264671326],"name":"accessor_buffer_mixamorig:RightHandIndex2_Walking_1","type":"VEC4"},{"bufferView":90,"byteOffset":0,"componentType":5126,"count":501,"max":[1,1,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Idle_2","type":"VEC3"},{"bufferView":373,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"min":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_2","type":"VEC3"},{"bufferView":302,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"min":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":12,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997019767761,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHand_Idle_2","type":"VEC3"},{"bufferView":40,"byteOffset":0,"componentType":5126,"count":501,"max":[0.012768268585205078,1.381809949874878,0.0000069141387939453125],"min":[0.01275491714477539,1.3817834854125977,-0.000014781951904296875],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Idle_0","type":"VEC3"},{"bufferView":502,"byteOffset":0,"componentType":5126,"count":30,"max":[0.15645623207092285,0.010588050819933414,0.04273870959877968,0.9883657097816467],"min":[0.14605343341827393,0.010204009711742401,0.04120168462395668,0.9867029786109924],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Walking_1","type":"VEC4"},{"bufferView":606,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Yawn_2","type":"VEC3"},{"bufferView":741,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:Spine2_Yawn_2","type":"VEC3"},{"bufferView":315,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.034996457397937775,0,0.9979900121688843],"min":[-0.019062332808971405,0.034996457397937775,-0.04927309229969978,0.9979900121688843],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_1","type":"VEC4"},{"bufferView":726,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999996423721313,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Yawn_2","type":"VEC3"},{"bufferView":454,"byteOffset":0,"componentType":5126,"count":30,"max":[0.38647565245628357,0,0,0.892213761806488],"min":[0.34301039576530457,-0.05170813947916031,-0.3102066218852997,0.8676663637161255],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Walking_1","type":"VEC4"},{"bufferView":501,"byteOffset":0,"componentType":5126,"count":30,"max":[0.011225700378417969,2.2008252143859863,0.000029206275939941406],"min":[0.011208534240722656,2.200808048248291,0.000012874603271484375],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Walking_0","type":"VEC3"},{"bufferView":575,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing1_Walking_2","type":"VEC3"},{"bufferView":33,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:Neck_Idle_2","type":"VEC3"},{"bufferView":303,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0008116317912936211,0,0.9999305605888367],"min":[-0.0000027277535536995856,0.0008116317912936211,-0.011757179163396358,0.9999305605888367],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":42,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Idle_2","type":"VEC3"},{"bufferView":519,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0],"min":[-6.509201526641846,-3.8089210987091064,-0.4497396945953369],"name":"accessor_buffer_mixamorig:RightUpLeg_Walking_0","type":"VEC3"},{"bufferView":87,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandRing3_Idle_2","type":"VEC3"},{"bufferView":163,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000026226043701171875,45.049705505371094,0.000004112720489501953],"min":[-0.0000026226043701171875,45.04966735839844,-0.000004410743713378906],"name":"accessor_buffer_mixamorig:LeftLeg_Idle_0","type":"VEC3"},{"bufferView":332,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.916641116142273,0],"min":[-0.02496713399887085,1.916641116142273,-0.000015547877410426736],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_0","type":"VEC3"},{"bufferView":557,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1,1.0000001192092896],"min":[0.9999998211860657,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing3_Walking_2","type":"VEC3"},{"bufferView":66,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000003576278687,1.0000001192092896,1.000000238418579],"min":[0.9999998211860657,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandThumb3_Idle_2","type":"VEC3"},{"bufferView":738,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000003576278687,1.000000238418579],"min":[0.9999997615814209,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandIndex2_Yawn_2","type":"VEC3"},{"bufferView":746,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0,1],"min":[-3.3207474103846835e-8,-0.000008237570909841452,-2.9082002583891153e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_Yawn_1","type":"VEC4"},{"bufferView":513,"byteOffset":0,"componentType":5126,"count":30,"max":[0,5.181254863739014,0],"min":[-2.075829029083252,5.181237697601318,-0.1566934585571289],"name":"accessor_buffer_mixamorig:RightHandPinky1_Walking_0","type":"VEC3"},{"bufferView":112,"byteOffset":0,"componentType":5126,"count":501,"max":[0.008645057678222656,2.2196366786956787,0.0000069141387939453125],"min":[0.008638381958007812,2.219599485397339,-0.000002384185791015625],"name":"accessor_buffer_mixamorig:RightHandRing2_Idle_0","type":"VEC3"},{"bufferView":577,"byteOffset":0,"componentType":5126,"count":30,"max":[2.505257725715637e-7,7.450580596923828e-9,2.9802322387695312e-8,1],"min":[2.0605511963367462e-7,-2.9802322387695312e-8,-3.3527612686157227e-8,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Walking_1","type":"VEC4"},{"bufferView":82,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0065135955810546875,1.6352453231811523,0.000013828277587890625],"min":[0.006496429443359375,1.6352167129516602,-0.00000667572021484375],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Idle_0","type":"VEC3"},{"bufferView":99,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000004768371582,1.0000001192092896,1.0000003576278687],"min":[1.0000001192092896,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Idle_2","type":"VEC3"},{"bufferView":382,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999999403953552],"min":[0.9999999403953552,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightLeg_TPose_2","type":"VEC3"},{"bufferView":300,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00034277912345714867,0,0.9999790191650391],"min":[-0.0000010370887366661918,0.00034277912345714867,-0.0064829993061721325,0.9999790191650391],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_1","type":"VEC4"},{"bufferView":83,"byteOffset":0,"componentType":5126,"count":501,"max":[1.3504176443746019e-8,0,0,1],"min":[-4.470348358154297e-8,-2.4959444999694824e-7,-1.7508865823856468e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Idle_1","type":"VEC4"},{"bufferView":434,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandRing4_Walking_2","type":"VEC3"},{"bufferView":681,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Yawn_2","type":"VEC3"},{"bufferView":457,"byteOffset":0,"componentType":5126,"count":30,"max":[0.11902736127376556,0,0,0.9935969710350037],"min":[0.10917888581752777,-0.002222043927758932,-0.030499938875436783,0.992419958114624],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Walking_1","type":"VEC4"},{"bufferView":117,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000003576278687,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandPinky1_Idle_2","type":"VEC3"},{"bufferView":642,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999998807907104,1,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_Yawn_2","type":"VEC3"},{"bufferView":11,"byteOffset":0,"componentType":5126,"count":501,"max":[0.018849225714802742,0,0.022146498784422874,0.9970361590385437],"min":[-0.04054472595453262,-0.11766815930604935,-0.012780744582414627,0.9927487969398499],"name":"accessor_buffer_mixamorig:RightHand_Idle_1","type":"VEC4"},{"bufferView":548,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightToe_End_Walking_2","type":"VEC3"},{"bufferView":232,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Neck_TPose_2","type":"VEC3"},{"bufferView":318,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.001648154342547059,0.014273405075073242,0.9826878309249878],"min":[-0.1847110539674759,0.001648154342547059,0.014273405075073242,0.9826878309249878],"name":"accessor_buffer_mixamorig:LeftArm_TPose_1","type":"VEC4"},{"bufferView":750,"byteOffset":0,"componentType":5126,"count":251,"max":[1,1,1],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:Hips_Yawn_2","type":"VEC3"},{"bufferView":662,"byteOffset":0,"componentType":5126,"count":251,"max":[0.1638278067111969,0.17582638561725616,0.22936508059501648,0.9995896220207214],"min":[0.02268115244805813,0.0029334318824112415,-0.08364342153072357,0.9433320760726929],"name":"accessor_buffer_mixamorig:RightHandThumb3_Yawn_1","type":"VEC4"},{"bufferView":747,"byteOffset":0,"componentType":5126,"count":251,"max":[1,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightToe_End_Yawn_2","type":"VEC3"},{"bufferView":2,"byteOffset":0,"componentType":5121,"count":3340,"max":[51,51,51,51],"min":[0,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_0","type":"VEC4"},{"bufferView":694,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.8846323490142822,0.0000286102294921875],"min":[-0.05980563163757324,1.8845878839492798,-0.000010967254638671875],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Yawn_0","type":"VEC3"},{"bufferView":592,"byteOffset":0,"componentType":5126,"count":30,"max":[0.4602220952510834,0.06262792646884918,0,0.9546638131141663],"min":[0.29038870334625244,0.009192639961838722,-0.02716829627752304,0.8873404264450073],"name":"accessor_buffer_mixamorig:RightToeBase_Walking_1","type":"VEC4"},{"bufferView":632,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0,1],"min":[-1.6763806343078613e-7,-1.8812716007232666e-7,-1.8998983364326705e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_Yawn_1","type":"VEC4"},{"bufferView":515,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky1_Walking_2","type":"VEC3"},{"bufferView":17,"byteOffset":0,"componentType":5126,"count":501,"max":[0.024185506626963615,0,0.0007755194674246013,0.9957062602043152],"min":[-0.03668700531125069,-0.10086517035961151,-0.07723056524991989,0.9923696517944336],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Idle_1","type":"VEC4"},{"bufferView":205,"byteOffset":0,"componentType":5126,"count":2,"max":[0.03333333333333333],"min":[0],"name":"accessor_buffer_TPose_time_0","type":"SCALAR"},{"bufferView":280,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_2","type":"VEC3"},{"bufferView":228,"byteOffset":0,"componentType":5126,"count":2,"max":[1.7445827893425303e-7,0,3.6372512113302946e-8,1],"min":[1.7445827893425303e-7,-6.26357206101602e-8,3.6372512113302946e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_1","type":"VEC4"},{"bufferView":718,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0],"min":[-6.509203910827637,-3.808932065963745,-0.44974279403686523],"name":"accessor_buffer_mixamorig:RightUpLeg_Yawn_0","type":"VEC3"},{"bufferView":173,"byteOffset":0,"componentType":5126,"count":501,"max":[7.823111047855491e-8,3.166496753692627e-8,6.984919309616089e-8,1],"min":[4.0046877813892934e-8,-3.166497108963995e-8,-1.164153662358558e-9,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_Idle_1","type":"VEC4"},{"bufferView":544,"byteOffset":0,"componentType":5126,"count":30,"max":[0.4968090355396271,0,0.027255013585090637,0.9540429711341858],"min":[0.29268041253089905,-0.06153401732444763,0.013744726777076721,0.8674964904785156],"name":"accessor_buffer_mixamorig:LeftToeBase_Walking_1","type":"VEC4"},{"bufferView":368,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.7723331451416,0.000002205953933298588],"min":[-0.00000198512316273991,22.7723331451416,0.000002205953933298588],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_0","type":"VEC3"},{"bufferView":719,"byteOffset":0,"componentType":5126,"count":251,"max":[0.06762795150279999,0.08844052255153656,0,0.12963023781776428],"min":[0.006446733605116606,-0.04662296921014786,-0.9952765703201294,0.08730243891477585],"name":"accessor_buffer_mixamorig:RightUpLeg_Yawn_1","type":"VEC4"},{"bufferView":238,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,1],"min":[1.0000001192092896,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_2","type":"VEC3"},{"bufferView":404,"byteOffset":0,"componentType":5126,"count":30,"max":[0.9666666666666666],"min":[0],"name":"accessor_buffer_Walking_time_0","type":"SCALAR"},{"bufferView":418,"byteOffset":0,"componentType":5126,"count":30,"max":[0.626791775226593,0,0.6183279156684875,0.4474252462387085],"min":[0.5874829888343811,-0.3742434084415436,0.5201908946037292,0.36397284269332886],"name":"accessor_buffer_mixamorig:RightShoulder_Walking_1","type":"VEC4"},{"bufferView":690,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999997615814209,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Yawn_2","type":"VEC3"},{"bufferView":281,"byteOffset":0,"componentType":5126,"count":2,"max":[0.006504923105239868,1.635219693183899,0],"min":[0.006504923105239868,1.635219693183899,-0.00002377049531787634],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_0","type":"VEC3"},{"bufferView":442,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0,1],"min":[-2.7939677238464355e-7,-9.872020001466808e-8,-1.862645149230957e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_Walking_1","type":"VEC4"},{"bufferView":537,"byteOffset":0,"componentType":5126,"count":30,"max":[0.029908180236816406,2.2504069805145264,0.00001239776611328125],"min":[0.029885292053222656,2.250382661819458,-0.000005245208740234375],"name":"accessor_buffer_mixamorig:RightHandIndex2_Walking_0","type":"VEC3"},{"bufferView":86,"byteOffset":0,"componentType":5126,"count":501,"max":[0.2060239613056183,0,0,0.9903005957603455],"min":[0.13211484253406525,-0.008265145123004913,-0.05707421153783798,0.9768461585044861],"name":"accessor_buffer_mixamorig:LeftHandRing3_Idle_1","type":"VEC4"},{"bufferView":3,"byteOffset":24,"componentType":5126,"count":1176,"max":[0.9074609279632568,0.9870719909667969],"min":[0.0168008916079998,0.018634021282196045],"name":"accessor_buffer_F010_Saber.001_2","type":"VEC2"},{"bufferView":328,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_2","type":"VEC3"},{"bufferView":776,"byteOffset":0,"componentType":5126,"count":251,"max":[2.5486224330961704e-7,1.3038516932795119e-8,2.60770320892334e-8,1],"min":[1.8465289031155407e-7,-4.0978193283081055e-8,-2.7939675462107516e-8,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Yawn_1","type":"VEC4"},{"bufferView":54,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0001230239868164,1.0000057220458984,1.0000028610229492],"min":[1.0001170635223389,0.9999999403953552,1.0000015497207642],"name":"accessor_buffer_mixamorig:LeftUpLeg_Idle_2","type":"VEC3"},{"bufferView":135,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1,1.0000001192092896],"min":[1,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing4_Idle_2","type":"VEC3"},{"bufferView":350,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"min":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"name":"accessor_buffer_mixamorig:Hips_TPose_0","type":"VEC3"},{"bufferView":321,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00001167778464150615,0,0.9999808073043823,0],"min":[0.00001167778464150615,-0.0004857034655287862,0.9999808073043823,-0.006179941818118095],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_1","type":"VEC4"},{"bufferView":522,"byteOffset":0,"componentType":5126,"count":30,"max":[0.6151876449584961,5.987796783447266,0],"min":[0.6151700019836426,5.98777961730957,-0.2521541118621826],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Walking_0","type":"VEC3"},{"bufferView":666,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.0000003576278687],"min":[0.9999998211860657,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing1_Yawn_2","type":"VEC3"},{"bufferView":555,"byteOffset":0,"componentType":5126,"count":30,"max":[0.016335487365722656,2.0911879539489746,0.000009298324584960938],"min":[0.016317367553710938,2.091172933578491,-7.152557373046875e-7],"name":"accessor_buffer_mixamorig:RightHandRing3_Walking_0","type":"VEC3"},{"bufferView":275,"byteOffset":0,"componentType":5126,"count":2,"max":[8.642673492431641e-7,7.483717918395996,0],"min":[8.642673492431641e-7,7.483717918395996,-0.0000068247318267822266],"name":"accessor_buffer_mixamorig:RightArm_TPose_0","type":"VEC3"},{"bufferView":775,"byteOffset":0,"componentType":5126,"count":251,"max":[0,2.0023679733276367,0.000025272369384765625],"min":[-0.03692293167114258,2.0023064613342285,-0.000019550323486328125],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Yawn_0","type":"VEC3"},{"bufferView":616,"byteOffset":0,"componentType":5126,"count":251,"max":[0,8.988450050354004,0],"min":[-3.513526678085327,8.98840618133545,-0.11456191539764404],"name":"accessor_buffer_mixamorig:RightShoulder_Yawn_0","type":"VEC3"},{"bufferView":760,"byteOffset":0,"componentType":5126,"count":251,"max":[0.00000286102294921875,45.04969787597656,0.0000057220458984375],"min":[-0.000003337860107421875,45.04966735839844,-0.0000057220458984375],"name":"accessor_buffer_mixamorig:LeftLeg_Yawn_0","type":"VEC3"},{"bufferView":48,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:HeadTop_End_Idle_2","type":"VEC3"},{"bufferView":424,"byteOffset":0,"componentType":5126,"count":30,"max":[0.04038854315876961,0,0,0.9990822076797485],"min":[0.0356808640062809,-0.004309265408664942,-0.024050123989582062,0.9988852739334106],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Walking_1","type":"VEC4"},{"bufferView":646,"byteOffset":0,"componentType":5126,"count":251,"max":[0.00000432133674621582,4.706448078155518,5.960464477539062e-7],"min":[-0.0000035315752029418945,4.706440448760986,-5.364418029785156e-7],"name":"accessor_buffer_mixamorig:LeftToe_End_Yawn_0","type":"VEC3"},{"bufferView":590,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Walking_2","type":"VEC3"},{"bufferView":62,"byteOffset":0,"componentType":5126,"count":501,"max":[0.15539774298667908,0,0,0.9938856959342957],"min":[0.10679031163454056,-0.0008674515411257744,-0.03775210306048393,0.9871299862861633],"name":"accessor_buffer_mixamorig:LeftHandRing2_Idle_1","type":"VEC4"},{"bufferView":673,"byteOffset":0,"componentType":5126,"count":251,"max":[0.000013828277587890625,7.483733177185059,0.00001722574234008789],"min":[-0.0000133514404296875,7.483705520629883,-0.000014662742614746094],"name":"accessor_buffer_mixamorig:RightArm_Yawn_0","type":"VEC3"},{"bufferView":476,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998807907104,0.9999998807907104,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightArm_Walking_2","type":"VEC3"},{"bufferView":378,"byteOffset":0,"componentType":5126,"count":2,"max":[2.252031947591604e-7,0,2.586603153886813e-9,1],"min":[2.252031947591604e-7,-1.896821366642598e-8,2.586603153886813e-9,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":104,"byteOffset":0,"componentType":5126,"count":501,"max":[0.18894062936306,0.045000359416007996,0.05795791372656822,0.9932901263237],"min":[0.09659142792224884,0.027609357610344887,0.04495842382311821,0.9798877835273743],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Idle_1","type":"VEC4"},{"bufferView":9,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000003576278687,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Idle_2","type":"VEC3"},{"bufferView":772,"byteOffset":0,"componentType":5126,"count":251,"max":[0.8905172348022461,5.9824113845825195,0],"min":[0.8904857635498047,5.9823689460754395,-0.2430715560913086],"name":"accessor_buffer_mixamorig:LeftHandRing1_Yawn_0","type":"VEC3"},{"bufferView":779,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0.08230714499950409,0.016647951677441597,0.9924415946006775],"min":[-0.1816161423921585,0.0447072871029377,-0.03208081051707268,0.979972243309021],"name":"accessor_buffer_mixamorig:RightLeg_Yawn_1","type":"VEC4"},{"bufferView":562,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0.07726967334747314,0.08277056366205215,0.9840719699859619],"min":[-0.5687631368637085,-0.03817012906074524,-0.0026246230117976665,0.8189079761505127],"name":"accessor_buffer_mixamorig:LeftLeg_Walking_1","type":"VEC4"},{"bufferView":644,"byteOffset":0,"componentType":5126,"count":251,"max":[2.048909308882685e-8,2.7939679014821195e-8,1.4901161193847656e-8,1],"min":[-2.9103830456733704e-8,-3.166497108963995e-8,-1.4901161193847656e-8,1],"name":"accessor_buffer_mixamorig:HeadTop_End_Yawn_1","type":"VEC4"},{"bufferView":326,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8726567029953003,1.3422273397445679],"min":[-1.3880571126937866,1.8726567029953003,1.3422273397445679],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_0","type":"VEC3"},{"bufferView":78,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000003576278687,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightArm_Idle_2","type":"VEC3"},{"bufferView":782,"byteOffset":0,"componentType":5126,"count":251,"max":[0.024191146716475487,0,0,0.9904854893684387],"min":[0.00664842315018177,-0.11843197792768478,-0.25926902890205383,0.959041178226471],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Yawn_1","type":"VEC4"},{"bufferView":290,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2824809551239014,0.00000463516335003078],"min":[-0.018551677465438843,2.2824809551239014,0.00000463516335003078],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":780,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999996423721313,0.9999996423721313,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightLeg_Yawn_2","type":"VEC3"},{"bufferView":26,"byteOffset":0,"componentType":5126,"count":501,"max":[0.16385410726070404,0,0,0.99859619140625],"min":[0.04614847153425217,-0.00834368821233511,-0.045861344784498215,0.9853826761245728],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Idle_1","type":"VEC4"},{"bufferView":479,"byteOffset":0,"componentType":5126,"count":30,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb1_Walking_2","type":"VEC3"},{"bufferView":309,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5753993988037109,0.4047872722148895,0,0.39317330718040466],"min":[0.5753993988037109,0.4047872722148895,-0.592011570930481,0.39317330718040466],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_1","type":"VEC4"},{"bufferView":679,"byteOffset":0,"componentType":5126,"count":251,"max":[0.006519317626953125,1.6352565288543701,0.00001996755599975586],"min":[0.006487071514129639,1.6352167129516602,-0.00001519918441772461],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Yawn_0","type":"VEC3"},{"bufferView":692,"byteOffset":0,"componentType":5126,"count":251,"max":[0.04787973687052727,0.0847688764333725,0,0.9978355765342712],"min":[-0.0020693850237876177,0.005241064820438623,-0.6058869361877441,0.7895712852478027],"name":"accessor_buffer_mixamorig:RightForeArm_Yawn_1","type":"VEC4"},{"bufferView":552,"byteOffset":0,"componentType":5126,"count":30,"max":[0.015065670013427734,2.0928683280944824,0.000022411346435546875],"min":[0.015050888061523438,2.092845916748047,0.00001049041748046875],"name":"accessor_buffer_mixamorig:RightHandIndex3_Walking_0","type":"VEC3"},{"bufferView":61,"byteOffset":0,"componentType":5126,"count":501,"max":[0,2.1800715923309326,0],"min":[-0.017891883850097656,2.1800432205200195,-0.000011444091796875],"name":"accessor_buffer_mixamorig:LeftHandRing2_Idle_0","type":"VEC3"},{"bufferView":263,"byteOffset":0,"componentType":5126,"count":2,"max":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"min":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_0","type":"VEC3"},{"bufferView":394,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,1],"min":[0.9999999403953552,1,1],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_2","type":"VEC3"},{"bufferView":291,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"min":[-6.611599019379355e-7,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":736,"byteOffset":0,"componentType":5126,"count":251,"max":[0.02992856502532959,2.2504234313964844,0.00002956390380859375],"min":[0.029875516891479492,2.2503714561462402,-0.000024318695068359375],"name":"accessor_buffer_mixamorig:RightHandIndex2_Yawn_0","type":"VEC3"},{"bufferView":523,"byteOffset":0,"componentType":5126,"count":30,"max":[0.35908982157707214,0.014681422151625156,0.06364209949970245,0.9881294369697571],"min":[0.14934328198432922,-0.005565935280174017,0.020810263231396675,0.9328184127807617],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Walking_1","type":"VEC4"},{"bufferView":791,"byteOffset":0,"componentType":5126,"count":251,"max":[0.2976076602935791,0.061651043593883514,0,0.9525063037872314],"min":[0.2976076006889343,0.06165102496743202,-0.018990768119692802,0.9525062441825867],"name":"accessor_buffer_mixamorig:RightToeBase_Yawn_1","type":"VEC4"},{"bufferView":409,"byteOffset":0,"componentType":5126,"count":30,"max":[0.06098603457212448,0,0.0904063805937767,0.9924531579017639],"min":[-0.17131856083869934,-0.3111955523490906,-0.2263297140598297,0.9269754886627197],"name":"accessor_buffer_mixamorig:RightHand_Walking_1","type":"VEC4"},{"bufferView":260,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1800546646118164,0],"min":[-0.017888188362121582,2.1800546646118164,-0.000005649722879752517],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_0","type":"VEC3"},{"bufferView":569,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftForeArm_Walking_2","type":"VEC3"},{"bufferView":443,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999998807907104,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_Walking_2","type":"VEC3"},{"bufferView":221,"byteOffset":0,"componentType":5126,"count":2,"max":[0,41.84932327270508,0],"min":[-1.1807060218416154e-7,41.84932327270508,-2.8172507882118225e-7],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_0","type":"VEC3"},{"bufferView":455,"byteOffset":0,"componentType":5126,"count":30,"max":[1.000000238418579,1.0000001192092896,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Walking_2","type":"VEC3"},{"bufferView":451,"byteOffset":0,"componentType":5126,"count":30,"max":[0.096707284450531,0.3266020715236664,0.9956504106521606,0.11079581826925278],"min":[-0.10106376558542252,-0.17860715091228485,-0.9987594485282898,-0.00430084066465497],"name":"accessor_buffer_mixamorig:LeftUpLeg_Walking_1","type":"VEC4"},{"bufferView":136,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0987086296081543,2.22261118888855,0.000027179718017578125],"min":[0.09868621826171875,2.2225847244262695,0.000009059906005859375],"name":"accessor_buffer_mixamorig:RightHandThumb2_Idle_0","type":"VEC3"},{"bufferView":271,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":69,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.0000003576278687],"min":[0.9999998211860657,0.9999996423721313,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing1_Idle_2","type":"VEC3"},{"bufferView":37,"byteOffset":0,"componentType":5126,"count":501,"max":[0.009778380393981934,1.9066662788391113,0.000023365020751953125],"min":[0.009773075580596924,1.9066277742385864,0.000014126300811767578],"name":"accessor_buffer_mixamorig:RightHandPinky2_Idle_0","type":"VEC3"},{"bufferView":543,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0000016689300537109375,12.089052200317383,0.0000022351741790771484],"min":[-4.507601261138916e-7,12.089044570922852,-0.000007450580596923828],"name":"accessor_buffer_mixamorig:LeftToeBase_Walking_0","type":"VEC3"},{"bufferView":783,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Yawn_2","type":"VEC3"},{"bufferView":92,"byteOffset":0,"componentType":5126,"count":501,"max":[0.19080395996570587,0.00040480238385498524,0,0.9941403269767761],"min":[0.10591406375169754,0.00023922353284433484,-0.03656462952494621,0.9809468388557434],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Idle_1","type":"VEC4"},{"bufferView":743,"byteOffset":0,"componentType":5126,"count":251,"max":[0.3138423264026642,0,0.01884089969098568,0.9543662667274475],"min":[0.29159149527549744,-0.061680588871240616,0.01815459132194519,0.947487473487854],"name":"accessor_buffer_mixamorig:LeftToeBase_Yawn_1","type":"VEC4"},{"bufferView":737,"byteOffset":0,"componentType":5126,"count":251,"max":[0.29591068625450134,0.001323158387094736,0.055026814341545105,0.9999377131462097],"min":[-0.02861855737864971,0.00003734216807060875,0.006827713456004858,0.953628420829773],"name":"accessor_buffer_mixamorig:RightHandIndex2_Yawn_1","type":"VEC4"},{"bufferView":560,"byteOffset":0,"componentType":5126,"count":30,"max":[1.000000238418579,1.000000238418579,1.0000003576278687],"min":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightFoot_Walking_2","type":"VEC3"},{"bufferView":777,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Yawn_2","type":"VEC3"},{"bufferView":689,"byteOffset":0,"componentType":5126,"count":251,"max":[0.4894944131374359,0,0,0.9996159076690674],"min":[0.024158209562301636,-0.00331420311704278,-0.08468065410852432,0.8678787350654602],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Yawn_1","type":"VEC4"},{"bufferView":667,"byteOffset":0,"componentType":5126,"count":251,"max":[0,5.933866500854492,0],"min":[-0.620999813079834,5.933826923370361,-0.18958759307861328],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Yawn_0","type":"VEC3"},{"bufferView":71,"byteOffset":0,"componentType":5126,"count":501,"max":[0.14715535938739777,0.0007554469048045576,0.00996183231472969,0.9975954294204712],"min":[0.06858452409505844,0.00036496733082458377,0.004551884718239307,0.989102840423584],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Idle_1","type":"VEC4"},{"bufferView":370,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_2","type":"VEC3"},{"bufferView":70,"byteOffset":0,"componentType":5126,"count":501,"max":[0,5.933867454528809,0],"min":[-0.6209878921508789,5.933835983276367,-0.1895732879638672],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Idle_0","type":"VEC3"},{"bufferView":148,"byteOffset":0,"componentType":5126,"count":501,"max":[5.364418029785156e-7,4.71254825592041,3.129243850708008e-7],"min":[-5.662441253662109e-7,4.71254301071167,-2.682209014892578e-7],"name":"accessor_buffer_mixamorig:RightToe_End_Idle_0","type":"VEC3"},{"bufferView":472,"byteOffset":0,"componentType":5126,"count":30,"max":[0.12839406728744507,0.09395399689674377,0.057377591729164124,0.9990851283073425],"min":[-0.056537214666604996,0.003749663243070245,0.03209517151117325,0.9864088296890259],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Walking_1","type":"VEC4"},{"bufferView":341,"byteOffset":0,"componentType":5126,"count":2,"max":[1.2692300335737094e-11,9.168559074401855,0],"min":[1.2692300335737094e-11,9.168559074401855,-4.76837158203125e-7],"name":"accessor_buffer_mixamorig:Spine2_TPose_0","type":"VEC3"},{"bufferView":675,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.0000003576278687],"min":[0.9999997615814209,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightArm_Yawn_2","type":"VEC3"},{"bufferView":461,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandRing2_Walking_2","type":"VEC3"},{"bufferView":356,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"min":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_0","type":"VEC3"},{"bufferView":316,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_2","type":"VEC3"},{"bufferView":508,"byteOffset":0,"componentType":5126,"count":30,"max":[0.7147021293640137,0.3793763518333435,0,0.4451804459095001],"min":[0.660038948059082,0.3444429039955139,-0.5530652403831482,0.3377883732318878],"name":"accessor_buffer_mixamorig:LeftShoulder_Walking_1","type":"VEC4"},{"bufferView":549,"byteOffset":0,"componentType":5126,"count":30,"max":[5.547571182250977,96.82164001464844,4.587433815002441],"min":[-0.10560455918312073,92.83765411376953,0.2603561282157898],"name":"accessor_buffer_mixamorig:Hips_Walking_0","type":"VEC3"},{"bufferView":179,"byteOffset":0,"componentType":5126,"count":501,"max":[2.5611367959754716e-7,2.0489096641540527e-8,2.0489100194254206e-8,1],"min":[2.0104928921682585e-7,-4.470348358154297e-8,-2.2351741790771484e-8,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Idle_1","type":"VEC4"},{"bufferView":769,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.5352156162261963,0.00002810359001159668],"min":[-0.18292176723480225,1.53516685962677,-0.00003039836883544922],"name":"accessor_buffer_mixamorig:RightHandThumb4_Yawn_0","type":"VEC3"},{"bufferView":397,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1],"min":[1,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_2","type":"VEC3"},{"bufferView":671,"byteOffset":0,"componentType":5126,"count":251,"max":[0.4213804304599762,0.02211507223546505,0.17220981419086456,0.9991625547409058],"min":[-0.13027016818523407,-0.033354394137859344,-0.029934976249933243,0.9061493873596191],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Yawn_1","type":"VEC4"},{"bufferView":74,"byteOffset":0,"componentType":5126,"count":501,"max":[0.19164203107357025,0.010969349183142185,0.06582394242286682,0.9906309247016907],"min":[0.11946962028741837,0.006721641402691603,0.054351724684238434,0.9798974394798279],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Idle_1","type":"VEC4"},{"bufferView":535,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0.11415008455514908,0.9927259087562561],"min":[-0.08025413006544113,-0.1162383183836937,0.02324865572154522,0.989997386932373],"name":"accessor_buffer_mixamorig:RightHandThumb2_Walking_1","type":"VEC4"},{"bufferView":109,"byteOffset":0,"componentType":5126,"count":501,"max":[3.5135252475738525,8.987110137939453,0],"min":[3.5135180950164795,8.98706340789795,-0.09784141182899475],"name":"accessor_buffer_mixamorig:LeftShoulder_Idle_0","type":"VEC3"},{"bufferView":359,"byteOffset":0,"componentType":5126,"count":2,"max":[2.655433490872383e-7,41.85009002685547,0],"min":[2.655433490872383e-7,41.85009002685547,-1.4621764421463013e-7],"name":"accessor_buffer_mixamorig:RightFoot_TPose_0","type":"VEC3"},{"bufferView":348,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-3.306195139884949e-8,-0.000008229748345911503,-2.3865142750878476e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_1","type":"VEC4"},{"bufferView":505,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0.01913636364042759,0.03167296200990677,0.9999430179595947],"min":[-0.03925073891878128,-0.025652628391981125,-0.011231466196477413,0.9986997246742249],"name":"accessor_buffer_mixamorig:Spine_Walking_1","type":"VEC4"},{"bufferView":108,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:Spine_Idle_2","type":"VEC3"},{"bufferView":93,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Idle_2","type":"VEC3"},{"bufferView":111,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftShoulder_Idle_2","type":"VEC3"},{"bufferView":242,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9040616750717163,0],"min":[-0.044958412647247314,1.9040616750717163,-0.000012791395420208573],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_0","type":"VEC3"},{"bufferView":614,"byteOffset":0,"componentType":5126,"count":251,"max":[0.16486911475658417,0,0.032274361699819565,0.9993045926094055],"min":[-0.031893547624349594,-0.06064178794622421,-0.1720692217350006,0.9693049192428589],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Yawn_1","type":"VEC4"},{"bufferView":177,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000004768371582,1.0000004768371582],"min":[0.9999997615814209,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandRing1_Idle_2","type":"VEC3"},{"bufferView":329,"byteOffset":0,"componentType":5126,"count":2,"max":[5.414642258866342e-13,8.022480964660645,0],"min":[5.414642258866342e-13,8.022480964660645,-5.364418029785156e-7],"name":"accessor_buffer_mixamorig:Spine1_TPose_0","type":"VEC3"},{"bufferView":202,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.525007963180542,0.0000152587890625],"min":[-0.006236076354980469,1.5249779224395752,-0.00000476837158203125],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Idle_0","type":"VEC3"},{"bufferView":611,"byteOffset":0,"componentType":5126,"count":251,"max":[0.3231901526451111,0.31904318928718567,0.16974300146102905,0.9974219799041748],"min":[-0.08003358542919159,-0.2763500213623047,-0.25712525844573975,0.8766242861747742],"name":"accessor_buffer_mixamorig:Head_Yawn_1","type":"VEC4"},{"bufferView":550,"byteOffset":0,"componentType":5126,"count":30,"max":[0.02222433127462864,0.08787377923727036,0.05810628458857536,0.9997369050979614],"min":[-0.006848346907645464,-0.03860977664589882,-0.04494691640138626,0.995258092880249],"name":"accessor_buffer_mixamorig:Hips_Walking_1","type":"VEC4"},{"bufferView":137,"byteOffset":0,"componentType":5126,"count":501,"max":[0.004575527738779783,0.020496925339102745,0.2274504005908966,0.9786607623100281],"min":[0.0014477120712399483,0.019821282476186752,0.20445318520069122,0.973577082157135],"name":"accessor_buffer_mixamorig:RightHandThumb2_Idle_1","type":"VEC4"},{"bufferView":528,"byteOffset":0,"componentType":5126,"count":30,"max":[0.000001043081283569336,8.022491455078125,0.0000016242265701293945],"min":[-0.0000016540288925170898,8.022468566894531,-6.332993507385254e-7],"name":"accessor_buffer_mixamorig:Spine1_Walking_0","type":"VEC3"},{"bufferView":286,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_2","type":"VEC3"},{"bufferView":647,"byteOffset":0,"componentType":5126,"count":251,"max":[8.661298522838479e-8,0.000008064322173595428,1.0302755093505311e-8,1],"min":[7.916241173688832e-8,0.000008052214980125427,-3.655441105365753e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_Yawn_1","type":"VEC4"},{"bufferView":459,"byteOffset":0,"componentType":5126,"count":30,"max":[0,2.1800661087036133,0],"min":[-0.01789379119873047,2.1800498962402344,-0.00001430511474609375],"name":"accessor_buffer_mixamorig:LeftHandRing2_Walking_0","type":"VEC3"},{"bufferView":488,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1,1],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Walking_2","type":"VEC3"},{"bufferView":152,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0,0.0565202496945858,0.9984039664268494],"min":[-0.06276769191026688,-0.1262819766998291,-0.07716826349496841,0.9893531799316406],"name":"accessor_buffer_mixamorig:Hips_Idle_1","type":"VEC4"},{"bufferView":146,"byteOffset":0,"componentType":5126,"count":501,"max":[0.29608154296875,0,0.01911911740899086,0.9570359587669373],"min":[0.28241658210754395,-0.06943853199481964,0.016336647793650627,0.9526420831680298],"name":"accessor_buffer_mixamorig:LeftToeBase_Idle_1","type":"VEC4"},{"bufferView":317,"byteOffset":0,"componentType":5126,"count":2,"max":[0,7.4837236404418945,0],"min":[-5.960464477539063e-8,7.4837236404418945,-0.0000017881393432617188],"name":"accessor_buffer_mixamorig:LeftArm_TPose_0","type":"VEC3"},{"bufferView":706,"byteOffset":0,"componentType":5126,"count":251,"max":[3.5135250091552734,8.98710823059082,0],"min":[3.513516664505005,8.987070083618164,-0.09784162044525146],"name":"accessor_buffer_mixamorig:LeftShoulder_Yawn_0","type":"VEC3"},{"bufferView":180,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Idle_2","type":"VEC3"},{"bufferView":297,"byteOffset":0,"componentType":5126,"count":2,"max":[4.656612517806025e-8,0,0,1],"min":[4.656612517806025e-8,-1.9324940581100236e-7,-4.982575063650074e-8,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_1","type":"VEC4"},{"bufferView":6,"byteOffset":0,"componentType":5126,"count":501,"max":[16.666666666666654],"min":[0],"name":"accessor_buffer_Idle_time_0","type":"SCALAR"},{"bufferView":194,"byteOffset":0,"componentType":5126,"count":501,"max":[0.298214852809906,0.06225595995783806,0,0.9538479447364807],"min":[0.29314255714416504,0.06156858056783676,-0.019128093495965004,0.9523220658302307],"name":"accessor_buffer_mixamorig:RightToeBase_Idle_1","type":"VEC4"},{"bufferView":186,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Idle_2","type":"VEC3"},{"bufferView":403,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_2","type":"VEC3"},{"bufferView":187,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0033597946166992188,1.90627121925354,0.0000057220458984375],"min":[0.0033435821533203125,1.9062323570251465,-0.00000476837158203125],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Idle_0","type":"VEC3"},{"bufferView":485,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandRing3_Walking_2","type":"VEC3"},{"bufferView":337,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999998211860657],"min":[1,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_2","type":"VEC3"},{"bufferView":703,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000016838312149047852,6.854518413543701,0],"min":[-0.0000023543834686279297,6.854480266571045,-0.5486010909080505],"name":"accessor_buffer_mixamorig:Spine_Yawn_0","type":"VEC3"},{"bufferView":709,"byteOffset":0,"componentType":5126,"count":251,"max":[0.008663773536682129,2.2196600437164307,0.000019431114196777344],"min":[0.00862574577331543,2.219595193862915,-0.00001811981201171875],"name":"accessor_buffer_mixamorig:RightHandRing2_Yawn_0","type":"VEC3"},{"bufferView":240,"byteOffset":0,"componentType":5126,"count":2,"max":[5.20922753821651e-8,0,1.4510078472085297e-8,1],"min":[5.20922753821651e-8,-1.1215498751937503e-8,1.4510078472085297e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_1","type":"VEC4"},{"bufferView":182,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0.05503339320421219,0,0.9821439385414124],"min":[-0.3205168843269348,-0.06549748033285141,-0.03350221365690231,0.9447567462921143],"name":"accessor_buffer_mixamorig:RightLeg_Idle_1","type":"VEC4"},{"bufferView":643,"byteOffset":0,"componentType":5126,"count":251,"max":[0.000006854534149169922,20.85727882385254,0.5804646611213684],"min":[-0.000008344650268554688,20.85722541809082,0.5804414749145508],"name":"accessor_buffer_mixamorig:HeadTop_End_Yawn_0","type":"VEC3"},{"bufferView":425,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Walking_2","type":"VEC3"},{"bufferView":161,"byteOffset":0,"componentType":5126,"count":501,"max":[0.6104982495307922,0,0.048414260149002075,0.8288843035697937],"min":[0.5526801943778992,-0.09555656462907791,-0.005197371821850538,0.7873787879943848],"name":"accessor_buffer_mixamorig:RightFoot_Idle_1","type":"VEC4"},{"bufferView":468,"byteOffset":0,"componentType":5126,"count":30,"max":[0,5.933863639831543,0],"min":[-0.6209893226623535,5.933838367462158,-0.18957901000976562],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Walking_0","type":"VEC3"},{"bufferView":722,"byteOffset":0,"componentType":5126,"count":251,"max":[0.423574298620224,0.019656144082546234,0.09645579755306244,0.9999634027481079],"min":[-0.012067945674061775,-0.01332169957458973,-0.07843596488237381,0.9035295248031616],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Yawn_1","type":"VEC4"},{"bufferView":406,"byteOffset":0,"componentType":5126,"count":30,"max":[0.30395814776420593,0.002761955140158534,0.05785207450389862,0.9542210698127747],"min":[0.29374009370803833,0.0026750490069389343,0.056320395320653915,0.9509233236312866],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Walking_1","type":"VEC4"},{"bufferView":576,"byteOffset":0,"componentType":5126,"count":30,"max":[0,2.0023531913757324,0.00000667572021484375],"min":[-0.03691673278808594,2.002330780029297,-0.0000095367431640625],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Walking_0","type":"VEC3"},{"bufferView":118,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000033974647521972656,7.483736515045166,0.000022411346435546875],"min":[-0.000005125999450683594,7.483705043792725,-0.00001800060272216797],"name":"accessor_buffer_mixamorig:LeftArm_Idle_0","type":"VEC3"},{"bufferView":727,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000019073486328125,8.022497177124023,0.0000046193599700927734],"min":[-0.0000020265579223632812,8.022464752197266,-0.00000476837158203125],"name":"accessor_buffer_mixamorig:Spine1_Yawn_0","type":"VEC3"},{"bufferView":72,"byteOffset":0,"componentType":5126,"count":501,"max":[1,1.0000003576278687,1.000000238418579],"min":[0.9999997019767761,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Idle_2","type":"VEC3"},{"bufferView":330,"byteOffset":0,"componentType":5126,"count":2,"max":[1.30385160446167e-8,9.691603259937703e-14,0,1],"min":[1.30385160446167e-8,9.691603259937703e-14,-6.765455166576895e-13,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_1","type":"VEC4"},{"bufferView":156,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997019767761,0.9999996423721313],"name":"accessor_buffer_mixamorig:RightHandIndex3_Idle_2","type":"VEC3"},{"bufferView":116,"byteOffset":0,"componentType":5126,"count":501,"max":[0.32983627915382385,0.05425029620528221,0.20717312395572662,0.9365647435188293],"min":[0.28015825152397156,0.04390309751033783,0.20597940683364868,0.9194262623786926],"name":"accessor_buffer_mixamorig:RightHandPinky1_Idle_1","type":"VEC4"},{"bufferView":435,"byteOffset":0,"componentType":5126,"count":30,"max":[0.009784698486328125,1.9066550731658936,0.000023096799850463867],"min":[0.009769439697265625,1.906639575958252,0.000013828277587890625],"name":"accessor_buffer_mixamorig:RightHandPinky2_Walking_0","type":"VEC3"},{"bufferView":676,"byteOffset":0,"componentType":5126,"count":251,"max":[1.4313724040985107,1.9489097595214844,1.3737554550170898],"min":[1.4313232898712158,1.9488589763641357,1.3737177848815918],"name":"accessor_buffer_mixamorig:RightHandThumb1_Yawn_0","type":"VEC3"},{"bufferView":308,"byteOffset":0,"componentType":5126,"count":2,"max":[3.513521194458008,8.987088203430176,0],"min":[3.513521194458008,8.987088203430176,-0.09783625602722168],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_0","type":"VEC3"},{"bufferView":261,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"min":[-8.061967378125701e-7,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_1","type":"VEC4"},{"bufferView":584,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Walking_2","type":"VEC3"},{"bufferView":774,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.0000003576278687],"min":[0.9999997615814209,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing1_Yawn_2","type":"VEC3"},{"bufferView":657,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Yawn_2","type":"VEC3"},{"bufferView":483,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.9782544374465942,0],"min":[-0.004059791564941406,1.9782342910766602,-0.000041484832763671875],"name":"accessor_buffer_mixamorig:LeftHandRing3_Walking_0","type":"VEC3"},{"bufferView":422,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftFoot_Walking_2","type":"VEC3"},{"bufferView":585,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0033588409423828125,1.9062575101852417,0.00000858306884765625],"min":[0.0033407211303710938,1.9062409400939941,-0.0000095367431640625],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Walking_0","type":"VEC3"},{"bufferView":755,"byteOffset":0,"componentType":5126,"count":251,"max":[0.19335709512233734,0.011140700429677963,0.03712765872478485,0.9999834895133972],"min":[-0.2717040777206421,-0.007787367329001427,-0.041114091873168945,0.9614707231521606],"name":"accessor_buffer_mixamorig:RightHandRing3_Yawn_1","type":"VEC4"},{"bufferView":364,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,1],"min":[1.0000001192092896,0.9999998211860657,1],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_2","type":"VEC3"},{"bufferView":395,"byteOffset":0,"componentType":5126,"count":2,"max":[2.289442539215088,5.801696300506592,0.050649963319301605],"min":[2.289442539215088,5.801696300506592,0.050649963319301605],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_0","type":"VEC3"},{"bufferView":795,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandIndex1_Yawn_2","type":"VEC3"},{"bufferView":23,"byteOffset":0,"componentType":5126,"count":501,"max":[0.6119635105133057,0.06298180669546127,0.04404832050204277,0.8257962465286255],"min":[0.5611494779586792,0.006214461755007505,-0.038709644228219986,0.7874863147735596],"name":"accessor_buffer_mixamorig:LeftFoot_Idle_1","type":"VEC4"},{"bufferView":680,"byteOffset":0,"componentType":5126,"count":251,"max":[1.909211277961731e-8,0,0,1],"min":[-4.0978189730367376e-8,-2.3550818184503441e-7,-1.8067660789711226e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Yawn_1","type":"VEC4"},{"bufferView":790,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000011008232831954956,12.033417701721191,0.000004842877388000488],"min":[-0.000001428648829460144,12.033411979675293,0.0000030994415283203125],"name":"accessor_buffer_mixamorig:RightToeBase_Yawn_0","type":"VEC3"},{"bufferView":514,"byteOffset":0,"componentType":5126,"count":30,"max":[0.5699740052223206,0.11541295796632767,0.29281482100486755,0.8423991799354553],"min":[0.4477769434452057,0.06685309112071991,0.2629931569099426,0.7695973515510559],"name":"accessor_buffer_mixamorig:RightHandPinky1_Walking_1","type":"VEC4"},{"bufferView":446,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:HeadTop_End_Walking_2","type":"VEC3"},{"bufferView":685,"byteOffset":0,"componentType":5126,"count":251,"max":[0.029534339904785156,2.085692882537842,0.000014781951904296875],"min":[0.02949535846710205,2.0856471061706543,-0.00002384185791015625],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Yawn_0","type":"VEC3"},{"bufferView":599,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHand_Walking_2","type":"VEC3"},{"bufferView":369,"byteOffset":0,"componentType":5126,"count":2,"max":[4.818217576030293e-7,0,4.313407657718926e-7,1],"min":[4.818217576030293e-7,-0.00015852972865104675,4.313407657718926e-7,1],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_1","type":"VEC4"},{"bufferView":428,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1],"min":[0.9999998807907104,0.9999999403953552,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandPinky4_Walking_2","type":"VEC3"},{"bufferView":149,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0,0,1],"min":[-3.41096892952919e-8,-0.000008237695510615595,-4.103640804942188e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_Idle_1","type":"VEC4"},{"bufferView":113,"byteOffset":0,"componentType":5126,"count":501,"max":[0.1633726954460144,0,0.02707192488014698,0.9927774667739868],"min":[0.1185440719127655,-0.0017205171752721071,0.01841292344033718,0.9861913919448853],"name":"accessor_buffer_mixamorig:RightHandRing2_Idle_1","type":"VEC4"},{"bufferView":392,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.033415794372559,3.5762786865234375e-7],"min":[-6.239861249923706e-7,12.033415794372559,3.5762786865234375e-7],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_0","type":"VEC3"},{"bufferView":68,"byteOffset":0,"componentType":5126,"count":501,"max":[0.31094667315483093,0.02594979852437973,0.11563578993082047,0.9593018293380737],"min":[0.25704312324523926,0.01731044426560402,0.11229659616947174,0.9434127807617188],"name":"accessor_buffer_mixamorig:RightHandRing1_Idle_1","type":"VEC4"},{"bufferView":258,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"min":[-9.933781939253095e-7,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_1","type":"VEC4"},{"bufferView":105,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Idle_2","type":"VEC3"},{"bufferView":336,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00004969544170307927,0.0011240799212828279,0,0.9999988079071045],"min":[0.00004969544170307927,0.0011240799212828279,-0.0010827239602804184,0.9999988079071045],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_1","type":"VEC4"},{"bufferView":85,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.9782629013061523,0],"min":[-0.004058837890625,1.978226661682129,-0.000043392181396484375],"name":"accessor_buffer_mixamorig:LeftHandRing3_Idle_0","type":"VEC3"},{"bufferView":192,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Idle_2","type":"VEC3"},{"bufferView":229,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1],"min":[1,1.0000001192092896,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_2","type":"VEC3"},{"bufferView":345,"byteOffset":0,"componentType":5126,"count":2,"max":[0.291592001914978,0,0.018840743228793144,0.954366147518158],"min":[0.291592001914978,-0.06168048828840256,0.018840743228793144,0.954366147518158],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_1","type":"VEC4"},{"bufferView":259,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"min":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_2","type":"VEC3"},{"bufferView":199,"byteOffset":0,"componentType":5126,"count":501,"max":[0.00000762939453125,19.023361206054688,0.00000762939453125],"min":[-0.000007152557373046875,19.023324966430664,-0.000009059906005859375],"name":"accessor_buffer_mixamorig:LeftHand_Idle_0","type":"VEC3"},{"bufferView":63,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997019767761,0.9999995827674866,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandRing2_Idle_2","type":"VEC3"},{"bufferView":45,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000003576278687,1.0000003576278687],"min":[0.9999998211860657,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandIndex4_Idle_2","type":"VEC3"},{"bufferView":207,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999955296516418],"min":[-0.0000013217339756010915,-0.00023518799571320415,-0.002985715866088867,0.9999955296516418],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":294,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000018012506188824773,0.00015944617916829884,0,1],"min":[0.0000018012506188824773,0.00015944617916829884,-1.3720271851980215e-7,1],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_1","type":"VEC4"},{"bufferView":602,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Walking_2","type":"VEC3"},{"bufferView":631,"byteOffset":0,"componentType":5126,"count":251,"max":[0.021970748901367188,1.761944055557251,0.000017642974853515625],"min":[0.02191638946533203,1.7619071006774902,-0.000015735626220703125],"name":"accessor_buffer_mixamorig:LeftHandRing4_Yawn_0","type":"VEC3"},{"bufferView":612,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:Head_Yawn_2","type":"VEC3"},{"bufferView":678,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997019767761,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandThumb1_Yawn_2","type":"VEC3"},{"bufferView":184,"byteOffset":0,"componentType":5126,"count":501,"max":[0,2.151778221130371,0],"min":[-0.018172740936279297,2.1517505645751953,-0.00002765655517578125],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Idle_0","type":"VEC3"},{"bufferView":283,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1.0000001192092896],"min":[1,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_2","type":"VEC3"},{"bufferView":295,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999997615814209],"min":[1,1.0000001192092896,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_2","type":"VEC3"},{"bufferView":196,"byteOffset":0,"componentType":5126,"count":501,"max":[2.2894468307495117,5.8017096519470215,0.05065774917602539],"min":[2.289430618286133,5.801682472229004,0.05063676834106445],"name":"accessor_buffer_mixamorig:RightHandIndex1_Idle_0","type":"VEC3"},{"bufferView":206,"byteOffset":0,"componentType":5126,"count":2,"max":[0.025692284107208252,2.32354736328125,0],"min":[0.025692284107208252,2.32354736328125,-0.000005896072252653539],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":605,"byteOffset":0,"componentType":5126,"count":251,"max":[0.4042389690876007,0.0036144228652119637,0.07280395925045013,0.999915361404419],"min":[-0.02949456125497818,-0.00009553247218718752,0.007105657365173101,0.9117441773414612],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Yawn_1","type":"VEC4"},{"bufferView":744,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999996423721313,0.9999996423721313,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftToeBase_Yawn_2","type":"VEC3"},{"bufferView":686,"byteOffset":0,"componentType":5126,"count":251,"max":[0,8.009375562778587e-8,3.72529100900465e-8,1],"min":[-8.614735236278648e-8,1.862645504502325e-8,-1.3504178220102858e-8,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Yawn_1","type":"VEC4"},{"bufferView":574,"byteOffset":0,"componentType":5126,"count":30,"max":[0.403611958026886,0,0,0.9255605340003967],"min":[0.3412705361843109,-0.03438929468393326,-0.1728171706199646,0.8978229761123657],"name":"accessor_buffer_mixamorig:LeftHandRing1_Walking_1","type":"VEC4"},{"bufferView":624,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Yawn_2","type":"VEC3"},{"bufferView":789,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000003576278687,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Yawn_2","type":"VEC3"},{"bufferView":96,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightForeArm_Idle_2","type":"VEC3"},{"bufferView":629,"byteOffset":0,"componentType":5126,"count":251,"max":[0.11511718481779099,0.13253821432590485,0.012231080792844296,0.999814510345459],"min":[-0.14733216166496277,-0.1341867446899414,-0.04164697229862213,0.9861831068992615],"name":"accessor_buffer_mixamorig:Neck_Yawn_1","type":"VEC4"},{"bufferView":183,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999996423721313,0.9999996423721313,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightLeg_Idle_2","type":"VEC3"},{"bufferView":701,"byteOffset":0,"componentType":5126,"count":251,"max":[0.17223387956619263,0.011169478297233582,0.04506560415029526,0.9998048543930054],"min":[-0.19014349579811096,-0.0024950967635959387,-0.009645001962780952,0.9817057847976685],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Yawn_1","type":"VEC4"},{"bufferView":475,"byteOffset":0,"componentType":5126,"count":30,"max":[0.4395799934864044,0,0.33548006415367126,0.9115597009658813],"min":[0.39102065563201904,-0.10377006977796555,-0.08593812584877014,0.8435415625572205],"name":"accessor_buffer_mixamorig:RightArm_Walking_1","type":"VEC4"},{"bufferView":765,"byteOffset":0,"componentType":5126,"count":251,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_Yawn_2","type":"VEC3"},{"bufferView":24,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftFoot_Idle_2","type":"VEC3"},{"bufferView":579,"byteOffset":0,"componentType":5126,"count":30,"max":[9.238719940185547e-7,45.05036926269531,0.000005443580448627472],"min":[-6.603077054023743e-7,45.05034255981445,-0.0000066943466663360596],"name":"accessor_buffer_mixamorig:RightLeg_Walking_0","type":"VEC3"},{"bufferView":144,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:Spine2_Idle_2","type":"VEC3"},{"bufferView":683,"byteOffset":0,"componentType":5126,"count":251,"max":[0.24000465869903564,0,0,0.9986445903778076],"min":[0.04668762907385826,-0.005174525547772646,-0.0569353811442852,0.9690868854522705],"name":"accessor_buffer_mixamorig:LeftHandRing3_Yawn_1","type":"VEC4"},{"bufferView":210,"byteOffset":0,"componentType":5126,"count":2,"max":[0.019991455599665642,0,0.05151980370283127,0.9982961416244507],"min":[0.019991455599665642,-0.018730632960796356,0.05151980370283127,0.9982961416244507],"name":"accessor_buffer_mixamorig:RightHand_TPose_1","type":"VEC4"},{"bufferView":383,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1517670154571533,0],"min":[-0.018159687519073486,2.1517670154571533,-0.0000034263357520103455],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_0","type":"VEC3"},{"bufferView":36,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998807907104,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandRing4_Idle_2","type":"VEC3"},{"bufferView":638,"byteOffset":0,"componentType":5126,"count":251,"max":[7.729977369308472e-8,2.0489098417897367e-8,3.725290298461914e-8,1],"min":[2.2351738238057806e-8,-2.8871003365793513e-8,-3.620516508817673e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Yawn_1","type":"VEC4"},{"bufferView":338,"byteOffset":0,"componentType":5126,"count":2,"max":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"min":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_0","type":"VEC3"},{"bufferView":285,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.007251414470374584,0.999973714351654],"min":[-0.000005368752681533806,-0.00042654300341382623,0.007251414470374584,0.999973714351654],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_1","type":"VEC4"},{"bufferView":200,"byteOffset":0,"componentType":5126,"count":501,"max":[0.12322575598955154,0.1867716759443283,0.05322803556919098,0.990211009979248],"min":[0.04314654693007469,0.12217019498348236,0.010650157928466797,0.9752040505409241],"name":"accessor_buffer_mixamorig:LeftHand_Idle_1","type":"VEC4"},{"bufferView":129,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997019767761,0.9999996423721313,0.9999996423721313],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Idle_2","type":"VEC3"},{"bufferView":172,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.5352120399475098,0.0000069141387939453125],"min":[-0.1829090118408203,1.5351808071136475,-0.00000667572021484375],"name":"accessor_buffer_mixamorig:RightHandThumb4_Idle_0","type":"VEC3"},{"bufferView":155,"byteOffset":0,"componentType":5126,"count":501,"max":[0.07173003256320953,0.010370110161602497,0.03610963001847267,0.9996916651725769],"min":[-0.012426615692675114,0.006362239830195904,0.022153940051794052,0.996716320514679],"name":"accessor_buffer_mixamorig:RightHandIndex3_Idle_1","type":"VEC4"},{"bufferView":650,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0,0.13251253962516785],"min":[-0.13483065366744995,-0.1585140824317932,-0.9827479720115662,0.046919748187065125],"name":"accessor_buffer_mixamorig:LeftUpLeg_Yawn_1","type":"VEC4"},{"bufferView":567,"byteOffset":0,"componentType":5126,"count":30,"max":[0.000006198883056640625,22.7723445892334,0.000005476176738739014],"min":[-0.0000032186508178710938,22.772321701049805,-0.000010371208190917969],"name":"accessor_buffer_mixamorig:LeftForeArm_Walking_0","type":"VEC3"},{"bufferView":19,"byteOffset":0,"componentType":5126,"count":501,"max":[0,8.988447189331055,0],"min":[-3.5135245323181152,8.988401412963867,-0.11455890536308289],"name":"accessor_buffer_mixamorig:RightShoulder_Idle_0","type":"VEC3"},{"bufferView":578,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998807907104,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Walking_2","type":"VEC3"},{"bufferView":176,"byteOffset":0,"componentType":5126,"count":501,"max":[0.27635306119918823,0,0,0.9769632816314697],"min":[0.1943865418434143,-0.018186990171670914,-0.11150404065847397,0.9543925523757935],"name":"accessor_buffer_mixamorig:LeftHandRing1_Idle_1","type":"VEC4"},{"bufferView":305,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.854499816894531,0],"min":[-4.3809234018254983e-11,6.854499816894531,-0.5485977530479431],"name":"accessor_buffer_mixamorig:Spine_TPose_0","type":"VEC3"},{"bufferView":201,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHand_Idle_2","type":"VEC3"},{"bufferView":533,"byteOffset":0,"componentType":5126,"count":30,"max":[1.000000238418579,0.9999999403953552,1.0000001192092896],"min":[1,0.9999996423721313,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandRing4_Walking_2","type":"VEC3"},{"bufferView":243,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.464207682351116e-7,-8.914983595786907e-8,-1.517519194749184e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_1","type":"VEC4"},{"bufferView":353,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015063196420669556,2.0928525924682617,0],"min":[0.015063196420669556,2.0928525924682617,-0.00001477246405556798],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_0","type":"VEC3"},{"bufferView":73,"byteOffset":0,"componentType":5126,"count":501,"max":[0,6.091213226318359,0.0932474136352539],"min":[-2.381855010986328,6.091182231903076,0.0932321548461914],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Idle_0","type":"VEC3"},{"bufferView":663,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999998807907104,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandThumb3_Yawn_2","type":"VEC3"},{"bufferView":570,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.535202980041504,0.00001430511474609375],"min":[-0.18291163444519043,1.5351879596710205,-0.0000040531158447265625],"name":"accessor_buffer_mixamorig:RightHandThumb4_Walking_0","type":"VEC3"},{"bufferView":257,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0025572776794434,0],"min":[-0.009857624769210815,2.0025572776794434,-0.000008842733222991228],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_0","type":"VEC3"},{"bufferView":691,"byteOffset":0,"componentType":5126,"count":251,"max":[0.00001239776611328125,22.770919799804688,0.000019550323486328125],"min":[-0.000012159347534179688,22.770877838134766,-0.00001621246337890625],"name":"accessor_buffer_mixamorig:RightForeArm_Yawn_0","type":"VEC3"},{"bufferView":499,"byteOffset":0,"componentType":5126,"count":30,"max":[0.28691938519477844,0.02217779867351055,0.06498178839683533,0.9621247053146362],"min":[0.26505526900291443,0.020909439772367477,0.0602051205933094,0.9554908871650696],"name":"accessor_buffer_mixamorig:RightHandPinky3_Walking_1","type":"VEC4"},{"bufferView":239,"byteOffset":0,"componentType":5126,"count":2,"max":[0.012762725353240967,1.3817871809005737,0],"min":[0.012762725353240967,1.3817871809005737,-0.000005348862032406032],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_0","type":"VEC3"},{"bufferView":542,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:Spine2_Walking_2","type":"VEC3"},{"bufferView":381,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0003684632829390466,0,0.9994756579399109],"min":[-0.029726667329669,0.0003684632829390466,-0.012829470448195934,0.9994756579399109],"name":"accessor_buffer_mixamorig:RightLeg_TPose_1","type":"VEC4"},{"bufferView":13,"byteOffset":0,"componentType":5126,"count":501,"max":[0.000002205371856689453,4.308732509613037,0.11991506814956665],"min":[-0.0000016689300537109375,4.3086652755737305,0.11990783363580704],"name":"accessor_buffer_mixamorig:Head_Idle_0","type":"VEC3"},{"bufferView":449,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000003576278687],"min":[0.9999998807907104,1,1],"name":"accessor_buffer_mixamorig:LeftToe_End_Walking_2","type":"VEC3"},{"bufferView":216,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005565229366766289,0,0.9994112253189087],"min":[-1.9569284859244362e-7,0.00005565229366766289,-0.034311242401599884,0.9994112253189087],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_1","type":"VEC4"},{"bufferView":400,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999998807907104],"min":[1,1.0000001192092896,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHand_TPose_2","type":"VEC3"},{"bufferView":140,"byteOffset":0,"componentType":5126,"count":501,"max":[0.09014429152011871,0,0.02025716006755829,0.9980320334434509],"min":[0.060823455452919006,-0.00028050708351656795,0.015248601324856281,0.9957227110862732],"name":"accessor_buffer_mixamorig:RightHandIndex2_Idle_1","type":"VEC4"},{"bufferView":788,"byteOffset":0,"componentType":5126,"count":251,"max":[0.6572937369346619,0,0,0.9911558628082275],"min":[0.12948985397815704,-0.003881856333464384,-0.14215269684791565,0.7400963306427002],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Yawn_1","type":"VEC4"},{"bufferView":471,"byteOffset":0,"componentType":5126,"count":30,"max":[0,6.091205596923828,0.09325003623962402],"min":[-2.381855010986328,6.091188907623291,0.09322643280029297],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Walking_0","type":"VEC3"},{"bufferView":339,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999953508377075],"min":[-0.0000019045912722504,-0.0002899357641581446,-0.0030352880712598562,0.9999953508377075],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_1","type":"VEC4"},{"bufferView":688,"byteOffset":0,"componentType":5126,"count":251,"max":[0,2.2825024127960205,0.0000074356794357299805],"min":[-0.018581271171569824,2.2824742794036865,-0.00003731250762939453],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Yawn_0","type":"VEC3"},{"bufferView":430,"byteOffset":0,"componentType":5126,"count":30,"max":[0.01448402926325798,0.006024296395480633,0,0.9998802542686462],"min":[-0.008535980246961117,-0.011333505623042583,-0.030329447239637375,0.9995340704917908],"name":"accessor_buffer_mixamorig:Neck_Walking_1","type":"VEC4"},{"bufferView":391,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998807907104,0.9999999403953552],"min":[1,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_2","type":"VEC3"},{"bufferView":372,"byteOffset":0,"componentType":5126,"count":2,"max":[3.725291364276018e-8,0,3.259629011154175e-8,1],"min":[3.725291364276018e-8,-5.58793766813892e-9,3.259629011154175e-8,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_1","type":"VEC4"},{"bufferView":158,"byteOffset":0,"componentType":5126,"count":501,"max":[0.08359970152378082,0.10933090001344681,0.05882913991808891,0.9923466444015503],"min":[0.03577506169676781,0.10840625315904617,0.04500821605324745,0.988835871219635],"name":"accessor_buffer_mixamorig:RightHandRing3_Idle_1","type":"VEC4"},{"bufferView":470,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Walking_2","type":"VEC3"},{"bufferView":698,"byteOffset":0,"componentType":5126,"count":251,"max":[0.26399752497673035,0.02084808424115181,0.05997397378087044,0.9999838471412659],"min":[-0.27136582136154175,-0.011080027557909489,-0.057347945868968964,0.9607023596763611],"name":"accessor_buffer_mixamorig:RightHandPinky3_Yawn_1","type":"VEC4"},{"bufferView":651,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000117301940918,1.0000107288360596,1.0000113248825073],"min":[1.0001041889190674,1.0000027418136597,1.0000051259994507],"name":"accessor_buffer_mixamorig:LeftUpLeg_Yawn_2","type":"VEC3"},{"bufferView":57,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997019767761,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Idle_2","type":"VEC3"},{"bufferView":735,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999995827674866,0.9999996423721313],"name":"accessor_buffer_mixamorig:RightHandThumb2_Yawn_2","type":"VEC3"},{"bufferView":44,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0,0,1],"min":[-2.7194613494430087e-7,-1.2107190627830278e-7,-1.7136335372924805e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_Idle_1","type":"VEC4"},{"bufferView":374,"byteOffset":0,"componentType":5126,"count":2,"max":[0.8905045986175537,5.982408046722412,0],"min":[0.8905045986175537,5.982408046722412,-0.24305573105812073],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_0","type":"VEC3"},{"bufferView":460,"byteOffset":0,"componentType":5126,"count":30,"max":[0.12065981328487396,0.0003798922407440841,0,0.9933441281318665],"min":[0.1115017756819725,0.00035250571090728045,-0.030522560700774193,0.9922245144844055],"name":"accessor_buffer_mixamorig:LeftHandRing2_Walking_1","type":"VEC4"},{"bufferView":246,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.80437906032391e-23,0,1],"min":[-8.673616862896153e-19,6.80437906032391e-23,-1.8189894035458565e-12,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_1","type":"VEC4"},{"bufferView":402,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000019077392607869115,0,0.006663992069661617,0.9999777674674988],"min":[0.0000019077392607869115,-0.00024382353876717389,0.006663992069661617,0.9999777674674988],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_1","type":"VEC4"},{"bufferView":130,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000019371509552001953,8.022503852844238,0.00000527501106262207],"min":[-0.0000017881393432617188,8.022464752197266,-0.0000056140124797821045],"name":"accessor_buffer_mixamorig:Spine1_Idle_0","type":"VEC3"},{"bufferView":625,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.4579181671142578,0.00004100799560546875],"min":[-0.014514923095703125,1.4578819274902344,-0.000019788742065429688],"name":"accessor_buffer_mixamorig:RightHandPinky4_Yawn_0","type":"VEC3"},{"bufferView":244,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_2","type":"VEC3"},{"bufferView":274,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,0.9999999403953552],"min":[1.0000001192092896,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_2","type":"VEC3"},{"bufferView":607,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000133514404296875,19.02716827392578,0.000014781951904296875],"min":[-0.000014781951904296875,19.02712059020996,-0.00001800060272216797],"name":"accessor_buffer_mixamorig:RightHand_Yawn_0","type":"VEC3"},{"bufferView":52,"byteOffset":0,"componentType":5126,"count":501,"max":[6.509203910827637,0,0],"min":[6.509197235107422,-3.808927536010742,-0.31935685873031616],"name":"accessor_buffer_mixamorig:LeftUpLeg_Idle_0","type":"VEC3"},{"bufferView":204,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.0000001192092896],"min":[0.9999997019767761,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Idle_2","type":"VEC3"},{"bufferView":496,"byteOffset":0,"componentType":5126,"count":30,"max":[6.798653373607522e-8,0,0,1],"min":[2.8405336749415255e-8,-1.9883732704784052e-7,-1.0407528350242501e-7,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Walking_1","type":"VEC4"},{"bufferView":568,"byteOffset":0,"componentType":5126,"count":30,"max":[0.04008694738149643,0.004120196681469679,0.5689954161643982,0.9706199169158936],"min":[0.012065121904015541,0.0014987472677603364,0.24031054973602295,0.8213527202606201],"name":"accessor_buffer_mixamorig:LeftForeArm_Walking_1","type":"VEC4"},{"bufferView":344,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.089044570922852,1.7881393432617188e-7],"min":[-4.116445779800415e-7,12.089044570922852,1.7881393432617188e-7],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_0","type":"VEC3"},{"bufferView":0,"byteOffset":24,"componentType":5126,"count":3340,"max":[0.9826270341873169,0.9952785298228264],"min":[0.004950257949531078,0.007562220096588135],"name":"accessor_buffer_F010_Saber.003_2","type":"VEC2"},{"bufferView":753,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999997019767761,0.9999997615814209,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandIndex3_Yawn_2","type":"VEC3"},{"bufferView":756,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandRing3_Yawn_2","type":"VEC3"},{"bufferView":220,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_2","type":"VEC3"},{"bufferView":35,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0,0,1],"min":[-1.6950073700172652e-7,-1.7136338215095748e-7,-1.709413481876254e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_Idle_1","type":"VEC4"},{"bufferView":127,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.8726636171340942,1.342259407043457],"min":[-1.3880643844604492,1.8726303577423096,1.3422412872314453],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Idle_0","type":"VEC3"},{"bufferView":103,"byteOffset":0,"componentType":5126,"count":501,"max":[0.011223793029785156,2.20082950592041,0.000025272369384765625],"min":[0.011213302612304688,2.200793743133545,0.000014781951904296875],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Idle_0","type":"VEC3"},{"bufferView":635,"byteOffset":0,"componentType":5126,"count":251,"max":[0.51567542552948,0.004747312981635332,0.1165333017706871,0.9999711513519287],"min":[-0.01976255513727665,-0.000014837012713542208,-0.0011251388350501657,0.848808765411377],"name":"accessor_buffer_mixamorig:RightHandPinky2_Yawn_1","type":"VEC4"},{"bufferView":209,"byteOffset":0,"componentType":5126,"count":2,"max":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"min":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"name":"accessor_buffer_mixamorig:RightHand_TPose_0","type":"VEC3"},{"bufferView":695,"byteOffset":0,"componentType":5126,"count":251,"max":[7.450580596923828e-8,0,0,1],"min":[1.816079020500183e-8,-2.225860384896805e-7,-1.0058283805847168e-7,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Yawn_1","type":"VEC4"},{"bufferView":500,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.000000238418579,1.000000238418579],"min":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandPinky3_Walking_2","type":"VEC3"},{"bufferView":147,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.0000003576278687],"min":[0.9999997019767761,0.9999997019767761,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftToeBase_Idle_2","type":"VEC3"},{"bufferView":729,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:Spine1_Yawn_2","type":"VEC3"},{"bufferView":653,"byteOffset":0,"componentType":5126,"count":251,"max":[0.6804887652397156,0,0,0.9311265349388123],"min":[0.21801918745040894,-0.13387252390384674,-0.35228684544563293,0.6335200667381287],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Yawn_1","type":"VEC4"},{"bufferView":530,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:Spine1_Walking_2","type":"VEC3"},{"bufferView":589,"byteOffset":0,"componentType":5126,"count":30,"max":[0.2389420121908188,0,0,0.9709298610687256],"min":[0.2337753027677536,-0.001450617564842105,-0.0525122806429863,0.9696118235588074],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Walking_1","type":"VEC4"},{"bufferView":731,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0,1],"min":[-1.154840063577467e-7,-9.31322503561205e-8,-9.872020712009544e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_Yawn_1","type":"VEC4"},{"bufferView":561,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0000019669532775878906,45.04970169067383,0.000004372559487819672],"min":[-0.000002473592758178711,45.049678802490234,-0.00000718235969543457],"name":"accessor_buffer_mixamorig:LeftLeg_Walking_0","type":"VEC3"},{"bufferView":376,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1.0000001192092896],"min":[1,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_2","type":"VEC3"},{"bufferView":405,"byteOffset":0,"componentType":5126,"count":30,"max":[0.025699138641357422,2.3235576152801514,0.000013828277587890625],"min":[0.025686264038085938,2.3235349655151367,9.5367431640625e-7],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Walking_0","type":"VEC3"},{"bufferView":188,"byteOffset":0,"componentType":5126,"count":501,"max":[0.2637979984283447,0,0,0.9921198487281799],"min":[0.12307315319776535,-0.0016307852929458022,-0.04800768196582794,0.9633812308311462],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Idle_1","type":"VEC4"},{"bufferView":556,"byteOffset":0,"componentType":5126,"count":30,"max":[0.05690119042992592,0.00566576374694705,0.01428120769560337,0.9986143112182617],"min":[0.05064700171351433,0.00541321188211441,0.01323179341852665,0.9982616305351257],"name":"accessor_buffer_mixamorig:RightHandRing3_Walking_1","type":"VEC4"},{"bufferView":506,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999998211860657,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:Spine_Walking_2","type":"VEC3"},{"bufferView":236,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009776592254638672,1.9066510200500488,0],"min":[0.009776592254638672,1.9066510200500488,-0.000011112497304566205],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_0","type":"VEC3"},{"bufferView":267,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.010770494118332863,0,0.9985118508338928],"min":[-0.020383575931191444,0.010770494118332863,-0.049423426389694214,0.9985118508338928],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_1","type":"VEC4"},{"bufferView":354,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0011933766072615981,0,0.9998803734779358],"min":[-0.000009156999112747144,0.0011933766072615981,-0.015421011485159397,0.9998803734779358],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_1","type":"VEC4"},{"bufferView":256,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_2","type":"VEC3"},{"bufferView":98,"byteOffset":0,"componentType":5126,"count":501,"max":[7.776543498039246e-8,0,0,1],"min":[2.1420417439799166e-8,-2.3469324617053644e-7,-1.0058282384761696e-7,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Idle_1","type":"VEC4"},{"bufferView":654,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Yawn_2","type":"VEC3"},{"bufferView":89,"byteOffset":0,"componentType":5126,"count":501,"max":[0,8.568169107547874e-8,3.539026494081554e-8,1],"min":[-7.636845111846924e-8,1.6763808119435453e-8,-2.2351745343485163e-8,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Idle_1","type":"VEC4"},{"bufferView":49,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000012367963790893555,4.706446647644043,4.6193599700927734e-7],"min":[-0.0000011175870895385742,4.706441402435303,-4.76837158203125e-7],"name":"accessor_buffer_mixamorig:LeftToe_End_Idle_0","type":"VEC3"},{"bufferView":225,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.009517651982605457,0.9999545812606812],"min":[-0.000002889829829655355,-0.00046613236190751195,0.009517651982605457,0.9999545812606812],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":366,"byteOffset":0,"componentType":5126,"count":2,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_TPose_1","type":"VEC4"},{"bufferView":230,"byteOffset":0,"componentType":5126,"count":2,"max":[0,10.314631462097168,2.384185791015625e-7],"min":[-1.632623376768283e-11,10.314631462097168,2.384185791015625e-7],"name":"accessor_buffer_mixamorig:Neck_TPose_0","type":"VEC3"},{"bufferView":465,"byteOffset":0,"componentType":5126,"count":30,"max":[0,5.778022289276123,0],"min":[-0.8288040161132812,5.7780046463012695,-0.20811033248901367],"name":"accessor_buffer_mixamorig:RightHandRing1_Walking_0","type":"VEC3"},{"bufferView":754,"byteOffset":0,"componentType":5126,"count":251,"max":[0.016342997550964355,2.0912041664123535,0.0000247955322265625],"min":[0.016312122344970703,2.091160535812378,-0.00002014636993408203],"name":"accessor_buffer_mixamorig:RightHandRing3_Yawn_0","type":"VEC3"},{"bufferView":278,"byteOffset":0,"componentType":5126,"count":2,"max":[1.4313478469848633,1.948877215385437,1.3737415075302124],"min":[1.4313478469848633,1.948877215385437,1.3737415075302124],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_0","type":"VEC3"},{"bufferView":802,"byteOffset":0,"componentType":5126,"count":52,"max":[1.0011157989501953,1.0004726648330688,0.37282806634902954,0,0.17913757264614105,1.0011159181594849,0.9939067363739014,0,0.9973942041397095,0.997998058795929,1.0011157989501953,0,36.08419418334961,95.18425750732422,139.18643188476562,1],"min":[-1.0009628534317017,-1.000463843345642,-0.3957003951072693,0,-0.16209860146045685,-1.0005624294281006,-0.9972899556159973,0,-0.9975388050079346,-0.3510676324367523,-0.18741650879383087,0,-40.01988983154297,-137.4109344482422,-8.502774238586426,1],"name":"accessor_buffer_IBM_F010_Saber_Body_skin_0","type":"MAT4"},{"bufferView":563,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftLeg_Walking_2","type":"VEC3"},{"bufferView":421,"byteOffset":0,"componentType":5126,"count":30,"max":[0.6072536110877991,0.1764809489250183,0.005088530946522951,0.9173010587692261],"min":[0.3609119951725006,0.009429778903722763,-0.17017100751399994,0.7740885615348816],"name":"accessor_buffer_mixamorig:LeftFoot_Walking_1","type":"VEC4"},{"bufferView":712,"byteOffset":0,"componentType":5126,"count":251,"max":[0,5.181265830993652,0],"min":[-2.0758442878723145,5.1812238693237305,-0.1567068099975586],"name":"accessor_buffer_mixamorig:RightHandPinky1_Yawn_0","type":"VEC3"},{"bufferView":58,"byteOffset":0,"componentType":5126,"count":501,"max":[0,2.002579689025879,0.0000030994415283203125],"min":[-0.009863853454589844,2.002546787261963,-0.000008791685104370117],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Idle_0","type":"VEC3"},{"bufferView":732,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1,1.0000001192092896],"min":[1,0.9999996423721313,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandRing4_Yawn_2","type":"VEC3"},{"bufferView":265,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.000000238418579,1],"min":[0.9999999403953552,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_2","type":"VEC3"},{"bufferView":566,"byteOffset":0,"componentType":5126,"count":30,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_Walking_2","type":"VEC3"},{"bufferView":34,"byteOffset":0,"componentType":5126,"count":501,"max":[0.02194690704345703,1.761939525604248,0.0000133514404296875],"min":[0.021935462951660156,1.7619061470031738,-0.000009059906005859375],"name":"accessor_buffer_mixamorig:LeftHandRing4_Idle_0","type":"VEC3"},{"bufferView":32,"byteOffset":0,"componentType":5126,"count":501,"max":[0.09165339916944504,0.010146459564566612,0.04512402415275574,0.9979455471038818],"min":[0.06395327299833298,0.000042263418436050415,-0.02588547021150589,0.9948304891586304],"name":"accessor_buffer_mixamorig:Neck_Idle_1","type":"VEC4"},{"bufferView":393,"byteOffset":0,"componentType":5126,"count":2,"max":[0.29314252734184265,0.06225592643022537,0,0.9538480043411255],"min":[0.29314252734184265,0.06225592643022537,-0.019128000363707542,0.9538480043411255],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_1","type":"VEC4"},{"bufferView":386,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"min":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_0","type":"VEC3"},{"bufferView":247,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_2","type":"VEC3"},{"bufferView":656,"byteOffset":0,"componentType":5126,"count":251,"max":[0.37346184253692627,0,0,0.9999242424964905],"min":[-0.03445363789796829,-0.005747898947447538,-0.06894735991954803,0.9250620007514954],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Yawn_1","type":"VEC4"},{"bufferView":408,"byteOffset":0,"componentType":5126,"count":30,"max":[0.00000762939453125,19.027156829833984,0.00000762939453125],"min":[-0.000011920928955078125,19.027124404907227,-0.000006467103958129883],"name":"accessor_buffer_mixamorig:RightHand_Walking_0","type":"VEC3"},{"bufferView":349,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_2","type":"VEC3"},{"bufferView":490,"byteOffset":0,"componentType":5126,"count":30,"max":[0.21829265356063843,0,0,0.975964367389679],"min":[0.21367475390434265,-0.001443531597033143,-0.043541159480810165,0.9749104976654053],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Walking_1","type":"VEC4"},{"bufferView":4,"byteOffset":0,"componentType":5123,"count":5004,"max":[1175],"min":[0],"name":"accessor_buffer_F010_Saber.001_4","type":"SCALAR"},{"bufferView":191,"byteOffset":0,"componentType":5126,"count":501,"max":[0.2142990231513977,0.008710382506251335,0.007254559081047773,0.9938622713088989],"min":[0.11028195917606354,0.0048032901249825954,-0.017979728057980537,0.9765638113021851],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Idle_1","type":"VEC4"},{"bufferView":516,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0000021457672119140625,7.483728885650635,0.000013113021850585938],"min":[-0.0000040531158447265625,7.483709812164307,-0.000010369811207056046],"name":"accessor_buffer_mixamorig:LeftArm_Walking_0","type":"VEC3"},{"bufferView":371,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5351991653442383,0.000011235475540161133],"min":[-0.18289971351623535,1.5351991653442383,0.000011235475540161133],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_0","type":"VEC3"},{"bufferView":668,"byteOffset":0,"componentType":5126,"count":251,"max":[0.48500657081604004,0.008128128945827484,0.0038101968821138144,0.998948335647583],"min":[-0.05940983444452286,-0.04093785956501961,-0.11457008123397827,0.8670104146003723],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Yawn_1","type":"VEC4"},{"bufferView":517,"byteOffset":0,"componentType":5126,"count":30,"max":[0.46000736951828003,0.03152599558234215,0,0.9418922662734985],"min":[0.3217529058456421,-0.06592879444360733,-0.34377336502075195,0.8436853885650635],"name":"accessor_buffer_mixamorig:LeftArm_Walking_1","type":"VEC4"},{"bufferView":717,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000003576278687,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftArm_Yawn_2","type":"VEC3"},{"bufferView":495,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.8846125602722168,0.0000133514404296875],"min":[-0.05978895723819733,1.8845915794372559,-0.000009059906005859375],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Walking_0","type":"VEC3"},{"bufferView":143,"byteOffset":0,"componentType":5126,"count":501,"max":[0.05057234317064285,0,0.004319834988564253,0.9999864101409912],"min":[-0.018635576590895653,-0.008218026719987392,-0.032305195927619934,0.9982173442840576],"name":"accessor_buffer_mixamorig:Spine2_Idle_1","type":"VEC4"},{"bufferView":531,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.9166507720947266,0.0000046193599700927734],"min":[-0.024976253509521484,1.9166388511657715,-0.0000133514404296875],"name":"accessor_buffer_mixamorig:RightHandRing4_Walking_0","type":"VEC3"},{"bufferView":43,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.9040881395339966,0],"min":[-0.044965267181396484,1.904050588607788,-0.000013589859008789062],"name":"accessor_buffer_mixamorig:RightHandIndex4_Idle_0","type":"VEC3"},{"bufferView":203,"byteOffset":0,"componentType":5126,"count":501,"max":[0.16205744445323944,0,0,0.9997683167457581],"min":[-0.004742264747619629,-0.007937208749353886,-0.05945529788732529,0.9849565625190735],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Idle_1","type":"VEC4"},{"bufferView":580,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0,0.9849482178688049],"min":[-0.5430340766906738,-0.09268946945667267,-0.06335114687681198,0.8363834023475647],"name":"accessor_buffer_mixamorig:RightLeg_Walking_1","type":"VEC4"},{"bufferView":429,"byteOffset":0,"componentType":5126,"count":30,"max":[6.034970283508301e-7,10.314647674560547,0.0000019222497940063477],"min":[-5.662441253662109e-7,10.314611434936523,-4.6193599700927734e-7],"name":"accessor_buffer_mixamorig:Neck_Walking_0","type":"VEC3"},{"bufferView":733,"byteOffset":0,"componentType":5126,"count":251,"max":[0.09871673583984375,2.22261381149292,0.00004482269287109375],"min":[0.09868061542510986,2.2225799560546875,-0.0000035762786865234375],"name":"accessor_buffer_mixamorig:RightHandThumb2_Yawn_0","type":"VEC3"},{"bufferView":390,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00004930837167194113,0,1],"min":[-0.0000036987858038628474,0.00004930837167194113,-0.000254306651186198,1],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_1","type":"VEC4"},{"bufferView":287,"byteOffset":0,"componentType":5126,"count":2,"max":[0.029511988162994385,2.085664749145508,0],"min":[0.029511988162994385,2.085664749145508,-0.000003653607564046979],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":128,"byteOffset":0,"componentType":5126,"count":501,"max":[0.14051729440689087,0.08032988756895065,0.2169266641139984,0.9733685255050659],"min":[0.12550561130046844,0.06769057363271713,0.17218570411205292,0.9657147526741028],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Idle_1","type":"VEC4"},{"bufferView":558,"byteOffset":0,"componentType":5126,"count":30,"max":[3.725290298461914e-7,41.85009765625,0.000007987022399902344],"min":[-6.556510925292969e-7,41.8500862121582,-0.000004306435585021973],"name":"accessor_buffer_mixamorig:RightFoot_Walking_0","type":"VEC3"},{"bufferView":75,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Idle_2","type":"VEC3"},{"bufferView":166,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_Idle_0","type":"VEC3"},{"bufferView":29,"byteOffset":0,"componentType":5126,"count":501,"max":[2.0209699869155884e-7,0,7.078051567077637e-8,1],"min":[1.2665985593685036e-7,-1.0244549031313e-7,3.7252894102834944e-9,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_Idle_1","type":"VEC4"},{"bufferView":748,"byteOffset":0,"componentType":5126,"count":251,"max":[4.262583255767822,96.787109375,4.215145587921143],"min":[-4.329502105712891,96.01811981201172,-2.1532444953918457],"name":"accessor_buffer_mixamorig:Hips_Yawn_0","type":"VEC3"},{"bufferView":529,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0288302693516016,0.025401953607797623,0.010065724141895771,0.9999460577964783],"min":[0.009143766015768051,-0.04278125241398811,-0.017392504960298538,0.9987657070159912],"name":"accessor_buffer_mixamorig:Spine1_Walking_1","type":"VEC4"},{"bufferView":399,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015112828463315964,0.01513464655727148,0,0.9984008073806763],"min":[0.015112828463315964,0.01513464655727148,-0.052329666912555695,0.9984008073806763],"name":"accessor_buffer_mixamorig:LeftHand_TPose_1","type":"VEC4"},{"bufferView":289,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"min":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":319,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,1],"min":[0.9999998807907104,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftArm_TPose_2","type":"VEC3"},{"bufferView":728,"byteOffset":0,"componentType":5126,"count":251,"max":[0.017484569922089577,0.029962653294205666,0.05493021011352539,0.9989464282989502],"min":[-0.012993323616683483,-0.017851606011390686,0.045321494340896606,0.9982398748397827],"name":"accessor_buffer_mixamorig:Spine1_Yawn_1","type":"VEC4"},{"bufferView":106,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000030547380447387695,6.854518413543701,0],"min":[-0.000003296881914138794,6.854475975036621,-0.5486005544662476],"name":"accessor_buffer_mixamorig:Spine_Idle_0","type":"VEC3"},{"bufferView":489,"byteOffset":0,"componentType":5126,"count":30,"max":[0,2.2824974060058594,0],"min":[-0.018560409545898438,2.2824764251708984,-0.00002956390380859375],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Walking_0","type":"VEC3"},{"bufferView":427,"byteOffset":0,"componentType":5126,"count":30,"max":[1.8812713165061723e-7,0,7.078050856534901e-8,1],"min":[1.4901161193847656e-7,-7.82310962677002e-8,2.0489098417897367e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_Walking_1","type":"VEC4"},{"bufferView":213,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,5.4569682106375694e-12,1],"min":[-3.749335064640036e-9,-6.563448747235262e-21,5.4569682106375694e-12,1],"name":"accessor_buffer_mixamorig:Head_TPose_1","type":"VEC4"},{"bufferView":441,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.904078722000122,0],"min":[-0.044965505599975586,1.9040560722351074,-0.0000133514404296875],"name":"accessor_buffer_mixamorig:RightHandIndex4_Walking_0","type":"VEC3"},{"bufferView":619,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000032186508178710938,41.849334716796875,0.000002294778823852539],"min":[-0.0000026226043701171875,41.84931945800781,-0.0000027418136596679688],"name":"accessor_buffer_mixamorig:LeftFoot_Yawn_0","type":"VEC3"},{"bufferView":327,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"min":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_1","type":"VEC4"},{"bufferView":758,"byteOffset":0,"componentType":5126,"count":251,"max":[0.5759493708610535,0.05841023847460747,0.032488077878952026,0.8249241709709167],"min":[0.552259087562561,-0.18465866148471832,-0.07742717862129211,0.8085960745811462],"name":"accessor_buffer_mixamorig:RightFoot_Yawn_1","type":"VEC4"},{"bufferView":363,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.012829817831516266,0.9995352625846863],"min":[-0.02764846757054329,-0.000389853521483019,0.012829817831516266,0.9995352625846863],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_1","type":"VEC4"},{"bufferView":591,"byteOffset":0,"componentType":5126,"count":30,"max":[2.384185791015625e-7,12.033417701721191,0.000007569789886474609],"min":[-0.0000010728836059570312,12.03341007232666,-0.000003516674041748047],"name":"accessor_buffer_mixamorig:RightToeBase_Walking_0","type":"VEC3"},{"bufferView":659,"byteOffset":0,"componentType":5126,"count":251,"max":[0.5244287252426147,0.0015821133274585009,0,0.9976391196250916],"min":[0.06548312306404114,0.0002152573870262131,-0.1015104129910469,0.8453801870346069],"name":"accessor_buffer_mixamorig:LeftHandRing2_Yawn_1","type":"VEC4"},{"bufferView":53,"byteOffset":0,"componentType":5126,"count":501,"max":[0.05344519019126892,0.07039212435483932,0.9978359937667847,0.11501389741897583],"min":[-0.05957644060254097,-0.10063694417476654,-0.9973471760749817,-0.008116190321743488],"name":"accessor_buffer_mixamorig:LeftUpLeg_Idle_1","type":"VEC4"},{"bufferView":639,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Yawn_2","type":"VEC3"},{"bufferView":21,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000003576278687,1.0000003576278687,1.000000238418579],"min":[0.9999998211860657,0.9999998807907104,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightShoulder_Idle_2","type":"VEC3"},{"bufferView":31,"byteOffset":0,"componentType":5126,"count":501,"max":[0.000004291534423828125,10.314652442932129,0.000004123547114431858],"min":[-0.0000034570693969726562,10.314606666564941,-0.000003509223461151123],"name":"accessor_buffer_mixamorig:Neck_Idle_0","type":"VEC3"},{"bufferView":123,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0001195669174194,1.0000052452087402,1.0000113248825073],"min":[1.0001120567321777,0.9999999403953552,1.0000083446502686],"name":"accessor_buffer_mixamorig:RightUpLeg_Idle_2","type":"VEC3"},{"bufferView":540,"byteOffset":0,"componentType":5126,"count":30,"max":[5.587935447692871e-7,9.16856861114502,8.419156074523926e-7],"min":[-9.611248970031738e-7,9.16854190826416,-3.948807716369629e-7],"name":"accessor_buffer_mixamorig:Spine2_Walking_0","type":"VEC3"},{"bufferView":248,"byteOffset":0,"componentType":5126,"count":2,"max":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"min":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_0","type":"VEC3"},{"bufferView":245,"byteOffset":0,"componentType":5126,"count":2,"max":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"min":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_0","type":"VEC3"},{"bufferView":626,"byteOffset":0,"componentType":5126,"count":251,"max":[2.0174775272607803e-7,0,6.705522537231445e-8,1],"min":[1.3620592653751373e-7,-9.965152969471092e-8,1.1175870895385742e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_Yawn_1","type":"VEC4"},{"bufferView":30,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000003576278687,1.0000001192092896],"min":[0.9999998211860657,1,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandPinky4_Idle_2","type":"VEC3"},{"bufferView":217,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,1,0.9999998807907104],"min":[0.9999997615814209,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_2","type":"VEC3"},{"bufferView":766,"byteOffset":0,"componentType":5126,"count":251,"max":[0.000022351741790771484,22.772350311279297,0.000017642974853515625],"min":[-0.000025272369384765625,22.772321701049805,-0.000017642974853515625],"name":"accessor_buffer_mixamorig:LeftForeArm_Yawn_0","type":"VEC3"},{"bufferView":38,"byteOffset":0,"componentType":5126,"count":501,"max":[0.15171436965465546,0.00039636032306589186,0.042124077677726746,0.9945166110992432],"min":[0.10028524696826935,0.0002789032587315887,0.029658794403076172,0.9875262975692749],"name":"accessor_buffer_mixamorig:RightHandPinky2_Idle_1","type":"VEC4"},{"bufferView":705,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:Spine_Yawn_2","type":"VEC3"},{"bufferView":269,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.933863162994385,0],"min":[-0.6209797859191895,5.933863162994385,-0.1895589530467987],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":343,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_2","type":"VEC3"},{"bufferView":0,"byteOffset":32,"componentType":5126,"count":3340,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_F010_Saber.003_3","type":"VEC3"},{"bufferView":520,"byteOffset":0,"componentType":5126,"count":30,"max":[0.14477038383483887,0.27585312724113464,0.9954227805137634,0.10875106602907181],"min":[-0.1360315978527069,-0.3243834972381592,-0.9909538626670837,0.001317197922617197],"name":"accessor_buffer_mixamorig:RightUpLeg_Walking_1","type":"VEC4"},{"bufferView":716,"byteOffset":0,"componentType":5126,"count":251,"max":[0.4522598385810852,0.5235873460769653,0.4009115397930145,0.9512882828712463],"min":[-0.0987769067287445,-0.6546518802642822,-0.40881362557411194,0.7097232937812805],"name":"accessor_buffer_mixamorig:LeftArm_Yawn_1","type":"VEC4"},{"bufferView":131,"byteOffset":0,"componentType":5126,"count":501,"max":[0.05035451054573059,0.00010166570427827537,0.004495101980865002,0.9999853372573853],"min":[-0.01858527958393097,-0.009152092970907688,-0.03265814855694771,0.9982130527496338],"name":"accessor_buffer_mixamorig:Spine1_Idle_1","type":"VEC4"},{"bufferView":623,"byteOffset":0,"componentType":5126,"count":251,"max":[0.16332881152629852,0,0,0.999839186668396],"min":[-0.032415151596069336,-0.007844998501241207,-0.04265367239713669,0.985617995262146],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Yawn_1","type":"VEC4"},{"bufferView":547,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0,1],"min":[-4.936010356004772e-8,-0.00000825338065624237,-3.2596297216969106e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_Walking_1","type":"VEC4"},{"bufferView":320,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[-6.5092010498046875,-3.8089101314544678,-0.4497392773628235],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_0","type":"VEC3"},{"bufferView":417,"byteOffset":0,"componentType":5126,"count":30,"max":[0,8.98844051361084,0],"min":[-3.513522148132324,8.9884033203125,-0.11455550044775009],"name":"accessor_buffer_mixamorig:RightShoulder_Walking_0","type":"VEC3"},{"bufferView":154,"byteOffset":0,"componentType":5126,"count":501,"max":[0.015069961547851562,2.0928781032562256,0.000019073486328125],"min":[0.015053749084472656,2.092843532562256,0.00001049041748046875],"name":"accessor_buffer_mixamorig:RightHandIndex3_Idle_0","type":"VEC3"},{"bufferView":593,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightToeBase_Walking_2","type":"VEC3"},{"bufferView":767,"byteOffset":0,"componentType":5126,"count":251,"max":[0.07823974639177322,0,0.9370339512825012,0.9995554089546204],"min":[-0.005400640890002251,-0.13503864407539368,0.02932603657245636,0.3124268352985382],"name":"accessor_buffer_mixamorig:LeftForeArm_Yawn_1","type":"VEC4"},{"bufferView":59,"byteOffset":0,"componentType":5126,"count":501,"max":[0.16806091368198395,0,0,0.9968441724777222],"min":[0.07697957754135132,-0.0015606372617185116,-0.03520051762461662,0.9851468205451965],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Idle_1","type":"VEC4"},{"bufferView":276,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9826892614364624],"min":[-0.1844879388809204,-0.0005821919767186046,-0.016901638358831406,0.9826892614364624],"name":"accessor_buffer_mixamorig:RightArm_TPose_1","type":"VEC4"},{"bufferView":22,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000015469267964363098,41.84933853149414,0.0000018849968910217285],"min":[-0.0000016654375940561295,41.84931945800781,-0.0000016093254089355469],"name":"accessor_buffer_mixamorig:LeftFoot_Idle_0","type":"VEC3"},{"bufferView":707,"byteOffset":0,"componentType":5126,"count":251,"max":[0.7343482971191406,0.6197038292884827,0,0.5142742991447449],"min":[0.3333512544631958,0.3387937545776367,-0.6025190353393555,0.0776350200176239],"name":"accessor_buffer_mixamorig:LeftShoulder_Yawn_1","type":"VEC4"},{"bufferView":324,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.003121189074590802,0,0.9987351894378662],"min":[-0.02078564278781414,0.003121189074590802,-0.04567611962556839,0.9987351894378662],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":484,"byteOffset":0,"componentType":5126,"count":30,"max":[0.03271305933594704,0,0,0.9995459914207458],"min":[0.023490186780691147,-0.0016165364068001509,-0.020451921969652176,0.9992542862892151],"name":"accessor_buffer_mixamorig:LeftHandRing3_Walking_1","type":"VEC4"},{"bufferView":304,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":282,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.3662607873120578e-8,-2.0191042438000295e-7,-1.5510249795624986e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_1","type":"VEC4"},{"bufferView":477,"byteOffset":0,"componentType":5126,"count":30,"max":[1.4313554763793945,1.9488956928253174,1.37374746799469],"min":[1.4313411712646484,1.94887375831604,1.373722791671753],"name":"accessor_buffer_mixamorig:RightHandThumb1_Walking_0","type":"VEC3"},{"bufferView":536,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1,1.000000238418579],"min":[0.9999997019767761,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb2_Walking_2","type":"VEC3"},{"bufferView":211,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"min":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHand_TPose_2","type":"VEC3"},{"bufferView":609,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997019767761,0.9999996423721313,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHand_Yawn_2","type":"VEC3"},{"bufferView":362,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.04969024658203,8.68749339133501e-9],"min":[-3.5517268770490773e-7,45.04969024658203,8.68749339133501e-9],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_0","type":"VEC3"},{"bufferView":521,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0001200437545776,1.0000041723251343,1.0000247955322266],"min":[1.0001025199890137,0.9999999403953552,1.0000050067901611],"name":"accessor_buffer_mixamorig:RightUpLeg_Walking_2","type":"VEC3"},{"bufferView":175,"byteOffset":0,"componentType":5126,"count":501,"max":[0.8905096054077148,5.9824113845825195,0],"min":[0.8904943466186523,5.982382774353027,-0.2430582046508789],"name":"accessor_buffer_mixamorig:LeftHandRing1_Idle_0","type":"VEC3"},{"bufferView":503,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Walking_2","type":"VEC3"},{"bufferView":564,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_Walking_0","type":"VEC3"},{"bufferView":481,"byteOffset":0,"componentType":5126,"count":30,"max":[9.313224857976365e-9,0,0,1],"min":[-4.0978196835794733e-8,-2.3853499442338943e-7,-1.788139485370266e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Walking_1","type":"VEC4"},{"bufferView":313,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"min":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_2","type":"VEC3"},{"bufferView":426,"byteOffset":0,"componentType":5126,"count":30,"max":[0,1.4579057693481445,0.00001537799835205078],"min":[-0.014504566788673401,1.4578936100006104,-0.0000013113021850585938],"name":"accessor_buffer_mixamorig:RightHandPinky4_Walking_0","type":"VEC3"},{"bufferView":711,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandRing2_Yawn_2","type":"VEC3"},{"bufferView":51,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000003576278687,1.000000238418579],"min":[0.9999998807907104,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftToe_End_Idle_2","type":"VEC3"},{"bufferView":801,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000003576278687,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Yawn_2","type":"VEC3"},{"bufferView":193,"byteOffset":0,"componentType":5126,"count":501,"max":[0,12.033416748046875,0.000005155801773071289],"min":[-8.624047040939331e-7,12.033411979675293,0.000002086162567138672],"name":"accessor_buffer_mixamorig:RightToeBase_Idle_0","type":"VEC3"},{"bufferView":312,"byteOffset":0,"componentType":5126,"count":2,"max":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"min":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_1","type":"VEC4"},{"bufferView":262,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_2","type":"VEC3"},{"bufferView":76,"byteOffset":0,"componentType":5126,"count":501,"max":[0.00000317208468914032,7.483736515045166,0.00001971796154975891],"min":[-0.0000033229589462280273,7.483699321746826,-0.00001823902130126953],"name":"accessor_buffer_mixamorig:RightArm_Idle_0","type":"VEC3"},{"bufferView":510,"byteOffset":0,"componentType":5126,"count":30,"max":[0.008647918701171875,2.2196311950683594,0.000006556510925292969],"min":[0.008634090423583984,2.219604969024658,-0.000001430511474609375],"name":"accessor_buffer_mixamorig:RightHandRing2_Walking_0","type":"VEC3"},{"bufferView":682,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.9782624244689941,0],"min":[-0.004072606563568115,1.9782217741012573,-0.0000514984130859375],"name":"accessor_buffer_mixamorig:LeftHandRing3_Yawn_0","type":"VEC3"},{"bufferView":493,"byteOffset":0,"componentType":5126,"count":30,"max":[0.03061562217772007,0,0,0.9626755118370056],"min":[0.01538943126797676,-0.003103941911831498,-0.4437229633331299,0.8956355452537537],"name":"accessor_buffer_mixamorig:RightForeArm_Walking_1","type":"VEC4"},{"bufferView":100,"byteOffset":0,"componentType":5126,"count":501,"max":[0.004721164703369141,1.5559616088867188,0.000015020370483398438],"min":[0.004713535308837891,1.5559303760528564,-8.344650268554688e-7],"name":"accessor_buffer_mixamorig:RightHandPinky3_Idle_0","type":"VEC3"},{"bufferView":198,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandIndex1_Idle_2","type":"VEC3"},{"bufferView":0,"byteOffset":12,"componentType":5126,"count":3340,"max":[0.9999616742134094,0.9999489784240723,0.999893069267273],"min":[-0.9999616742134094,-0.9999061226844788,-0.9999434351921082],"name":"accessor_buffer_F010_Saber.003_1","type":"VEC3"},{"bufferView":357,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000014512252164422534,0.0003296945069450885,0,0.9999457001686096],"min":[0.0000014512252164422534,0.0003296945069450885,-0.010418280959129333,0.9999457001686096],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_1","type":"VEC4"},{"bufferView":440,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Walking_2","type":"VEC3"},{"bufferView":142,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000024139881134033203,9.1685791015625,0.000003200024366378784],"min":[-0.0000016689300537109375,9.168535232543945,-0.000003732740879058838],"name":"accessor_buffer_mixamorig:Spine2_Idle_0","type":"VEC3"},{"bufferView":492,"byteOffset":0,"componentType":5126,"count":30,"max":[0.000009775161743164062,22.770910263061523,0.000010363757610321045],"min":[-0.000009298324584960938,22.770885467529297,-0.00000476837158203125],"name":"accessor_buffer_mixamorig:RightForeArm_Walking_0","type":"VEC3"},{"bufferView":226,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[1.0000001192092896,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":197,"byteOffset":0,"componentType":5126,"count":501,"max":[0.2657705545425415,0,0,0.9712958931922913],"min":[0.23331665992736816,-0.02884344756603241,-0.03806443139910698,0.9629548192024231],"name":"accessor_buffer_mixamorig:RightHandIndex1_Idle_1","type":"VEC4"},{"bufferView":223,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"min":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_2","type":"VEC3"},{"bufferView":3,"byteOffset":0,"componentType":5126,"count":1176,"max":[7.576313018798828,154.56195068359375,7.6111836433410645],"min":[-7.576391220092773,136.62216186523438,-2.516939640045166],"name":"accessor_buffer_F010_Saber.001_0","type":"VEC3"},{"bufferView":785,"byteOffset":0,"componentType":5126,"count":251,"max":[0.23321226239204407,0,0,0.9992257952690125],"min":[0.03889349475502968,-0.001992400037124753,-0.03604394197463989,0.9717556238174438],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Yawn_1","type":"VEC4"},{"bufferView":1,"byteOffset":0,"componentType":5123,"count":14376,"max":[3339],"min":[0],"name":"accessor_buffer_F010_Saber.003_4","type":"SCALAR"},{"bufferView":95,"byteOffset":0,"componentType":5126,"count":501,"max":[0.017184464260935783,0.020855071023106575,0,0.965028703212738],"min":[0.015216303989291191,0.01904902793467045,-0.2829480469226837,0.9587545990943909],"name":"accessor_buffer_mixamorig:RightForeArm_Idle_1","type":"VEC4"},{"bufferView":773,"byteOffset":0,"componentType":5126,"count":251,"max":[0.6173950433731079,0.005300233606249094,0,0.9813207983970642],"min":[0.10599164664745331,-0.07019437849521637,-0.22208629548549652,0.7538939714431763],"name":"accessor_buffer_mixamorig:LeftHandRing1_Yawn_1","type":"VEC4"},{"bufferView":532,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0,1],"min":[-1.0803341865539551e-7,-8.381903171539307e-8,-9.126961941774425e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_Walking_1","type":"VEC4"},{"bufferView":641,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0,1],"min":[-2.840533568360115e-7,-1.1618249118328094e-7,-1.7613635350244294e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_Yawn_1","type":"VEC4"},{"bufferView":467,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandRing1_Walking_2","type":"VEC3"},{"bufferView":660,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999996423721313],"name":"accessor_buffer_mixamorig:LeftHandRing2_Yawn_2","type":"VEC3"},{"bufferView":3,"byteOffset":32,"componentType":5126,"count":1176,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_F010_Saber.001_3","type":"VEC3"},{"bufferView":174,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1,1],"min":[1,0.9999996423721313,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandThumb4_Idle_2","type":"VEC3"},{"bufferView":25,"byteOffset":0,"componentType":5126,"count":501,"max":[0,2.248481273651123,0],"min":[-0.010968208312988281,2.2484450340270996,-0.00002676248550415039],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Idle_0","type":"VEC3"},{"bufferView":526,"byteOffset":0,"componentType":5126,"count":30,"max":[0.09213517606258392,0.3536476492881775,0.23683762550354004,0.917300283908844],"min":[-0.037373002618551254,0.34911879897117615,0.19151002168655396,0.9048376083374023],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Walking_1","type":"VEC4"},{"bufferView":170,"byteOffset":0,"componentType":5126,"count":501,"max":[0.012483884580433369,0,0.23880794644355774,0.9808360934257507],"min":[0.00864197127521038,-0.01732274517416954,0.19416344165802002,0.9708320498466492],"name":"accessor_buffer_mixamorig:LeftForeArm_Idle_1","type":"VEC4"},{"bufferView":452,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0001252889633179,1.0000041723251343,1.0000079870224],"min":[1.000117540359497,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftUpLeg_Walking_2","type":"VEC3"},{"bufferView":311,"byteOffset":0,"componentType":5126,"count":2,"max":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"min":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_0","type":"VEC3"},{"bufferView":94,"byteOffset":0,"componentType":5126,"count":501,"max":[0.000002592802047729492,22.77091407775879,0.000011414289474487305],"min":[-0.0000037848949432373047,22.770875930786133,-0.000007733702659606934],"name":"accessor_buffer_mixamorig:RightForeArm_Idle_0","type":"VEC3"},{"bufferView":284,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9782497882843018,0],"min":[-0.004050195217132568,1.9782497882843018,-0.000013029115507379174],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_0","type":"VEC3"},{"bufferView":195,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000003576278687,1.000000238418579],"min":[0.9999997019767761,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightToeBase_Idle_2","type":"VEC3"},{"bufferView":8,"byteOffset":0,"componentType":5126,"count":501,"max":[0.1554909348487854,0.000007178223768278258,0.03243127092719078,0.9960601925849915],"min":[0.08632491528987885,0.000004225949851388577,0.02030176669359207,0.9873048067092896],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Idle_1","type":"VEC4"},{"bufferView":119,"byteOffset":0,"componentType":5126,"count":501,"max":[0.39606502652168274,0.06393416225910187,0.042634978890419006,0.9679672718048096],"min":[0.2443922907114029,0.007028311491012573,-0.09464090317487717,0.9131984710693359],"name":"accessor_buffer_mixamorig:LeftArm_Idle_1","type":"VEC4"},{"bufferView":487,"byteOffset":0,"componentType":5126,"count":30,"max":[0,6.891787762697277e-8,2.0489098417897367e-8,1],"min":[-7.078052277620372e-8,2.3283067918100642e-8,-2.980232594040899e-8,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Walking_1","type":"VEC4"},{"bufferView":723,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997019767761,0.9999997019767761,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Yawn_2","type":"VEC3"},{"bufferView":466,"byteOffset":0,"componentType":5126,"count":30,"max":[0.4905281364917755,0.059145789593458176,0.1785299926996231,0.9237978458404541],"min":[0.33814412355422974,0.026642940938472748,0.1647922843694687,0.8536553382873535],"name":"accessor_buffer_mixamorig:RightHandRing1_Walking_1","type":"VEC4"},{"bufferView":270,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04805108159780502,0.9987183213233948],"min":[-0.01581340841948986,-0.0016685931477695704,0.04805108159780502,0.9987183213233948],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":610,"byteOffset":0,"componentType":5126,"count":251,"max":[0.000005818437784910202,4.308725357055664,0.11991727352142334],"min":[-0.0000052265822887420654,4.308669567108154,0.11990416049957275],"name":"accessor_buffer_mixamorig:Head_Yawn_0","type":"VEC3"},{"bufferView":121,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0,0],"min":[-6.509203910827637,-3.808929443359375,-0.4497419595718384],"name":"accessor_buffer_mixamorig:RightUpLeg_Idle_0","type":"VEC3"},{"bufferView":524,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1,1],"min":[0.9999997615814209,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Walking_2","type":"VEC3"},{"bufferView":596,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999998807907104,0.9999998807907104,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandIndex1_Walking_2","type":"VEC3"},{"bufferView":169,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000032186508178710938,22.772356033325195,0.000007756054401397705],"min":[-0.0000035762786865234375,22.77231788635254,-0.000012218952178955078],"name":"accessor_buffer_mixamorig:LeftForeArm_Idle_0","type":"VEC3"},{"bufferView":288,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.833076872046149e-8,7.194104423291492e-9,1],"min":[-4.388131102928128e-8,4.833076872046149e-8,7.194104423291492e-9,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":604,"byteOffset":0,"componentType":5126,"count":251,"max":[0.02571415901184082,2.323568344116211,0.000020135194063186646],"min":[0.025665074586868286,2.323524236679077,-0.000015735626220703125],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Yawn_0","type":"VEC3"},{"bufferView":415,"byteOffset":0,"componentType":5126,"count":30,"max":[0.06956339627504349,0.18320779502391815,0.18127001821994781,0.9919604659080505],"min":[-0.07042592763900757,0.09327314049005508,0.06101595237851143,0.9723660349845886],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Walking_1","type":"VEC4"},{"bufferView":608,"byteOffset":0,"componentType":5126,"count":251,"max":[0.3289208710193634,0.22454611957073212,0.11444523930549622,0.9986773729324341],"min":[-0.4496552050113678,-0.2842461168766022,-0.5052515268325806,0.8241262435913086],"name":"accessor_buffer_mixamorig:RightHand_Yawn_1","type":"VEC4"},{"bufferView":351,"byteOffset":0,"componentType":5126,"count":2,"max":[5.5535473109102895e-8,2.9428024461708446e-9,0,1],"min":[5.5535473109102895e-8,2.9428024461708446e-9,-0.000005548599347093841,1],"name":"accessor_buffer_mixamorig:Hips_TPose_1","type":"VEC4"},{"bufferView":757,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000011026859283447266,41.850101470947266,0.0000017136335372924805],"min":[-0.0000014901161193847656,41.85007858276367,-0.0000025033950805664062],"name":"accessor_buffer_mixamorig:RightFoot_Yawn_0","type":"VEC3"},{"bufferView":696,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000003576278687,1.0000001192092896,1.000000238418579],"min":[1.0000001192092896,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Yawn_2","type":"VEC3"},{"bufferView":231,"byteOffset":0,"componentType":5126,"count":2,"max":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"min":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"name":"accessor_buffer_mixamorig:Neck_TPose_1","type":"VEC4"},{"bufferView":162,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000003576278687,1.0000004768371582],"min":[0.9999997019767761,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightFoot_Idle_2","type":"VEC3"},{"bufferView":254,"byteOffset":0,"componentType":5126,"count":2,"max":[2.112320899963379,5.151422500610352,0],"min":[2.112320899963379,5.151422500610352,-0.101677805185318],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_0","type":"VEC3"},{"bufferView":504,"byteOffset":0,"componentType":5126,"count":30,"max":[0.000001385807991027832,6.854513168334961,0],"min":[-3.725290298461914e-7,6.854482650756836,-0.5485981702804565],"name":"accessor_buffer_mixamorig:Spine_Walking_0","type":"VEC3"},{"bufferView":365,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_TPose_0","type":"VEC3"},{"bufferView":581,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightLeg_Walking_2","type":"VEC3"},{"bufferView":133,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.9166603088378906,0.000007092952728271484],"min":[-0.02497100830078125,1.9166274070739746,-0.000011265277862548828],"name":"accessor_buffer_mixamorig:RightHandRing4_Idle_0","type":"VEC3"},{"bufferView":157,"byteOffset":0,"componentType":5126,"count":501,"max":[0.01633167266845703,2.091195821762085,0.000009775161743164062],"min":[0.016323089599609375,2.0911662578582764,-0.000006198883056640625],"name":"accessor_buffer_mixamorig:RightHandRing3_Idle_0","type":"VEC3"},{"bufferView":367,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_TPose_2","type":"VEC3"},{"bufferView":652,"byteOffset":0,"componentType":5126,"count":251,"max":[2.112344264984131,5.151429653167725,0],"min":[2.112302541732788,5.151391983032227,-0.10167694091796875],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Yawn_0","type":"VEC3"},{"bufferView":410,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHand_Walking_2","type":"VEC3"},{"bufferView":715,"byteOffset":0,"componentType":5126,"count":251,"max":[0.00000858306884765625,7.483728885650635,0.000021278858184814453],"min":[-0.000007867813110351562,7.4837117195129395,-0.000023245811462402344],"name":"accessor_buffer_mixamorig:LeftArm_Yawn_0","type":"VEC3"},{"bufferView":546,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0000020265579223632812,4.712550163269043,0.0000022649765014648438],"min":[-0.0000013709068298339844,4.712538719177246,-0.0000029802322387695312],"name":"accessor_buffer_mixamorig:RightToe_End_Walking_0","type":"VEC3"},{"bufferView":431,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999998807907104,0.9999998211860657],"name":"accessor_buffer_mixamorig:Neck_Walking_2","type":"VEC3"},{"bufferView":573,"byteOffset":0,"componentType":5126,"count":30,"max":[0.8905124664306641,5.982405662536621,0],"min":[0.8904919624328613,5.982386589050293,-0.24306488037109375],"name":"accessor_buffer_mixamorig:LeftHandRing1_Walking_0","type":"VEC3"},{"bufferView":628,"byteOffset":0,"componentType":5126,"count":251,"max":[0.000005155801773071289,10.314654350280762,0.000007331371307373047],"min":[-0.0000045299530029296875,10.314610481262207,-0.00000768899917602539],"name":"accessor_buffer_mixamorig:Neck_Yawn_0","type":"VEC3"},{"bufferView":212,"byteOffset":0,"componentType":5126,"count":2,"max":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"min":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"name":"accessor_buffer_mixamorig:Head_TPose_0","type":"VEC3"},{"bufferView":433,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0,1],"min":[-1.7136335372924805e-7,-1.5273690223693848e-7,-1.6018749704471702e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_Walking_1","type":"VEC4"},{"bufferView":110,"byteOffset":0,"componentType":5126,"count":501,"max":[0.6693047881126404,0.35235124826431274,0,0.3586310148239136],"min":[0.6274645328521729,0.3059859275817871,-0.5993227362632751,0.3346402645111084],"name":"accessor_buffer_mixamorig:LeftShoulder_Idle_1","type":"VEC4"},{"bufferView":634,"byteOffset":0,"componentType":5126,"count":251,"max":[0.009794950485229492,1.9066658020019531,0.00003719329833984375],"min":[0.009750843048095703,1.9066030979156494,-0.000008106231689453125],"name":"accessor_buffer_mixamorig:RightHandPinky2_Yawn_0","type":"VEC3"},{"bufferView":598,"byteOffset":0,"componentType":5126,"count":30,"max":[0.2313416302204132,0.42733529210090637,0.1651192009449005,0.9869678020477295],"min":[-0.10425511747598648,0.07881790399551392,-0.0629025548696518,0.8733873963356018],"name":"accessor_buffer_mixamorig:LeftHand_Walking_1","type":"VEC4"},{"bufferView":710,"byteOffset":0,"componentType":5126,"count":251,"max":[0.5094752311706543,0,0.08569139242172241,0.9990641474723816],"min":[0.04278033226728439,-0.009175324812531471,0.0063611590303480625,0.8561587929725647],"name":"accessor_buffer_mixamorig:RightHandRing2_Yawn_1","type":"VEC4"},{"bufferView":618,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.0000003576278687,1.000000238418579],"min":[0.9999998211860657,0.9999998807907104,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightShoulder_Yawn_2","type":"VEC3"},{"bufferView":572,"byteOffset":0,"componentType":5126,"count":30,"max":[1.000000238418579,0.9999999403953552,1],"min":[1,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandThumb4_Walking_2","type":"VEC3"},{"bufferView":360,"byteOffset":0,"componentType":5126,"count":2,"max":[0.4910941421985626,0,0.04505223408341408,0.8677260875701904],"min":[0.4910941421985626,-0.062034837901592255,0.04505223408341408,0.8677260875701904],"name":"accessor_buffer_mixamorig:RightFoot_TPose_1","type":"VEC4"},{"bufferView":387,"byteOffset":0,"componentType":5126,"count":2,"max":[5.549511570279719e-7,0,0.0010957049671560526,0.9999994039535522],"min":[5.549511570279719e-7,-0.00003228561763535254,0.0010957049671560526,0.9999994039535522],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_1","type":"VEC4"},{"bufferView":491,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_Walking_2","type":"VEC3"},{"bufferView":190,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.8280882835388184,0],"min":[-0.0065402984619140625,1.8280493021011353,-0.000028133392333984375],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Idle_0","type":"VEC3"},{"bufferView":672,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Yawn_2","type":"VEC3"},{"bufferView":627,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000003576278687,1.0000001192092896],"min":[0.9999998807907104,1,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandPinky4_Yawn_2","type":"VEC3"},{"bufferView":114,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000003576278687,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandRing2_Idle_2","type":"VEC3"},{"bufferView":120,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000003576278687,1.0000003576278687],"min":[0.9999998211860657,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftArm_Idle_2","type":"VEC3"},{"bufferView":649,"byteOffset":0,"componentType":5126,"count":251,"max":[6.509202480316162,0,0],"min":[6.509198188781738,-3.808929443359375,-0.31935662031173706],"name":"accessor_buffer_mixamorig:LeftUpLeg_Yawn_0","type":"VEC3"},{"bufferView":725,"byteOffset":0,"componentType":5126,"count":251,"max":[0.18342003226280212,0.4625886380672455,0.40098264813423157,0.915322482585907],"min":[-0.11913296580314636,0.09699290990829468,0.30179938673973083,0.8162391781806946],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Yawn_1","type":"VEC4"},{"bufferView":234,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-1.473153474762512e-7,-1.363462160952622e-7,-1.3542921806219965e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_1","type":"VEC4"},{"bufferView":298,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000000238418579,1,1.0000001192092896],"min":[1.000000238418579,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_2","type":"VEC3"},{"bufferView":233,"byteOffset":0,"componentType":5126,"count":2,"max":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"min":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_0","type":"VEC3"},{"bufferView":739,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000015981495380401611,9.168578147888184,0.0000049620866775512695],"min":[-0.0000016093254089355469,9.168539047241211,-0.000004112720489501953],"name":"accessor_buffer_mixamorig:Spine2_Yawn_0","type":"VEC3"},{"bufferView":41,"byteOffset":0,"componentType":5126,"count":501,"max":[9.313225746154785e-8,2.514571129097476e-8,3.3527612686157227e-8,1],"min":[2.421438694000244e-8,-3.026798367500305e-8,-2.980232594040899e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Idle_1","type":"VEC4"},{"bufferView":171,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftForeArm_Idle_2","type":"VEC3"},{"bufferView":46,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000019669532775878906,20.857290267944336,0.5804580450057983],"min":[-0.0000021457672119140625,20.857213973999023,0.5804459452629089],"name":"accessor_buffer_mixamorig:HeadTop_End_Idle_0","type":"VEC3"},{"bufferView":224,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2484662532806396,0.000009948620572686195],"min":[-0.010961860418319702,2.2484662532806396,0.000009948620572686195],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":27,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Idle_2","type":"VEC3"},{"bufferView":335,"byteOffset":0,"componentType":5126,"count":2,"max":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"min":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_0","type":"VEC3"},{"bufferView":494,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightForeArm_Walking_2","type":"VEC3"},{"bufferView":464,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999997615814209,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandThumb3_Walking_2","type":"VEC3"},{"bufferView":708,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftShoulder_Yawn_2","type":"VEC3"},{"bufferView":14,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0.032519370317459106,0.01966981776058674,0.9969176650047302],"min":[-0.1478203386068344,-0.0030081800650805235,0.0049291932955384254,0.9886130690574646],"name":"accessor_buffer_mixamorig:Head_Idle_1","type":"VEC4"},{"bufferView":786,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Yawn_2","type":"VEC3"},{"bufferView":375,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04820201173424721,0.9986330270767212],"min":[-0.015152297914028168,-0.013382739387452602,0.04820201173424721,0.9986330270767212],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_1","type":"VEC4"},{"bufferView":803,"byteOffset":0,"componentType":5126,"count":3,"max":[1.0011157989501953,4.722245511290524e-11,1.886907947598604e-12,0,3.766052140280474e-12,1.0011159181594849,0.07986891269683838,0,1.8865089611991293e-12,0,1.0011157989501953,0,0,0,2.1228513717651367,1],"min":[1.0011157989501953,-3.766054742365688e-12,2.0371814713867806e-16,0,-4.722247592958695e-11,0.9979248046875,1.5544334530659398e-7,0,-2.0430401600549222e-16,-0.07986891269683838,0.9979247450828552,0,-0.007442474830895662,-137.4109344482422,-8.502774238586426,1],"name":"accessor_buffer_IBM_F010_Saber_Face_skin_0","type":"MAT4"},{"bufferView":734,"byteOffset":0,"componentType":5126,"count":251,"max":[0.1082083135843277,0.16242840886116028,0.26776057481765747,0.9917136430740356],"min":[0.0326661579310894,0.10416033118963242,0.05328565090894699,0.9466597437858582],"name":"accessor_buffer_mixamorig:RightHandThumb2_Yawn_1","type":"VEC4"},{"bufferView":545,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftToeBase_Walking_2","type":"VEC3"},{"bufferView":768,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000003576278687,1.0000003576278687,1.000000238418579],"min":[0.9999997615814209,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftForeArm_Yawn_2","type":"VEC3"},{"bufferView":150,"byteOffset":0,"componentType":5126,"count":501,"max":[1,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightToe_End_Idle_2","type":"VEC3"},{"bufferView":770,"byteOffset":0,"componentType":5126,"count":251,"max":[9.825455293821506e-8,2.60770320892334e-8,6.332993507385254e-8,1],"min":[3.4458935260772705e-8,-3.5390257835388184e-8,-1.8626442610525373e-9,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_Yawn_1","type":"VEC4"},{"bufferView":745,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000012069940567016602,4.712547779083252,2.4959444999694824e-7],"min":[-0.0000011920928955078125,4.712543487548828,-3.5390257835388184e-7],"name":"accessor_buffer_mixamorig:RightToe_End_Yawn_0","type":"VEC3"},{"bufferView":749,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0024724402464926243,0.2151503562927246,0,0.9990251064300537],"min":[-0.10247030854225159,-0.0971604585647583,-0.0569785051047802,0.9747562408447266],"name":"accessor_buffer_mixamorig:Hips_Yawn_1","type":"VEC4"},{"bufferView":553,"byteOffset":0,"componentType":5126,"count":30,"max":[0.013776808977127075,0.007904808036983013,0.012526584789156914,0.9999035000801086],"min":[0.0039803688414394855,0.0073607624508440495,0.011090894229710102,0.9997954368591309],"name":"accessor_buffer_mixamorig:RightHandIndex3_Walking_1","type":"VEC4"},{"bufferView":799,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.525008201599121,0.000028945505619049072],"min":[-0.00624847412109375,1.5249760150909424,-0.00001582503318786621],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Yawn_0","type":"VEC3"},{"bufferView":416,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Walking_2","type":"VEC3"},{"bufferView":800,"byteOffset":0,"componentType":5126,"count":251,"max":[0.36818069219589233,0,0,0.9983592629432678],"min":[0.04365229606628418,-0.014484290964901447,-0.10348690301179886,0.9238634705543518],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Yawn_1","type":"VEC4"},{"bufferView":613,"byteOffset":0,"componentType":5126,"count":251,"max":[0.07796502113342285,2.109346389770508,0.000008821487426757812],"min":[0.07792496681213379,2.1093080043792725,-0.00002181529998779297],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Yawn_0","type":"VEC3"},{"bufferView":264,"byteOffset":0,"componentType":5126,"count":2,"max":[0.000002737616568992962,0,0,0.9967700242996216],"min":[0.000002737616568992962,-0.0000792778519098647,-0.08030900359153748,0.9967700242996216],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_1","type":"VEC4"},{"bufferView":794,"byteOffset":0,"componentType":5126,"count":251,"max":[0.42069321870803833,0.023263368755578995,0.002807950833812356,0.9984909892082214],"min":[-0.03831353783607483,-0.06716737896203995,-0.22723887860774994,0.9035097360610962],"name":"accessor_buffer_mixamorig:RightHandIndex1_Yawn_1","type":"VEC4"},{"bufferView":189,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999997019767761,0.9999997615814209,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Idle_2","type":"VEC3"},{"bufferView":252,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000016051130842242856,0,0.9999784827232361,0.0061686099506914616],"min":[0.0000016051130842242856,-0.0022346421610563993,0.9999784827232361,0.0061686099506914616],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_1","type":"VEC4"},{"bufferView":139,"byteOffset":0,"componentType":5126,"count":501,"max":[0.02991008758544922,2.2504143714904785,0.00000762939453125],"min":[0.02988910675048828,2.2503767013549805,-0.000002384185791015625],"name":"accessor_buffer_mixamorig:RightHandIndex2_Idle_0","type":"VEC3"},{"bufferView":340,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_2","type":"VEC3"},{"bufferView":3,"byteOffset":12,"componentType":5126,"count":1176,"max":[0.9913477301597595,0.9988032579421997,0.9995606541633606],"min":[-0.9913485050201416,-0.9999690651893616,-0.9874789118766785],"name":"accessor_buffer_F010_Saber.001_1","type":"VEC3"},{"bufferView":411,"byteOffset":0,"componentType":5126,"count":30,"max":[4.991888999938965e-7,4.308724403381348,0.11991281807422638],"min":[-5.578622221946716e-7,4.308677673339844,0.11990927159786224],"name":"accessor_buffer_mixamorig:Head_Walking_0","type":"VEC3"},{"bufferView":266,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.778012275695801,0],"min":[-0.8287959098815918,5.778012275695801,-0.20808981359004974],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_0","type":"VEC3"},{"bufferView":241,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_2","type":"VEC3"},{"bufferView":16,"byteOffset":0,"componentType":5126,"count":501,"max":[0.07796001434326172,2.109344005584717,0.000003814697265625],"min":[0.0779409408569336,2.1093106269836426,-0.000011444091796875],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Idle_0","type":"VEC3"},{"bufferView":251,"byteOffset":0,"componentType":5126,"count":2,"max":[6.5092010498046875,0,0],"min":[6.5092010498046875,-3.8089029788970947,-0.3193536400794983],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_0","type":"VEC3"},{"bufferView":423,"byteOffset":0,"componentType":5126,"count":30,"max":[0,2.24847412109375,0],"min":[-0.010970115661621094,2.248453378677368,-0.00002562999725341797],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Walking_0","type":"VEC3"},{"bufferView":771,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,0.9999999403953552,1],"min":[1,0.9999996423721313,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandThumb4_Yawn_2","type":"VEC3"},{"bufferView":539,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandIndex2_Walking_2","type":"VEC3"},{"bufferView":571,"byteOffset":0,"componentType":5126,"count":30,"max":[8.568167686462402e-8,1.1175874448099421e-8,4.097820038850841e-8,1],"min":[3.9115555239277455e-8,-3.725289943190546e-8,3.7252920748187535e-9,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_Walking_1","type":"VEC4"},{"bufferView":674,"byteOffset":0,"componentType":5126,"count":251,"max":[0.3233933746814728,0.5145593881607056,0.24958108365535736,0.9530545473098755],"min":[-0.3254883289337158,-0.5129621624946594,-0.5374211668968201,0.7476178407669067],"name":"accessor_buffer_mixamorig:RightArm_Yawn_1","type":"VEC4"},{"bufferView":185,"byteOffset":0,"componentType":5126,"count":501,"max":[0.015548309311270714,0.005418228916823864,0,0.9971773028373718],"min":[0.009982623159885406,-0.008802936412394047,-0.12332369387149811,0.992258608341217],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Idle_1","type":"VEC4"},{"bufferView":214,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Head_TPose_2","type":"VEC3"},{"bufferView":39,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandPinky2_Idle_2","type":"VEC3"},{"bufferView":450,"byteOffset":0,"componentType":5126,"count":30,"max":[6.509202480316162,0,0],"min":[6.509199619293213,-3.808922290802002,-0.31935441493988037],"name":"accessor_buffer_mixamorig:LeftUpLeg_Walking_0","type":"VEC3"},{"bufferView":138,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999997615814209,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandThumb2_Idle_2","type":"VEC3"},{"bufferView":559,"byteOffset":0,"componentType":5126,"count":30,"max":[0.615274965763092,0.09147502481937408,0.14577235281467438,0.934639036655426],"min":[0.3243423402309418,-0.12179058790206909,-0.02567342109978199,0.7820845246315002],"name":"accessor_buffer_mixamorig:RightFoot_Walking_1","type":"VEC4"},{"bufferView":583,"byteOffset":0,"componentType":5126,"count":30,"max":[0.11787582188844681,0,0,0.9865501523017883],"min":[0.050129637122154236,-0.2333427518606186,-0.18150991201400757,0.9580236077308655],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Walking_1","type":"VEC4"},{"bufferView":622,"byteOffset":0,"componentType":5126,"count":251,"max":[0,2.2484869956970215,0],"min":[-0.010982275009155273,2.2484469413757324,-0.000036716461181640625],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_Yawn_0","type":"VEC3"},{"bufferView":219,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5739166140556335,0,0.5932961106300354,0.39230477809906006],"min":[0.5739166140556335,-0.4058528542518616,0.5932961106300354,0.39230477809906006],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_1","type":"VEC4"},{"bufferView":235,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_2","type":"VEC3"},{"bufferView":636,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997019767761,0.9999997019767761,0.9999995827674866],"name":"accessor_buffer_mixamorig:RightHandPinky2_Yawn_2","type":"VEC3"},{"bufferView":720,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0001180171966553,1.0000081062316895,1.000011920928955],"min":[1.00011146068573,1.0000027418136597,1.0000033378601074],"name":"accessor_buffer_mixamorig:RightUpLeg_Yawn_2","type":"VEC3"},{"bufferView":648,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999998807907104,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftToe_End_Yawn_2","type":"VEC3"},{"bufferView":463,"byteOffset":0,"componentType":5126,"count":30,"max":[0.008281150832772255,0.09331756085157394,0,0.989179790019989],"min":[0.0027392064221203327,0.0816226452589035,-0.14038221538066864,0.9867234230041504],"name":"accessor_buffer_mixamorig:RightHandThumb3_Walking_1","type":"VEC4"},{"bufferView":617,"byteOffset":0,"componentType":5126,"count":251,"max":[0.8000295758247375,0,0.5880354642868042,0.5944336652755737],"min":[0.26392662525177,-0.6670979857444763,0.27886316180229187,0.07201345264911652],"name":"accessor_buffer_mixamorig:RightShoulder_Yawn_1","type":"VEC4"},{"bufferView":677,"byteOffset":0,"componentType":5126,"count":251,"max":[0.35378745198249817,0,0,0.9115720391273499],"min":[0.17257185280323029,-0.4793325960636139,-0.5963944792747498,0.6543446779251099],"name":"accessor_buffer_mixamorig:RightHandThumb1_Yawn_1","type":"VEC4"},{"bufferView":474,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0000016689300537109375,7.483725547790527,0.000014662742614746094],"min":[-0.0000014901161193847656,7.4837117195129395,-0.000012509524822235107],"name":"accessor_buffer_mixamorig:RightArm_Walking_0","type":"VEC3"},{"bufferView":227,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.4578983783721924,0],"min":[-0.014494240283966064,1.4578983783721924,-0.000007362202268268447],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_0","type":"VEC3"},{"bufferView":122,"byteOffset":0,"componentType":5126,"count":501,"max":[0.06327129900455475,0.10982005298137665,0.9969109892845154,0.11868580430746078],"min":[-0.06241075322031975,-0.06120417267084122,-0.9974195957183838,-0.007310595829039812],"name":"accessor_buffer_mixamorig:RightUpLeg_Idle_1","type":"VEC4"},{"bufferView":279,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21339857578277588,0,0,0.9383423328399658],"min":[0.21339857578277588,-0.06705669313669205,-0.26358723640441895,0.9383423328399658],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_1","type":"VEC4"},{"bufferView":97,"byteOffset":0,"componentType":5126,"count":501,"max":[0,1.8846192359924316,0.00000858306884765625],"min":[-0.05979347229003906,1.8845858573913574,-0.00000286102294921875],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Idle_0","type":"VEC3"},{"bufferView":277,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightArm_TPose_2","type":"VEC3"},{"bufferView":64,"byteOffset":0,"componentType":5126,"count":501,"max":[0.08421897888183594,1.993545413017273,0],"min":[0.08420610427856445,1.9935120344161987,-0.000030040740966796875],"name":"accessor_buffer_mixamorig:RightHandThumb3_Idle_0","type":"VEC3"},{"bufferView":151,"byteOffset":0,"componentType":5126,"count":501,"max":[9.309781074523926,97.13330841064453,3.2183454036712646],"min":[-0.4522612690925598,95.00161743164062,0.4859360456466675],"name":"accessor_buffer_mixamorig:Hips_Idle_0","type":"VEC3"},{"bufferView":693,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999998211860657,0.9999998807907104,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightForeArm_Yawn_2","type":"VEC3"},{"bufferView":314,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.181240558624268,0],"min":[-2.0758204460144043,5.181240558624268,-0.15668104588985443],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_0","type":"VEC3"},{"bufferView":141,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandIndex2_Idle_2","type":"VEC3"},{"bufferView":655,"byteOffset":0,"componentType":5126,"count":251,"max":[0,2.002577543258667,0.000023633241653442383],"min":[-0.009878158569335938,2.0025482177734375,-0.00002637505531311035],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Yawn_0","type":"VEC3"},{"bufferView":432,"byteOffset":0,"componentType":5126,"count":30,"max":[0.02194690704345703,1.7619378566741943,0.000012725591659545898],"min":[0.021934986114501953,1.7619171142578125,-0.000003904104232788086],"name":"accessor_buffer_mixamorig:LeftHandRing4_Walking_0","type":"VEC3"},{"bufferView":7,"byteOffset":0,"componentType":5126,"count":501,"max":[0.02569866180419922,2.3235669136047363,0.00001239776611328125],"min":[0.025682926177978516,2.323526620864868,0.000002384185791015625],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Idle_0","type":"VEC3"},{"bufferView":346,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"min":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_2","type":"VEC3"},{"bufferView":704,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0.05371571332216263,0.034797437489032745,0.9995884299278259],"min":[-0.0812988132238388,-0.045464154332876205,0.003705148585140705,0.996268630027771],"name":"accessor_buffer_mixamorig:Spine_Yawn_1","type":"VEC4"},{"bufferView":377,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0023322105407715,0],"min":[-0.03690838813781738,2.0023322105407715,-0.0000020437873899936676],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":637,"byteOffset":0,"componentType":5126,"count":251,"max":[0.012783527374267578,1.3818130493164062,0.0000171661376953125],"min":[0.012743949890136719,1.3817720413208008,-0.00001913309097290039],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Yawn_0","type":"VEC3"},{"bufferView":379,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"min":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":482,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000003576278687],"min":[0.9999999403953552,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Walking_2","type":"VEC3"},{"bufferView":587,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Walking_2","type":"VEC3"},{"bufferView":640,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.9040913581848145,0.000011920928955078125],"min":[-0.04498070478439331,1.9040390253067017,-0.00002574920654296875],"name":"accessor_buffer_mixamorig:RightHandIndex4_Yawn_0","type":"VEC3"},{"bufferView":165,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999996423721313,0.9999997019767761,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftLeg_Idle_2","type":"VEC3"},{"bufferView":586,"byteOffset":0,"componentType":5126,"count":30,"max":[0.030336719006299973,0,0,0.9997857809066772],"min":[0.020470714196562767,-0.0004611696640495211,-0.0045809452421963215,0.9995291233062744],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Walking_1","type":"VEC4"},{"bufferView":551,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1,1],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:Hips_Walking_2","type":"VEC3"},{"bufferView":167,"byteOffset":0,"componentType":5126,"count":501,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_Idle_1","type":"VEC4"},{"bufferView":132,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:Spine1_Idle_2","type":"VEC3"},{"bufferView":218,"byteOffset":0,"componentType":5126,"count":2,"max":[0,8.988426208496094,0],"min":[-3.513521432876587,8.988426208496094,-0.11455392837524414],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_0","type":"VEC3"},{"bufferView":630,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:Neck_Yawn_2","type":"VEC3"},{"bufferView":10,"byteOffset":0,"componentType":5126,"count":501,"max":[0.000010013580322265625,19.02716064453125,0.000009715557098388672],"min":[-0.00001049041748046875,19.027124404907227,-0.000009179115295410156],"name":"accessor_buffer_mixamorig:RightHand_Idle_0","type":"VEC3"},{"bufferView":714,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.000000238418579,1.0000003576278687],"min":[0.9999997615814209,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandPinky1_Yawn_2","type":"VEC3"},{"bufferView":792,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1],"min":[0.9999998211860657,0.9999997019767761,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightToeBase_Yawn_2","type":"VEC3"},{"bufferView":730,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.9166755676269531,0.000022649765014648438],"min":[-0.024984359741210938,1.9166185855865479,-0.000021219253540039062],"name":"accessor_buffer_mixamorig:RightHandRing4_Yawn_0","type":"VEC3"},{"bufferView":702,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000003576278687,1.0000001192092896],"min":[0.9999998211860657,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandMiddle3_Yawn_2","type":"VEC3"},{"bufferView":453,"byteOffset":0,"componentType":5126,"count":30,"max":[2.112335681915283,5.151423931121826,0],"min":[2.112314224243164,5.151405334472656,-0.10166740417480469],"name":"accessor_buffer_mixamorig:LeftHandPinky1_Walking_0","type":"VEC3"},{"bufferView":661,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0842430591583252,1.9935603141784668,0.000004231929779052734],"min":[0.08419313281774521,1.9935017824172974,-0.00004482269287109375],"name":"accessor_buffer_mixamorig:RightHandThumb3_Yawn_0","type":"VEC3"},{"bufferView":50,"byteOffset":0,"componentType":5126,"count":501,"max":[8.35862010717392e-8,0.000008065725523920264,0,1],"min":[8.07922262424654e-8,0.000008053459168877453,-1.4493707567453384e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_Idle_1","type":"VEC4"},{"bufferView":322,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001243352890015,0.9999998807907104,1.000003695487976],"min":[1.0001243352890015,0.9999998807907104,1.000003695487976],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_2","type":"VEC3"},{"bufferView":273,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04963767156004906,0.9986410140991211],"min":[-0.01586439274251461,-0.0007755132974125445,0.04963767156004906,0.9986410140991211],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_1","type":"VEC4"},{"bufferView":388,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999998807907104],"min":[1,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_2","type":"VEC3"},{"bufferView":389,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8280677795410156,0],"min":[-0.006532952189445496,1.8280677795410156,-0.000011722324416041374],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_0","type":"VEC3"},{"bufferView":781,"byteOffset":0,"componentType":5126,"count":251,"max":[0,2.151792049407959,0.0000019073486328125],"min":[-0.018188118934631348,2.1517372131347656,-0.00003409385681152344],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Yawn_0","type":"VEC3"},{"bufferView":208,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":509,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999999403953552,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftShoulder_Walking_2","type":"VEC3"},{"bufferView":742,"byteOffset":0,"componentType":5126,"count":251,"max":[0.0000040745362639427185,12.089052200317383,0],"min":[-0.0000024205073714256287,12.089046478271484,-0.000006556510925292969],"name":"accessor_buffer_mixamorig:LeftToeBase_Yawn_0","type":"VEC3"},{"bufferView":713,"byteOffset":0,"componentType":5126,"count":251,"max":[0.6205130219459534,0.12480250746011734,0.3536866307258606,0.9420853853225708],"min":[0.06604980677366257,-0.02690909430384636,0.2650204300880432,0.694172739982605],"name":"accessor_buffer_mixamorig:RightHandPinky1_Yawn_1","type":"VEC4"},{"bufferView":65,"byteOffset":0,"componentType":5126,"count":501,"max":[0.01546031516045332,0.004832530859857798,0,0.999834418296814],"min":[0.010453573428094387,0.0036396230570971966,-0.05671585351228714,0.9983239769935608],"name":"accessor_buffer_mixamorig:RightHandThumb3_Idle_1","type":"VEC4"},{"bufferView":645,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:HeadTop_End_Yawn_2","type":"VEC3"},{"bufferView":352,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Hips_TPose_2","type":"VEC3"},{"bufferView":77,"byteOffset":0,"componentType":5126,"count":501,"max":[0.37481021881103516,0,0.08346261829137802,0.9625203609466553],"min":[0.24815411865711212,-0.11651493608951569,-0.0916302502155304,0.9205743670463562],"name":"accessor_buffer_mixamorig:RightArm_Idle_1","type":"VEC4"},{"bufferView":385,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_2","type":"VEC3"},{"bufferView":101,"byteOffset":0,"componentType":5126,"count":501,"max":[0.13985876739025116,0.008026359602808952,0.05718501657247543,0.9948629140853882],"min":[0.090253084897995,0.0063728815875947475,0.04540440812706947,0.9884862303733826],"name":"accessor_buffer_mixamorig:RightHandPinky3_Idle_1","type":"VEC4"},{"bufferView":380,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.050357818603516,2.3865140974521637e-9],"min":[-2.398074059328792e-7,45.050357818603516,2.3865140974521637e-9],"name":"accessor_buffer_mixamorig:RightLeg_TPose_0","type":"VEC3"},{"bufferView":621,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.0000003576278687,1.000000238418579],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftFoot_Yawn_2","type":"VEC3"},{"bufferView":469,"byteOffset":0,"componentType":5126,"count":30,"max":[0.186489075422287,0.00365125248208642,0,0.9913313388824463],"min":[0.1214970126748085,-0.0004450123815331608,-0.08004932850599289,0.9791836738586426],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Walking_1","type":"VEC4"},{"bufferView":407,"byteOffset":0,"componentType":5126,"count":30,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandMiddle2_Walking_2","type":"VEC3"},{"bufferView":412,"byteOffset":0,"componentType":5126,"count":30,"max":[0.006472966633737087,0.016004886478185654,0.008321022614836693,0.9999926090240479],"min":[-0.021510018035769463,-0.039265409111976624,-0.012926705181598663,0.999193549156189],"name":"accessor_buffer_mixamorig:Head_Walking_1","type":"VEC4"},{"bufferView":512,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing2_Walking_2","type":"VEC3"},{"bufferView":447,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0000011920928955078125,4.70644998550415,0.0000024437904357910156],"min":[-8.344650268554688e-7,4.706439971923828,-9.834766387939453e-7],"name":"accessor_buffer_mixamorig:LeftToe_End_Walking_0","type":"VEC3"},{"bufferView":384,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"min":[-1.9003864792921377e-7,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_1","type":"VEC4"},{"bufferView":255,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.05077396705746651,0.998155415058136],"min":[-0.014275818131864071,-0.030067145824432373,0.05077396705746651,0.998155415058136],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_1","type":"VEC4"},{"bufferView":436,"byteOffset":0,"componentType":5126,"count":30,"max":[0.4030008614063263,0.003750248346477747,0.09187088161706924,0.9199389815330505],"min":[0.38219958543777466,0.00356577942147851,0.08731123805046082,0.9105690121650696],"name":"accessor_buffer_mixamorig:RightHandPinky2_Walking_1","type":"VEC4"},{"bufferView":181,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000021457672119140625,45.050376892089844,0.000004023313522338867],"min":[-0.0000016093254089355469,45.05033874511719,-0.000004492700099945068],"name":"accessor_buffer_mixamorig:RightLeg_Idle_0","type":"VEC3"},{"bufferView":752,"byteOffset":0,"componentType":5126,"count":251,"max":[0.12631464004516602,0.014103413559496403,0.02894601598381996,0.9999167323112488],"min":[-0.2253120094537735,-0.005575133487582207,-0.02281351014971733,0.9740036725997925],"name":"accessor_buffer_mixamorig:RightHandIndex3_Yawn_1","type":"VEC4"},{"bufferView":797,"byteOffset":0,"componentType":5126,"count":251,"max":[0.3634963035583496,0.2832793593406677,0.33050408959388733,0.9935636520385742],"min":[-0.26121294498443604,-0.6064321398735046,-0.3639959990978241,0.6906076669692993],"name":"accessor_buffer_mixamorig:LeftHand_Yawn_1","type":"VEC4"},{"bufferView":658,"byteOffset":0,"componentType":5126,"count":251,"max":[0,2.1800739765167236,0.000007092952728271484],"min":[-0.017911911010742188,2.1800386905670166,-0.000021457672119140625],"name":"accessor_buffer_mixamorig:LeftHandRing2_Yawn_0","type":"VEC3"},{"bufferView":306,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.000005544060059037292,0.9992028474807739],"min":[-0.03992169722914696,-2.2444967839874153e-7,0.000005544060059037292,0.9992028474807739],"name":"accessor_buffer_mixamorig:Spine_TPose_1","type":"VEC4"},{"bufferView":438,"byteOffset":0,"componentType":5126,"count":30,"max":[0.012766838073730469,1.3818058967590332,0.00000667572021484375],"min":[0.012753963470458984,1.381788730621338,-0.00000858306884765625],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Walking_0","type":"VEC3"},{"bufferView":419,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999999403953552,0.9999999403953552,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightShoulder_Walking_2","type":"VEC3"},{"bufferView":60,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999997615814209,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Idle_2","type":"VEC3"},{"bufferView":249,"byteOffset":0,"componentType":5126,"count":2,"max":[8.172354171165352e-8,0.000008062284905463457,0,1],"min":[8.172354171165352e-8,0.000008062284905463457,-1.2136295524101115e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_1","type":"VEC4"},{"bufferView":115,"byteOffset":0,"componentType":5126,"count":501,"max":[0,5.181260108947754,0],"min":[-2.0758304595947266,5.181227684020996,-0.1566941738128662],"name":"accessor_buffer_mixamorig:RightHandPinky1_Idle_0","type":"VEC3"},{"bufferView":439,"byteOffset":0,"componentType":5126,"count":30,"max":[6.82193785905838e-8,3.725290298461914e-8,3.725290298461914e-8,1],"min":[3.725290298461914e-8,-2.0489096641540527e-8,-9.313225746154785e-9,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_Walking_1","type":"VEC4"},{"bufferView":88,"byteOffset":0,"componentType":5126,"count":501,"max":[0.029519081115722656,2.0856847763061523,0.00001049041748046875],"min":[0.02950572967529297,2.0856456756591797,-0.000010013580322265625],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Idle_0","type":"VEC3"},{"bufferView":601,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0,0,0.9992690682411194],"min":[-0.037345655262470245,-0.0026527720037847757,-0.02070719748735428,0.9991076588630676],"name":"accessor_buffer_mixamorig:LeftHandPinky3_Walking_1","type":"VEC4"},{"bufferView":134,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0,0,1],"min":[-1.3317915659172286e-7,-7.82310962677002e-8,-8.381903171539307e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_Idle_1","type":"VEC4"},{"bufferView":458,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1,1.0000001192092896],"min":[0.9999998211860657,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Walking_2","type":"VEC3"},{"bufferView":633,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.0000001192092896,1.000000238418579],"min":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandRing4_Yawn_2","type":"VEC3"},{"bufferView":793,"byteOffset":0,"componentType":5126,"count":251,"max":[2.2894606590270996,5.801722526550293,0.05066871643066406],"min":[2.2894203662872314,5.80167818069458,0.05062437057495117],"name":"accessor_buffer_mixamorig:RightHandIndex1_Yawn_0","type":"VEC3"},{"bufferView":687,"byteOffset":0,"componentType":5126,"count":251,"max":[1,1,1],"min":[0.9999997019767761,0.9999997615814209,0.9999997019767761],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_Yawn_2","type":"VEC3"},{"bufferView":414,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0779564380645752,2.1093409061431885,0.000003814697265625],"min":[0.07794487476348877,2.109320878982544,-0.0000133514404296875],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Walking_0","type":"VEC3"},{"bufferView":565,"byteOffset":0,"componentType":5126,"count":30,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_Walking_1","type":"VEC4"},{"bufferView":145,"byteOffset":0,"componentType":5126,"count":501,"max":[0.0000016652047634124756,12.089051246643066,0],"min":[-9.201467037200928e-7,12.089046478271484,-0.000004954636096954346],"name":"accessor_buffer_mixamorig:LeftToeBase_Idle_0","type":"VEC3"},{"bufferView":511,"byteOffset":0,"componentType":5126,"count":30,"max":[0.23224323987960815,0,0.03853878751397133,0.973365306854248],"min":[0.2261386215686798,-0.003985876217484474,0.037501487880945206,0.9718858003616333],"name":"accessor_buffer_mixamorig:RightHandRing2_Walking_1","type":"VEC4"},{"bufferView":603,"byteOffset":0,"componentType":5126,"count":251,"max":[8.333333333333314],"min":[0],"name":"accessor_buffer_Yawn_time_0","type":"SCALAR"},{"bufferView":347,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.7125468254089355,0],"min":[-6.258487701416016e-7,4.7125468254089355,-5.960464477539063e-8],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_0","type":"VEC3"},{"bufferView":615,"byteOffset":0,"componentType":5126,"count":251,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Yawn_2","type":"VEC3"},{"bufferView":784,"byteOffset":0,"componentType":5126,"count":251,"max":[0.003368377685546875,1.9062774181365967,0.0000209808349609375],"min":[0.0033315420150756836,1.9062366485595703,-0.0000209808349609375],"name":"accessor_buffer_mixamorig:LeftHandIndex3_Yawn_0","type":"VEC3"},{"bufferView":456,"byteOffset":0,"componentType":5126,"count":30,"max":[0,2.0025761127471924,0.00000286102294921875],"min":[-0.009865224361419678,2.0025548934936523,-0.000011920928955078125],"name":"accessor_buffer_mixamorig:LeftHandIndex2_Walking_0","type":"VEC3"},{"bufferView":670,"byteOffset":0,"componentType":5126,"count":251,"max":[0,6.091211318969727,0.09325706958770752],"min":[-2.381869077682495,6.0911760330200195,0.09322134405374527],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Yawn_0","type":"VEC3"},{"bufferView":597,"byteOffset":0,"componentType":5126,"count":30,"max":[0.00000476837158203125,19.023365020751953,0.000006198883056640625],"min":[-0.00001049041748046875,19.023338317871094,-0.000010013580322265625],"name":"accessor_buffer_mixamorig:LeftHand_Walking_0","type":"VEC3"},{"bufferView":497,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000003576278687,1.0000001192092896,1.000000238418579],"min":[1.0000001192092896,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_Walking_2","type":"VEC3"},{"bufferView":401,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5249916315078735,0.000022089123376645148],"min":[-0.006230756640434265,1.5249916315078735,0.000022089123376645148],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_0","type":"VEC3"},{"bufferView":160,"byteOffset":0,"componentType":5126,"count":501,"max":[0.000001087784767150879,41.850101470947266,0.0000016391277313232422],"min":[-9.387731552124023e-7,41.85007858276367,-0.000001519918441772461],"name":"accessor_buffer_mixamorig:RightFoot_Idle_0","type":"VEC3"},{"bufferView":79,"byteOffset":0,"componentType":5126,"count":501,"max":[1.4313545227050781,1.9488978385925293,1.3737468719482422],"min":[1.4313373565673828,1.9488682746887207,1.3737294673919678],"name":"accessor_buffer_mixamorig:RightHandThumb1_Idle_0","type":"VEC3"},{"bufferView":292,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"min":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":473,"byteOffset":0,"componentType":5126,"count":30,"max":[1.000000238418579,1,1.0000001192092896],"min":[0.9999998807907104,0.9999997019767761,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandIndex1_Walking_2","type":"VEC3"},{"bufferView":2,"byteOffset":16,"componentType":5126,"count":3340,"max":[1,0.49809977412223816,0.31396016478538513,0.20796984434127808],"min":[0.30062898993492126,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_1","type":"VEC4"},{"bufferView":178,"byteOffset":0,"componentType":5126,"count":501,"max":[0,2.002359628677368,0.00000667572021484375],"min":[-0.03691387176513672,2.0023269653320312,-0.0000133514404296875],"name":"accessor_buffer_mixamorig:RightHandMiddle4_Idle_0","type":"VEC3"},{"bufferView":124,"byteOffset":0,"componentType":5126,"count":501,"max":[0.6151828765869141,5.9878010749816895,0],"min":[0.6151666641235352,5.987770080566406,-0.25215625762939453],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Idle_0","type":"VEC3"},{"bufferView":358,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"min":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_2","type":"VEC3"},{"bufferView":342,"byteOffset":0,"componentType":5126,"count":2,"max":[0,9.422998405866911e-13,0,1],"min":[-5.029141902923584e-8,9.422998405866911e-13,-2.3584922209662906e-11,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_1","type":"VEC4"},{"bufferView":102,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.0000003576278687,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandPinky3_Idle_2","type":"VEC3"},{"bufferView":293,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.77089500427246,0.000006812736501160543],"min":[-2.460183168295771e-7,22.77089500427246,0.000006812736501160543],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_0","type":"VEC3"},{"bufferView":107,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0.0031102183274924755,0.08817757666110992,0.9997286200523376],"min":[-0.05645063519477844,-0.010276895016431808,-0.04902150109410286,0.9950225949287415],"name":"accessor_buffer_mixamorig:Spine_Idle_1","type":"VEC4"},{"bufferView":763,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_Yawn_0","type":"VEC3"},{"bufferView":333,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-9.267012046620948e-8,-5.819203607870804e-8,-6.402842700481415e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_1","type":"VEC4"},{"bufferView":18,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999998211860657,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandThumb3_Idle_2","type":"VEC3"},{"bufferView":507,"byteOffset":0,"componentType":5126,"count":30,"max":[3.513521909713745,8.987099647521973,0],"min":[3.5135202407836914,8.987060546875,-0.09783817827701569],"name":"accessor_buffer_mixamorig:LeftShoulder_Walking_0","type":"VEC3"},{"bufferView":310,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"min":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_2","type":"VEC3"},{"bufferView":478,"byteOffset":0,"componentType":5126,"count":30,"max":[0.14352749288082123,0,0,0.9572403430938721],"min":[0.10630404204130173,-0.23074835538864136,-0.297109454870224,0.9216709136962891],"name":"accessor_buffer_mixamorig:RightHandThumb1_Walking_1","type":"VEC4"},{"bufferView":518,"byteOffset":0,"componentType":5126,"count":30,"max":[1.0000001192092896,1.000000238418579,1.0000003576278687],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftArm_Walking_2","type":"VEC3"},{"bufferView":724,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.8726612329483032,1.3422750234603882],"min":[-1.3880729675292969,1.8726229667663574,1.3422346115112305],"name":"accessor_buffer_mixamorig:LeftHandThumb1_Yawn_0","type":"VEC3"},{"bufferView":761,"byteOffset":0,"componentType":5126,"count":251,"max":[0,0,0.0509750097990036,0.9808171391487122],"min":[-0.2407776117324829,-0.07764491438865662,0.018029099330306053,0.9682146310806274],"name":"accessor_buffer_mixamorig:LeftLeg_Yawn_1","type":"VEC4"},{"bufferView":5,"byteOffset":0,"componentType":5121,"count":1176,"max":[2,1,0,0],"min":[2,0,0,0],"name":"accessor_buffer_F010_Saber.001_skin_0","type":"VEC4"},{"bufferView":299,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"min":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_0","type":"VEC3"},{"bufferView":159,"byteOffset":0,"componentType":5126,"count":501,"max":[1.000000238418579,1.000000238418579,1.000000238418579],"min":[0.9999997615814209,0.9999996423721313,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandRing3_Idle_2","type":"VEC3"},{"bufferView":762,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999997019767761,0.9999997615814209,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftLeg_Yawn_2","type":"VEC3"},{"bufferView":80,"byteOffset":0,"componentType":5126,"count":501,"max":[0.123526431620121,0,0,0.9682797789573669],"min":[0.12280227243900299,-0.0739516094326973,-0.21202754974365234,0.9667503833770752],"name":"accessor_buffer_mixamorig:RightHandThumb1_Idle_1","type":"VEC4"},{"bufferView":448,"byteOffset":0,"componentType":5126,"count":30,"max":[1.115840717602623e-7,0.00000806618481874466,0,1],"min":[6.903427873794499e-8,0.000008041039109230042,-1.7695128917694092e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_Walking_1","type":"VEC4"},{"bufferView":595,"byteOffset":0,"componentType":5126,"count":30,"max":[0.2323061227798462,0,0,0.9933724999427795],"min":[0.03818628191947937,-0.0068419924937188625,-0.10819492489099503,0.9683595895767212],"name":"accessor_buffer_mixamorig:RightHandIndex1_Walking_1","type":"VEC4"},{"bufferView":164,"byteOffset":0,"componentType":5126,"count":501,"max":[0,0.018828069791197777,0.016310350969433784,0.9792515635490417],"min":[-0.3146636486053467,-0.0798603817820549,-0.004793552681803703,0.9491125345230103],"name":"accessor_buffer_mixamorig:LeftLeg_Idle_1","type":"VEC4"},{"bufferView":331,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_2","type":"VEC3"},{"bufferView":669,"byteOffset":0,"componentType":5126,"count":251,"max":[1,1.000000238418579,1.0000003576278687],"min":[0.9999997019767761,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_Yawn_2","type":"VEC3"},{"bufferView":582,"byteOffset":0,"componentType":5126,"count":30,"max":[0,2.1517763137817383,0],"min":[-0.018165111541748047,2.151749610900879,-0.00003123283386230469],"name":"accessor_buffer_mixamorig:LeftHandThumb2_Walking_0","type":"VEC3"},{"bufferView":250,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1.0000001192092896],"min":[1,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_2","type":"VEC3"},{"bufferView":355,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999997019767761],"min":[1,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_2","type":"VEC3"},{"bufferView":307,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:Spine_TPose_2","type":"VEC3"},{"bufferView":796,"byteOffset":0,"componentType":5126,"count":251,"max":[0.000024199485778808594,19.023365020751953,0.000023245811462402344],"min":[-0.000029385089874267578,19.02332878112793,-0.000025510787963867188],"name":"accessor_buffer_mixamorig:LeftHand_Yawn_0","type":"VEC3"},{"bufferView":665,"byteOffset":0,"componentType":5126,"count":251,"max":[0.5121956467628479,0.06007227301597595,0.21186907589435577,0.9831737279891968],"min":[0.023686129599809647,-0.014648482203483582,0.11688109487295151,0.8317364454269409],"name":"accessor_buffer_mixamorig:RightHandRing1_Yawn_1","type":"VEC4"},{"bufferView":699,"byteOffset":0,"componentType":5126,"count":251,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandPinky3_Yawn_2","type":"VEC3"},{"bufferView":268,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_2","type":"VEC3"},{"bufferView":215,"byteOffset":0,"componentType":5126,"count":2,"max":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"min":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_0","type":"VEC3"},{"bufferView":787,"byteOffset":0,"componentType":5126,"count":251,"max":[0,1.8280898332595825,0],"min":[-0.006550908088684082,1.8280510902404785,-0.000036716461181640625],"name":"accessor_buffer_mixamorig:LeftHandPinky2_Yawn_0","type":"VEC3"},{"bufferView":334,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"min":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_2","type":"VEC3"},{"bufferView":126,"byteOffset":0,"componentType":5126,"count":501,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[0.9999997019767761,0.9999997019767761,0.9999996423721313],"name":"accessor_buffer_mixamorig:RightHandMiddle1_Idle_2","type":"VEC3"},{"bufferView":554,"byteOffset":0,"componentType":5126,"count":30,"max":[1,1.000000238418579,1.0000001192092896],"min":[0.9999997615814209,0.9999998807907104,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightHandIndex3_Walking_2","type":"VEC3"},{"bufferView":444,"byteOffset":0,"componentType":5126,"count":30,"max":[0.0000014028046280145645,20.85727882385254,0.5804540514945984],"min":[-8.977949619293213e-7,20.857229232788086,0.5804494023323059],"name":"accessor_buffer_mixamorig:HeadTop_End_Walking_0","type":"VEC3"},{"bufferView":541,"byteOffset":0,"componentType":5126,"count":30,"max":[0,0.026020700111985207,0.005574364215135574,0.9995712637901306],"min":[-0.029957721009850502,-0.04263531044125557,-0.0220379326492548,0.9988893866539001],"name":"accessor_buffer_mixamorig:Spine2_Walking_1","type":"VEC4"},{"bufferView":480,"byteOffset":0,"componentType":5126,"count":30,"max":[0.006523609161376953,1.6352403163909912,0.00001621246337890625],"min":[0.006498813629150391,1.6352155208587646,-0.00000762939453125],"name":"accessor_buffer_mixamorig:LeftHandIndex4_Walking_0","type":"VEC3"},{"bufferView":890,"byteOffset":0,"componentType":5126,"count":2,"max":[0.019991455599665642,0,0.05151980370283127,0.9982961416244507],"min":[0.019991455599665642,-0.018730632960796356,0.05151980370283127,0.9982961416244507],"name":"accessor_buffer_mixamorig:RightHand_TPose_1","type":"VEC4"},{"bufferView":889,"byteOffset":0,"componentType":5126,"count":2,"max":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"min":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"name":"accessor_buffer_mixamorig:RightHand_TPose_0","type":"VEC3"},{"bufferView":870,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1],"min":[1,1.0000001192092896,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_2","type":"VEC3"},{"bufferView":828,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1.0000001192092896],"min":[1,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_2","type":"VEC3"},{"bufferView":917,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005565229366766289,0,0.9994112253189087],"min":[-1.9569284859244362e-7,0.00005565229366766289,-0.034311242401599884,0.9994112253189087],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_1","type":"VEC4"},{"bufferView":809,"byteOffset":0,"componentType":5126,"count":2,"max":[4.656612517806025e-8,0,0,1],"min":[4.656612517806025e-8,-1.9324940581100236e-7,-4.982575063650074e-8,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_1","type":"VEC4"},{"bufferView":859,"byteOffset":0,"componentType":5126,"count":2,"max":[0,7.4837236404418945,0],"min":[-5.960464477539063e-8,7.4837236404418945,-0.0000017881393432617188],"name":"accessor_buffer_mixamorig:LeftArm_TPose_0","type":"VEC3"},{"bufferView":808,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8846017122268677,0],"min":[-0.0597844123840332,1.8846017122268677,-0.00000426173210144043],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_0","type":"VEC3"},{"bufferView":843,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1.0000001192092896],"min":[1,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_2","type":"VEC3"},{"bufferView":975,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1],"min":[1,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_2","type":"VEC3"},{"bufferView":813,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"min":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_2","type":"VEC3"},{"bufferView":829,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.7125468254089355,0],"min":[-6.258487701416016e-7,4.7125468254089355,-5.960464477539063e-8],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_0","type":"VEC3"},{"bufferView":937,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.0912089347839355,0.09324643015861511],"min":[-2.381847381591797,6.0912089347839355,0.09324643015861511],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_0","type":"VEC3"},{"bufferView":858,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightArm_TPose_2","type":"VEC3"},{"bufferView":893,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0011933766072615981,0,0.9998803734779358],"min":[-0.000009156999112747144,0.0011933766072615981,-0.015421011485159397,0.9998803734779358],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_1","type":"VEC4"},{"bufferView":853,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0023322105407715,0],"min":[-0.03690838813781738,2.0023322105407715,-0.0000020437873899936676],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":884,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000016051130842242856,0,0.9999784827232361,0.0061686099506914616],"min":[0.0000016051130842242856,-0.0022346421610563993,0.9999784827232361,0.0061686099506914616],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_1","type":"VEC4"},{"bufferView":812,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00034277912345714867,0,0.9999790191650391],"min":[-0.0000010370887366661918,0.00034277912345714867,-0.0064829993061721325,0.9999790191650391],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_1","type":"VEC4"},{"bufferView":816,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999998807907104],"min":[1,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_2","type":"VEC3"},{"bufferView":831,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_2","type":"VEC3"},{"bufferView":908,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999995231628418],"min":[-0.0000017708856603348977,-0.00008915702346712351,-0.0010598038788884878,0.9999995231628418],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_1","type":"VEC4"},{"bufferView":874,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0025572776794434,0],"min":[-0.009857624769210815,2.0025572776794434,-0.000008842733222991228],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_0","type":"VEC3"},{"bufferView":924,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_2","type":"VEC3"},{"bufferView":857,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9826892614364624],"min":[-0.1844879388809204,-0.0005821919767186046,-0.016901638358831406,0.9826892614364624],"name":"accessor_buffer_mixamorig:RightArm_TPose_1","type":"VEC4"},{"bufferView":933,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:Spine_TPose_2","type":"VEC3"},{"bufferView":847,"byteOffset":0,"componentType":5126,"count":2,"max":[0,41.84932327270508,0],"min":[-1.1807060218416154e-7,41.84932327270508,-2.8172507882118225e-7],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_0","type":"VEC3"},{"bufferView":804,"byteOffset":12,"componentType":5126,"count":1109,"max":[0.9993376135826111,0.9996159672737122,0.9999437928199768],"min":[-0.9993394613265991,-0.9995570182800293,-0.9992420077323914],"name":"accessor_buffer_F010_Saber.003_1","type":"VEC3"},{"bufferView":987,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Hips_TPose_2","type":"VEC3"},{"bufferView":977,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.012829817831516266,0.9995352625846863],"min":[-0.02764846757054329,-0.000389853521483019,0.012829817831516266,0.9995352625846863],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_1","type":"VEC4"},{"bufferView":834,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_2","type":"VEC3"},{"bufferView":914,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.833076872046149e-8,7.194104423291492e-9,1],"min":[-4.388131102928128e-8,4.833076872046149e-8,7.194104423291492e-9,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":972,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1.0000001192092896],"min":[1,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_2","type":"VEC3"},{"bufferView":900,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"min":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":935,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.009517651982605457,0.9999545812606812],"min":[-0.000002889829829655355,-0.00046613236190751195,0.009517651982605457,0.9999545812606812],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":921,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_TPose_2","type":"VEC3"},{"bufferView":804,"byteOffset":0,"componentType":5126,"count":1109,"max":[11.429483413696289,164.35842895507812,10.030672073364258],"min":[-11.429343223571777,130.6600341796875,-14.70002269744873],"name":"accessor_buffer_F010_Saber.003_0","type":"VEC3"},{"bufferView":869,"byteOffset":0,"componentType":5126,"count":2,"max":[1.7445827893425303e-7,0,3.6372512113302946e-8,1],"min":[1.7445827893425303e-7,-6.26357206101602e-8,3.6372512113302946e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_1","type":"VEC4"},{"bufferView":860,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.001648154342547059,0.014273405075073242,0.9826878309249878],"min":[-0.1847110539674759,0.001648154342547059,0.014273405075073242,0.9826878309249878],"name":"accessor_buffer_mixamorig:LeftArm_TPose_1","type":"VEC4"},{"bufferView":810,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000000238418579,1,1.0000001192092896],"min":[1.000000238418579,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_2","type":"VEC3"},{"bufferView":986,"byteOffset":0,"componentType":5126,"count":2,"max":[5.5535473109102895e-8,2.9428024461708446e-9,0,1],"min":[5.5535473109102895e-8,2.9428024461708446e-9,-0.000005548599347093841,1],"name":"accessor_buffer_mixamorig:Hips_TPose_1","type":"VEC4"},{"bufferView":841,"byteOffset":0,"componentType":5126,"count":2,"max":[0.8905045986175537,5.982408046722412,0],"min":[0.8905045986175537,5.982408046722412,-0.24305573105812073],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_0","type":"VEC3"},{"bufferView":830,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-3.306195139884949e-8,-0.000008229748345911503,-2.3865142750878476e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_1","type":"VEC4"},{"bufferView":984,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_2","type":"VEC3"},{"bufferView":913,"byteOffset":0,"componentType":5126,"count":2,"max":[0.029511988162994385,2.085664749145508,0],"min":[0.029511988162994385,2.085664749145508,-0.000003653607564046979],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":953,"byteOffset":0,"componentType":5126,"count":2,"max":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"min":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_1","type":"VEC4"},{"bufferView":811,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"min":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_0","type":"VEC3"},{"bufferView":856,"byteOffset":0,"componentType":5126,"count":2,"max":[8.642673492431641e-7,7.483717918395996,0],"min":[8.642673492431641e-7,7.483717918395996,-0.0000068247318267822266],"name":"accessor_buffer_mixamorig:RightArm_TPose_0","type":"VEC3"},{"bufferView":922,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.7723331451416,0.000002205953933298588],"min":[-0.00000198512316273991,22.7723331451416,0.000002205953933298588],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_0","type":"VEC3"},{"bufferView":868,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.4578983783721924,0],"min":[-0.014494240283966064,1.4578983783721924,-0.000007362202268268447],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_0","type":"VEC3"},{"bufferView":911,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"min":[-1.9003864792921377e-7,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_1","type":"VEC4"},{"bufferView":938,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04963767156004906,0.9986410140991211],"min":[-0.01586439274251461,-0.0007755132974125445,0.04963767156004906,0.9986410140991211],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_1","type":"VEC4"},{"bufferView":850,"byteOffset":0,"componentType":5126,"count":2,"max":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"min":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"name":"accessor_buffer_mixamorig:Head_TPose_0","type":"VEC3"},{"bufferView":943,"byteOffset":0,"componentType":5126,"count":2,"max":[1.4313478469848633,1.948877215385437,1.3737415075302124],"min":[1.4313478469848633,1.948877215385437,1.3737415075302124],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_0","type":"VEC3"},{"bufferView":930,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":901,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9782497882843018,0],"min":[-0.004050195217132568,1.9782497882843018,-0.000013029115507379174],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_0","type":"VEC3"},{"bufferView":941,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000019077392607869115,0,0.006663992069661617,0.9999777674674988],"min":[0.0000019077392607869115,-0.00024382353876717389,0.006663992069661617,0.9999777674674988],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_1","type":"VEC4"},{"bufferView":991,"byteOffset":0,"componentType":5126,"count":2,"max":[5.414642258866342e-13,8.022480964660645,0],"min":[5.414642258866342e-13,8.022480964660645,-5.364418029785156e-7],"name":"accessor_buffer_mixamorig:Spine1_TPose_0","type":"VEC3"},{"bufferView":883,"byteOffset":0,"componentType":5126,"count":2,"max":[6.5092010498046875,0,0],"min":[6.5092010498046875,-3.8089029788970947,-0.3193536400794983],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_0","type":"VEC3"},{"bufferView":915,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"min":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":837,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_2","type":"VEC3"},{"bufferView":970,"byteOffset":0,"componentType":5126,"count":2,"max":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"min":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_0","type":"VEC3"},{"bufferView":998,"byteOffset":0,"componentType":5126,"count":2,"max":[0.29314252734184265,0.06225592643022537,0,0.9538480043411255],"min":[0.29314252734184265,0.06225592643022537,-0.019128000363707542,0.9538480043411255],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_1","type":"VEC4"},{"bufferView":848,"byteOffset":0,"componentType":5126,"count":2,"max":[0.49219897389411926,0.06156006455421448,0,0.8671404123306274],"min":[0.49219897389411926,0.06156006455421448,-0.04492250457406044,0.8671404123306274],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_1","type":"VEC4"},{"bufferView":997,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.033415794372559,3.5762786865234375e-7],"min":[-6.239861249923706e-7,12.033415794372559,3.5762786865234375e-7],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_0","type":"VEC3"},{"bufferView":974,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00083109550178051,0,0.998789370059967],"min":[-0.020914429798722267,0.00083109550178051,-0.04451649263501167,0.998789370059967],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_1","type":"VEC4"},{"bufferView":903,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_2","type":"VEC3"},{"bufferView":946,"byteOffset":0,"componentType":5126,"count":2,"max":[0,10.314631462097168,2.384185791015625e-7],"min":[-1.632623376768283e-11,10.314631462097168,2.384185791015625e-7],"name":"accessor_buffer_mixamorig:Neck_TPose_0","type":"VEC3"},{"bufferView":897,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_2","type":"VEC3"},{"bufferView":907,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009776592254638672,1.9066510200500488,0],"min":[0.009776592254638672,1.9066510200500488,-0.000011112497304566205],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_0","type":"VEC3"},{"bufferView":887,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999953508377075],"min":[-0.0000019045912722504,-0.0002899357641581446,-0.0030352880712598562,0.9999953508377075],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_1","type":"VEC4"},{"bufferView":971,"byteOffset":0,"componentType":5126,"count":2,"max":[8.172354171165352e-8,0.000008062284905463457,0,1],"min":[8.172354171165352e-8,0.000008062284905463457,-1.2136295524101115e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_1","type":"VEC4"},{"bufferView":840,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"min":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_2","type":"VEC3"},{"bufferView":892,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015063196420669556,2.0928525924682617,0],"min":[0.015063196420669556,2.0928525924682617,-0.00001477246405556798],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_0","type":"VEC3"},{"bufferView":894,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999997019767761],"min":[1,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_2","type":"VEC3"},{"bufferView":931,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.854499816894531,0],"min":[-4.3809234018254983e-11,6.854499816894531,-0.5485977530479431],"name":"accessor_buffer_mixamorig:Spine_TPose_0","type":"VEC3"},{"bufferView":875,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"min":[-9.933781939253095e-7,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_1","type":"VEC4"},{"bufferView":882,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"min":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_2","type":"VEC3"},{"bufferView":969,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"min":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_2","type":"VEC3"},{"bufferView":952,"byteOffset":0,"componentType":5126,"count":2,"max":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"min":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_0","type":"VEC3"},{"bufferView":815,"byteOffset":0,"componentType":5126,"count":2,"max":[5.549511570279719e-7,0,0.0010957049671560526,0.9999994039535522],"min":[5.549511570279719e-7,-0.00003228561763535254,0.0010957049671560526,0.9999994039535522],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_1","type":"VEC4"},{"bufferView":976,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.04969024658203,8.68749339133501e-9],"min":[-3.5517268770490773e-7,45.04969024658203,8.68749339133501e-9],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_0","type":"VEC3"},{"bufferView":955,"byteOffset":0,"componentType":5126,"count":2,"max":[0.012762725353240967,1.3817871809005737,0],"min":[0.012762725353240967,1.3817871809005737,-0.000005348862032406032],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_0","type":"VEC3"},{"bufferView":993,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_2","type":"VEC3"},{"bufferView":805,"byteOffset":0,"componentType":5123,"count":4038,"max":[1108],"min":[0],"name":"accessor_buffer_F010_Saber.003_4","type":"SCALAR"},{"bufferView":960,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_2","type":"VEC3"},{"bufferView":942,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_2","type":"VEC3"},{"bufferView":934,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2484662532806396,0.000009948620572686195],"min":[-0.010961860418319702,2.2484662532806396,0.000009948620572686195],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":867,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_2","type":"VEC3"},{"bufferView":804,"byteOffset":24,"componentType":5126,"count":1109,"max":[0.9941849112510681,0.6996400058269501],"min":[0.024950888007879257,0.007812023162841797],"name":"accessor_buffer_F010_Saber.003_2","type":"VEC2"},{"bufferView":872,"byteOffset":0,"componentType":5126,"count":2,"max":[0.4910941421985626,0,0.04505223408341408,0.8677260875701904],"min":[0.4910941421985626,-0.062034837901592255,0.04505223408341408,0.8677260875701904],"name":"accessor_buffer_mixamorig:RightFoot_TPose_1","type":"VEC4"},{"bufferView":833,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"min":[-8.061967378125701e-7,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_1","type":"VEC4"},{"bufferView":906,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999998211860657],"min":[1,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_2","type":"VEC3"},{"bufferView":838,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5351991653442383,0.000011235475540161133],"min":[-0.18289971351623535,1.5351991653442383,0.000011235475540161133],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_0","type":"VEC3"},{"bufferView":985,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"min":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"name":"accessor_buffer_mixamorig:Hips_TPose_0","type":"VEC3"},{"bufferView":1002,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999999403953552],"min":[0.9999999403953552,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightLeg_TPose_2","type":"VEC3"},{"bufferView":898,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2824809551239014,0.00000463516335003078],"min":[-0.018551677465438843,2.2824809551239014,0.00000463516335003078],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":849,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"min":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_2","type":"VEC3"},{"bufferView":839,"byteOffset":0,"componentType":5126,"count":2,"max":[3.725291364276018e-8,0,3.259629011154175e-8,1],"min":[3.725291364276018e-8,-5.58793766813892e-9,3.259629011154175e-8,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_1","type":"VEC4"},{"bufferView":845,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00001167778464150615,0,0.9999808073043823,0],"min":[0.00001167778464150615,-0.0004857034655287862,0.9999808073043823,-0.006179941818118095],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_1","type":"VEC4"},{"bufferView":855,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"min":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":1005,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":982,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8726567029953003,1.3422273397445679],"min":[-1.3880571126937866,1.8726567029953003,1.3422273397445679],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_0","type":"VEC3"},{"bufferView":876,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"min":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_2","type":"VEC3"},{"bufferView":950,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0008116317912936211,0,0.9999305605888367],"min":[-0.0000027277535536995856,0.0008116317912936211,-0.011757179163396358,0.9999305605888367],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":966,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_2","type":"VEC3"},{"bufferView":988,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.77089500427246,0.000006812736501160543],"min":[-2.460183168295771e-7,22.77089500427246,0.000006812736501160543],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_0","type":"VEC3"},{"bufferView":825,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.000000238418579,1],"min":[0.9999999403953552,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_2","type":"VEC3"},{"bufferView":904,"byteOffset":0,"componentType":5126,"count":2,"max":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"min":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_0","type":"VEC3"},{"bufferView":863,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.464207682351116e-7,-8.914983595786907e-8,-1.517519194749184e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_1","type":"VEC4"},{"bufferView":939,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,0.9999999403953552],"min":[1.0000001192092896,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_2","type":"VEC3"},{"bufferView":862,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9040616750717163,0],"min":[-0.044958412647247314,1.9040616750717163,-0.000012791395420208573],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_0","type":"VEC3"},{"bufferView":885,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001250505447388,0.9999999403953552,1.000000238418579],"min":[1.0001250505447388,0.9999999403953552,1.000000238418579],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_2","type":"VEC3"},{"bufferView":827,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.3662607873120578e-8,-2.0191042438000295e-7,-1.5510249795624986e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_1","type":"VEC4"},{"bufferView":864,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_2","type":"VEC3"},{"bufferView":983,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"min":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_1","type":"VEC4"},{"bufferView":994,"byteOffset":0,"componentType":5126,"count":2,"max":[2.112320899963379,5.151422500610352,0],"min":[2.112320899963379,5.151422500610352,-0.101677805185318],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_0","type":"VEC3"},{"bufferView":871,"byteOffset":0,"componentType":5126,"count":2,"max":[2.655433490872383e-7,41.85009002685547,0],"min":[2.655433490872383e-7,41.85009002685547,-1.4621764421463013e-7],"name":"accessor_buffer_mixamorig:RightFoot_TPose_0","type":"VEC3"},{"bufferView":891,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"min":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHand_TPose_2","type":"VEC3"},{"bufferView":832,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1800546646118164,0],"min":[-0.017888188362121582,2.1800546646118164,-0.000005649722879752517],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_0","type":"VEC3"},{"bufferView":807,"byteOffset":0,"componentType":5126,"count":2,"max":[0.03333333333333333],"min":[0],"name":"accessor_buffer_TPose_time_0","type":"SCALAR"},{"bufferView":851,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,5.4569682106375694e-12,1],"min":[-3.749335064640036e-9,-6.563448747235262e-21,5.4569682106375694e-12,1],"name":"accessor_buffer_mixamorig:Head_TPose_1","type":"VEC4"},{"bufferView":814,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"min":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_0","type":"VEC3"},{"bufferView":949,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"min":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":945,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_2","type":"VEC3"},{"bufferView":979,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.089044570922852,1.7881393432617188e-7],"min":[-4.116445779800415e-7,12.089044570922852,1.7881393432617188e-7],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_0","type":"VEC3"},{"bufferView":865,"byteOffset":0,"componentType":5126,"count":2,"max":[0,8.988426208496094,0],"min":[-3.513521432876587,8.988426208496094,-0.11455392837524414],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_0","type":"VEC3"},{"bufferView":947,"byteOffset":0,"componentType":5126,"count":2,"max":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"min":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"name":"accessor_buffer_mixamorig:Neck_TPose_1","type":"VEC4"},{"bufferView":923,"byteOffset":0,"componentType":5126,"count":2,"max":[4.818217576030293e-7,0,4.313407657718926e-7,1],"min":[4.818217576030293e-7,-0.00015852972865104675,4.313407657718926e-7,1],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_1","type":"VEC4"},{"bufferView":990,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999997615814209],"min":[1,1.0000001192092896,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_2","type":"VEC3"},{"bufferView":846,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001243352890015,0.9999998807907104,1.000003695487976],"min":[1.0001243352890015,0.9999998807907104,1.000003695487976],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_2","type":"VEC3"},{"bufferView":822,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":881,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000014512252164422534,0.0003296945069450885,0,0.9999457001686096],"min":[0.0000014512252164422534,0.0003296945069450885,-0.010418280959129333,0.9999457001686096],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_1","type":"VEC4"},{"bufferView":824,"byteOffset":0,"componentType":5126,"count":2,"max":[0.000002737616568992962,0,0,0.9967700242996216],"min":[0.000002737616568992962,-0.0000792778519098647,-0.08030900359153748,0.9967700242996216],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_1","type":"VEC4"},{"bufferView":909,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,1],"min":[1.0000001192092896,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_2","type":"VEC3"},{"bufferView":1006,"byteOffset":0,"componentType":5126,"count":65,"max":[1.0011157989501953,1.0004726648330688,0.3728281855583191,0,0.1791374236345291,1.0011159181594849,0.9939086437225342,0,0.9973942041397095,0.9979981184005737,1.0011157989501953,0,36.08419418334961,95.18425750732422,139.18643188476562,1],"min":[-1.0009628534317017,-1.000463843345642,-0.3957006633281708,0,-0.1620984524488449,-1.0005624294281006,-0.9972899556159973,0,-0.9975388050079346,-0.3510676324367523,-0.1874166578054428,0,-40.01988983154297,-158.2681884765625,-8.502774238586426,1],"name":"accessor_buffer_IBM_F010_Saber_Hair.001_skin_0","type":"MAT4"},{"bufferView":944,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21339857578277588,0,0,0.9383423328399658],"min":[0.21339857578277588,-0.06705669313669205,-0.26358723640441895,0.9383423328399658],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_1","type":"VEC4"},{"bufferView":896,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.80437906032391e-23,0,1],"min":[-8.673616862896153e-19,6.80437906032391e-23,-1.8189894035458565e-12,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_1","type":"VEC4"},{"bufferView":964,"byteOffset":0,"componentType":5126,"count":2,"max":[1.2692300335737094e-11,9.168559074401855,0],"min":[1.2692300335737094e-11,9.168559074401855,-4.76837158203125e-7],"name":"accessor_buffer_mixamorig:Spine2_TPose_0","type":"VEC3"},{"bufferView":927,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998807907104,0.9999999403953552],"min":[1,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_2","type":"VEC3"},{"bufferView":973,"byteOffset":0,"componentType":5126,"count":2,"max":[2.289442539215088,5.801696300506592,0.050649963319301605],"min":[2.289442539215088,5.801696300506592,0.050649963319301605],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_0","type":"VEC3"},{"bufferView":826,"byteOffset":0,"componentType":5126,"count":2,"max":[0.006504923105239868,1.635219693183899,0],"min":[0.006504923105239868,1.635219693183899,-0.00002377049531787634],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_0","type":"VEC3"},{"bufferView":861,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,1],"min":[0.9999998807907104,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftArm_TPose_2","type":"VEC3"},{"bufferView":806,"byteOffset":0,"componentType":5121,"count":1109,"max":[5,31,32,32],"min":[5,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_0","type":"VEC4"},{"bufferView":980,"byteOffset":0,"componentType":5126,"count":2,"max":[0.291592001914978,0,0.018840743228793144,0.954366147518158],"min":[0.291592001914978,-0.06168048828840256,0.018840743228793144,0.954366147518158],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_1","type":"VEC4"},{"bufferView":1003,"byteOffset":0,"componentType":5126,"count":2,"max":[0.615178108215332,5.987785816192627,0],"min":[0.615178108215332,5.987785816192627,-0.2521420121192932],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":836,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.034996457397937775,0,0.9979900121688843],"min":[-0.019062332808971405,0.034996457397937775,-0.04927309229969978,0.9979900121688843],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_1","type":"VEC4"},{"bufferView":965,"byteOffset":0,"componentType":5126,"count":2,"max":[0,9.422998405866911e-13,0,1],"min":[-5.029141902923584e-8,9.422998405866911e-13,-2.3584922209662906e-11,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_1","type":"VEC4"},{"bufferView":880,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"min":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_0","type":"VEC3"},{"bufferView":936,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[1.0000001192092896,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":804,"byteOffset":32,"componentType":5126,"count":1109,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_F010_Saber.003_3","type":"VEC3"},{"bufferView":879,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_2","type":"VEC3"},{"bufferView":995,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.05077396705746651,0.998155415058136],"min":[-0.014275818131864071,-0.030067145824432373,0.05077396705746651,0.998155415058136],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_1","type":"VEC4"},{"bufferView":978,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,1],"min":[1.0000001192092896,0.9999998211860657,1],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_2","type":"VEC3"},{"bufferView":1004,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.003121189074590802,0,0.9987351894378662],"min":[-0.02078564278781414,0.003121189074590802,-0.04567611962556839,0.9987351894378662],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":928,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.933863162994385,0],"min":[-0.6209797859191895,5.933863162994385,-0.1895589530467987],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":886,"byteOffset":0,"componentType":5126,"count":2,"max":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"min":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_0","type":"VEC3"},{"bufferView":956,"byteOffset":0,"componentType":5126,"count":2,"max":[5.20922753821651e-8,0,1.4510078472085297e-8,1],"min":[5.20922753821651e-8,-1.1215498751937503e-8,1.4510078472085297e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_1","type":"VEC4"},{"bufferView":957,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_2","type":"VEC3"},{"bufferView":895,"byteOffset":0,"componentType":5126,"count":2,"max":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"min":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_0","type":"VEC3"},{"bufferView":948,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Neck_TPose_2","type":"VEC3"},{"bufferView":918,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,1,0.9999998807907104],"min":[0.9999997615814209,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_2","type":"VEC3"},{"bufferView":916,"byteOffset":0,"componentType":5126,"count":2,"max":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"min":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_0","type":"VEC3"},{"bufferView":932,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.000005544060059037292,0.9992028474807739],"min":[-0.03992169722914696,-2.2444967839874153e-7,0.000005544060059037292,0.9992028474807739],"name":"accessor_buffer_mixamorig:Spine_TPose_1","type":"VEC4"},{"bufferView":852,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Head_TPose_2","type":"VEC3"},{"bufferView":968,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-9.267012046620948e-8,-5.819203607870804e-8,-6.402842700481415e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_1","type":"VEC4"},{"bufferView":940,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5249916315078735,0.000022089123376645148],"min":[-0.006230756640434265,1.5249916315078735,0.000022089123376645148],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_0","type":"VEC3"},{"bufferView":878,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.010770494118332863,0,0.9985118508338928],"min":[-0.020383575931191444,0.010770494118332863,-0.049423426389694214,0.9985118508338928],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_1","type":"VEC4"},{"bufferView":996,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_2","type":"VEC3"},{"bufferView":954,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"min":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_2","type":"VEC3"},{"bufferView":910,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1517670154571533,0],"min":[-0.018159687519073486,2.1517670154571533,-0.0000034263357520103455],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_0","type":"VEC3"},{"bufferView":877,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.778012275695801,0],"min":[-0.8287959098815918,5.778012275695801,-0.20808981359004974],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_0","type":"VEC3"},{"bufferView":823,"byteOffset":0,"componentType":5126,"count":2,"max":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"min":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_0","type":"VEC3"},{"bufferView":873,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"min":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightFoot_TPose_2","type":"VEC3"},{"bufferView":920,"byteOffset":0,"componentType":5126,"count":2,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_TPose_1","type":"VEC4"},{"bufferView":842,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04820201173424721,0.9986330270767212],"min":[-0.015152297914028168,-0.013382739387452602,0.04820201173424721,0.9986330270767212],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_1","type":"VEC4"},{"bufferView":888,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_2","type":"VEC3"},{"bufferView":817,"byteOffset":0,"componentType":5126,"count":2,"max":[0,19.023351669311523,0],"min":[-5.494803190231323e-8,19.023351669311523,-0.0000032789830584079027],"name":"accessor_buffer_mixamorig:LeftHand_TPose_0","type":"VEC3"},{"bufferView":929,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04805108159780502,0.9987183213233948],"min":[-0.01581340841948986,-0.0016685931477695704,0.04805108159780502,0.9987183213233948],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":992,"byteOffset":0,"componentType":5126,"count":2,"max":[1.30385160446167e-8,9.691603259937703e-14,0,1],"min":[1.30385160446167e-8,9.691603259937703e-14,-6.765455166576895e-13,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_1","type":"VEC4"},{"bufferView":989,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000018012506188824773,0.00015944617916829884,0,1],"min":[0.0000018012506188824773,0.00015944617916829884,-1.3720271851980215e-7,1],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_1","type":"VEC4"},{"bufferView":1000,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.050357818603516,2.3865140974521637e-9],"min":[-2.398074059328792e-7,45.050357818603516,2.3865140974521637e-9],"name":"accessor_buffer_mixamorig:RightLeg_TPose_0","type":"VEC3"},{"bufferView":981,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"min":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_2","type":"VEC3"},{"bufferView":912,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_2","type":"VEC3"},{"bufferView":959,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-1.473153474762512e-7,-1.363462160952622e-7,-1.3542921806219965e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_1","type":"VEC4"},{"bufferView":963,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"min":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_2","type":"VEC3"},{"bufferView":899,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"min":[-6.611599019379355e-7,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":919,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_TPose_0","type":"VEC3"},{"bufferView":951,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":902,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.007251414470374584,0.999973714351654],"min":[-0.000005368752681533806,-0.00042654300341382623,0.007251414470374584,0.999973714351654],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_1","type":"VEC4"},{"bufferView":821,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999955296516418],"min":[-0.0000013217339756010915,-0.00023518799571320415,-0.002985715866088867,0.9999955296516418],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":999,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,1],"min":[0.9999999403953552,1,1],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_2","type":"VEC3"},{"bufferView":854,"byteOffset":0,"componentType":5126,"count":2,"max":[2.252031947591604e-7,0,2.586603153886813e-9,1],"min":[2.252031947591604e-7,-1.896821366642598e-8,2.586603153886813e-9,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":806,"byteOffset":16,"componentType":5126,"count":1109,"max":[1,0.0767483115196228,0.01539947371929884,0],"min":[0.9057729244232178,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_1","type":"VEC4"},{"bufferView":967,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.916641116142273,0],"min":[-0.02496713399887085,1.916641116142273,-0.000015547877410426736],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_0","type":"VEC3"},{"bufferView":818,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015112828463315964,0.01513464655727148,0,0.9984008073806763],"min":[0.015112828463315964,0.01513464655727148,-0.052329666912555695,0.9984008073806763],"name":"accessor_buffer_mixamorig:LeftHand_TPose_1","type":"VEC4"},{"bufferView":820,"byteOffset":0,"componentType":5126,"count":2,"max":[0.025692284107208252,2.32354736328125,0],"min":[0.025692284107208252,2.32354736328125,-0.000005896072252653539],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":961,"byteOffset":0,"componentType":5126,"count":2,"max":[3.513521194458008,8.987088203430176,0],"min":[3.513521194458008,8.987088203430176,-0.09783625602722168],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_0","type":"VEC3"},{"bufferView":866,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5739166140556335,0,0.5932961106300354,0.39230477809906006],"min":[0.5739166140556335,-0.4058528542518616,0.5932961106300354,0.39230477809906006],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_1","type":"VEC4"},{"bufferView":1001,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0003684632829390466,0,0.9994756579399109],"min":[-0.029726667329669,0.0003684632829390466,-0.012829470448195934,0.9994756579399109],"name":"accessor_buffer_mixamorig:RightLeg_TPose_1","type":"VEC4"},{"bufferView":958,"byteOffset":0,"componentType":5126,"count":2,"max":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"min":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_0","type":"VEC3"},{"bufferView":835,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.181240558624268,0],"min":[-2.0758204460144043,5.181240558624268,-0.15668104588985443],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_0","type":"VEC3"},{"bufferView":925,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8280677795410156,0],"min":[-0.006532952189445496,1.8280677795410156,-0.000011722324416041374],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_0","type":"VEC3"},{"bufferView":962,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5753993988037109,0.4047872722148895,0,0.39317330718040466],"min":[0.5753993988037109,0.4047872722148895,-0.592011570930481,0.39317330718040466],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_1","type":"VEC4"},{"bufferView":844,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[-6.5092010498046875,-3.8089101314544678,-0.4497392773628235],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_0","type":"VEC3"},{"bufferView":819,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999998807907104],"min":[1,1.0000001192092896,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHand_TPose_2","type":"VEC3"},{"bufferView":905,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00004969544170307927,0.0011240799212828279,0,0.9999988079071045],"min":[0.00004969544170307927,0.0011240799212828279,-0.0010827239602804184,0.9999988079071045],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_1","type":"VEC4"},{"bufferView":926,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00004930837167194113,0,1],"min":[-0.0000036987858038628474,0.00004930837167194113,-0.000254306651186198,1],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_1","type":"VEC4"},{"bufferView":1024,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.80437906032391e-23,0,1],"min":[-8.673616862896153e-19,6.80437906032391e-23,-1.8189894035458565e-12,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_1","type":"VEC4"},{"bufferView":1031,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"min":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_2","type":"VEC3"},{"bufferView":1174,"byteOffset":0,"componentType":5126,"count":2,"max":[5.549511570279719e-7,0,0.0010957049671560526,0.9999994039535522],"min":[5.549511570279719e-7,-0.00003228561763535254,0.0010957049671560526,0.9999994039535522],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_1","type":"VEC4"},{"bufferView":1011,"byteOffset":0,"componentType":5126,"count":2,"max":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"min":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"name":"accessor_buffer_mixamorig:Head_TPose_0","type":"VEC3"},{"bufferView":1026,"byteOffset":0,"componentType":5126,"count":2,"max":[1.2692300335737094e-11,9.168559074401855,0],"min":[1.2692300335737094e-11,9.168559074401855,-4.76837158203125e-7],"name":"accessor_buffer_mixamorig:Spine2_TPose_0","type":"VEC3"},{"bufferView":1193,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"min":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_2","type":"VEC3"},{"bufferView":1123,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21339857578277588,0,0,0.9383423328399658],"min":[0.21339857578277588,-0.06705669313669205,-0.26358723640441895,0.9383423328399658],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_1","type":"VEC4"},{"bufferView":1133,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightArm_TPose_2","type":"VEC3"},{"bufferView":1173,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"min":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_0","type":"VEC3"},{"bufferView":1052,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"min":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_2","type":"VEC3"},{"bufferView":1030,"byteOffset":0,"componentType":5126,"count":2,"max":[0.49219897389411926,0.06156006455421448,0,0.8671404123306274],"min":[0.49219897389411926,0.06156006455421448,-0.04492250457406044,0.8671404123306274],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_1","type":"VEC4"},{"bufferView":1104,"byteOffset":0,"componentType":5126,"count":2,"max":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"min":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_0","type":"VEC3"},{"bufferView":1147,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00001167778464150615,0,0.9999808073043823,0],"min":[0.00001167778464150615,-0.0004857034655287862,0.9999808073043823,-0.006179941818118095],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_1","type":"VEC4"},{"bufferView":1108,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000019077392607869115,0,0.006663992069661617,0.9999777674674988],"min":[0.0000019077392607869115,-0.00024382353876717389,0.006663992069661617,0.9999777674674988],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_1","type":"VEC4"},{"bufferView":1018,"byteOffset":0,"componentType":5126,"count":2,"max":[0.000002737616568992962,0,0,0.9967700242996216],"min":[0.000002737616568992962,-0.0000792778519098647,-0.08030900359153748,0.9967700242996216],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_1","type":"VEC4"},{"bufferView":1189,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000014512252164422534,0.0003296945069450885,0,0.9999457001686096],"min":[0.0000014512252164422534,0.0003296945069450885,-0.010418280959129333,0.9999457001686096],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_1","type":"VEC4"},{"bufferView":1155,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1800546646118164,0],"min":[-0.017888188362121582,2.1800546646118164,-0.000005649722879752517],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_0","type":"VEC3"},{"bufferView":1054,"byteOffset":0,"componentType":5126,"count":2,"max":[3.725291364276018e-8,0,3.259629011154175e-8,1],"min":[3.725291364276018e-8,-5.58793766813892e-9,3.259629011154175e-8,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_1","type":"VEC4"},{"bufferView":1039,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00034277912345714867,0,0.9999790191650391],"min":[-0.0000010370887366661918,0.00034277912345714867,-0.0064829993061721325,0.9999790191650391],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_1","type":"VEC4"},{"bufferView":1017,"byteOffset":0,"componentType":5126,"count":2,"max":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"min":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_0","type":"VEC3"},{"bufferView":1143,"byteOffset":0,"componentType":5126,"count":2,"max":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"min":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_0","type":"VEC3"},{"bufferView":1131,"byteOffset":0,"componentType":5126,"count":2,"max":[8.642673492431641e-7,7.483717918395996,0],"min":[8.642673492431641e-7,7.483717918395996,-0.0000068247318267822266],"name":"accessor_buffer_mixamorig:RightArm_TPose_0","type":"VEC3"},{"bufferView":1148,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001243352890015,0.9999998807907104,1.000003695487976],"min":[1.0001243352890015,0.9999998807907104,1.000003695487976],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_2","type":"VEC3"},{"bufferView":1010,"byteOffset":0,"componentType":5126,"count":2,"max":[0.041666666666666664],"min":[0],"name":"accessor_buffer_TPose_time_0","type":"SCALAR"},{"bufferView":1092,"byteOffset":0,"componentType":5126,"count":2,"max":[0.8905045986175537,5.982408046722412,0],"min":[0.8905045986175537,5.982408046722412,-0.24305573105812073],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_0","type":"VEC3"},{"bufferView":1062,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.181240558624268,0],"min":[-2.0758204460144043,5.181240558624268,-0.15668104588985443],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_0","type":"VEC3"},{"bufferView":1007,"byteOffset":12,"componentType":5126,"count":3054,"max":[0.9999508857727051,0.9998086094856262,0.9994415640830994],"min":[-0.9999616742134094,-1,-0.9999049305915833],"name":"accessor_buffer_F010_Saber.003_1","type":"VEC3"},{"bufferView":1134,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1517670154571533,0],"min":[-0.018159687519073486,2.1517670154571533,-0.0000034263357520103455],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_0","type":"VEC3"},{"bufferView":1146,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[-6.5092010498046875,-3.8089101314544678,-0.4497392773628235],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_0","type":"VEC3"},{"bufferView":1179,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8280677795410156,0],"min":[-0.006532952189445496,1.8280677795410156,-0.000011722324416041374],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_0","type":"VEC3"},{"bufferView":1208,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[1.0000001192092896,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":1043,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1],"min":[1,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_2","type":"VEC3"},{"bufferView":1137,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.033415794372559,3.5762786865234375e-7],"min":[-6.239861249923706e-7,12.033415794372559,3.5762786865234375e-7],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_0","type":"VEC3"},{"bufferView":1012,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,5.4569682106375694e-12,1],"min":[-3.749335064640036e-9,-6.563448747235262e-21,5.4569682106375694e-12,1],"name":"accessor_buffer_mixamorig:Head_TPose_1","type":"VEC4"},{"bufferView":1014,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8726567029953003,1.3422273397445679],"min":[-1.3880571126937866,1.8726567029953003,1.3422273397445679],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_0","type":"VEC3"},{"bufferView":1107,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5249916315078735,0.000022089123376645148],"min":[-0.006230756640434265,1.5249916315078735,0.000022089123376645148],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_0","type":"VEC3"},{"bufferView":1185,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_TPose_0","type":"VEC3"},{"bufferView":1203,"byteOffset":0,"componentType":5126,"count":2,"max":[2.112320899963379,5.151422500610352,0],"min":[2.112320899963379,5.151422500610352,-0.101677805185318],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_0","type":"VEC3"},{"bufferView":1153,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00004969544170307927,0.0011240799212828279,0,0.9999988079071045],"min":[0.00004969544170307927,0.0011240799212828279,-0.0010827239602804184,0.9999988079071045],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_1","type":"VEC4"},{"bufferView":1177,"byteOffset":0,"componentType":5126,"count":2,"max":[0.4910941421985626,0,0.04505223408341408,0.8677260875701904],"min":[0.4910941421985626,-0.062034837901592255,0.04505223408341408,0.8677260875701904],"name":"accessor_buffer_mixamorig:RightFoot_TPose_1","type":"VEC4"},{"bufferView":1186,"byteOffset":0,"componentType":5126,"count":2,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_TPose_1","type":"VEC4"},{"bufferView":1033,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0011933766072615981,0,0.9998803734779358],"min":[-0.000009156999112747144,0.0011933766072615981,-0.015421011485159397,0.9998803734779358],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_1","type":"VEC4"},{"bufferView":1027,"byteOffset":0,"componentType":5126,"count":2,"max":[0,9.422998405866911e-13,0,1],"min":[-5.029141902923584e-8,9.422998405866911e-13,-2.3584922209662906e-11,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_1","type":"VEC4"},{"bufferView":1037,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,1],"min":[1.0000001192092896,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_2","type":"VEC3"},{"bufferView":1105,"byteOffset":0,"componentType":5126,"count":2,"max":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"min":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_1","type":"VEC4"},{"bufferView":1050,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0025572776794434,0],"min":[-0.009857624769210815,2.0025572776794434,-0.000008842733222991228],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_0","type":"VEC3"},{"bufferView":1013,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Head_TPose_2","type":"VEC3"},{"bufferView":1152,"byteOffset":0,"componentType":5126,"count":2,"max":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"min":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_0","type":"VEC3"},{"bufferView":1167,"byteOffset":0,"componentType":5126,"count":2,"max":[0.006504923105239868,1.635219693183899,0],"min":[0.006504923105239868,1.635219693183899,-0.00002377049531787634],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_0","type":"VEC3"},{"bufferView":1161,"byteOffset":0,"componentType":5126,"count":2,"max":[3.513521194458008,8.987088203430176,0],"min":[3.513521194458008,8.987088203430176,-0.09783625602722168],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_0","type":"VEC3"},{"bufferView":1064,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_2","type":"VEC3"},{"bufferView":1109,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_2","type":"VEC3"},{"bufferView":1019,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.000000238418579,1],"min":[0.9999999403953552,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_2","type":"VEC3"},{"bufferView":1082,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"min":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHand_TPose_2","type":"VEC3"},{"bufferView":1180,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00004930837167194113,0,1],"min":[-0.0000036987858038628474,0.00004930837167194113,-0.000254306651186198,1],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_1","type":"VEC4"},{"bufferView":1089,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.7125468254089355,0],"min":[-6.258487701416016e-7,4.7125468254089355,-5.960464477539063e-8],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_0","type":"VEC3"},{"bufferView":1065,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2824809551239014,0.00000463516335003078],"min":[-0.018551677465438843,2.2824809551239014,0.00000463516335003078],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":1168,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.3662607873120578e-8,-2.0191042438000295e-7,-1.5510249795624986e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_1","type":"VEC4"},{"bufferView":1069,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.007251414470374584,0.999973714351654],"min":[-0.000005368752681533806,-0.00042654300341382623,0.007251414470374584,0.999973714351654],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_1","type":"VEC4"},{"bufferView":1139,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,1],"min":[0.9999999403953552,1,1],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_2","type":"VEC3"},{"bufferView":1127,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Neck_TPose_2","type":"VEC3"},{"bufferView":1008,"byteOffset":0,"componentType":5123,"count":11700,"max":[3053],"min":[0],"name":"accessor_buffer_F010_Saber.003_3","type":"SCALAR"},{"bufferView":1047,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9040616750717163,0],"min":[-0.044958412647247314,1.9040616750717163,-0.000012791395420208573],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_0","type":"VEC3"},{"bufferView":1187,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_TPose_2","type":"VEC3"},{"bufferView":1041,"byteOffset":0,"componentType":5126,"count":2,"max":[2.289442539215088,5.801696300506592,0.050649963319301605],"min":[2.289442539215088,5.801696300506592,0.050649963319301605],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_0","type":"VEC3"},{"bufferView":1025,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_2","type":"VEC3"},{"bufferView":1040,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"min":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_2","type":"VEC3"},{"bufferView":1114,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000016051130842242856,0,0.9999784827232361,0.0061686099506914616],"min":[0.0000016051130842242856,-0.0022346421610563993,0.9999784827232361,0.0061686099506914616],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_1","type":"VEC4"},{"bufferView":1042,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00083109550178051,0,0.998789370059967],"min":[-0.020914429798722267,0.00083109550178051,-0.04451649263501167,0.998789370059967],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_1","type":"VEC4"},{"bufferView":1060,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005565229366766289,0,0.9994112253189087],"min":[-1.9569284859244362e-7,0.00005565229366766289,-0.034311242401599884,0.9994112253189087],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_1","type":"VEC4"},{"bufferView":1038,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"min":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_0","type":"VEC3"},{"bufferView":1157,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_2","type":"VEC3"},{"bufferView":1074,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8846017122268677,0],"min":[-0.0597844123840332,1.8846017122268677,-0.00000426173210144043],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_0","type":"VEC3"},{"bufferView":1111,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0008116317912936211,0,0.9999305605888367],"min":[-0.0000027277535536995856,0.0008116317912936211,-0.011757179163396358,0.9999305605888367],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":1113,"byteOffset":0,"componentType":5126,"count":2,"max":[6.5092010498046875,0,0],"min":[6.5092010498046875,-3.8089029788970947,-0.3193536400794983],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_0","type":"VEC3"},{"bufferView":1122,"byteOffset":0,"componentType":5126,"count":2,"max":[1.4313478469848633,1.948877215385437,1.3737415075302124],"min":[1.4313478469848633,1.948877215385437,1.3737415075302124],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_0","type":"VEC3"},{"bufferView":1034,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999997019767761],"min":[1,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_2","type":"VEC3"},{"bufferView":1142,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_2","type":"VEC3"},{"bufferView":1091,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_2","type":"VEC3"},{"bufferView":1023,"byteOffset":0,"componentType":5126,"count":2,"max":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"min":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_0","type":"VEC3"},{"bufferView":1048,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.464207682351116e-7,-8.914983595786907e-8,-1.517519194749184e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_1","type":"VEC4"},{"bufferView":1121,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_2","type":"VEC3"},{"bufferView":1061,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,1,0.9999998807907104],"min":[0.9999997615814209,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_2","type":"VEC3"},{"bufferView":1088,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_2","type":"VEC3"},{"bufferView":1115,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001250505447388,0.9999999403953552,1.000000238418579],"min":[1.0001250505447388,0.9999999403953552,1.000000238418579],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_2","type":"VEC3"},{"bufferView":1077,"byteOffset":0,"componentType":5126,"count":2,"max":[0.025692284107208252,2.32354736328125,0],"min":[0.025692284107208252,2.32354736328125,-0.000005896072252653539],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":1067,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"min":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":1165,"byteOffset":0,"componentType":5126,"count":2,"max":[1.7445827893425303e-7,0,3.6372512113302946e-8,1],"min":[1.7445827893425303e-7,-6.26357206101602e-8,3.6372512113302946e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_1","type":"VEC4"},{"bufferView":1175,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999998807907104],"min":[1,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_2","type":"VEC3"},{"bufferView":1097,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999999403953552],"min":[0.9999999403953552,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightLeg_TPose_2","type":"VEC3"},{"bufferView":1046,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:Spine_TPose_2","type":"VEC3"},{"bufferView":1007,"byteOffset":0,"componentType":5126,"count":3054,"max":[51.48958969116211,137.53976440429688,19.721698760986328],"min":[-51.49264144897461,0.5336894989013672,-21.39265251159668],"name":"accessor_buffer_F010_Saber.003_0","type":"VEC3"},{"bufferView":1044,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.854499816894531,0],"min":[-4.3809234018254983e-11,6.854499816894531,-0.5485977530479431],"name":"accessor_buffer_mixamorig:Spine_TPose_0","type":"VEC3"},{"bufferView":1182,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.04969024658203,8.68749339133501e-9],"min":[-3.5517268770490773e-7,45.04969024658203,8.68749339133501e-9],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_0","type":"VEC3"},{"bufferView":1087,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999953508377075],"min":[-0.0000019045912722504,-0.0002899357641581446,-0.0030352880712598562,0.9999953508377075],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_1","type":"VEC4"},{"bufferView":1029,"byteOffset":0,"componentType":5126,"count":2,"max":[0,41.84932327270508,0],"min":[-1.1807060218416154e-7,41.84932327270508,-2.8172507882118225e-7],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_0","type":"VEC3"},{"bufferView":1056,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.933863162994385,0],"min":[-0.6209797859191895,5.933863162994385,-0.1895589530467987],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":1093,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04820201173424721,0.9986330270767212],"min":[-0.015152297914028168,-0.013382739387452602,0.04820201173424721,0.9986330270767212],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_1","type":"VEC4"},{"bufferView":1086,"byteOffset":0,"componentType":5126,"count":2,"max":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"min":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_0","type":"VEC3"},{"bufferView":1075,"byteOffset":0,"componentType":5126,"count":2,"max":[4.656612517806025e-8,0,0,1],"min":[4.656612517806025e-8,-1.9324940581100236e-7,-4.982575063650074e-8,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_1","type":"VEC4"},{"bufferView":1191,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.916641116142273,0],"min":[-0.02496713399887085,1.916641116142273,-0.000015547877410426736],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_0","type":"VEC3"},{"bufferView":1132,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9826892614364624],"min":[-0.1844879388809204,-0.0005821919767186046,-0.016901638358831406,0.9826892614364624],"name":"accessor_buffer_mixamorig:RightArm_TPose_1","type":"VEC4"},{"bufferView":1207,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.009517651982605457,0.9999545812606812],"min":[-0.000002889829829655355,-0.00046613236190751195,0.009517651982605457,0.9999545812606812],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":1057,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04805108159780502,0.9987183213233948],"min":[-0.01581340841948986,-0.0016685931477695704,0.04805108159780502,0.9987183213233948],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":1172,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"min":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":1071,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.778012275695801,0],"min":[-0.8287959098815918,5.778012275695801,-0.20808981359004974],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_0","type":"VEC3"},{"bufferView":1066,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"min":[-6.611599019379355e-7,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":1183,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.012829817831516266,0.9995352625846863],"min":[-0.02764846757054329,-0.000389853521483019,0.012829817831516266,0.9995352625846863],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_1","type":"VEC4"},{"bufferView":1126,"byteOffset":0,"componentType":5126,"count":2,"max":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"min":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"name":"accessor_buffer_mixamorig:Neck_TPose_1","type":"VEC4"},{"bufferView":1035,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009776592254638672,1.9066510200500488,0],"min":[0.009776592254638672,1.9066510200500488,-0.000011112497304566205],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_0","type":"VEC3"},{"bufferView":1073,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_2","type":"VEC3"},{"bufferView":1205,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_2","type":"VEC3"},{"bufferView":1135,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"min":[-1.9003864792921377e-7,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_1","type":"VEC4"},{"bufferView":1070,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_2","type":"VEC3"},{"bufferView":1202,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_2","type":"VEC3"},{"bufferView":1120,"byteOffset":0,"componentType":5126,"count":2,"max":[5.20922753821651e-8,0,1.4510078472085297e-8,1],"min":[5.20922753821651e-8,-1.1215498751937503e-8,1.4510078472085297e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_1","type":"VEC4"},{"bufferView":1159,"byteOffset":0,"componentType":5126,"count":2,"max":[1.30385160446167e-8,9.691603259937703e-14,0,1],"min":[1.30385160446167e-8,9.691603259937703e-14,-6.765455166576895e-13,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_1","type":"VEC4"},{"bufferView":1112,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":1022,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999998807907104],"min":[1,1.0000001192092896,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHand_TPose_2","type":"VEC3"},{"bufferView":1076,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000000238418579,1,1.0000001192092896],"min":[1.000000238418579,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_2","type":"VEC3"},{"bufferView":1053,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5351991653442383,0.000011235475540161133],"min":[-0.18289971351623535,1.5351991653442383,0.000011235475540161133],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_0","type":"VEC3"},{"bufferView":1206,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2484662532806396,0.000009948620572686195],"min":[-0.010961860418319702,2.2484662532806396,0.000009948620572686195],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":1096,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0003684632829390466,0,0.9994756579399109],"min":[-0.029726667329669,0.0003684632829390466,-0.012829470448195934,0.9994756579399109],"name":"accessor_buffer_mixamorig:RightLeg_TPose_1","type":"VEC4"},{"bufferView":1095,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.050357818603516,2.3865140974521637e-9],"min":[-2.398074059328792e-7,45.050357818603516,2.3865140974521637e-9],"name":"accessor_buffer_mixamorig:RightLeg_TPose_0","type":"VEC3"},{"bufferView":1102,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000018012506188824773,0.00015944617916829884,0,1],"min":[0.0000018012506188824773,0.00015944617916829884,-1.3720271851980215e-7,1],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_1","type":"VEC4"},{"bufferView":1016,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_2","type":"VEC3"},{"bufferView":1170,"byteOffset":0,"componentType":5126,"count":2,"max":[0.029511988162994385,2.085664749145508,0],"min":[0.029511988162994385,2.085664749145508,-0.000003653607564046979],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":1199,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,0.9999999403953552],"min":[1.0000001192092896,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_2","type":"VEC3"},{"bufferView":1201,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5739166140556335,0,0.5932961106300354,0.39230477809906006],"min":[0.5739166140556335,-0.4058528542518616,0.5932961106300354,0.39230477809906006],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_1","type":"VEC4"},{"bufferView":1136,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_2","type":"VEC3"},{"bufferView":1125,"byteOffset":0,"componentType":5126,"count":2,"max":[0,10.314631462097168,2.384185791015625e-7],"min":[-1.632623376768283e-11,10.314631462097168,2.384185791015625e-7],"name":"accessor_buffer_mixamorig:Neck_TPose_0","type":"VEC3"},{"bufferView":1129,"byteOffset":0,"componentType":5126,"count":2,"max":[2.252031947591604e-7,0,2.586603153886813e-9,1],"min":[2.252031947591604e-7,-1.896821366642598e-8,2.586603153886813e-9,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":1190,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"min":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_2","type":"VEC3"},{"bufferView":1128,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0023322105407715,0],"min":[-0.03690838813781738,2.0023322105407715,-0.0000020437873899936676],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":1106,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"min":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_2","type":"VEC3"},{"bufferView":1138,"byteOffset":0,"componentType":5126,"count":2,"max":[0.29314252734184265,0.06225592643022537,0,0.9538480043411255],"min":[0.29314252734184265,0.06225592643022537,-0.019128000363707542,0.9538480043411255],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_1","type":"VEC4"},{"bufferView":1192,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-9.267012046620948e-8,-5.819203607870804e-8,-6.402842700481415e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_1","type":"VEC4"},{"bufferView":1083,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"min":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"name":"accessor_buffer_mixamorig:Hips_TPose_0","type":"VEC3"},{"bufferView":1081,"byteOffset":0,"componentType":5126,"count":2,"max":[0.019991455599665642,0,0.05151980370283127,0.9982961416244507],"min":[0.019991455599665642,-0.018730632960796356,0.05151980370283127,0.9982961416244507],"name":"accessor_buffer_mixamorig:RightHand_TPose_1","type":"VEC4"},{"bufferView":1117,"byteOffset":0,"componentType":5126,"count":2,"max":[4.818217576030293e-7,0,4.313407657718926e-7,1],"min":[4.818217576030293e-7,-0.00015852972865104675,4.313407657718926e-7,1],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_1","type":"VEC4"},{"bufferView":1119,"byteOffset":0,"componentType":5126,"count":2,"max":[0.012762725353240967,1.3817871809005737,0],"min":[0.012762725353240967,1.3817871809005737,-0.000005348862032406032],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_0","type":"VEC3"},{"bufferView":1103,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999997615814209],"min":[1,1.0000001192092896,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_2","type":"VEC3"},{"bufferView":1098,"byteOffset":0,"componentType":5126,"count":2,"max":[0.615178108215332,5.987785816192627,0],"min":[0.615178108215332,5.987785816192627,-0.2521420121192932],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":1141,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-1.473153474762512e-7,-1.363462160952622e-7,-1.3542921806219965e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_1","type":"VEC4"},{"bufferView":1078,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999955296516418],"min":[-0.0000013217339756010915,-0.00023518799571320415,-0.002985715866088867,0.9999955296516418],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":1150,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.001648154342547059,0.014273405075073242,0.9826878309249878],"min":[-0.1847110539674759,0.001648154342547059,0.014273405075073242,0.9826878309249878],"name":"accessor_buffer_mixamorig:LeftArm_TPose_1","type":"VEC4"},{"bufferView":1063,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.034996457397937775,0,0.9979900121688843],"min":[-0.019062332808971405,0.034996457397937775,-0.04927309229969978,0.9979900121688843],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_1","type":"VEC4"},{"bufferView":1110,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"min":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":1072,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.010770494118332863,0,0.9985118508338928],"min":[-0.020383575931191444,0.010770494118332863,-0.049423426389694214,0.9985118508338928],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_1","type":"VEC4"},{"bufferView":1200,"byteOffset":0,"componentType":5126,"count":2,"max":[0,8.988426208496094,0],"min":[-3.513521432876587,8.988426208496094,-0.11455392837524414],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_0","type":"VEC3"},{"bufferView":1154,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999998211860657],"min":[1,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_2","type":"VEC3"},{"bufferView":1197,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.0912089347839355,0.09324643015861511],"min":[-2.381847381591797,6.0912089347839355,0.09324643015861511],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_0","type":"VEC3"},{"bufferView":1084,"byteOffset":0,"componentType":5126,"count":2,"max":[5.5535473109102895e-8,2.9428024461708446e-9,0,1],"min":[5.5535473109102895e-8,2.9428024461708446e-9,-0.000005548599347093841,1],"name":"accessor_buffer_mixamorig:Hips_TPose_1","type":"VEC4"},{"bufferView":1169,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1.0000001192092896],"min":[1,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_2","type":"VEC3"},{"bufferView":1124,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_2","type":"VEC3"},{"bufferView":1101,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.77089500427246,0.000006812736501160543],"min":[-2.460183168295771e-7,22.77089500427246,0.000006812736501160543],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_0","type":"VEC3"},{"bufferView":1100,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":1049,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_2","type":"VEC3"},{"bufferView":1156,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"min":[-8.061967378125701e-7,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_1","type":"VEC4"},{"bufferView":1009,"byteOffset":0,"componentType":5121,"count":3054,"max":[63,63,63,60],"min":[1,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_0","type":"VEC4"},{"bufferView":1079,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":1094,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1.0000001192092896],"min":[1,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_2","type":"VEC3"},{"bufferView":1015,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"min":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_1","type":"VEC4"},{"bufferView":1149,"byteOffset":0,"componentType":5126,"count":2,"max":[0,7.4837236404418945,0],"min":[-5.960464477539063e-8,7.4837236404418945,-0.0000017881393432617188],"name":"accessor_buffer_mixamorig:LeftArm_TPose_0","type":"VEC3"},{"bufferView":1059,"byteOffset":0,"componentType":5126,"count":2,"max":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"min":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_0","type":"VEC3"},{"bufferView":1171,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.833076872046149e-8,7.194104423291492e-9,1],"min":[-4.388131102928128e-8,4.833076872046149e-8,7.194104423291492e-9,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":1176,"byteOffset":0,"componentType":5126,"count":2,"max":[2.655433490872383e-7,41.85009002685547,0],"min":[2.655433490872383e-7,41.85009002685547,-1.4621764421463013e-7],"name":"accessor_buffer_mixamorig:RightFoot_TPose_0","type":"VEC3"},{"bufferView":1166,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1],"min":[1,1.0000001192092896,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_2","type":"VEC3"},{"bufferView":1140,"byteOffset":0,"componentType":5126,"count":2,"max":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"min":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_0","type":"VEC3"},{"bufferView":1204,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.05077396705746651,0.998155415058136],"min":[-0.014275818131864071,-0.030067145824432373,0.05077396705746651,0.998155415058136],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_1","type":"VEC4"},{"bufferView":1194,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.089044570922852,1.7881393432617188e-7],"min":[-4.116445779800415e-7,12.089044570922852,1.7881393432617188e-7],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_0","type":"VEC3"},{"bufferView":1068,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9782497882843018,0],"min":[-0.004050195217132568,1.9782497882843018,-0.000013029115507379174],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_0","type":"VEC3"},{"bufferView":1198,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04963767156004906,0.9986410140991211],"min":[-0.01586439274251461,-0.0007755132974125445,0.04963767156004906,0.9986410140991211],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_1","type":"VEC4"},{"bufferView":1009,"byteOffset":16,"componentType":5126,"count":3054,"max":[1.000009298324585,0.4988971948623657,0.3152562081813812,0.21635007858276367],"min":[0.2751019597053528,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_1","type":"VEC4"},{"bufferView":1209,"byteOffset":0,"componentType":5126,"count":65,"max":[1.0022532939910889,1.001609444618225,0.3732517957687378,0,0.17934095859527588,1.0022534132003784,0.9950379729270935,0,0.998527467250824,0.9991320371627808,1.0022532939910889,0,36.08419418334961,95.18425750732422,139.18643188476562,1],"min":[-1.0021002292633057,-1.0016006231307983,-0.39615026116371155,0,-0.16228264570236206,-1.0016993284225464,-0.998423159122467,0,-0.9986722469329834,-0.3514665365219116,-0.1876296103000641,0,-40.01988983154297,-158.2681884765625,-8.502774238586426,1],"name":"accessor_buffer_IBM_Saber_maid_dress_skin_0","type":"MAT4"},{"bufferView":1144,"byteOffset":0,"componentType":5126,"count":2,"max":[8.172354171165352e-8,0.000008062284905463457,0,1],"min":[8.172354171165352e-8,0.000008062284905463457,-1.2136295524101115e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_1","type":"VEC4"},{"bufferView":1032,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015063196420669556,2.0928525924682617,0],"min":[0.015063196420669556,2.0928525924682617,-0.00001477246405556798],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_0","type":"VEC3"},{"bufferView":1045,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.000005544060059037292,0.9992028474807739],"min":[-0.03992169722914696,-2.2444967839874153e-7,0.000005544060059037292,0.9992028474807739],"name":"accessor_buffer_mixamorig:Spine_TPose_1","type":"VEC4"},{"bufferView":1145,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1.0000001192092896],"min":[1,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_2","type":"VEC3"},{"bufferView":1028,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_2","type":"VEC3"},{"bufferView":1099,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.003121189074590802,0,0.9987351894378662],"min":[-0.02078564278781414,0.003121189074590802,-0.04567611962556839,0.9987351894378662],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":1164,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.4578983783721924,0],"min":[-0.014494240283966064,1.4578983783721924,-0.000007362202268268447],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_0","type":"VEC3"},{"bufferView":1058,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":1020,"byteOffset":0,"componentType":5126,"count":2,"max":[0,19.023351669311523,0],"min":[-5.494803190231323e-8,19.023351669311523,-0.0000032789830584079027],"name":"accessor_buffer_mixamorig:LeftHand_TPose_0","type":"VEC3"},{"bufferView":1036,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999995231628418],"min":[-0.0000017708856603348977,-0.00008915702346712351,-0.0010598038788884878,0.9999995231628418],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_1","type":"VEC4"},{"bufferView":1196,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"min":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_2","type":"VEC3"},{"bufferView":1181,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998807907104,0.9999999403953552],"min":[1,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_2","type":"VEC3"},{"bufferView":1085,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Hips_TPose_2","type":"VEC3"},{"bufferView":1184,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,1],"min":[1.0000001192092896,0.9999998211860657,1],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_2","type":"VEC3"},{"bufferView":1118,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_2","type":"VEC3"},{"bufferView":1051,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"min":[-9.933781939253095e-7,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_1","type":"VEC4"},{"bufferView":1007,"byteOffset":24,"componentType":5126,"count":3054,"max":[0.9956809878349304,0.9849260002374649],"min":[0.0069690002128481865,0.0113450288772583],"name":"accessor_buffer_F010_Saber.003_2","type":"VEC2"},{"bufferView":1130,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"min":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":1178,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"min":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightFoot_TPose_2","type":"VEC3"},{"bufferView":1163,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"min":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_2","type":"VEC3"},{"bufferView":1055,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"min":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_2","type":"VEC3"},{"bufferView":1195,"byteOffset":0,"componentType":5126,"count":2,"max":[0.291592001914978,0,0.018840743228793144,0.954366147518158],"min":[0.291592001914978,-0.06168048828840256,0.018840743228793144,0.954366147518158],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_1","type":"VEC4"},{"bufferView":1090,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-3.306195139884949e-8,-0.000008229748345911503,-2.3865142750878476e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_1","type":"VEC4"},{"bufferView":1080,"byteOffset":0,"componentType":5126,"count":2,"max":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"min":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"name":"accessor_buffer_mixamorig:RightHand_TPose_0","type":"VEC3"},{"bufferView":1116,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.7723331451416,0.000002205953933298588],"min":[-0.00000198512316273991,22.7723331451416,0.000002205953933298588],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_0","type":"VEC3"},{"bufferView":1021,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015112828463315964,0.01513464655727148,0,0.9984008073806763],"min":[0.015112828463315964,0.01513464655727148,-0.052329666912555695,0.9984008073806763],"name":"accessor_buffer_mixamorig:LeftHand_TPose_1","type":"VEC4"},{"bufferView":1160,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_2","type":"VEC3"},{"bufferView":1158,"byteOffset":0,"componentType":5126,"count":2,"max":[5.414642258866342e-13,8.022480964660645,0],"min":[5.414642258866342e-13,8.022480964660645,-5.364418029785156e-7],"name":"accessor_buffer_mixamorig:Spine1_TPose_0","type":"VEC3"},{"bufferView":1162,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5753993988037109,0.4047872722148895,0,0.39317330718040466],"min":[0.5753993988037109,0.4047872722148895,-0.592011570930481,0.39317330718040466],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_1","type":"VEC4"},{"bufferView":1188,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"min":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_0","type":"VEC3"},{"bufferView":1151,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,1],"min":[0.9999998807907104,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftArm_TPose_2","type":"VEC3"}],"animations":[{"channels":[{"sampler":0,"target":{"node":47,"path":"translation"}},{"sampler":1,"target":{"node":47,"path":"rotation"}},{"sampler":2,"target":{"node":47,"path":"scale"}},{"sampler":3,"target":{"node":37,"path":"translation"}},{"sampler":4,"target":{"node":37,"path":"rotation"}},{"sampler":5,"target":{"node":37,"path":"scale"}},{"sampler":6,"target":{"node":8,"path":"translation"}},{"sampler":7,"target":{"node":8,"path":"rotation"}},{"sampler":8,"target":{"node":8,"path":"scale"}},{"sampler":9,"target":{"node":16,"path":"translation"}},{"sampler":10,"target":{"node":16,"path":"rotation"}},{"sampler":11,"target":{"node":16,"path":"scale"}},{"sampler":12,"target":{"node":34,"path":"translation"}},{"sampler":13,"target":{"node":34,"path":"rotation"}},{"sampler":14,"target":{"node":34,"path":"scale"}},{"sampler":15,"target":{"node":60,"path":"translation"}},{"sampler":16,"target":{"node":60,"path":"rotation"}},{"sampler":17,"target":{"node":60,"path":"scale"}},{"sampler":18,"target":{"node":24,"path":"translation"}},{"sampler":19,"target":{"node":24,"path":"rotation"}},{"sampler":20,"target":{"node":24,"path":"scale"}},{"sampler":21,"target":{"node":57,"path":"translation"}},{"sampler":22,"target":{"node":57,"path":"rotation"}},{"sampler":23,"target":{"node":57,"path":"scale"}},{"sampler":24,"target":{"node":7,"path":"translation"}},{"sampler":25,"target":{"node":7,"path":"rotation"}},{"sampler":26,"target":{"node":7,"path":"scale"}},{"sampler":27,"target":{"node":29,"path":"translation"}},{"sampler":28,"target":{"node":29,"path":"rotation"}},{"sampler":29,"target":{"node":29,"path":"scale"}},{"sampler":30,"target":{"node":55,"path":"translation"}},{"sampler":31,"target":{"node":55,"path":"rotation"}},{"sampler":32,"target":{"node":55,"path":"scale"}},{"sampler":33,"target":{"node":33,"path":"translation"}},{"sampler":34,"target":{"node":33,"path":"rotation"}},{"sampler":35,"target":{"node":33,"path":"scale"}},{"sampler":36,"target":{"node":45,"path":"translation"}},{"sampler":37,"target":{"node":45,"path":"rotation"}},{"sampler":38,"target":{"node":45,"path":"scale"}},{"sampler":39,"target":{"node":9,"path":"translation"}},{"sampler":40,"target":{"node":9,"path":"rotation"}},{"sampler":41,"target":{"node":9,"path":"scale"}},{"sampler":42,"target":{"node":62,"path":"translation"}},{"sampler":43,"target":{"node":62,"path":"rotation"}},{"sampler":44,"target":{"node":62,"path":"scale"}},{"sampler":45,"target":{"node":58,"path":"translation"}},{"sampler":46,"target":{"node":58,"path":"rotation"}},{"sampler":47,"target":{"node":58,"path":"scale"}},{"sampler":48,"target":{"node":30,"path":"translation"}},{"sampler":49,"target":{"node":30,"path":"rotation"}},{"sampler":50,"target":{"node":30,"path":"scale"}},{"sampler":51,"target":{"node":19,"path":"translation"}},{"sampler":52,"target":{"node":19,"path":"rotation"}},{"sampler":53,"target":{"node":19,"path":"scale"}},{"sampler":54,"target":{"node":27,"path":"translation"}},{"sampler":55,"target":{"node":27,"path":"rotation"}},{"sampler":56,"target":{"node":27,"path":"scale"}},{"sampler":57,"target":{"node":40,"path":"translation"}},{"sampler":58,"target":{"node":40,"path":"rotation"}},{"sampler":59,"target":{"node":40,"path":"scale"}},{"sampler":60,"target":{"node":50,"path":"translation"}},{"sampler":61,"target":{"node":50,"path":"rotation"}},{"sampler":62,"target":{"node":50,"path":"scale"}},{"sampler":63,"target":{"node":22,"path":"translation"}},{"sampler":64,"target":{"node":22,"path":"rotation"}},{"sampler":65,"target":{"node":22,"path":"scale"}},{"sampler":66,"target":{"node":18,"path":"translation"}},{"sampler":67,"target":{"node":18,"path":"rotation"}},{"sampler":68,"target":{"node":18,"path":"scale"}},{"sampler":69,"target":{"node":35,"path":"translation"}},{"sampler":70,"target":{"node":35,"path":"rotation"}},{"sampler":71,"target":{"node":35,"path":"scale"}},{"sampler":72,"target":{"node":38,"path":"translation"}},{"sampler":73,"target":{"node":38,"path":"rotation"}},{"sampler":74,"target":{"node":38,"path":"scale"}},{"sampler":75,"target":{"node":21,"path":"translation"}},{"sampler":76,"target":{"node":21,"path":"rotation"}},{"sampler":77,"target":{"node":21,"path":"scale"}},{"sampler":78,"target":{"node":28,"path":"translation"}},{"sampler":79,"target":{"node":28,"path":"rotation"}},{"sampler":80,"target":{"node":28,"path":"scale"}},{"sampler":81,"target":{"node":25,"path":"translation"}},{"sampler":82,"target":{"node":25,"path":"rotation"}},{"sampler":83,"target":{"node":25,"path":"scale"}},{"sampler":84,"target":{"node":23,"path":"translation"}},{"sampler":85,"target":{"node":23,"path":"rotation"}},{"sampler":86,"target":{"node":23,"path":"scale"}},{"sampler":87,"target":{"node":36,"path":"translation"}},{"sampler":88,"target":{"node":36,"path":"rotation"}},{"sampler":89,"target":{"node":36,"path":"scale"}},{"sampler":90,"target":{"node":17,"path":"translation"}},{"sampler":91,"target":{"node":17,"path":"rotation"}},{"sampler":92,"target":{"node":17,"path":"scale"}},{"sampler":93,"target":{"node":56,"path":"translation"}},{"sampler":94,"target":{"node":56,"path":"rotation"}},{"sampler":95,"target":{"node":56,"path":"scale"}},{"sampler":96,"target":{"node":48,"path":"translation"}},{"sampler":97,"target":{"node":48,"path":"rotation"}},{"sampler":98,"target":{"node":48,"path":"scale"}},{"sampler":99,"target":{"node":4,"path":"translation"}},{"sampler":100,"target":{"node":4,"path":"rotation"}},{"sampler":101,"target":{"node":4,"path":"scale"}},{"sampler":102,"target":{"node":10,"path":"translation"}},{"sampler":103,"target":{"node":10,"path":"rotation"}},{"sampler":104,"target":{"node":10,"path":"scale"}},{"sampler":105,"target":{"node":51,"path":"translation"}},{"sampler":106,"target":{"node":51,"path":"rotation"}},{"sampler":107,"target":{"node":51,"path":"scale"}},{"sampler":108,"target":{"node":54,"path":"translation"}},{"sampler":109,"target":{"node":54,"path":"rotation"}},{"sampler":110,"target":{"node":54,"path":"scale"}},{"sampler":111,"target":{"node":11,"path":"translation"}},{"sampler":112,"target":{"node":11,"path":"rotation"}},{"sampler":113,"target":{"node":11,"path":"scale"}},{"sampler":114,"target":{"node":63,"path":"translation"}},{"sampler":115,"target":{"node":63,"path":"rotation"}},{"sampler":116,"target":{"node":63,"path":"scale"}},{"sampler":117,"target":{"node":46,"path":"translation"}},{"sampler":118,"target":{"node":46,"path":"rotation"}},{"sampler":119,"target":{"node":46,"path":"scale"}},{"sampler":120,"target":{"node":14,"path":"translation"}},{"sampler":121,"target":{"node":14,"path":"rotation"}},{"sampler":122,"target":{"node":14,"path":"scale"}},{"sampler":123,"target":{"node":5,"path":"translation"}},{"sampler":124,"target":{"node":5,"path":"rotation"}},{"sampler":125,"target":{"node":5,"path":"scale"}},{"sampler":126,"target":{"node":53,"path":"translation"}},{"sampler":127,"target":{"node":53,"path":"rotation"}},{"sampler":128,"target":{"node":53,"path":"scale"}},{"sampler":129,"target":{"node":39,"path":"translation"}},{"sampler":130,"target":{"node":39,"path":"rotation"}},{"sampler":131,"target":{"node":39,"path":"scale"}},{"sampler":132,"target":{"node":43,"path":"translation"}},{"sampler":133,"target":{"node":43,"path":"rotation"}},{"sampler":134,"target":{"node":43,"path":"scale"}},{"sampler":135,"target":{"node":6,"path":"translation"}},{"sampler":136,"target":{"node":6,"path":"rotation"}},{"sampler":137,"target":{"node":6,"path":"scale"}},{"sampler":138,"target":{"node":61,"path":"translation"}},{"sampler":139,"target":{"node":61,"path":"rotation"}},{"sampler":140,"target":{"node":61,"path":"scale"}},{"sampler":141,"target":{"node":67,"path":"translation"}},{"sampler":142,"target":{"node":67,"path":"rotation"}},{"sampler":143,"target":{"node":67,"path":"scale"}},{"sampler":144,"target":{"node":3,"path":"translation"}},{"sampler":145,"target":{"node":3,"path":"rotation"}},{"sampler":146,"target":{"node":3,"path":"scale"}},{"sampler":147,"target":{"node":44,"path":"translation"}},{"sampler":148,"target":{"node":44,"path":"rotation"}},{"sampler":149,"target":{"node":44,"path":"scale"}},{"sampler":150,"target":{"node":52,"path":"translation"}},{"sampler":151,"target":{"node":52,"path":"rotation"}},{"sampler":152,"target":{"node":52,"path":"scale"}},{"sampler":153,"target":{"node":65,"path":"translation"}},{"sampler":154,"target":{"node":65,"path":"rotation"}},{"sampler":155,"target":{"node":65,"path":"scale"}},{"sampler":156,"target":{"node":59,"path":"translation"}},{"sampler":157,"target":{"node":59,"path":"rotation"}},{"sampler":158,"target":{"node":59,"path":"scale"}},{"sampler":159,"target":{"node":0,"path":"translation"}},{"sampler":160,"target":{"node":0,"path":"rotation"}},{"sampler":161,"target":{"node":0,"path":"scale"}},{"sampler":162,"target":{"node":12,"path":"translation"}},{"sampler":163,"target":{"node":12,"path":"rotation"}},{"sampler":164,"target":{"node":12,"path":"scale"}},{"sampler":165,"target":{"node":41,"path":"translation"}},{"sampler":166,"target":{"node":41,"path":"rotation"}},{"sampler":167,"target":{"node":41,"path":"scale"}},{"sampler":168,"target":{"node":26,"path":"translation"}},{"sampler":169,"target":{"node":26,"path":"rotation"}},{"sampler":170,"target":{"node":26,"path":"scale"}},{"sampler":171,"target":{"node":49,"path":"translation"}},{"sampler":172,"target":{"node":49,"path":"rotation"}},{"sampler":173,"target":{"node":49,"path":"scale"}},{"sampler":174,"target":{"node":64,"path":"translation"}},{"sampler":175,"target":{"node":64,"path":"rotation"}},{"sampler":176,"target":{"node":64,"path":"scale"}},{"sampler":177,"target":{"node":15,"path":"translation"}},{"sampler":178,"target":{"node":15,"path":"rotation"}},{"sampler":179,"target":{"node":15,"path":"scale"}},{"sampler":180,"target":{"node":20,"path":"translation"}},{"sampler":181,"target":{"node":20,"path":"rotation"}},{"sampler":182,"target":{"node":20,"path":"scale"}},{"sampler":183,"target":{"node":31,"path":"translation"}},{"sampler":184,"target":{"node":31,"path":"rotation"}},{"sampler":185,"target":{"node":31,"path":"scale"}},{"sampler":186,"target":{"node":66,"path":"translation"}},{"sampler":187,"target":{"node":66,"path":"rotation"}},{"sampler":188,"target":{"node":66,"path":"scale"}},{"sampler":189,"target":{"node":42,"path":"translation"}},{"sampler":190,"target":{"node":42,"path":"rotation"}},{"sampler":191,"target":{"node":42,"path":"scale"}},{"sampler":192,"target":{"node":13,"path":"translation"}},{"sampler":193,"target":{"node":13,"path":"rotation"}},{"sampler":194,"target":{"node":13,"path":"scale"}},{"sampler":195,"target":{"node":32,"path":"translation"}},{"sampler":196,"target":{"node":32,"path":"rotation"}},{"sampler":197,"target":{"node":32,"path":"scale"}}],"name":"Idle","samplers":[{"input":228,"interpolation":"LINEAR","output":685},{"input":228,"interpolation":"LINEAR","output":558},{"input":228,"interpolation":"LINEAR","output":141},{"input":228,"interpolation":"LINEAR","output":701},{"input":228,"interpolation":"LINEAR","output":89},{"input":228,"interpolation":"LINEAR","output":55},{"input":228,"interpolation":"LINEAR","output":346},{"input":228,"interpolation":"LINEAR","output":623},{"input":228,"interpolation":"LINEAR","output":46},{"input":228,"interpolation":"LINEAR","output":649},{"input":228,"interpolation":"LINEAR","output":101},{"input":228,"interpolation":"LINEAR","output":779},{"input":228,"interpolation":"LINEAR","output":329},{"input":228,"interpolation":"LINEAR","output":25},{"input":228,"interpolation":"LINEAR","output":474},{"input":228,"interpolation":"LINEAR","output":501},{"input":228,"interpolation":"LINEAR","output":266},{"input":228,"interpolation":"LINEAR","output":313},{"input":228,"interpolation":"LINEAR","output":550},{"input":228,"interpolation":"LINEAR","output":151},{"input":228,"interpolation":"LINEAR","output":618},{"input":228,"interpolation":"LINEAR","output":15},{"input":228,"interpolation":"LINEAR","output":454},{"input":228,"interpolation":"LINEAR","output":481},{"input":228,"interpolation":"LINEAR","output":475},{"input":228,"interpolation":"LINEAR","output":425},{"input":228,"interpolation":"LINEAR","output":65},{"input":228,"interpolation":"LINEAR","output":424},{"input":228,"interpolation":"LINEAR","output":383},{"input":228,"interpolation":"LINEAR","output":319},{"input":228,"interpolation":"LINEAR","output":174},{"input":228,"interpolation":"LINEAR","output":484},{"input":228,"interpolation":"LINEAR","output":658},{"input":228,"interpolation":"LINEAR","output":56},{"input":228,"interpolation":"LINEAR","output":614},{"input":228,"interpolation":"LINEAR","output":67},{"input":228,"interpolation":"LINEAR","output":443},{"input":228,"interpolation":"LINEAR","output":364},{"input":228,"interpolation":"LINEAR","output":289},{"input":228,"interpolation":"LINEAR","output":616},{"input":228,"interpolation":"LINEAR","output":47},{"input":228,"interpolation":"LINEAR","output":132},{"input":228,"interpolation":"LINEAR","output":409},{"input":228,"interpolation":"LINEAR","output":708},{"input":228,"interpolation":"LINEAR","output":520},{"input":228,"interpolation":"LINEAR","output":374},{"input":228,"interpolation":"LINEAR","output":472},{"input":228,"interpolation":"LINEAR","output":121},{"input":228,"interpolation":"LINEAR","output":13},{"input":228,"interpolation":"LINEAR","output":6},{"input":228,"interpolation":"LINEAR","output":362},{"input":228,"interpolation":"LINEAR","output":420},{"input":228,"interpolation":"LINEAR","output":499},{"input":228,"interpolation":"LINEAR","output":741},{"input":228,"interpolation":"LINEAR","output":157},{"input":228,"interpolation":"LINEAR","output":136},{"input":228,"interpolation":"LINEAR","output":288},{"input":228,"interpolation":"LINEAR","output":678},{"input":228,"interpolation":"LINEAR","output":718},{"input":228,"interpolation":"LINEAR","output":73},{"input":228,"interpolation":"LINEAR","output":4},{"input":228,"interpolation":"LINEAR","output":278},{"input":228,"interpolation":"LINEAR","output":173},{"input":228,"interpolation":"LINEAR","output":186},{"input":228,"interpolation":"LINEAR","output":184},{"input":228,"interpolation":"LINEAR","output":248},{"input":228,"interpolation":"LINEAR","output":337},{"input":228,"interpolation":"LINEAR","output":200},{"input":228,"interpolation":"LINEAR","output":452},{"input":228,"interpolation":"LINEAR","output":525},{"input":228,"interpolation":"LINEAR","output":721},{"input":228,"interpolation":"LINEAR","output":147},{"input":228,"interpolation":"LINEAR","output":766},{"input":228,"interpolation":"LINEAR","output":790},{"input":228,"interpolation":"LINEAR","output":33},{"input":228,"interpolation":"LINEAR","output":79},{"input":228,"interpolation":"LINEAR","output":83},{"input":228,"interpolation":"LINEAR","output":48},{"input":228,"interpolation":"LINEAR","output":282},{"input":228,"interpolation":"LINEAR","output":117},{"input":228,"interpolation":"LINEAR","output":69},{"input":228,"interpolation":"LINEAR","output":745},{"input":228,"interpolation":"LINEAR","output":408},{"input":228,"interpolation":"LINEAR","output":52},{"input":228,"interpolation":"LINEAR","output":12},{"input":228,"interpolation":"LINEAR","output":177},{"input":228,"interpolation":"LINEAR","output":207},{"input":228,"interpolation":"LINEAR","output":555},{"input":228,"interpolation":"LINEAR","output":542},{"input":228,"interpolation":"LINEAR","output":307},{"input":228,"interpolation":"LINEAR","output":676},{"input":228,"interpolation":"LINEAR","output":406},{"input":228,"interpolation":"LINEAR","output":80},{"input":228,"interpolation":"LINEAR","output":529},{"input":228,"interpolation":"LINEAR","output":723},{"input":228,"interpolation":"LINEAR","output":774},{"input":228,"interpolation":"LINEAR","output":385},{"input":228,"interpolation":"LINEAR","output":140},{"input":228,"interpolation":"LINEAR","output":280},{"input":228,"interpolation":"LINEAR","output":461},{"input":228,"interpolation":"LINEAR","output":776},{"input":228,"interpolation":"LINEAR","output":206},{"input":228,"interpolation":"LINEAR","output":202},{"input":228,"interpolation":"LINEAR","output":594},{"input":228,"interpolation":"LINEAR","output":208},{"input":228,"interpolation":"LINEAR","output":77},{"input":228,"interpolation":"LINEAR","output":276},{"input":228,"interpolation":"LINEAR","output":606},{"input":228,"interpolation":"LINEAR","output":743},{"input":228,"interpolation":"LINEAR","output":251},{"input":228,"interpolation":"LINEAR","output":87},{"input":228,"interpolation":"LINEAR","output":246},{"input":228,"interpolation":"LINEAR","output":559},{"input":228,"interpolation":"LINEAR","output":607},{"input":228,"interpolation":"LINEAR","output":565},{"input":228,"interpolation":"LINEAR","output":674},{"input":228,"interpolation":"LINEAR","output":476},{"input":228,"interpolation":"LINEAR","output":771},{"input":228,"interpolation":"LINEAR","output":23},{"input":228,"interpolation":"LINEAR","output":807},{"input":228,"interpolation":"LINEAR","output":384},{"input":228,"interpolation":"LINEAR","output":450},{"input":228,"interpolation":"LINEAR","output":324},{"input":228,"interpolation":"LINEAR","output":369},{"input":228,"interpolation":"LINEAR","output":491},{"input":228,"interpolation":"LINEAR","output":698},{"input":228,"interpolation":"LINEAR","output":582},{"input":228,"interpolation":"LINEAR","output":747},{"input":228,"interpolation":"LINEAR","output":122},{"input":228,"interpolation":"LINEAR","output":171},{"input":228,"interpolation":"LINEAR","output":216},{"input":228,"interpolation":"LINEAR","output":660},{"input":228,"interpolation":"LINEAR","output":643},{"input":228,"interpolation":"LINEAR","output":350},{"input":228,"interpolation":"LINEAR","output":682},{"input":228,"interpolation":"LINEAR","output":534},{"input":228,"interpolation":"LINEAR","output":441},{"input":228,"interpolation":"LINEAR","output":315},{"input":228,"interpolation":"LINEAR","output":754},{"input":228,"interpolation":"LINEAR","output":223},{"input":228,"interpolation":"LINEAR","output":390},{"input":228,"interpolation":"LINEAR","output":187},{"input":228,"interpolation":"LINEAR","output":275},{"input":228,"interpolation":"LINEAR","output":630},{"input":228,"interpolation":"LINEAR","output":679},{"input":228,"interpolation":"LINEAR","output":222},{"input":228,"interpolation":"LINEAR","output":16},{"input":228,"interpolation":"LINEAR","output":496},{"input":228,"interpolation":"LINEAR","output":326},{"input":228,"interpolation":"LINEAR","output":250},{"input":228,"interpolation":"LINEAR","output":583},{"input":228,"interpolation":"LINEAR","output":358},{"input":228,"interpolation":"LINEAR","output":788},{"input":228,"interpolation":"LINEAR","output":765},{"input":228,"interpolation":"LINEAR","output":241},{"input":228,"interpolation":"LINEAR","output":577},{"input":228,"interpolation":"LINEAR","output":70},{"input":228,"interpolation":"LINEAR","output":793},{"input":228,"interpolation":"LINEAR","output":694},{"input":228,"interpolation":"LINEAR","output":453},{"input":228,"interpolation":"LINEAR","output":697},{"input":228,"interpolation":"LINEAR","output":43},{"input":228,"interpolation":"LINEAR","output":568},{"input":228,"interpolation":"LINEAR","output":552},{"input":228,"interpolation":"LINEAR","output":615},{"input":228,"interpolation":"LINEAR","output":325},{"input":228,"interpolation":"LINEAR","output":106},{"input":228,"interpolation":"LINEAR","output":549},{"input":228,"interpolation":"LINEAR","output":513},{"input":228,"interpolation":"LINEAR","output":331},{"input":228,"interpolation":"LINEAR","output":211},{"input":228,"interpolation":"LINEAR","output":770},{"input":228,"interpolation":"LINEAR","output":196},{"input":228,"interpolation":"LINEAR","output":226},{"input":228,"interpolation":"LINEAR","output":734},{"input":228,"interpolation":"LINEAR","output":238},{"input":228,"interpolation":"LINEAR","output":309},{"input":228,"interpolation":"LINEAR","output":296},{"input":228,"interpolation":"LINEAR","output":656},{"input":228,"interpolation":"LINEAR","output":230},{"input":228,"interpolation":"LINEAR","output":232},{"input":228,"interpolation":"LINEAR","output":399},{"input":228,"interpolation":"LINEAR","output":641},{"input":228,"interpolation":"LINEAR","output":603},{"input":228,"interpolation":"LINEAR","output":434},{"input":228,"interpolation":"LINEAR","output":283},{"input":228,"interpolation":"LINEAR","output":522},{"input":228,"interpolation":"LINEAR","output":229},{"input":228,"interpolation":"LINEAR","output":557},{"input":228,"interpolation":"LINEAR","output":299},{"input":228,"interpolation":"LINEAR","output":537},{"input":228,"interpolation":"LINEAR","output":530},{"input":228,"interpolation":"LINEAR","output":287},{"input":228,"interpolation":"LINEAR","output":323},{"input":228,"interpolation":"LINEAR","output":333},{"input":228,"interpolation":"LINEAR","output":213},{"input":228,"interpolation":"LINEAR","output":444},{"input":228,"interpolation":"LINEAR","output":375}]},{"channels":[{"sampler":0,"target":{"node":47,"path":"translation"}},{"sampler":1,"target":{"node":47,"path":"rotation"}},{"sampler":2,"target":{"node":47,"path":"scale"}},{"sampler":3,"target":{"node":37,"path":"translation"}},{"sampler":4,"target":{"node":37,"path":"rotation"}},{"sampler":5,"target":{"node":37,"path":"scale"}},{"sampler":6,"target":{"node":8,"path":"translation"}},{"sampler":7,"target":{"node":8,"path":"rotation"}},{"sampler":8,"target":{"node":8,"path":"scale"}},{"sampler":9,"target":{"node":16,"path":"translation"}},{"sampler":10,"target":{"node":16,"path":"rotation"}},{"sampler":11,"target":{"node":16,"path":"scale"}},{"sampler":12,"target":{"node":34,"path":"translation"}},{"sampler":13,"target":{"node":34,"path":"rotation"}},{"sampler":14,"target":{"node":34,"path":"scale"}},{"sampler":15,"target":{"node":60,"path":"translation"}},{"sampler":16,"target":{"node":60,"path":"rotation"}},{"sampler":17,"target":{"node":60,"path":"scale"}},{"sampler":18,"target":{"node":24,"path":"translation"}},{"sampler":19,"target":{"node":24,"path":"rotation"}},{"sampler":20,"target":{"node":24,"path":"scale"}},{"sampler":21,"target":{"node":57,"path":"translation"}},{"sampler":22,"target":{"node":57,"path":"rotation"}},{"sampler":23,"target":{"node":57,"path":"scale"}},{"sampler":24,"target":{"node":7,"path":"translation"}},{"sampler":25,"target":{"node":7,"path":"rotation"}},{"sampler":26,"target":{"node":7,"path":"scale"}},{"sampler":27,"target":{"node":29,"path":"translation"}},{"sampler":28,"target":{"node":29,"path":"rotation"}},{"sampler":29,"target":{"node":29,"path":"scale"}},{"sampler":30,"target":{"node":55,"path":"translation"}},{"sampler":31,"target":{"node":55,"path":"rotation"}},{"sampler":32,"target":{"node":55,"path":"scale"}},{"sampler":33,"target":{"node":33,"path":"translation"}},{"sampler":34,"target":{"node":33,"path":"rotation"}},{"sampler":35,"target":{"node":33,"path":"scale"}},{"sampler":36,"target":{"node":45,"path":"translation"}},{"sampler":37,"target":{"node":45,"path":"rotation"}},{"sampler":38,"target":{"node":45,"path":"scale"}},{"sampler":39,"target":{"node":9,"path":"translation"}},{"sampler":40,"target":{"node":9,"path":"rotation"}},{"sampler":41,"target":{"node":9,"path":"scale"}},{"sampler":42,"target":{"node":62,"path":"translation"}},{"sampler":43,"target":{"node":62,"path":"rotation"}},{"sampler":44,"target":{"node":62,"path":"scale"}},{"sampler":45,"target":{"node":58,"path":"translation"}},{"sampler":46,"target":{"node":58,"path":"rotation"}},{"sampler":47,"target":{"node":58,"path":"scale"}},{"sampler":48,"target":{"node":30,"path":"translation"}},{"sampler":49,"target":{"node":30,"path":"rotation"}},{"sampler":50,"target":{"node":30,"path":"scale"}},{"sampler":51,"target":{"node":19,"path":"translation"}},{"sampler":52,"target":{"node":19,"path":"rotation"}},{"sampler":53,"target":{"node":19,"path":"scale"}},{"sampler":54,"target":{"node":27,"path":"translation"}},{"sampler":55,"target":{"node":27,"path":"rotation"}},{"sampler":56,"target":{"node":27,"path":"scale"}},{"sampler":57,"target":{"node":40,"path":"translation"}},{"sampler":58,"target":{"node":40,"path":"rotation"}},{"sampler":59,"target":{"node":40,"path":"scale"}},{"sampler":60,"target":{"node":50,"path":"translation"}},{"sampler":61,"target":{"node":50,"path":"rotation"}},{"sampler":62,"target":{"node":50,"path":"scale"}},{"sampler":63,"target":{"node":22,"path":"translation"}},{"sampler":64,"target":{"node":22,"path":"rotation"}},{"sampler":65,"target":{"node":22,"path":"scale"}},{"sampler":66,"target":{"node":18,"path":"translation"}},{"sampler":67,"target":{"node":18,"path":"rotation"}},{"sampler":68,"target":{"node":18,"path":"scale"}},{"sampler":69,"target":{"node":35,"path":"translation"}},{"sampler":70,"target":{"node":35,"path":"rotation"}},{"sampler":71,"target":{"node":35,"path":"scale"}},{"sampler":72,"target":{"node":38,"path":"translation"}},{"sampler":73,"target":{"node":38,"path":"rotation"}},{"sampler":74,"target":{"node":38,"path":"scale"}},{"sampler":75,"target":{"node":21,"path":"translation"}},{"sampler":76,"target":{"node":21,"path":"rotation"}},{"sampler":77,"target":{"node":21,"path":"scale"}},{"sampler":78,"target":{"node":28,"path":"translation"}},{"sampler":79,"target":{"node":28,"path":"rotation"}},{"sampler":80,"target":{"node":28,"path":"scale"}},{"sampler":81,"target":{"node":25,"path":"translation"}},{"sampler":82,"target":{"node":25,"path":"rotation"}},{"sampler":83,"target":{"node":25,"path":"scale"}},{"sampler":84,"target":{"node":23,"path":"translation"}},{"sampler":85,"target":{"node":23,"path":"rotation"}},{"sampler":86,"target":{"node":23,"path":"scale"}},{"sampler":87,"target":{"node":36,"path":"translation"}},{"sampler":88,"target":{"node":36,"path":"rotation"}},{"sampler":89,"target":{"node":36,"path":"scale"}},{"sampler":90,"target":{"node":17,"path":"translation"}},{"sampler":91,"target":{"node":17,"path":"rotation"}},{"sampler":92,"target":{"node":17,"path":"scale"}},{"sampler":93,"target":{"node":56,"path":"translation"}},{"sampler":94,"target":{"node":56,"path":"rotation"}},{"sampler":95,"target":{"node":56,"path":"scale"}},{"sampler":96,"target":{"node":48,"path":"translation"}},{"sampler":97,"target":{"node":48,"path":"rotation"}},{"sampler":98,"target":{"node":48,"path":"scale"}},{"sampler":99,"target":{"node":4,"path":"translation"}},{"sampler":100,"target":{"node":4,"path":"rotation"}},{"sampler":101,"target":{"node":4,"path":"scale"}},{"sampler":102,"target":{"node":10,"path":"translation"}},{"sampler":103,"target":{"node":10,"path":"rotation"}},{"sampler":104,"target":{"node":10,"path":"scale"}},{"sampler":105,"target":{"node":51,"path":"translation"}},{"sampler":106,"target":{"node":51,"path":"rotation"}},{"sampler":107,"target":{"node":51,"path":"scale"}},{"sampler":108,"target":{"node":54,"path":"translation"}},{"sampler":109,"target":{"node":54,"path":"rotation"}},{"sampler":110,"target":{"node":54,"path":"scale"}},{"sampler":111,"target":{"node":11,"path":"translation"}},{"sampler":112,"target":{"node":11,"path":"rotation"}},{"sampler":113,"target":{"node":11,"path":"scale"}},{"sampler":114,"target":{"node":63,"path":"translation"}},{"sampler":115,"target":{"node":63,"path":"rotation"}},{"sampler":116,"target":{"node":63,"path":"scale"}},{"sampler":117,"target":{"node":46,"path":"translation"}},{"sampler":118,"target":{"node":46,"path":"rotation"}},{"sampler":119,"target":{"node":46,"path":"scale"}},{"sampler":120,"target":{"node":14,"path":"translation"}},{"sampler":121,"target":{"node":14,"path":"rotation"}},{"sampler":122,"target":{"node":14,"path":"scale"}},{"sampler":123,"target":{"node":5,"path":"translation"}},{"sampler":124,"target":{"node":5,"path":"rotation"}},{"sampler":125,"target":{"node":5,"path":"scale"}},{"sampler":126,"target":{"node":53,"path":"translation"}},{"sampler":127,"target":{"node":53,"path":"rotation"}},{"sampler":128,"target":{"node":53,"path":"scale"}},{"sampler":129,"target":{"node":39,"path":"translation"}},{"sampler":130,"target":{"node":39,"path":"rotation"}},{"sampler":131,"target":{"node":39,"path":"scale"}},{"sampler":132,"target":{"node":43,"path":"translation"}},{"sampler":133,"target":{"node":43,"path":"rotation"}},{"sampler":134,"target":{"node":43,"path":"scale"}},{"sampler":135,"target":{"node":6,"path":"translation"}},{"sampler":136,"target":{"node":6,"path":"rotation"}},{"sampler":137,"target":{"node":6,"path":"scale"}},{"sampler":138,"target":{"node":61,"path":"translation"}},{"sampler":139,"target":{"node":61,"path":"rotation"}},{"sampler":140,"target":{"node":61,"path":"scale"}},{"sampler":141,"target":{"node":67,"path":"translation"}},{"sampler":142,"target":{"node":67,"path":"rotation"}},{"sampler":143,"target":{"node":67,"path":"scale"}},{"sampler":144,"target":{"node":3,"path":"translation"}},{"sampler":145,"target":{"node":3,"path":"rotation"}},{"sampler":146,"target":{"node":3,"path":"scale"}},{"sampler":147,"target":{"node":44,"path":"translation"}},{"sampler":148,"target":{"node":44,"path":"rotation"}},{"sampler":149,"target":{"node":44,"path":"scale"}},{"sampler":150,"target":{"node":52,"path":"translation"}},{"sampler":151,"target":{"node":52,"path":"rotation"}},{"sampler":152,"target":{"node":52,"path":"scale"}},{"sampler":153,"target":{"node":65,"path":"translation"}},{"sampler":154,"target":{"node":65,"path":"rotation"}},{"sampler":155,"target":{"node":65,"path":"scale"}},{"sampler":156,"target":{"node":59,"path":"translation"}},{"sampler":157,"target":{"node":59,"path":"rotation"}},{"sampler":158,"target":{"node":59,"path":"scale"}},{"sampler":159,"target":{"node":0,"path":"translation"}},{"sampler":160,"target":{"node":0,"path":"rotation"}},{"sampler":161,"target":{"node":0,"path":"scale"}},{"sampler":162,"target":{"node":12,"path":"translation"}},{"sampler":163,"target":{"node":12,"path":"rotation"}},{"sampler":164,"target":{"node":12,"path":"scale"}},{"sampler":165,"target":{"node":41,"path":"translation"}},{"sampler":166,"target":{"node":41,"path":"rotation"}},{"sampler":167,"target":{"node":41,"path":"scale"}},{"sampler":168,"target":{"node":26,"path":"translation"}},{"sampler":169,"target":{"node":26,"path":"rotation"}},{"sampler":170,"target":{"node":26,"path":"scale"}},{"sampler":171,"target":{"node":49,"path":"translation"}},{"sampler":172,"target":{"node":49,"path":"rotation"}},{"sampler":173,"target":{"node":49,"path":"scale"}},{"sampler":174,"target":{"node":64,"path":"translation"}},{"sampler":175,"target":{"node":64,"path":"rotation"}},{"sampler":176,"target":{"node":64,"path":"scale"}},{"sampler":177,"target":{"node":15,"path":"translation"}},{"sampler":178,"target":{"node":15,"path":"rotation"}},{"sampler":179,"target":{"node":15,"path":"scale"}},{"sampler":180,"target":{"node":20,"path":"translation"}},{"sampler":181,"target":{"node":20,"path":"rotation"}},{"sampler":182,"target":{"node":20,"path":"scale"}},{"sampler":183,"target":{"node":31,"path":"translation"}},{"sampler":184,"target":{"node":31,"path":"rotation"}},{"sampler":185,"target":{"node":31,"path":"scale"}},{"sampler":186,"target":{"node":66,"path":"translation"}},{"sampler":187,"target":{"node":66,"path":"rotation"}},{"sampler":188,"target":{"node":66,"path":"scale"}},{"sampler":189,"target":{"node":42,"path":"translation"}},{"sampler":190,"target":{"node":42,"path":"rotation"}},{"sampler":191,"target":{"node":42,"path":"scale"}},{"sampler":192,"target":{"node":13,"path":"translation"}},{"sampler":193,"target":{"node":13,"path":"rotation"}},{"sampler":194,"target":{"node":13,"path":"scale"}},{"sampler":195,"target":{"node":32,"path":"translation"}},{"sampler":196,"target":{"node":32,"path":"rotation"}},{"sampler":197,"target":{"node":32,"path":"scale"}}],"name":"TPose","samplers":[{"input":102,"interpolation":"LINEAR","output":300},{"input":102,"interpolation":"LINEAR","output":290},{"input":102,"interpolation":"LINEAR","output":714},{"input":102,"interpolation":"LINEAR","output":387},{"input":102,"interpolation":"LINEAR","output":317},{"input":102,"interpolation":"LINEAR","output":509},{"input":102,"interpolation":"LINEAR","output":592},{"input":102,"interpolation":"LINEAR","output":464},{"input":102,"interpolation":"LINEAR","output":657},{"input":102,"interpolation":"LINEAR","output":804},{"input":102,"interpolation":"LINEAR","output":348},{"input":102,"interpolation":"LINEAR","output":482},{"input":102,"interpolation":"LINEAR","output":699},{"input":102,"interpolation":"LINEAR","output":664},{"input":102,"interpolation":"LINEAR","output":382},{"input":102,"interpolation":"LINEAR","output":168},{"input":102,"interpolation":"LINEAR","output":39},{"input":102,"interpolation":"LINEAR","output":538},{"input":102,"interpolation":"LINEAR","output":617},{"input":102,"interpolation":"LINEAR","output":410},{"input":102,"interpolation":"LINEAR","output":536},{"input":102,"interpolation":"LINEAR","output":673},{"input":102,"interpolation":"LINEAR","output":104},{"input":102,"interpolation":"LINEAR","output":284},{"input":102,"interpolation":"LINEAR","output":412},{"input":102,"interpolation":"LINEAR","output":576},{"input":102,"interpolation":"LINEAR","output":91},{"input":102,"interpolation":"LINEAR","output":612},{"input":102,"interpolation":"LINEAR","output":610},{"input":102,"interpolation":"LINEAR","output":665},{"input":102,"interpolation":"LINEAR","output":402},{"input":102,"interpolation":"LINEAR","output":14},{"input":102,"interpolation":"LINEAR","output":110},{"input":102,"interpolation":"LINEAR","output":343},{"input":102,"interpolation":"LINEAR","output":237},{"input":102,"interpolation":"LINEAR","output":648},{"input":102,"interpolation":"LINEAR","output":209},{"input":102,"interpolation":"LINEAR","output":335},{"input":102,"interpolation":"LINEAR","output":371},{"input":102,"interpolation":"LINEAR","output":479},{"input":102,"interpolation":"LINEAR","output":367},{"input":102,"interpolation":"LINEAR","output":428},{"input":102,"interpolation":"LINEAR","output":478},{"input":102,"interpolation":"LINEAR","output":742},{"input":102,"interpolation":"LINEAR","output":797},{"input":102,"interpolation":"LINEAR","output":650},{"input":102,"interpolation":"LINEAR","output":642},{"input":102,"interpolation":"LINEAR","output":26},{"input":102,"interpolation":"LINEAR","output":578},{"input":102,"interpolation":"LINEAR","output":732},{"input":102,"interpolation":"LINEAR","output":405},{"input":102,"interpolation":"LINEAR","output":340},{"input":102,"interpolation":"LINEAR","output":279},{"input":102,"interpolation":"LINEAR","output":286},{"input":102,"interpolation":"LINEAR","output":165},{"input":102,"interpolation":"LINEAR","output":255},{"input":102,"interpolation":"LINEAR","output":524},{"input":102,"interpolation":"LINEAR","output":158},{"input":102,"interpolation":"LINEAR","output":639},{"input":102,"interpolation":"LINEAR","output":422},{"input":102,"interpolation":"LINEAR","output":647},{"input":102,"interpolation":"LINEAR","output":403},{"input":102,"interpolation":"LINEAR","output":803},{"input":102,"interpolation":"LINEAR","output":486},{"input":102,"interpolation":"LINEAR","output":563},{"input":102,"interpolation":"LINEAR","output":172},{"input":102,"interpolation":"LINEAR","output":44},{"input":102,"interpolation":"LINEAR","output":710},{"input":102,"interpolation":"LINEAR","output":372},{"input":102,"interpolation":"LINEAR","output":128},{"input":102,"interpolation":"LINEAR","output":500},{"input":102,"interpolation":"LINEAR","output":677},{"input":102,"interpolation":"LINEAR","output":415},{"input":102,"interpolation":"LINEAR","output":675},{"input":102,"interpolation":"LINEAR","output":103},{"input":102,"interpolation":"LINEAR","output":114},{"input":102,"interpolation":"LINEAR","output":506},{"input":102,"interpolation":"LINEAR","output":297},{"input":102,"interpolation":"LINEAR","output":556},{"input":102,"interpolation":"LINEAR","output":322},{"input":102,"interpolation":"LINEAR","output":218},{"input":102,"interpolation":"LINEAR","output":449},{"input":102,"interpolation":"LINEAR","output":569},{"input":102,"interpolation":"LINEAR","output":458},{"input":102,"interpolation":"LINEAR","output":149},{"input":102,"interpolation":"LINEAR","output":160},{"input":102,"interpolation":"LINEAR","output":767},{"input":102,"interpolation":"LINEAR","output":775},{"input":102,"interpolation":"LINEAR","output":291},{"input":102,"interpolation":"LINEAR","output":298},{"input":102,"interpolation":"LINEAR","output":22},{"input":102,"interpolation":"LINEAR","output":227},{"input":102,"interpolation":"LINEAR","output":611},{"input":102,"interpolation":"LINEAR","output":787},{"input":102,"interpolation":"LINEAR","output":82},{"input":102,"interpolation":"LINEAR","output":42},{"input":102,"interpolation":"LINEAR","output":54},{"input":102,"interpolation":"LINEAR","output":66},{"input":102,"interpolation":"LINEAR","output":505},{"input":102,"interpolation":"LINEAR","output":332},{"input":102,"interpolation":"LINEAR","output":738},{"input":102,"interpolation":"LINEAR","output":799},{"input":102,"interpolation":"LINEAR","output":254},{"input":102,"interpolation":"LINEAR","output":153},{"input":102,"interpolation":"LINEAR","output":781},{"input":102,"interpolation":"LINEAR","output":554},{"input":102,"interpolation":"LINEAR","output":523},{"input":102,"interpolation":"LINEAR","output":517},{"input":102,"interpolation":"LINEAR","output":681},{"input":102,"interpolation":"LINEAR","output":60},{"input":102,"interpolation":"LINEAR","output":193},{"input":102,"interpolation":"LINEAR","output":224},{"input":102,"interpolation":"LINEAR","output":92},{"input":102,"interpolation":"LINEAR","output":459},{"input":102,"interpolation":"LINEAR","output":494},{"input":102,"interpolation":"LINEAR","output":124},{"input":102,"interpolation":"LINEAR","output":709},{"input":102,"interpolation":"LINEAR","output":28},{"input":102,"interpolation":"LINEAR","output":503},{"input":102,"interpolation":"LINEAR","output":24},{"input":102,"interpolation":"LINEAR","output":146},{"input":102,"interpolation":"LINEAR","output":467},{"input":102,"interpolation":"LINEAR","output":119},{"input":102,"interpolation":"LINEAR","output":212},{"input":102,"interpolation":"LINEAR","output":249},{"input":102,"interpolation":"LINEAR","output":794},{"input":102,"interpolation":"LINEAR","output":71},{"input":102,"interpolation":"LINEAR","output":778},{"input":102,"interpolation":"LINEAR","output":806},{"input":102,"interpolation":"LINEAR","output":619},{"input":102,"interpolation":"LINEAR","output":281},{"input":102,"interpolation":"LINEAR","output":234},{"input":102,"interpolation":"LINEAR","output":321},{"input":102,"interpolation":"LINEAR","output":353},{"input":102,"interpolation":"LINEAR","output":644},{"input":102,"interpolation":"LINEAR","output":189},{"input":102,"interpolation":"LINEAR","output":773},{"input":102,"interpolation":"LINEAR","output":487},{"input":102,"interpolation":"LINEAR","output":378},{"input":102,"interpolation":"LINEAR","output":285},{"input":102,"interpolation":"LINEAR","output":686},{"input":102,"interpolation":"LINEAR","output":757},{"input":102,"interpolation":"LINEAR","output":204},{"input":102,"interpolation":"LINEAR","output":431},{"input":102,"interpolation":"LINEAR","output":123},{"input":102,"interpolation":"LINEAR","output":573},{"input":102,"interpolation":"LINEAR","output":720},{"input":102,"interpolation":"LINEAR","output":336},{"input":102,"interpolation":"LINEAR","output":404},{"input":102,"interpolation":"LINEAR","output":798},{"input":102,"interpolation":"LINEAR","output":192},{"input":102,"interpolation":"LINEAR","output":532},{"input":102,"interpolation":"LINEAR","output":772},{"input":102,"interpolation":"LINEAR","output":203},{"input":102,"interpolation":"LINEAR","output":600},{"input":102,"interpolation":"LINEAR","output":8},{"input":102,"interpolation":"LINEAR","output":511},{"input":102,"interpolation":"LINEAR","output":469},{"input":102,"interpolation":"LINEAR","output":263},{"input":102,"interpolation":"LINEAR","output":580},{"input":102,"interpolation":"LINEAR","output":411},{"input":102,"interpolation":"LINEAR","output":584},{"input":102,"interpolation":"LINEAR","output":108},{"input":102,"interpolation":"LINEAR","output":273},{"input":102,"interpolation":"LINEAR","output":185},{"input":102,"interpolation":"LINEAR","output":436},{"input":102,"interpolation":"LINEAR","output":357},{"input":102,"interpolation":"LINEAR","output":53},{"input":102,"interpolation":"LINEAR","output":365},{"input":102,"interpolation":"LINEAR","output":625},{"input":102,"interpolation":"LINEAR","output":397},{"input":102,"interpolation":"LINEAR","output":688},{"input":102,"interpolation":"LINEAR","output":139},{"input":102,"interpolation":"LINEAR","output":690},{"input":102,"interpolation":"LINEAR","output":724},{"input":102,"interpolation":"LINEAR","output":345},{"input":102,"interpolation":"LINEAR","output":81},{"input":102,"interpolation":"LINEAR","output":318},{"input":102,"interpolation":"LINEAR","output":731},{"input":102,"interpolation":"LINEAR","output":722},{"input":102,"interpolation":"LINEAR","output":427},{"input":102,"interpolation":"LINEAR","output":601},{"input":102,"interpolation":"LINEAR","output":711},{"input":102,"interpolation":"LINEAR","output":712},{"input":102,"interpolation":"LINEAR","output":448},{"input":102,"interpolation":"LINEAR","output":356},{"input":102,"interpolation":"LINEAR","output":277},{"input":102,"interpolation":"LINEAR","output":426},{"input":102,"interpolation":"LINEAR","output":159},{"input":102,"interpolation":"LINEAR","output":264},{"input":102,"interpolation":"LINEAR","output":50},{"input":102,"interpolation":"LINEAR","output":198},{"input":102,"interpolation":"LINEAR","output":31},{"input":102,"interpolation":"LINEAR","output":457},{"input":102,"interpolation":"LINEAR","output":349},{"input":102,"interpolation":"LINEAR","output":764},{"input":102,"interpolation":"LINEAR","output":368},{"input":102,"interpolation":"LINEAR","output":231}]},{"channels":[{"sampler":0,"target":{"node":47,"path":"translation"}},{"sampler":1,"target":{"node":47,"path":"rotation"}},{"sampler":2,"target":{"node":47,"path":"scale"}},{"sampler":3,"target":{"node":37,"path":"translation"}},{"sampler":4,"target":{"node":37,"path":"rotation"}},{"sampler":5,"target":{"node":37,"path":"scale"}},{"sampler":6,"target":{"node":8,"path":"translation"}},{"sampler":7,"target":{"node":8,"path":"rotation"}},{"sampler":8,"target":{"node":8,"path":"scale"}},{"sampler":9,"target":{"node":16,"path":"translation"}},{"sampler":10,"target":{"node":16,"path":"rotation"}},{"sampler":11,"target":{"node":16,"path":"scale"}},{"sampler":12,"target":{"node":34,"path":"translation"}},{"sampler":13,"target":{"node":34,"path":"rotation"}},{"sampler":14,"target":{"node":34,"path":"scale"}},{"sampler":15,"target":{"node":60,"path":"translation"}},{"sampler":16,"target":{"node":60,"path":"rotation"}},{"sampler":17,"target":{"node":60,"path":"scale"}},{"sampler":18,"target":{"node":24,"path":"translation"}},{"sampler":19,"target":{"node":24,"path":"rotation"}},{"sampler":20,"target":{"node":24,"path":"scale"}},{"sampler":21,"target":{"node":57,"path":"translation"}},{"sampler":22,"target":{"node":57,"path":"rotation"}},{"sampler":23,"target":{"node":57,"path":"scale"}},{"sampler":24,"target":{"node":7,"path":"translation"}},{"sampler":25,"target":{"node":7,"path":"rotation"}},{"sampler":26,"target":{"node":7,"path":"scale"}},{"sampler":27,"target":{"node":29,"path":"translation"}},{"sampler":28,"target":{"node":29,"path":"rotation"}},{"sampler":29,"target":{"node":29,"path":"scale"}},{"sampler":30,"target":{"node":55,"path":"translation"}},{"sampler":31,"target":{"node":55,"path":"rotation"}},{"sampler":32,"target":{"node":55,"path":"scale"}},{"sampler":33,"target":{"node":33,"path":"translation"}},{"sampler":34,"target":{"node":33,"path":"rotation"}},{"sampler":35,"target":{"node":33,"path":"scale"}},{"sampler":36,"target":{"node":45,"path":"translation"}},{"sampler":37,"target":{"node":45,"path":"rotation"}},{"sampler":38,"target":{"node":45,"path":"scale"}},{"sampler":39,"target":{"node":9,"path":"translation"}},{"sampler":40,"target":{"node":9,"path":"rotation"}},{"sampler":41,"target":{"node":9,"path":"scale"}},{"sampler":42,"target":{"node":62,"path":"translation"}},{"sampler":43,"target":{"node":62,"path":"rotation"}},{"sampler":44,"target":{"node":62,"path":"scale"}},{"sampler":45,"target":{"node":58,"path":"translation"}},{"sampler":46,"target":{"node":58,"path":"rotation"}},{"sampler":47,"target":{"node":58,"path":"scale"}},{"sampler":48,"target":{"node":30,"path":"translation"}},{"sampler":49,"target":{"node":30,"path":"rotation"}},{"sampler":50,"target":{"node":30,"path":"scale"}},{"sampler":51,"target":{"node":19,"path":"translation"}},{"sampler":52,"target":{"node":19,"path":"rotation"}},{"sampler":53,"target":{"node":19,"path":"scale"}},{"sampler":54,"target":{"node":27,"path":"translation"}},{"sampler":55,"target":{"node":27,"path":"rotation"}},{"sampler":56,"target":{"node":27,"path":"scale"}},{"sampler":57,"target":{"node":40,"path":"translation"}},{"sampler":58,"target":{"node":40,"path":"rotation"}},{"sampler":59,"target":{"node":40,"path":"scale"}},{"sampler":60,"target":{"node":50,"path":"translation"}},{"sampler":61,"target":{"node":50,"path":"rotation"}},{"sampler":62,"target":{"node":50,"path":"scale"}},{"sampler":63,"target":{"node":22,"path":"translation"}},{"sampler":64,"target":{"node":22,"path":"rotation"}},{"sampler":65,"target":{"node":22,"path":"scale"}},{"sampler":66,"target":{"node":18,"path":"translation"}},{"sampler":67,"target":{"node":18,"path":"rotation"}},{"sampler":68,"target":{"node":18,"path":"scale"}},{"sampler":69,"target":{"node":35,"path":"translation"}},{"sampler":70,"target":{"node":35,"path":"rotation"}},{"sampler":71,"target":{"node":35,"path":"scale"}},{"sampler":72,"target":{"node":38,"path":"translation"}},{"sampler":73,"target":{"node":38,"path":"rotation"}},{"sampler":74,"target":{"node":38,"path":"scale"}},{"sampler":75,"target":{"node":21,"path":"translation"}},{"sampler":76,"target":{"node":21,"path":"rotation"}},{"sampler":77,"target":{"node":21,"path":"scale"}},{"sampler":78,"target":{"node":28,"path":"translation"}},{"sampler":79,"target":{"node":28,"path":"rotation"}},{"sampler":80,"target":{"node":28,"path":"scale"}},{"sampler":81,"target":{"node":25,"path":"translation"}},{"sampler":82,"target":{"node":25,"path":"rotation"}},{"sampler":83,"target":{"node":25,"path":"scale"}},{"sampler":84,"target":{"node":23,"path":"translation"}},{"sampler":85,"target":{"node":23,"path":"rotation"}},{"sampler":86,"target":{"node":23,"path":"scale"}},{"sampler":87,"target":{"node":36,"path":"translation"}},{"sampler":88,"target":{"node":36,"path":"rotation"}},{"sampler":89,"target":{"node":36,"path":"scale"}},{"sampler":90,"target":{"node":17,"path":"translation"}},{"sampler":91,"target":{"node":17,"path":"rotation"}},{"sampler":92,"target":{"node":17,"path":"scale"}},{"sampler":93,"target":{"node":56,"path":"translation"}},{"sampler":94,"target":{"node":56,"path":"rotation"}},{"sampler":95,"target":{"node":56,"path":"scale"}},{"sampler":96,"target":{"node":48,"path":"translation"}},{"sampler":97,"target":{"node":48,"path":"rotation"}},{"sampler":98,"target":{"node":48,"path":"scale"}},{"sampler":99,"target":{"node":4,"path":"translation"}},{"sampler":100,"target":{"node":4,"path":"rotation"}},{"sampler":101,"target":{"node":4,"path":"scale"}},{"sampler":102,"target":{"node":10,"path":"translation"}},{"sampler":103,"target":{"node":10,"path":"rotation"}},{"sampler":104,"target":{"node":10,"path":"scale"}},{"sampler":105,"target":{"node":51,"path":"translation"}},{"sampler":106,"target":{"node":51,"path":"rotation"}},{"sampler":107,"target":{"node":51,"path":"scale"}},{"sampler":108,"target":{"node":54,"path":"translation"}},{"sampler":109,"target":{"node":54,"path":"rotation"}},{"sampler":110,"target":{"node":54,"path":"scale"}},{"sampler":111,"target":{"node":11,"path":"translation"}},{"sampler":112,"target":{"node":11,"path":"rotation"}},{"sampler":113,"target":{"node":11,"path":"scale"}},{"sampler":114,"target":{"node":63,"path":"translation"}},{"sampler":115,"target":{"node":63,"path":"rotation"}},{"sampler":116,"target":{"node":63,"path":"scale"}},{"sampler":117,"target":{"node":46,"path":"translation"}},{"sampler":118,"target":{"node":46,"path":"rotation"}},{"sampler":119,"target":{"node":46,"path":"scale"}},{"sampler":120,"target":{"node":14,"path":"translation"}},{"sampler":121,"target":{"node":14,"path":"rotation"}},{"sampler":122,"target":{"node":14,"path":"scale"}},{"sampler":123,"target":{"node":5,"path":"translation"}},{"sampler":124,"target":{"node":5,"path":"rotation"}},{"sampler":125,"target":{"node":5,"path":"scale"}},{"sampler":126,"target":{"node":53,"path":"translation"}},{"sampler":127,"target":{"node":53,"path":"rotation"}},{"sampler":128,"target":{"node":53,"path":"scale"}},{"sampler":129,"target":{"node":39,"path":"translation"}},{"sampler":130,"target":{"node":39,"path":"rotation"}},{"sampler":131,"target":{"node":39,"path":"scale"}},{"sampler":132,"target":{"node":43,"path":"translation"}},{"sampler":133,"target":{"node":43,"path":"rotation"}},{"sampler":134,"target":{"node":43,"path":"scale"}},{"sampler":135,"target":{"node":6,"path":"translation"}},{"sampler":136,"target":{"node":6,"path":"rotation"}},{"sampler":137,"target":{"node":6,"path":"scale"}},{"sampler":138,"target":{"node":61,"path":"translation"}},{"sampler":139,"target":{"node":61,"path":"rotation"}},{"sampler":140,"target":{"node":61,"path":"scale"}},{"sampler":141,"target":{"node":67,"path":"translation"}},{"sampler":142,"target":{"node":67,"path":"rotation"}},{"sampler":143,"target":{"node":67,"path":"scale"}},{"sampler":144,"target":{"node":3,"path":"translation"}},{"sampler":145,"target":{"node":3,"path":"rotation"}},{"sampler":146,"target":{"node":3,"path":"scale"}},{"sampler":147,"target":{"node":44,"path":"translation"}},{"sampler":148,"target":{"node":44,"path":"rotation"}},{"sampler":149,"target":{"node":44,"path":"scale"}},{"sampler":150,"target":{"node":52,"path":"translation"}},{"sampler":151,"target":{"node":52,"path":"rotation"}},{"sampler":152,"target":{"node":52,"path":"scale"}},{"sampler":153,"target":{"node":65,"path":"translation"}},{"sampler":154,"target":{"node":65,"path":"rotation"}},{"sampler":155,"target":{"node":65,"path":"scale"}},{"sampler":156,"target":{"node":59,"path":"translation"}},{"sampler":157,"target":{"node":59,"path":"rotation"}},{"sampler":158,"target":{"node":59,"path":"scale"}},{"sampler":159,"target":{"node":0,"path":"translation"}},{"sampler":160,"target":{"node":0,"path":"rotation"}},{"sampler":161,"target":{"node":0,"path":"scale"}},{"sampler":162,"target":{"node":12,"path":"translation"}},{"sampler":163,"target":{"node":12,"path":"rotation"}},{"sampler":164,"target":{"node":12,"path":"scale"}},{"sampler":165,"target":{"node":41,"path":"translation"}},{"sampler":166,"target":{"node":41,"path":"rotation"}},{"sampler":167,"target":{"node":41,"path":"scale"}},{"sampler":168,"target":{"node":26,"path":"translation"}},{"sampler":169,"target":{"node":26,"path":"rotation"}},{"sampler":170,"target":{"node":26,"path":"scale"}},{"sampler":171,"target":{"node":49,"path":"translation"}},{"sampler":172,"target":{"node":49,"path":"rotation"}},{"sampler":173,"target":{"node":49,"path":"scale"}},{"sampler":174,"target":{"node":64,"path":"translation"}},{"sampler":175,"target":{"node":64,"path":"rotation"}},{"sampler":176,"target":{"node":64,"path":"scale"}},{"sampler":177,"target":{"node":15,"path":"translation"}},{"sampler":178,"target":{"node":15,"path":"rotation"}},{"sampler":179,"target":{"node":15,"path":"scale"}},{"sampler":180,"target":{"node":20,"path":"translation"}},{"sampler":181,"target":{"node":20,"path":"rotation"}},{"sampler":182,"target":{"node":20,"path":"scale"}},{"sampler":183,"target":{"node":31,"path":"translation"}},{"sampler":184,"target":{"node":31,"path":"rotation"}},{"sampler":185,"target":{"node":31,"path":"scale"}},{"sampler":186,"target":{"node":66,"path":"translation"}},{"sampler":187,"target":{"node":66,"path":"rotation"}},{"sampler":188,"target":{"node":66,"path":"scale"}},{"sampler":189,"target":{"node":42,"path":"translation"}},{"sampler":190,"target":{"node":42,"path":"rotation"}},{"sampler":191,"target":{"node":42,"path":"scale"}},{"sampler":192,"target":{"node":13,"path":"translation"}},{"sampler":193,"target":{"node":13,"path":"rotation"}},{"sampler":194,"target":{"node":13,"path":"scale"}},{"sampler":195,"target":{"node":32,"path":"translation"}},{"sampler":196,"target":{"node":32,"path":"rotation"}},{"sampler":197,"target":{"node":32,"path":"scale"}}],"name":"Walking","samplers":[{"input":111,"interpolation":"LINEAR","output":398},{"input":111,"interpolation":"LINEAR","output":244},{"input":111,"interpolation":"LINEAR","output":727},{"input":111,"interpolation":"LINEAR","output":430},{"input":111,"interpolation":"LINEAR","output":164},{"input":111,"interpolation":"LINEAR","output":586},{"input":111,"interpolation":"LINEAR","output":646},{"input":111,"interpolation":"LINEAR","output":728},{"input":111,"interpolation":"LINEAR","output":2},{"input":111,"interpolation":"LINEAR","output":752},{"input":111,"interpolation":"LINEAR","output":571},{"input":111,"interpolation":"LINEAR","output":636},{"input":111,"interpolation":"LINEAR","output":495},{"input":111,"interpolation":"LINEAR","output":112},{"input":111,"interpolation":"LINEAR","output":740},{"input":111,"interpolation":"LINEAR","output":36},{"input":111,"interpolation":"LINEAR","output":418},{"input":111,"interpolation":"LINEAR","output":260},{"input":111,"interpolation":"LINEAR","output":651},{"input":111,"interpolation":"LINEAR","output":133},{"input":111,"interpolation":"LINEAR","output":240},{"input":111,"interpolation":"LINEAR","output":518},{"input":111,"interpolation":"LINEAR","output":463},{"input":111,"interpolation":"LINEAR","output":274},{"input":111,"interpolation":"LINEAR","output":446},{"input":111,"interpolation":"LINEAR","output":355},{"input":111,"interpolation":"LINEAR","output":589},{"input":111,"interpolation":"LINEAR","output":684},{"input":111,"interpolation":"LINEAR","output":593},{"input":111,"interpolation":"LINEAR","output":84},{"input":111,"interpolation":"LINEAR","output":252},{"input":111,"interpolation":"LINEAR","output":733},{"input":111,"interpolation":"LINEAR","output":30},{"input":111,"interpolation":"LINEAR","output":739},{"input":111,"interpolation":"LINEAR","output":744},{"input":111,"interpolation":"LINEAR","output":533},{"input":111,"interpolation":"LINEAR","output":465},{"input":111,"interpolation":"LINEAR","output":115},{"input":111,"interpolation":"LINEAR","output":167},{"input":111,"interpolation":"LINEAR","output":809},{"input":111,"interpolation":"LINEAR","output":18},{"input":111,"interpolation":"LINEAR","output":270},{"input":111,"interpolation":"LINEAR","output":730},{"input":111,"interpolation":"LINEAR","output":791},{"input":111,"interpolation":"LINEAR","output":347},{"input":111,"interpolation":"LINEAR","output":659},{"input":111,"interpolation":"LINEAR","output":170},{"input":111,"interpolation":"LINEAR","output":553},{"input":111,"interpolation":"LINEAR","output":706},{"input":111,"interpolation":"LINEAR","output":62},{"input":111,"interpolation":"LINEAR","output":169},{"input":111,"interpolation":"LINEAR","output":760},{"input":111,"interpolation":"LINEAR","output":86},{"input":111,"interpolation":"LINEAR","output":748},{"input":111,"interpolation":"LINEAR","output":220},{"input":111,"interpolation":"LINEAR","output":366},{"input":111,"interpolation":"LINEAR","output":191},{"input":111,"interpolation":"LINEAR","output":1},{"input":111,"interpolation":"LINEAR","output":669},{"input":111,"interpolation":"LINEAR","output":621},{"input":111,"interpolation":"LINEAR","output":413},{"input":111,"interpolation":"LINEAR","output":562},{"input":111,"interpolation":"LINEAR","output":546},{"input":111,"interpolation":"LINEAR","output":242},{"input":111,"interpolation":"LINEAR","output":726},{"input":111,"interpolation":"LINEAR","output":359},{"input":111,"interpolation":"LINEAR","output":352},{"input":111,"interpolation":"LINEAR","output":188},{"input":111,"interpolation":"LINEAR","output":768},{"input":111,"interpolation":"LINEAR","output":672},{"input":111,"interpolation":"LINEAR","output":311},{"input":111,"interpolation":"LINEAR","output":138},{"input":111,"interpolation":"LINEAR","output":507},{"input":111,"interpolation":"LINEAR","output":782},{"input":111,"interpolation":"LINEAR","output":152},{"input":111,"interpolation":"LINEAR","output":811},{"input":111,"interpolation":"LINEAR","output":516},{"input":111,"interpolation":"LINEAR","output":691},{"input":111,"interpolation":"LINEAR","output":259},{"input":111,"interpolation":"LINEAR","output":504},{"input":111,"interpolation":"LINEAR","output":233},{"input":111,"interpolation":"LINEAR","output":21},{"input":111,"interpolation":"LINEAR","output":560},{"input":111,"interpolation":"LINEAR","output":221},{"input":111,"interpolation":"LINEAR","output":462},{"input":111,"interpolation":"LINEAR","output":432},{"input":111,"interpolation":"LINEAR","output":602},{"input":111,"interpolation":"LINEAR","output":535},{"input":111,"interpolation":"LINEAR","output":528},{"input":111,"interpolation":"LINEAR","output":620},{"input":111,"interpolation":"LINEAR","output":440},{"input":111,"interpolation":"LINEAR","output":376},{"input":111,"interpolation":"LINEAR","output":763},{"input":111,"interpolation":"LINEAR","output":38},{"input":111,"interpolation":"LINEAR","output":342},{"input":111,"interpolation":"LINEAR","output":389},{"input":111,"interpolation":"LINEAR","output":63},{"input":111,"interpolation":"LINEAR","output":57},{"input":111,"interpolation":"LINEAR","output":514},{"input":111,"interpolation":"LINEAR","output":579},{"input":111,"interpolation":"LINEAR","output":205},{"input":111,"interpolation":"LINEAR","output":401},{"input":111,"interpolation":"LINEAR","output":780},{"input":111,"interpolation":"LINEAR","output":194},{"input":111,"interpolation":"LINEAR","output":715},{"input":111,"interpolation":"LINEAR","output":526},{"input":111,"interpolation":"LINEAR","output":755},{"input":111,"interpolation":"LINEAR","output":729},{"input":111,"interpolation":"LINEAR","output":76},{"input":111,"interpolation":"LINEAR","output":269},{"input":111,"interpolation":"LINEAR","output":100},{"input":111,"interpolation":"LINEAR","output":435},{"input":111,"interpolation":"LINEAR","output":438},{"input":111,"interpolation":"LINEAR","output":783},{"input":111,"interpolation":"LINEAR","output":68},{"input":111,"interpolation":"LINEAR","output":489},{"input":111,"interpolation":"LINEAR","output":512},{"input":111,"interpolation":"LINEAR","output":125},{"input":111,"interpolation":"LINEAR","output":162},{"input":111,"interpolation":"LINEAR","output":566},{"input":111,"interpolation":"LINEAR","output":3},{"input":111,"interpolation":"LINEAR","output":551},{"input":111,"interpolation":"LINEAR","output":11},{"input":111,"interpolation":"LINEAR","output":217},{"input":111,"interpolation":"LINEAR","output":456},{"input":111,"interpolation":"LINEAR","output":393},{"input":111,"interpolation":"LINEAR","output":442},{"input":111,"interpolation":"LINEAR","output":544},{"input":111,"interpolation":"LINEAR","output":334},{"input":111,"interpolation":"LINEAR","output":34},{"input":111,"interpolation":"LINEAR","output":201},{"input":111,"interpolation":"LINEAR","output":508},{"input":111,"interpolation":"LINEAR","output":116},{"input":111,"interpolation":"LINEAR","output":51},{"input":111,"interpolation":"LINEAR","output":653},{"input":111,"interpolation":"LINEAR","output":477},{"input":111,"interpolation":"LINEAR","output":810},{"input":111,"interpolation":"LINEAR","output":344},{"input":111,"interpolation":"LINEAR","output":175},{"input":111,"interpolation":"LINEAR","output":107},{"input":111,"interpolation":"LINEAR","output":628},{"input":111,"interpolation":"LINEAR","output":588},{"input":111,"interpolation":"LINEAR","output":493},{"input":111,"interpolation":"LINEAR","output":90},{"input":111,"interpolation":"LINEAR","output":195},{"input":111,"interpolation":"LINEAR","output":215},{"input":111,"interpolation":"LINEAR","output":696},{"input":111,"interpolation":"LINEAR","output":156},{"input":111,"interpolation":"LINEAR","output":634},{"input":111,"interpolation":"LINEAR","output":808},{"input":111,"interpolation":"LINEAR","output":127},{"input":111,"interpolation":"LINEAR","output":400},{"input":111,"interpolation":"LINEAR","output":72},{"input":111,"interpolation":"LINEAR","output":451},{"input":111,"interpolation":"LINEAR","output":661},{"input":111,"interpolation":"LINEAR","output":180},{"input":111,"interpolation":"LINEAR","output":396},{"input":111,"interpolation":"LINEAR","output":144},{"input":111,"interpolation":"LINEAR","output":417},{"input":111,"interpolation":"LINEAR","output":515},{"input":111,"interpolation":"LINEAR","output":753},{"input":111,"interpolation":"LINEAR","output":423},{"input":111,"interpolation":"LINEAR","output":328},{"input":111,"interpolation":"LINEAR","output":377},{"input":111,"interpolation":"LINEAR","output":166},{"input":111,"interpolation":"LINEAR","output":339},{"input":111,"interpolation":"LINEAR","output":654},{"input":111,"interpolation":"LINEAR","output":599},{"input":111,"interpolation":"LINEAR","output":590},{"input":111,"interpolation":"LINEAR","output":304},{"input":111,"interpolation":"LINEAR","output":64},{"input":111,"interpolation":"LINEAR","output":245},{"input":111,"interpolation":"LINEAR","output":78},{"input":111,"interpolation":"LINEAR","output":330},{"input":111,"interpolation":"LINEAR","output":314},{"input":111,"interpolation":"LINEAR","output":445},{"input":111,"interpolation":"LINEAR","output":581},{"input":111,"interpolation":"LINEAR","output":796},{"input":111,"interpolation":"LINEAR","output":662},{"input":111,"interpolation":"LINEAR","output":256},{"input":111,"interpolation":"LINEAR","output":261},{"input":111,"interpolation":"LINEAR","output":695},{"input":111,"interpolation":"LINEAR","output":692},{"input":111,"interpolation":"LINEAR","output":41},{"input":111,"interpolation":"LINEAR","output":394},{"input":111,"interpolation":"LINEAR","output":135},{"input":111,"interpolation":"LINEAR","output":470},{"input":111,"interpolation":"LINEAR","output":98},{"input":111,"interpolation":"LINEAR","output":497},{"input":111,"interpolation":"LINEAR","output":19},{"input":111,"interpolation":"LINEAR","output":792},{"input":111,"interpolation":"LINEAR","output":567},{"input":111,"interpolation":"LINEAR","output":762},{"input":111,"interpolation":"LINEAR","output":596},{"input":111,"interpolation":"LINEAR","output":272},{"input":111,"interpolation":"LINEAR","output":17},{"input":111,"interpolation":"LINEAR","output":746},{"input":111,"interpolation":"LINEAR","output":292}]},{"channels":[{"sampler":0,"target":{"node":47,"path":"translation"}},{"sampler":1,"target":{"node":47,"path":"rotation"}},{"sampler":2,"target":{"node":47,"path":"scale"}},{"sampler":3,"target":{"node":37,"path":"translation"}},{"sampler":4,"target":{"node":37,"path":"rotation"}},{"sampler":5,"target":{"node":37,"path":"scale"}},{"sampler":6,"target":{"node":8,"path":"translation"}},{"sampler":7,"target":{"node":8,"path":"rotation"}},{"sampler":8,"target":{"node":8,"path":"scale"}},{"sampler":9,"target":{"node":16,"path":"translation"}},{"sampler":10,"target":{"node":16,"path":"rotation"}},{"sampler":11,"target":{"node":16,"path":"scale"}},{"sampler":12,"target":{"node":34,"path":"translation"}},{"sampler":13,"target":{"node":34,"path":"rotation"}},{"sampler":14,"target":{"node":34,"path":"scale"}},{"sampler":15,"target":{"node":60,"path":"translation"}},{"sampler":16,"target":{"node":60,"path":"rotation"}},{"sampler":17,"target":{"node":60,"path":"scale"}},{"sampler":18,"target":{"node":24,"path":"translation"}},{"sampler":19,"target":{"node":24,"path":"rotation"}},{"sampler":20,"target":{"node":24,"path":"scale"}},{"sampler":21,"target":{"node":57,"path":"translation"}},{"sampler":22,"target":{"node":57,"path":"rotation"}},{"sampler":23,"target":{"node":57,"path":"scale"}},{"sampler":24,"target":{"node":7,"path":"translation"}},{"sampler":25,"target":{"node":7,"path":"rotation"}},{"sampler":26,"target":{"node":7,"path":"scale"}},{"sampler":27,"target":{"node":29,"path":"translation"}},{"sampler":28,"target":{"node":29,"path":"rotation"}},{"sampler":29,"target":{"node":29,"path":"scale"}},{"sampler":30,"target":{"node":55,"path":"translation"}},{"sampler":31,"target":{"node":55,"path":"rotation"}},{"sampler":32,"target":{"node":55,"path":"scale"}},{"sampler":33,"target":{"node":33,"path":"translation"}},{"sampler":34,"target":{"node":33,"path":"rotation"}},{"sampler":35,"target":{"node":33,"path":"scale"}},{"sampler":36,"target":{"node":45,"path":"translation"}},{"sampler":37,"target":{"node":45,"path":"rotation"}},{"sampler":38,"target":{"node":45,"path":"scale"}},{"sampler":39,"target":{"node":9,"path":"translation"}},{"sampler":40,"target":{"node":9,"path":"rotation"}},{"sampler":41,"target":{"node":9,"path":"scale"}},{"sampler":42,"target":{"node":62,"path":"translation"}},{"sampler":43,"target":{"node":62,"path":"rotation"}},{"sampler":44,"target":{"node":62,"path":"scale"}},{"sampler":45,"target":{"node":58,"path":"translation"}},{"sampler":46,"target":{"node":58,"path":"rotation"}},{"sampler":47,"target":{"node":58,"path":"scale"}},{"sampler":48,"target":{"node":30,"path":"translation"}},{"sampler":49,"target":{"node":30,"path":"rotation"}},{"sampler":50,"target":{"node":30,"path":"scale"}},{"sampler":51,"target":{"node":19,"path":"translation"}},{"sampler":52,"target":{"node":19,"path":"rotation"}},{"sampler":53,"target":{"node":19,"path":"scale"}},{"sampler":54,"target":{"node":27,"path":"translation"}},{"sampler":55,"target":{"node":27,"path":"rotation"}},{"sampler":56,"target":{"node":27,"path":"scale"}},{"sampler":57,"target":{"node":40,"path":"translation"}},{"sampler":58,"target":{"node":40,"path":"rotation"}},{"sampler":59,"target":{"node":40,"path":"scale"}},{"sampler":60,"target":{"node":50,"path":"translation"}},{"sampler":61,"target":{"node":50,"path":"rotation"}},{"sampler":62,"target":{"node":50,"path":"scale"}},{"sampler":63,"target":{"node":22,"path":"translation"}},{"sampler":64,"target":{"node":22,"path":"rotation"}},{"sampler":65,"target":{"node":22,"path":"scale"}},{"sampler":66,"target":{"node":18,"path":"translation"}},{"sampler":67,"target":{"node":18,"path":"rotation"}},{"sampler":68,"target":{"node":18,"path":"scale"}},{"sampler":69,"target":{"node":35,"path":"translation"}},{"sampler":70,"target":{"node":35,"path":"rotation"}},{"sampler":71,"target":{"node":35,"path":"scale"}},{"sampler":72,"target":{"node":38,"path":"translation"}},{"sampler":73,"target":{"node":38,"path":"rotation"}},{"sampler":74,"target":{"node":38,"path":"scale"}},{"sampler":75,"target":{"node":21,"path":"translation"}},{"sampler":76,"target":{"node":21,"path":"rotation"}},{"sampler":77,"target":{"node":21,"path":"scale"}},{"sampler":78,"target":{"node":28,"path":"translation"}},{"sampler":79,"target":{"node":28,"path":"rotation"}},{"sampler":80,"target":{"node":28,"path":"scale"}},{"sampler":81,"target":{"node":25,"path":"translation"}},{"sampler":82,"target":{"node":25,"path":"rotation"}},{"sampler":83,"target":{"node":25,"path":"scale"}},{"sampler":84,"target":{"node":23,"path":"translation"}},{"sampler":85,"target":{"node":23,"path":"rotation"}},{"sampler":86,"target":{"node":23,"path":"scale"}},{"sampler":87,"target":{"node":36,"path":"translation"}},{"sampler":88,"target":{"node":36,"path":"rotation"}},{"sampler":89,"target":{"node":36,"path":"scale"}},{"sampler":90,"target":{"node":17,"path":"translation"}},{"sampler":91,"target":{"node":17,"path":"rotation"}},{"sampler":92,"target":{"node":17,"path":"scale"}},{"sampler":93,"target":{"node":56,"path":"translation"}},{"sampler":94,"target":{"node":56,"path":"rotation"}},{"sampler":95,"target":{"node":56,"path":"scale"}},{"sampler":96,"target":{"node":48,"path":"translation"}},{"sampler":97,"target":{"node":48,"path":"rotation"}},{"sampler":98,"target":{"node":48,"path":"scale"}},{"sampler":99,"target":{"node":4,"path":"translation"}},{"sampler":100,"target":{"node":4,"path":"rotation"}},{"sampler":101,"target":{"node":4,"path":"scale"}},{"sampler":102,"target":{"node":10,"path":"translation"}},{"sampler":103,"target":{"node":10,"path":"rotation"}},{"sampler":104,"target":{"node":10,"path":"scale"}},{"sampler":105,"target":{"node":51,"path":"translation"}},{"sampler":106,"target":{"node":51,"path":"rotation"}},{"sampler":107,"target":{"node":51,"path":"scale"}},{"sampler":108,"target":{"node":54,"path":"translation"}},{"sampler":109,"target":{"node":54,"path":"rotation"}},{"sampler":110,"target":{"node":54,"path":"scale"}},{"sampler":111,"target":{"node":11,"path":"translation"}},{"sampler":112,"target":{"node":11,"path":"rotation"}},{"sampler":113,"target":{"node":11,"path":"scale"}},{"sampler":114,"target":{"node":63,"path":"translation"}},{"sampler":115,"target":{"node":63,"path":"rotation"}},{"sampler":116,"target":{"node":63,"path":"scale"}},{"sampler":117,"target":{"node":46,"path":"translation"}},{"sampler":118,"target":{"node":46,"path":"rotation"}},{"sampler":119,"target":{"node":46,"path":"scale"}},{"sampler":120,"target":{"node":14,"path":"translation"}},{"sampler":121,"target":{"node":14,"path":"rotation"}},{"sampler":122,"target":{"node":14,"path":"scale"}},{"sampler":123,"target":{"node":5,"path":"translation"}},{"sampler":124,"target":{"node":5,"path":"rotation"}},{"sampler":125,"target":{"node":5,"path":"scale"}},{"sampler":126,"target":{"node":53,"path":"translation"}},{"sampler":127,"target":{"node":53,"path":"rotation"}},{"sampler":128,"target":{"node":53,"path":"scale"}},{"sampler":129,"target":{"node":39,"path":"translation"}},{"sampler":130,"target":{"node":39,"path":"rotation"}},{"sampler":131,"target":{"node":39,"path":"scale"}},{"sampler":132,"target":{"node":43,"path":"translation"}},{"sampler":133,"target":{"node":43,"path":"rotation"}},{"sampler":134,"target":{"node":43,"path":"scale"}},{"sampler":135,"target":{"node":6,"path":"translation"}},{"sampler":136,"target":{"node":6,"path":"rotation"}},{"sampler":137,"target":{"node":6,"path":"scale"}},{"sampler":138,"target":{"node":61,"path":"translation"}},{"sampler":139,"target":{"node":61,"path":"rotation"}},{"sampler":140,"target":{"node":61,"path":"scale"}},{"sampler":141,"target":{"node":67,"path":"translation"}},{"sampler":142,"target":{"node":67,"path":"rotation"}},{"sampler":143,"target":{"node":67,"path":"scale"}},{"sampler":144,"target":{"node":3,"path":"translation"}},{"sampler":145,"target":{"node":3,"path":"rotation"}},{"sampler":146,"target":{"node":3,"path":"scale"}},{"sampler":147,"target":{"node":44,"path":"translation"}},{"sampler":148,"target":{"node":44,"path":"rotation"}},{"sampler":149,"target":{"node":44,"path":"scale"}},{"sampler":150,"target":{"node":52,"path":"translation"}},{"sampler":151,"target":{"node":52,"path":"rotation"}},{"sampler":152,"target":{"node":52,"path":"scale"}},{"sampler":153,"target":{"node":65,"path":"translation"}},{"sampler":154,"target":{"node":65,"path":"rotation"}},{"sampler":155,"target":{"node":65,"path":"scale"}},{"sampler":156,"target":{"node":59,"path":"translation"}},{"sampler":157,"target":{"node":59,"path":"rotation"}},{"sampler":158,"target":{"node":59,"path":"scale"}},{"sampler":159,"target":{"node":0,"path":"translation"}},{"sampler":160,"target":{"node":0,"path":"rotation"}},{"sampler":161,"target":{"node":0,"path":"scale"}},{"sampler":162,"target":{"node":12,"path":"translation"}},{"sampler":163,"target":{"node":12,"path":"rotation"}},{"sampler":164,"target":{"node":12,"path":"scale"}},{"sampler":165,"target":{"node":41,"path":"translation"}},{"sampler":166,"target":{"node":41,"path":"rotation"}},{"sampler":167,"target":{"node":41,"path":"scale"}},{"sampler":168,"target":{"node":26,"path":"translation"}},{"sampler":169,"target":{"node":26,"path":"rotation"}},{"sampler":170,"target":{"node":26,"path":"scale"}},{"sampler":171,"target":{"node":49,"path":"translation"}},{"sampler":172,"target":{"node":49,"path":"rotation"}},{"sampler":173,"target":{"node":49,"path":"scale"}},{"sampler":174,"target":{"node":64,"path":"translation"}},{"sampler":175,"target":{"node":64,"path":"rotation"}},{"sampler":176,"target":{"node":64,"path":"scale"}},{"sampler":177,"target":{"node":15,"path":"translation"}},{"sampler":178,"target":{"node":15,"path":"rotation"}},{"sampler":179,"target":{"node":15,"path":"scale"}},{"sampler":180,"target":{"node":20,"path":"translation"}},{"sampler":181,"target":{"node":20,"path":"rotation"}},{"sampler":182,"target":{"node":20,"path":"scale"}},{"sampler":183,"target":{"node":31,"path":"translation"}},{"sampler":184,"target":{"node":31,"path":"rotation"}},{"sampler":185,"target":{"node":31,"path":"scale"}},{"sampler":186,"target":{"node":66,"path":"translation"}},{"sampler":187,"target":{"node":66,"path":"rotation"}},{"sampler":188,"target":{"node":66,"path":"scale"}},{"sampler":189,"target":{"node":42,"path":"translation"}},{"sampler":190,"target":{"node":42,"path":"rotation"}},{"sampler":191,"target":{"node":42,"path":"scale"}},{"sampler":192,"target":{"node":13,"path":"translation"}},{"sampler":193,"target":{"node":13,"path":"rotation"}},{"sampler":194,"target":{"node":13,"path":"scale"}},{"sampler":195,"target":{"node":32,"path":"translation"}},{"sampler":196,"target":{"node":32,"path":"rotation"}},{"sampler":197,"target":{"node":32,"path":"scale"}}],"name":"Yawn","samplers":[{"input":756,"interpolation":"LINEAR","output":570},{"input":756,"interpolation":"LINEAR","output":301},{"input":756,"interpolation":"LINEAR","output":58},{"input":756,"interpolation":"LINEAR","output":373},{"input":756,"interpolation":"LINEAR","output":572},{"input":756,"interpolation":"LINEAR","output":510},{"input":756,"interpolation":"LINEAR","output":564},{"input":756,"interpolation":"LINEAR","output":214},{"input":756,"interpolation":"LINEAR","output":294},{"input":756,"interpolation":"LINEAR","output":638},{"input":756,"interpolation":"LINEAR","output":210},{"input":756,"interpolation":"LINEAR","output":758},{"input":756,"interpolation":"LINEAR","output":130},{"input":756,"interpolation":"LINEAR","output":670},{"input":756,"interpolation":"LINEAR","output":598},{"input":756,"interpolation":"LINEAR","output":466},{"input":756,"interpolation":"LINEAR","output":20},{"input":756,"interpolation":"LINEAR","output":725},{"input":756,"interpolation":"LINEAR","output":663},{"input":756,"interpolation":"LINEAR","output":492},{"input":756,"interpolation":"LINEAR","output":305},{"input":756,"interpolation":"LINEAR","output":370},{"input":756,"interpolation":"LINEAR","output":480},{"input":756,"interpolation":"LINEAR","output":605},{"input":756,"interpolation":"LINEAR","output":591},{"input":756,"interpolation":"LINEAR","output":308},{"input":756,"interpolation":"LINEAR","output":700},{"input":756,"interpolation":"LINEAR","output":293},{"input":756,"interpolation":"LINEAR","output":99},{"input":756,"interpolation":"LINEAR","output":749},{"input":756,"interpolation":"LINEAR","output":595},{"input":756,"interpolation":"LINEAR","output":386},{"input":756,"interpolation":"LINEAR","output":666},{"input":756,"interpolation":"LINEAR","output":689},{"input":756,"interpolation":"LINEAR","output":320},{"input":756,"interpolation":"LINEAR","output":473},{"input":756,"interpolation":"LINEAR","output":693},{"input":756,"interpolation":"LINEAR","output":545},{"input":756,"interpolation":"LINEAR","output":88},{"input":756,"interpolation":"LINEAR","output":239},{"input":756,"interpolation":"LINEAR","output":145},{"input":756,"interpolation":"LINEAR","output":719},{"input":756,"interpolation":"LINEAR","output":134},{"input":756,"interpolation":"LINEAR","output":219},{"input":756,"interpolation":"LINEAR","output":668},{"input":756,"interpolation":"LINEAR","output":608},{"input":756,"interpolation":"LINEAR","output":327},{"input":756,"interpolation":"LINEAR","output":361},{"input":756,"interpolation":"LINEAR","output":585},{"input":756,"interpolation":"LINEAR","output":392},{"input":756,"interpolation":"LINEAR","output":407},{"input":756,"interpolation":"LINEAR","output":683},{"input":756,"interpolation":"LINEAR","output":429},{"input":756,"interpolation":"LINEAR","output":258},{"input":756,"interpolation":"LINEAR","output":737},{"input":756,"interpolation":"LINEAR","output":471},{"input":756,"interpolation":"LINEAR","output":547},{"input":756,"interpolation":"LINEAR","output":707},{"input":756,"interpolation":"LINEAR","output":94},{"input":756,"interpolation":"LINEAR","output":338},{"input":756,"interpolation":"LINEAR","output":7},{"input":756,"interpolation":"LINEAR","output":801},{"input":756,"interpolation":"LINEAR","output":126},{"input":756,"interpolation":"LINEAR","output":183},{"input":756,"interpolation":"LINEAR","output":437},{"input":756,"interpolation":"LINEAR","output":795},{"input":756,"interpolation":"LINEAR","output":761},{"input":756,"interpolation":"LINEAR","output":199},{"input":756,"interpolation":"LINEAR","output":604},{"input":756,"interpolation":"LINEAR","output":137},{"input":756,"interpolation":"LINEAR","output":655},{"input":756,"interpolation":"LINEAR","output":190},{"input":756,"interpolation":"LINEAR","output":253},{"input":756,"interpolation":"LINEAR","output":671},{"input":756,"interpolation":"LINEAR","output":295},{"input":756,"interpolation":"LINEAR","output":154},{"input":756,"interpolation":"LINEAR","output":267},{"input":756,"interpolation":"LINEAR","output":85},{"input":756,"interpolation":"LINEAR","output":527},{"input":756,"interpolation":"LINEAR","output":316},{"input":756,"interpolation":"LINEAR","output":27},{"input":756,"interpolation":"LINEAR","output":271},{"input":756,"interpolation":"LINEAR","output":303},{"input":756,"interpolation":"LINEAR","output":751},{"input":756,"interpolation":"LINEAR","output":354},{"input":756,"interpolation":"LINEAR","output":182},{"input":756,"interpolation":"LINEAR","output":113},{"input":756,"interpolation":"LINEAR","output":341},{"input":756,"interpolation":"LINEAR","output":155},{"input":756,"interpolation":"LINEAR","output":680},{"input":756,"interpolation":"LINEAR","output":97},{"input":756,"interpolation":"LINEAR","output":388},{"input":756,"interpolation":"LINEAR","output":575},{"input":756,"interpolation":"LINEAR","output":49},{"input":756,"interpolation":"LINEAR","output":360},{"input":756,"interpolation":"LINEAR","output":802},{"input":756,"interpolation":"LINEAR","output":29},{"input":756,"interpolation":"LINEAR","output":310},{"input":756,"interpolation":"LINEAR","output":705},{"input":756,"interpolation":"LINEAR","output":235},{"input":756,"interpolation":"LINEAR","output":687},{"input":756,"interpolation":"LINEAR","output":485},{"input":756,"interpolation":"LINEAR","output":225},{"input":756,"interpolation":"LINEAR","output":502},{"input":756,"interpolation":"LINEAR","output":622},{"input":756,"interpolation":"LINEAR","output":236},{"input":756,"interpolation":"LINEAR","output":597},{"input":756,"interpolation":"LINEAR","output":519},{"input":756,"interpolation":"LINEAR","output":419},{"input":756,"interpolation":"LINEAR","output":717},{"input":756,"interpolation":"LINEAR","output":702},{"input":756,"interpolation":"LINEAR","output":587},{"input":756,"interpolation":"LINEAR","output":490},{"input":756,"interpolation":"LINEAR","output":439},{"input":756,"interpolation":"LINEAR","output":105},{"input":756,"interpolation":"LINEAR","output":109},{"input":756,"interpolation":"LINEAR","output":667},{"input":756,"interpolation":"LINEAR","output":35},{"input":756,"interpolation":"LINEAR","output":243},{"input":756,"interpolation":"LINEAR","output":561},{"input":756,"interpolation":"LINEAR","output":784},{"input":756,"interpolation":"LINEAR","output":609},{"input":756,"interpolation":"LINEAR","output":61},{"input":756,"interpolation":"LINEAR","output":247},{"input":756,"interpolation":"LINEAR","output":460},{"input":756,"interpolation":"LINEAR","output":391},{"input":756,"interpolation":"LINEAR","output":704},{"input":756,"interpolation":"LINEAR","output":395},{"input":756,"interpolation":"LINEAR","output":421},{"input":756,"interpolation":"LINEAR","output":447},{"input":756,"interpolation":"LINEAR","output":627},{"input":756,"interpolation":"LINEAR","output":363},{"input":756,"interpolation":"LINEAR","output":161},{"input":756,"interpolation":"LINEAR","output":179},{"input":756,"interpolation":"LINEAR","output":74},{"input":756,"interpolation":"LINEAR","output":613},{"input":756,"interpolation":"LINEAR","output":40},{"input":756,"interpolation":"LINEAR","output":59},{"input":756,"interpolation":"LINEAR","output":716},{"input":756,"interpolation":"LINEAR","output":178},{"input":756,"interpolation":"LINEAR","output":302},{"input":756,"interpolation":"LINEAR","output":632},{"input":756,"interpolation":"LINEAR","output":75},{"input":756,"interpolation":"LINEAR","output":95},{"input":756,"interpolation":"LINEAR","output":455},{"input":756,"interpolation":"LINEAR","output":633},{"input":756,"interpolation":"LINEAR","output":93},{"input":756,"interpolation":"LINEAR","output":10},{"input":756,"interpolation":"LINEAR","output":735},{"input":756,"interpolation":"LINEAR","output":380},{"input":756,"interpolation":"LINEAR","output":414},{"input":756,"interpolation":"LINEAR","output":262},{"input":756,"interpolation":"LINEAR","output":381},{"input":756,"interpolation":"LINEAR","output":574},{"input":756,"interpolation":"LINEAR","output":468},{"input":756,"interpolation":"LINEAR","output":37},{"input":756,"interpolation":"LINEAR","output":131},{"input":756,"interpolation":"LINEAR","output":785},{"input":756,"interpolation":"LINEAR","output":789},{"input":756,"interpolation":"LINEAR","output":777},{"input":756,"interpolation":"LINEAR","output":5},{"input":756,"interpolation":"LINEAR","output":312},{"input":756,"interpolation":"LINEAR","output":483},{"input":756,"interpolation":"LINEAR","output":498},{"input":756,"interpolation":"LINEAR","output":629},{"input":756,"interpolation":"LINEAR","output":197},{"input":756,"interpolation":"LINEAR","output":631},{"input":756,"interpolation":"LINEAR","output":652},{"input":756,"interpolation":"LINEAR","output":142},{"input":756,"interpolation":"LINEAR","output":543},{"input":756,"interpolation":"LINEAR","output":257},{"input":756,"interpolation":"LINEAR","output":129},{"input":756,"interpolation":"LINEAR","output":120},{"input":756,"interpolation":"LINEAR","output":181},{"input":756,"interpolation":"LINEAR","output":32},{"input":756,"interpolation":"LINEAR","output":143},{"input":756,"interpolation":"LINEAR","output":150},{"input":756,"interpolation":"LINEAR","output":713},{"input":756,"interpolation":"LINEAR","output":148},{"input":756,"interpolation":"LINEAR","output":176},{"input":756,"interpolation":"LINEAR","output":759},{"input":756,"interpolation":"LINEAR","output":540},{"input":756,"interpolation":"LINEAR","output":624},{"input":756,"interpolation":"LINEAR","output":805},{"input":756,"interpolation":"LINEAR","output":351},{"input":756,"interpolation":"LINEAR","output":306},{"input":756,"interpolation":"LINEAR","output":268},{"input":756,"interpolation":"LINEAR","output":163},{"input":756,"interpolation":"LINEAR","output":703},{"input":756,"interpolation":"LINEAR","output":750},{"input":756,"interpolation":"LINEAR","output":640},{"input":756,"interpolation":"LINEAR","output":265},{"input":756,"interpolation":"LINEAR","output":800},{"input":756,"interpolation":"LINEAR","output":736},{"input":756,"interpolation":"LINEAR","output":0},{"input":756,"interpolation":"LINEAR","output":635},{"input":756,"interpolation":"LINEAR","output":637},{"input":756,"interpolation":"LINEAR","output":521}]}],"asset":{"version":"2.0"},"bufferViews":[{"buffer":0,"byteLength":146960,"byteOffset":0,"byteStride":44,"name":"bufferView_buffer_F010_Saber.003_0","target":34962},{"buffer":0,"byteLength":28752,"byteOffset":146960,"name":"bufferView_buffer_F010_Saber.003_1","target":34963},{"buffer":0,"byteLength":106880,"byteOffset":175712,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_skin_0","target":34962},{"buffer":0,"byteLength":51744,"byteOffset":282592,"byteStride":44,"name":"bufferView_buffer_F010_Saber.001_0","target":34962},{"buffer":0,"byteLength":10008,"byteOffset":334336,"name":"bufferView_buffer_F010_Saber.001_1","target":34963},{"buffer":0,"byteLength":37632,"byteOffset":344344,"byteStride":32,"name":"bufferView_buffer_F010_Saber.001_skin_0","target":34962},{"buffer":0,"byteLength":2004,"byteOffset":381976,"byteStride":4,"name":"bufferView_buffer_Idle_time_0"},{"buffer":0,"byteLength":6012,"byteOffset":383980,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":389992,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":398008,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":404020,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":410032,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":418048,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":424060,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":430072,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":438088,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":444100,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":450112,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":458128,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":464140,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":470152,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":478168,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":484180,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":490192,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":498208,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":504220,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":510232,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":518248,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":524260,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":530272,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":538288,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":544300,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":550312,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":558328,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":564340,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":570352,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":578368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":584380,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":590392,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":598408,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":604420,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":610432,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":618448,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":624460,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":630472,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":638488,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":644500,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":650512,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":658528,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":664540,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":670552,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":678568,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":684580,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":690592,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":698608,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":704620,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":710632,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":718648,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":724660,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":730672,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":738688,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":744700,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":750712,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":758728,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":764740,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":770752,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":778768,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":784780,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":790792,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":798808,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":804820,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":810832,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":818848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":824860,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":830872,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":838888,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":844900,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":850912,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":858928,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":864940,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":870952,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":878968,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":884980,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":890992,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":899008,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":905020,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":911032,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":919048,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":925060,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":931072,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":939088,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":945100,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":951112,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":959128,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":965140,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":971152,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":979168,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":985180,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":991192,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":999208,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1005220,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1011232,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1019248,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1025260,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1031272,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1039288,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1045300,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1051312,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1059328,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1065340,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1071352,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1079368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1085380,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1091392,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1099408,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1105420,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1111432,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1119448,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1125460,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1131472,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1139488,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1145500,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1151512,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1159528,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1165540,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1171552,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1179568,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1185580,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1191592,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1199608,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1205620,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1211632,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1219648,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1225660,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1231672,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1239688,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1245700,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1251712,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1259728,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1265740,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1271752,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1279768,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1285780,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1291792,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1299808,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1305820,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1311832,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1319848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1325860,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1331872,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1339888,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1345900,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1351912,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1359928,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1365940,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1371952,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1379968,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1385980,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1391992,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1400008,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1406020,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1412032,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1420048,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1426060,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1432072,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1440088,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1446100,"byteStride":12,"name":"bufferView_buffer_Character_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1452112,"byteStride":16,"name":"bufferView_buffer_Character_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1460128,"byteStride":12,"name":"bufferView_buffer_Character_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1466140,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1472152,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1480168,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1486180,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1492192,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1500208,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1506220,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1512232,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1520248,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1526260,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1532272,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1540288,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1546300,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1552312,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1560328,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1566340,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1572352,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1580368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1586380,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1592392,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1600408,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1606420,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1612432,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1620448,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1626460,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1632472,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1640488,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1646500,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1652512,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1660528,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1666540,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1672552,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1680568,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_Idle_2"},{"buffer":0,"byteLength":6012,"byteOffset":1686580,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Idle_0"},{"buffer":0,"byteLength":8016,"byteOffset":1692592,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Idle_1"},{"buffer":0,"byteLength":6012,"byteOffset":1700608,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Idle_2"},{"buffer":0,"byteLength":8,"byteOffset":1706620,"byteStride":4,"name":"bufferView_buffer_TPose_time_0"},{"buffer":0,"byteLength":24,"byteOffset":1706628,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1706652,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1706684,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1706708,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1706732,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1706764,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1706788,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1706812,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1706844,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1706868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1706892,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1706924,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1706948,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1706972,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707004,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707052,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707084,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707108,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707132,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707164,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707188,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707212,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707244,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707268,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707292,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707324,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707348,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707372,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707404,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707452,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707484,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707508,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707532,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707564,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707588,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707612,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707644,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707668,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707692,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707724,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707748,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707772,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707804,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707852,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707884,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707908,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1707932,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1707964,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1707988,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708012,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708044,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708092,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708124,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708148,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708172,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708204,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708228,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708252,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708284,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708308,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708332,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708364,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708388,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708412,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708444,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708468,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708492,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708524,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708548,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708572,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708604,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708628,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708652,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708684,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708708,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708732,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708764,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708788,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708812,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708844,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708892,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1708924,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1708948,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1708972,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709004,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709052,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709084,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709108,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709132,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709164,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709188,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709212,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709244,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709268,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709292,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709324,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709348,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709372,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709404,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709452,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709484,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709508,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709532,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709564,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709588,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709612,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709644,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709692,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709724,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709748,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709772,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709804,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709852,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709884,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709908,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1709932,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1709964,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1709988,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710012,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710044,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710068,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710092,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710124,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710148,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710172,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710204,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710228,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710252,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710284,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710308,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710332,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710364,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710388,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710412,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710444,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710468,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710492,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710524,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710548,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710572,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710604,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710628,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710652,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710684,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710708,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710732,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710764,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710788,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710812,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710844,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710868,"byteStride":12,"name":"bufferView_buffer_Character_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710892,"byteStride":16,"name":"bufferView_buffer_Character_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1710924,"byteStride":12,"name":"bufferView_buffer_Character_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1710948,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1710972,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711004,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711028,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711052,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711084,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711108,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711132,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711164,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711188,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711212,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711244,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711292,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711324,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711348,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711372,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711404,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711428,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711452,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711484,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711508,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711532,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711564,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711588,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711612,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711644,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711692,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711724,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711748,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711772,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711804,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_2"},{"buffer":0,"byteLength":24,"byteOffset":1711828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0"},{"buffer":0,"byteLength":32,"byteOffset":1711852,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1"},{"buffer":0,"byteLength":24,"byteOffset":1711884,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2"},{"buffer":0,"byteLength":120,"byteOffset":1711908,"byteStride":4,"name":"bufferView_buffer_Walking_time_0"},{"buffer":0,"byteLength":360,"byteOffset":1712028,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1712388,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1712868,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1713228,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1713588,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1714068,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1714428,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1714788,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1715268,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1715628,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1715988,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1716468,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1716828,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1717188,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1717668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1718028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1718388,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1718868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1719228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1719588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1720068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1720428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1720788,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1721268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1721628,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1721988,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1722468,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1722828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1723188,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1723668,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1724028,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1724388,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1724868,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1725228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1725588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1726068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1726428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1726788,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1727268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1727628,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1727988,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1728468,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1728828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1729188,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1729668,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1730028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1730388,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1730868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1731228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1731588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1732068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1732428,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1732788,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1733268,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1733628,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1733988,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1734468,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1734828,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1735188,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1735668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1736028,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1736388,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1736868,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1737228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1737588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1738068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1738428,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1738788,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1739268,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1739628,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1739988,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1740468,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1740828,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1741188,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1741668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1742028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1742388,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1742868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1743228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1743588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1744068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1744428,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1744788,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1745268,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1745628,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1745988,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1746468,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1746828,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1747188,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1747668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1748028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1748388,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1748868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1749228,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1749588,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1750068,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1750428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1750788,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1751268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1751628,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1751988,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1752468,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1752828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1753188,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1753668,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1754028,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1754388,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1754868,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1755228,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1755588,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1756068,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1756428,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1756788,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1757268,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1757628,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1757988,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1758468,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1758828,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1759188,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1759668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1760028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1760388,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1760868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1761228,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1761588,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1762068,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1762428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1762788,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1763268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1763628,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1763988,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1764468,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1764828,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1765188,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1765668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1766028,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1766388,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1766868,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1767228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1767588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1768068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1768428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1768788,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1769268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1769628,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1769988,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1770468,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1770828,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1771188,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1771668,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1772028,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1772388,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1772868,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1773228,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1773588,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1774068,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1774428,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1774788,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1775268,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1775628,"byteStride":12,"name":"bufferView_buffer_Character_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1775988,"byteStride":16,"name":"bufferView_buffer_Character_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1776468,"byteStride":12,"name":"bufferView_buffer_Character_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1776828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1777188,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1777668,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1778028,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1778388,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1778868,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1779228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1779588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1780068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1780428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1780788,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1781268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1781628,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1781988,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1782468,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1782828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1783188,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1783668,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1784028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1784388,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1784868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1785228,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1785588,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1786068,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1786428,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1786788,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1787268,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1787628,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1787988,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1788468,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1788828,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1789188,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1789668,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_Walking_2"},{"buffer":0,"byteLength":360,"byteOffset":1790028,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Walking_0"},{"buffer":0,"byteLength":480,"byteOffset":1790388,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Walking_1"},{"buffer":0,"byteLength":360,"byteOffset":1790868,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Walking_2"},{"buffer":0,"byteLength":1004,"byteOffset":1791228,"byteStride":4,"name":"bufferView_buffer_Yawn_time_0"},{"buffer":0,"byteLength":3012,"byteOffset":1792232,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1795244,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1799260,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1802272,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1805284,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1809300,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1812312,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1815324,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1819340,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1822352,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1825364,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1829380,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1832392,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1835404,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1839420,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1842432,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1845444,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1849460,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1852472,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1855484,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1859500,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1862512,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1865524,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1869540,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1872552,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1875564,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1879580,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1882592,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1885604,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1889620,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1892632,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1895644,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1899660,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1902672,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1905684,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1909700,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1912712,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1915724,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1919740,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1922752,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1925764,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1929780,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1932792,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1935804,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1939820,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1942832,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1945844,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1949860,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1952872,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1955884,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1959900,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1962912,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1965924,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1969940,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1972952,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1975964,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1979980,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1982992,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1986004,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":1990020,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":1993032,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":1996044,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2000060,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2003072,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2006084,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2010100,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2013112,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2016124,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2020140,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2023152,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2026164,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2030180,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2033192,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2036204,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2040220,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2043232,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2046244,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2050260,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2053272,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2056284,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2060300,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2063312,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2066324,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2070340,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2073352,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2076364,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2080380,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2083392,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2086404,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2090420,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2093432,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2096444,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2100460,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2103472,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2106484,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2110500,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2113512,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2116524,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2120540,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2123552,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2126564,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2130580,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2133592,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2136604,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2140620,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2143632,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2146644,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2150660,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2153672,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2156684,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2160700,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2163712,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2166724,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2170740,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2173752,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2176764,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2180780,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2183792,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2186804,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2190820,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2193832,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2196844,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2200860,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2203872,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2206884,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2210900,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2213912,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2216924,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2220940,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2223952,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2226964,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2230980,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2233992,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2237004,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2241020,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2244032,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2247044,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2251060,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2254072,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2257084,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2261100,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2264112,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2267124,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2271140,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2274152,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2277164,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2281180,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2284192,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2287204,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2291220,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2294232,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2297244,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2301260,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2304272,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2307284,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2311300,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2314312,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2317324,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2321340,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2324352,"byteStride":12,"name":"bufferView_buffer_Character_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2327364,"byteStride":16,"name":"bufferView_buffer_Character_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2331380,"byteStride":12,"name":"bufferView_buffer_Character_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2334392,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2337404,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2341420,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2344432,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2347444,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2351460,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2354472,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2357484,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2361500,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2364512,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2367524,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2371540,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2374552,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2377564,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2381580,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2384592,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2387604,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2391620,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2394632,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2397644,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2401660,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2404672,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2407684,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2411700,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2414712,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2417724,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2421740,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2424752,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2427764,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2431780,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2434792,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2437804,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2441820,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_Yawn_2"},{"buffer":0,"byteLength":3012,"byteOffset":2444832,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Yawn_0"},{"buffer":0,"byteLength":4016,"byteOffset":2447844,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Yawn_1"},{"buffer":0,"byteLength":3012,"byteOffset":2451860,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_Yawn_2"},{"buffer":0,"byteLength":3328,"byteOffset":2454872,"byteStride":64,"name":"bufferView_buffer_IBM_F010_Saber_Body_skin_0"},{"buffer":0,"byteLength":192,"byteOffset":2458200,"byteStride":64,"name":"bufferView_buffer_IBM_F010_Saber_Face_skin_0"},{"buffer":1,"byteLength":48796,"byteOffset":0,"byteStride":44,"name":"bufferView_buffer_F010_Saber.003_0","target":34962},{"buffer":1,"byteLength":8076,"byteOffset":48796,"name":"bufferView_buffer_F010_Saber.003_1","target":34963},{"buffer":1,"byteLength":35488,"byteOffset":56872,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_skin_0","target":34962},{"buffer":1,"byteLength":8,"byteOffset":92360,"byteStride":4,"name":"bufferView_buffer_TPose_time_0"},{"buffer":1,"byteLength":24,"byteOffset":92368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92392,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92448,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92472,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92528,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92552,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92584,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92608,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92632,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92664,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92688,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92712,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92744,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92768,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92792,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92872,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92928,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92952,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93008,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93032,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93088,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93112,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93144,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93168,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93192,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93248,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93272,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93328,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93352,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93384,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93408,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93432,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93464,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93488,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93512,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93544,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93568,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93592,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93648,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93672,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93704,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93728,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93752,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93784,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93808,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93832,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93864,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93888,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93912,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93968,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93992,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94024,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94048,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94072,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94104,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94128,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94152,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94184,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94208,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94232,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94288,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94312,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94344,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94392,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94448,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94472,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94528,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94552,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94584,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94608,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94632,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94688,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94712,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94744,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94768,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94792,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94824,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94872,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94928,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94952,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95008,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95032,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95064,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95088,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95112,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95144,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95168,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95192,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95224,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95248,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95272,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95328,"byteStride":12,"name":"bufferView_buffer_Character_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95352,"byteStride":16,"name":"bufferView_buffer_Character_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95384,"byteStride":12,"name":"bufferView_buffer_Character_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95408,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95432,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95464,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95488,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95512,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95544,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95568,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95592,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95624,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95648,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95672,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95704,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95728,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95752,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95784,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95808,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95832,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95864,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95888,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95912,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95944,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95968,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95992,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96024,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96048,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96072,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96104,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96128,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96152,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96184,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96208,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96232,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96288,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96312,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96344,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96392,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96448,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96472,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96504,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96528,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96552,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96584,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96608,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96632,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96688,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96712,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96744,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96768,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96792,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96872,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96928,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96952,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96984,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97008,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97032,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97088,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97112,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97144,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97168,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97192,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97248,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97272,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97304,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97328,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97352,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97408,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97432,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97488,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97512,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97544,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97568,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97592,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2"},{"buffer":1,"byteLength":4160,"byteOffset":97648,"byteStride":64,"name":"bufferView_buffer_IBM_F010_Saber_Hair.001_skin_0"},{"buffer":2,"byteLength":97728,"byteOffset":0,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_0","target":34962},{"buffer":2,"byteLength":23400,"byteOffset":97728,"name":"bufferView_buffer_F010_Saber.003_1","target":34963},{"buffer":2,"byteLength":97728,"byteOffset":121128,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_skin_0","target":34962},{"buffer":2,"byteLength":8,"byteOffset":218856,"byteStride":4,"name":"bufferView_buffer_TPose_time_0"},{"buffer":2,"byteLength":24,"byteOffset":218864,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":218888,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":218920,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":218944,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":218968,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219000,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219024,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219048,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219080,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219104,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219128,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219160,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219184,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219208,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219240,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219264,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219288,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219320,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219344,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219368,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219400,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219424,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219448,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219480,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219528,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219560,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219584,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219608,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219640,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219688,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219720,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219744,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219768,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219800,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219848,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219880,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219928,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219960,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220008,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220040,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220088,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220120,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220144,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220168,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220200,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220248,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220280,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220328,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220360,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220408,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220440,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220488,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220520,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220544,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220568,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220600,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220648,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220680,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220704,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220728,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220760,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220784,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220808,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220840,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220864,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220888,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220920,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220968,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221000,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221024,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221048,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221080,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221104,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221128,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221160,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221184,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221208,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221240,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221288,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221320,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221344,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221368,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221400,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221448,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221480,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221528,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221560,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221584,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221608,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221640,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221664,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221688,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221720,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221744,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221768,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221800,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221848,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221880,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221904,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221928,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221960,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222008,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222040,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222064,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222088,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222120,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222144,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222168,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222200,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222248,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222280,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222328,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222360,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222408,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222440,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222488,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222520,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222544,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222568,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222600,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222648,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222680,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222704,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222728,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222760,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222784,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222808,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222840,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222864,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222888,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222920,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222968,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223000,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223024,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223048,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223080,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223104,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223128,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223160,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223184,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223208,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223240,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223288,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223320,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223344,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223368,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223400,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223448,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223480,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223504,"byteStride":12,"name":"bufferView_buffer_Character_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223528,"byteStride":16,"name":"bufferView_buffer_Character_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223560,"byteStride":12,"name":"bufferView_buffer_Character_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223584,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223608,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223640,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223688,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223720,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223744,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223768,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223800,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223824,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223848,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223880,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223904,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223928,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223960,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223984,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":224008,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":224040,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":224064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":224088,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":224120,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2"},{"buffer":2,"byteLength":4160,"byteOffset":224144,"byteStride":64,"name":"bufferView_buffer_IBM_Saber_maid_dress_skin_0"}],"buffers":[{"byteLength":2458392,"name":"buffer_combined_saber_body","uri":"buffer_combined_saber_body.bin"},{"byteLength":101808,"name":"buffer_combined_maid_hair","uri":"buffer_combined_maid_hair.bin"},{"byteLength":228304,"name":"buffer_combined_dress","uri":"buffer_combined_dress.bin"}],"images":[{"name":"saber-pure-body.png","uri":"saber-pure-body.png"},{"name":"saber_01_face.png","uri":"saber_01_face.png"},{"name":"body_id_lut","uri":"body_id.png"},{"name":"saber-hair-texture.png","uri":"saber-hair-texture.png"},{"name":"saber-dress-texture.png","uri":"saber-dress-texture.png"}],"materials":[{"name":"face.001","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":0,"texCoord":0},"metallicFactor":0,"roughnessFactor":1}},{"name":"saber-pure-body","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":1,"texCoord":0},"metallicFactor":0,"roughnessFactor":1},"extensions":{"gl_avatar":{"bodyIdLUT":2}},"alphaMode":"MASK","alphaCutOff":0.5},{"emissiveFactor":[0,0,0],"name":"F010_SaberSG","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":3,"texCoord":3},"metallicFactor":0,"roughnessFactor":1},"doubleSided":true},{"emissiveFactor":[0,0,0],"name":"F010_SaberSG.001","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":4,"texCoord":4},"metallicFactor":0,"roughnessFactor":1},"doubleSided":true}],"meshes":[{"name":"F010_Saber.003","primitives":[{"attributes":{"COLOR_0":488,"JOINTS_0":96,"NORMAL":531,"POSITION":45,"TEXCOORD_0":379,"WEIGHTS_0":769},"indices":541,"material":1,"mode":4}]},{"name":"F010_Saber.001","primitives":[{"attributes":{"COLOR_0":548,"JOINTS_0":786,"NORMAL":645,"POSITION":539,"TEXCOORD_0":118,"WEIGHTS_0":9},"indices":433,"material":0,"mode":4}]},{"name":"F010_Saber.003","primitives":[{"attributes":{"COLOR_0":961,"NORMAL":838,"POSITION":847,"TEXCOORD_0":900,"JOINTS_0":954,"WEIGHTS_0":1004},"indices":895,"material":2,"mode":4}]},{"name":"F010_Saber.003","primitives":[{"attributes":{"NORMAL":1045,"POSITION":1110,"TEXCOORD_0":1210,"JOINTS_0":1178,"WEIGHTS_0":1192},"indices":1080,"material":3,"mode":4}]}],"nodes":[{"children":[1,2,3],"name":"Character","rotation":[0.7071068286895752,0,0,0.7071067094802856],"scale":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"translation":[0,0,0]},{"mesh":0,"name":"F010_Saber_Body","rotation":[8.198130529990522e-8,6.977134425767417e-10,-3.4885669353279525e-10,1],"scale":[1.0011157989501953,1.0011157989501953,1.0011157989501953],"skin":0,"translation":[-0.0000028014183044433594,-0.000014305113836599048,0.000001072883719643869],"extensions":{"gl_avatar":{"skin":2}}},{"mesh":1,"name":"F010_Saber_Face","rotation":[8.136032647598768e-8,-1.5777218104420236e-30,1.0171798302661709e-16,1],"scale":[1.0011157989501953,1.0011157989501953,1.0011157989501953],"skin":1,"translation":[0,2.7755575615628914e-15,-4.52195720095739e-22]},{"children":[4,58,63],"name":"Armature_mixamorig:Hips","rotation":[0,0,0,1],"scale":[1,1,1],"translation":[0.007442474365234375,98.82971954345703,0.6201396584510803]},{"children":[5],"name":"Armature_mixamorig:Spine","rotation":[-0.039921652525663376,0,0,0.9992028474807739],"scale":[1,0.9999999403953552,1],"translation":[0,6.854499816894531,-0.5485978126525879]},{"children":[6],"name":"Armature_mixamorig:Spine1","rotation":[1.4901162970204496e-8,0,0,1],"scale":[1,0.9999999403953552,0.9999999403953552],"translation":[-4.656612873077393e-10,8.022480964660645,-2.384185791015625e-7]},{"children":[7,10,34],"name":"Armature_mixamorig:Spine2","rotation":[-5.029141902923584e-8,9.423000574271256e-13,-2.358492047493943e-11,1],"scale":[1,1,1],"translation":[-4.656612873077393e-10,9.168560028076172,-4.76837158203125e-7]},{"children":[8],"name":"Armature_mixamorig:Neck","rotation":[0.03992168977856636,1.427615485679809e-13,2.0030548400495896e-11,0.9992028474807739],"scale":[1,1,1],"translation":[-2.2881511962946632e-10,10.314631462097168,0.0000011920928955078125]},{"children":[9],"name":"Armature_mixamorig:Head","rotation":[-3.749335064640036e-9,-6.35555176367169e-21,5.4569682106375694e-12,1],"scale":[1,1,1],"translation":[-5.1451731764018405e-11,4.3087005615234375,0.11991112679243088]},{"name":"Armature_mixamorig:HeadTop_End","rotation":[0,2.610143520150023e-28,-1.8189894035458565e-12,1],"scale":[1,1,1],"translation":[1.2972056762095008e-10,20.857254028320312,0.5804517269134521]},{"children":[11],"name":"Armature_mixamorig:LeftShoulder","rotation":[0.5740949511528015,0.4067640006542206,-0.5904093384742737,0.39544278383255005],"scale":[1.0000001192092896,1,1],"translation":[3.513521194458008,8.987089157104492,-0.09783673286437988]},{"children":[12],"name":"Armature_mixamorig:LeftArm","rotation":[-0.19647400081157684,-0.0007150349556468427,0.0035684211179614067,0.9805023074150085],"scale":[1,1.0000001192092896,0.9999999403953552],"translation":[-5.960464477539062e-7,7.4837188720703125,-0.00001049041748046875]},{"children":[13],"name":"Armature_mixamorig:LeftForeArm","rotation":[-0.005400624126195908,-0.0001584456767886877,0.029325975105166435,0.9995554089546204],"scale":[1,0.9999998807907104,0.9999999403953552],"translation":[-5.364418029785156e-7,22.7723331451416,5.662441253662109e-7]},{"children":[14,18,22,26,30],"name":"Armature_mixamorig:LeftHand","rotation":[-0.0046674893237650394,-0.036291614174842834,-0.01584092527627945,0.9992048144340515],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[4.76837158203125e-7,19.02334213256836,8.046627044677734e-7]},{"children":[15],"name":"Armature_mixamorig:LeftHandThumb1","rotation":[0.24564014375209808,0.0797870084643364,0.2984432578086853,0.9188180565834045],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-1.3880550861358643,1.872644305229187,1.3422610759735107]},{"children":[16],"name":"Armature_mixamorig:LeftHandThumb2","rotation":[0.00489170802757144,4.4890290951116185e-7,4.610102450897102e-7,0.9999881386756897],"scale":[1,1,1],"translation":[-0.018166542053222656,2.1517605781555176,-0.000021755695343017578]},{"children":[17],"name":"Armature_mixamorig:LeftHandThumb3","rotation":[0.021618247032165527,-5.850072852808808e-7,-3.9590455003235547e-7,0.9997663497924805],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[0.07795095443725586,2.1093316078186035,0.0000018775463104248047]},{"name":"Armature_mixamorig:LeftHandThumb4","rotation":[4.284083487959833e-8,-1.769512749660862e-7,-3.3527612686157227e-8,1],"scale":[1,1,1.0000001192092896],"translation":[-0.0597844123840332,1.8846036195755005,-0.000011980533599853516]},{"children":[19],"name":"Armature_mixamorig:LeftHandIndex1","rotation":[0.026657480746507645,0.0018764277920126915,0.07018843293190002,0.9971757531166077],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[-2.3818466663360596,6.0911946296691895,0.09325551986694336]},{"children":[20],"name":"Armature_mixamorig:LeftHandIndex2","rotation":[-0.034092869609594345,-7.741025598306805e-8,1.2725772080557363e-7,0.9994186758995056],"scale":[1,1,1],"translation":[-0.009856224060058594,2.002563238143921,0.0000019297003746032715]},{"children":[21],"name":"Armature_mixamorig:LeftHandIndex3","rotation":[-0.011232745833694935,8.382431815334712e-8,-1.2014818651095993e-7,0.9999369382858276],"scale":[1,1,1],"translation":[0.0033556222915649414,1.906246304512024,-0.000002428889274597168]},{"name":"Armature_mixamorig:LeftHandIndex4","rotation":[-1.6298145055770874e-8,-2.116430550813675e-7,-1.4435499906539917e-7,1],"scale":[1,1,1],"translation":[0.006502628326416016,1.6352357864379883,-0.000007256865501403809]},{"children":[23],"name":"Armature_mixamorig:LeftHandMiddle1","rotation":[0.030671721324324608,0.0003823289880529046,0.012456541880965233,0.9994519352912903],"scale":[0.9999999403953552,1,1],"translation":[-0.620979368686676,5.9338483810424805,-0.18955062329769135]},{"children":[24],"name":"Armature_mixamorig:LeftHandMiddle2","rotation":[-0.01664525642991066,1.53325672158644e-8,1.832339968643737e-8,0.999861478805542],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.018555283546447754,2.2824888229370117,-0.000022992491722106934]},{"children":[25],"name":"Armature_mixamorig:LeftHandMiddle3","rotation":[-0.10026512295007706,-6.588842182964072e-8,1.4567116579655703e-7,0.9949608445167542],"scale":[1,0.9999998211860657,0.9999998211860657],"translation":[-0.010961532592773438,2.2484676837921143,-0.000016957521438598633]},{"name":"Armature_mixamorig:LeftHandMiddle4","rotation":[-4.5380154745089385e-8,5.855691398437557e-8,8.149073416063857e-9,1],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[0.02951037883758545,2.0856528282165527,0.000010073184967041016]},{"children":[27],"name":"Armature_mixamorig:LeftHandRing1","rotation":[0.10404136031866074,-0.008528899401426315,-0.08125600963830948,0.9912115335464478],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.8905025720596313,5.982393264770508,-0.24304264783859253]},{"children":[28],"name":"Armature_mixamorig:LeftHandRing2","rotation":[-0.03329118713736534,-6.639353955506522e-8,-3.7273565567375044e-8,0.9994457960128784],"scale":[1,0.9999999403953552,1],"translation":[-0.017888784408569336,2.1800594329833984,-0.000017344951629638672]},{"children":[29],"name":"Armature_mixamorig:LeftHandRing3","rotation":[-0.08213821053504944,5.25645127424923e-8,6.078793717279041e-7,0.9966209530830383],"scale":[1,0.9999999403953552,1],"translation":[-0.0040547847747802734,1.9782464504241943,-0.000038623809814453125]},{"name":"Armature_mixamorig:LeftHandRing4","rotation":[-1.4202669262886047e-7,-1.4062970876693726e-7,-1.5425030142068863e-7,1],"scale":[0.9999999403953552,1,1],"translation":[0.02194046974182129,1.7619253396987915,0.000026524066925048828]},{"children":[31],"name":"Armature_mixamorig:LeftHandPinky1","rotation":[0.13995902240276337,-0.024145862087607384,-0.16828545928001404,0.9754529595375061],"scale":[1,0.9999999403953552,1],"translation":[2.112321376800537,5.15140962600708,-0.10163509845733643]},{"children":[32],"name":"Armature_mixamorig:LeftHandPinky2","rotation":[-0.012911615893244743,6.519802298043942e-8,6.445289386647346e-7,0.999916672706604],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[-0.006536006927490234,1.828072190284729,-0.00001633167266845703]},{"children":[33],"name":"Armature_mixamorig:LeftHandPinky3","rotation":[-0.09343928843736649,1.850952742188383e-7,-2.745443339335907e-7,0.9956250786781311],"scale":[1,1.0000001192092896,1],"translation":[-0.006233692169189453,1.5249935388565063,0.000025272369384765625]},{"name":"Armature_mixamorig:LeftHandPinky4","rotation":[5.541368963690729e-8,-5.9371814131736755e-9,1.3969838619232178e-9,1],"scale":[1,1,1.0000001192092896],"translation":[0.012760639190673828,1.3818011283874512,-0.000005304813385009766]},{"children":[35],"name":"Armature_mixamorig:RightShoulder","rotation":[0.5726097226142883,-0.40782278776168823,0.5916988849639893,0.394577294588089],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[-3.513521194458008,8.98842716217041,-0.11455440521240234]},{"children":[36],"name":"Armature_mixamorig:RightArm","rotation":[-0.19615903496742249,0.0015209860866889358,-0.007602959871292114,0.980541467666626],"scale":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"translation":[6.854534149169922e-7,7.4837188720703125,-0.0000069588422775268555]},{"children":[37],"name":"Armature_mixamorig:RightForeArm","rotation":[-0.005199347157031298,0.00015941221499815583,-0.03064456395804882,0.9995168447494507],"scale":[1,1,1.0000001192092896],"translation":[-0.0000010132789611816406,22.770898818969727,-0.0000026673078536987305]},{"children":[38,42,46,50,54],"name":"Armature_mixamorig:RightHand","rotation":[-0.027066726237535477,0.03516821190714836,0.024613087996840477,0.9987115859985352],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[5.960464477539062e-7,19.027141571044922,-0.000011309981346130371]},{"children":[39],"name":"Armature_mixamorig:RightHandThumb1","rotation":[0.24496246874332428,-0.07342495024204254,-0.27757158875465393,0.9260433316230774],"scale":[1,0.9999999403953552,1],"translation":[1.4313437938690186,1.9488826990127563,1.373734474182129]},{"children":[40],"name":"Armature_mixamorig:RightHandThumb2","rotation":[0.02597731165587902,4.695450286362757e-7,4.360061325314746e-7,0.9996625781059265],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.09870082139968872,2.2226028442382812,0.000018328428268432617]},{"children":[41],"name":"Armature_mixamorig:RightHandThumb3","rotation":[0.0020599281415343285,-4.209587416426075e-7,-2.747407563674642e-7,0.9999979734420776],"scale":[1,1,1],"translation":[0.08420944213867188,1.993523359298706,-0.000024646520614624023]},{"name":"Armature_mixamorig:RightHandThumb4","rotation":[6.705523247774181e-8,-7.450580596923828e-9,6.05359673500061e-8,1],"scale":[1,0.9999998807907104,0.9999998807907104],"translation":[-0.1829054355621338,1.5351988077163696,0.000009775161743164062]},{"children":[43],"name":"Armature_mixamorig:RightHandIndex1","rotation":[0.04785900563001633,-0.003934510983526707,-0.08183817565441132,0.9954881072044373],"scale":[1,1,1],"translation":[2.2894375324249268,5.801694393157959,0.050646696239709854]},{"children":[44],"name":"Armature_mixamorig:RightHandIndex2","rotation":[-0.028287818655371666,7.496872456158599e-8,2.392710314325086e-7,0.9995998740196228],"scale":[1,1,0.9999999403953552],"translation":[0.029898226261138916,2.2504000663757324,0.000021301209926605225]},{"children":[45],"name":"Armature_mixamorig:RightHandIndex3","rotation":[-0.14387890696525574,7.74066961639619e-8,1.5951893317378563e-7,0.9895954132080078],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[0.01506185531616211,2.0928609371185303,0.00001971423625946045]},{"name":"Armature_mixamorig:RightHandIndex4","rotation":[-2.57976381590197e-7,-8.847565879932517e-8,-1.480803035747158e-7,1],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.04495549201965332,1.9040567874908447,-0.000019669532775878906]},{"children":[47],"name":"Armature_mixamorig:RightHandMiddle1","rotation":[0.06535934656858444,-0.0012092242250218987,-0.018458466976881027,0.9976903200149536],"scale":[1,1,1],"translation":[0.6151741147041321,5.987786293029785,-0.2521481215953827]},{"children":[48],"name":"Armature_mixamorig:RightHandMiddle2","rotation":[-0.02911515347659588,-1.493660128915053e-8,1.2578189512169047e-7,0.9995761513710022],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[0.025691747665405273,2.3235480785369873,0.0000058710575103759766]},{"children":[49],"name":"Armature_mixamorig:RightHandMiddle3","rotation":[-0.12079086899757385,3.73517679008728e-8,3.685922251861484e-7,0.9926779866218567],"scale":[1,0.9999998807907104,0.9999998211860657],"translation":[0.011220812797546387,2.2008121013641357,0.000029072165489196777]},{"name":"Armature_mixamorig:RightHandMiddle4","rotation":[2.531742211431265e-7,-1.9557775843281888e-8,2.561137080192566e-9,1],"scale":[1,1,0.9999999403953552],"translation":[-0.036910414695739746,2.00234055519104,0.00000260770320892334]},{"children":[51],"name":"Armature_mixamorig:RightHandRing1","rotation":[0.08960019052028656,0.007558114361017942,0.0837147906422615,0.9924246072769165],"scale":[1,0.9999999403953552,1],"translation":[-0.8287993669509888,5.778010845184326,-0.2080925703048706]},{"children":[52],"name":"Armature_mixamorig:RightHandRing2","rotation":[0.02305533178150654,-1.0247272363983484e-8,-2.6083968762691256e-8,0.9997342824935913],"scale":[1,1,1.0000001192092896],"translation":[0.008643150329589844,2.2196152210235596,-0.000009953975677490234]},{"children":[53],"name":"Armature_mixamorig:RightHandRing3","rotation":[-0.12460635602474213,6.288876619464645e-8,3.815565037257329e-7,0.992206335067749],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.016327381134033203,2.091179847717285,0.000004410743713378906]},{"name":"Armature_mixamorig:RightHandRing4","rotation":[-8.42846930027008e-8,-6.05359673500061e-8,-6.356277282293377e-8,1],"scale":[0.9999999403953552,0.9999998807907104,1],"translation":[-0.02497267723083496,1.9166507720947266,-0.000018537044525146484]},{"children":[55],"name":"Armature_mixamorig:RightHandPinky1","rotation":[0.1575794368982315,0.028793327510356903,0.17742541432380676,0.9710097312927246],"scale":[1,1.0000001192092896,1],"translation":[-2.075824737548828,5.181243896484375,-0.156680166721344]},{"children":[56],"name":"Armature_mixamorig:RightHandPinky2","rotation":[-0.021833697333931923,-8.849674060229518e-8,-3.185882917478011e-7,0.9997616410255432],"scale":[1,0.9999998211860657,0.9999999403953552],"translation":[0.009781837463378906,1.9066412448883057,0.00003445148468017578]},{"children":[57],"name":"Armature_mixamorig:RightHandPinky3","rotation":[-0.0985320433974266,-1.1792045739866808e-7,-2.5736605735460216e-8,0.9951338768005371],"scale":[1,1.0000001192092896,1],"translation":[0.004714488983154297,1.55594801902771,0.000019788742065429688]},{"name":"Armature_mixamorig:RightHandPinky4","rotation":[1.695007227908718e-7,-6.053597445543346e-8,1.6530977475781583e-8,1],"scale":[0.9999998807907104,0.9999998807907104,0.9999999403953552],"translation":[-0.014493942260742188,1.4579054117202759,-0.000033020973205566406]},{"children":[59],"name":"Armature_mixamorig:LeftUpLeg","rotation":[-0.000008872594662534539,0.0009148783865384758,0.9998617172241211,0.016607170924544334],"scale":[1.0001250505447388,1,1.000000238418579],"translation":[6.5092010498046875,-3.8089065551757812,-0.3193536400794983]},{"children":[60],"name":"Armature_mixamorig:LeftLeg","rotation":[-0.019678570330142975,-0.00024797735386528075,0.012827177532017231,0.9997241497039795],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[4.90503225591965e-7,45.04969024658203,-3.3028754842234775e-8]},{"children":[61],"name":"Armature_mixamorig:LeftFoot","rotation":[0.4820258617401123,0.06575184315443039,-0.03629865497350693,0.872931957244873],"scale":[1,1.0000001192092896,1.0000001192092896],"translation":[-3.387158358236775e-7,41.849327087402344,-3.457535058259964e-8]},{"children":[62],"name":"Armature_mixamorig:LeftToeBase","rotation":[0.29159197211265564,-0.06168047711253166,0.01884075440466404,0.9543660879135132],"scale":[1,1,1.0000001192092896],"translation":[8.810311555862427e-7,12.08905029296875,-0.000003889203071594238]},{"name":"Armature_mixamorig:LeftToe_End","rotation":[9.872019290924072e-8,0.000008056988008320332,-1.909211277961731e-8,1],"scale":[1,1,1],"translation":[-3.5762786865234375e-7,4.706444263458252,5.960464477539063e-8]},{"children":[64],"name":"Armature_mixamorig:RightUpLeg","rotation":[-0.00000294413257506676,-0.0034815834369510412,-0.9998561143875122,0.01660647802054882],"scale":[1.000124216079712,1,1.0000035762786865],"translation":[-6.5092010498046875,-3.8089065551757812,-0.4497392773628235]},{"children":[65],"name":"Armature_mixamorig:RightLeg","rotation":[-0.022010719403624535,0.00022552665905095637,-0.012826679274439812,0.999675452709198],"scale":[0.9999998807907104,0.9999998807907104,1],"translation":[4.079265636391938e-8,45.050357818603516,-1.5308614820241928e-8]},{"children":[66],"name":"Armature_mixamorig:RightFoot","rotation":[0.48082953691482544,-0.06620366871356964,0.03643133118748665,0.8735518455505371],"scale":[1,1.0000001192092896,1.000000238418579],"translation":[-9.810537449084222e-8,41.85009765625,4.062894731760025e-8]},{"children":[67],"name":"Armature_mixamorig:RightToeBase","rotation":[0.29314252734184265,0.06225594878196716,-0.01912800408899784,0.9538480043411255],"scale":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"translation":[-6.51925802230835e-8,12.033415794372559,0.0000034570693969726562]},{"name":"Armature_mixamorig:RightToe_End","rotation":[-3.748573362827301e-8,-0.000008230912499129772,-2.9453076422214508e-8,1],"scale":[1,1,1],"translation":[1.043081283569336e-7,4.712545394897461,3.2782554626464844e-7]},{"children":[0],"matrix":[-1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1],"name":"Scene_root"},{"children":[70],"name":"Character","rotation":[0.7071068286895752,0,0,0.7071067094802856],"scale":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"translation":[0,0,0]},{"mesh":2,"name":"F010_Saber_Hair.001","rotation":[0,0,0,1],"scale":[1.0011157989501953,1.0011157989501953,1.0011157989501953],"translation":[0,-7.586585270321754e-15,-4.6566128730773926e-8],"skin":3},{"children":[69],"matrix":[-1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1],"name":"Scene_root"},{"children":[73,74],"name":"Character","rotation":[0.7071068286895752,0,0,0.7071067094802856],"scale":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"translation":[0,0,0]},{"mesh":3,"name":"Saber_maid_dress","rotation":[0,2.215453975872375e-14,1.0171550148477943e-16,1],"scale":[1.0022532939910889,1.0022532939910889,1.0022532939910889],"translation":[9.596120962738694e-15,-1.715214104081042e-8,-9.706444359380839e-8],"skin":4},{"children":[75,129,134],"name":"Armature_mixamorig:Hips","rotation":[0,0,0,1],"scale":[1,1,1],"translation":[0.007442474365234375,98.82971954345703,0.6201396584510803]},{"children":[76],"name":"Armature_mixamorig:Spine","rotation":[-0.039921652525663376,0,0,0.9992028474807739],"scale":[1,0.9999999403953552,1],"translation":[0,6.854499816894531,-0.5485978126525879]},{"children":[77],"name":"Armature_mixamorig:Spine1","rotation":[1.4901162970204496e-8,0,0,1],"scale":[1,0.9999999403953552,0.9999999403953552],"translation":[-4.656612873077393e-10,8.022480964660645,-2.384185791015625e-7]},{"children":[78,81,105],"name":"Armature_mixamorig:Spine2","rotation":[-5.029141902923584e-8,9.423000574271256e-13,-2.358492047493943e-11,1],"scale":[1,1,1],"translation":[-4.656612873077393e-10,9.168560028076172,-4.76837158203125e-7]},{"children":[79],"name":"Armature_mixamorig:Neck","rotation":[0.03992168977856636,1.427615485679809e-13,2.0030548400495896e-11,0.9992028474807739],"scale":[1,1,1],"translation":[-2.2881511962946632e-10,10.314631462097168,0.0000011920928955078125]},{"children":[80],"name":"Armature_mixamorig:Head","rotation":[-3.749335064640036e-9,-6.35555176367169e-21,5.4569682106375694e-12,1],"scale":[1,1,1],"translation":[-5.1451731764018405e-11,4.3087005615234375,0.11991112679243088]},{"name":"Armature_mixamorig:HeadTop_End","rotation":[0,2.610143520150023e-28,-1.8189894035458565e-12,1],"scale":[1,1,1],"translation":[1.2972056762095008e-10,20.857254028320312,0.5804517269134521]},{"children":[82],"name":"Armature_mixamorig:LeftShoulder","rotation":[0.5740949511528015,0.4067640006542206,-0.5904093384742737,0.39544278383255005],"scale":[1.0000001192092896,1,1],"translation":[3.513521194458008,8.987089157104492,-0.09783673286437988]},{"children":[83],"name":"Armature_mixamorig:LeftArm","rotation":[-0.19647400081157684,-0.0007150349556468427,0.0035684211179614067,0.9805023074150085],"scale":[1,1.0000001192092896,0.9999999403953552],"translation":[-5.960464477539062e-7,7.4837188720703125,-0.00001049041748046875]},{"children":[84],"name":"Armature_mixamorig:LeftForeArm","rotation":[-0.005400624126195908,-0.0001584456767886877,0.029325975105166435,0.9995554089546204],"scale":[1,0.9999998807907104,0.9999999403953552],"translation":[-5.364418029785156e-7,22.7723331451416,5.662441253662109e-7]},{"children":[85,89,93,97,101],"name":"Armature_mixamorig:LeftHand","rotation":[-0.0046674893237650394,-0.036291614174842834,-0.01584092527627945,0.9992048144340515],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[4.76837158203125e-7,19.02334213256836,8.046627044677734e-7]},{"children":[86],"name":"Armature_mixamorig:LeftHandThumb1","rotation":[0.24564014375209808,0.0797870084643364,0.2984432578086853,0.9188180565834045],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-1.3880550861358643,1.872644305229187,1.3422610759735107]},{"children":[87],"name":"Armature_mixamorig:LeftHandThumb2","rotation":[0.00489170802757144,4.4890290951116185e-7,4.610102450897102e-7,0.9999881386756897],"scale":[1,1,1],"translation":[-0.018166542053222656,2.1517605781555176,-0.000021755695343017578]},{"children":[88],"name":"Armature_mixamorig:LeftHandThumb3","rotation":[0.021618247032165527,-5.850072852808808e-7,-3.9590455003235547e-7,0.9997663497924805],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[0.07795095443725586,2.1093316078186035,0.0000018775463104248047]},{"name":"Armature_mixamorig:LeftHandThumb4","rotation":[4.284083487959833e-8,-1.769512749660862e-7,-3.3527612686157227e-8,1],"scale":[1,1,1.0000001192092896],"translation":[-0.0597844123840332,1.8846036195755005,-0.000011980533599853516]},{"children":[90],"name":"Armature_mixamorig:LeftHandIndex1","rotation":[0.026657480746507645,0.0018764277920126915,0.07018843293190002,0.9971757531166077],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[-2.3818466663360596,6.0911946296691895,0.09325551986694336]},{"children":[91],"name":"Armature_mixamorig:LeftHandIndex2","rotation":[-0.034092869609594345,-7.741025598306805e-8,1.2725772080557363e-7,0.9994186758995056],"scale":[1,1,1],"translation":[-0.009856224060058594,2.002563238143921,0.0000019297003746032715]},{"children":[92],"name":"Armature_mixamorig:LeftHandIndex3","rotation":[-0.011232745833694935,8.382431815334712e-8,-1.2014818651095993e-7,0.9999369382858276],"scale":[1,1,1],"translation":[0.0033556222915649414,1.906246304512024,-0.000002428889274597168]},{"name":"Armature_mixamorig:LeftHandIndex4","rotation":[-1.6298145055770874e-8,-2.116430550813675e-7,-1.4435499906539917e-7,1],"scale":[1,1,1],"translation":[0.006502628326416016,1.6352357864379883,-0.000007256865501403809]},{"children":[94],"name":"Armature_mixamorig:LeftHandMiddle1","rotation":[0.030671721324324608,0.0003823289880529046,0.012456541880965233,0.9994519352912903],"scale":[0.9999999403953552,1,1],"translation":[-0.620979368686676,5.9338483810424805,-0.18955062329769135]},{"children":[95],"name":"Armature_mixamorig:LeftHandMiddle2","rotation":[-0.01664525642991066,1.53325672158644e-8,1.832339968643737e-8,0.999861478805542],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.018555283546447754,2.2824888229370117,-0.000022992491722106934]},{"children":[96],"name":"Armature_mixamorig:LeftHandMiddle3","rotation":[-0.10026512295007706,-6.588842182964072e-8,1.4567116579655703e-7,0.9949608445167542],"scale":[1,0.9999998211860657,0.9999998211860657],"translation":[-0.010961532592773438,2.2484676837921143,-0.000016957521438598633]},{"name":"Armature_mixamorig:LeftHandMiddle4","rotation":[-4.5380154745089385e-8,5.855691398437557e-8,8.149073416063857e-9,1],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[0.02951037883758545,2.0856528282165527,0.000010073184967041016]},{"children":[98],"name":"Armature_mixamorig:LeftHandRing1","rotation":[0.10404136031866074,-0.008528899401426315,-0.08125600963830948,0.9912115335464478],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.8905025720596313,5.982393264770508,-0.24304264783859253]},{"children":[99],"name":"Armature_mixamorig:LeftHandRing2","rotation":[-0.03329118713736534,-6.639353955506522e-8,-3.7273565567375044e-8,0.9994457960128784],"scale":[1,0.9999999403953552,1],"translation":[-0.017888784408569336,2.1800594329833984,-0.000017344951629638672]},{"children":[100],"name":"Armature_mixamorig:LeftHandRing3","rotation":[-0.08213821053504944,5.25645127424923e-8,6.078793717279041e-7,0.9966209530830383],"scale":[1,0.9999999403953552,1],"translation":[-0.0040547847747802734,1.9782464504241943,-0.000038623809814453125]},{"name":"Armature_mixamorig:LeftHandRing4","rotation":[-1.4202669262886047e-7,-1.4062970876693726e-7,-1.5425030142068863e-7,1],"scale":[0.9999999403953552,1,1],"translation":[0.02194046974182129,1.7619253396987915,0.000026524066925048828]},{"children":[102],"name":"Armature_mixamorig:LeftHandPinky1","rotation":[0.13995902240276337,-0.024145862087607384,-0.16828545928001404,0.9754529595375061],"scale":[1,0.9999999403953552,1],"translation":[2.112321376800537,5.15140962600708,-0.10163509845733643]},{"children":[103],"name":"Armature_mixamorig:LeftHandPinky2","rotation":[-0.012911615893244743,6.519802298043942e-8,6.445289386647346e-7,0.999916672706604],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[-0.006536006927490234,1.828072190284729,-0.00001633167266845703]},{"children":[104],"name":"Armature_mixamorig:LeftHandPinky3","rotation":[-0.09343928843736649,1.850952742188383e-7,-2.745443339335907e-7,0.9956250786781311],"scale":[1,1.0000001192092896,1],"translation":[-0.006233692169189453,1.5249935388565063,0.000025272369384765625]},{"name":"Armature_mixamorig:LeftHandPinky4","rotation":[5.541368963690729e-8,-5.9371814131736755e-9,1.3969838619232178e-9,1],"scale":[1,1,1.0000001192092896],"translation":[0.012760639190673828,1.3818011283874512,-0.000005304813385009766]},{"children":[106],"name":"Armature_mixamorig:RightShoulder","rotation":[0.5726097226142883,-0.40782278776168823,0.5916988849639893,0.394577294588089],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[-3.513521194458008,8.98842716217041,-0.11455440521240234]},{"children":[107],"name":"Armature_mixamorig:RightArm","rotation":[-0.19615903496742249,0.0015209860866889358,-0.007602959871292114,0.980541467666626],"scale":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"translation":[6.854534149169922e-7,7.4837188720703125,-0.0000069588422775268555]},{"children":[108],"name":"Armature_mixamorig:RightForeArm","rotation":[-0.005199347157031298,0.00015941221499815583,-0.03064456395804882,0.9995168447494507],"scale":[1,1,1.0000001192092896],"translation":[-0.0000010132789611816406,22.770898818969727,-0.0000026673078536987305]},{"children":[109,113,117,121,125],"name":"Armature_mixamorig:RightHand","rotation":[-0.027066726237535477,0.03516821190714836,0.024613087996840477,0.9987115859985352],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[5.960464477539062e-7,19.027141571044922,-0.000011309981346130371]},{"children":[110],"name":"Armature_mixamorig:RightHandThumb1","rotation":[0.24496246874332428,-0.07342495024204254,-0.27757158875465393,0.9260433316230774],"scale":[1,0.9999999403953552,1],"translation":[1.4313437938690186,1.9488826990127563,1.373734474182129]},{"children":[111],"name":"Armature_mixamorig:RightHandThumb2","rotation":[0.02597731165587902,4.695450286362757e-7,4.360061325314746e-7,0.9996625781059265],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.09870082139968872,2.2226028442382812,0.000018328428268432617]},{"children":[112],"name":"Armature_mixamorig:RightHandThumb3","rotation":[0.0020599281415343285,-4.209587416426075e-7,-2.747407563674642e-7,0.9999979734420776],"scale":[1,1,1],"translation":[0.08420944213867188,1.993523359298706,-0.000024646520614624023]},{"name":"Armature_mixamorig:RightHandThumb4","rotation":[6.705523247774181e-8,-7.450580596923828e-9,6.05359673500061e-8,1],"scale":[1,0.9999998807907104,0.9999998807907104],"translation":[-0.1829054355621338,1.5351988077163696,0.000009775161743164062]},{"children":[114],"name":"Armature_mixamorig:RightHandIndex1","rotation":[0.04785900563001633,-0.003934510983526707,-0.08183817565441132,0.9954881072044373],"scale":[1,1,1],"translation":[2.2894375324249268,5.801694393157959,0.050646696239709854]},{"children":[115],"name":"Armature_mixamorig:RightHandIndex2","rotation":[-0.028287818655371666,7.496872456158599e-8,2.392710314325086e-7,0.9995998740196228],"scale":[1,1,0.9999999403953552],"translation":[0.029898226261138916,2.2504000663757324,0.000021301209926605225]},{"children":[116],"name":"Armature_mixamorig:RightHandIndex3","rotation":[-0.14387890696525574,7.74066961639619e-8,1.5951893317378563e-7,0.9895954132080078],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[0.01506185531616211,2.0928609371185303,0.00001971423625946045]},{"name":"Armature_mixamorig:RightHandIndex4","rotation":[-2.57976381590197e-7,-8.847565879932517e-8,-1.480803035747158e-7,1],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.04495549201965332,1.9040567874908447,-0.000019669532775878906]},{"children":[118],"name":"Armature_mixamorig:RightHandMiddle1","rotation":[0.06535934656858444,-0.0012092242250218987,-0.018458466976881027,0.9976903200149536],"scale":[1,1,1],"translation":[0.6151741147041321,5.987786293029785,-0.2521481215953827]},{"children":[119],"name":"Armature_mixamorig:RightHandMiddle2","rotation":[-0.02911515347659588,-1.493660128915053e-8,1.2578189512169047e-7,0.9995761513710022],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[0.025691747665405273,2.3235480785369873,0.0000058710575103759766]},{"children":[120],"name":"Armature_mixamorig:RightHandMiddle3","rotation":[-0.12079086899757385,3.73517679008728e-8,3.685922251861484e-7,0.9926779866218567],"scale":[1,0.9999998807907104,0.9999998211860657],"translation":[0.011220812797546387,2.2008121013641357,0.000029072165489196777]},{"name":"Armature_mixamorig:RightHandMiddle4","rotation":[2.531742211431265e-7,-1.9557775843281888e-8,2.561137080192566e-9,1],"scale":[1,1,0.9999999403953552],"translation":[-0.036910414695739746,2.00234055519104,0.00000260770320892334]},{"children":[122],"name":"Armature_mixamorig:RightHandRing1","rotation":[0.08960019052028656,0.007558114361017942,0.0837147906422615,0.9924246072769165],"scale":[1,0.9999999403953552,1],"translation":[-0.8287993669509888,5.778010845184326,-0.2080925703048706]},{"children":[123],"name":"Armature_mixamorig:RightHandRing2","rotation":[0.02305533178150654,-1.0247272363983484e-8,-2.6083968762691256e-8,0.9997342824935913],"scale":[1,1,1.0000001192092896],"translation":[0.008643150329589844,2.2196152210235596,-0.000009953975677490234]},{"children":[124],"name":"Armature_mixamorig:RightHandRing3","rotation":[-0.12460635602474213,6.288876619464645e-8,3.815565037257329e-7,0.992206335067749],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.016327381134033203,2.091179847717285,0.000004410743713378906]},{"name":"Armature_mixamorig:RightHandRing4","rotation":[-8.42846930027008e-8,-6.05359673500061e-8,-6.356277282293377e-8,1],"scale":[0.9999999403953552,0.9999998807907104,1],"translation":[-0.02497267723083496,1.9166507720947266,-0.000018537044525146484]},{"children":[126],"name":"Armature_mixamorig:RightHandPinky1","rotation":[0.1575794368982315,0.028793327510356903,0.17742541432380676,0.9710097312927246],"scale":[1,1.0000001192092896,1],"translation":[-2.075824737548828,5.181243896484375,-0.156680166721344]},{"children":[127],"name":"Armature_mixamorig:RightHandPinky2","rotation":[-0.021833697333931923,-8.849674060229518e-8,-3.185882917478011e-7,0.9997616410255432],"scale":[1,0.9999998211860657,0.9999999403953552],"translation":[0.009781837463378906,1.9066412448883057,0.00003445148468017578]},{"children":[128],"name":"Armature_mixamorig:RightHandPinky3","rotation":[-0.0985320433974266,-1.1792045739866808e-7,-2.5736605735460216e-8,0.9951338768005371],"scale":[1,1.0000001192092896,1],"translation":[0.004714488983154297,1.55594801902771,0.000019788742065429688]},{"name":"Armature_mixamorig:RightHandPinky4","rotation":[1.695007227908718e-7,-6.053597445543346e-8,1.6530977475781583e-8,1],"scale":[0.9999998807907104,0.9999998807907104,0.9999999403953552],"translation":[-0.014493942260742188,1.4579054117202759,-0.000033020973205566406]},{"children":[130],"name":"Armature_mixamorig:LeftUpLeg","rotation":[-0.000008872594662534539,0.0009148783865384758,0.9998617172241211,0.016607170924544334],"scale":[1.0001250505447388,1,1.000000238418579],"translation":[6.5092010498046875,-3.8089065551757812,-0.3193536400794983]},{"children":[131],"name":"Armature_mixamorig:LeftLeg","rotation":[-0.019678570330142975,-0.00024797735386528075,0.012827177532017231,0.9997241497039795],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[4.90503225591965e-7,45.04969024658203,-3.3028754842234775e-8]},{"children":[132],"name":"Armature_mixamorig:LeftFoot","rotation":[0.4820258617401123,0.06575184315443039,-0.03629865497350693,0.872931957244873],"scale":[1,1.0000001192092896,1.0000001192092896],"translation":[-3.387158358236775e-7,41.849327087402344,-3.457535058259964e-8]},{"children":[133],"name":"Armature_mixamorig:LeftToeBase","rotation":[0.29159197211265564,-0.06168047711253166,0.01884075440466404,0.9543660879135132],"scale":[1,1,1.0000001192092896],"translation":[8.810311555862427e-7,12.08905029296875,-0.000003889203071594238]},{"name":"Armature_mixamorig:LeftToe_End","rotation":[9.872019290924072e-8,0.000008056988008320332,-1.909211277961731e-8,1],"scale":[1,1,1],"translation":[-3.5762786865234375e-7,4.706444263458252,5.960464477539063e-8]},{"children":[135],"name":"Armature_mixamorig:RightUpLeg","rotation":[-0.00000294413257506676,-0.0034815834369510412,-0.9998561143875122,0.01660647802054882],"scale":[1.000124216079712,1,1.0000035762786865],"translation":[-6.5092010498046875,-3.8089065551757812,-0.4497392773628235]},{"children":[136],"name":"Armature_mixamorig:RightLeg","rotation":[-0.022010719403624535,0.00022552665905095637,-0.012826679274439812,0.999675452709198],"scale":[0.9999998807907104,0.9999998807907104,1],"translation":[4.079265636391938e-8,45.050357818603516,-1.5308614820241928e-8]},{"children":[137],"name":"Armature_mixamorig:RightFoot","rotation":[0.48082953691482544,-0.06620366871356964,0.03643133118748665,0.8735518455505371],"scale":[1,1.0000001192092896,1.000000238418579],"translation":[-9.810537449084222e-8,41.85009765625,4.062894731760025e-8]},{"children":[138],"name":"Armature_mixamorig:RightToeBase","rotation":[0.29314252734184265,0.06225594878196716,-0.01912800408899784,0.9538480043411255],"scale":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"translation":[-6.51925802230835e-8,12.033415794372559,0.0000034570693969726562]},{"name":"Armature_mixamorig:RightToe_End","rotation":[-3.748573362827301e-8,-0.000008230912499129772,-2.9453076422214508e-8,1],"scale":[1,1,1],"translation":[1.043081283569336e-7,4.712545394897461,3.2782554626464844e-7]},{"children":[72],"matrix":[-1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1],"name":"Scene_root"}],"samplers":[{"name":"default"},{"magFilter":9728,"minFilter":9728},{"name":"default"},{"name":"default"}],"scene":0,"scenes":[{"extras":{"active_camera":null,"background_color":[0.05087608844041824,0.05087608844041824,0.05087608844041824],"frames_per_second":30},"name":"Scene","nodes":[68,71,139]}],"skins":[{"inverseBindMatrices":416,"joints":[3,4,5,6,7,8,10,11,12,13,14,15,16,18,19,20,22,23,24,26,27,28,30,31,32,34,35,36,37,38,39,40,42,43,44,46,47,48,50,51,52,54,55,56,58,59,60,61,63,64,65,66],"name":"F010_Saber_Body","skeleton":3},{"inverseBindMatrices":626,"joints":[6,7,8],"name":"F010_Saber_Face","skeleton":3},{"joints":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"name":"full","skeleton":3},{"joints":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"name":"full","skeleton":3,"inverseBindMatrices":946},{"joints":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"name":"full","skeleton":3,"inverseBindMatrices":1193}],"textures":[{"name":"Saber-Face","sampler":0,"source":1},{"name":"saber-pure-body.png","sampler":0,"source":0},{"sampler":1,"source":2},{"name":"saber","sampler":2,"source":3},{"name":"saber-dress-texture.png","sampler":3,"source":4}]} \ No newline at end of file diff --git a/models/gltf/merged-saber-maid/saber-dress-texture.png b/models/gltf/merged-saber-maid/saber-dress-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..03ba13cc2d939f828261ae7ee29ab89cf8553f8f --- /dev/null +++ b/models/gltf/merged-saber-maid/saber-dress-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33d4b9521ea57051e246a841a9f73cacb04f986d7cf7a530061219dedf2338d0 +size 1038135 diff --git a/models/gltf/merged-saber-maid/saber-hair-texture.png b/models/gltf/merged-saber-maid/saber-hair-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..ead23c5dbd62cf7491295a78aa21c8abda96d278 Binary files /dev/null and b/models/gltf/merged-saber-maid/saber-hair-texture.png differ diff --git a/models/gltf/merged-saber-maid/saber-pure-body.png b/models/gltf/merged-saber-maid/saber-pure-body.png new file mode 100644 index 0000000000000000000000000000000000000000..27bee97e5e9833f1f0966d90aba3d19b3ff834b7 Binary files /dev/null and b/models/gltf/merged-saber-maid/saber-pure-body.png differ diff --git a/models/gltf/merged-saber-maid/saber_01_face.png b/models/gltf/merged-saber-maid/saber_01_face.png new file mode 100644 index 0000000000000000000000000000000000000000..baba4465c57f1a481033cf7d77ff5ff2c85e72e4 Binary files /dev/null and b/models/gltf/merged-saber-maid/saber_01_face.png differ diff --git a/models/gltf/saber-body-mixamo-animations/body_id.png b/models/gltf/saber-body-mixamo-animations/body_id.png new file mode 100644 index 0000000000000000000000000000000000000000..41cad61355767fd2960f91516a35bab6ed96c33d Binary files /dev/null and b/models/gltf/saber-body-mixamo-animations/body_id.png differ diff --git a/models/gltf/saber-body-mixamo-animations/buffer_combined_saber_body.bin b/models/gltf/saber-body-mixamo-animations/buffer_combined_saber_body.bin new file mode 100644 index 0000000000000000000000000000000000000000..b46f555ebccf9f28983831ef117927f9c39fa9a9 --- /dev/null +++ b/models/gltf/saber-body-mixamo-animations/buffer_combined_saber_body.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1dd8a0f6e6eeea89b1a36886365a1268b19c47791fa11fd5f8774565e8081491 +size 2458392 diff --git a/models/gltf/saber-body-mixamo-animations/saber-body-animations.gltf b/models/gltf/saber-body-mixamo-animations/saber-body-animations.gltf new file mode 100644 index 0000000000000000000000000000000000000000..ed4e3b0660e66f96b29d52eef2ab76d6f05bd2fc --- /dev/null +++ b/models/gltf/saber-body-mixamo-animations/saber-body-animations.gltf @@ -0,0 +1,32151 @@ +{ + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "type": "skeleton", + "skins": { + "main": 2 + }, + "nodes": { + "head": 8, + "head-end": 9 + } + } + }, + "accessors": [ + { + "bufferView": 798, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 462, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.08421516418457031, + 1.9935355186462402, + 0 + ], + "min": [ + 0.08420920372009277, + 1.993518590927124, + -2.86102294921875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 413, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Head_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 525, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.8726584911346436, + 1.342261552810669 + ], + "min": [ + -1.3880643844604492, + 1.8726342916488647, + 1.342238426208496 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 5.778028964996338, + 0 + ], + "min": [ + -0.8288059234619141, + 5.777997970581055, + -0.20810604095458984 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 764, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.3061813712120056, + 0, + 0, + 0.943814754486084 + ], + "min": [ + 0.24054649472236633, + -0.03875672072172165, + -0.2256726771593094, + 0.924025297164917 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 664, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 5.778042793273926, + 0 + ], + "min": [ + -0.8288237452507019, + 5.777987003326416, + -0.20811843872070312 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 361, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 16, + "componentType": 5126, + "count": 1176, + "max": [ + 1.0, + 0.21810737252235413, + 0.0008118848782032728, + 0 + ], + "min": [ + 0.7810807824134827, + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_F010_Saber.001_skin_1", + "type": "VEC4" + }, + { + "bufferView": 751, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.015084788203239441, + 2.09287691116333, + 4.1961669921875e-05 + ], + "min": [ + 0.01503366231918335, + 2.092836856842041, + -1.9073486328125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 527, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 2.282504081726074, + 0 + ], + "min": [ + -0.018561363220214844, + 2.28246808052063, + -2.765655517578125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.1123294830322266, + 5.15142822265625, + 0 + ], + "min": [ + 2.112313747406006, + 5.151396751403809, + -0.10166263580322266 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 237, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999995231628418 + ], + "min": [ + -1.7708856603348977e-06, + -8.915702346712351e-05, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.4579193592071533, + 1.5735626220703125e-05 + ], + "min": [ + -0.014500141143798828, + 1.4578824043273926, + -3.814697265625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Hips_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 600, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.5249981880187988, + 9.5367431640625e-06 + ], + "min": [ + -0.0062351226806640625, + 1.5249826908111572, + -1.430511474609375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 445, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 3.608875420724189e-09, + 2.735760062932968e-09, + 1.8699211068451405e-09, + 1.0 + ], + "min": [ + -3.6088747545903743e-09, + -1.3387762010097504e-09, + -2.8448998712349294e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 594, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.289447784423828, + 5.801708698272705, + 0.050652503967285156 + ], + "min": [ + 2.2894296646118164, + 5.801687240600586, + 0.05063486099243164 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 620, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5482349395751953, + 0.1578584462404251, + 0, + 0.8626810312271118 + ], + "min": [ + 0.47461917996406555, + -0.11056473851203918, + -0.12299825996160507, + 0.8337114453315735 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 486, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.02951812744140625, + 2.085678815841675, + 9.5367431640625e-06 + ], + "min": [ + 0.02950763702392578, + 2.0856592655181885, + -8.58306884765625e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 296, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8846017122268677, + 0 + ], + "min": [ + -0.0597844123840332, + 1.8846017122268677, + -4.26173210144043e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.22541102766990662, + 0, + 0.001170284696854651, + 0.9835196733474731 + ], + "min": [ + 0.18070849776268005, + -0.005687756929546595, + -0.007271403446793556, + 0.9742342829704285 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 325, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.677651047706604, + 0, + 0.6039482951164246, + 0.3589504063129425 + ], + "min": [ + 0.6312532424926758, + -0.34361618757247925, + 0.5770201086997986, + 0.33191004395484924 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 253, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 684, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 323, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + 0 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 700, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.011249423027038574, + 2.2008347511291504, + 3.910064697265625e-05 + ], + "min": [ + 0.011196613311767578, + 2.2007882595062256, + -3.5762786865234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 437, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 398, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 19.023351669311523, + 0 + ], + "min": [ + -5.494803190231323e-08, + 19.023351669311523, + -3.2789830584079027e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 778, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 3.4365803003311157e-06, + 45.05037307739258, + 2.201646566390991e-06 + ], + "min": [ + -1.7881393432617188e-06, + 45.05034255981445, + -1.2665987014770508e-06 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 534, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.09870338439941406, + 2.222611904144287, + 2.9802322387695312e-05 + ], + "min": [ + 0.09868931770324707, + 2.222590446472168, + 4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 721, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6151952743530273, + 5.98781156539917, + 0 + ], + "min": [ + 0.6151564717292786, + 5.98776912689209, + -0.2521657943725586 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 420, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 9.834766387939453e-07, + 41.849334716796875, + 3.4570693969726562e-06 + ], + "min": [ + -7.003545761108398e-07, + 41.84931945800781, + -6.794929504394531e-06 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 759, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 498, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.004725456237792969, + 1.5559535026550293, + 1.811981201171875e-05 + ], + "min": [ + 0.004705905914306641, + 1.5559406280517578, + -1.4901161193847656e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 222, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + 0, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 740, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.017513589933514595, + 0.03453144058585167, + 0.054572250694036484, + 0.9989792704582214 + ], + "min": [ + -0.01294967532157898, + -0.013272514566779137, + 0.04488709196448326, + 0.9981178045272827 + ], + "name": "accessor_buffer_mixamorig:Spine2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 588, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.828077793121338, + 0 + ], + "min": [ + -0.006542205810546875, + 1.8280558586120605, + -3.0517578125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 301, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 168, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 272, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 3340, + "max": [ + 64.78005981445312, + 158.17137145996094, + 13.949725151062012 + ], + "min": [ + -64.76519775390625, + 0.9852595329284668, + -11.520842552185059 + ], + "name": "accessor_buffer_F010_Saber.003_0", + "type": "VEC3" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Head_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.134321880869038e-08, + 9.022187441587448e-09, + 2.0954757928848267e-09, + 1.0 + ], + "min": [ + -1.4646502677351236e-08, + -1.0888470569625497e-08, + -2.444721758365631e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 697, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.004740715026855469, + 1.555966854095459, + 3.218650817871094e-05 + ], + "min": [ + 0.004696190357208252, + 1.555917739868164, + -8.106231689453125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 396, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00083109550178051, + 0, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 538, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2081216275691986, + 0.0009776869555935264, + 0.042132094502449036, + 0.9792493581771851 + ], + "min": [ + 0.19852440059185028, + 0.0009399183327332139, + 0.04071655124425888, + 0.9771947264671326 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 373, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 302, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 2.157763810828328e-05 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 2.157763810828328e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHand_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.012768268585205078, + 1.381809949874878, + 6.9141387939453125e-06 + ], + "min": [ + 0.01275491714477539, + 1.3817834854125977, + -1.4781951904296875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 502, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.15645623207092285, + 0.010588050819933414, + 0.04273870959877968, + 0.9883657097816467 + ], + "min": [ + 0.14605343341827393, + 0.010204009711742401, + 0.04120168462395668, + 0.9867029786109924 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 606, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 741, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 315, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.034996457397937775, + 0, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 726, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999996423721313, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 454, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.38647565245628357, + 0, + 0, + 0.892213761806488 + ], + "min": [ + 0.34301039576530457, + -0.05170813947916031, + -0.3102066218852997, + 0.8676663637161255 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 501, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.011225700378417969, + 2.2008252143859863, + 2.9206275939941406e-05 + ], + "min": [ + 0.011208534240722656, + 2.200808048248291, + 1.2874603271484375e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 575, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Neck_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 303, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0008116317912936211, + 0, + 0.9999305605888367 + ], + "min": [ + -2.7277535536995856e-06, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 519, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.509201526641846, + -3.8089210987091064, + -0.4497396945953369 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.6226043701171875e-06, + 45.049705505371094, + 4.112720489501953e-06 + ], + "min": [ + -2.6226043701171875e-06, + 45.04966735839844, + -4.410743713378906e-06 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 332, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.916641116142273, + 0 + ], + "min": [ + -0.02496713399887085, + 1.916641116142273, + -1.5547877410426736e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 557, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000003576278687, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 738, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 746, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -3.3207474103846835e-08, + -8.237570909841452e-06, + -2.9082002583891153e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 513, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 5.181254863739014, + 0 + ], + "min": [ + -2.075829029083252, + 5.181237697601318, + -0.1566934585571289 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.008645057678222656, + 2.2196366786956787, + 6.9141387939453125e-06 + ], + "min": [ + 0.008638381958007812, + 2.219599485397339, + -2.384185791015625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 577, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.505257725715637e-07, + 7.450580596923828e-09, + 2.9802322387695312e-08, + 1.0 + ], + "min": [ + 2.0605511963367462e-07, + -2.9802322387695312e-08, + -3.3527612686157227e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.0065135955810546875, + 1.6352453231811523, + 1.3828277587890625e-05 + ], + "min": [ + 0.006496429443359375, + 1.6352167129516602, + -6.67572021484375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000004768371582, + 1.0000001192092896, + 1.0000003576278687 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 382, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 300, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00034277912345714867, + 0, + 0.9999790191650391 + ], + "min": [ + -1.0370887366661918e-06, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.3504176443746019e-08, + 0, + 0, + 1.0 + ], + "min": [ + -4.470348358154297e-08, + -2.4959444999694824e-07, + -1.7508865823856468e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 434, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 681, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 457, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.11902736127376556, + 0, + 0, + 0.9935969710350037 + ], + "min": [ + 0.10917888581752777, + -0.002222043927758932, + -0.030499938875436783, + 0.992419958114624 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 642, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.018849225714802742, + 0, + 0.022146498784422874, + 0.9970361590385437 + ], + "min": [ + -0.04054472595453262, + -0.11766815930604935, + -0.012780744582414627, + 0.9927487969398499 + ], + "name": "accessor_buffer_mixamorig:RightHand_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 548, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 232, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 318, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 750, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Hips_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 662, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.1638278067111969, + 0.17582638561725616, + 0.22936508059501648, + 0.9995896220207214 + ], + "min": [ + 0.02268115244805813, + 0.0029334318824112415, + -0.08364342153072357, + 0.9433320760726929 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 747, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5121, + "count": 3340, + "max": [ + 51, + 51, + 51, + 51 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_0", + "type": "VEC4" + }, + { + "bufferView": 694, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.8846323490142822, + 2.86102294921875e-05 + ], + "min": [ + -0.05980563163757324, + 1.8845878839492798, + -1.0967254638671875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 592, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4602220952510834, + 0.06262792646884918, + 0, + 0.9546638131141663 + ], + "min": [ + 0.29038870334625244, + 0.009192639961838722, + -0.02716829627752304, + 0.8873404264450073 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 632, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.6763806343078613e-07, + -1.8812716007232666e-07, + -1.8998983364326705e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 515, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.024185506626963615, + 0, + 0.0007755194674246013, + 0.9957062602043152 + ], + "min": [ + -0.03668700531125069, + -0.10086517035961151, + -0.07723056524991989, + 0.9923696517944336 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 205, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 280, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 228, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.7445827893425303e-07, + 0, + 3.6372512113302946e-08, + 1.0 + ], + "min": [ + 1.7445827893425303e-07, + -6.26357206101602e-08, + 3.6372512113302946e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 718, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.509203910827637, + -3.808932065963745, + -0.44974279403686523 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 173, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 7.823111047855491e-08, + 3.166496753692627e-08, + 6.984919309616089e-08, + 1.0 + ], + "min": [ + 4.0046877813892934e-08, + -3.166497108963995e-08, + -1.164153662358558e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 544, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4968090355396271, + 0, + 0.027255013585090637, + 0.9540429711341858 + ], + "min": [ + 0.29268041253089905, + -0.06153401732444763, + 0.013744726777076721, + 0.8674964904785156 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 368, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.7723331451416, + 2.205953933298588e-06 + ], + "min": [ + -1.98512316273991e-06, + 22.7723331451416, + 2.205953933298588e-06 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 719, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.06762795150279999, + 0.08844052255153656, + 0, + 0.12963023781776428 + ], + "min": [ + 0.006446733605116606, + -0.04662296921014786, + -0.9952765703201294, + 0.08730243891477585 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 238, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1.0 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 404, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.9666666666666666 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Walking_time_0", + "type": "SCALAR" + }, + { + "bufferView": 418, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.626791775226593, + 0, + 0.6183279156684875, + 0.4474252462387085 + ], + "min": [ + 0.5874829888343811, + -0.3742434084415436, + 0.5201908946037292, + 0.36397284269332886 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 690, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 281, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.006504923105239868, + 1.635219693183899, + 0 + ], + "min": [ + 0.006504923105239868, + 1.635219693183899, + -2.377049531787634e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 442, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -2.7939677238464355e-07, + -9.872020001466808e-08, + -1.862645149230957e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 537, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.029908180236816406, + 2.2504069805145264, + 1.239776611328125e-05 + ], + "min": [ + 0.029885292053222656, + 2.250382661819458, + -5.245208740234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2060239613056183, + 0, + 0, + 0.9903005957603455 + ], + "min": [ + 0.13211484253406525, + -0.008265145123004913, + -0.05707421153783798, + 0.9768461585044861 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 3, + "byteOffset": 24, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9074609279632568, + 0.9870719909667969 + ], + "min": [ + 0.0168008916079998, + 0.018634021282196045 + ], + "name": "accessor_buffer_F010_Saber.001_2", + "type": "VEC2" + }, + { + "bufferView": 328, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 776, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.5486224330961704e-07, + 1.3038516932795119e-08, + 2.60770320892334e-08, + 1.0 + ], + "min": [ + 1.8465289031155407e-07, + -4.0978193283081055e-08, + -2.7939675462107516e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0001230239868164, + 1.0000057220458984, + 1.0000028610229492 + ], + "min": [ + 1.0001170635223389, + 0.9999999403953552, + 1.0000015497207642 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 350, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 7.425900548696518e-05, + 98.80355834960938, + 0.4175964593887329 + ], + "min": [ + 7.425900548696518e-05, + 98.80355834960938, + 0.4175964593887329 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 321, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.167778464150615e-05, + 0, + 0.9999808073043823, + 0 + ], + "min": [ + 1.167778464150615e-05, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 522, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.6151876449584961, + 5.987796783447266, + 0 + ], + "min": [ + 0.6151700019836426, + 5.98777961730957, + -0.2521541118621826 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 666, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 555, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.016335487365722656, + 2.0911879539489746, + 9.298324584960938e-06 + ], + "min": [ + 0.016317367553710938, + 2.091172933578491, + -7.152557373046875e-07 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 275, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-07, + 7.483717918395996, + 0 + ], + "min": [ + 8.642673492431641e-07, + 7.483717918395996, + -6.8247318267822266e-06 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 775, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 2.0023679733276367, + 2.5272369384765625e-05 + ], + "min": [ + -0.03692293167114258, + 2.0023064613342285, + -1.9550323486328125e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 616, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 8.988450050354004, + 0 + ], + "min": [ + -3.513526678085327, + 8.98840618133545, + -0.11456191539764404 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 760, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.86102294921875e-06, + 45.04969787597656, + 5.7220458984375e-06 + ], + "min": [ + -3.337860107421875e-06, + 45.04966735839844, + -5.7220458984375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 424, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.04038854315876961, + 0, + 0, + 0.9990822076797485 + ], + "min": [ + 0.0356808640062809, + -0.004309265408664942, + -0.024050123989582062, + 0.9988852739334106 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 646, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 4.32133674621582e-06, + 4.706448078155518, + 5.960464477539062e-07 + ], + "min": [ + -3.5315752029418945e-06, + 4.706440448760986, + -5.364418029785156e-07 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 590, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.15539774298667908, + 0, + 0, + 0.9938856959342957 + ], + "min": [ + 0.10679031163454056, + -0.0008674515411257744, + -0.03775210306048393, + 0.9871299862861633 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 673, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.3828277587890625e-05, + 7.483733177185059, + 1.722574234008789e-05 + ], + "min": [ + -1.33514404296875e-05, + 7.483705520629883, + -1.4662742614746094e-05 + ], + "name": "accessor_buffer_mixamorig:RightArm_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 476, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightArm_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 378, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.252031947591604e-07, + 0, + 2.586603153886813e-09, + 1.0 + ], + "min": [ + 2.252031947591604e-07, + -1.896821366642598e-08, + 2.586603153886813e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.18894062936306, + 0.045000359416007996, + 0.05795791372656822, + 0.9932901263237 + ], + "min": [ + 0.09659142792224884, + 0.027609357610344887, + 0.04495842382311821, + 0.9798877835273743 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000003576278687, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 772, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.8905172348022461, + 5.9824113845825195, + 0 + ], + "min": [ + 0.8904857635498047, + 5.9823689460754395, + -0.2430715560913086 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 779, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0.08230714499950409, + 0.016647951677441597, + 0.9924415946006775 + ], + "min": [ + -0.1816161423921585, + 0.0447072871029377, + -0.03208081051707268, + 0.979972243309021 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 562, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0.07726967334747314, + 0.08277056366205215, + 0.9840719699859619 + ], + "min": [ + -0.5687631368637085, + -0.03817012906074524, + -0.0026246230117976665, + 0.8189079761505127 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 644, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.048909308882685e-08, + 2.7939679014821195e-08, + 1.4901161193847656e-08, + 1.0 + ], + "min": [ + -2.9103830456733704e-08, + -3.166497108963995e-08, + -1.4901161193847656e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 326, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightArm_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 782, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.024191146716475487, + 0, + 0, + 0.9904854893684387 + ], + "min": [ + 0.00664842315018177, + -0.11843197792768478, + -0.25926902890205383, + 0.959041178226471 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 290, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2824809551239014, + 4.63516335003078e-06 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 4.63516335003078e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 780, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999996423721313, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.16385410726070404, + 0, + 0, + 0.99859619140625 + ], + "min": [ + 0.04614847153425217, + -0.00834368821233511, + -0.045861344784498215, + 0.9853826761245728 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 479, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 309, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + 0, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 679, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.006519317626953125, + 1.6352565288543701, + 1.996755599975586e-05 + ], + "min": [ + 0.006487071514129639, + 1.6352167129516602, + -1.519918441772461e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 692, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.04787973687052727, + 0.0847688764333725, + 0, + 0.9978355765342712 + ], + "min": [ + -0.0020693850237876177, + 0.005241064820438623, + -0.6058869361877441, + 0.7895712852478027 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 552, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.015065670013427734, + 2.0928683280944824, + 2.2411346435546875e-05 + ], + "min": [ + 0.015050888061523438, + 2.092845916748047, + 1.049041748046875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 2.1800715923309326, + 0 + ], + "min": [ + -0.017891883850097656, + 2.1800432205200195, + -1.1444091796875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 263, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 1.0579824447631836e-06 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 1.0579824447631836e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 394, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "min": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 291, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-07, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 736, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.02992856502532959, + 2.2504234313964844, + 2.956390380859375e-05 + ], + "min": [ + 0.029875516891479492, + 2.2503714561462402, + -2.4318695068359375e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 523, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.35908982157707214, + 0.014681422151625156, + 0.06364209949970245, + 0.9881294369697571 + ], + "min": [ + 0.14934328198432922, + -0.005565935280174017, + 0.020810263231396675, + 0.9328184127807617 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 791, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.2976076602935791, + 0.061651043593883514, + 0, + 0.9525063037872314 + ], + "min": [ + 0.2976076006889343, + 0.06165102496743202, + -0.018990768119692802, + 0.9525062441825867 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 409, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.06098603457212448, + 0, + 0.0904063805937767, + 0.9924531579017639 + ], + "min": [ + -0.17131856083869934, + -0.3111955523490906, + -0.2263297140598297, + 0.9269754886627197 + ], + "name": "accessor_buffer_mixamorig:RightHand_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 260, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1800546646118164, + 0 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -5.649722879752517e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 569, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 443, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 221, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 41.84932327270508, + 0 + ], + "min": [ + -1.1807060218416154e-07, + 41.84932327270508, + -2.8172507882118225e-07 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 455, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 451, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.096707284450531, + 0.3266020715236664, + 0.9956504106521606, + 0.11079581826925278 + ], + "min": [ + -0.10106376558542252, + -0.17860715091228485, + -0.9987594485282898, + -0.00430084066465497 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.0987086296081543, + 2.22261118888855, + 2.7179718017578125e-05 + ], + "min": [ + 0.09868621826171875, + 2.2225847244262695, + 9.059906005859375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 271, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999996423721313, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.009778380393981934, + 1.9066662788391113, + 2.3365020751953125e-05 + ], + "min": [ + 0.009773075580596924, + 1.9066277742385864, + 1.4126300811767578e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 543, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.6689300537109375e-06, + 12.089052200317383, + 2.2351741790771484e-06 + ], + "min": [ + -4.507601261138916e-07, + 12.089044570922852, + -7.450580596923828e-06 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 783, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.19080395996570587, + 0.00040480238385498524, + 0, + 0.9941403269767761 + ], + "min": [ + 0.10591406375169754, + 0.00023922353284433484, + -0.03656462952494621, + 0.9809468388557434 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 743, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3138423264026642, + 0, + 0.01884089969098568, + 0.9543662667274475 + ], + "min": [ + 0.29159149527549744, + -0.061680588871240616, + 0.01815459132194519, + 0.947487473487854 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 737, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.29591068625450134, + 0.001323158387094736, + 0.055026814341545105, + 0.9999377131462097 + ], + "min": [ + -0.02861855737864971, + 3.734216807060875e-05, + 0.006827713456004858, + 0.953628420829773 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 560, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 777, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 689, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4894944131374359, + 0, + 0, + 0.9996159076690674 + ], + "min": [ + 0.024158209562301636, + -0.00331420311704278, + -0.08468065410852432, + 0.8678787350654602 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 667, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 5.933866500854492, + 0 + ], + "min": [ + -0.620999813079834, + 5.933826923370361, + -0.18958759307861328 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.14715535938739777, + 0.0007554469048045576, + 0.00996183231472969, + 0.9975954294204712 + ], + "min": [ + 0.06858452409505844, + 0.00036496733082458377, + 0.004551884718239307, + 0.989102840423584 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 370, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 5.933867454528809, + 0 + ], + "min": [ + -0.6209878921508789, + 5.933835983276367, + -0.1895732879638672 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 5.364418029785156e-07, + 4.71254825592041, + 3.129243850708008e-07 + ], + "min": [ + -5.662441253662109e-07, + 4.71254301071167, + -2.682209014892578e-07 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 472, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.12839406728744507, + 0.09395399689674377, + 0.057377591729164124, + 0.9990851283073425 + ], + "min": [ + -0.056537214666604996, + 0.003749663243070245, + 0.03209517151117325, + 0.9864088296890259 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 341, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + 0 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-07 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 675, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightArm_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 461, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 356, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 1.1799194908235222e-05 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 1.1799194908235222e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 316, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 508, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.7147021293640137, + 0.3793763518333435, + 0, + 0.4451804459095001 + ], + "min": [ + 0.660038948059082, + 0.3444429039955139, + -0.5530652403831482, + 0.3377883732318878 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 549, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 5.547571182250977, + 96.82164001464844, + 4.587433815002441 + ], + "min": [ + -0.10560455918312073, + 92.83765411376953, + 0.2603561282157898 + ], + "name": "accessor_buffer_mixamorig:Hips_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 179, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.5611367959754716e-07, + 2.0489096641540527e-08, + 2.0489100194254206e-08, + 1.0 + ], + "min": [ + 2.0104928921682585e-07, + -4.470348358154297e-08, + -2.2351741790771484e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 769, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.5352156162261963, + 2.810359001159668e-05 + ], + "min": [ + -0.18292176723480225, + 1.53516685962677, + -3.039836883544922e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 397, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.000000238418579, + 1.0 + ], + "min": [ + 1.0, + 1.000000238418579, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 671, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4213804304599762, + 0.02211507223546505, + 0.17220981419086456, + 0.9991625547409058 + ], + "min": [ + -0.13027016818523407, + -0.033354394137859344, + -0.029934976249933243, + 0.9061493873596191 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.19164203107357025, + 0.010969349183142185, + 0.06582394242286682, + 0.9906309247016907 + ], + "min": [ + 0.11946962028741837, + 0.006721641402691603, + 0.054351724684238434, + 0.9798974394798279 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 535, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0.11415008455514908, + 0.9927259087562561 + ], + "min": [ + -0.08025413006544113, + -0.1162383183836937, + 0.02324865572154522, + 0.989997386932373 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.5135252475738525, + 8.987110137939453, + 0 + ], + "min": [ + 3.5135180950164795, + 8.98706340789795, + -0.09784141182899475 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 359, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-07, + 41.85009002685547, + 0 + ], + "min": [ + 2.655433490872383e-07, + 41.85009002685547, + -1.4621764421463013e-07 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 348, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -3.306195139884949e-08, + -8.229748345911503e-06, + -2.3865142750878476e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 505, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0.01913636364042759, + 0.03167296200990677, + 0.9999430179595947 + ], + "min": [ + -0.03925073891878128, + -0.025652628391981125, + -0.011231466196477413, + 0.9986997246742249 + ], + "name": "accessor_buffer_mixamorig:Spine_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 242, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9040616750717163, + 0 + ], + "min": [ + -0.044958412647247314, + 1.9040616750717163, + -1.2791395420208573e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 614, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.16486911475658417, + 0, + 0.032274361699819565, + 0.9993045926094055 + ], + "min": [ + -0.031893547624349594, + -0.06064178794622421, + -0.1720692217350006, + 0.9693049192428589 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 177, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000004768371582, + 1.0000004768371582 + ], + "min": [ + 0.9999997615814209, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 329, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + 0 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-07 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 202, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.525007963180542, + 1.52587890625e-05 + ], + "min": [ + -0.006236076354980469, + 1.5249779224395752, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 611, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3231901526451111, + 0.31904318928718567, + 0.16974300146102905, + 0.9974219799041748 + ], + "min": [ + -0.08003358542919159, + -0.2763500213623047, + -0.25712525844573975, + 0.8766242861747742 + ], + "name": "accessor_buffer_mixamorig:Head_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 550, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.02222433127462864, + 0.08787377923727036, + 0.05810628458857536, + 0.9997369050979614 + ], + "min": [ + -0.006848346907645464, + -0.03860977664589882, + -0.04494691640138626, + 0.995258092880249 + ], + "name": "accessor_buffer_mixamorig:Hips_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.004575527738779783, + 0.020496925339102745, + 0.2274504005908966, + 0.9786607623100281 + ], + "min": [ + 0.0014477120712399483, + 0.019821282476186752, + 0.20445318520069122, + 0.973577082157135 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 528, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.043081283569336e-06, + 8.022491455078125, + 1.6242265701293945e-06 + ], + "min": [ + -1.6540288925170898e-06, + 8.022468566894531, + -6.332993507385254e-07 + ], + "name": "accessor_buffer_mixamorig:Spine1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 286, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 647, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 8.661298522838479e-08, + 8.064322173595428e-06, + 1.0302755093505311e-08, + 1.0 + ], + "min": [ + 7.916241173688832e-08, + 8.052214980125427e-06, + -3.655441105365753e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 459, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 2.1800661087036133, + 0 + ], + "min": [ + -0.01789379119873047, + 2.1800498962402344, + -1.430511474609375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 488, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0, + 0.0565202496945858, + 0.9984039664268494 + ], + "min": [ + -0.06276769191026688, + -0.1262819766998291, + -0.07716826349496841, + 0.9893531799316406 + ], + "name": "accessor_buffer_mixamorig:Hips_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.29608154296875, + 0, + 0.01911911740899086, + 0.9570359587669373 + ], + "min": [ + 0.28241658210754395, + -0.06943853199481964, + 0.016336647793650627, + 0.9526420831680298 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 317, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 7.4837236404418945, + 0 + ], + "min": [ + -5.960464477539063e-08, + 7.4837236404418945, + -1.7881393432617188e-06 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 706, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 3.5135250091552734, + 8.98710823059082, + 0 + ], + "min": [ + 3.513516664505005, + 8.987070083618164, + -0.09784162044525146 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 180, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 297, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.656612517806025e-08, + 0, + 0, + 1.0 + ], + "min": [ + 4.656612517806025e-08, + -1.9324940581100236e-07, + -4.982575063650074e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 16.666666666666654 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Idle_time_0", + "type": "SCALAR" + }, + { + "bufferView": 194, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.298214852809906, + 0.06225595995783806, + 0, + 0.9538479447364807 + ], + "min": [ + 0.29314255714416504, + 0.06156858056783676, + -0.019128093495965004, + 0.9523220658302307 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 186, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 403, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 187, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.0033597946166992188, + 1.90627121925354, + 5.7220458984375e-06 + ], + "min": [ + 0.0033435821533203125, + 1.9062323570251465, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 485, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 337, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1.0, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 703, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.6838312149047852e-06, + 6.854518413543701, + 0 + ], + "min": [ + -2.3543834686279297e-06, + 6.854480266571045, + -0.5486010909080505 + ], + "name": "accessor_buffer_mixamorig:Spine_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 709, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.008663773536682129, + 2.2196600437164307, + 1.9431114196777344e-05 + ], + "min": [ + 0.00862574577331543, + 2.219595193862915, + -1.811981201171875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 240, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.20922753821651e-08, + 0, + 1.4510078472085297e-08, + 1.0 + ], + "min": [ + 5.20922753821651e-08, + -1.1215498751937503e-08, + 1.4510078472085297e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 182, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0.05503339320421219, + 0, + 0.9821439385414124 + ], + "min": [ + -0.3205168843269348, + -0.06549748033285141, + -0.03350221365690231, + 0.9447567462921143 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 643, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 6.854534149169922e-06, + 20.85727882385254, + 0.5804646611213684 + ], + "min": [ + -8.344650268554688e-06, + 20.85722541809082, + 0.5804414749145508 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 425, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6104982495307922, + 0, + 0.048414260149002075, + 0.8288843035697937 + ], + "min": [ + 0.5526801943778992, + -0.09555656462907791, + -0.005197371821850538, + 0.7873787879943848 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 468, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 5.933863639831543, + 0 + ], + "min": [ + -0.6209893226623535, + 5.933838367462158, + -0.18957901000976562 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 722, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.423574298620224, + 0.019656144082546234, + 0.09645579755306244, + 0.9999634027481079 + ], + "min": [ + -0.012067945674061775, + -0.01332169957458973, + -0.07843596488237381, + 0.9035295248031616 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 406, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.30395814776420593, + 0.002761955140158534, + 0.05785207450389862, + 0.9542210698127747 + ], + "min": [ + 0.29374009370803833, + 0.0026750490069389343, + 0.056320395320653915, + 0.9509233236312866 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 576, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 2.0023531913757324, + 6.67572021484375e-06 + ], + "min": [ + -0.03691673278808594, + 2.002330780029297, + -9.5367431640625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.3974647521972656e-06, + 7.483736515045166, + 2.2411346435546875e-05 + ], + "min": [ + -5.125999450683594e-06, + 7.483705043792725, + -1.800060272216797e-05 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 727, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.9073486328125e-06, + 8.022497177124023, + 4.6193599700927734e-06 + ], + "min": [ + -2.0265579223632812e-06, + 8.022464752197266, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:Spine1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 330, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-08, + 9.691603259937703e-14, + 0, + 1.0 + ], + "min": [ + 1.30385160446167e-08, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.32983627915382385, + 0.05425029620528221, + 0.20717312395572662, + 0.9365647435188293 + ], + "min": [ + 0.28015825152397156, + 0.04390309751033783, + 0.20597940683364868, + 0.9194262623786926 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 435, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.009784698486328125, + 1.9066550731658936, + 2.3096799850463867e-05 + ], + "min": [ + 0.009769439697265625, + 1.906639575958252, + 1.3828277587890625e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 676, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.4313724040985107, + 1.9489097595214844, + 1.3737554550170898 + ], + "min": [ + 1.4313232898712158, + 1.9488589763641357, + 1.3737177848815918 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 308, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + 0 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 261, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-07, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 584, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 774, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 657, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 483, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.9782544374465942, + 0 + ], + "min": [ + -0.004059791564941406, + 1.9782342910766602, + -4.1484832763671875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 422, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 585, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.0033588409423828125, + 1.9062575101852417, + 8.58306884765625e-06 + ], + "min": [ + 0.0033407211303710938, + 1.9062409400939941, + -9.5367431640625e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 755, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.19335709512233734, + 0.011140700429677963, + 0.03712765872478485, + 0.9999834895133972 + ], + "min": [ + -0.2717040777206421, + -0.007787367329001427, + -0.041114091873168945, + 0.9614707231521606 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 364, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1.0 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 395, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 795, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6119635105133057, + 0.06298180669546127, + 0.04404832050204277, + 0.8257962465286255 + ], + "min": [ + 0.5611494779586792, + 0.006214461755007505, + -0.038709644228219986, + 0.7874863147735596 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 680, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.909211277961731e-08, + 0, + 0, + 1.0 + ], + "min": [ + -4.0978189730367376e-08, + -2.3550818184503441e-07, + -1.8067660789711226e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 790, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.1008232831954956e-06, + 12.033417701721191, + 4.842877388000488e-06 + ], + "min": [ + -1.428648829460144e-06, + 12.033411979675293, + 3.0994415283203125e-06 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 514, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.5699740052223206, + 0.11541295796632767, + 0.29281482100486755, + 0.8423991799354553 + ], + "min": [ + 0.4477769434452057, + 0.06685309112071991, + 0.2629931569099426, + 0.7695973515510559 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 446, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 685, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.029534339904785156, + 2.085692882537842, + 1.4781951904296875e-05 + ], + "min": [ + 0.02949535846710205, + 2.0856471061706543, + -2.384185791015625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 599, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 369, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-07, + 0, + 4.313407657718926e-07, + 1.0 + ], + "min": [ + 4.818217576030293e-07, + -0.00015852972865104675, + 4.313407657718926e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 428, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -3.41096892952919e-08, + -8.237695510615595e-06, + -4.103640804942188e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.1633726954460144, + 0, + 0.02707192488014698, + 0.9927774667739868 + ], + "min": [ + 0.1185440719127655, + -0.0017205171752721071, + 0.01841292344033718, + 0.9861913919448853 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 392, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.033415794372559, + 3.5762786865234375e-07 + ], + "min": [ + -6.239861249923706e-07, + 12.033415794372559, + 3.5762786865234375e-07 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.31094667315483093, + 0.02594979852437973, + 0.11563578993082047, + 0.9593018293380737 + ], + "min": [ + 0.25704312324523926, + 0.01731044426560402, + 0.11229659616947174, + 0.9434127807617188 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 258, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.373970634536818e-05, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-07, + 5.373970634536818e-05, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 336, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.969544170307927e-05, + 0.0011240799212828279, + 0, + 0.9999988079071045 + ], + "min": [ + 4.969544170307927e-05, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.9782629013061523, + 0 + ], + "min": [ + -0.004058837890625, + 1.978226661682129, + -4.3392181396484375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 192, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 229, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "min": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 345, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + 0, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 259, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 199, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 7.62939453125e-06, + 19.023361206054688, + 7.62939453125e-06 + ], + "min": [ + -7.152557373046875e-06, + 19.023324966430664, + -9.059906005859375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999995827674866, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 207, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999955296516418 + ], + "min": [ + -1.3217339756010915e-06, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 294, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.8012506188824773e-06, + 0.00015944617916829884, + 0, + 1.0 + ], + "min": [ + 1.8012506188824773e-06, + 0.00015944617916829884, + -1.3720271851980215e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 602, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 631, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.021970748901367188, + 1.761944055557251, + 1.7642974853515625e-05 + ], + "min": [ + 0.02191638946533203, + 1.7619071006774902, + -1.5735626220703125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 612, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Head_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 678, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 184, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 2.151778221130371, + 0 + ], + "min": [ + -0.018172740936279297, + 2.1517505645751953, + -2.765655517578125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 283, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 295, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1.0, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 196, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.2894468307495117, + 5.8017096519470215, + 0.05065774917602539 + ], + "min": [ + 2.289430618286133, + 5.801682472229004, + 0.05063676834106445 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 206, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + 0 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -5.896072252653539e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 605, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4042389690876007, + 0.0036144228652119637, + 0.07280395925045013, + 0.999915361404419 + ], + "min": [ + -0.02949456125497818, + -9.553247218718752e-05, + 0.007105657365173101, + 0.9117441773414612 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 744, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999996423721313, + 0.9999996423721313, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 686, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 8.009375562778587e-08, + 3.72529100900465e-08, + 1.0 + ], + "min": [ + -8.614735236278648e-08, + 1.862645504502325e-08, + -1.3504178220102858e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 574, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.403611958026886, + 0, + 0, + 0.9255605340003967 + ], + "min": [ + 0.3412705361843109, + -0.03438929468393326, + -0.1728171706199646, + 0.8978229761123657 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 624, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 789, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 629, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.11511718481779099, + 0.13253821432590485, + 0.012231080792844296, + 0.999814510345459 + ], + "min": [ + -0.14733216166496277, + -0.1341867446899414, + -0.04164697229862213, + 0.9861831068992615 + ], + "name": "accessor_buffer_mixamorig:Neck_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 183, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999996423721313, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 701, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.17223387956619263, + 0.011169478297233582, + 0.04506560415029526, + 0.9998048543930054 + ], + "min": [ + -0.19014349579811096, + -0.0024950967635959387, + -0.009645001962780952, + 0.9817057847976685 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 475, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4395799934864044, + 0, + 0.33548006415367126, + 0.9115597009658813 + ], + "min": [ + 0.39102065563201904, + -0.10377006977796555, + -0.08593812584877014, + 0.8435415625572205 + ], + "name": "accessor_buffer_mixamorig:RightArm_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 765, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 579, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 9.238719940185547e-07, + 45.05036926269531, + 5.443580448627472e-06 + ], + "min": [ + -6.603077054023743e-07, + 45.05034255981445, + -6.6943466663360596e-06 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 683, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.24000465869903564, + 0, + 0, + 0.9986445903778076 + ], + "min": [ + 0.04668762907385826, + -0.005174525547772646, + -0.0569353811442852, + 0.9690868854522705 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 210, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + 0, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 383, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1517670154571533, + 0 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -3.4263357520103455e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 638, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 7.729977369308472e-08, + 2.0489098417897367e-08, + 3.725290298461914e-08, + 1.0 + ], + "min": [ + 2.2351738238057806e-08, + -2.8871003365793513e-08, + -3.620516508817673e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 338, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 6.557500455528498e-06 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 6.557500455528498e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 285, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -5.368752681533806e-06, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 200, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.12322575598955154, + 0.1867716759443283, + 0.05322803556919098, + 0.990211009979248 + ], + "min": [ + 0.04314654693007469, + 0.12217019498348236, + 0.010650157928466797, + 0.9752040505409241 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999996423721313, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 172, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.5352120399475098, + 6.9141387939453125e-06 + ], + "min": [ + -0.1829090118408203, + 1.5351808071136475, + -6.67572021484375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.07173003256320953, + 0.010370110161602497, + 0.03610963001847267, + 0.9996916651725769 + ], + "min": [ + -0.012426615692675114, + 0.006362239830195904, + 0.022153940051794052, + 0.996716320514679 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 650, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0, + 0.13251253962516785 + ], + "min": [ + -0.13483065366744995, + -0.1585140824317932, + -0.9827479720115662, + 0.046919748187065125 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 567, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.198883056640625e-06, + 22.7723445892334, + 5.476176738739014e-06 + ], + "min": [ + -3.2186508178710938e-06, + 22.772321701049805, + -1.0371208190917969e-05 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 8.988447189331055, + 0 + ], + "min": [ + -3.5135245323181152, + 8.988401412963867, + -0.11455890536308289 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 578, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 176, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.27635306119918823, + 0, + 0, + 0.9769632816314697 + ], + "min": [ + 0.1943865418434143, + -0.018186990171670914, + -0.11150404065847397, + 0.9543925523757935 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 305, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.854499816894531, + 0 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 201, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 533, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0, + 0.9999996423721313, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 243, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -2.464207682351116e-07, + -8.914983595786907e-08, + -1.517519194749184e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 353, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + 0 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -1.477246405556798e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 6.091213226318359, + 0.0932474136352539 + ], + "min": [ + -2.381855010986328, + 6.091182231903076, + 0.0932321548461914 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 663, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 570, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.535202980041504, + 1.430511474609375e-05 + ], + "min": [ + -0.18291163444519043, + 1.5351879596710205, + -4.0531158447265625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 257, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0025572776794434, + 0 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -8.842733222991228e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 691, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.239776611328125e-05, + 22.770919799804688, + 1.9550323486328125e-05 + ], + "min": [ + -1.2159347534179688e-05, + 22.770877838134766, + -1.621246337890625e-05 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 499, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.28691938519477844, + 0.02217779867351055, + 0.06498178839683533, + 0.9621247053146362 + ], + "min": [ + 0.26505526900291443, + 0.020909439772367477, + 0.0602051205933094, + 0.9554908871650696 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 239, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.012762725353240967, + 1.3817871809005737, + 0 + ], + "min": [ + 0.012762725353240967, + 1.3817871809005737, + -5.348862032406032e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 542, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Spine2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 381, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0003684632829390466, + 0, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.205371856689453e-06, + 4.308732509613037, + 0.11991506814956665 + ], + "min": [ + -1.6689300537109375e-06, + 4.3086652755737305, + 0.11990783363580704 + ], + "name": "accessor_buffer_mixamorig:Head_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 449, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 216, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.565229366766289e-05, + 0, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-07, + 5.565229366766289e-05, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 400, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1.0, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.09014429152011871, + 0, + 0.02025716006755829, + 0.9980320334434509 + ], + "min": [ + 0.060823455452919006, + -0.00028050708351656795, + 0.015248601324856281, + 0.9957227110862732 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 788, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6572937369346619, + 0, + 0, + 0.9911558628082275 + ], + "min": [ + 0.12948985397815704, + -0.003881856333464384, + -0.14215269684791565, + 0.7400963306427002 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 471, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 6.091205596923828, + 0.09325003623962402 + ], + "min": [ + -2.381855010986328, + 6.091188907623291, + 0.09322643280029297 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 339, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999953508377075 + ], + "min": [ + -1.9045912722504e-06, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 688, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 2.2825024127960205, + 7.4356794357299805e-06 + ], + "min": [ + -0.018581271171569824, + 2.2824742794036865, + -3.731250762939453e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 430, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.01448402926325798, + 0.006024296395480633, + 0, + 0.9998802542686462 + ], + "min": [ + -0.008535980246961117, + -0.011333505623042583, + -0.030329447239637375, + 0.9995340704917908 + ], + "name": "accessor_buffer_mixamorig:Neck_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 391, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1.0, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 372, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.725291364276018e-08, + 0, + 3.259629011154175e-08, + 1.0 + ], + "min": [ + 3.725291364276018e-08, + -5.58793766813892e-09, + 3.259629011154175e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.08359970152378082, + 0.10933090001344681, + 0.05882913991808891, + 0.9923466444015503 + ], + "min": [ + 0.03577506169676781, + 0.10840625315904617, + 0.04500821605324745, + 0.988835871219635 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 470, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 698, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.26399752497673035, + 0.02084808424115181, + 0.05997397378087044, + 0.9999838471412659 + ], + "min": [ + -0.27136582136154175, + -0.011080027557909489, + -0.057347945868968964, + 0.9607023596763611 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 651, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000117301940918, + 1.0000107288360596, + 1.0000113248825073 + ], + "min": [ + 1.0001041889190674, + 1.0000027418136597, + 1.0000051259994507 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 735, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999995827674866, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -2.7194613494430087e-07, + -1.2107190627830278e-07, + -1.7136335372924805e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 374, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + 0 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 460, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.12065981328487396, + 0.0003798922407440841, + 0, + 0.9933441281318665 + ], + "min": [ + 0.1115017756819725, + 0.00035250571090728045, + -0.030522560700774193, + 0.9922245144844055 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 246, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.80437906032391e-23, + 0, + 1.0 + ], + "min": [ + -8.673616862896153e-19, + 6.80437906032391e-23, + -1.8189894035458565e-12, + 1.0 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 402, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.9077392607869115e-06, + 0, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 1.9077392607869115e-06, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.9371509552001953e-06, + 8.022503852844238, + 5.27501106262207e-06 + ], + "min": [ + -1.7881393432617188e-06, + 8.022464752197266, + -5.6140124797821045e-06 + ], + "name": "accessor_buffer_mixamorig:Spine1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 625, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.4579181671142578, + 4.100799560546875e-05 + ], + "min": [ + -0.014514923095703125, + 1.4578819274902344, + -1.9788742065429688e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 244, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 274, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 607, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.33514404296875e-05, + 19.02716827392578, + 1.4781951904296875e-05 + ], + "min": [ + -1.4781951904296875e-05, + 19.02712059020996, + -1.800060272216797e-05 + ], + "name": "accessor_buffer_mixamorig:RightHand_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 6.509203910827637, + 0, + 0 + ], + "min": [ + 6.509197235107422, + -3.808927536010742, + -0.31935685873031616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 204, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 496, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.798653373607522e-08, + 0, + 0, + 1.0 + ], + "min": [ + 2.8405336749415255e-08, + -1.9883732704784052e-07, + -1.0407528350242501e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 568, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.04008694738149643, + 0.004120196681469679, + 0.5689954161643982, + 0.9706199169158936 + ], + "min": [ + 0.012065121904015541, + 0.0014987472677603364, + 0.24031054973602295, + 0.8213527202606201 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 344, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.089044570922852, + 1.7881393432617188e-07 + ], + "min": [ + -4.116445779800415e-07, + 12.089044570922852, + 1.7881393432617188e-07 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 24, + "componentType": 5126, + "count": 3340, + "max": [ + 0.9826270341873169, + 0.9952785298228264 + ], + "min": [ + 0.004950257949531078, + 0.007562220096588135 + ], + "name": "accessor_buffer_F010_Saber.003_2", + "type": "VEC2" + }, + { + "bufferView": 753, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 756, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 220, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.6950073700172652e-07, + -1.7136338215095748e-07, + -1.709413481876254e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.8726636171340942, + 1.342259407043457 + ], + "min": [ + -1.3880643844604492, + 1.8726303577423096, + 1.3422412872314453 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.011223793029785156, + 2.20082950592041, + 2.5272369384765625e-05 + ], + "min": [ + 0.011213302612304688, + 2.200793743133545, + 1.4781951904296875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 635, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.51567542552948, + 0.004747312981635332, + 0.1165333017706871, + 0.9999711513519287 + ], + "min": [ + -0.01976255513727665, + -1.4837012713542208e-05, + -0.0011251388350501657, + 0.848808765411377 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 209, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-07, + 19.02713966369629, + 5.19820605404675e-06 + ], + "min": [ + 6.116943040979095e-07, + 19.02713966369629, + 5.19820605404675e-06 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 695, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 7.450580596923828e-08, + 0, + 0, + 1.0 + ], + "min": [ + 1.816079020500183e-08, + -2.225860384896805e-07, + -1.0058283805847168e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 500, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 729, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 653, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6804887652397156, + 0, + 0, + 0.9311265349388123 + ], + "min": [ + 0.21801918745040894, + -0.13387252390384674, + -0.35228684544563293, + 0.6335200667381287 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 530, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 589, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2389420121908188, + 0, + 0, + 0.9709298610687256 + ], + "min": [ + 0.2337753027677536, + -0.001450617564842105, + -0.0525122806429863, + 0.9696118235588074 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 731, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.154840063577467e-07, + -9.31322503561205e-08, + -9.872020712009544e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 561, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.9669532775878906e-06, + 45.04970169067383, + 4.372559487819672e-06 + ], + "min": [ + -2.473592758178711e-06, + 45.049678802490234, + -7.18235969543457e-06 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 376, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 405, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.025699138641357422, + 2.3235576152801514, + 1.3828277587890625e-05 + ], + "min": [ + 0.025686264038085938, + 2.3235349655151367, + 9.5367431640625e-07 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 188, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2637979984283447, + 0, + 0, + 0.9921198487281799 + ], + "min": [ + 0.12307315319776535, + -0.0016307852929458022, + -0.04800768196582794, + 0.9633812308311462 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 556, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.05690119042992592, + 0.00566576374694705, + 0.01428120769560337, + 0.9986143112182617 + ], + "min": [ + 0.05064700171351433, + 0.00541321188211441, + 0.01323179341852665, + 0.9982616305351257 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 506, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Spine_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 236, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + 0 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -1.1112497304566205e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 267, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.010770494118332863, + 0, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 354, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0011933766072615981, + 0, + 0.9998803734779358 + ], + "min": [ + -9.156999112747144e-06, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 256, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 7.776543498039246e-08, + 0, + 0, + 1.0 + ], + "min": [ + 2.1420417439799166e-08, + -2.3469324617053644e-07, + -1.0058282384761696e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 654, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 8.568169107547874e-08, + 3.539026494081554e-08, + 1.0 + ], + "min": [ + -7.636845111846924e-08, + 1.6763808119435453e-08, + -2.2351745343485163e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.2367963790893555e-06, + 4.706446647644043, + 4.6193599700927734e-07 + ], + "min": [ + -1.1175870895385742e-06, + 4.706441402435303, + -4.76837158203125e-07 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 225, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -2.889829829655355e-06, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 366, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 230, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 10.314631462097168, + 2.384185791015625e-07 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-07 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 465, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 5.778022289276123, + 0 + ], + "min": [ + -0.8288040161132812, + 5.7780046463012695, + -0.20811033248901367 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 754, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.016342997550964355, + 2.0912041664123535, + 2.47955322265625e-05 + ], + "min": [ + 0.016312122344970703, + 2.091160535812378, + -2.014636993408203e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 278, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 802, + "byteOffset": 0, + "componentType": 5126, + "count": 52, + "max": [ + 1.0011157989501953, + 1.0004726648330688, + 0.37282806634902954, + 0, + 0.17913757264614105, + 1.0011159181594849, + 0.9939067363739014, + 0, + 0.9973942041397095, + 0.997998058795929, + 1.0011157989501953, + 0, + 36.08419418334961, + 95.18425750732422, + 139.18643188476562, + 1.0 + ], + "min": [ + -1.0009628534317017, + -1.000463843345642, + -0.3957003951072693, + 0.0, + -0.16209860146045685, + -1.0005624294281006, + -0.9972899556159973, + 0.0, + -0.9975388050079346, + -0.3510676324367523, + -0.18741650879383087, + 0.0, + -40.01988983154297, + -137.4109344482422, + -8.502774238586426, + 1.0 + ], + "name": "accessor_buffer_IBM_F010_Saber_Body_skin_0", + "type": "MAT4" + }, + { + "bufferView": 563, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 421, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.6072536110877991, + 0.1764809489250183, + 0.005088530946522951, + 0.9173010587692261 + ], + "min": [ + 0.3609119951725006, + 0.009429778903722763, + -0.17017100751399994, + 0.7740885615348816 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 712, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 5.181265830993652, + 0 + ], + "min": [ + -2.0758442878723145, + 5.1812238693237305, + -0.1567068099975586 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 2.002579689025879, + 3.0994415283203125e-06 + ], + "min": [ + -0.009863853454589844, + 2.002546787261963, + -8.791685104370117e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 732, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0, + 0.9999996423721313, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 265, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1.0 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 566, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.02194690704345703, + 1.761939525604248, + 1.33514404296875e-05 + ], + "min": [ + 0.021935462951660156, + 1.7619061470031738, + -9.059906005859375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.09165339916944504, + 0.010146459564566612, + 0.04512402415275574, + 0.9979455471038818 + ], + "min": [ + 0.06395327299833298, + 4.2263418436050415e-05, + -0.02588547021150589, + 0.9948304891586304 + ], + "name": "accessor_buffer_mixamorig:Neck_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 393, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + 0, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 386, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 6.702626706101e-06 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 6.702626706101e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 247, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 656, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.37346184253692627, + 0, + 0, + 0.9999242424964905 + ], + "min": [ + -0.03445363789796829, + -0.005747898947447538, + -0.06894735991954803, + 0.9250620007514954 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 408, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 7.62939453125e-06, + 19.027156829833984, + 7.62939453125e-06 + ], + "min": [ + -1.1920928955078125e-05, + 19.027124404907227, + -6.467103958129883e-06 + ], + "name": "accessor_buffer_mixamorig:RightHand_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 349, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 490, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.21829265356063843, + 0, + 0, + 0.975964367389679 + ], + "min": [ + 0.21367475390434265, + -0.001443531597033143, + -0.043541159480810165, + 0.9749104976654053 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5123, + "count": 5004, + "max": [ + 1175 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.001_4", + "type": "SCALAR" + }, + { + "bufferView": 191, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2142990231513977, + 0.008710382506251335, + 0.007254559081047773, + 0.9938622713088989 + ], + "min": [ + 0.11028195917606354, + 0.0048032901249825954, + -0.017979728057980537, + 0.9765638113021851 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 516, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.1457672119140625e-06, + 7.483728885650635, + 1.3113021850585938e-05 + ], + "min": [ + -4.0531158447265625e-06, + 7.483709812164307, + -1.0369811207056046e-05 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 371, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5351991653442383, + 1.1235475540161133e-05 + ], + "min": [ + -0.18289971351623535, + 1.5351991653442383, + 1.1235475540161133e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 668, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.48500657081604004, + 0.008128128945827484, + 0.0038101968821138144, + 0.998948335647583 + ], + "min": [ + -0.05940983444452286, + -0.04093785956501961, + -0.11457008123397827, + 0.8670104146003723 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 517, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.46000736951828003, + 0.03152599558234215, + 0, + 0.9418922662734985 + ], + "min": [ + 0.3217529058456421, + -0.06592879444360733, + -0.34377336502075195, + 0.8436853885650635 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 717, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000003576278687, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 495, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.8846125602722168, + 1.33514404296875e-05 + ], + "min": [ + -0.05978895723819733, + 1.8845915794372559, + -9.059906005859375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.05057234317064285, + 0, + 0.004319834988564253, + 0.9999864101409912 + ], + "min": [ + -0.018635576590895653, + -0.008218026719987392, + -0.032305195927619934, + 0.9982173442840576 + ], + "name": "accessor_buffer_mixamorig:Spine2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 531, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.9166507720947266, + 4.6193599700927734e-06 + ], + "min": [ + -0.024976253509521484, + 1.9166388511657715, + -1.33514404296875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.9040881395339966, + 0 + ], + "min": [ + -0.044965267181396484, + 1.904050588607788, + -1.3589859008789062e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 203, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.16205744445323944, + 0, + 0, + 0.9997683167457581 + ], + "min": [ + -0.004742264747619629, + -0.007937208749353886, + -0.05945529788732529, + 0.9849565625190735 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 580, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0, + 0.9849482178688049 + ], + "min": [ + -0.5430340766906738, + -0.09268946945667267, + -0.06335114687681198, + 0.8363834023475647 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 429, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.034970283508301e-07, + 10.314647674560547, + 1.9222497940063477e-06 + ], + "min": [ + -5.662441253662109e-07, + 10.314611434936523, + -4.6193599700927734e-07 + ], + "name": "accessor_buffer_mixamorig:Neck_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 733, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.09871673583984375, + 2.22261381149292, + 4.482269287109375e-05 + ], + "min": [ + 0.09868061542510986, + 2.2225799560546875, + -3.5762786865234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 390, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.930837167194113e-05, + 0, + 1.0 + ], + "min": [ + -3.6987858038628474e-06, + 4.930837167194113e-05, + -0.000254306651186198, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 287, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.029511988162994385, + 2.085664749145508, + 0 + ], + "min": [ + 0.029511988162994385, + 2.085664749145508, + -3.653607564046979e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.14051729440689087, + 0.08032988756895065, + 0.2169266641139984, + 0.9733685255050659 + ], + "min": [ + 0.12550561130046844, + 0.06769057363271713, + 0.17218570411205292, + 0.9657147526741028 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 558, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 3.725290298461914e-07, + 41.85009765625, + 7.987022399902344e-06 + ], + "min": [ + -6.556510925292969e-07, + 41.8500862121582, + -4.306435585021973e-06 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 166, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.0209699869155884e-07, + 0, + 7.078051567077637e-08, + 1.0 + ], + "min": [ + 1.2665985593685036e-07, + -1.0244549031313e-07, + 3.7252894102834944e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 748, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 4.262583255767822, + 96.787109375, + 4.215145587921143 + ], + "min": [ + -4.329502105712891, + 96.01811981201172, + -2.1532444953918457 + ], + "name": "accessor_buffer_mixamorig:Hips_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 529, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.0288302693516016, + 0.025401953607797623, + 0.010065724141895771, + 0.9999460577964783 + ], + "min": [ + 0.009143766015768051, + -0.04278125241398811, + -0.017392504960298538, + 0.9987657070159912 + ], + "name": "accessor_buffer_mixamorig:Spine1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 399, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + 0, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 289, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 319, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 728, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.017484569922089577, + 0.029962653294205666, + 0.05493021011352539, + 0.9989464282989502 + ], + "min": [ + -0.012993323616683483, + -0.017851606011390686, + 0.045321494340896606, + 0.9982398748397827 + ], + "name": "accessor_buffer_mixamorig:Spine1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.0547380447387695e-06, + 6.854518413543701, + 0 + ], + "min": [ + -3.296881914138794e-06, + 6.854475975036621, + -0.5486005544662476 + ], + "name": "accessor_buffer_mixamorig:Spine_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 489, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 2.2824974060058594, + 0 + ], + "min": [ + -0.018560409545898438, + 2.2824764251708984, + -2.956390380859375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 427, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.8812713165061723e-07, + 0, + 7.078050856534901e-08, + 1.0 + ], + "min": [ + 1.4901161193847656e-07, + -7.82310962677002e-08, + 2.0489098417897367e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 213, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 5.4569682106375694e-12, + 1.0 + ], + "min": [ + -3.749335064640036e-09, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 441, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.904078722000122, + 0 + ], + "min": [ + -0.044965505599975586, + 1.9040560722351074, + -1.33514404296875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 619, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 3.2186508178710938e-06, + 41.849334716796875, + 2.294778823852539e-06 + ], + "min": [ + -2.6226043701171875e-06, + 41.84931945800781, + -2.7418136596679688e-06 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 327, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 758, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5759493708610535, + 0.05841023847460747, + 0.032488077878952026, + 0.8249241709709167 + ], + "min": [ + 0.552259087562561, + -0.18465866148471832, + -0.07742717862129211, + 0.8085960745811462 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 363, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 591, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.384185791015625e-07, + 12.033417701721191, + 7.569789886474609e-06 + ], + "min": [ + -1.0728836059570312e-06, + 12.03341007232666, + -3.516674041748047e-06 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 659, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5244287252426147, + 0.0015821133274585009, + 0, + 0.9976391196250916 + ], + "min": [ + 0.06548312306404114, + 0.0002152573870262131, + -0.1015104129910469, + 0.8453801870346069 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.05344519019126892, + 0.07039212435483932, + 0.9978359937667847, + 0.11501389741897583 + ], + "min": [ + -0.05957644060254097, + -0.10063694417476654, + -0.9973471760749817, + -0.008116190321743488 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 639, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000003576278687, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 4.291534423828125e-06, + 10.314652442932129, + 4.123547114431858e-06 + ], + "min": [ + -3.4570693969726562e-06, + 10.314606666564941, + -3.509223461151123e-06 + ], + "name": "accessor_buffer_mixamorig:Neck_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0001195669174194, + 1.0000052452087402, + 1.0000113248825073 + ], + "min": [ + 1.0001120567321777, + 0.9999999403953552, + 1.0000083446502686 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 540, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 5.587935447692871e-07, + 9.16856861114502, + 8.419156074523926e-07 + ], + "min": [ + -9.611248970031738e-07, + 9.16854190826416, + -3.948807716369629e-07 + ], + "name": "accessor_buffer_mixamorig:Spine2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 248, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.043081283569336e-07, + 4.706444263458252, + 1.4901161193847656e-08 + ], + "min": [ + 1.043081283569336e-07, + 4.706444263458252, + 1.4901161193847656e-08 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 245, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "min": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 626, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.0174775272607803e-07, + 0, + 6.705522537231445e-08, + 1.0 + ], + "min": [ + 1.3620592653751373e-07, + -9.965152969471092e-08, + 1.1175870895385742e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 1.0, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 217, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1.0, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1.0, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 766, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.2351741790771484e-05, + 22.772350311279297, + 1.7642974853515625e-05 + ], + "min": [ + -2.5272369384765625e-05, + 22.772321701049805, + -1.7642974853515625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.15171436965465546, + 0.00039636032306589186, + 0.042124077677726746, + 0.9945166110992432 + ], + "min": [ + 0.10028524696826935, + 0.0002789032587315887, + 0.029658794403076172, + 0.9875262975692749 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 705, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 269, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.933863162994385, + 0 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 343, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 32, + "componentType": 5126, + "count": 3340, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_F010_Saber.003_3", + "type": "VEC3" + }, + { + "bufferView": 520, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.14477038383483887, + 0.27585312724113464, + 0.9954227805137634, + 0.10875106602907181 + ], + "min": [ + -0.1360315978527069, + -0.3243834972381592, + -0.9909538626670837, + 0.001317197922617197 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 716, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4522598385810852, + 0.5235873460769653, + 0.4009115397930145, + 0.9512882828712463 + ], + "min": [ + -0.0987769067287445, + -0.6546518802642822, + -0.40881362557411194, + 0.7097232937812805 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.05035451054573059, + 0.00010166570427827537, + 0.004495101980865002, + 0.9999853372573853 + ], + "min": [ + -0.01858527958393097, + -0.009152092970907688, + -0.03265814855694771, + 0.9982130527496338 + ], + "name": "accessor_buffer_mixamorig:Spine1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 623, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.16332881152629852, + 0, + 0, + 0.999839186668396 + ], + "min": [ + -0.032415151596069336, + -0.007844998501241207, + -0.04265367239713669, + 0.985617995262146 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 547, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -4.936010356004772e-08, + -8.25338065624237e-06, + -3.2596297216969106e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 320, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 417, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 8.98844051361084, + 0 + ], + "min": [ + -3.513522148132324, + 8.9884033203125, + -0.11455550044775009 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.015069961547851562, + 2.0928781032562256, + 1.9073486328125e-05 + ], + "min": [ + 0.015053749084472656, + 2.092843532562256, + 1.049041748046875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 593, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 767, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.07823974639177322, + 0, + 0.9370339512825012, + 0.9995554089546204 + ], + "min": [ + -0.005400640890002251, + -0.13503864407539368, + 0.02932603657245636, + 0.3124268352985382 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.16806091368198395, + 0, + 0, + 0.9968441724777222 + ], + "min": [ + 0.07697957754135132, + -0.0015606372617185116, + -0.03520051762461662, + 0.9851468205451965 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 276, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.5469267964363098e-06, + 41.84933853149414, + 1.8849968910217285e-06 + ], + "min": [ + -1.6654375940561295e-06, + 41.84931945800781, + -1.6093254089355469e-06 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 707, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.7343482971191406, + 0.6197038292884827, + 0, + 0.5142742991447449 + ], + "min": [ + 0.3333512544631958, + 0.3387937545776367, + -0.6025190353393555, + 0.0776350200176239 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 324, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.003121189074590802, + 0, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 484, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.03271305933594704, + 0, + 0, + 0.9995459914207458 + ], + "min": [ + 0.023490186780691147, + -0.0016165364068001509, + -0.020451921969652176, + 0.9992542862892151 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 304, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 282, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -2.3662607873120578e-08, + -2.0191042438000295e-07, + -1.5510249795624986e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 477, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.4313554763793945, + 1.9488956928253174, + 1.37374746799469 + ], + "min": [ + 1.4313411712646484, + 1.94887375831604, + 1.373722791671753 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 536, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 211, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 609, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHand_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 362, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.04969024658203, + 8.68749339133501e-09 + ], + "min": [ + -3.5517268770490773e-07, + 45.04969024658203, + 8.68749339133501e-09 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 521, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0001200437545776, + 1.0000041723251343, + 1.0000247955322266 + ], + "min": [ + 1.0001025199890137, + 0.9999999403953552, + 1.0000050067901611 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 175, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.8905096054077148, + 5.9824113845825195, + 0 + ], + "min": [ + 0.8904943466186523, + 5.982382774353027, + -0.2430582046508789 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 503, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 564, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 481, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 9.313224857976365e-09, + 0, + 0, + 1.0 + ], + "min": [ + -4.0978196835794733e-08, + -2.3853499442338943e-07, + -1.788139485370266e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 313, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 426, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 1.4579057693481445, + 1.537799835205078e-05 + ], + "min": [ + -0.014504566788673401, + 1.4578936100006104, + -1.3113021850585938e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 711, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 801, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 193, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 12.033416748046875, + 5.155801773071289e-06 + ], + "min": [ + -8.624047040939331e-07, + 12.033411979675293, + 2.086162567138672e-06 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 312, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-07, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-07, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 262, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.17208468914032e-06, + 7.483736515045166, + 1.971796154975891e-05 + ], + "min": [ + -3.3229589462280273e-06, + 7.483699321746826, + -1.823902130126953e-05 + ], + "name": "accessor_buffer_mixamorig:RightArm_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 510, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.008647918701171875, + 2.2196311950683594, + 6.556510925292969e-06 + ], + "min": [ + 0.008634090423583984, + 2.219604969024658, + -1.430511474609375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 682, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.9782624244689941, + 0 + ], + "min": [ + -0.004072606563568115, + 1.9782217741012573, + -5.14984130859375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 493, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.03061562217772007, + 0, + 0, + 0.9626755118370056 + ], + "min": [ + 0.01538943126797676, + -0.003103941911831498, + -0.4437229633331299, + 0.8956355452537537 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.004721164703369141, + 1.5559616088867188, + 1.5020370483398438e-05 + ], + "min": [ + 0.004713535308837891, + 1.5559303760528564, + -8.344650268554688e-07 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 198, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 12, + "componentType": 5126, + "count": 3340, + "max": [ + 0.9999616742134094, + 0.9999489784240723, + 0.999893069267273 + ], + "min": [ + -0.9999616742134094, + -0.9999061226844788, + -0.9999434351921082 + ], + "name": "accessor_buffer_F010_Saber.003_1", + "type": "VEC3" + }, + { + "bufferView": 357, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4512252164422534e-06, + 0.0003296945069450885, + 0, + 0.9999457001686096 + ], + "min": [ + 1.4512252164422534e-06, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 440, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.4139881134033203e-06, + 9.1685791015625, + 3.200024366378784e-06 + ], + "min": [ + -1.6689300537109375e-06, + 9.168535232543945, + -3.732740879058838e-06 + ], + "name": "accessor_buffer_mixamorig:Spine2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 492, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 9.775161743164062e-06, + 22.770910263061523, + 1.0363757610321045e-05 + ], + "min": [ + -9.298324584960938e-06, + 22.770885467529297, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 226, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 197, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2657705545425415, + 0, + 0, + 0.9712958931922913 + ], + "min": [ + 0.23331665992736816, + -0.02884344756603241, + -0.03806443139910698, + 0.9629548192024231 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 223, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 7.576313018798828, + 154.56195068359375, + 7.6111836433410645 + ], + "min": [ + -7.576391220092773, + 136.62216186523438, + -2.516939640045166 + ], + "name": "accessor_buffer_F010_Saber.001_0", + "type": "VEC3" + }, + { + "bufferView": 785, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.23321226239204407, + 0, + 0, + 0.9992257952690125 + ], + "min": [ + 0.03889349475502968, + -0.001992400037124753, + -0.03604394197463989, + 0.9717556238174438 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5123, + "count": 14376, + "max": [ + 3339 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.003_4", + "type": "SCALAR" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.017184464260935783, + 0.020855071023106575, + 0, + 0.965028703212738 + ], + "min": [ + 0.015216303989291191, + 0.01904902793467045, + -0.2829480469226837, + 0.9587545990943909 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 773, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6173950433731079, + 0.005300233606249094, + 0, + 0.9813207983970642 + ], + "min": [ + 0.10599164664745331, + -0.07019437849521637, + -0.22208629548549652, + 0.7538939714431763 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 532, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.0803341865539551e-07, + -8.381903171539307e-08, + -9.126961941774425e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 641, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -2.840533568360115e-07, + -1.1618249118328094e-07, + -1.7613635350244294e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 467, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 660, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 32, + "componentType": 5126, + "count": 1176, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_F010_Saber.001_3", + "type": "VEC3" + }, + { + "bufferView": 174, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 2.248481273651123, + 0 + ], + "min": [ + -0.010968208312988281, + 2.2484450340270996, + -2.676248550415039e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 526, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.09213517606258392, + 0.3536476492881775, + 0.23683762550354004, + 0.917300283908844 + ], + "min": [ + -0.037373002618551254, + 0.34911879897117615, + 0.19151002168655396, + 0.9048376083374023 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 170, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.012483884580433369, + 0, + 0.23880794644355774, + 0.9808360934257507 + ], + "min": [ + 0.00864197127521038, + -0.01732274517416954, + 0.19416344165802002, + 0.9708320498466492 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 452, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0001252889633179, + 1.0000041723251343, + 1.0000079870224 + ], + "min": [ + 1.000117540359497, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 311, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 1.1700321920216084e-05 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 1.1700321920216084e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.592802047729492e-06, + 22.77091407775879, + 1.1414289474487305e-05 + ], + "min": [ + -3.7848949432373047e-06, + 22.770875930786133, + -7.733702659606934e-06 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 284, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9782497882843018, + 0 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -1.3029115507379174e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 195, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.1554909348487854, + 7.178223768278258e-06, + 0.03243127092719078, + 0.9960601925849915 + ], + "min": [ + 0.08632491528987885, + 4.225949851388577e-06, + 0.02030176669359207, + 0.9873048067092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.39606502652168274, + 0.06393416225910187, + 0.042634978890419006, + 0.9679672718048096 + ], + "min": [ + 0.2443922907114029, + 0.007028311491012573, + -0.09464090317487717, + 0.9131984710693359 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 487, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 6.891787762697277e-08, + 2.0489098417897367e-08, + 1.0 + ], + "min": [ + -7.078052277620372e-08, + 2.3283067918100642e-08, + -2.980232594040899e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 723, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 466, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4905281364917755, + 0.059145789593458176, + 0.1785299926996231, + 0.9237978458404541 + ], + "min": [ + 0.33814412355422974, + 0.026642940938472748, + 0.1647922843694687, + 0.8536553382873535 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 270, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 610, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 5.818437784910202e-06, + 4.308725357055664, + 0.11991727352142334 + ], + "min": [ + -5.2265822887420654e-06, + 4.308669567108154, + 0.11990416049957275 + ], + "name": "accessor_buffer_mixamorig:Head_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.509203910827637, + -3.808929443359375, + -0.4497419595718384 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 524, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 596, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 169, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.2186508178710938e-06, + 22.772356033325195, + 7.756054401397705e-06 + ], + "min": [ + -3.5762786865234375e-06, + 22.77231788635254, + -1.2218952178955078e-05 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 288, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.833076872046149e-08, + 7.194104423291492e-09, + 1.0 + ], + "min": [ + -4.388131102928128e-08, + 4.833076872046149e-08, + 7.194104423291492e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 604, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.02571415901184082, + 2.323568344116211, + 2.0135194063186646e-05 + ], + "min": [ + 0.025665074586868286, + 2.323524236679077, + -1.5735626220703125e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 415, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.06956339627504349, + 0.18320779502391815, + 0.18127001821994781, + 0.9919604659080505 + ], + "min": [ + -0.07042592763900757, + 0.09327314049005508, + 0.06101595237851143, + 0.9723660349845886 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 608, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3289208710193634, + 0.22454611957073212, + 0.11444523930549622, + 0.9986773729324341 + ], + "min": [ + -0.4496552050113678, + -0.2842461168766022, + -0.5052515268325806, + 0.8241262435913086 + ], + "name": "accessor_buffer_mixamorig:RightHand_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 351, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.5535473109102895e-08, + 2.9428024461708446e-09, + 0, + 1.0 + ], + "min": [ + 5.5535473109102895e-08, + 2.9428024461708446e-09, + -5.548599347093841e-06, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 757, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.1026859283447266e-06, + 41.850101470947266, + 1.7136335372924805e-06 + ], + "min": [ + -1.4901161193847656e-06, + 41.85007858276367, + -2.5033950805664062e-06 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 696, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000003576278687, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 231, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.0000004768371582 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 254, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + 0 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 504, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.385807991027832e-06, + 6.854513168334961, + 0 + ], + "min": [ + -3.725290298461914e-07, + 6.854482650756836, + -0.5485981702804565 + ], + "name": "accessor_buffer_mixamorig:Spine_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 365, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 581, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.9166603088378906, + 7.092952728271484e-06 + ], + "min": [ + -0.02497100830078125, + 1.9166274070739746, + -1.1265277862548828e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.01633167266845703, + 2.091195821762085, + 9.775161743164062e-06 + ], + "min": [ + 0.016323089599609375, + 2.0911662578582764, + -6.198883056640625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 367, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 652, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.112344264984131, + 5.151429653167725, + 0 + ], + "min": [ + 2.112302541732788, + 5.151391983032227, + -0.10167694091796875 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 410, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHand_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 715, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 8.58306884765625e-06, + 7.483728885650635, + 2.1278858184814453e-05 + ], + "min": [ + -7.867813110351562e-06, + 7.4837117195129395, + -2.3245811462402344e-05 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 546, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.0265579223632812e-06, + 4.712550163269043, + 2.2649765014648438e-06 + ], + "min": [ + -1.3709068298339844e-06, + 4.712538719177246, + -2.9802322387695312e-06 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 431, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Neck_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 573, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.8905124664306641, + 5.982405662536621, + 0 + ], + "min": [ + 0.8904919624328613, + 5.982386589050293, + -0.24306488037109375 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 628, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 5.155801773071289e-06, + 10.314654350280762, + 7.331371307373047e-06 + ], + "min": [ + -4.5299530029296875e-06, + 10.314610481262207, + -7.68899917602539e-06 + ], + "name": "accessor_buffer_mixamorig:Neck_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 212, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 433, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.7136335372924805e-07, + -1.5273690223693848e-07, + -1.6018749704471702e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6693047881126404, + 0.35235124826431274, + 0, + 0.3586310148239136 + ], + "min": [ + 0.6274645328521729, + 0.3059859275817871, + -0.5993227362632751, + 0.3346402645111084 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 634, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.009794950485229492, + 1.9066658020019531, + 3.719329833984375e-05 + ], + "min": [ + 0.009750843048095703, + 1.9066030979156494, + -8.106231689453125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 598, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2313416302204132, + 0.42733529210090637, + 0.1651192009449005, + 0.9869678020477295 + ], + "min": [ + -0.10425511747598648, + 0.07881790399551392, + -0.0629025548696518, + 0.8733873963356018 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 710, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5094752311706543, + 0, + 0.08569139242172241, + 0.9990641474723816 + ], + "min": [ + 0.04278033226728439, + -0.009175324812531471, + 0.0063611590303480625, + 0.8561587929725647 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 618, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 572, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.0, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 360, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + 0, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 387, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-07, + 0, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-07, + -3.228561763535254e-05, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 491, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 190, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.8280882835388184, + 0 + ], + "min": [ + -0.0065402984619140625, + 1.8280493021011353, + -2.8133392333984375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 672, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 627, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 649, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 6.509202480316162, + 0, + 0 + ], + "min": [ + 6.509198188781738, + -3.808929443359375, + -0.31935662031173706 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 725, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.18342003226280212, + 0.4625886380672455, + 0.40098264813423157, + 0.915322482585907 + ], + "min": [ + -0.11913296580314636, + 0.09699290990829468, + 0.30179938673973083, + 0.8162391781806946 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 234, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.473153474762512e-07, + -1.363462160952622e-07, + -1.3542921806219965e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 298, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.000000238418579, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.000000238418579, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 233, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.021941065788269043, + 1.7619209289550781, + 2.016910548263695e-05 + ], + "min": [ + 0.021941065788269043, + 1.7619209289550781, + 2.016910548263695e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 739, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.5981495380401611e-06, + 9.168578147888184, + 4.9620866775512695e-06 + ], + "min": [ + -1.6093254089355469e-06, + 9.168539047241211, + -4.112720489501953e-06 + ], + "name": "accessor_buffer_mixamorig:Spine2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 9.313225746154785e-08, + 2.514571129097476e-08, + 3.3527612686157227e-08, + 1.0 + ], + "min": [ + 2.421438694000244e-08, + -3.026798367500305e-08, + -2.980232594040899e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 171, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.9669532775878906e-06, + 20.857290267944336, + 0.5804580450057983 + ], + "min": [ + -2.1457672119140625e-06, + 20.857213973999023, + 0.5804459452629089 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 224, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2484662532806396, + 9.948620572686195e-06 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 9.948620572686195e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 335, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 5.245208740234375e-06 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 5.245208740234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 494, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 464, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 708, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0.032519370317459106, + 0.01966981776058674, + 0.9969176650047302 + ], + "min": [ + -0.1478203386068344, + -0.0030081800650805235, + 0.0049291932955384254, + 0.9886130690574646 + ], + "name": "accessor_buffer_mixamorig:Head_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 786, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 375, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 803, + "byteOffset": 0, + "componentType": 5126, + "count": 3, + "max": [ + 1.0011157989501953, + 4.722245511290524e-11, + 1.886907947598604e-12, + 0, + 3.766052140280474e-12, + 1.0011159181594849, + 0.07986891269683838, + 0, + 1.8865089611991293e-12, + 0, + 1.0011157989501953, + 0, + 0, + 0, + 2.1228513717651367, + 1.0 + ], + "min": [ + 1.0011157989501953, + -3.766054742365688e-12, + 2.0371814713867806e-16, + 0.0, + -4.722247592958695e-11, + 0.9979248046875, + 1.5544334530659398e-07, + 0.0, + -2.0430401600549222e-16, + -0.07986891269683838, + 0.9979247450828552, + 0.0, + -0.007442474830895662, + -137.4109344482422, + -8.502774238586426, + 1.0 + ], + "name": "accessor_buffer_IBM_F010_Saber_Face_skin_0", + "type": "MAT4" + }, + { + "bufferView": 734, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.1082083135843277, + 0.16242840886116028, + 0.26776057481765747, + 0.9917136430740356 + ], + "min": [ + 0.0326661579310894, + 0.10416033118963242, + 0.05328565090894699, + 0.9466597437858582 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 545, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 768, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000003576278687, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 770, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 9.825455293821506e-08, + 2.60770320892334e-08, + 6.332993507385254e-08, + 1.0 + ], + "min": [ + 3.4458935260772705e-08, + -3.5390257835388184e-08, + -1.8626442610525373e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 745, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.2069940567016602e-06, + 4.712547779083252, + 2.4959444999694824e-07 + ], + "min": [ + -1.1920928955078125e-06, + 4.712543487548828, + -3.5390257835388184e-07 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 749, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.0024724402464926243, + 0.2151503562927246, + 0, + 0.9990251064300537 + ], + "min": [ + -0.10247030854225159, + -0.0971604585647583, + -0.0569785051047802, + 0.9747562408447266 + ], + "name": "accessor_buffer_mixamorig:Hips_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 553, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.013776808977127075, + 0.007904808036983013, + 0.012526584789156914, + 0.9999035000801086 + ], + "min": [ + 0.0039803688414394855, + 0.0073607624508440495, + 0.011090894229710102, + 0.9997954368591309 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 799, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.525008201599121, + 2.8945505619049072e-05 + ], + "min": [ + -0.00624847412109375, + 1.5249760150909424, + -1.582503318786621e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 416, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 800, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.36818069219589233, + 0, + 0, + 0.9983592629432678 + ], + "min": [ + 0.04365229606628418, + -0.014484290964901447, + -0.10348690301179886, + 0.9238634705543518 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 613, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.07796502113342285, + 2.109346389770508, + 8.821487426757812e-06 + ], + "min": [ + 0.07792496681213379, + 2.1093080043792725, + -2.181529998779297e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 264, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.737616568992962e-06, + 0, + 0, + 0.9967700242996216 + ], + "min": [ + 2.737616568992962e-06, + -7.92778519098647e-05, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 794, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.42069321870803833, + 0.023263368755578995, + 0.002807950833812356, + 0.9984909892082214 + ], + "min": [ + -0.03831353783607483, + -0.06716737896203995, + -0.22723887860774994, + 0.9035097360610962 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 189, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 252, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.6051130842242856e-06, + 0, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 1.6051130842242856e-06, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.02991008758544922, + 2.2504143714904785, + 7.62939453125e-06 + ], + "min": [ + 0.02988910675048828, + 2.2503767013549805, + -2.384185791015625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 340, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 12, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9913477301597595, + 0.9988032579421997, + 0.9995606541633606 + ], + "min": [ + -0.9913485050201416, + -0.9999690651893616, + -0.9874789118766785 + ], + "name": "accessor_buffer_F010_Saber.001_1", + "type": "VEC3" + }, + { + "bufferView": 411, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 4.991888999938965e-07, + 4.308724403381348, + 0.11991281807422638 + ], + "min": [ + -5.578622221946716e-07, + 4.308677673339844, + 0.11990927159786224 + ], + "name": "accessor_buffer_mixamorig:Head_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 266, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.778012275695801, + 0 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 241, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.07796001434326172, + 2.109344005584717, + 3.814697265625e-06 + ], + "min": [ + 0.0779409408569336, + 2.1093106269836426, + -1.1444091796875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 251, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + 0, + 0 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 423, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 2.24847412109375, + 0 + ], + "min": [ + -0.010970115661621094, + 2.248453378677368, + -2.562999725341797e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 771, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.0, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 539, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 571, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 8.568167686462402e-08, + 1.1175874448099421e-08, + 4.097820038850841e-08, + 1.0 + ], + "min": [ + 3.9115555239277455e-08, + -3.725289943190546e-08, + 3.7252920748187535e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 674, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3233933746814728, + 0.5145593881607056, + 0.24958108365535736, + 0.9530545473098755 + ], + "min": [ + -0.3254883289337158, + -0.5129621624946594, + -0.5374211668968201, + 0.7476178407669067 + ], + "name": "accessor_buffer_mixamorig:RightArm_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 185, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.015548309311270714, + 0.005418228916823864, + 0, + 0.9971773028373718 + ], + "min": [ + 0.009982623159885406, + -0.008802936412394047, + -0.12332369387149811, + 0.992258608341217 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 214, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 450, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.509202480316162, + 0, + 0 + ], + "min": [ + 6.509199619293213, + -3.808922290802002, + -0.31935441493988037 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 559, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.615274965763092, + 0.09147502481937408, + 0.14577235281467438, + 0.934639036655426 + ], + "min": [ + 0.3243423402309418, + -0.12179058790206909, + -0.02567342109978199, + 0.7820845246315002 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 583, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.11787582188844681, + 0, + 0, + 0.9865501523017883 + ], + "min": [ + 0.050129637122154236, + -0.2333427518606186, + -0.18150991201400757, + 0.9580236077308655 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 622, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 2.2484869956970215, + 0 + ], + "min": [ + -0.010982275009155273, + 2.2484469413757324, + -3.6716461181640625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 219, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + 0, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 235, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 636, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999995827674866 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 720, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0001180171966553, + 1.0000081062316895, + 1.000011920928955 + ], + "min": [ + 1.00011146068573, + 1.0000027418136597, + 1.0000033378601074 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 648, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 463, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.008281150832772255, + 0.09331756085157394, + 0, + 0.989179790019989 + ], + "min": [ + 0.0027392064221203327, + 0.0816226452589035, + -0.14038221538066864, + 0.9867234230041504 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 617, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.8000295758247375, + 0, + 0.5880354642868042, + 0.5944336652755737 + ], + "min": [ + 0.26392662525177, + -0.6670979857444763, + 0.27886316180229187, + 0.07201345264911652 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 677, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.35378745198249817, + 0, + 0, + 0.9115720391273499 + ], + "min": [ + 0.17257185280323029, + -0.4793325960636139, + -0.5963944792747498, + 0.6543446779251099 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 474, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.6689300537109375e-06, + 7.483725547790527, + 1.4662742614746094e-05 + ], + "min": [ + -1.4901161193847656e-06, + 7.4837117195129395, + -1.2509524822235107e-05 + ], + "name": "accessor_buffer_mixamorig:RightArm_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 227, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.4578983783721924, + 0 + ], + "min": [ + -0.014494240283966064, + 1.4578983783721924, + -7.362202268268447e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.06327129900455475, + 0.10982005298137665, + 0.9969109892845154, + 0.11868580430746078 + ], + "min": [ + -0.06241075322031975, + -0.06120417267084122, + -0.9974195957183838, + -0.007310595829039812 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 279, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + 0, + 0, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 1.8846192359924316, + 8.58306884765625e-06 + ], + "min": [ + -0.05979347229003906, + 1.8845858573913574, + -2.86102294921875e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 277, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.08421897888183594, + 1.993545413017273, + 0 + ], + "min": [ + 0.08420610427856445, + 1.9935120344161987, + -3.0040740966796875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 9.309781074523926, + 97.13330841064453, + 3.2183454036712646 + ], + "min": [ + -0.4522612690925598, + 95.00161743164062, + 0.4859360456466675 + ], + "name": "accessor_buffer_mixamorig:Hips_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 693, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 314, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.181240558624268, + 0 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 655, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 2.002577543258667, + 2.3633241653442383e-05 + ], + "min": [ + -0.009878158569335938, + 2.0025482177734375, + -2.637505531311035e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 432, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.02194690704345703, + 1.7619378566741943, + 1.2725591659545898e-05 + ], + "min": [ + 0.021934986114501953, + 1.7619171142578125, + -3.904104232788086e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.02569866180419922, + 2.3235669136047363, + 1.239776611328125e-05 + ], + "min": [ + 0.025682926177978516, + 2.323526620864868, + 2.384185791015625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 346, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 704, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0.05371571332216263, + 0.034797437489032745, + 0.9995884299278259 + ], + "min": [ + -0.0812988132238388, + -0.045464154332876205, + 0.003705148585140705, + 0.996268630027771 + ], + "name": "accessor_buffer_mixamorig:Spine_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 377, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0023322105407715, + 0 + ], + "min": [ + -0.03690838813781738, + 2.0023322105407715, + -2.0437873899936676e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 637, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.012783527374267578, + 1.3818130493164062, + 1.71661376953125e-05 + ], + "min": [ + 0.012743949890136719, + 1.3817720413208008, + -1.913309097290039e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 379, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 482, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000003576278687 + ], + "min": [ + 0.9999999403953552, + 0.9999998807907104, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 587, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 640, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.9040913581848145, + 1.1920928955078125e-05 + ], + "min": [ + -0.04498070478439331, + 1.9040390253067017, + -2.574920654296875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 165, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999996423721313, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 586, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.030336719006299973, + 0, + 0, + 0.9997857809066772 + ], + "min": [ + 0.020470714196562767, + -0.0004611696640495211, + -0.0045809452421963215, + 0.9995291233062744 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 551, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Hips_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 167, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 218, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 8.988426208496094, + 0 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 630, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Neck_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0013580322265625e-05, + 19.02716064453125, + 9.715557098388672e-06 + ], + "min": [ + -1.049041748046875e-05, + 19.027124404907227, + -9.179115295410156e-06 + ], + "name": "accessor_buffer_mixamorig:RightHand_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 714, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 792, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 730, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.9166755676269531, + 2.2649765014648438e-05 + ], + "min": [ + -0.024984359741210938, + 1.9166185855865479, + -2.1219253540039062e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 702, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 453, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.112335681915283, + 5.151423931121826, + 0 + ], + "min": [ + 2.112314224243164, + 5.151405334472656, + -0.10166740417480469 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 661, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.0842430591583252, + 1.9935603141784668, + 4.231929779052734e-06 + ], + "min": [ + 0.08419313281774521, + 1.9935017824172974, + -4.482269287109375e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 8.35862010717392e-08, + 8.065725523920264e-06, + 0, + 1.0 + ], + "min": [ + 8.07922262424654e-08, + 8.053459168877453e-06, + -1.4493707567453384e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 322, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 273, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 388, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999998807907104 + ], + "min": [ + 1.0, + 1.0, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 389, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8280677795410156, + 0 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -1.1722324416041374e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 781, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 2.151792049407959, + 1.9073486328125e-06 + ], + "min": [ + -0.018188118934631348, + 2.1517372131347656, + -3.409385681152344e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 208, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 509, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 742, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 4.0745362639427185e-06, + 12.089052200317383, + 0 + ], + "min": [ + -2.4205073714256287e-06, + 12.089046478271484, + -6.556510925292969e-06 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 713, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6205130219459534, + 0.12480250746011734, + 0.3536866307258606, + 0.9420853853225708 + ], + "min": [ + 0.06604980677366257, + -0.02690909430384636, + 0.2650204300880432, + 0.694172739982605 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.01546031516045332, + 0.004832530859857798, + 0, + 0.999834418296814 + ], + "min": [ + 0.010453573428094387, + 0.0036396230570971966, + -0.05671585351228714, + 0.9983239769935608 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 645, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 352, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.37481021881103516, + 0, + 0.08346261829137802, + 0.9625203609466553 + ], + "min": [ + 0.24815411865711212, + -0.11651493608951569, + -0.0916302502155304, + 0.9205743670463562 + ], + "name": "accessor_buffer_mixamorig:RightArm_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 385, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.13985876739025116, + 0.008026359602808952, + 0.05718501657247543, + 0.9948629140853882 + ], + "min": [ + 0.090253084897995, + 0.0063728815875947475, + 0.04540440812706947, + 0.9884862303733826 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 380, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.050357818603516, + 2.3865140974521637e-09 + ], + "min": [ + -2.398074059328792e-07, + 45.050357818603516, + 2.3865140974521637e-09 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 621, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 469, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.186489075422287, + 0.00365125248208642, + 0, + 0.9913313388824463 + ], + "min": [ + 0.1214970126748085, + -0.0004450123815331608, + -0.08004932850599289, + 0.9791836738586426 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 407, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 412, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.006472966633737087, + 0.016004886478185654, + 0.008321022614836693, + 0.9999926090240479 + ], + "min": [ + -0.021510018035769463, + -0.039265409111976624, + -0.012926705181598663, + 0.999193549156189 + ], + "name": "accessor_buffer_mixamorig:Head_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 512, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 447, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.1920928955078125e-06, + 4.70644998550415, + 2.4437904357910156e-06 + ], + "min": [ + -8.344650268554688e-07, + 4.706439971923828, + -9.834766387939453e-07 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 384, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 7.007304520811886e-05, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-07, + 7.007304520811886e-05, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 255, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 436, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4030008614063263, + 0.003750248346477747, + 0.09187088161706924, + 0.9199389815330505 + ], + "min": [ + 0.38219958543777466, + 0.00356577942147851, + 0.08731123805046082, + 0.9105690121650696 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 181, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.1457672119140625e-06, + 45.050376892089844, + 4.023313522338867e-06 + ], + "min": [ + -1.6093254089355469e-06, + 45.05033874511719, + -4.492700099945068e-06 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 752, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.12631464004516602, + 0.014103413559496403, + 0.02894601598381996, + 0.9999167323112488 + ], + "min": [ + -0.2253120094537735, + -0.005575133487582207, + -0.02281351014971733, + 0.9740036725997925 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 797, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3634963035583496, + 0.2832793593406677, + 0.33050408959388733, + 0.9935636520385742 + ], + "min": [ + -0.26121294498443604, + -0.6064321398735046, + -0.3639959990978241, + 0.6906076669692993 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 658, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 2.1800739765167236, + 7.092952728271484e-06 + ], + "min": [ + -0.017911911010742188, + 2.1800386905670166, + -2.1457672119140625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 306, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 5.544060059037292e-06, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-07, + 5.544060059037292e-06, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 438, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.012766838073730469, + 1.3818058967590332, + 6.67572021484375e-06 + ], + "min": [ + 0.012753963470458984, + 1.381788730621338, + -8.58306884765625e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 419, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 249, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.172354171165352e-08, + 8.062284905463457e-06, + 0, + 1.0 + ], + "min": [ + 8.172354171165352e-08, + 8.062284905463457e-06, + -1.2136295524101115e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 5.181260108947754, + 0 + ], + "min": [ + -2.0758304595947266, + 5.181227684020996, + -0.1566941738128662 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 439, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.82193785905838e-08, + 3.725290298461914e-08, + 3.725290298461914e-08, + 1.0 + ], + "min": [ + 3.725290298461914e-08, + -2.0489096641540527e-08, + -9.313225746154785e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.029519081115722656, + 2.0856847763061523, + 1.049041748046875e-05 + ], + "min": [ + 0.02950572967529297, + 2.0856456756591797, + -1.0013580322265625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 601, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0, + 0, + 0.9992690682411194 + ], + "min": [ + -0.037345655262470245, + -0.0026527720037847757, + -0.02070719748735428, + 0.9991076588630676 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.3317915659172286e-07, + -7.82310962677002e-08, + -8.381903171539307e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 458, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 633, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 793, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.2894606590270996, + 5.801722526550293, + 0.05066871643066406 + ], + "min": [ + 2.2894203662872314, + 5.80167818069458, + 0.05062437057495117 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 687, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 414, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.0779564380645752, + 2.1093409061431885, + 3.814697265625e-06 + ], + "min": [ + 0.07794487476348877, + 2.109320878982544, + -1.33514404296875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 565, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.6652047634124756e-06, + 12.089051246643066, + 0 + ], + "min": [ + -9.201467037200928e-07, + 12.089046478271484, + -4.954636096954346e-06 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 511, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.23224323987960815, + 0, + 0.03853878751397133, + 0.973365306854248 + ], + "min": [ + 0.2261386215686798, + -0.003985876217484474, + 0.037501487880945206, + 0.9718858003616333 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 603, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 8.333333333333314 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Yawn_time_0", + "type": "SCALAR" + }, + { + "bufferView": 347, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.7125468254089355, + 0 + ], + "min": [ + -6.258487701416016e-07, + 4.7125468254089355, + -5.960464477539063e-08 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 615, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 784, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.003368377685546875, + 1.9062774181365967, + 2.09808349609375e-05 + ], + "min": [ + 0.0033315420150756836, + 1.9062366485595703, + -2.09808349609375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 456, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 2.0025761127471924, + 2.86102294921875e-06 + ], + "min": [ + -0.009865224361419678, + 2.0025548934936523, + -1.1920928955078125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 670, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 6.091211318969727, + 0.09325706958770752 + ], + "min": [ + -2.381869077682495, + 6.0911760330200195, + 0.09322134405374527 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 597, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 4.76837158203125e-06, + 19.023365020751953, + 6.198883056640625e-06 + ], + "min": [ + -1.049041748046875e-05, + 19.023338317871094, + -1.0013580322265625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 497, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000003576278687, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 401, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5249916315078735, + 2.2089123376645148e-05 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 2.2089123376645148e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.087784767150879e-06, + 41.850101470947266, + 1.6391277313232422e-06 + ], + "min": [ + -9.387731552124023e-07, + 41.85007858276367, + -1.519918441772461e-06 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.4313545227050781, + 1.9488978385925293, + 1.3737468719482422 + ], + "min": [ + 1.4313373565673828, + 1.9488682746887207, + 1.3737294673919678 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 292, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 473, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 16, + "componentType": 5126, + "count": 3340, + "max": [ + 1.0, + 0.49809977412223816, + 0.31396016478538513, + 0.20796984434127808 + ], + "min": [ + 0.30062898993492126, + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_1", + "type": "VEC4" + }, + { + "bufferView": 178, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 2.002359628677368, + 6.67572021484375e-06 + ], + "min": [ + -0.03691387176513672, + 2.0023269653320312, + -1.33514404296875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6151828765869141, + 5.9878010749816895, + 0 + ], + "min": [ + 0.6151666641235352, + 5.987770080566406, + -0.25215625762939453 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 358, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 342, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 9.422998405866911e-13, + 0, + 1.0 + ], + "min": [ + -5.029141902923584e-08, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 293, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.77089500427246, + 6.812736501160543e-06 + ], + "min": [ + -2.460183168295771e-07, + 22.77089500427246, + 6.812736501160543e-06 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0.0031102183274924755, + 0.08817757666110992, + 0.9997286200523376 + ], + "min": [ + -0.05645063519477844, + -0.010276895016431808, + -0.04902150109410286, + 0.9950225949287415 + ], + "name": "accessor_buffer_mixamorig:Spine_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 763, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 333, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -9.267012046620948e-08, + -5.819203607870804e-08, + -6.402842700481415e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 507, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 3.513521909713745, + 8.987099647521973, + 0 + ], + "min": [ + 3.5135202407836914, + 8.987060546875, + -0.09783817827701569 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 310, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 478, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.14352749288082123, + 0, + 0, + 0.9572403430938721 + ], + "min": [ + 0.10630404204130173, + -0.23074835538864136, + -0.297109454870224, + 0.9216709136962891 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 518, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 724, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.8726612329483032, + 1.3422750234603882 + ], + "min": [ + -1.3880729675292969, + 1.8726229667663574, + 1.3422346115112305 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 761, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 0, + 0.0509750097990036, + 0.9808171391487122 + ], + "min": [ + -0.2407776117324829, + -0.07764491438865662, + 0.018029099330306053, + 0.9682146310806274 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5121, + "count": 1176, + "max": [ + 2, + 1, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.001_skin_0", + "type": "VEC4" + }, + { + "bufferView": 299, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 2.086983840854373e-06 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 2.086983840854373e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 762, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.123526431620121, + 0, + 0, + 0.9682797789573669 + ], + "min": [ + 0.12280227243900299, + -0.0739516094326973, + -0.21202754974365234, + 0.9667503833770752 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 448, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.115840717602623e-07, + 8.06618481874466e-06, + 0, + 1.0 + ], + "min": [ + 6.903427873794499e-08, + 8.041039109230042e-06, + -1.7695128917694092e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 595, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2323061227798462, + 0, + 0, + 0.9933724999427795 + ], + "min": [ + 0.03818628191947937, + -0.0068419924937188625, + -0.10819492489099503, + 0.9683595895767212 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 164, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0, + 0.018828069791197777, + 0.016310350969433784, + 0.9792515635490417 + ], + "min": [ + -0.3146636486053467, + -0.0798603817820549, + -0.004793552681803703, + 0.9491125345230103 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 331, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 669, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 582, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 2.1517763137817383, + 0 + ], + "min": [ + -0.018165111541748047, + 2.151749610900879, + -3.123283386230469e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 250, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 355, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1.0, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 307, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 796, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.4199485778808594e-05, + 19.023365020751953, + 2.3245811462402344e-05 + ], + "min": [ + -2.9385089874267578e-05, + 19.02332878112793, + -2.5510787963867188e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 665, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5121956467628479, + 0.06007227301597595, + 0.21186907589435577, + 0.9831737279891968 + ], + "min": [ + 0.023686129599809647, + -0.014648482203483582, + 0.11688109487295151, + 0.8317364454269409 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 699, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 268, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 215, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 3.0547380447387695e-06 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 3.0547380447387695e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 787, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0, + 1.8280898332595825, + 0 + ], + "min": [ + -0.006550908088684082, + 1.8280510902404785, + -3.6716461181640625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 334, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 554, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 444, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.4028046280145645e-06, + 20.85727882385254, + 0.5804540514945984 + ], + "min": [ + -8.977949619293213e-07, + 20.857229232788086, + 0.5804494023323059 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 541, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0, + 0.026020700111985207, + 0.005574364215135574, + 0.9995712637901306 + ], + "min": [ + -0.029957721009850502, + -0.04263531044125557, + -0.0220379326492548, + 0.9988893866539001 + ], + "name": "accessor_buffer_mixamorig:Spine2_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 480, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.006523609161376953, + 1.6352403163909912, + 1.621246337890625e-05 + ], + "min": [ + 0.006498813629150391, + 1.6352155208587646, + -7.62939453125e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_Walking_0", + "type": "VEC3" + } + ], + "animations": [ + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 47, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 8, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 8, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 16, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 16, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 16, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 24, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 24, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 24, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 40, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 40, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 40, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 28, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 28, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 28, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 56, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 56, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 56, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 48, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 48, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 48, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 61, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 61, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 61, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 67, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 67, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 67, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 44, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 44, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 44, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 52, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 52, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 52, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 156, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 157, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 158, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 159, + "target": { + "node": 0, + "path": "translation" + } + }, + { + "sampler": 160, + "target": { + "node": 0, + "path": "rotation" + } + }, + { + "sampler": 161, + "target": { + "node": 0, + "path": "scale" + } + }, + { + "sampler": 162, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 163, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 164, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 165, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 166, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 167, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 168, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 169, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 170, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 171, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 172, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 173, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 174, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 175, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 176, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 177, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 178, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 179, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 180, + "target": { + "node": 20, + "path": "translation" + } + }, + { + "sampler": 181, + "target": { + "node": 20, + "path": "rotation" + } + }, + { + "sampler": 182, + "target": { + "node": 20, + "path": "scale" + } + }, + { + "sampler": 183, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 184, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 185, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 186, + "target": { + "node": 66, + "path": "translation" + } + }, + { + "sampler": 187, + "target": { + "node": 66, + "path": "rotation" + } + }, + { + "sampler": 188, + "target": { + "node": 66, + "path": "scale" + } + }, + { + "sampler": 189, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 190, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 191, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 192, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 193, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 194, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 195, + "target": { + "node": 32, + "path": "translation" + } + }, + { + "sampler": 196, + "target": { + "node": 32, + "path": "rotation" + } + }, + { + "sampler": 197, + "target": { + "node": 32, + "path": "scale" + } + } + ], + "name": "Idle", + "samplers": [ + { + "input": 228, + "interpolation": "LINEAR", + "output": 685 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 558 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 141 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 701 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 89 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 55 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 346 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 623 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 46 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 649 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 101 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 779 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 329 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 25 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 474 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 501 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 266 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 313 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 550 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 151 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 618 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 15 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 454 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 481 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 475 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 425 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 65 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 424 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 383 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 319 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 174 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 484 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 658 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 56 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 614 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 67 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 443 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 364 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 289 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 616 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 47 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 132 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 409 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 708 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 520 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 374 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 472 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 121 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 13 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 6 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 362 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 420 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 499 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 741 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 157 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 136 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 288 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 678 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 718 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 73 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 4 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 278 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 173 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 186 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 184 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 248 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 337 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 200 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 452 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 525 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 721 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 147 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 766 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 790 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 33 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 79 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 83 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 48 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 282 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 117 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 69 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 745 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 408 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 52 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 12 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 177 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 207 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 555 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 542 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 307 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 676 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 406 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 80 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 529 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 723 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 774 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 385 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 140 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 280 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 461 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 776 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 206 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 202 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 594 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 208 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 77 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 276 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 606 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 743 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 251 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 87 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 246 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 559 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 607 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 565 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 674 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 476 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 771 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 23 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 807 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 384 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 450 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 324 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 369 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 491 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 698 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 582 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 747 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 122 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 171 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 216 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 660 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 643 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 350 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 682 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 534 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 441 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 315 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 754 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 223 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 390 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 187 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 275 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 630 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 679 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 222 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 16 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 496 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 326 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 250 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 583 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 358 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 788 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 765 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 241 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 577 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 70 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 793 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 694 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 453 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 697 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 43 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 568 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 552 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 615 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 325 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 106 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 549 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 513 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 331 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 211 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 770 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 196 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 226 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 734 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 238 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 309 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 296 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 656 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 230 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 232 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 399 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 641 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 603 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 434 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 283 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 522 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 229 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 557 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 299 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 537 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 530 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 287 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 323 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 333 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 213 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 444 + }, + { + "input": 228, + "interpolation": "LINEAR", + "output": 375 + } + ] + }, + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 47, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 8, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 8, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 16, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 16, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 16, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 24, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 24, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 24, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 40, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 40, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 40, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 28, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 28, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 28, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 56, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 56, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 56, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 48, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 48, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 48, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 61, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 61, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 61, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 67, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 67, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 67, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 44, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 44, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 44, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 52, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 52, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 52, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 156, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 157, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 158, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 159, + "target": { + "node": 0, + "path": "translation" + } + }, + { + "sampler": 160, + "target": { + "node": 0, + "path": "rotation" + } + }, + { + "sampler": 161, + "target": { + "node": 0, + "path": "scale" + } + }, + { + "sampler": 162, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 163, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 164, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 165, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 166, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 167, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 168, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 169, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 170, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 171, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 172, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 173, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 174, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 175, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 176, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 177, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 178, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 179, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 180, + "target": { + "node": 20, + "path": "translation" + } + }, + { + "sampler": 181, + "target": { + "node": 20, + "path": "rotation" + } + }, + { + "sampler": 182, + "target": { + "node": 20, + "path": "scale" + } + }, + { + "sampler": 183, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 184, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 185, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 186, + "target": { + "node": 66, + "path": "translation" + } + }, + { + "sampler": 187, + "target": { + "node": 66, + "path": "rotation" + } + }, + { + "sampler": 188, + "target": { + "node": 66, + "path": "scale" + } + }, + { + "sampler": 189, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 190, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 191, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 192, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 193, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 194, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 195, + "target": { + "node": 32, + "path": "translation" + } + }, + { + "sampler": 196, + "target": { + "node": 32, + "path": "rotation" + } + }, + { + "sampler": 197, + "target": { + "node": 32, + "path": "scale" + } + } + ], + "name": "TPose", + "samplers": [ + { + "input": 102, + "interpolation": "LINEAR", + "output": 300 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 290 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 714 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 387 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 317 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 509 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 592 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 464 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 657 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 804 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 348 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 482 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 699 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 664 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 382 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 168 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 39 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 538 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 617 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 410 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 536 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 673 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 104 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 284 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 412 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 576 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 91 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 612 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 610 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 665 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 402 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 14 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 110 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 343 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 237 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 648 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 209 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 335 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 371 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 479 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 367 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 428 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 478 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 742 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 797 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 650 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 642 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 26 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 578 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 732 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 405 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 340 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 279 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 286 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 165 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 255 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 524 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 158 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 639 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 422 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 647 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 403 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 803 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 486 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 563 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 172 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 44 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 710 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 372 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 128 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 500 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 677 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 415 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 675 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 103 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 114 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 506 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 297 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 556 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 322 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 218 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 449 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 569 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 458 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 149 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 160 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 767 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 775 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 291 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 298 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 22 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 227 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 611 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 787 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 82 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 42 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 54 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 66 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 505 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 332 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 738 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 799 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 254 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 153 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 781 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 554 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 523 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 517 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 681 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 60 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 193 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 224 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 92 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 459 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 494 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 124 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 709 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 28 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 503 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 24 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 146 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 467 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 119 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 212 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 249 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 794 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 71 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 778 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 806 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 619 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 281 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 234 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 321 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 353 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 644 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 189 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 773 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 487 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 378 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 285 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 686 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 757 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 204 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 431 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 123 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 573 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 720 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 336 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 404 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 798 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 192 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 532 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 772 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 203 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 600 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 8 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 511 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 469 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 263 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 580 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 411 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 584 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 108 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 273 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 185 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 436 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 357 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 53 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 365 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 625 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 397 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 688 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 139 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 690 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 724 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 345 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 81 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 318 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 731 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 722 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 427 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 601 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 711 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 712 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 448 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 356 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 277 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 426 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 159 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 264 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 50 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 198 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 31 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 457 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 349 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 764 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 368 + }, + { + "input": 102, + "interpolation": "LINEAR", + "output": 231 + } + ] + }, + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 47, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 8, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 8, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 16, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 16, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 16, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 24, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 24, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 24, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 40, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 40, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 40, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 28, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 28, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 28, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 56, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 56, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 56, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 48, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 48, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 48, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 61, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 61, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 61, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 67, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 67, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 67, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 44, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 44, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 44, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 52, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 52, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 52, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 156, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 157, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 158, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 159, + "target": { + "node": 0, + "path": "translation" + } + }, + { + "sampler": 160, + "target": { + "node": 0, + "path": "rotation" + } + }, + { + "sampler": 161, + "target": { + "node": 0, + "path": "scale" + } + }, + { + "sampler": 162, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 163, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 164, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 165, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 166, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 167, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 168, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 169, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 170, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 171, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 172, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 173, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 174, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 175, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 176, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 177, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 178, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 179, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 180, + "target": { + "node": 20, + "path": "translation" + } + }, + { + "sampler": 181, + "target": { + "node": 20, + "path": "rotation" + } + }, + { + "sampler": 182, + "target": { + "node": 20, + "path": "scale" + } + }, + { + "sampler": 183, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 184, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 185, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 186, + "target": { + "node": 66, + "path": "translation" + } + }, + { + "sampler": 187, + "target": { + "node": 66, + "path": "rotation" + } + }, + { + "sampler": 188, + "target": { + "node": 66, + "path": "scale" + } + }, + { + "sampler": 189, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 190, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 191, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 192, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 193, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 194, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 195, + "target": { + "node": 32, + "path": "translation" + } + }, + { + "sampler": 196, + "target": { + "node": 32, + "path": "rotation" + } + }, + { + "sampler": 197, + "target": { + "node": 32, + "path": "scale" + } + } + ], + "name": "Walking", + "samplers": [ + { + "input": 111, + "interpolation": "LINEAR", + "output": 398 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 244 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 727 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 430 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 164 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 586 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 646 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 728 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 2 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 752 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 571 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 636 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 495 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 112 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 740 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 36 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 418 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 260 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 651 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 133 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 240 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 518 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 463 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 274 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 446 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 355 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 589 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 684 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 593 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 84 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 252 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 733 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 30 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 739 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 744 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 533 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 465 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 115 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 167 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 809 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 18 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 270 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 730 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 791 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 347 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 659 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 170 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 553 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 706 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 62 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 169 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 760 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 86 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 748 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 220 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 366 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 191 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 1 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 669 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 621 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 413 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 562 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 546 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 242 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 726 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 359 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 352 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 188 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 768 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 672 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 311 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 138 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 507 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 782 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 152 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 811 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 516 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 691 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 259 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 504 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 233 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 21 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 560 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 221 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 462 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 432 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 602 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 535 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 528 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 620 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 440 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 376 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 763 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 38 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 342 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 389 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 63 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 57 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 514 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 579 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 205 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 401 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 780 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 194 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 715 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 526 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 755 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 729 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 76 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 269 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 100 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 435 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 438 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 783 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 68 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 489 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 512 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 125 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 162 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 566 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 3 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 551 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 11 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 217 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 456 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 393 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 442 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 544 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 334 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 34 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 201 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 508 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 116 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 51 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 653 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 477 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 810 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 344 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 175 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 107 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 628 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 588 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 493 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 90 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 195 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 215 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 696 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 156 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 634 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 808 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 127 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 400 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 72 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 451 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 661 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 180 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 396 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 144 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 417 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 515 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 753 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 423 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 328 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 377 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 166 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 339 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 654 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 599 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 590 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 304 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 64 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 245 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 78 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 330 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 314 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 445 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 581 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 796 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 662 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 256 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 261 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 695 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 692 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 41 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 394 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 135 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 470 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 98 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 497 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 19 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 792 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 567 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 762 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 596 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 272 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 17 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 746 + }, + { + "input": 111, + "interpolation": "LINEAR", + "output": 292 + } + ] + }, + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 47, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 8, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 8, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 16, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 16, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 16, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 24, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 24, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 24, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 40, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 40, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 40, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 28, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 28, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 28, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 56, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 56, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 56, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 48, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 48, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 48, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 61, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 61, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 61, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 67, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 67, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 67, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 44, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 44, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 44, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 52, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 52, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 52, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 156, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 157, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 158, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 159, + "target": { + "node": 0, + "path": "translation" + } + }, + { + "sampler": 160, + "target": { + "node": 0, + "path": "rotation" + } + }, + { + "sampler": 161, + "target": { + "node": 0, + "path": "scale" + } + }, + { + "sampler": 162, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 163, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 164, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 165, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 166, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 167, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 168, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 169, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 170, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 171, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 172, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 173, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 174, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 175, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 176, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 177, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 178, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 179, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 180, + "target": { + "node": 20, + "path": "translation" + } + }, + { + "sampler": 181, + "target": { + "node": 20, + "path": "rotation" + } + }, + { + "sampler": 182, + "target": { + "node": 20, + "path": "scale" + } + }, + { + "sampler": 183, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 184, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 185, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 186, + "target": { + "node": 66, + "path": "translation" + } + }, + { + "sampler": 187, + "target": { + "node": 66, + "path": "rotation" + } + }, + { + "sampler": 188, + "target": { + "node": 66, + "path": "scale" + } + }, + { + "sampler": 189, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 190, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 191, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 192, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 193, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 194, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 195, + "target": { + "node": 32, + "path": "translation" + } + }, + { + "sampler": 196, + "target": { + "node": 32, + "path": "rotation" + } + }, + { + "sampler": 197, + "target": { + "node": 32, + "path": "scale" + } + } + ], + "name": "Yawn", + "samplers": [ + { + "input": 756, + "interpolation": "LINEAR", + "output": 570 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 301 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 58 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 373 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 572 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 510 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 564 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 214 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 294 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 638 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 210 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 758 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 130 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 670 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 598 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 466 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 20 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 725 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 663 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 492 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 305 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 370 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 480 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 605 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 591 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 308 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 700 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 293 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 99 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 749 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 595 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 386 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 666 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 689 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 320 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 473 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 693 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 545 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 88 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 239 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 145 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 719 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 134 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 219 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 668 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 608 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 327 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 361 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 585 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 392 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 407 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 683 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 429 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 258 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 737 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 471 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 547 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 707 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 94 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 338 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 7 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 801 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 126 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 183 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 437 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 795 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 761 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 199 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 604 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 137 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 655 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 190 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 253 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 671 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 295 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 154 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 267 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 85 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 527 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 316 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 27 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 271 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 303 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 751 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 354 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 182 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 113 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 341 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 155 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 680 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 97 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 388 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 575 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 49 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 360 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 802 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 29 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 310 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 705 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 235 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 687 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 485 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 225 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 502 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 622 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 236 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 597 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 519 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 419 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 717 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 702 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 587 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 490 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 439 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 105 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 109 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 667 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 35 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 243 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 561 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 784 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 609 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 61 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 247 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 460 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 391 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 704 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 395 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 421 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 447 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 627 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 363 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 161 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 179 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 74 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 613 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 40 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 59 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 716 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 178 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 302 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 632 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 75 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 95 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 455 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 633 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 93 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 10 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 735 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 380 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 414 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 262 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 381 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 574 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 468 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 37 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 131 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 785 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 789 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 777 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 5 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 312 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 483 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 498 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 629 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 197 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 631 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 652 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 142 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 543 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 257 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 129 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 120 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 181 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 32 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 143 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 150 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 713 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 148 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 176 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 759 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 540 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 624 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 805 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 351 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 306 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 268 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 163 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 703 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 750 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 640 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 265 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 800 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 736 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 0 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 635 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 637 + }, + { + "input": 756, + "interpolation": "LINEAR", + "output": 521 + } + ] + } + ], + "asset": { + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 146960, + "byteOffset": 0, + "byteStride": 44, + "name": "bufferView_buffer_F010_Saber.003_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 28752, + "byteOffset": 146960, + "name": "bufferView_buffer_F010_Saber.003_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 106880, + "byteOffset": 175712, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.003_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 51744, + "byteOffset": 282592, + "byteStride": 44, + "name": "bufferView_buffer_F010_Saber.001_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10008, + "byteOffset": 334336, + "name": "bufferView_buffer_F010_Saber.001_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 37632, + "byteOffset": 344344, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.001_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 2004, + "byteOffset": 381976, + "byteStride": 4, + "name": "bufferView_buffer_Idle_time_0" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 383980, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 389992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 398008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 404020, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 410032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 418048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 424060, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 430072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 438088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 444100, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 450112, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 458128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 464140, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 470152, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 478168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 484180, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 490192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 498208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 504220, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 510232, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 518248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 524260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 530272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 538288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 544300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 550312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 558328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 564340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 570352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 578368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 584380, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 590392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 598408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 604420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 610432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 618448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 624460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 630472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 638488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 644500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 650512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 658528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 664540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 670552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 678568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 684580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 690592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 698608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 704620, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 710632, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 718648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 724660, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 730672, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 738688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 744700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 750712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 758728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 764740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 770752, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 778768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 784780, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 790792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 798808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 804820, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 810832, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 818848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 824860, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 830872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 838888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 844900, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 850912, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 858928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 864940, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 870952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 878968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 884980, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 890992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 899008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 905020, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 911032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 919048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 925060, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 931072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 939088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 945100, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 951112, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 959128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 965140, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 971152, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 979168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 985180, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 991192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 999208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1005220, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1011232, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1019248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1025260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1031272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1039288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1045300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1051312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1059328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1065340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1071352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1079368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1085380, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1091392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1099408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1105420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1111432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1119448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1125460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1131472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1139488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1145500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1151512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1159528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1165540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1171552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1179568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1185580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1191592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1199608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1205620, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1211632, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1219648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1225660, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1231672, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1239688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1245700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1251712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1259728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1265740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1271752, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1279768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1285780, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1291792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1299808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1305820, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1311832, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1319848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1325860, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1331872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1339888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1345900, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1351912, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1359928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1365940, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1371952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1379968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1385980, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1391992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1400008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1406020, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1412032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1420048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1426060, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1432072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1440088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1446100, + "byteStride": 12, + "name": "bufferView_buffer_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1452112, + "byteStride": 16, + "name": "bufferView_buffer_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1460128, + "byteStride": 12, + "name": "bufferView_buffer_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1466140, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1472152, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1480168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1486180, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1492192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1500208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1506220, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1512232, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1520248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1526260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1532272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1540288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1546300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1552312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1560328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1566340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1572352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1580368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1586380, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1592392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1600408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1606420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1612432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1620448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1626460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1632472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1640488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1646500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1652512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1660528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1666540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1672552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1680568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1686580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1692592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1700608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Idle_2" + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 1706620, + "byteStride": 4, + "name": "bufferView_buffer_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1706652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1706732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1706812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1706892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1706948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1706972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1707932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1707988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1708948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1708972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1709932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1709988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710868, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710892, + "byteStride": 16, + "name": "bufferView_buffer_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710924, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1710948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1710972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1711852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1711884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 1711908, + "byteStride": 4, + "name": "bufferView_buffer_Walking_time_0" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1712028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1712388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1712868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1713228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1713588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1714068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1714428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1714788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1715268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1715628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1715988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1716468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1716828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1717188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1717668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1718028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1718388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1718868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1719228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1719588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1720068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1720428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1720788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1721268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1721628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1721988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1722468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1722828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1723188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1723668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1724028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1724388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1724868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1725228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1725588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1726068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1726428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1726788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1727268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1727628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1727988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1728468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1728828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1729188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1729668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1730028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1730388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1730868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1731228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1731588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1732068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1732428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1732788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1733268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1733628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1733988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1734468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1734828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1735188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1735668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1736028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1736388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1736868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1737228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1737588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1738068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1738428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1738788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1739268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1739628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1739988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1740468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1740828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1741188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1741668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1742028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1742388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1742868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1743228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1743588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1744068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1744428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1744788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1745268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1745628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1745988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1746468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1746828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1747188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1747668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1748028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1748388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1748868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1749228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1749588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1750068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1750428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1750788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1751268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1751628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1751988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1752468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1752828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1753188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1753668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1754028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1754388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1754868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1755228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1755588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1756068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1756428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1756788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1757268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1757628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1757988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1758468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1758828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1759188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1759668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1760028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1760388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1760868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1761228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1761588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1762068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1762428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1762788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1763268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1763628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1763988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1764468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1764828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1765188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1765668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1766028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1766388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1766868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1767228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1767588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1768068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1768428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1768788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1769268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1769628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1769988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1770468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1770828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1771188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1771668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1772028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1772388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1772868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1773228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1773588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1774068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1774428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1774788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1775268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1775628, + "byteStride": 12, + "name": "bufferView_buffer_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1775988, + "byteStride": 16, + "name": "bufferView_buffer_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1776468, + "byteStride": 12, + "name": "bufferView_buffer_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1776828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1777188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1777668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1778028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1778388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1778868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1779228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1779588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1780068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1780428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1780788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1781268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1781628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1781988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1782468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1782828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1783188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1783668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1784028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1784388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1784868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1785228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1785588, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1786068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1786428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1786788, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1787268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1787628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1787988, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1788468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1788828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1789188, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1789668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1790028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1790388, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1790868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Walking_2" + }, + { + "buffer": 0, + "byteLength": 1004, + "byteOffset": 1791228, + "byteStride": 4, + "name": "bufferView_buffer_Yawn_time_0" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1792232, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1795244, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1799260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1802272, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1805284, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1809300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1812312, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1815324, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1819340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1822352, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1825364, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1829380, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1832392, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1835404, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1839420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1842432, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1845444, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1849460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1852472, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1855484, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1859500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1862512, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1865524, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1869540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1872552, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1875564, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1879580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1882592, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1885604, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1889620, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1892632, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1895644, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1899660, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1902672, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1905684, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1909700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1912712, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1915724, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1919740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1922752, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1925764, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1929780, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1932792, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1935804, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1939820, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1942832, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1945844, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1949860, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1952872, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1955884, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1959900, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1962912, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1965924, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1969940, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1972952, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1975964, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1979980, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1982992, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1986004, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1990020, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1993032, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1996044, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2000060, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2003072, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2006084, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2010100, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2013112, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2016124, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2020140, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2023152, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2026164, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2030180, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2033192, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2036204, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2040220, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2043232, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2046244, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2050260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2053272, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2056284, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2060300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2063312, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2066324, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2070340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2073352, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2076364, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2080380, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2083392, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2086404, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2090420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2093432, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2096444, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2100460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2103472, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2106484, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2110500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2113512, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2116524, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2120540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2123552, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2126564, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2130580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2133592, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2136604, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2140620, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2143632, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2146644, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2150660, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2153672, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2156684, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2160700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2163712, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2166724, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2170740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2173752, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2176764, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2180780, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2183792, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2186804, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2190820, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2193832, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2196844, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2200860, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2203872, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2206884, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2210900, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2213912, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2216924, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2220940, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2223952, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2226964, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2230980, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2233992, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2237004, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2241020, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2244032, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2247044, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2251060, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2254072, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2257084, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2261100, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2264112, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2267124, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2271140, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2274152, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2277164, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2281180, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2284192, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2287204, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2291220, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2294232, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2297244, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2301260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2304272, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2307284, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2311300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2314312, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2317324, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2321340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2324352, + "byteStride": 12, + "name": "bufferView_buffer_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2327364, + "byteStride": 16, + "name": "bufferView_buffer_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2331380, + "byteStride": 12, + "name": "bufferView_buffer_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2334392, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2337404, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2341420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2344432, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2347444, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2351460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2354472, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2357484, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2361500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2364512, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2367524, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2371540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2374552, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2377564, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2381580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2384592, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2387604, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2391620, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2394632, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2397644, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2401660, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2404672, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2407684, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2411700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2414712, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2417724, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2421740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2424752, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2427764, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2431780, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2434792, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2437804, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2441820, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2444832, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 2447844, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 2451860, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3328, + "byteOffset": 2454872, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Body_skin_0" + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 2458200, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Face_skin_0" + } + ], + "buffers": [ + { + "byteLength": 2458392, + "name": "buffer_combined_saber_body", + "uri": "buffer_combined_saber_body.bin" + } + ], + "images": [ + { + "name": "saber-pure-body.png", + "uri": "saber-pure-body.png" + }, + { + "name": "saber_01_face.png", + "uri": "saber_01_face.png" + }, + { + "name": "body_id_lut", + "uri" : "body_id.png" + } + ], + "materials": [ + { + "name": "face.001", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0.0, + "roughnessFactor": 1.0 + } + }, + { + "name": "saber-pure-body", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "baseColorTexture": { + "index": 1, + "texCoord": 0 + }, + "metallicFactor": 0.0, + "roughnessFactor": 1.0 + }, + "extensions": { + "gl_avatar": { + "bodyIdLUT": 2 + } + } + } + ], + "meshes": [ + { + "name": "F010_Saber.003", + "primitives": [ + { + "attributes": { + "COLOR_0": 488, + "JOINTS_0": 96, + "NORMAL": 531, + "POSITION": 45, + "TEXCOORD_0": 379, + "WEIGHTS_0": 769 + }, + "indices": 541, + "material": 1, + "mode": 4 + } + ] + }, + { + "name": "F010_Saber.001", + "primitives": [ + { + "attributes": { + "COLOR_0": 548, + "JOINTS_0": 786, + "NORMAL": 645, + "POSITION": 539, + "TEXCOORD_0": 118, + "WEIGHTS_0": 9 + }, + "indices": 433, + "material": 0, + "mode": 4 + } + ] + } + ], + "nodes": [ + { + "children": [ + 1, + 2, + 3 + ], + "name": "Character", + "rotation": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "mesh": 0, + "name": "F010_Saber_Body", + "rotation": [ + 8.198130529990522e-08, + 6.977134425767417e-10, + -3.4885669353279525e-10, + 1.0 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "skin": 0, + "translation": [ + -2.8014183044433594e-06, + -1.4305113836599048e-05, + 1.072883719643869e-06 + ], + "extensions": { + "gl_avatar": { + "skin": 2 + } + } + }, + { + "mesh": 1, + "name": "F010_Saber_Face", + "rotation": [ + 8.136032647598768e-08, + -1.5777218104420236e-30, + 1.0171798302661709e-16, + 1.0 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "skin": 1, + "translation": [ + 0.0, + 2.7755575615628914e-15, + -4.52195720095739e-22 + ] + }, + { + "children": [ + 4, + 58, + 63 + ], + "name": "Armature_mixamorig:Hips", + "rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.007442474365234375, + 98.82971954345703, + 0.6201396584510803 + ] + }, + { + "children": [ + 5 + ], + "name": "Armature_mixamorig:Spine", + "rotation": [ + -0.039921652525663376, + 0.0, + 0.0, + 0.9992028474807739 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.0, + 6.854499816894531, + -0.5485978126525879 + ] + }, + { + "children": [ + 6 + ], + "name": "Armature_mixamorig:Spine1", + "rotation": [ + 1.4901162970204496e-08, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -4.656612873077393e-10, + 8.022480964660645, + -2.384185791015625e-07 + ] + }, + { + "children": [ + 7, + 10, + 34 + ], + "name": "Armature_mixamorig:Spine2", + "rotation": [ + -5.029141902923584e-08, + 9.423000574271256e-13, + -2.358492047493943e-11, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -4.656612873077393e-10, + 9.168560028076172, + -4.76837158203125e-07 + ] + }, + { + "children": [ + 8 + ], + "name": "Armature_mixamorig:Neck", + "rotation": [ + 0.03992168977856636, + 1.427615485679809e-13, + 2.0030548400495896e-11, + 0.9992028474807739 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -2.2881511962946632e-10, + 10.314631462097168, + 1.1920928955078125e-06 + ] + }, + { + "children": [ + 9 + ], + "name": "Armature_mixamorig:Head", + "rotation": [ + -3.749335064640036e-09, + -6.35555176367169e-21, + 5.4569682106375694e-12, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -5.1451731764018405e-11, + 4.3087005615234375, + 0.11991112679243088 + ] + }, + { + "name": "Armature_mixamorig:HeadTop_End", + "rotation": [ + 0.0, + 2.610143520150023e-28, + -1.8189894035458565e-12, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 1.2972056762095008e-10, + 20.857254028320312, + 0.5804517269134521 + ] + }, + { + "children": [ + 11 + ], + "name": "Armature_mixamorig:LeftShoulder", + "rotation": [ + 0.5740949511528015, + 0.4067640006542206, + -0.5904093384742737, + 0.39544278383255005 + ], + "scale": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "translation": [ + 3.513521194458008, + 8.987089157104492, + -0.09783673286437988 + ] + }, + { + "children": [ + 12 + ], + "name": "Armature_mixamorig:LeftArm", + "rotation": [ + -0.19647400081157684, + -0.0007150349556468427, + 0.0035684211179614067, + 0.9805023074150085 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 0.9999999403953552 + ], + "translation": [ + -5.960464477539062e-07, + 7.4837188720703125, + -1.049041748046875e-05 + ] + }, + { + "children": [ + 13 + ], + "name": "Armature_mixamorig:LeftForeArm", + "rotation": [ + -0.005400624126195908, + -0.0001584456767886877, + 0.029325975105166435, + 0.9995554089546204 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -5.364418029785156e-07, + 22.7723331451416, + 5.662441253662109e-07 + ] + }, + { + "children": [ + 14, + 18, + 22, + 26, + 30 + ], + "name": "Armature_mixamorig:LeftHand", + "rotation": [ + -0.0046674893237650394, + -0.036291614174842834, + -0.01584092527627945, + 0.9992048144340515 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 4.76837158203125e-07, + 19.02334213256836, + 8.046627044677734e-07 + ] + }, + { + "children": [ + 15 + ], + "name": "Armature_mixamorig:LeftHandThumb1", + "rotation": [ + 0.24564014375209808, + 0.0797870084643364, + 0.2984432578086853, + 0.9188180565834045 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -1.3880550861358643, + 1.872644305229187, + 1.3422610759735107 + ] + }, + { + "children": [ + 16 + ], + "name": "Armature_mixamorig:LeftHandThumb2", + "rotation": [ + 0.00489170802757144, + 4.4890290951116185e-07, + 4.610102450897102e-07, + 0.9999881386756897 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -0.018166542053222656, + 2.1517605781555176, + -2.1755695343017578e-05 + ] + }, + { + "children": [ + 17 + ], + "name": "Armature_mixamorig:LeftHandThumb3", + "rotation": [ + 0.021618247032165527, + -5.850072852808808e-07, + -3.9590455003235547e-07, + 0.9997663497924805 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "translation": [ + 0.07795095443725586, + 2.1093316078186035, + 1.8775463104248047e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftHandThumb4", + "rotation": [ + 4.284083487959833e-08, + -1.769512749660862e-07, + -3.3527612686157227e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + -0.0597844123840332, + 1.8846036195755005, + -1.1980533599853516e-05 + ] + }, + { + "children": [ + 19 + ], + "name": "Armature_mixamorig:LeftHandIndex1", + "rotation": [ + 0.026657480746507645, + 0.0018764277920126915, + 0.07018843293190002, + 0.9971757531166077 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -2.3818466663360596, + 6.0911946296691895, + 0.09325551986694336 + ] + }, + { + "children": [ + 20 + ], + "name": "Armature_mixamorig:LeftHandIndex2", + "rotation": [ + -0.034092869609594345, + -7.741025598306805e-08, + 1.2725772080557363e-07, + 0.9994186758995056 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -0.009856224060058594, + 2.002563238143921, + 1.9297003746032715e-06 + ] + }, + { + "children": [ + 21 + ], + "name": "Armature_mixamorig:LeftHandIndex3", + "rotation": [ + -0.011232745833694935, + 8.382431815334712e-08, + -1.2014818651095993e-07, + 0.9999369382858276 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.0033556222915649414, + 1.906246304512024, + -2.428889274597168e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftHandIndex4", + "rotation": [ + -1.6298145055770874e-08, + -2.116430550813675e-07, + -1.4435499906539917e-07, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.006502628326416016, + 1.6352357864379883, + -7.256865501403809e-06 + ] + }, + { + "children": [ + 23 + ], + "name": "Armature_mixamorig:LeftHandMiddle1", + "rotation": [ + 0.030671721324324608, + 0.0003823289880529046, + 0.012456541880965233, + 0.9994519352912903 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "translation": [ + -0.620979368686676, + 5.9338483810424805, + -0.18955062329769135 + ] + }, + { + "children": [ + 24 + ], + "name": "Armature_mixamorig:LeftHandMiddle2", + "rotation": [ + -0.01664525642991066, + 1.53325672158644e-08, + 1.832339968643737e-08, + 0.999861478805542 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.018555283546447754, + 2.2824888229370117, + -2.2992491722106934e-05 + ] + }, + { + "children": [ + 25 + ], + "name": "Armature_mixamorig:LeftHandMiddle3", + "rotation": [ + -0.10026512295007706, + -6.588842182964072e-08, + 1.4567116579655703e-07, + 0.9949608445167542 + ], + "scale": [ + 1.0, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + -0.010961532592773438, + 2.2484676837921143, + -1.6957521438598633e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandMiddle4", + "rotation": [ + -4.5380154745089385e-08, + 5.855691398437557e-08, + 8.149073416063857e-09, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + 0.02951037883758545, + 2.0856528282165527, + 1.0073184967041016e-05 + ] + }, + { + "children": [ + 27 + ], + "name": "Armature_mixamorig:LeftHandRing1", + "rotation": [ + 0.10404136031866074, + -0.008528899401426315, + -0.08125600963830948, + 0.9912115335464478 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.8905025720596313, + 5.982393264770508, + -0.24304264783859253 + ] + }, + { + "children": [ + 28 + ], + "name": "Armature_mixamorig:LeftHandRing2", + "rotation": [ + -0.03329118713736534, + -6.639353955506522e-08, + -3.7273565567375044e-08, + 0.9994457960128784 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.017888784408569336, + 2.1800594329833984, + -1.7344951629638672e-05 + ] + }, + { + "children": [ + 29 + ], + "name": "Armature_mixamorig:LeftHandRing3", + "rotation": [ + -0.08213821053504944, + 5.25645127424923e-08, + 6.078793717279041e-07, + 0.9966209530830383 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.0040547847747802734, + 1.9782464504241943, + -3.8623809814453125e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandRing4", + "rotation": [ + -1.4202669262886047e-07, + -1.4062970876693726e-07, + -1.5425030142068863e-07, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "translation": [ + 0.02194046974182129, + 1.7619253396987915, + 2.6524066925048828e-05 + ] + }, + { + "children": [ + 31 + ], + "name": "Armature_mixamorig:LeftHandPinky1", + "rotation": [ + 0.13995902240276337, + -0.024145862087607384, + -0.16828545928001404, + 0.9754529595375061 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 2.112321376800537, + 5.15140962600708, + -0.10163509845733643 + ] + }, + { + "children": [ + 32 + ], + "name": "Armature_mixamorig:LeftHandPinky2", + "rotation": [ + -0.012911615893244743, + 6.519802298043942e-08, + 6.445289386647346e-07, + 0.999916672706604 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + -0.006536006927490234, + 1.828072190284729, + -1.633167266845703e-05 + ] + }, + { + "children": [ + 33 + ], + "name": "Armature_mixamorig:LeftHandPinky3", + "rotation": [ + -0.09343928843736649, + 1.850952742188383e-07, + -2.745443339335907e-07, + 0.9956250786781311 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -0.006233692169189453, + 1.5249935388565063, + 2.5272369384765625e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandPinky4", + "rotation": [ + 5.541368963690729e-08, + -5.9371814131736755e-09, + 1.3969838619232178e-09, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 0.012760639190673828, + 1.3818011283874512, + -5.304813385009766e-06 + ] + }, + { + "children": [ + 35 + ], + "name": "Armature_mixamorig:RightShoulder", + "rotation": [ + 0.5726097226142883, + -0.40782278776168823, + 0.5916988849639893, + 0.394577294588089 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -3.513521194458008, + 8.98842716217041, + -0.11455440521240234 + ] + }, + { + "children": [ + 36 + ], + "name": "Armature_mixamorig:RightArm", + "rotation": [ + -0.19615903496742249, + 0.0015209860866889358, + -0.007602959871292114, + 0.980541467666626 + ], + "scale": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + 6.854534149169922e-07, + 7.4837188720703125, + -6.9588422775268555e-06 + ] + }, + { + "children": [ + 37 + ], + "name": "Armature_mixamorig:RightForeArm", + "rotation": [ + -0.005199347157031298, + 0.00015941221499815583, + -0.03064456395804882, + 0.9995168447494507 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + -1.0132789611816406e-06, + 22.770898818969727, + -2.6673078536987305e-06 + ] + }, + { + "children": [ + 38, + 42, + 46, + 50, + 54 + ], + "name": "Armature_mixamorig:RightHand", + "rotation": [ + -0.027066726237535477, + 0.03516821190714836, + 0.024613087996840477, + 0.9987115859985352 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 5.960464477539062e-07, + 19.027141571044922, + -1.1309981346130371e-05 + ] + }, + { + "children": [ + 39 + ], + "name": "Armature_mixamorig:RightHandThumb1", + "rotation": [ + 0.24496246874332428, + -0.07342495024204254, + -0.27757158875465393, + 0.9260433316230774 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 1.4313437938690186, + 1.9488826990127563, + 1.373734474182129 + ] + }, + { + "children": [ + 40 + ], + "name": "Armature_mixamorig:RightHandThumb2", + "rotation": [ + 0.02597731165587902, + 4.695450286362757e-07, + 4.360061325314746e-07, + 0.9996625781059265 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.09870082139968872, + 2.2226028442382812, + 1.8328428268432617e-05 + ] + }, + { + "children": [ + 41 + ], + "name": "Armature_mixamorig:RightHandThumb3", + "rotation": [ + 0.0020599281415343285, + -4.209587416426075e-07, + -2.747407563674642e-07, + 0.9999979734420776 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.08420944213867188, + 1.993523359298706, + -2.4646520614624023e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandThumb4", + "rotation": [ + 6.705523247774181e-08, + -7.450580596923828e-09, + 6.05359673500061e-08, + 1.0 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + -0.1829054355621338, + 1.5351988077163696, + 9.775161743164062e-06 + ] + }, + { + "children": [ + 43 + ], + "name": "Armature_mixamorig:RightHandIndex1", + "rotation": [ + 0.04785900563001633, + -0.003934510983526707, + -0.08183817565441132, + 0.9954881072044373 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 2.2894375324249268, + 5.801694393157959, + 0.050646696239709854 + ] + }, + { + "children": [ + 44 + ], + "name": "Armature_mixamorig:RightHandIndex2", + "rotation": [ + -0.028287818655371666, + 7.496872456158599e-08, + 2.392710314325086e-07, + 0.9995998740196228 + ], + "scale": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 0.029898226261138916, + 2.2504000663757324, + 2.1301209926605225e-05 + ] + }, + { + "children": [ + 45 + ], + "name": "Armature_mixamorig:RightHandIndex3", + "rotation": [ + -0.14387890696525574, + 7.74066961639619e-08, + 1.5951893317378563e-07, + 0.9895954132080078 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 0.01506185531616211, + 2.0928609371185303, + 1.971423625946045e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandIndex4", + "rotation": [ + -2.57976381590197e-07, + -8.847565879932517e-08, + -1.480803035747158e-07, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.04495549201965332, + 1.9040567874908447, + -1.9669532775878906e-05 + ] + }, + { + "children": [ + 47 + ], + "name": "Armature_mixamorig:RightHandMiddle1", + "rotation": [ + 0.06535934656858444, + -0.0012092242250218987, + -0.018458466976881027, + 0.9976903200149536 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.6151741147041321, + 5.987786293029785, + -0.2521481215953827 + ] + }, + { + "children": [ + 48 + ], + "name": "Armature_mixamorig:RightHandMiddle2", + "rotation": [ + -0.02911515347659588, + -1.493660128915053e-08, + 1.2578189512169047e-07, + 0.9995761513710022 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 0.025691747665405273, + 2.3235480785369873, + 5.8710575103759766e-06 + ] + }, + { + "children": [ + 49 + ], + "name": "Armature_mixamorig:RightHandMiddle3", + "rotation": [ + -0.12079086899757385, + 3.73517679008728e-08, + 3.685922251861484e-07, + 0.9926779866218567 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999998211860657 + ], + "translation": [ + 0.011220812797546387, + 2.2008121013641357, + 2.9072165489196777e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandMiddle4", + "rotation": [ + 2.531742211431265e-07, + -1.9557775843281888e-08, + 2.561137080192566e-09, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "translation": [ + -0.036910414695739746, + 2.00234055519104, + 2.60770320892334e-06 + ] + }, + { + "children": [ + 51 + ], + "name": "Armature_mixamorig:RightHandRing1", + "rotation": [ + 0.08960019052028656, + 0.007558114361017942, + 0.0837147906422615, + 0.9924246072769165 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.8287993669509888, + 5.778010845184326, + -0.2080925703048706 + ] + }, + { + "children": [ + 52 + ], + "name": "Armature_mixamorig:RightHandRing2", + "rotation": [ + 0.02305533178150654, + -1.0247272363983484e-08, + -2.6083968762691256e-08, + 0.9997342824935913 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 0.008643150329589844, + 2.2196152210235596, + -9.953975677490234e-06 + ] + }, + { + "children": [ + 53 + ], + "name": "Armature_mixamorig:RightHandRing3", + "rotation": [ + -0.12460635602474213, + 6.288876619464645e-08, + 3.815565037257329e-07, + 0.992206335067749 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.016327381134033203, + 2.091179847717285, + 4.410743713378906e-06 + ] + }, + { + "name": "Armature_mixamorig:RightHandRing4", + "rotation": [ + -8.42846930027008e-08, + -6.05359673500061e-08, + -6.356277282293377e-08, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 1.0 + ], + "translation": [ + -0.02497267723083496, + 1.9166507720947266, + -1.8537044525146484e-05 + ] + }, + { + "children": [ + 55 + ], + "name": "Armature_mixamorig:RightHandPinky1", + "rotation": [ + 0.1575794368982315, + 0.028793327510356903, + 0.17742541432380676, + 0.9710097312927246 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -2.075824737548828, + 5.181243896484375, + -0.156680166721344 + ] + }, + { + "children": [ + 56 + ], + "name": "Armature_mixamorig:RightHandPinky2", + "rotation": [ + -0.021833697333931923, + -8.849674060229518e-08, + -3.185882917478011e-07, + 0.9997616410255432 + ], + "scale": [ + 1.0, + 0.9999998211860657, + 0.9999999403953552 + ], + "translation": [ + 0.009781837463378906, + 1.9066412448883057, + 3.445148468017578e-05 + ] + }, + { + "children": [ + 57 + ], + "name": "Armature_mixamorig:RightHandPinky3", + "rotation": [ + -0.0985320433974266, + -1.1792045739866808e-07, + -2.5736605735460216e-08, + 0.9951338768005371 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + 0.004714488983154297, + 1.55594801902771, + 1.9788742065429688e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandPinky4", + "rotation": [ + 1.695007227908718e-07, + -6.053597445543346e-08, + 1.6530977475781583e-08, + 1.0 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -0.014493942260742188, + 1.4579054117202759, + -3.3020973205566406e-05 + ] + }, + { + "children": [ + 59 + ], + "name": "Armature_mixamorig:LeftUpLeg", + "rotation": [ + -8.872594662534539e-06, + 0.0009148783865384758, + 0.9998617172241211, + 0.016607170924544334 + ], + "scale": [ + 1.0001250505447388, + 1.0, + 1.000000238418579 + ], + "translation": [ + 6.5092010498046875, + -3.8089065551757812, + -0.3193536400794983 + ] + }, + { + "children": [ + 60 + ], + "name": "Armature_mixamorig:LeftLeg", + "rotation": [ + -0.019678570330142975, + -0.00024797735386528075, + 0.012827177532017231, + 0.9997241497039795 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 4.90503225591965e-07, + 45.04969024658203, + -3.3028754842234775e-08 + ] + }, + { + "children": [ + 61 + ], + "name": "Armature_mixamorig:LeftFoot", + "rotation": [ + 0.4820258617401123, + 0.06575184315443039, + -0.03629865497350693, + 0.872931957244873 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "translation": [ + -3.387158358236775e-07, + 41.849327087402344, + -3.457535058259964e-08 + ] + }, + { + "children": [ + 62 + ], + "name": "Armature_mixamorig:LeftToeBase", + "rotation": [ + 0.29159197211265564, + -0.06168047711253166, + 0.01884075440466404, + 0.9543660879135132 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 8.810311555862427e-07, + 12.08905029296875, + -3.889203071594238e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftToe_End", + "rotation": [ + 9.872019290924072e-08, + 8.056988008320332e-06, + -1.909211277961731e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -3.5762786865234375e-07, + 4.706444263458252, + 5.960464477539063e-08 + ] + }, + { + "children": [ + 64 + ], + "name": "Armature_mixamorig:RightUpLeg", + "rotation": [ + -2.94413257506676e-06, + -0.0034815834369510412, + -0.9998561143875122, + 0.01660647802054882 + ], + "scale": [ + 1.000124216079712, + 1.0, + 1.0000035762786865 + ], + "translation": [ + -6.5092010498046875, + -3.8089065551757812, + -0.4497392773628235 + ] + }, + { + "children": [ + 65 + ], + "name": "Armature_mixamorig:RightLeg", + "rotation": [ + -0.022010719403624535, + 0.00022552665905095637, + -0.012826679274439812, + 0.999675452709198 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 1.0 + ], + "translation": [ + 4.079265636391938e-08, + 45.050357818603516, + -1.5308614820241928e-08 + ] + }, + { + "children": [ + 66 + ], + "name": "Armature_mixamorig:RightFoot", + "rotation": [ + 0.48082953691482544, + -0.06620366871356964, + 0.03643133118748665, + 0.8735518455505371 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.000000238418579 + ], + "translation": [ + -9.810537449084222e-08, + 41.85009765625, + 4.062894731760025e-08 + ] + }, + { + "children": [ + 67 + ], + "name": "Armature_mixamorig:RightToeBase", + "rotation": [ + 0.29314252734184265, + 0.06225594878196716, + -0.01912800408899784, + 0.9538480043411255 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "translation": [ + -6.51925802230835e-08, + 12.033415794372559, + 3.4570693969726562e-06 + ] + }, + { + "name": "Armature_mixamorig:RightToe_End", + "rotation": [ + -3.748573362827301e-08, + -8.230912499129772e-06, + -2.9453076422214508e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 1.043081283569336e-07, + 4.712545394897461, + 3.2782554626464844e-07 + ] + }, + { + "children": [ + 0 + ], + "matrix": [ + -1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "Scene_root" + } + ], + "samplers": [ + { + "name": "default" + }, + { + "magFilter": 9728, + "minFilter": 9728 + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "active_camera": null, + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 68 + ] + } + ], + "skins": [ + { + "inverseBindMatrices": 416, + "joints": [ + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 19, + 20, + 22, + 23, + 24, + 26, + 27, + 28, + 30, + 31, + 32, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 43, + 44, + 46, + 47, + 48, + 50, + 51, + 52, + 54, + 55, + 56, + 58, + 59, + 60, + 61, + 63, + 64, + 65, + 66 + ], + "name": "F010_Saber_Body", + "skeleton": 3 + }, + { + "inverseBindMatrices": 626, + "joints": [ + 6, + 7, + 8 + ], + "name": "F010_Saber_Face", + "skeleton": 3 + }, + { + "joints": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67 + ], + "name": "full", + "skeleton": 3 + } + ], + "textures": [ + { + "name": "Saber-Face", + "sampler": 0, + "source": 1 + }, + { + "name": "saber-pure-body.png", + "sampler": 0, + "source": 0 + }, + { + "sampler" : 1, + "source" : 2 + } + ] +} diff --git a/models/gltf/saber-body-mixamo-animations/saber-pure-body.png b/models/gltf/saber-body-mixamo-animations/saber-pure-body.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f5e42ab3678f94ee774738ab0f3508a8d0918e Binary files /dev/null and b/models/gltf/saber-body-mixamo-animations/saber-pure-body.png differ diff --git a/models/gltf/saber-body-mixamo-animations/saber_01_face.png b/models/gltf/saber-body-mixamo-animations/saber_01_face.png new file mode 100644 index 0000000000000000000000000000000000000000..baba4465c57f1a481033cf7d77ff5ff2c85e72e4 Binary files /dev/null and b/models/gltf/saber-body-mixamo-animations/saber_01_face.png differ diff --git a/models/gltf/saber-dress-mixamo/buffer_combined_dress.bin b/models/gltf/saber-dress-mixamo/buffer_combined_dress.bin new file mode 100644 index 0000000000000000000000000000000000000000..5a7cd1f5c251230a7d4927dcf0489aead8c6299b --- /dev/null +++ b/models/gltf/saber-dress-mixamo/buffer_combined_dress.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95d60b41b4568307d86023838a4d17e80d50b2ca91c4fe7c6ea18c614f69b0c4 +size 228304 diff --git a/models/gltf/saber-dress-mixamo/saber-dress-texture.png b/models/gltf/saber-dress-mixamo/saber-dress-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..03ba13cc2d939f828261ae7ee29ab89cf8553f8f --- /dev/null +++ b/models/gltf/saber-dress-mixamo/saber-dress-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33d4b9521ea57051e246a841a9f73cacb04f986d7cf7a530061219dedf2338d0 +size 1038135 diff --git a/models/gltf/saber-dress-mixamo/saber-dress.gltf b/models/gltf/saber-dress-mixamo/saber-dress.gltf new file mode 100644 index 0000000000000000000000000000000000000000..c3957d2341d265810006ebf9dca1faf4b8c6be48 --- /dev/null +++ b/models/gltf/saber-dress-mixamo/saber-dress.gltf @@ -0,0 +1,5488 @@ +{ + "accessors": [ + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.80437906032391e-23, + 0, + 1 + ], + "min": [ + -8.673616862896153e-19, + 6.80437906032391e-23, + -1.8189894035458565e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 167, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-7, + 0, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + 0 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 186, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + 0, + 0, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 166, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + 0, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00001167778464150615, + 0, + 0.9999808073043823, + 0 + ], + "min": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000019077392607869115, + 0, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.000002737616568992962, + 0, + 0, + 0.9967700242996216 + ], + "min": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 182, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000014512252164422534, + 0.0003296945069450885, + 0, + 0.9999457001686096 + ], + "min": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1800546646118164, + 0 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.725291364276018e-8, + 0, + 3.259629011154175e-8, + 1 + ], + "min": [ + 3.725291364276018e-8, + -5.58793766813892e-9, + 3.259629011154175e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00034277912345714867, + 0, + 0.9999790191650391 + ], + "min": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.043081283569336e-7, + 4.706444263458252, + 1.4901161193847656e-8 + ], + "min": [ + 1.043081283569336e-7, + 4.706444263458252, + 1.4901161193847656e-8 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-7, + 7.483717918395996, + 0 + ], + "min": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.041666666666666664 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + 0 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.181240558624268, + 0 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 12, + "componentType": 5126, + "count": 3054, + "max": [ + 0.9999508857727051, + 0.9998086094856262, + 0.9994415640830994 + ], + "min": [ + -0.9999616742134094, + -1, + -0.9999049305915833 + ], + "name": "accessor_buffer_F010_Saber.003_1", + "type": "VEC3" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1517670154571533, + 0 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 172, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8280677795410156, + 0 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 201, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1 + ], + "min": [ + 1, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "min": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 5.4569682106375694e-12, + 1 + ], + "min": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5249916315078735, + 0.000022089123376645148 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 178, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0, + 0, + 0 + ], + "name": "accessor_buffer_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 196, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + 0 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00004969544170307927, + 0.0011240799212828279, + 0, + 0.9999988079071045 + ], + "min": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 170, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + 0, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 179, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0011933766072615981, + 0, + 0.9998803734779358 + ], + "min": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 9.422998405866911e-13, + 0, + 1 + ], + "min": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0025572776794434, + 0 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.006504923105239868, + 1.635219693183899, + 0 + ], + "min": [ + 0.006504923105239868, + 1.635219693183899, + -0.00002377049531787634 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + 0 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 173, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00004930837167194113, + 0, + 1 + ], + "min": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.7125468254089355, + 0 + ], + "min": [ + -6.258487701416016e-7, + 4.7125468254089355, + -5.960464477539063e-8 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2824809551239014, + 0.00000463516335003078 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -2.3662607873120578e-8, + -2.0191042438000295e-7, + -1.5510249795624986e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 1 + ], + "min": [ + 0.9999999403953552, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5123, + "count": 11700, + "max": [ + 3053 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.003_3", + "type": "SCALAR" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9040616750717163, + 0 + ], + "min": [ + -0.044958412647247314, + 1.9040616750717163, + -0.000012791395420208573 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 180, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000016051130842242856, + 0, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00083109550178051, + 0, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00005565229366766289, + 0, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8846017122268677, + 0 + ], + "min": [ + -0.0597844123840332, + 1.8846017122268677, + -0.00000426173210144043 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0008116317912936211, + 0, + 0.9999305605888367 + ], + "min": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + 0, + 0 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "min": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -2.464207682351116e-7, + -8.914983595786907e-8, + -1.517519194749184e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + 0 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.7445827893425303e-7, + 0, + 3.6372512113302946e-8, + 1 + ], + "min": [ + 1.7445827893425303e-7, + -6.26357206101602e-8, + 3.6372512113302946e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 168, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 0.9999998807907104 + ], + "min": [ + 1, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 3054, + "max": [ + 51.48958969116211, + 137.53976440429688, + 19.721698760986328 + ], + "min": [ + -51.49264144897461, + 0.5336894989013672, + -21.39265251159668 + ], + "name": "accessor_buffer_F010_Saber.003_0", + "type": "VEC3" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.854499816894531, + 0 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 175, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.04969024658203, + 8.68749339133501e-9 + ], + "min": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999953508377075 + ], + "min": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 41.84932327270508, + 0 + ], + "min": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.933863162994385, + 0 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.656612517806025e-8, + 0, + 0, + 1 + ], + "min": [ + 4.656612517806025e-8, + -1.9324940581100236e-7, + -4.982575063650074e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 184, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.916641116142273, + 0 + ], + "min": [ + -0.02496713399887085, + 1.916641116142273, + -0.000015547877410426736 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 200, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 165, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.778012275695801, + 0 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 176, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + 0 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 198, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 195, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.20922753821651e-8, + 0, + 1.4510078472085297e-8, + 1 + ], + "min": [ + 5.20922753821651e-8, + -1.1215498751937503e-8, + 1.4510078472085297e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + 0, + 1 + ], + "min": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.000000238418579, + 1, + 1.0000001192092896 + ], + "min": [ + 1.000000238418579, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5351991653442383, + 0.000011235475540161133 + ], + "min": [ + -0.18289971351623535, + 1.5351991653442383, + 0.000011235475540161133 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 199, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2484662532806396, + 0.000009948620572686195 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0003684632829390466, + 0, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "min": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000018012506188824773, + 0.00015944617916829884, + 0, + 1 + ], + "min": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.029511988162994385, + 2.085664749145508, + 0 + ], + "min": [ + 0.029511988162994385, + 2.085664749145508, + -0.000003653607564046979 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 192, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 194, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + 0, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 10.314631462097168, + 2.384185791015625e-7 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.252031947591604e-7, + 0, + 2.586603153886813e-9, + 1 + ], + "min": [ + 2.252031947591604e-7, + -1.896821366642598e-8, + 2.586603153886813e-9, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 183, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0023322105407715, + 0 + ], + "min": [ + -0.03690838813781738, + 2.0023322105407715, + -0.0000020437873899936676 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + 0, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 185, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -9.267012046620948e-8, + -5.819203607870804e-8, + -6.402842700481415e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00007425900548696518, + 98.80355834960938, + 0.4175964593887329 + ], + "min": [ + 0.00007425900548696518, + 98.80355834960938, + 0.4175964593887329 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + 0, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-7, + 0, + 4.313407657718926e-7, + 1 + ], + "min": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.012762725353240967, + 1.3817871809005737, + 0 + ], + "min": [ + 0.012762725353240967, + 1.3817871809005737, + -0.000005348862032406032 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + 0 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -1.473153474762512e-7, + -1.363462160952622e-7, + -1.3542921806219965e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999955296516418 + ], + "min": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.034996457397937775, + 0, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.010770494118332863, + 0, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 193, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 8.988426208496094, + 0 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 190, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.5535473109102895e-8, + 2.9428024461708446e-9, + 0, + 1 + ], + "min": [ + 5.5535473109102895e-8, + 2.9428024461708446e-9, + -0.000005548599347093841, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.77089500427246, + 0.000006812736501160543 + ], + "min": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5121, + "count": 3054, + "max": [ + 63, + 63, + 63, + 60 + ], + "min": [ + 1, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_0", + "type": "VEC4" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 7.4837236404418945, + 0 + ], + "min": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 164, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.833076872046149e-8, + 7.194104423291492e-9, + 1 + ], + "min": [ + -4.388131102928128e-8, + 4.833076872046149e-8, + 7.194104423291492e-9, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 169, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-7, + 41.85009002685547, + 0 + ], + "min": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1 + ], + "min": [ + 1, + 1.0000001192092896, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.021941065788269043, + 1.7619209289550781, + 0.00002016910548263695 + ], + "min": [ + 0.021941065788269043, + 1.7619209289550781, + 0.00002016910548263695 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 197, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 187, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "min": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9782497882843018, + 0 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 191, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 16, + "componentType": 5126, + "count": 3054, + "max": [ + 1.000009298324585, + 0.4988971948623657, + 0.3152562081813812, + 0.21635007858276367 + ], + "min": [ + 0.2751019597053528, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_1", + "type": "VEC4" + }, + { + "bufferView": 202, + "byteOffset": 0, + "componentType": 5126, + "count": 65, + "max": [ + 1.0022532939910889, + 1.001609444618225, + 0.3732517957687378, + 0, + 0.17934095859527588, + 1.0022534132003784, + 0.9950379729270935, + 0, + 0.998527467250824, + 0.9991320371627808, + 1.0022532939910889, + 0, + 36.08419418334961, + 95.18425750732422, + 139.18643188476562, + 1 + ], + "min": [ + -1.0021002292633057, + -1.0016006231307983, + -0.39615026116371155, + 0, + -0.16228264570236206, + -1.0016993284225464, + -0.998423159122467, + 0, + -0.9986722469329834, + -0.3514665365219116, + -0.1876296103000641, + 0, + -40.01988983154297, + -158.2681884765625, + -8.502774238586426, + 1 + ], + "name": "accessor_buffer_IBM_Saber_maid_dress_skin_0", + "type": "MAT4" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.172354171165352e-8, + 0.000008062284905463457, + 0, + 1 + ], + "min": [ + 8.172354171165352e-8, + 0.000008062284905463457, + -1.2136295524101115e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + 0 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.000005544060059037292, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.003121189074590802, + 0, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.4578983783721924, + 0 + ], + "min": [ + -0.014494240283966064, + 1.4578983783721924, + -0.000007362202268268447 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 19.023351669311523, + 0 + ], + "min": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999995231628418 + ], + "min": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 189, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 174, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 177, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 24, + "componentType": 5126, + "count": 3054, + "max": [ + 0.9956809878349304, + 0.9849260002374649 + ], + "min": [ + 0.0069690002128481865, + 0.0113450288772583 + ], + "name": "accessor_buffer_F010_Saber.003_2", + "type": "VEC2" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 171, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 188, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + 0, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -3.306195139884949e-8, + -0.000008229748345911503, + -2.3865142750878476e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "min": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.7723331451416, + 0.000002205953933298588 + ], + "min": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + 0, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + 0 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + 0, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 181, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_2", + "type": "VEC3" + } + ], + "asset": { + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 97728, + "byteOffset": 0, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.003_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 23400, + "byteOffset": 97728, + "name": "bufferView_buffer_F010_Saber.003_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 97728, + "byteOffset": 121128, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.003_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 218856, + "byteStride": 4, + "name": "bufferView_buffer_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 218864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 218888, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 218920, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 218944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 218968, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219000, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219048, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219080, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219128, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219160, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219184, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219208, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219240, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219264, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219288, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219320, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219368, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219400, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219448, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219480, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219528, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219560, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219608, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219640, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219688, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219720, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219768, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219800, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219848, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219880, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 219928, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219960, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 219984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220008, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220040, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220088, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220120, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220168, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220200, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220248, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220280, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220328, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220360, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220408, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220440, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220488, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220520, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220568, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220600, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220648, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220680, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220704, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220728, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220760, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220808, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220840, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220888, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220920, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 220944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 220968, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221000, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221048, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221080, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221128, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221160, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221184, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221208, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221240, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221264, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221288, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221320, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221368, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221400, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221448, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221480, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221528, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221560, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221608, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221640, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221688, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221720, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221768, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221800, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221848, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221880, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 221928, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221960, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 221984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222008, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222040, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222088, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222120, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222168, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222200, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222248, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222280, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222328, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222360, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222408, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222440, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222488, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222520, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222568, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222600, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222648, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222680, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222704, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222728, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222760, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222808, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222840, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222888, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222920, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 222944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 222968, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223000, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223048, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223080, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223128, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223160, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223184, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223208, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223240, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223264, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223288, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223320, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223368, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223400, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223448, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223480, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223504, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223528, + "byteStride": 16, + "name": "bufferView_buffer_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223560, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223608, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223640, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223688, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223720, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223768, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223800, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223848, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223880, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 223928, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223960, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 223984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 224008, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 224040, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 224064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 224088, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 224120, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 4160, + "byteOffset": 224144, + "byteStride": 64, + "name": "bufferView_buffer_IBM_Saber_maid_dress_skin_0" + } + ], + "buffers": [ + { + "byteLength": 228304, + "name": "buffer_combined_dress", + "uri": "buffer_combined_dress.bin" + } + ], + "images": [ + { + "name": "saber-dress-texture.png", + "uri": "saber-dress-texture.png" + } + ], + "materials": [ + { + "emissiveFactor": [ + 0, + 0, + 0 + ], + "name": "F010_SaberSG.001", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 1 + }, + "doubleSided": true + } + ], + "meshes": [ + { + "name": "F010_Saber.003", + "primitives": [ + { + "attributes": { + "NORMAL": 26, + "POSITION": 91, + "TEXCOORD_0": 191 + }, + "indices": 61, + "material": 0, + "mode": 4, + "extensions": { + "gl_avatar": { + "attributes": { + "JOINTS_0": 159, + "WEIGHTS_0": 173 + } + } + } + } + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "name": "Character", + "rotation": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0, + 0, + 0 + ] + }, + { + "mesh": 0, + "name": "Saber_maid_dress", + "rotation": [ + 0, + 2.215453975872375e-14, + 1.0171550148477943e-16, + 1 + ], + "scale": [ + 1.0022532939910889, + 1.0022532939910889, + 1.0022532939910889 + ], + "translation": [ + 9.596120962738694e-15, + -1.715214104081042e-8, + -9.706444359380839e-8 + ], + "extensions": { + "gl_avatar": { + "skin": 0 + } + } + }, + { + "children": [ + 0 + ], + "matrix": [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "name": "Scene_root" + } + ], + "samplers": [ + { + "name": "default" + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "active_camera": null, + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 24 + }, + "name": "Scene", + "nodes": [ + 2 + ] + } + ], + "textures": [ + { + "name": "saber-dress-texture.png", + "sampler": 0, + "source": 0 + } + ], + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "visibility": [ + 0, + 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, + 0, 0, 1, 1, 1, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0 + ], + "type": "skin", + "linkedSkeletons": [ + { + "inverseBindMatrices": 174, + "name": "Saber_maid_dress", + "skeleton": "main" + } + ] + } + } +} \ No newline at end of file diff --git a/models/gltf/saber-face/buffer_saber-face.bin b/models/gltf/saber-face/buffer_saber-face.bin new file mode 100644 index 0000000000000000000000000000000000000000..4d414a8931c0e681f3c2f7957c21b534bebcb665 --- /dev/null +++ b/models/gltf/saber-face/buffer_saber-face.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c111e1b22958304da5c9577cd2fbb2175120f08d43df1315d10cbed1887b501 +size 103748 diff --git a/models/gltf/saber-face/eriri-face-test.gltf b/models/gltf/saber-face/eriri-face-test.gltf new file mode 100644 index 0000000000000000000000000000000000000000..72769e54d9b36454f91da68b29fd60836cc2ab2a --- /dev/null +++ b/models/gltf/saber-face/eriri-face-test.gltf @@ -0,0 +1,5855 @@ +{ + "accessors": [ + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "min": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "min": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "min": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "min": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5121, + "count": 1176, + "max": [ + 2, + 1, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.000_skin_0", + "type": "VEC4" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 0.9999998807907104 + ], + "min": [ + 1, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "min": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "min": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5123, + "count": 5004, + "max": [ + 1175 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.000_0", + "type": "SCALAR" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "min": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "min": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "min": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1 + ], + "min": [ + 1, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "min": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "min": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "min": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "min": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "min": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "min": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "min": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "min": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9074609279632568, + 0.9870719909667969 + ], + "min": [ + 0.0168008916079998, + 0.018634021282196045 + ], + "name": "accessor_buffer_F010_Saber.000_TEXCOORD_0_0", + "type": "VEC2" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "min": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "min": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "min": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 3, + "max": [ + -1.0011157989501953, + 3.76585091235726e-12, + -5.520964653462045e-20, + 0, + 1.886712574367122e-12, + -1.6290225346438092e-7, + 1.0011157989501953, + 0, + 3.765848310272046e-12, + 1.0011159181594849, + 0.07986891269683838, + 0, + -0.00744246831163764, + -122.5326919555664, + 2.1228513717651367, + 1 + ], + "min": [ + -1.0011157989501953, + -4.722267715751016e-11, + -1.886721247984502e-12, + 0, + -6.410383498526299e-19, + -0.07986891269683838, + 0.9979247450828552, + 0, + -4.7222680626957114e-11, + 0.9979248046875, + 1.5544334530659398e-7, + 0, + -0.007442474830895662, + -137.4109344482422, + -8.502774238586426, + 1 + ], + "name": "accessor_buffer_IBM_F010_Saber_Face_skin_0", + "type": "MAT4" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "min": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 1 + ], + "min": [ + 0.9999999403953552, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00007425900548696518, + 0.4175964593887329, + 98.80355834960938 + ], + "min": [ + -0.00007425900548696518, + 0.4175964593887329, + 98.80355834960938 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 7.576391696929932, + 7.6111836433410645, + 154.5619659423828 + ], + "min": [ + -7.576313018798828, + -2.516939878463745, + 136.62217712402344 + ], + "name": "accessor_buffer_F010_Saber.000_POSITION_0", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "min": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9913486242294312, + 0.9995606541633606, + 0.9988025426864624 + ], + "min": [ + -0.9913477301597595, + -0.9874794483184814, + -0.9999688863754272 + ], + "name": "accessor_buffer_F010_Saber.000_NORMAL_0", + "type": "VEC3" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_F010_Saber.000_COLOR_0_0", + "type": "VEC3" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "min": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00000392553374695126, + 0.7071068286895752, + 0.7071068286895752, + 0.000003921371899195947 + ], + "min": [ + -0.00000392553374695126, + 0.7071068286895752, + 0.7071068286895752, + 0.000003921371899195947 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 16, + "componentType": 5126, + "count": 1176, + "max": [ + 1, + 0.21810737252235413, + 0.0008118848782032728, + 0 + ], + "min": [ + 0.7810807824134827, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.000_skin_1", + "type": "VEC4" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "min": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "min": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "min": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "min": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "min": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_1", + "type": "VEC4" + } + ], + "asset": { + "copyright": "", + "generator": "blendergltf v1.2.0", + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 0, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_POSITION_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 14112, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_NORMAL_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9408, + "byteOffset": 28224, + "byteStride": 8, + "name": "bufferView_buffer_F010_Saber.000_TEXCOORD_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 37632, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_COLOR_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10012, + "byteOffset": 51744, + "name": "bufferView_buffer_F010_Saber.000_0", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 37632, + "byteOffset": 61756, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.000_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 99388, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Face_skin_0" + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 99580, + "byteStride": 4, + "name": "bufferView_buffer_Character_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_2" + } + ], + "buffers": [ + { + "byteLength": 103748, + "name": "buffer_saber-face", + "uri": "buffer_saber-face.bin" + } + ], + "images": [ + { + "uri": "eriri-face-test.png" + } + ], + "materials": [ + { + "alphaMode": "OPAQUE", + "doubleSided": false, + "name": "face.001", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 1 + } + } + ], + "meshes": [ + { + "name": "F010_Saber.000", + "primitives": [ + { + "attributes": { + "NORMAL": 101, + "POSITION": 98, + "TEXCOORD_0": 70 + }, + "indices": 36, + "material": 0, + "mode": 4, + "extensions": { + "gl_avatar": { + "attributes": { + "JOINTS_0": 16, + "WEIGHTS_0": 126 + } + } + } + } + ] + } + ], + "nodes": [ + { + "children": [ + 1, + 2 + ], + "name": "Character", + "rotation": [ + -0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0, + 0, + 0 + ] + }, + { + "mesh": 0, + "name": "F010_Saber_Face", + "rotation": [ + -8.136032647598768e-8, + 1.0171798302661709e-16, + -1.2870997341503742e-30, + 1 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "translation": [ + 0, + -4.52195720095739e-22, + 2.7755575615628914e-15 + ], + "extensions": { + "gl_avatar": { + "skin": 0 + } + } + }, + { + "children": [ + 3, + 57, + 62 + ], + "name": "Armature_mixamorig:Hips", + "rotation": [ + 0, + 0.7071068286895752, + 0.7071068286895752, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.007442474365234375, + 0.6201396584510803, + 98.82971954345703 + ] + }, + { + "children": [ + 4 + ], + "name": "Armature_mixamorig:Spine", + "rotation": [ + -0.039921652525663376, + 0, + 0, + 0.9992028474807739 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 0, + 6.854499816894531, + -0.5485978126525879 + ] + }, + { + "children": [ + 5 + ], + "name": "Armature_mixamorig:Spine1", + "rotation": [ + 1.4901162970204496e-8, + 0, + 0, + 1 + ], + "scale": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -4.656612873077393e-10, + 8.022480964660645, + -2.384185791015625e-7 + ] + }, + { + "children": [ + 6, + 9, + 33 + ], + "name": "Armature_mixamorig:Spine2", + "rotation": [ + -5.029141902923584e-8, + 9.423000574271256e-13, + -2.358492047493943e-11, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -4.656612873077393e-10, + 9.168560028076172, + -4.76837158203125e-7 + ] + }, + { + "children": [ + 7 + ], + "name": "Armature_mixamorig:Neck", + "rotation": [ + 0.03992168977856636, + 1.427615485679809e-13, + 2.0030548400495896e-11, + 0.9992028474807739 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -2.2881511962946632e-10, + 10.314631462097168, + 0.0000011920928955078125 + ] + }, + { + "children": [ + 8 + ], + "name": "Armature_mixamorig:Head", + "rotation": [ + -3.749335064640036e-9, + -6.35555176367169e-21, + 5.4569682106375694e-12, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -5.1451731764018405e-11, + 4.3087005615234375, + 0.11991112679243088 + ] + }, + { + "name": "Armature_mixamorig:HeadTop_End", + "rotation": [ + 0, + 2.610143520150023e-28, + -1.8189894035458565e-12, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 1.2972056762095008e-10, + 20.857254028320312, + 0.5804517269134521 + ] + }, + { + "children": [ + 10 + ], + "name": "Armature_mixamorig:LeftShoulder", + "rotation": [ + 0.5740949511528015, + 0.4067640006542206, + -0.5904093384742737, + 0.39544278383255005 + ], + "scale": [ + 1.0000001192092896, + 1, + 1 + ], + "translation": [ + 3.513521194458008, + 8.987089157104492, + -0.09783673286437988 + ] + }, + { + "children": [ + 11 + ], + "name": "Armature_mixamorig:LeftArm", + "rotation": [ + -0.19647400081157684, + -0.0007150349556468427, + 0.0035684211179614067, + 0.9805023074150085 + ], + "scale": [ + 1, + 1.0000001192092896, + 0.9999999403953552 + ], + "translation": [ + -5.960464477539062e-7, + 7.4837188720703125, + -0.00001049041748046875 + ] + }, + { + "children": [ + 12 + ], + "name": "Armature_mixamorig:LeftForeArm", + "rotation": [ + -0.005400624126195908, + -0.0001584456767886877, + 0.029325975105166435, + 0.9995554089546204 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -5.364418029785156e-7, + 22.7723331451416, + 5.662441253662109e-7 + ] + }, + { + "children": [ + 13, + 17, + 21, + 25, + 29 + ], + "name": "Armature_mixamorig:LeftHand", + "rotation": [ + -0.0046674893237650394, + -0.036291614174842834, + -0.01584092527627945, + 0.9992048144340515 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 4.76837158203125e-7, + 19.02334213256836, + 8.046627044677734e-7 + ] + }, + { + "children": [ + 14 + ], + "name": "Armature_mixamorig:LeftHandThumb1", + "rotation": [ + 0.24564014375209808, + 0.0797870084643364, + 0.2984432578086853, + 0.9188180565834045 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -1.3880550861358643, + 1.872644305229187, + 1.3422610759735107 + ] + }, + { + "children": [ + 15 + ], + "name": "Armature_mixamorig:LeftHandThumb2", + "rotation": [ + 0.00489170802757144, + 4.4890290951116185e-7, + 4.610102450897102e-7, + 0.9999881386756897 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.018166542053222656, + 2.1517605781555176, + -0.000021755695343017578 + ] + }, + { + "children": [ + 16 + ], + "name": "Armature_mixamorig:LeftHandThumb3", + "rotation": [ + 0.021618247032165527, + -5.850072852808808e-7, + -3.9590455003235547e-7, + 0.9997663497924805 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1 + ], + "translation": [ + 0.07795095443725586, + 2.1093316078186035, + 0.0000018775463104248047 + ] + }, + { + "name": "Armature_mixamorig:LeftHandThumb4", + "rotation": [ + 4.284083487959833e-8, + -1.769512749660862e-7, + -3.3527612686157227e-8, + 1 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + -0.0597844123840332, + 1.8846036195755005, + -0.000011980533599853516 + ] + }, + { + "children": [ + 18 + ], + "name": "Armature_mixamorig:LeftHandIndex1", + "rotation": [ + 0.026657480746507645, + 0.0018764277920126915, + 0.07018843293190002, + 0.9971757531166077 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -2.3818466663360596, + 6.0911946296691895, + 0.09325551986694336 + ] + }, + { + "children": [ + 19 + ], + "name": "Armature_mixamorig:LeftHandIndex2", + "rotation": [ + -0.034092869609594345, + -7.741025598306805e-8, + 1.2725772080557363e-7, + 0.9994186758995056 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.009856224060058594, + 2.002563238143921, + 0.0000019297003746032715 + ] + }, + { + "children": [ + 20 + ], + "name": "Armature_mixamorig:LeftHandIndex3", + "rotation": [ + -0.011232745833694935, + 8.382431815334712e-8, + -1.2014818651095993e-7, + 0.9999369382858276 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.0033556222915649414, + 1.906246304512024, + -0.000002428889274597168 + ] + }, + { + "name": "Armature_mixamorig:LeftHandIndex4", + "rotation": [ + -1.6298145055770874e-8, + -2.116430550813675e-7, + -1.4435499906539917e-7, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.006502628326416016, + 1.6352357864379883, + -0.000007256865501403809 + ] + }, + { + "children": [ + 22 + ], + "name": "Armature_mixamorig:LeftHandMiddle1", + "rotation": [ + 0.030671721324324608, + 0.0003823289880529046, + 0.012456541880965233, + 0.9994519352912903 + ], + "scale": [ + 0.9999999403953552, + 1, + 1 + ], + "translation": [ + -0.620979368686676, + 5.9338483810424805, + -0.18955062329769135 + ] + }, + { + "children": [ + 23 + ], + "name": "Armature_mixamorig:LeftHandMiddle2", + "rotation": [ + -0.01664525642991066, + 1.53325672158644e-8, + 1.832339968643737e-8, + 0.999861478805542 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.018555283546447754, + 2.2824888229370117, + -0.000022992491722106934 + ] + }, + { + "children": [ + 24 + ], + "name": "Armature_mixamorig:LeftHandMiddle3", + "rotation": [ + -0.10026512295007706, + -6.588842182964072e-8, + 1.4567116579655703e-7, + 0.9949608445167542 + ], + "scale": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + -0.010961532592773438, + 2.2484676837921143, + -0.000016957521438598633 + ] + }, + { + "name": "Armature_mixamorig:LeftHandMiddle4", + "rotation": [ + -4.5380154745089385e-8, + 5.855691398437557e-8, + 8.149073416063857e-9, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + 0.02951037883758545, + 2.0856528282165527, + 0.000010073184967041016 + ] + }, + { + "children": [ + 26 + ], + "name": "Armature_mixamorig:LeftHandRing1", + "rotation": [ + 0.10404136031866074, + -0.008528899401426315, + -0.08125600963830948, + 0.9912115335464478 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.8905025720596313, + 5.982393264770508, + -0.24304264783859253 + ] + }, + { + "children": [ + 27 + ], + "name": "Armature_mixamorig:LeftHandRing2", + "rotation": [ + -0.03329118713736534, + -6.639353955506522e-8, + -3.7273565567375044e-8, + 0.9994457960128784 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.017888784408569336, + 2.1800594329833984, + -0.000017344951629638672 + ] + }, + { + "children": [ + 28 + ], + "name": "Armature_mixamorig:LeftHandRing3", + "rotation": [ + -0.08213821053504944, + 5.25645127424923e-8, + 6.078793717279041e-7, + 0.9966209530830383 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.0040547847747802734, + 1.9782464504241943, + -0.000038623809814453125 + ] + }, + { + "name": "Armature_mixamorig:LeftHandRing4", + "rotation": [ + -1.4202669262886047e-7, + -1.4062970876693726e-7, + -1.5425030142068863e-7, + 1 + ], + "scale": [ + 0.9999999403953552, + 1, + 1 + ], + "translation": [ + 0.02194046974182129, + 1.7619253396987915, + 0.000026524066925048828 + ] + }, + { + "children": [ + 30 + ], + "name": "Armature_mixamorig:LeftHandPinky1", + "rotation": [ + 0.13995902240276337, + -0.024145862087607384, + -0.16828545928001404, + 0.9754529595375061 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 2.112321376800537, + 5.15140962600708, + -0.10163509845733643 + ] + }, + { + "children": [ + 31 + ], + "name": "Armature_mixamorig:LeftHandPinky2", + "rotation": [ + -0.012911615893244743, + 6.519802298043942e-8, + 6.445289386647346e-7, + 0.999916672706604 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + -0.006536006927490234, + 1.828072190284729, + -0.00001633167266845703 + ] + }, + { + "children": [ + 32 + ], + "name": "Armature_mixamorig:LeftHandPinky3", + "rotation": [ + -0.09343928843736649, + 1.850952742188383e-7, + -2.745443339335907e-7, + 0.9956250786781311 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + -0.006233692169189453, + 1.5249935388565063, + 0.000025272369384765625 + ] + }, + { + "name": "Armature_mixamorig:LeftHandPinky4", + "rotation": [ + 5.541368963690729e-8, + -5.9371814131736755e-9, + 1.3969838619232178e-9, + 1 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 0.012760639190673828, + 1.3818011283874512, + -0.000005304813385009766 + ] + }, + { + "children": [ + 34 + ], + "name": "Armature_mixamorig:RightShoulder", + "rotation": [ + 0.5726097226142883, + -0.40782278776168823, + 0.5916988849639893, + 0.394577294588089 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1 + ], + "translation": [ + -3.513521194458008, + 8.98842716217041, + -0.11455440521240234 + ] + }, + { + "children": [ + 35 + ], + "name": "Armature_mixamorig:RightArm", + "rotation": [ + -0.19615903496742249, + 0.0015209860866889358, + -0.007602959871292114, + 0.980541467666626 + ], + "scale": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + 6.854534149169922e-7, + 7.4837188720703125, + -0.0000069588422775268555 + ] + }, + { + "children": [ + 36 + ], + "name": "Armature_mixamorig:RightForeArm", + "rotation": [ + -0.005199347157031298, + 0.00015941221499815583, + -0.03064456395804882, + 0.9995168447494507 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + -0.0000010132789611816406, + 22.770898818969727, + -0.0000026673078536987305 + ] + }, + { + "children": [ + 37, + 41, + 45, + 49, + 53 + ], + "name": "Armature_mixamorig:RightHand", + "rotation": [ + -0.027066726237535477, + 0.03516821190714836, + 0.024613087996840477, + 0.9987115859985352 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 5.960464477539062e-7, + 19.027141571044922, + -0.000011309981346130371 + ] + }, + { + "children": [ + 38 + ], + "name": "Armature_mixamorig:RightHandThumb1", + "rotation": [ + 0.24496246874332428, + -0.07342495024204254, + -0.27757158875465393, + 0.9260433316230774 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 1.4313437938690186, + 1.9488826990127563, + 1.373734474182129 + ] + }, + { + "children": [ + 39 + ], + "name": "Armature_mixamorig:RightHandThumb2", + "rotation": [ + 0.02597731165587902, + 4.695450286362757e-7, + 4.360061325314746e-7, + 0.9996625781059265 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.09870082139968872, + 2.2226028442382812, + 0.000018328428268432617 + ] + }, + { + "children": [ + 40 + ], + "name": "Armature_mixamorig:RightHandThumb3", + "rotation": [ + 0.0020599281415343285, + -4.209587416426075e-7, + -2.747407563674642e-7, + 0.9999979734420776 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.08420944213867188, + 1.993523359298706, + -0.000024646520614624023 + ] + }, + { + "name": "Armature_mixamorig:RightHandThumb4", + "rotation": [ + 6.705523247774181e-8, + -7.450580596923828e-9, + 6.05359673500061e-8, + 1 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + -0.1829054355621338, + 1.5351988077163696, + 0.000009775161743164062 + ] + }, + { + "children": [ + 42 + ], + "name": "Armature_mixamorig:RightHandIndex1", + "rotation": [ + 0.04785900563001633, + -0.003934510983526707, + -0.08183817565441132, + 0.9954881072044373 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 2.2894375324249268, + 5.801694393157959, + 0.050646696239709854 + ] + }, + { + "children": [ + 43 + ], + "name": "Armature_mixamorig:RightHandIndex2", + "rotation": [ + -0.028287818655371666, + 7.496872456158599e-8, + 2.392710314325086e-7, + 0.9995998740196228 + ], + "scale": [ + 1, + 1, + 0.9999999403953552 + ], + "translation": [ + 0.029898226261138916, + 2.2504000663757324, + 0.000021301209926605225 + ] + }, + { + "children": [ + 44 + ], + "name": "Armature_mixamorig:RightHandIndex3", + "rotation": [ + -0.14387890696525574, + 7.74066961639619e-8, + 1.5951893317378563e-7, + 0.9895954132080078 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + 0.01506185531616211, + 2.0928609371185303, + 0.00001971423625946045 + ] + }, + { + "name": "Armature_mixamorig:RightHandIndex4", + "rotation": [ + -2.57976381590197e-7, + -8.847565879932517e-8, + -1.480803035747158e-7, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.04495549201965332, + 1.9040567874908447, + -0.000019669532775878906 + ] + }, + { + "children": [ + 46 + ], + "name": "Armature_mixamorig:RightHandMiddle1", + "rotation": [ + 0.06535934656858444, + -0.0012092242250218987, + -0.018458466976881027, + 0.9976903200149536 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.6151741147041321, + 5.987786293029785, + -0.2521481215953827 + ] + }, + { + "children": [ + 47 + ], + "name": "Armature_mixamorig:RightHandMiddle2", + "rotation": [ + -0.02911515347659588, + -1.493660128915053e-8, + 1.2578189512169047e-7, + 0.9995761513710022 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 0.025691747665405273, + 2.3235480785369873, + 0.0000058710575103759766 + ] + }, + { + "children": [ + 48 + ], + "name": "Armature_mixamorig:RightHandMiddle3", + "rotation": [ + -0.12079086899757385, + 3.73517679008728e-8, + 3.685922251861484e-7, + 0.9926779866218567 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999998211860657 + ], + "translation": [ + 0.011220812797546387, + 2.2008121013641357, + 0.000029072165489196777 + ] + }, + { + "name": "Armature_mixamorig:RightHandMiddle4", + "rotation": [ + 2.531742211431265e-7, + -1.9557775843281888e-8, + 2.561137080192566e-9, + 1 + ], + "scale": [ + 1, + 1, + 0.9999999403953552 + ], + "translation": [ + -0.036910414695739746, + 2.00234055519104, + 0.00000260770320892334 + ] + }, + { + "children": [ + 50 + ], + "name": "Armature_mixamorig:RightHandRing1", + "rotation": [ + 0.08960019052028656, + 0.007558114361017942, + 0.0837147906422615, + 0.9924246072769165 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.8287993669509888, + 5.778010845184326, + -0.2080925703048706 + ] + }, + { + "children": [ + 51 + ], + "name": "Armature_mixamorig:RightHandRing2", + "rotation": [ + 0.02305533178150654, + -1.0247272363983484e-8, + -2.6083968762691256e-8, + 0.9997342824935913 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 0.008643150329589844, + 2.2196152210235596, + -0.000009953975677490234 + ] + }, + { + "children": [ + 52 + ], + "name": "Armature_mixamorig:RightHandRing3", + "rotation": [ + -0.12460635602474213, + 6.288876619464645e-8, + 3.815565037257329e-7, + 0.992206335067749 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.016327381134033203, + 2.091179847717285, + 0.000004410743713378906 + ] + }, + { + "name": "Armature_mixamorig:RightHandRing4", + "rotation": [ + -8.42846930027008e-8, + -6.05359673500061e-8, + -6.356277282293377e-8, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 1 + ], + "translation": [ + -0.02497267723083496, + 1.9166507720947266, + -0.000018537044525146484 + ] + }, + { + "children": [ + 54 + ], + "name": "Armature_mixamorig:RightHandPinky1", + "rotation": [ + 0.1575794368982315, + 0.028793327510356903, + 0.17742541432380676, + 0.9710097312927246 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + -2.075824737548828, + 5.181243896484375, + -0.156680166721344 + ] + }, + { + "children": [ + 55 + ], + "name": "Armature_mixamorig:RightHandPinky2", + "rotation": [ + -0.021833697333931923, + -8.849674060229518e-8, + -3.185882917478011e-7, + 0.9997616410255432 + ], + "scale": [ + 1, + 0.9999998211860657, + 0.9999999403953552 + ], + "translation": [ + 0.009781837463378906, + 1.9066412448883057, + 0.00003445148468017578 + ] + }, + { + "children": [ + 56 + ], + "name": "Armature_mixamorig:RightHandPinky3", + "rotation": [ + -0.0985320433974266, + -1.1792045739866808e-7, + -2.5736605735460216e-8, + 0.9951338768005371 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + 0.004714488983154297, + 1.55594801902771, + 0.000019788742065429688 + ] + }, + { + "name": "Armature_mixamorig:RightHandPinky4", + "rotation": [ + 1.695007227908718e-7, + -6.053597445543346e-8, + 1.6530977475781583e-8, + 1 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -0.014493942260742188, + 1.4579054117202759, + -0.000033020973205566406 + ] + }, + { + "children": [ + 58 + ], + "name": "Armature_mixamorig:LeftUpLeg", + "rotation": [ + -0.000008872594662534539, + 0.0009148783865384758, + 0.9998617172241211, + 0.016607170924544334 + ], + "scale": [ + 1.0001250505447388, + 1, + 1.000000238418579 + ], + "translation": [ + 6.5092010498046875, + -3.8089065551757812, + -0.3193536400794983 + ] + }, + { + "children": [ + 59 + ], + "name": "Armature_mixamorig:LeftLeg", + "rotation": [ + -0.019678570330142975, + -0.00024797735386528075, + 0.012827177532017231, + 0.9997241497039795 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + 4.90503225591965e-7, + 45.04969024658203, + -3.3028754842234775e-8 + ] + }, + { + "children": [ + 60 + ], + "name": "Armature_mixamorig:LeftFoot", + "rotation": [ + 0.4820258617401123, + 0.06575184315443039, + -0.03629865497350693, + 0.872931957244873 + ], + "scale": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "translation": [ + -3.387158358236775e-7, + 41.849327087402344, + -3.457535058259964e-8 + ] + }, + { + "children": [ + 61 + ], + "name": "Armature_mixamorig:LeftToeBase", + "rotation": [ + 0.29159197211265564, + -0.06168047711253166, + 0.01884075440466404, + 0.9543660879135132 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 8.810311555862427e-7, + 12.08905029296875, + -0.000003889203071594238 + ] + }, + { + "name": "Armature_mixamorig:LeftToe_End", + "rotation": [ + 9.872019290924072e-8, + 0.000008056988008320332, + -1.909211277961731e-8, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -3.5762786865234375e-7, + 4.706444263458252, + 5.960464477539063e-8 + ] + }, + { + "children": [ + 63 + ], + "name": "Armature_mixamorig:RightUpLeg", + "rotation": [ + -0.00000294413257506676, + -0.0034815834369510412, + -0.9998561143875122, + 0.01660647802054882 + ], + "scale": [ + 1.000124216079712, + 1, + 1.0000035762786865 + ], + "translation": [ + -6.5092010498046875, + -3.8089065551757812, + -0.4497392773628235 + ] + }, + { + "children": [ + 64 + ], + "name": "Armature_mixamorig:RightLeg", + "rotation": [ + -0.022010719403624535, + 0.00022552665905095637, + -0.012826679274439812, + 0.999675452709198 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 1 + ], + "translation": [ + 4.079265636391938e-8, + 45.050357818603516, + -1.5308614820241928e-8 + ] + }, + { + "children": [ + 65 + ], + "name": "Armature_mixamorig:RightFoot", + "rotation": [ + 0.48082953691482544, + -0.06620366871356964, + 0.03643133118748665, + 0.8735518455505371 + ], + "scale": [ + 1, + 1.0000001192092896, + 1.000000238418579 + ], + "translation": [ + -9.810537449084222e-8, + 41.85009765625, + 4.062894731760025e-8 + ] + }, + { + "children": [ + 66 + ], + "name": "Armature_mixamorig:RightToeBase", + "rotation": [ + 0.29314252734184265, + 0.06225594878196716, + -0.01912800408899784, + 0.9538480043411255 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "translation": [ + -6.51925802230835e-8, + 12.033415794372559, + 0.0000034570693969726562 + ] + }, + { + "name": "Armature_mixamorig:RightToe_End", + "rotation": [ + -3.748573362827301e-8, + -0.000008230912499129772, + -2.9453076422214508e-8, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 1.043081283569336e-7, + 4.712545394897461, + 3.2782554626464844e-7 + ] + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987, + "name": "Saber-Face", + "wrapS": 10497, + "wrapT": 10497 + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 0 + ] + } + ], + "textures": [ + { + "name": "Saber-Face", + "sampler": 0, + "source": 0 + } + ], + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "visibility": [ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "type": "skin", + "linkedSkeletons": [ + { + "inverseBindMatrices": 83, + "joints": [ + 5, + 6, + 7 + ], + "name": "F010_Saber_Face", + "skeleton": "face" + } + ] + } + } +} \ No newline at end of file diff --git a/models/gltf/saber-face/eriri-face-test.png b/models/gltf/saber-face/eriri-face-test.png new file mode 100644 index 0000000000000000000000000000000000000000..8a985108da1bca16d27e9148060c3f1b8c2a7886 Binary files /dev/null and b/models/gltf/saber-face/eriri-face-test.png differ diff --git a/models/gltf/saber-face/eriri-face-test2.png b/models/gltf/saber-face/eriri-face-test2.png new file mode 100644 index 0000000000000000000000000000000000000000..b42046149acbc582ae9116beef269045aae6075e Binary files /dev/null and b/models/gltf/saber-face/eriri-face-test2.png differ diff --git a/models/gltf/saber-face/saber-face.gltf b/models/gltf/saber-face/saber-face.gltf new file mode 100644 index 0000000000000000000000000000000000000000..1785388a7e2369dcd602746a73879f025c9417a0 --- /dev/null +++ b/models/gltf/saber-face/saber-face.gltf @@ -0,0 +1,5856 @@ +{ + "accessors": [ + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "min": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "min": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "min": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "min": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5121, + "count": 1176, + "max": [ + 2, + 1, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.000_skin_0", + "type": "VEC4" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 0.9999998807907104 + ], + "min": [ + 1, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "min": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "min": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5123, + "count": 5004, + "max": [ + 1175 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.000_0", + "type": "SCALAR" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "min": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "min": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "min": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1 + ], + "min": [ + 1, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "min": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "min": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "min": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "min": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "min": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "min": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "min": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "min": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9074609279632568, + 0.9870719909667969 + ], + "min": [ + 0.0168008916079998, + 0.018634021282196045 + ], + "name": "accessor_buffer_F010_Saber.000_TEXCOORD_0_0", + "type": "VEC2" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "min": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "min": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "min": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 3, + "max": [ + -1.0011157989501953, + 3.76585091235726e-12, + -5.520964653462045e-20, + 0, + 1.886712574367122e-12, + -1.6290225346438092e-7, + 1.0011157989501953, + 0, + 3.765848310272046e-12, + 1.0011159181594849, + 0.07986891269683838, + 0, + -0.00744246831163764, + -122.5326919555664, + 2.1228513717651367, + 1 + ], + "min": [ + -1.0011157989501953, + -4.722267715751016e-11, + -1.886721247984502e-12, + 0, + -6.410383498526299e-19, + -0.07986891269683838, + 0.9979247450828552, + 0, + -4.7222680626957114e-11, + 0.9979248046875, + 1.5544334530659398e-7, + 0, + -0.007442474830895662, + -137.4109344482422, + -8.502774238586426, + 1 + ], + "name": "accessor_buffer_IBM_F010_Saber_Face_skin_0", + "type": "MAT4" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "min": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 1 + ], + "min": [ + 0.9999999403953552, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00007425900548696518, + 0.4175964593887329, + 98.80355834960938 + ], + "min": [ + -0.00007425900548696518, + 0.4175964593887329, + 98.80355834960938 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 7.576391696929932, + 7.6111836433410645, + 154.5619659423828 + ], + "min": [ + -7.576313018798828, + -2.516939878463745, + 136.62217712402344 + ], + "name": "accessor_buffer_F010_Saber.000_POSITION_0", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "min": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9913486242294312, + 0.9995606541633606, + 0.9988025426864624 + ], + "min": [ + -0.9913477301597595, + -0.9874794483184814, + -0.9999688863754272 + ], + "name": "accessor_buffer_F010_Saber.000_NORMAL_0", + "type": "VEC3" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_F010_Saber.000_COLOR_0_0", + "type": "VEC3" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "min": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00000392553374695126, + 0.7071068286895752, + 0.7071068286895752, + 0.000003921371899195947 + ], + "min": [ + -0.00000392553374695126, + 0.7071068286895752, + 0.7071068286895752, + 0.000003921371899195947 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 16, + "componentType": 5126, + "count": 1176, + "max": [ + 1, + 0.21810737252235413, + 0.0008118848782032728, + 0 + ], + "min": [ + 0.7810807824134827, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.000_skin_1", + "type": "VEC4" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "min": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "min": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "min": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "min": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "min": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_1", + "type": "VEC4" + } + ], + "asset": { + "copyright": "", + "generator": "blendergltf v1.2.0", + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 0, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_POSITION_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 14112, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_NORMAL_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9408, + "byteOffset": 28224, + "byteStride": 8, + "name": "bufferView_buffer_F010_Saber.000_TEXCOORD_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 37632, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_COLOR_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10012, + "byteOffset": 51744, + "name": "bufferView_buffer_F010_Saber.000_0", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 37632, + "byteOffset": 61756, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.000_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 99388, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Face_skin_0" + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 99580, + "byteStride": 4, + "name": "bufferView_buffer_Character_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_2" + } + ], + "buffers": [ + { + "byteLength": 103748, + "name": "buffer_saber-face", + "uri": "buffer_saber-face.bin" + } + ], + "images": [ + { + "name": "saber_01_face.png", + "uri": "saber_01_face.png" + } + ], + "materials": [ + { + "alphaMode": "OPAQUE", + "doubleSided": false, + "name": "face.001", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 1 + } + } + ], + "meshes": [ + { + "name": "F010_Saber.000", + "primitives": [ + { + "attributes": { + "NORMAL": 101, + "POSITION": 98, + "TEXCOORD_0": 70 + }, + "indices": 36, + "material": 0, + "mode": 4, + "extensions": { + "gl_avatar": { + "attributes": { + "JOINTS_0": 16, + "WEIGHTS_0": 126 + } + } + } + } + ] + } + ], + "nodes": [ + { + "children": [ + 1, + 2 + ], + "name": "Character", + "rotation": [ + -0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0, + 0, + 0 + ] + }, + { + "mesh": 0, + "name": "F010_Saber_Face", + "rotation": [ + -8.136032647598768e-8, + 1.0171798302661709e-16, + -1.2870997341503742e-30, + 1 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "translation": [ + 0, + -4.52195720095739e-22, + 2.7755575615628914e-15 + ], + "extensions": { + "gl_avatar": { + "skin": 0 + } + } + }, + { + "children": [ + 3, + 57, + 62 + ], + "name": "Armature_mixamorig:Hips", + "rotation": [ + 0, + 0.7071068286895752, + 0.7071068286895752, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.007442474365234375, + 0.6201396584510803, + 98.82971954345703 + ] + }, + { + "children": [ + 4 + ], + "name": "Armature_mixamorig:Spine", + "rotation": [ + -0.039921652525663376, + 0, + 0, + 0.9992028474807739 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 0, + 6.854499816894531, + -0.5485978126525879 + ] + }, + { + "children": [ + 5 + ], + "name": "Armature_mixamorig:Spine1", + "rotation": [ + 1.4901162970204496e-8, + 0, + 0, + 1 + ], + "scale": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -4.656612873077393e-10, + 8.022480964660645, + -2.384185791015625e-7 + ] + }, + { + "children": [ + 6, + 9, + 33 + ], + "name": "Armature_mixamorig:Spine2", + "rotation": [ + -5.029141902923584e-8, + 9.423000574271256e-13, + -2.358492047493943e-11, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -4.656612873077393e-10, + 9.168560028076172, + -4.76837158203125e-7 + ] + }, + { + "children": [ + 7 + ], + "name": "Armature_mixamorig:Neck", + "rotation": [ + 0.03992168977856636, + 1.427615485679809e-13, + 2.0030548400495896e-11, + 0.9992028474807739 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -2.2881511962946632e-10, + 10.314631462097168, + 0.0000011920928955078125 + ] + }, + { + "children": [ + 8 + ], + "name": "Armature_mixamorig:Head", + "rotation": [ + -3.749335064640036e-9, + -6.35555176367169e-21, + 5.4569682106375694e-12, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -5.1451731764018405e-11, + 4.3087005615234375, + 0.11991112679243088 + ] + }, + { + "name": "Armature_mixamorig:HeadTop_End", + "rotation": [ + 0, + 2.610143520150023e-28, + -1.8189894035458565e-12, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 1.2972056762095008e-10, + 20.857254028320312, + 0.5804517269134521 + ] + }, + { + "children": [ + 10 + ], + "name": "Armature_mixamorig:LeftShoulder", + "rotation": [ + 0.5740949511528015, + 0.4067640006542206, + -0.5904093384742737, + 0.39544278383255005 + ], + "scale": [ + 1.0000001192092896, + 1, + 1 + ], + "translation": [ + 3.513521194458008, + 8.987089157104492, + -0.09783673286437988 + ] + }, + { + "children": [ + 11 + ], + "name": "Armature_mixamorig:LeftArm", + "rotation": [ + -0.19647400081157684, + -0.0007150349556468427, + 0.0035684211179614067, + 0.9805023074150085 + ], + "scale": [ + 1, + 1.0000001192092896, + 0.9999999403953552 + ], + "translation": [ + -5.960464477539062e-7, + 7.4837188720703125, + -0.00001049041748046875 + ] + }, + { + "children": [ + 12 + ], + "name": "Armature_mixamorig:LeftForeArm", + "rotation": [ + -0.005400624126195908, + -0.0001584456767886877, + 0.029325975105166435, + 0.9995554089546204 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -5.364418029785156e-7, + 22.7723331451416, + 5.662441253662109e-7 + ] + }, + { + "children": [ + 13, + 17, + 21, + 25, + 29 + ], + "name": "Armature_mixamorig:LeftHand", + "rotation": [ + -0.0046674893237650394, + -0.036291614174842834, + -0.01584092527627945, + 0.9992048144340515 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 4.76837158203125e-7, + 19.02334213256836, + 8.046627044677734e-7 + ] + }, + { + "children": [ + 14 + ], + "name": "Armature_mixamorig:LeftHandThumb1", + "rotation": [ + 0.24564014375209808, + 0.0797870084643364, + 0.2984432578086853, + 0.9188180565834045 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -1.3880550861358643, + 1.872644305229187, + 1.3422610759735107 + ] + }, + { + "children": [ + 15 + ], + "name": "Armature_mixamorig:LeftHandThumb2", + "rotation": [ + 0.00489170802757144, + 4.4890290951116185e-7, + 4.610102450897102e-7, + 0.9999881386756897 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.018166542053222656, + 2.1517605781555176, + -0.000021755695343017578 + ] + }, + { + "children": [ + 16 + ], + "name": "Armature_mixamorig:LeftHandThumb3", + "rotation": [ + 0.021618247032165527, + -5.850072852808808e-7, + -3.9590455003235547e-7, + 0.9997663497924805 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1 + ], + "translation": [ + 0.07795095443725586, + 2.1093316078186035, + 0.0000018775463104248047 + ] + }, + { + "name": "Armature_mixamorig:LeftHandThumb4", + "rotation": [ + 4.284083487959833e-8, + -1.769512749660862e-7, + -3.3527612686157227e-8, + 1 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + -0.0597844123840332, + 1.8846036195755005, + -0.000011980533599853516 + ] + }, + { + "children": [ + 18 + ], + "name": "Armature_mixamorig:LeftHandIndex1", + "rotation": [ + 0.026657480746507645, + 0.0018764277920126915, + 0.07018843293190002, + 0.9971757531166077 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -2.3818466663360596, + 6.0911946296691895, + 0.09325551986694336 + ] + }, + { + "children": [ + 19 + ], + "name": "Armature_mixamorig:LeftHandIndex2", + "rotation": [ + -0.034092869609594345, + -7.741025598306805e-8, + 1.2725772080557363e-7, + 0.9994186758995056 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.009856224060058594, + 2.002563238143921, + 0.0000019297003746032715 + ] + }, + { + "children": [ + 20 + ], + "name": "Armature_mixamorig:LeftHandIndex3", + "rotation": [ + -0.011232745833694935, + 8.382431815334712e-8, + -1.2014818651095993e-7, + 0.9999369382858276 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.0033556222915649414, + 1.906246304512024, + -0.000002428889274597168 + ] + }, + { + "name": "Armature_mixamorig:LeftHandIndex4", + "rotation": [ + -1.6298145055770874e-8, + -2.116430550813675e-7, + -1.4435499906539917e-7, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.006502628326416016, + 1.6352357864379883, + -0.000007256865501403809 + ] + }, + { + "children": [ + 22 + ], + "name": "Armature_mixamorig:LeftHandMiddle1", + "rotation": [ + 0.030671721324324608, + 0.0003823289880529046, + 0.012456541880965233, + 0.9994519352912903 + ], + "scale": [ + 0.9999999403953552, + 1, + 1 + ], + "translation": [ + -0.620979368686676, + 5.9338483810424805, + -0.18955062329769135 + ] + }, + { + "children": [ + 23 + ], + "name": "Armature_mixamorig:LeftHandMiddle2", + "rotation": [ + -0.01664525642991066, + 1.53325672158644e-8, + 1.832339968643737e-8, + 0.999861478805542 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.018555283546447754, + 2.2824888229370117, + -0.000022992491722106934 + ] + }, + { + "children": [ + 24 + ], + "name": "Armature_mixamorig:LeftHandMiddle3", + "rotation": [ + -0.10026512295007706, + -6.588842182964072e-8, + 1.4567116579655703e-7, + 0.9949608445167542 + ], + "scale": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + -0.010961532592773438, + 2.2484676837921143, + -0.000016957521438598633 + ] + }, + { + "name": "Armature_mixamorig:LeftHandMiddle4", + "rotation": [ + -4.5380154745089385e-8, + 5.855691398437557e-8, + 8.149073416063857e-9, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + 0.02951037883758545, + 2.0856528282165527, + 0.000010073184967041016 + ] + }, + { + "children": [ + 26 + ], + "name": "Armature_mixamorig:LeftHandRing1", + "rotation": [ + 0.10404136031866074, + -0.008528899401426315, + -0.08125600963830948, + 0.9912115335464478 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.8905025720596313, + 5.982393264770508, + -0.24304264783859253 + ] + }, + { + "children": [ + 27 + ], + "name": "Armature_mixamorig:LeftHandRing2", + "rotation": [ + -0.03329118713736534, + -6.639353955506522e-8, + -3.7273565567375044e-8, + 0.9994457960128784 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.017888784408569336, + 2.1800594329833984, + -0.000017344951629638672 + ] + }, + { + "children": [ + 28 + ], + "name": "Armature_mixamorig:LeftHandRing3", + "rotation": [ + -0.08213821053504944, + 5.25645127424923e-8, + 6.078793717279041e-7, + 0.9966209530830383 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.0040547847747802734, + 1.9782464504241943, + -0.000038623809814453125 + ] + }, + { + "name": "Armature_mixamorig:LeftHandRing4", + "rotation": [ + -1.4202669262886047e-7, + -1.4062970876693726e-7, + -1.5425030142068863e-7, + 1 + ], + "scale": [ + 0.9999999403953552, + 1, + 1 + ], + "translation": [ + 0.02194046974182129, + 1.7619253396987915, + 0.000026524066925048828 + ] + }, + { + "children": [ + 30 + ], + "name": "Armature_mixamorig:LeftHandPinky1", + "rotation": [ + 0.13995902240276337, + -0.024145862087607384, + -0.16828545928001404, + 0.9754529595375061 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 2.112321376800537, + 5.15140962600708, + -0.10163509845733643 + ] + }, + { + "children": [ + 31 + ], + "name": "Armature_mixamorig:LeftHandPinky2", + "rotation": [ + -0.012911615893244743, + 6.519802298043942e-8, + 6.445289386647346e-7, + 0.999916672706604 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + -0.006536006927490234, + 1.828072190284729, + -0.00001633167266845703 + ] + }, + { + "children": [ + 32 + ], + "name": "Armature_mixamorig:LeftHandPinky3", + "rotation": [ + -0.09343928843736649, + 1.850952742188383e-7, + -2.745443339335907e-7, + 0.9956250786781311 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + -0.006233692169189453, + 1.5249935388565063, + 0.000025272369384765625 + ] + }, + { + "name": "Armature_mixamorig:LeftHandPinky4", + "rotation": [ + 5.541368963690729e-8, + -5.9371814131736755e-9, + 1.3969838619232178e-9, + 1 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 0.012760639190673828, + 1.3818011283874512, + -0.000005304813385009766 + ] + }, + { + "children": [ + 34 + ], + "name": "Armature_mixamorig:RightShoulder", + "rotation": [ + 0.5726097226142883, + -0.40782278776168823, + 0.5916988849639893, + 0.394577294588089 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1 + ], + "translation": [ + -3.513521194458008, + 8.98842716217041, + -0.11455440521240234 + ] + }, + { + "children": [ + 35 + ], + "name": "Armature_mixamorig:RightArm", + "rotation": [ + -0.19615903496742249, + 0.0015209860866889358, + -0.007602959871292114, + 0.980541467666626 + ], + "scale": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + 6.854534149169922e-7, + 7.4837188720703125, + -0.0000069588422775268555 + ] + }, + { + "children": [ + 36 + ], + "name": "Armature_mixamorig:RightForeArm", + "rotation": [ + -0.005199347157031298, + 0.00015941221499815583, + -0.03064456395804882, + 0.9995168447494507 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + -0.0000010132789611816406, + 22.770898818969727, + -0.0000026673078536987305 + ] + }, + { + "children": [ + 37, + 41, + 45, + 49, + 53 + ], + "name": "Armature_mixamorig:RightHand", + "rotation": [ + -0.027066726237535477, + 0.03516821190714836, + 0.024613087996840477, + 0.9987115859985352 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 5.960464477539062e-7, + 19.027141571044922, + -0.000011309981346130371 + ] + }, + { + "children": [ + 38 + ], + "name": "Armature_mixamorig:RightHandThumb1", + "rotation": [ + 0.24496246874332428, + -0.07342495024204254, + -0.27757158875465393, + 0.9260433316230774 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 1.4313437938690186, + 1.9488826990127563, + 1.373734474182129 + ] + }, + { + "children": [ + 39 + ], + "name": "Armature_mixamorig:RightHandThumb2", + "rotation": [ + 0.02597731165587902, + 4.695450286362757e-7, + 4.360061325314746e-7, + 0.9996625781059265 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.09870082139968872, + 2.2226028442382812, + 0.000018328428268432617 + ] + }, + { + "children": [ + 40 + ], + "name": "Armature_mixamorig:RightHandThumb3", + "rotation": [ + 0.0020599281415343285, + -4.209587416426075e-7, + -2.747407563674642e-7, + 0.9999979734420776 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.08420944213867188, + 1.993523359298706, + -0.000024646520614624023 + ] + }, + { + "name": "Armature_mixamorig:RightHandThumb4", + "rotation": [ + 6.705523247774181e-8, + -7.450580596923828e-9, + 6.05359673500061e-8, + 1 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + -0.1829054355621338, + 1.5351988077163696, + 0.000009775161743164062 + ] + }, + { + "children": [ + 42 + ], + "name": "Armature_mixamorig:RightHandIndex1", + "rotation": [ + 0.04785900563001633, + -0.003934510983526707, + -0.08183817565441132, + 0.9954881072044373 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 2.2894375324249268, + 5.801694393157959, + 0.050646696239709854 + ] + }, + { + "children": [ + 43 + ], + "name": "Armature_mixamorig:RightHandIndex2", + "rotation": [ + -0.028287818655371666, + 7.496872456158599e-8, + 2.392710314325086e-7, + 0.9995998740196228 + ], + "scale": [ + 1, + 1, + 0.9999999403953552 + ], + "translation": [ + 0.029898226261138916, + 2.2504000663757324, + 0.000021301209926605225 + ] + }, + { + "children": [ + 44 + ], + "name": "Armature_mixamorig:RightHandIndex3", + "rotation": [ + -0.14387890696525574, + 7.74066961639619e-8, + 1.5951893317378563e-7, + 0.9895954132080078 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + 0.01506185531616211, + 2.0928609371185303, + 0.00001971423625946045 + ] + }, + { + "name": "Armature_mixamorig:RightHandIndex4", + "rotation": [ + -2.57976381590197e-7, + -8.847565879932517e-8, + -1.480803035747158e-7, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.04495549201965332, + 1.9040567874908447, + -0.000019669532775878906 + ] + }, + { + "children": [ + 46 + ], + "name": "Armature_mixamorig:RightHandMiddle1", + "rotation": [ + 0.06535934656858444, + -0.0012092242250218987, + -0.018458466976881027, + 0.9976903200149536 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.6151741147041321, + 5.987786293029785, + -0.2521481215953827 + ] + }, + { + "children": [ + 47 + ], + "name": "Armature_mixamorig:RightHandMiddle2", + "rotation": [ + -0.02911515347659588, + -1.493660128915053e-8, + 1.2578189512169047e-7, + 0.9995761513710022 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 0.025691747665405273, + 2.3235480785369873, + 0.0000058710575103759766 + ] + }, + { + "children": [ + 48 + ], + "name": "Armature_mixamorig:RightHandMiddle3", + "rotation": [ + -0.12079086899757385, + 3.73517679008728e-8, + 3.685922251861484e-7, + 0.9926779866218567 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999998211860657 + ], + "translation": [ + 0.011220812797546387, + 2.2008121013641357, + 0.000029072165489196777 + ] + }, + { + "name": "Armature_mixamorig:RightHandMiddle4", + "rotation": [ + 2.531742211431265e-7, + -1.9557775843281888e-8, + 2.561137080192566e-9, + 1 + ], + "scale": [ + 1, + 1, + 0.9999999403953552 + ], + "translation": [ + -0.036910414695739746, + 2.00234055519104, + 0.00000260770320892334 + ] + }, + { + "children": [ + 50 + ], + "name": "Armature_mixamorig:RightHandRing1", + "rotation": [ + 0.08960019052028656, + 0.007558114361017942, + 0.0837147906422615, + 0.9924246072769165 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.8287993669509888, + 5.778010845184326, + -0.2080925703048706 + ] + }, + { + "children": [ + 51 + ], + "name": "Armature_mixamorig:RightHandRing2", + "rotation": [ + 0.02305533178150654, + -1.0247272363983484e-8, + -2.6083968762691256e-8, + 0.9997342824935913 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 0.008643150329589844, + 2.2196152210235596, + -0.000009953975677490234 + ] + }, + { + "children": [ + 52 + ], + "name": "Armature_mixamorig:RightHandRing3", + "rotation": [ + -0.12460635602474213, + 6.288876619464645e-8, + 3.815565037257329e-7, + 0.992206335067749 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.016327381134033203, + 2.091179847717285, + 0.000004410743713378906 + ] + }, + { + "name": "Armature_mixamorig:RightHandRing4", + "rotation": [ + -8.42846930027008e-8, + -6.05359673500061e-8, + -6.356277282293377e-8, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 1 + ], + "translation": [ + -0.02497267723083496, + 1.9166507720947266, + -0.000018537044525146484 + ] + }, + { + "children": [ + 54 + ], + "name": "Armature_mixamorig:RightHandPinky1", + "rotation": [ + 0.1575794368982315, + 0.028793327510356903, + 0.17742541432380676, + 0.9710097312927246 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + -2.075824737548828, + 5.181243896484375, + -0.156680166721344 + ] + }, + { + "children": [ + 55 + ], + "name": "Armature_mixamorig:RightHandPinky2", + "rotation": [ + -0.021833697333931923, + -8.849674060229518e-8, + -3.185882917478011e-7, + 0.9997616410255432 + ], + "scale": [ + 1, + 0.9999998211860657, + 0.9999999403953552 + ], + "translation": [ + 0.009781837463378906, + 1.9066412448883057, + 0.00003445148468017578 + ] + }, + { + "children": [ + 56 + ], + "name": "Armature_mixamorig:RightHandPinky3", + "rotation": [ + -0.0985320433974266, + -1.1792045739866808e-7, + -2.5736605735460216e-8, + 0.9951338768005371 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + 0.004714488983154297, + 1.55594801902771, + 0.000019788742065429688 + ] + }, + { + "name": "Armature_mixamorig:RightHandPinky4", + "rotation": [ + 1.695007227908718e-7, + -6.053597445543346e-8, + 1.6530977475781583e-8, + 1 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -0.014493942260742188, + 1.4579054117202759, + -0.000033020973205566406 + ] + }, + { + "children": [ + 58 + ], + "name": "Armature_mixamorig:LeftUpLeg", + "rotation": [ + -0.000008872594662534539, + 0.0009148783865384758, + 0.9998617172241211, + 0.016607170924544334 + ], + "scale": [ + 1.0001250505447388, + 1, + 1.000000238418579 + ], + "translation": [ + 6.5092010498046875, + -3.8089065551757812, + -0.3193536400794983 + ] + }, + { + "children": [ + 59 + ], + "name": "Armature_mixamorig:LeftLeg", + "rotation": [ + -0.019678570330142975, + -0.00024797735386528075, + 0.012827177532017231, + 0.9997241497039795 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + 4.90503225591965e-7, + 45.04969024658203, + -3.3028754842234775e-8 + ] + }, + { + "children": [ + 60 + ], + "name": "Armature_mixamorig:LeftFoot", + "rotation": [ + 0.4820258617401123, + 0.06575184315443039, + -0.03629865497350693, + 0.872931957244873 + ], + "scale": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "translation": [ + -3.387158358236775e-7, + 41.849327087402344, + -3.457535058259964e-8 + ] + }, + { + "children": [ + 61 + ], + "name": "Armature_mixamorig:LeftToeBase", + "rotation": [ + 0.29159197211265564, + -0.06168047711253166, + 0.01884075440466404, + 0.9543660879135132 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 8.810311555862427e-7, + 12.08905029296875, + -0.000003889203071594238 + ] + }, + { + "name": "Armature_mixamorig:LeftToe_End", + "rotation": [ + 9.872019290924072e-8, + 0.000008056988008320332, + -1.909211277961731e-8, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -3.5762786865234375e-7, + 4.706444263458252, + 5.960464477539063e-8 + ] + }, + { + "children": [ + 63 + ], + "name": "Armature_mixamorig:RightUpLeg", + "rotation": [ + -0.00000294413257506676, + -0.0034815834369510412, + -0.9998561143875122, + 0.01660647802054882 + ], + "scale": [ + 1.000124216079712, + 1, + 1.0000035762786865 + ], + "translation": [ + -6.5092010498046875, + -3.8089065551757812, + -0.4497392773628235 + ] + }, + { + "children": [ + 64 + ], + "name": "Armature_mixamorig:RightLeg", + "rotation": [ + -0.022010719403624535, + 0.00022552665905095637, + -0.012826679274439812, + 0.999675452709198 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 1 + ], + "translation": [ + 4.079265636391938e-8, + 45.050357818603516, + -1.5308614820241928e-8 + ] + }, + { + "children": [ + 65 + ], + "name": "Armature_mixamorig:RightFoot", + "rotation": [ + 0.48082953691482544, + -0.06620366871356964, + 0.03643133118748665, + 0.8735518455505371 + ], + "scale": [ + 1, + 1.0000001192092896, + 1.000000238418579 + ], + "translation": [ + -9.810537449084222e-8, + 41.85009765625, + 4.062894731760025e-8 + ] + }, + { + "children": [ + 66 + ], + "name": "Armature_mixamorig:RightToeBase", + "rotation": [ + 0.29314252734184265, + 0.06225594878196716, + -0.01912800408899784, + 0.9538480043411255 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "translation": [ + -6.51925802230835e-8, + 12.033415794372559, + 0.0000034570693969726562 + ] + }, + { + "name": "Armature_mixamorig:RightToe_End", + "rotation": [ + -3.748573362827301e-8, + -0.000008230912499129772, + -2.9453076422214508e-8, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 1.043081283569336e-7, + 4.712545394897461, + 3.2782554626464844e-7 + ] + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987, + "name": "Saber-Face", + "wrapS": 10497, + "wrapT": 10497 + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 0 + ] + } + ], + "textures": [ + { + "name": "Saber-Face", + "sampler": 0, + "source": 0 + } + ], + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "visibility": [ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "type": "skin", + "linkedSkeletons": [ + { + "inverseBindMatrices": 83, + "joints": [ + 5, + 6, + 7 + ], + "name": "F010_Saber_Face", + "skeleton": "face" + } + ] + } + } +} \ No newline at end of file diff --git a/models/gltf/saber-face/saber_01_face.png b/models/gltf/saber-face/saber_01_face.png new file mode 100644 index 0000000000000000000000000000000000000000..baba4465c57f1a481033cf7d77ff5ff2c85e72e4 Binary files /dev/null and b/models/gltf/saber-face/saber_01_face.png differ diff --git a/models/gltf/saber-lily-hair-sub-skeleton/buffer_combined_lily_hair.bin b/models/gltf/saber-lily-hair-sub-skeleton/buffer_combined_lily_hair.bin new file mode 100644 index 0000000000000000000000000000000000000000..49ad1b9166bf3f4c0dad14cacff71a9adbf07a92 --- /dev/null +++ b/models/gltf/saber-lily-hair-sub-skeleton/buffer_combined_lily_hair.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89b9c47ffd03bed77151477be639caceeda75034bb0e8372b81c2023dd90f21c +size 119232 diff --git a/models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair-sub-skeleton.gltf b/models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair-sub-skeleton.gltf new file mode 100644 index 0000000000000000000000000000000000000000..77a82c81bae97b126660754cffc1c65e214ae56e --- /dev/null +++ b/models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair-sub-skeleton.gltf @@ -0,0 +1,2329 @@ +{ + "accessors": [ + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.001_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.009_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.8596649169921875e-05, + 10.180709838867188, + 4.76837158203125e-06 + ], + "min": [ + -1.621246337890625e-05, + 10.180678367614746, + -3.814697265625e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.005_end_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 11, + "max": [ + 1.0327227115631104, + 0.6239191293716431, + 0.07009133696556091, + 0, + 0.4582105278968811, + 0.6303824186325073, + 0.987378716468811, + 0, + 0.024118104949593544, + 0.2575811445713043, + 1.031016230583191, + 0, + 88.88380432128906, + 154.89089965820312, + 35.49950408935547, + 1.0 + ], + "min": [ + -1.0327227115631104, + -0.4529816508293152, + -0.06907801330089569, + 0.0, + -0.6249785423278809, + -1.0302014350891113, + -0.13357895612716675, + 0.0, + -0.006990982219576836, + -0.9873788356781006, + -0.641240656375885, + 0.0, + -65.19131469726562, + -101.52924346923828, + -151.9137725830078, + 1.0 + ], + "name": "accessor_buffer_IBM_F005_Saber_Lily_Hair_skin_0", + "type": "MAT4" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 1.1175870895385742e-08, + 1.0305666364729404e-07, + 1.0 + ], + "min": [ + -3.958120942115784e-08, + 0.0, + 3.4691765904426575e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.005_end_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 5.602836608886719e-06, + 9.995529174804688, + 8.657574653625488e-06 + ], + "min": [ + -7.510185241699219e-06, + 9.995469093322754, + -4.5746564865112305e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.005_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.008_end_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0728836059570312e-05, + 8.844691276550293, + 3.978610038757324e-06 + ], + "min": [ + -1.5974044799804688e-05, + 8.844643592834473, + -2.8014183044433594e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.006_end_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 1080, + "max": [ + 11.374273300170898, + 158.2478485107422, + 15.2084321975708 + ], + "min": [ + -13.54065227508545, + 119.9798355102539, + -19.69013023376465 + ], + "name": "accessor_buffer_F005_Saber_Lily.001_0", + "type": "VEC3" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 0.20759835839271545, + 0.024650610983371735, + 0.8324498534202576 + ], + "min": [ + -0.6156790852546692, + -1.3738021950506635e-13, + -1.3197442270962423e-12, + 0.7879970073699951 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.002_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 6.079673767089844e-06, + 9.995529174804688, + 8.64267349243164e-06 + ], + "min": [ + -7.510185241699219e-06, + 9.995469093322754, + -4.589557647705078e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.006_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.010_end_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.004_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 2.002716064453125e-05, + 11.638476371765137, + 2.86102294921875e-06 + ], + "min": [ + -1.1920928955078125e-06, + 11.638422012329102, + -1.1514872312545776e-05 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.010_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 7.087368913971659e-08, + 0, + 0.594531774520874 + ], + "min": [ + -0.8040720820426941, + 7.087368913971659e-08, + -9.585283322621763e-08, + 0.594531774520874 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0, + 0.9999999403953552, + 0.9999998807907104 + ], + "min": [ + 1.0, + 0.9999999403953552, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5121, + "count": 1080, + "max": [ + 10, + 10, + 10, + 9 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F005_Saber_Lily.001_skin_0", + "type": "VEC4" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 5.284303665161133, + 3.814697265625e-06 + ], + "min": [ + -1.9590834510196942e-10, + 5.284303665161133, + 3.814697265625e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.002_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.005_end_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 0.022547733038663864, + 0, + 0.9914775490760803 + ], + "min": [ + -0.018711822107434273, + -0.0052304682321846485, + -0.19755667448043823, + 0.9800057411193848 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.009_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 9.441317843084107e-07, + 0.9149165749549866, + 0, + 0 + ], + "min": [ + 9.15693192382605e-07, + 0.9149165749549866, + -0.4036429822444916, + -2.1982234557071934e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.003_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 24, + "componentType": 5126, + "count": 1080, + "max": [ + 0.9960240125656128, + 0.6760500073432922 + ], + "min": [ + 0.013795963488519192, + 0.015339016914367676 + ], + "name": "accessor_buffer_F005_Saber_Lily.001_2", + "type": "VEC2" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.000000238418579, + 1.0, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.010_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 12, + "componentType": 5126, + "count": 1080, + "max": [ + 0.9985730648040771, + 0.9978241920471191, + 0.999619722366333 + ], + "min": [ + -0.9999706745147705, + -0.9921464920043945, + -0.9973178505897522 + ], + "name": "accessor_buffer_F005_Saber_Lily.001_1", + "type": "VEC3" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_Character_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 3.026798367500305e-08, + 0, + 1.0 + ], + "min": [ + -5.5995776904183003e-08, + 2.1886076950750066e-08, + -1.9051367416977882e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.006_end_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.006_end_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.005962503142654896, + 0, + 0.3186379373073578, + 0.9476341009140015 + ], + "min": [ + 0.005962476134300232, + -0.020594973117113113, + 0.3186378479003906, + 0.9476340413093567 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.007_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 8.626376768461341e-08, + 0, + 6.830669718738136e-08, + 1.0 + ], + "min": [ + 6.426125764846802e-08, + -1.1497177183628082e-06, + 1.312582664780848e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.010_end_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 5.756405830383301, + 6.9159132181084715e-06 + ], + "min": [ + -8.526512829121202e-10, + 5.756405830383301, + 6.9159132181084715e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.001_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1.0 + ], + "min": [ + 0.9999997019767761, + 0.9999995231628418, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.005_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 7.62939453125e-06, + 9.567142486572266, + 7.271766662597656e-06 + ], + "min": [ + -9.775161743164062e-06, + 9.567079544067383, + -4.082918167114258e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.007_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0 + ], + "min": [ + 0.9999998211860657, + 1.0, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.003_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0, + 7.003545761108398e-07, + 0, + 1.0 + ], + "min": [ + -4.9418311220961186e-08, + 6.975606083869934e-07, + -3.786990703247284e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.008_end_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 5.841255187988281e-06, + 5.5141401290893555, + 2.5529414415359497e-05 + ], + "min": [ + -7.987022399902344e-06, + 5.514109134674072, + -2.9742717742919922e-05 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.003_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.007442473899573088, + 158.2762451171875, + 0 + ], + "min": [ + 0.007442473899573088, + 158.2762451171875, + -2.0029349327087402 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.008_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5123, + "count": 4740, + "max": [ + 1079 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F005_Saber_Lily.001_3", + "type": "SCALAR" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 2.541666666666666 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character|Character|HairWind|Character|HairWind_time_0", + "type": "SCALAR" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.007_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.4591187536716461, + 0, + 5.47319203292318e-08, + 0.888374924659729 + ], + "min": [ + 0.4591187536716461, + -1.0590319732273201e-07, + 5.47319203292318e-08, + 0.888374924659729 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.001_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.07771865278482437, + 0, + 0, + 0.9631495475769043 + ], + "min": [ + 0.07771861553192139, + -0.0021692458540201187, + -0.2574845254421234, + 0.9631494283676147 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.008_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.08967003226280212, + 0, + 0, + 0.9779517650604248 + ], + "min": [ + 0.02894958294928074, + -0.028009315952658653, + -0.34051457047462463, + 0.9394921660423279 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.005_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 7.62939453125e-06, + 6.656620979309082, + 3.9711594581604e-06 + ], + "min": [ + -4.231929779052734e-06, + 6.656558990478516, + -3.3676624298095703e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.008_end_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.06845266371965408, + 0, + 0.059766195714473724, + 0.9958541393280029 + ], + "min": [ + 0.0684526264667511, + -0.004106619860976934, + 0.05976615101099014, + 0.9958541393280029 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.004_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.006_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.0615803487598896, + 0.10701712220907211, + 0.07948122918605804, + 0.9976734519004822 + ], + "min": [ + 0.054284241050481796, + 0.002490919316187501, + -0.1866903156042099, + 0.9750627279281616 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.006_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.0, + 1.000000238418579, + 1.0 + ], + "min": [ + 0.9999999403953552, + 1.0, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.002_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 16, + "componentType": 5126, + "count": 1080, + "max": [ + 1.0, + 0.4837481677532196, + 0.18697375059127808, + 0.04054027423262596 + ], + "min": [ + 0.5017304420471191, + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_F005_Saber_Lily.001_skin_1", + "type": "VEC4" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 2.158433198928833e-05, + 7.795601844787598, + 5.364418029785156e-06 + ], + "min": [ + -1.9758939743041992e-05, + 7.795560836791992, + -4.872679710388184e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.010_end_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_Character|Character|HairWind|Character|HairWind_2", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 7.62939453125e-06, + 9.567142486572266, + 7.271766662597656e-06 + ], + "min": [ + -9.775161743164062e-06, + 9.567079544067383, + -4.082918167114258e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.004_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 7.62939453125e-06, + 9.567142486572266, + 7.271766662597656e-06 + ], + "min": [ + -9.775161743164062e-06, + 9.567079544067383, + -4.082918167114258e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.009_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 1.7647864297032356e-05, + 10.731948852539062, + 5.9194862842559814e-06 + ], + "min": [ + -1.5690922737121582e-05, + 10.73189926147461, + -7.1302056312561035e-06 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.008_Character|Character|HairWind|Character|HairWind_0", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 62, + "max": [ + 0.17788612842559814, + 0.0833565890789032, + 0.11977327615022659, + 0.9835643172264099 + ], + "min": [ + 0.17060880362987518, + 0.004593174904584885, + -0.1807146817445755, + 0.9650131464004517 + ], + "name": "accessor_buffer_mixamorig:PonyTailRoot.010_Character|Character|HairWind|Character|HairWind_1", + "type": "VEC4" + } + ], + "animations": [ + { + "channels": [ + { + "sampler": 1, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 4, + "target": { + "node": 16, + "path": "rotation" + } + }, + { + "sampler": 7, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 10, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 13, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 16, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 19, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 22, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 25, + "target": { + "node": 0, + "path": "rotation" + } + }, + { + "sampler": 28, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 31, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 34, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 37, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 40, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 43, + "target": { + "node": 2, + "path": "rotation" + } + }, + { + "sampler": 46, + "target": { + "node": 12, + "path": "rotation" + } + } + ], + "name": "Character|Character|HairWind|Character|HairWind", + "samplers": [ + { + "input": 39, + "interpolation": "LINEAR", + "output": 7 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 26 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 27 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 50 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 29 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 12 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 44 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 34 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 6 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 5 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 43 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 31 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 35 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 21 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 33 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 30 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 41 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 0 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 2 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 4 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 19 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 18 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 9 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 48 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 25 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 11 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 51 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 52 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 45 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 13 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 53 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 20 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 1 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 32 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 28 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 40 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 10 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 47 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 46 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 14 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 55 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 23 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 36 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 15 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 16 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 54 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 42 + }, + { + "input": 39, + "interpolation": "LINEAR", + "output": 37 + } + ] + } + ], + "asset": { + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 34560, + "byteOffset": 0, + "byteStride": 32, + "name": "bufferView_buffer_F005_Saber_Lily.001_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9480, + "byteOffset": 34560, + "name": "bufferView_buffer_F005_Saber_Lily.001_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 34560, + "byteOffset": 44040, + "byteStride": 32, + "name": "bufferView_buffer_F005_Saber_Lily.001_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 248, + "byteOffset": 78600, + "byteStride": 4, + "name": "bufferView_buffer_Character|Character|HairWind|Character|HairWind_time_0" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 78848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.006_end_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 79592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.006_end_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 80584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.006_end_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 81328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.010_end_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 82072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.010_end_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 83064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.010_end_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 83808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.008_end_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 84552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.008_end_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 85544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.008_end_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 86288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.005_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 87032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.005_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 88024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.005_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 88768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.003_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 89512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.003_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 90504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.003_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 91248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.001_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 91992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.001_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 92984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.001_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 93728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.005_end_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 94472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.005_end_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 95464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.005_end_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 96208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.002_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 96952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.002_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 97944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.002_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 98688, + "byteStride": 12, + "name": "bufferView_buffer_Character_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 99432, + "byteStride": 16, + "name": "bufferView_buffer_Character_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 100424, + "byteStride": 12, + "name": "bufferView_buffer_Character_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 101168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.004_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 101912, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.004_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 102904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.004_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 103648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.009_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 104392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.009_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 105384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.009_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 106128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.007_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 106872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.007_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 107864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.007_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 108608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.006_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 109352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.006_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 110344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.006_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 111088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.010_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 111832, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.010_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 112824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.010_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 113568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 114312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 115304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 116048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.008_Character|Character|HairWind|Character|HairWind_0" + }, + { + "buffer": 0, + "byteLength": 992, + "byteOffset": 116792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.008_Character|Character|HairWind|Character|HairWind_1" + }, + { + "buffer": 0, + "byteLength": 744, + "byteOffset": 117784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:PonyTailRoot.008_Character|Character|HairWind|Character|HairWind_2" + }, + { + "buffer": 0, + "byteLength": 704, + "byteOffset": 118528, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F005_Saber_Lily_Hair_skin_0" + } + ], + "buffers": [ + { + "byteLength": 119232, + "name": "buffer_combined_lily_hair", + "uri": "buffer_combined_lily_hair.bin" + } + ], + "images": [ + { + "name": "saber-lily-hair.png", + "uri": "saber-lily-hair.png" + } + ], + "materials": [ + { + "emissiveFactor": [ + 0.0, + 0.0, + 0.0 + ], + "name": "lambert2.001", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0.0, + "roughnessFactor": 1.0 + }, + "doubleSided": true + } + ], + "meshes": [ + { + "name": "F005_Saber_Lily.001", + "primitives": [ + { + "attributes": { + "JOINTS_0": 17, + "NORMAL": 24, + "POSITION": 8, + "TEXCOORD_0": 22, + "WEIGHTS_0": 49 + }, + "indices": 38, + "material": 0, + "mode": 4 + } + ] + } + ], + "nodes": [ + { + "children": [ + 1, + 2 + ], + "name": "Character", + "rotation": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "mesh": 0, + "name": "F005_Saber_Lily_Hair", + "rotation": [ + 3.310074436768673e-09, + -9.180956233971471e-16, + -7.524711207590722e-15, + 1.0 + ], + "scale": [ + 1.0327227115631104, + 1.0327227115631104, + 1.0327225923538208 + ], + "skin": 0, + "translation": [ + 3.5029959488674933e-10, + 9.777553714229725e-06, + 1.8731819864115096e-06 + ] + }, + { + "children": [ + 3 + ], + "name": "Character_mixamorig:PonyTailRoot", + "rotation": [ + -0.8040720820426941, + 7.087368913971659e-08, + -9.585284033164498e-08, + 0.594531774520874 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 0.9999998807907104 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ], + "extensions": { + "gl_avatar": { + "root": "head-end" + } + } + }, + { + "children": [ + 4 + ], + "name": "Character_mixamorig:PonyTailRoot.001", + "rotation": [ + 0.4591187536716461, + -1.0590319021730465e-07, + 5.473191677651812e-08, + 0.888374924659729 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -1.3110934560245369e-09, + 5.756401538848877, + -2.384008257649839e-05 + ] + }, + { + "children": [ + 5 + ], + "name": "Character_mixamorig:PonyTailRoot.002", + "rotation": [ + -0.6156789660453796, + -1.4015798612855568e-13, + -1.3238103105037147e-12, + 0.7879971265792847 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 2.6468943703505943e-10, + 5.284313201904297, + 3.4332275390625e-05 + ] + }, + { + "children": [ + 6, + 11, + 14 + ], + "name": "Character_mixamorig:PonyTailRoot.003", + "rotation": [ + 9.447426805309078e-07, + 0.9149165749549866, + -0.4036429822444916, + -2.14133888221113e-06 + ], + "scale": [ + 1.0, + 1.000000238418579, + 1.0 + ], + "translation": [ + -1.970337226708807e-10, + 5.514124870300293, + 1.621246337890625e-05 + ] + }, + { + "children": [ + 7, + 9 + ], + "name": "Character_mixamorig:PonyTailRoot.004", + "rotation": [ + 0.06845264136791229, + -0.004106616601347923, + 0.05976616218686104, + 0.9958541393280029 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "translation": [ + 4.656612873077393e-10, + 9.567120552062988, + -3.48380133630144e-08 + ] + }, + { + "children": [ + 8 + ], + "name": "Character_mixamorig:PonyTailRoot.005", + "rotation": [ + 0.08967003226280212, + -0.028009314090013504, + -0.18654046952724457, + 0.9779455065727234 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 1.0 + ], + "translation": [ + 3.7550926208496094e-06, + 9.995545387268066, + -4.092289600521326e-06 + ] + }, + { + "name": "Character_mixamorig:PonyTailRoot.005_end", + "rotation": [ + -2.8870999813079834e-08, + 4.3655745685100555e-09, + 5.133915692567825e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -3.330409526824951e-06, + 10.18071174621582, + -1.9297003746032715e-06 + ] + }, + { + "children": [ + 10 + ], + "name": "Character_mixamorig:PonyTailRoot.006", + "rotation": [ + 0.061574019491672516, + 0.002490919316187501, + 0.07948122918605804, + 0.994929850101471 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 3.7550926208496094e-06, + 9.995545387268066, + -4.092289600521326e-06 + ] + }, + { + "name": "Character_mixamorig:PonyTailRoot.006_end", + "rotation": [ + -4.4703490686970326e-08, + 2.421439049271612e-08, + -1.6903506150356407e-07, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -7.152557373046875e-07, + 8.844663619995117, + 2.428889274597168e-06 + ] + }, + { + "children": [ + 12 + ], + "name": "Character_mixamorig:PonyTailRoot.007", + "rotation": [ + 0.005962477531284094, + -0.02059495821595192, + 0.318637877702713, + 0.9476340413093567 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 4.656612873077393e-10, + 9.567120552062988, + -3.48380133630144e-08 + ] + }, + { + "children": [ + 13 + ], + "name": "Character_mixamorig:PonyTailRoot.008", + "rotation": [ + 0.07771863043308258, + -0.0021692474838346243, + -0.257484495639801, + 0.9631494879722595 + ], + "scale": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998807907104 + ], + "translation": [ + -3.417953848838806e-07, + 10.731927871704102, + 2.0116567611694336e-06 + ] + }, + { + "name": "Character_mixamorig:PonyTailRoot.008_end", + "rotation": [ + -4.6333298087120056e-08, + 6.984919309616089e-07, + -3.7356221582740545e-07, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -7.972121238708496e-07, + 6.6565961837768555, + -2.5331974029541016e-07 + ] + }, + { + "children": [ + 15 + ], + "name": "Character_mixamorig:PonyTailRoot.009", + "rotation": [ + -0.036807890981435776, + 0.025806572288274765, + -0.226376011967659, + 0.9730021357536316 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 4.656612873077393e-10, + 9.567120552062988, + -3.48380133630144e-08 + ] + }, + { + "children": [ + 16 + ], + "name": "Character_mixamorig:PonyTailRoot.010", + "rotation": [ + 0.17768266797065735, + 0.004593169782310724, + 0.119773268699646, + 0.9767611026763916 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -2.4944543838500977e-05, + 11.63850212097168, + 1.3113021850585938e-06 + ] + }, + { + "name": "Character_mixamorig:PonyTailRoot.010_end", + "rotation": [ + 6.891787052154541e-08, + -1.1484953574836254e-06, + 2.4767359718680382e-08, + 1.0 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0000001192092896 + ], + "translation": [ + 1.8775463104248047e-06, + 7.795577526092529, + -1.1324882507324219e-06 + ] + }, + { + "children": [ + 0 + ], + "matrix": [ + -1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "Scene_root" + } + ], + "samplers": [ + { + "name": "default" + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "active_camera": null, + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 24 + }, + "name": "Scene", + "nodes": [ + 17 + ] + } + ], + "skins": [ + { + "inverseBindMatrices": 3, + "joints": [ + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 11, + 12, + 14, + 15 + ], + "name": "F005_Saber_Lily_Hair", + "skeleton": 2 + } + ], + "textures": [ + { + "name": "saber-lily-hair.png", + "sampler": 0, + "source": 0 + } + ], + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "visibility": [ + 0, + 0, 0, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1 + ], + "type": "skin" + } + } +} diff --git a/models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair.png b/models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair.png new file mode 100644 index 0000000000000000000000000000000000000000..ca42d0d51cb020bcfe832971ba91e2f0d95efd15 Binary files /dev/null and b/models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair.png differ diff --git a/models/gltf/saber-maid-hair-mixamo/buffer_combined_maid_hair.bin b/models/gltf/saber-maid-hair-mixamo/buffer_combined_maid_hair.bin new file mode 100644 index 0000000000000000000000000000000000000000..18faec0e6ddb04269f846a2f65127603ca06519e --- /dev/null +++ b/models/gltf/saber-maid-hair-mixamo/buffer_combined_maid_hair.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f871452037d96fa6d306bc2e3b6c11420c9891cee4796cc26cf53987c143a59 +size 101808 diff --git a/models/gltf/saber-maid-hair-mixamo/saber-hair-texture.png b/models/gltf/saber-maid-hair-mixamo/saber-hair-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..ead23c5dbd62cf7491295a78aa21c8abda96d278 Binary files /dev/null and b/models/gltf/saber-maid-hair-mixamo/saber-hair-texture.png differ diff --git a/models/gltf/saber-maid-hair-mixamo/saber-maid-hair.gltf b/models/gltf/saber-maid-hair-mixamo/saber-maid-hair.gltf new file mode 100644 index 0000000000000000000000000000000000000000..1f57ed0e5ea2c36617344e49537d20505569cf24 --- /dev/null +++ b/models/gltf/saber-maid-hair-mixamo/saber-maid-hair.gltf @@ -0,0 +1,5507 @@ +{ + "accessors": [ + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + 0, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "min": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1 + ], + "min": [ + 1, + 1.0000001192092896, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00005565229366766289, + 0, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.656612517806025e-8, + 0, + 0, + 1 + ], + "min": [ + 4.656612517806025e-8, + -1.9324940581100236e-7, + -4.982575063650074e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 7.4837236404418945, + 0 + ], + "min": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8846017122268677, + 0 + ], + "min": [ + -0.0597844123840332, + 1.8846017122268677, + -0.00000426173210144043 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 171, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1 + ], + "min": [ + 1, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.7125468254089355, + 0 + ], + "min": [ + -6.258487701416016e-7, + 4.7125468254089355, + -5.960464477539063e-8 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0011933766072615981, + 0, + 0.9998803734779358 + ], + "min": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0023322105407715, + 0 + ], + "min": [ + -0.03690838813781738, + 2.0023322105407715, + -0.0000020437873899936676 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000016051130842242856, + 0, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00034277912345714867, + 0, + 0.9999790191650391 + ], + "min": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 0.9999998807907104 + ], + "min": [ + 1, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999995231628418 + ], + "min": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0025572776794434, + 0 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 41.84932327270508, + 0 + ], + "min": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 12, + "componentType": 5126, + "count": 1109, + "max": [ + 0.9993376135826111, + 0.9996159672737122, + 0.9999437928199768 + ], + "min": [ + -0.9993394613265991, + -0.9995570182800293, + -0.9992420077323914 + ], + "name": "accessor_buffer_F010_Saber.003_1", + "type": "VEC3" + }, + { + "bufferView": 183, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 173, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.833076872046149e-8, + 7.194104423291492e-9, + 1 + ], + "min": [ + -4.388131102928128e-8, + 4.833076872046149e-8, + 7.194104423291492e-9, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 168, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 1109, + "max": [ + 11.429483413696289, + 164.35842895507812, + 10.030672073364258 + ], + "min": [ + -11.429343223571777, + 130.6600341796875, + -14.70002269744873 + ], + "name": "accessor_buffer_F010_Saber.003_0", + "type": "VEC3" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.7445827893425303e-7, + 0, + 3.6372512113302946e-8, + 1 + ], + "min": [ + 1.7445827893425303e-7, + -6.26357206101602e-8, + 3.6372512113302946e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.000000238418579, + 1, + 1.0000001192092896 + ], + "min": [ + 1.000000238418579, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 182, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.5535473109102895e-8, + 2.9428024461708446e-9, + 0, + 1 + ], + "min": [ + 5.5535473109102895e-8, + 2.9428024461708446e-9, + -0.000005548599347093841, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + 0 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -3.306195139884949e-8, + -0.000008229748345911503, + -2.3865142750878476e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 180, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.029511988162994385, + 2.085664749145508, + 0 + ], + "min": [ + 0.029511988162994385, + 2.085664749145508, + -0.000003653607564046979 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-7, + 7.483717918395996, + 0 + ], + "min": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.7723331451416, + 0.000002205953933298588 + ], + "min": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.4578983783721924, + 0 + ], + "min": [ + -0.014494240283966064, + 1.4578983783721924, + -0.000007362202268268447 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9782497882843018, + 0 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000019077392607869115, + 0, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 187, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + 0 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + 0, + 0 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 166, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.043081283569336e-7, + 4.706444263458252, + 1.4901161193847656e-8 + ], + "min": [ + 1.043081283569336e-7, + 4.706444263458252, + 1.4901161193847656e-8 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 194, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + 0, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + 0, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 193, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "min": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 170, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00083109550178051, + 0, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 10.314631462097168, + 2.384185791015625e-7 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + 0 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999953508377075 + ], + "min": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 167, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.172354171165352e-8, + 0.000008062284905463457, + 0, + 1 + ], + "min": [ + 8.172354171165352e-8, + 0.000008062284905463457, + -1.2136295524101115e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + 0 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.854499816894531, + 0 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 165, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-7, + 0, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 172, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.04969024658203, + 8.68749339133501e-9 + ], + "min": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.012762725353240967, + 1.3817871809005737, + 0 + ], + "min": [ + 0.012762725353240967, + 1.3817871809005737, + -0.000005348862032406032 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 189, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5123, + "count": 4038, + "max": [ + 1108 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.003_4", + "type": "SCALAR" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2484662532806396, + 0.000009948620572686195 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 24, + "componentType": 5126, + "count": 1109, + "max": [ + 0.9941849112510681, + 0.6996400058269501 + ], + "min": [ + 0.024950888007879257, + 0.007812023162841797 + ], + "name": "accessor_buffer_F010_Saber.003_2", + "type": "VEC2" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + 0, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5351991653442383, + 0.000011235475540161133 + ], + "min": [ + -0.18289971351623535, + 1.5351991653442383, + 0.000011235475540161133 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 181, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00007425900548696518, + 98.80355834960938, + 0.4175964593887329 + ], + "min": [ + 0.00007425900548696518, + 98.80355834960938, + 0.4175964593887329 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 198, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2824809551239014, + 0.00000463516335003078 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.725291364276018e-8, + 0, + 3.259629011154175e-8, + 1 + ], + "min": [ + 3.725291364276018e-8, + -5.58793766813892e-9, + 3.259629011154175e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00001167778464150615, + 0, + 0.9999808073043823, + 0 + ], + "min": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 201, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 178, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0008116317912936211, + 0, + 0.9999305605888367 + ], + "min": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 184, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.77089500427246, + 0.000006812736501160543 + ], + "min": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -2.464207682351116e-7, + -8.914983595786907e-8, + -1.517519194749184e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9040616750717163, + 0 + ], + "min": [ + -0.044958412647247314, + 1.9040616750717163, + -0.000012791395420208573 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -2.3662607873120578e-8, + -2.0191042438000295e-7, + -1.5510249795624986e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 179, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 190, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + 0 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-7, + 41.85009002685547, + 0 + ], + "min": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1800546646118164, + 0 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 5.4569682106375694e-12, + 1 + ], + "min": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 175, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "min": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 8.988426208496094, + 0 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-7, + 0, + 4.313407657718926e-7, + 1 + ], + "min": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 186, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000014512252164422534, + 0.0003296945069450885, + 0, + 0.9999457001686096 + ], + "min": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.000002737616568992962, + 0, + 0, + 0.9967700242996216 + ], + "min": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 202, + "byteOffset": 0, + "componentType": 5126, + "count": 65, + "max": [ + 1.0011157989501953, + 1.0004726648330688, + 0.3728281855583191, + 0, + 0.1791374236345291, + 1.0011159181594849, + 0.9939086437225342, + 0, + 0.9973942041397095, + 0.9979981184005737, + 1.0011157989501953, + 0, + 36.08419418334961, + 95.18425750732422, + 139.18643188476562, + 1 + ], + "min": [ + -1.0009628534317017, + -1.000463843345642, + -0.3957006633281708, + 0, + -0.1620984524488449, + -1.0005624294281006, + -0.9972899556159973, + 0, + -0.9975388050079346, + -0.3510676324367523, + -0.1874166578054428, + 0, + -40.01988983154297, + -158.2681884765625, + -8.502774238586426, + 1 + ], + "name": "accessor_buffer_IBM_F010_Saber_Hair.001_skin_0", + "type": "MAT4" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + 0, + 0, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.80437906032391e-23, + 0, + 1 + ], + "min": [ + -8.673616862896153e-19, + 6.80437906032391e-23, + -1.8189894035458565e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + 0 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 169, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.006504923105239868, + 1.635219693183899, + 0 + ], + "min": [ + 0.006504923105239868, + 1.635219693183899, + -0.00002377049531787634 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5121, + "count": 1109, + "max": [ + 5, + 31, + 32, + 32 + ], + "min": [ + 5, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_0", + "type": "VEC4" + }, + { + "bufferView": 176, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + 0, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 199, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + 0 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.034996457397937775, + 0, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 9.422998405866911e-13, + 0, + 1 + ], + "min": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 32, + "componentType": 5126, + "count": 1109, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_F010_Saber.003_3", + "type": "VEC3" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 191, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 174, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 200, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.003121189074590802, + 0, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.933863162994385, + 0 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.20922753821651e-8, + 0, + 1.4510078472085297e-8, + 1 + ], + "min": [ + 5.20922753821651e-8, + -1.1215498751937503e-8, + 1.4510078472085297e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "min": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.000005544060059037292, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 164, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -9.267012046620948e-8, + -5.819203607870804e-8, + -6.402842700481415e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5249916315078735, + 0.000022089123376645148 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.010770494118332863, + 0, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 192, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1517670154571533, + 0 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.778012275695801, + 0 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 19.023351669311523, + 0 + ], + "min": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 188, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + 0, + 1 + ], + "min": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 185, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000018012506188824773, + 0.00015944617916829884, + 0, + 1 + ], + "min": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 196, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "min": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 177, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -1.473153474762512e-7, + -1.363462160952622e-7, + -1.3542921806219965e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0, + 0, + 0 + ], + "name": "accessor_buffer_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999955296516418 + ], + "min": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 195, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 1 + ], + "min": [ + 0.9999999403953552, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.252031947591604e-7, + 0, + 2.586603153886813e-9, + 1 + ], + "min": [ + 2.252031947591604e-7, + -1.896821366642598e-8, + 2.586603153886813e-9, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 2, + "byteOffset": 16, + "componentType": 5126, + "count": 1109, + "max": [ + 1, + 0.0767483115196228, + 0.01539947371929884, + 0 + ], + "min": [ + 0.9057729244232178, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_1", + "type": "VEC4" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.916641116142273, + 0 + ], + "min": [ + -0.02496713399887085, + 1.916641116142273, + -0.000015547877410426736 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + 0, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + 0 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + 0 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + 0, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 197, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0003684632829390466, + 0, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.021941065788269043, + 1.7619209289550781, + 0.00002016910548263695 + ], + "min": [ + 0.021941065788269043, + 1.7619209289550781, + 0.00002016910548263695 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.181240558624268, + 0 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8280677795410156, + 0 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + 0, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00004969544170307927, + 0.0011240799212828279, + 0, + 0.9999988079071045 + ], + "min": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00004930837167194113, + 0, + 1 + ], + "min": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_1", + "type": "VEC4" + } + ], + "asset": { + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 48796, + "byteOffset": 0, + "byteStride": 44, + "name": "bufferView_buffer_F010_Saber.003_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8076, + "byteOffset": 48796, + "name": "bufferView_buffer_F010_Saber.003_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 35488, + "byteOffset": 56872, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.003_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 92360, + "byteStride": 4, + "name": "bufferView_buffer_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92632, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 92952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 92984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93112, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93672, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93704, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93752, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93832, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93912, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 93968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 93992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94152, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94184, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94232, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94264, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94632, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 94952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 94984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95112, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95328, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95352, + "byteStride": 16, + "name": "bufferView_buffer_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95384, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95672, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95704, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95752, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95832, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95912, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 95968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 95992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96152, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96184, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96232, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96264, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96632, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 96952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 96984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97112, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 97592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 97624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 4160, + "byteOffset": 97648, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Hair.001_skin_0" + } + ], + "buffers": [ + { + "byteLength": 101808, + "name": "buffer_combined_maid_hair", + "uri": "buffer_combined_maid_hair.bin" + } + ], + "images": [ + { + "name": "saber-hair-texture.png", + "uri": "saber-hair-texture.png" + } + ], + "materials": [ + { + "emissiveFactor": [ + 0, + 0, + 0 + ], + "name": "F010_SaberSG", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 1 + }, + "doubleSided": true + } + ], + "meshes": [ + { + "name": "F010_Saber.003", + "primitives": [ + { + "attributes": { + "COLOR_0": 149, + "NORMAL": 26, + "POSITION": 35, + "TEXCOORD_0": 88 + }, + "indices": 83, + "material": 0, + "mode": 4, + "extensions": { + "gl_avatar": { + "attributes": { + "JOINTS_0": 142, + "WEIGHTS_0": 192 + } + } + } + } + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "name": "Character", + "rotation": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0, + 0, + 0 + ] + }, + { + "mesh": 0, + "name": "F010_Saber_Hair.001", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "translation": [ + 0, + -7.586585270321754e-15, + -4.6566128730773926e-8 + ], + "extensions": { + "gl_avatar": { + "skin": 0 + } + } + }, + { + "children": [ + 0 + ], + "matrix": [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "name": "Scene_root" + } + ], + "samplers": [ + { + "name": "default" + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "active_camera": null, + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 2 + ] + } + ], + "textures": [ + { + "name": "saber", + "sampler": 0, + "source": 0 + } + ], + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "visibility": [ + 0, + 0, 0, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1 + ], + "type": "skin", + "linkedSkeletons": [ + { + "inverseBindMatrices": 134, + "name": "F010_Saber_Hair.001", + "skeleton": "main" + } + ] + } + } +} \ No newline at end of file diff --git a/models/gltf/saber-mixamo-body-no-face/body_id.png b/models/gltf/saber-mixamo-body-no-face/body_id.png new file mode 100644 index 0000000000000000000000000000000000000000..41cad61355767fd2960f91516a35bab6ed96c33d Binary files /dev/null and b/models/gltf/saber-mixamo-body-no-face/body_id.png differ diff --git a/models/gltf/saber-mixamo-body-no-face/buffer_saber-body-animations.bin b/models/gltf/saber-mixamo-body-no-face/buffer_saber-body-animations.bin new file mode 100644 index 0000000000000000000000000000000000000000..a1cba57bd1bee98cd1557de28c8dc30951e4962f --- /dev/null +++ b/models/gltf/saber-mixamo-body-no-face/buffer_saber-body-animations.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:393d47ab89fe9b3bbf1eee4258b4859be6d73d8a6da332dddee89f0347cbe774 +size 1919780 diff --git a/models/gltf/saber-mixamo-body-no-face/saber-body-animations.gltf b/models/gltf/saber-mixamo-body-no-face/saber-body-animations.gltf new file mode 100644 index 0000000000000000000000000000000000000000..d627c727b37acdb7b9c332ba287961a3a9bd41c8 --- /dev/null +++ b/models/gltf/saber-mixamo-body-no-face/saber-body-animations.gltf @@ -0,0 +1,25629 @@ +{ + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "type": "skeleton", + "visibilityId2Name": [ + "" + , "skullcap" + , "back neck" + , "neck" + , "left shoulder" + , "right shoulder" + , "left shoulder 2" + , "right shoulder 2" + , "left upper arm" + , "right upper arm" + , "left elbow" + , "right elbow" + , "left elbow 2" + , "right elbow 2" + , "left forearm" + , "right forearm" + , "left wrist" + , "right wrist" + , "left hand" + , "right hand" + , "upper chest" + , "mid chest" + , "left breast" + , "right breast" + , "left chest 1" + , "right chest 1" + , "left chest 2" + , "right chest 2" + , "stomach 1" + , "stomach 2" + , "stomach 3" + , "waist 1" + , "waist 2" + , "waist 3" + , "back shoulder 1 (left & right)" + , "back 1 (left & right)" + , "back shoulder 2 (left & right)" + , "back 2 (left & right)" + , "hip" + , "left thigh" + , "right thigh" + , "left thigh ring 1" + , "right thigh ring 1" + , "left thigh ring 2" + , "right thigh ring 2" + , "left knee" + , "right knee" + , "left leg 1" + , "right leg 1" + , "left leg 2" + , "right leg 2" + , "left leg 3" + , "right leg 3" + , "ankle (left & right)" + , "left foot top" + , "right foot top" + , "left heel" + , "right heel" + , "left foot plate" + , "right foot plate" + ], + "skins": { + "face": 1, + "main": 2 + }, + "nodes": { + "head": 7, + "head-end": 8 + } + } + }, + "accessors": [ + { + "bufferView": 551, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -3.5135176181793213, + 8.988450050354004, + -0.11454880237579346 + ], + "min": [ + -3.513526678085327, + 8.98840618133545, + -0.11456191539764404 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 207, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 560, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.33514404296875e-05, + 19.02716827392578, + 1.4781951904296875e-05 + ], + "min": [ + -1.4781951904296875e-05, + 19.02712059020996, + -1.800060272216797e-05 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -6.50919771194458, + -3.8088889122009277, + -0.4497365951538086 + ], + "min": [ + -6.509203910827637, + -3.808929443359375, + -0.4497419595718384 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 427, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 3.725290298461914e-07, + 41.85009765625, + 7.987022399902344e-06 + ], + "min": [ + -6.556510925292969e-07, + 41.8500862121582, + -4.306435585021973e-06 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 375, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 318, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 2.157763810828328e-05 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 2.157763810828328e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 305, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 190, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 225, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018159687519073486, + 2.1517670154571533, + -3.4263357520103455e-06 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -3.4263357520103455e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.004575527738779783, + 0.020496925339102745, + 0.2274504005908966, + 0.9786607623100281 + ], + "min": [ + 0.0014477120712399483, + 0.019821282476186752, + 0.20445318520069122, + 0.973577082157135 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.09014429152011871, + -0.00021094121620990336, + 0.02025716006755829, + 0.9980320334434509 + ], + "min": [ + 0.060823455452919006, + -0.00028050708351656795, + 0.015248601324856281, + 0.9957227110862732 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 453, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 301, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 486, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.51567542552948, + 0.004747312981635332, + 0.1165333017706871, + 0.9999711513519287 + ], + "min": [ + -0.01976255513727665, + -1.4837012713542208e-05, + -0.0011251388350501657, + 0.848808765411377 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.015548309311270714, + 0.005418228916823864, + -0.07440777122974396, + 0.9971773028373718 + ], + "min": [ + 0.009982623159885406, + -0.008802936412394047, + -0.12332369387149811, + 0.992258608341217 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 243, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999996423721313, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 491, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.006511688232421875, + 1.8280898332595825, + -5.9604644775390625e-06 + ], + "min": [ + -0.006550908088684082, + 1.8280510902404785, + -3.6716461181640625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 423, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0001252889633179, + 1.0000041723251343, + 1.0000079870224 + ], + "min": [ + 1.000117540359497, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 548, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.5981495380401611e-06, + 9.168578147888184, + 4.9620866775512695e-06 + ], + "min": [ + -1.6093254089355469e-06, + 9.168539047241211, + -4.112720489501953e-06 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 185, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 337, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.8287897109985352, + 5.778022289276123, + -0.20808887481689453 + ], + "min": [ + -0.8288040161132812, + 5.7780046463012695, + -0.20811033248901367 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 267, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 445, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.289447784423828, + 5.801708698272705, + 0.050652503967285156 + ], + "min": [ + 2.2894296646118164, + 5.801687240600586, + 0.05063486099243164 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 570, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4522598385810852, + 0.5235873460769653, + 0.4009115397930145, + 0.9512882828712463 + ], + "min": [ + -0.0987769067287445, + -0.6546518802642822, + -0.40881362557411194, + 0.7097232937812805 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.1554909348487854, + 7.178223768278258e-06, + 0.03243127092719078, + 0.9960601925849915 + ], + "min": [ + 0.08632491528987885, + 4.225949851388577e-06, + 0.02030176669359207, + 0.9873048067092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 320, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 252, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 52, + "max": [ + 1.0009628534317017, + 1.0004637241363525, + 0.3957003951072693, + 0.0, + 0.9973942041397095, + 0.997998058795929, + 1.0011157989501953, + 0.0, + 0.17913757264614105, + 1.0011159181594849, + 0.9939067363739014, + 0.0, + 36.08420181274414, + 95.18427276611328, + 139.1864471435547, + 1.0 + ], + "min": [ + -1.0011157989501953, + -1.0004726648330688, + -0.37282806634902954, + 0.0, + -0.9975388050079346, + -0.3510676324367523, + -0.18741650879383087, + 0.0, + -0.16209860146045685, + -1.0005624294281006, + -0.9972899556159973, + 0.0, + -40.01988983154297, + -137.41094970703125, + -8.502774238586426, + 1.0 + ], + "name": "accessor_buffer_IBM_F010_Saber_Body_skin_0", + "type": "MAT4" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.298214852809906, + 0.06225595995783806, + -0.018972160294651985, + 0.9538479447364807 + ], + "min": [ + 0.29314255714416504, + 0.06156858056783676, + -0.019128093495965004, + 0.9523220658302307 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 339, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.006530284881591797, + 1.8280882835388184, + -1.767277717590332e-05 + ], + "min": [ + -0.0065402984619140625, + 1.8280493021011353, + -2.8133392333984375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 484, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.18625880777835846, + 0.05503339320421219, + -0.006448446307331324, + 0.9821439385414124 + ], + "min": [ + -0.3205168843269348, + -0.06549748033285141, + -0.03350221365690231, + 0.9447567462921143 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 384, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 198, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.004050195217132568, + 1.9782497882843018, + -1.3029115507379174e-05 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -1.3029115507379174e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.2186508178710938e-06, + 22.772356033325195, + 7.756054401397705e-06 + ], + "min": [ + -3.5762786865234375e-06, + 22.77231788635254, + -1.2218952178955078e-05 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 257, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 393, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 441, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 574, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 463, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.384185791015625e-07, + 12.033417701721191, + 7.569789886474609e-06 + ], + "min": [ + -1.0728836059570312e-06, + 12.03341007232666, + -3.516674041748047e-06 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.3061813712120056, + -0.02763260528445244, + -0.22491665184497833, + 0.943814754486084 + ], + "min": [ + 0.24054649472236633, + -0.03875672072172165, + -0.2256726771593094, + 0.924025297164917 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 418, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.029908180236816406, + 2.2504069805145264, + 1.239776611328125e-05 + ], + "min": [ + 0.029885292053222656, + 2.250382661819458, + -5.245208740234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 165, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-07, + 7.483717918395996, + -6.8247318267822266e-06 + ], + "min": [ + 8.642673492431641e-07, + 7.483717918395996, + -6.8247318267822266e-06 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -3.5135183334350586, + 8.988447189331055, + -0.11455008387565613 + ], + "min": [ + -3.5135245323181152, + 8.988401412963867, + -0.11455890536308289 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.06327129900455475, + 0.10982005298137665, + 0.9969109892845154, + 0.11868580430746078 + ], + "min": [ + -0.06241075322031975, + -0.06120417267084122, + -0.9974195957183838, + -0.007310595829039812 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 363, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 582, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.0029699744191020727, + 0.05371571332216263, + 0.034797437489032745, + 0.9995884299278259 + ], + "min": [ + -0.0812988132238388, + -0.045464154332876205, + 0.003705148585140705, + 0.996268630027771 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 411, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 205, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.9077392607869115e-06, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 1.9077392607869115e-06, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6119635105133057, + 0.06298180669546127, + 0.04404832050204277, + 0.8257962465286255 + ], + "min": [ + 0.5611494779586792, + 0.006214461755007505, + -0.038709644228219986, + 0.7874863147735596 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 215, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999998807907104 + ], + "min": [ + 1.0, + 1.0, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.14715535938739777, + 0.0007554469048045576, + 0.00996183231472969, + 0.9975954294204712 + ], + "min": [ + 0.06858452409505844, + 0.00036496733082458377, + 0.004551884718239307, + 0.989102840423584 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 195, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.494803190231323e-08, + 19.023351669311523, + -3.2789830584079027e-06 + ], + "min": [ + -5.494803190231323e-08, + 19.023351669311523, + -3.2789830584079027e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 594, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.7343482971191406, + 0.6197038292884827, + -0.4922511577606201, + 0.5142742991447449 + ], + "min": [ + 0.3333512544631958, + 0.3387937545776367, + -0.6025190353393555, + 0.0776350200176239 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 632, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.011249423027038574, + 2.2008347511291504, + 3.910064697265625e-05 + ], + "min": [ + 0.011196613311767578, + 2.2007882595062256, + -3.5762786865234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 448, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 9.238719940185547e-07, + 45.05036926269531, + 5.443580448627472e-06 + ], + "min": [ + -6.603077054023743e-07, + 45.05034255981445, + -6.6943466663360596e-06 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 311, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 307, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 403, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 7.62939453125e-06, + 19.027156829833984, + 7.62939453125e-06 + ], + "min": [ + -1.1920928955078125e-05, + 19.027124404907227, + -6.467103958129883e-06 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.05057234317064285, + -0.0003840601711999625, + 0.004319834988564253, + 0.9999864101409912 + ], + "min": [ + -0.018635576590895653, + -0.008218026719987392, + -0.032305195927619934, + 0.9982173442840576 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 573, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5244287252426147, + 0.0015821133274585009, + -0.020690176635980606, + 0.9976391196250916 + ], + "min": [ + 0.06548312306404114, + 0.0002152573870262131, + -0.1015104129910469, + 0.8453801870346069 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 567, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6173950433731079, + 0.005300233606249094, + -0.14815683662891388, + 0.9813207983970642 + ], + "min": [ + 0.10599164664745331, + -0.07019437849521637, + -0.22208629548549652, + 0.7538939714431763 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 554, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 4.329502105712891, + 4.215145587921143, + 96.787109375 + ], + "min": [ + -4.262583255767822, + -2.1532444953918457, + 96.01811981201172 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.3974647521972656e-06, + 7.483736515045166, + 2.2411346435546875e-05 + ], + "min": [ + -5.125999450683594e-06, + 7.483705043792725, + -1.800060272216797e-05 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.12123725563287735, + 0.6808204054832458, + 0.7479258179664612, + 0.07477083057165146 + ], + "min": [ + -0.04404990375041962, + 0.6567517518997192, + 0.7295984029769897, + 0.03287700191140175 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 202, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-07, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-07, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 237, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 593, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 3.5135250091552734, + 8.98710823059082, + -0.0978323221206665 + ], + "min": [ + 3.513516664505005, + 8.987070083618164, + -0.09784162044525146 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.1123294830322266, + 5.15142822265625, + -0.10164594650268555 + ], + "min": [ + 2.112313747406006, + 5.151396751403809, + -0.10166263580322266 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 434, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.006472966633737087, + 0.016004886478185654, + 0.008321022614836693, + 0.9999926090240479 + ], + "min": [ + -0.021510018035769463, + -0.039265409111976624, + -0.012926705181598663, + 0.999193549156189 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 485, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.009794950485229492, + 1.9066658020019531, + 3.719329833984375e-05 + ], + "min": [ + 0.009750843048095703, + 1.9066030979156494, + -8.106231689453125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 231, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 3.0547380447387695e-06 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 3.0547380447387695e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 578, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 6.509202480316162, + -3.808886766433716, + -0.3193512260913849 + ], + "min": [ + 6.509198188781738, + -3.808929443359375, + -0.31935662031173706 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.1633726954460144, + -0.0011700742179527879, + 0.02707192488014698, + 0.9927774667739868 + ], + "min": [ + 0.1185440719127655, + -0.0017205171752721071, + 0.01841292344033718, + 0.9861913919448853 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.15539774298667908, + -0.000644415442366153, + -0.02805088274180889, + 0.9938856959342957 + ], + "min": [ + 0.10679031163454056, + -0.0008674515411257744, + -0.03775210306048393, + 0.9871299862861633 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.0547380447387695e-06, + 6.854518413543701, + -0.5485953688621521 + ], + "min": [ + -3.296881914138794e-06, + 6.854475975036621, + -0.5486005544662476 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 264, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 380, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.03061562217772007, + -0.0017238862346857786, + -0.2702149748802185, + 0.9626755118370056 + ], + "min": [ + 0.01538943126797676, + -0.003103941911831498, + -0.4437229633331299, + 0.8956355452537537 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 218, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 437, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.7147021293640137, + 0.3793763518333435, + -0.40852683782577515, + 0.4451804459095001 + ], + "min": [ + 0.660038948059082, + 0.3444429039955139, + -0.5530652403831482, + 0.3377883732318878 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.2894468307495117, + 5.8017096519470215, + 0.05065774917602539 + ], + "min": [ + 2.289430618286133, + 5.801682472229004, + 0.05063676834106445 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 400, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -6.509199142456055, + -3.808897018432617, + -0.4497385621070862 + ], + "min": [ + -6.509201526641846, + -3.8089210987091064, + -0.4497396945953369 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 227, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 241, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.3217339756010915e-06, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "min": [ + -1.3217339756010915e-06, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.011223793029785156, + 2.20082950592041, + 2.5272369384765625e-05 + ], + "min": [ + 0.011213302612304688, + 2.200793743133545, + 1.4781951904296875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 245, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.018150806427001953, + 2.151778221130371, + -9.5367431640625e-06 + ], + "min": [ + -0.018172740936279297, + 2.1517505645751953, + -2.765655517578125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 304, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.92553374695126e-06, + 0.7071068286895752, + 0.7071068286895752, + 3.921371899195947e-06 + ], + "min": [ + -3.92553374695126e-06, + 0.7071068286895752, + 0.7071068286895752, + 3.921371899195947e-06 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 479, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.3828277587890625e-05, + 7.483733177185059, + 1.722574234008789e-05 + ], + "min": [ + -1.33514404296875e-05, + 7.483705520629883, + -1.4662742614746094e-05 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 3340, + "max": [ + 0.9999616742134094, + 0.999893069267273, + 0.999949038028717 + ], + "min": [ + -0.9999616742134094, + -0.9999433755874634, + -0.9999061226844788 + ], + "name": "accessor_buffer_F010_Saber.002_NORMAL_0", + "type": "VEC3" + }, + { + "bufferView": 541, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 442, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.018544673919677734, + 2.2824974060058594, + -1.239776611328125e-05 + ], + "min": [ + -0.018560409545898438, + 2.2824764251708984, + -2.956390380859375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 575, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.02992856502532959, + 2.2504234313964844, + 2.956390380859375e-05 + ], + "min": [ + 0.029875516891479492, + 2.2503714561462402, + -2.4318695068359375e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0001195669174194, + 1.0000052452087402, + 1.0000113248825073 + ], + "min": [ + 1.0001120567321777, + 0.9999999403953552, + 1.0000083446502686 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.008645057678222656, + 2.2196366786956787, + 6.9141387939453125e-06 + ], + "min": [ + 0.008638381958007812, + 2.219599485397339, + -2.384185791015625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 299, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1.0 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 550, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 572, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.01787090301513672, + 2.1800739765167236, + 7.092952728271484e-06 + ], + "min": [ + -0.017911911010742188, + 2.1800386905670166, + -2.1457672119140625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 510, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3634963035583496, + 0.2832793593406677, + 0.33050408959388733, + 0.9935636520385742 + ], + "min": [ + -0.26121294498443604, + -0.6064321398735046, + -0.3639959990978241, + 0.6906076669692993 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.29608154296875, + -0.061604227870702744, + 0.01911911740899086, + 0.9570359587669373 + ], + "min": [ + 0.28241658210754395, + -0.06943853199481964, + 0.016336647793650627, + 0.9526420831680298 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 596, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.9073486328125e-06, + 8.022497177124023, + 4.6193599700927734e-06 + ], + "min": [ + -2.0265579223632812e-06, + 8.022464752197266, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 357, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.07796001434326172, + 2.109344005584717, + 3.814697265625e-06 + ], + "min": [ + 0.0779409408569336, + 2.1093106269836426, + -1.1444091796875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 469, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.034970283508301e-07, + 10.314647674560547, + 1.9222497940063477e-06 + ], + "min": [ + -5.662441253662109e-07, + 10.314611434936523, + -4.6193599700927734e-07 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.015069961547851562, + 2.0928781032562256, + 1.9073486328125e-05 + ], + "min": [ + 0.015053749084472656, + 2.092843532562256, + 1.049041748046875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 627, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.11511718481779099, + 0.13253821432590485, + 0.012231080792844296, + 0.999814510345459 + ], + "min": [ + -0.14733216166496277, + -0.1341867446899414, + -0.04164697229862213, + 0.9861831068992615 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6151828765869141, + 5.9878010749816895, + -0.2521359920501709 + ], + "min": [ + 0.6151666641235352, + 5.987770080566406, + -0.25215625762939453 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 312, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-07 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-07 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 495, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5121956467628479, + 0.06007227301597595, + 0.21186907589435577, + 0.9831737279891968 + ], + "min": [ + 0.023686129599809647, + -0.014648482203483582, + 0.11688109487295151, + 0.8317364454269409 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 369, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.02991008758544922, + 2.2504143714904785, + 7.62939453125e-06 + ], + "min": [ + 0.02988910675048828, + 2.2503767013549805, + -2.384185791015625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 505, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999996423721313, + 0.9999996423721313, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 173, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1.0 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 298, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 251, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1.0 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 407, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.008281150832772255, + 0.09331756085157394, + -0.11290097236633301, + 0.989179790019989 + ], + "min": [ + 0.0027392064221203327, + 0.0816226452589035, + -0.14038221538066864, + 0.9867234230041504 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 480, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3233933746814728, + 0.5145593881607056, + 0.24958108365535736, + 0.9530545473098755 + ], + "min": [ + -0.3254883289337158, + -0.5129621624946594, + -0.5374211668968201, + 0.7476178407669067 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 336, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 397, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.10560455918312073, + 4.587433815002441, + 96.82164001464844 + ], + "min": [ + -5.547571182250977, + 0.2603561282157898, + 92.83765411376953 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 189, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.116445779800415e-07, + 12.089044570922852, + 1.7881393432617188e-07 + ], + "min": [ + -4.116445779800415e-07, + 12.089044570922852, + 1.7881393432617188e-07 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 367, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -2.381838321685791, + 6.091205596923828, + 0.09325003623962402 + ], + "min": [ + -2.381855010986328, + 6.091188907623291, + 0.09322643280029297 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 389, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.06956339627504349, + 0.18320779502391815, + 0.18127001821994781, + 0.9919604659080505 + ], + "min": [ + -0.07042592763900757, + 0.09327314049005508, + 0.06101595237851143, + 0.9723660349845886 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 602, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.2894606590270996, + 5.801722526550293, + 0.05066871643066406 + ], + "min": [ + 2.2894203662872314, + 5.80167818069458, + 0.05062437057495117 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 587, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.015084788203239441, + 2.09287691116333, + 4.1961669921875e-05 + ], + "min": [ + 0.01503366231918335, + 2.092836856842041, + -1.9073486328125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 226, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9003864792921377e-07, + 7.007304520811886e-05, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-07, + 7.007304520811886e-05, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 621, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.2976076602935791, + 0.061651043593883514, + -0.018990755081176758, + 0.9525063037872314 + ], + "min": [ + 0.2976076006889343, + 0.06165102496743202, + -0.018990768119692802, + 0.9525062441825867 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 566, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.8905172348022461, + 5.9824113845825195, + -0.2430272102355957 + ], + "min": [ + 0.8904857635498047, + 5.9823689460754395, + -0.2430715560913086 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 169, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 224, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1.0, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 186, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 5.245208740234375e-06 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 5.245208740234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 199, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.368752681533806e-06, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -5.368752681533806e-06, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 498, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6205130219459534, + 0.12480250746011734, + 0.3536866307258606, + 0.9420853853225708 + ], + "min": [ + 0.06604980677366257, + -0.02690909430384636, + 0.2650204300880432, + 0.694172739982605 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 184, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 563, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.0842430591583252, + 1.9935603141784668, + 4.231929779052734e-06 + ], + "min": [ + 0.08419313281774521, + 1.9935017824172974, + -4.482269287109375e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 229, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-07, + -0.00015852972865104675, + 4.313407657718926e-07, + 1.0 + ], + "min": [ + 4.818217576030293e-07, + -0.00015852972865104675, + 4.313407657718926e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 192, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 2.086983840854373e-06 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 2.086983840854373e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 521, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6151952743530273, + 5.98781156539917, + -0.2521333694458008 + ], + "min": [ + 0.6151564717292786, + 5.98776912689209, + -0.2521657943725586 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 216, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 618, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4042389690876007, + 0.0036144228652119637, + 0.07280395925045013, + 0.999915361404419 + ], + "min": [ + -0.02949456125497818, + -9.553247218718752e-05, + 0.007105657365173101, + 0.9117441773414612 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 274, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -9.156999112747144e-06, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "min": [ + -9.156999112747144e-06, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.024185506626963615, + -0.08883322775363922, + 0.0007755194674246013, + 0.9957062602043152 + ], + "min": [ + -0.03668700531125069, + -0.10086517035961151, + -0.07723056524991989, + 0.9923696517944336 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.15171436965465546, + 0.00039636032306589186, + 0.042124077677726746, + 0.9945166110992432 + ], + "min": [ + 0.10028524696826935, + 0.0002789032587315887, + 0.029658794403076172, + 0.9875262975692749 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 179, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1.0, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 360, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 569, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 8.58306884765625e-06, + 7.483728885650635, + 2.1278858184814453e-05 + ], + "min": [ + -7.867813110351562e-06, + 7.4837117195129395, + -2.3245811462402344e-05 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 221, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 532, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 584, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.1026859283447266e-06, + 41.850101470947266, + 1.7136335372924805e-06 + ], + "min": [ + -1.4901161193847656e-06, + 41.85007858276367, + -2.5033950805664062e-06 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.09165339916944504, + 0.010146459564566612, + 0.04512402415275574, + 0.9979455471038818 + ], + "min": [ + 0.06395327299833298, + 4.2263418436050415e-05, + -0.02588547021150589, + 0.9948304891586304 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 210, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 303, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -7.425900548696518e-05, + 0.4175964593887329, + 98.80355834960938 + ], + "min": [ + -7.425900548696518e-05, + 0.4175964593887329, + 98.80355834960938 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 559, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0001180171966553, + 1.0000081062316895, + 1.000011920928955 + ], + "min": [ + 1.00011146068573, + 1.0000027418136597, + 1.0000033378601074 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000004768371582, + 1.0000004768371582 + ], + "min": [ + 0.9999997615814209, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 259, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -8.061967378125701e-07, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-07, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 242, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 297, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.5517268770490773e-07, + 45.04969024658203, + 8.68749339133501e-09 + ], + "min": [ + -3.5517268770490773e-07, + 45.04969024658203, + 8.68749339133501e-09 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 490, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 439, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.043081283569336e-06, + 8.022491455078125, + 1.6242265701293945e-06 + ], + "min": [ + -1.6540288925170898e-06, + 8.022468566894531, + -6.332993507385254e-07 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.19893121719360352, + 0.018828069791197777, + 0.016310350969433784, + 0.9792515635490417 + ], + "min": [ + -0.3146636486053467, + -0.0798603817820549, + -0.004793552681803703, + 0.9491125345230103 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.19080395996570587, + 0.00040480238385498524, + -0.021618390455842018, + 0.9941403269767761 + ], + "min": [ + 0.10591406375169754, + 0.00023922353284433484, + -0.03656462952494621, + 0.9809468388557434 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 316, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4512252164422534e-06, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "min": [ + 1.4512252164422534e-06, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 466, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -1.388045310974121, + 1.8726584911346436, + 1.342261552810669 + ], + "min": [ + -1.3880643844604492, + 1.8726342916488647, + 1.342238426208496 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000003576278687, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 183, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.05035451054573059, + 0.00010166570427827537, + 0.004495101980865002, + 0.9999853372573853 + ], + "min": [ + -0.01858527958393097, + -0.009152092970907688, + -0.03265814855694771, + 0.9982130527496338 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 426, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 406, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.08421516418457031, + 1.9935355186462402, + -1.0251998901367188e-05 + ], + "min": [ + 0.08420920372009277, + 1.993518590927124, + -2.86102294921875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.32983627915382385, + 0.05425029620528221, + 0.20717312395572662, + 0.9365647435188293 + ], + "min": [ + 0.28015825152397156, + 0.04390309751033783, + 0.20597940683364868, + 0.9194262623786926 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 549, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.017513589933514595, + 0.03453144058585167, + 0.054572250694036484, + 0.9989792704582214 + ], + "min": [ + -0.01294967532157898, + -0.013272514566779137, + 0.04488709196448326, + 0.9981178045272827 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 193, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.0370887366661918e-06, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "min": [ + -1.0370887366661918e-06, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 522, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.423574298620224, + 0.019656144082546234, + 0.09645579755306244, + 0.9999634027481079 + ], + "min": [ + -0.012067945674061775, + -0.01332169957458973, + -0.07843596488237381, + 0.9035295248031616 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 220, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.889829829655355e-06, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -2.889829829655355e-06, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 347, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4968090355396271, + -0.004602495115250349, + 0.027255013585090637, + 0.9540429711341858 + ], + "min": [ + 0.29268041253089905, + -0.06153401732444763, + 0.013744726777076721, + 0.8674964904785156 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 196, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 280, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.4522612690925598, + 3.2183454036712646, + 97.13330841064453 + ], + "min": [ + -9.309781074523926, + 0.4859360456466675, + 95.00161743164062 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.018849225714802742, + -0.06643514335155487, + 0.022146498784422874, + 0.9970361590385437 + ], + "min": [ + -0.04054472595453262, + -0.11766815930604935, + -0.012780744582414627, + 0.9927487969398499 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 629, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.016342997550964355, + 2.0912041664123535, + 2.47955322265625e-05 + ], + "min": [ + 0.016312122344970703, + 2.091160535812378, + -2.014636993408203e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 194, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 513, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.24000465869903564, + -0.001857943832874298, + -0.02293219603598118, + 0.9986445903778076 + ], + "min": [ + 0.04668762907385826, + -0.005174525547772646, + -0.0569353811442852, + 0.9690868854522705 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 470, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.01448402926325798, + 0.006024296395480633, + -0.006552433595061302, + 0.9998802542686462 + ], + "min": [ + -0.008535980246961117, + -0.011333505623042583, + -0.030329447239637375, + 0.9995340704917908 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 214, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-07, + -3.228561763535254e-05, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-07, + -3.228561763535254e-05, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 327, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 366, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 376, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.010958194732666016, + 2.24847412109375, + -1.0251998901367188e-05 + ], + "min": [ + -0.010970115661621094, + 2.248453378677368, + -2.562999725341797e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 424, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.385807991027832e-06, + 6.854513168334961, + -0.5485972166061401 + ], + "min": [ + -3.725290298461914e-07, + 6.854482650756836, + -0.5485981702804565 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 410, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.403611958026886, + -0.026877423748373985, + -0.16102422773838043, + 0.9255605340003967 + ], + "min": [ + 0.3412705361843109, + -0.03438929468393326, + -0.1728171706199646, + 0.8978229761123657 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 269, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 419, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2081216275691986, + 0.0009776869555935264, + 0.042132094502449036, + 0.9792493581771851 + ], + "min": [ + 0.19852440059185028, + 0.0009399183327332139, + 0.04071655124425888, + 0.9771947264671326 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 273, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + -1.477246405556798e-05 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -1.477246405556798e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 628, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 433, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 4.991888999938965e-07, + 4.308724403381348, + 0.11991281807422638 + ], + "min": [ + -5.578622221946716e-07, + 4.308677673339844, + 0.11990927159786224 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 263, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999996423721313, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 487, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999995827674866 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 338, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4905281364917755, + 0.059145789593458176, + 0.1785299926996231, + 0.9237978458404541 + ], + "min": [ + 0.33814412355422974, + 0.026642940938472748, + 0.1647922843694687, + 0.8536553382873535 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 518, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.006209850311279297, + 1.525008201599121, + 2.8945505619049072e-05 + ], + "min": [ + -0.00624847412109375, + 1.5249760150909424, + -1.582503318786621e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 372, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 239, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 16, + "componentType": 5126, + "count": 3340, + "max": [ + 1.0, + 0.49809977412223816, + 0.31396016478538513, + 0.20796984434127808 + ], + "min": [ + 0.30062898993492126, + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_F010_Saber.002_skin_1", + "type": "VEC4" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5123, + "count": 14376, + "max": [ + 3339 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.002_0", + "type": "SCALAR" + }, + { + "bufferView": 385, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.198883056640625e-06, + 22.7723445892334, + 5.476176738739014e-06 + ], + "min": [ + -3.2186508178710938e-06, + 22.772321701049805, + -1.0371208190917969e-05 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 361, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.0062255859375, + 1.5249981880187988, + 9.5367431640625e-06 + ], + "min": [ + -0.0062351226806640625, + 1.5249826908111572, + -1.430511474609375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.01788330078125, + 2.1800715923309326, + -1.430511474609375e-06 + ], + "min": [ + -0.017891883850097656, + 2.1800432205200195, + -1.1444091796875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 511, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 247, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 526, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 623, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -1.3880372047424316, + 1.8726612329483032, + 1.3422750234603882 + ], + "min": [ + -1.3880729675292969, + 1.8726229667663574, + 1.3422346115112305 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2060239613056183, + -0.006165146362036467, + -0.04257290065288544, + 0.9903005957603455 + ], + "min": [ + 0.13211484253406525, + -0.008265145123004913, + -0.05707421153783798, + 0.9768461585044861 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.07173003256320953, + 0.010370110161602497, + 0.03610963001847267, + 0.9996916651725769 + ], + "min": [ + -0.012426615692675114, + 0.006362239830195904, + 0.022153940051794052, + 0.996716320514679 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 377, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.04038854315876961, + -0.004172888584434986, + -0.023332150653004646, + 0.9990822076797485 + ], + "min": [ + 0.0356808640062809, + -0.004309265408664942, + -0.024050123989582062, + 0.9988852739334106 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 475, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.011225700378417969, + 2.2008252143859863, + 2.9206275939941406e-05 + ], + "min": [ + 0.011208534240722656, + 2.200808048248291, + 1.2874603271484375e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 543, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.07823974639177322, + -0.00015837152022868395, + 0.9370339512825012, + 0.9995554089546204 + ], + "min": [ + -0.005400640890002251, + -0.13503864407539368, + 0.02932603657245636, + 0.3124268352985382 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 209, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.07756717503070831, + 0.032519370317459106, + 0.01966981776058674, + 0.9969176650047302 + ], + "min": [ + -0.1478203386068344, + -0.0030081800650805235, + 0.0049291932955384254, + 0.9886130690574646 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 467, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.09213517606258392, + 0.3536476492881775, + 0.23683762550354004, + 0.917300283908844 + ], + "min": [ + -0.037373002618551254, + 0.34911879897117615, + 0.19151002168655396, + 0.9048376083374023 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 168, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.1807060218416154e-07, + 41.84932327270508, + -2.8172507882118225e-07 + ], + "min": [ + -1.1807060218416154e-07, + 41.84932327270508, + -2.8172507882118225e-07 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 166, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.08421897888183594, + 1.993545413017273, + -1.33514404296875e-05 + ], + "min": [ + 0.08420610427856445, + 1.9935120344161987, + -3.0040740966796875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 536, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.239776611328125e-05, + 22.770919799804688, + 1.9550323486328125e-05 + ], + "min": [ + -1.2159347534179688e-05, + 22.770877838134766, + -1.621246337890625e-05 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 278, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 294, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.009857624769210815, + 2.0025572776794434, + -8.842733222991228e-06 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -8.842733222991228e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 253, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 391, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 5.587935447692871e-07, + 9.16856861114502, + 8.419156074523926e-07 + ], + "min": [ + -9.611248970031738e-07, + 9.16854190826416, + -3.948807716369629e-07 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 415, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.01787567138671875, + 2.1800661087036133, + -2.384185791015625e-07 + ], + "min": [ + -0.01789379119873047, + 2.1800498962402344, + -1.430511474609375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 580, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000117301940918, + 1.0000107288360596, + 1.0000113248825073 + ], + "min": [ + 1.0001041889190674, + 1.0000027418136597, + 1.0000051259994507 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 3340, + "max": [ + 64.76519012451172, + 13.949728012084961, + 158.17138671875 + ], + "min": [ + -64.78005981445312, + -11.520843505859375, + 0.985260009765625 + ], + "name": "accessor_buffer_F010_Saber.002_POSITION_0", + "type": "VEC3" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2657705545425415, + -0.026480143889784813, + -0.03538383170962334, + 0.9712958931922913 + ], + "min": [ + 0.23331665992736816, + -0.02884344756603241, + -0.03806443139910698, + 0.9629548192024231 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 313, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 4.291534423828125e-06, + 10.314652442932129, + 4.123547114431858e-06 + ], + "min": [ + -3.4570693969726562e-06, + 10.314606666564941, + -3.509223461151123e-06 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.31094667315483093, + 0.02594979852437973, + 0.11563578993082047, + 0.9593018293380737 + ], + "min": [ + 0.25704312324523926, + 0.01731044426560402, + 0.11229659616947174, + 0.9434127807617188 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 499, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -1.3880481719970703, + 1.8726636171340942, + 1.342259407043457 + ], + "min": [ + -1.3880643844604492, + 1.8726303577423096, + 1.3422412872314453 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 443, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.21829265356063843, + -0.0014116736128926277, + -0.042833104729652405, + 0.975964367389679 + ], + "min": [ + 0.21367475390434265, + -0.001443531597033143, + -0.043541159480810165, + 0.9749104976654053 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 478, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 8.333333333333314 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character_Yawn_time_0", + "type": "SCALAR" + }, + { + "bufferView": 355, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.004047393798828125, + 1.9782544374465942, + -2.9921531677246094e-05 + ], + "min": [ + -0.004059791564941406, + 1.9782342910766602, + -4.1484832763671875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 514, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 300, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 483, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5482349395751953, + 0.1578584462404251, + -0.04095883667469025, + 0.8626810312271118 + ], + "min": [ + 0.47461917996406555, + -0.11056473851203918, + -0.12299825996160507, + 0.8337114453315735 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0001230239868164, + 1.0000057220458984, + 1.0000028610229492 + ], + "min": [ + 1.0001170635223389, + 0.9999999403953552, + 1.0000015497207642 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 240, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + -5.896072252653539e-06 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -5.896072252653539e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 515, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.008663773536682129, + 2.2196600437164307, + 1.9431114196777344e-05 + ], + "min": [ + 0.00862574577331543, + 2.219595193862915, + -1.811981201171875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -2.075815200805664, + 5.181260108947754, + -0.1566758155822754 + ], + "min": [ + -2.0758304595947266, + 5.181227684020996, + -0.1566941738128662 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 378, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 447, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 219, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.010961860418319702, + 2.2484662532806396, + 9.948620572686195e-06 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 9.948620572686195e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 213, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 6.702626706101e-06 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 6.702626706101e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.27635306119918823, + -0.016698794439435005, + -0.0864458903670311, + 0.9769632816314697 + ], + "min": [ + 0.1943865418434143, + -0.018186990171670914, + -0.11150404065847397, + 0.9543925523757935 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 370, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.0033588409423828125, + 1.9062575101852417, + 8.58306884765625e-06 + ], + "min": [ + 0.0033407211303710938, + 1.9062409400939941, + -9.5367431640625e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 568, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 201, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 1.1700321920216084e-05 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 1.1700321920216084e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 492, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6572937369346619, + -0.0008125794120132923, + -0.02901405468583107, + 0.9911558628082275 + ], + "min": [ + 0.12948985397815704, + -0.003881856333464384, + -0.14215269684791565, + 0.7400963306427002 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 178, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.6987858038628474e-06, + 4.930837167194113e-05, + -0.000254306651186198, + 1.0 + ], + "min": [ + -3.6987858038628474e-06, + 4.930837167194113e-05, + -0.000254306651186198, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 396, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 16.666666666666654 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character_Idle_time_0", + "type": "SCALAR" + }, + { + "bufferView": 345, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 506, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.004740715026855469, + 1.555966854095459, + 3.218650817871094e-05 + ], + "min": [ + 0.004696190357208252, + 1.555917739868164, + -8.106231689453125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 323, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4395799934864044, + -0.019448015838861465, + 0.33548006415367126, + 0.9115597009658813 + ], + "min": [ + 0.39102065563201904, + -0.10377006977796555, + -0.08593812584877014, + 0.8435415625572205 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 457, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.6209673881530762, + 5.933863639831543, + -0.18955564498901367 + ], + "min": [ + -0.6209893226623535, + 5.933838367462158, + -0.18957901000976562 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 364, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.6151876449584961, + 5.987796783447266, + -0.252138614654541 + ], + "min": [ + 0.6151700019836426, + 5.98777961730957, + -0.2521541118621826 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 235, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.029141902923584e-08, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1.0 + ], + "min": [ + -5.029141902923584e-08, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 244, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.167778464150615e-05, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "min": [ + 1.167778464150615e-05, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 171, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + -1.1112497304566205e-05 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -1.1112497304566205e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 465, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 335, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2389420121908188, + -0.0014205886982381344, + -0.05140354484319687, + 0.9709298610687256 + ], + "min": [ + 0.2337753027677536, + -0.001450617564842105, + -0.0525122806429863, + 0.9696118235588074 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 459, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 590, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 5.818437784910202e-06, + 4.308725357055664, + 0.11991727352142334 + ], + "min": [ + -5.2265822887420654e-06, + 4.308669567108154, + 0.11990416049957275 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 200, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 310, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 399, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 539, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.018141746520996094, + 2.151792049407959, + 1.9073486328125e-06 + ], + "min": [ + -0.018188118934631348, + 2.1517372131347656, + -3.409385681152344e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 512, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.00403439998626709, + 1.9782624244689941, + -2.682209014892578e-05 + ], + "min": [ + -0.004072606563568115, + 1.9782217741012573, + -5.14984130859375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 422, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.096707284450531, + 0.3266020715236664, + 0.9956504106521606, + 0.11079581826925278 + ], + "min": [ + -0.10106376558542252, + -0.17860715091228485, + -0.9987594485282898, + -0.00430084066465497 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 449, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.1472185105085373, + -0.010146930813789368, + -0.009002385661005974, + 0.9849482178688049 + ], + "min": [ + -0.5430340766906738, + -0.09268946945667267, + -0.06335114687681198, + 0.8363834023475647 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000003576278687, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 350, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.28691938519477844, + 0.02217779867351055, + 0.06498178839683533, + 0.9621247053146362 + ], + "min": [ + 0.26505526900291443, + 0.020909439772367477, + 0.0602051205933094, + 0.9554908871650696 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.6226043701171875e-06, + 45.049705505371094, + 4.112720489501953e-06 + ], + "min": [ + -2.6226043701171875e-06, + 45.04966735839844, + -4.410743713378906e-06 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 454, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.9669532775878906e-06, + 45.04970169067383, + 4.372559487819672e-06 + ], + "min": [ + -2.473592758178711e-06, + 45.049678802490234, + -7.18235969543457e-06 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 595, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 531, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.35378745198249817, + -0.20317372679710388, + -0.255924254655838, + 0.9115720391273499 + ], + "min": [ + 0.17257185280323029, + -0.4793325960636139, + -0.5963944792747498, + 0.6543446779251099 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 256, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 507, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.26399752497673035, + 0.02084808424115181, + 0.05997397378087044, + 0.9999838471412659 + ], + "min": [ + -0.27136582136154175, + -0.011080027557909489, + -0.057347945868968964, + 0.9607023596763611 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 545, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.07796502113342285, + 2.109346389770508, + 8.821487426757812e-06 + ], + "min": [ + 0.07792496681213379, + 2.1093080043792725, + -2.181529998779297e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.018545150756835938, + 2.282504081726074, + -1.4781951904296875e-05 + ], + "min": [ + -0.018561363220214844, + 2.28246808052063, + -2.765655517578125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 611, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.86102294921875e-06, + 45.04969787597656, + 5.7220458984375e-06 + ], + "min": [ + -3.337860107421875e-06, + 45.04966735839844, + -5.7220458984375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 282, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-07 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-07 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.5135252475738525, + 8.987110137939453, + -0.09783351421356201 + ], + "min": [ + 3.5135180950164795, + 8.98706340789795, + -0.09784141182899475 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.02569866180419922, + 2.3235669136047363, + 1.239776611328125e-05 + ], + "min": [ + 0.025682926177978516, + 2.323526620864868, + 2.384185791015625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 211, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 474, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 261, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 6.557500455528498e-06 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 6.557500455528498e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 535, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 626, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 5.155801773071289e-06, + 10.314654350280762, + 7.331371307373047e-06 + ], + "min": [ + -4.5299530029296875e-06, + 10.314610481262207, + -7.68899917602539e-06 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 619, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999996423721313, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.592802047729492e-06, + 22.77091407775879, + 1.1414289474487305e-05 + ], + "min": [ + -3.7848949432373047e-06, + 22.770875930786133, + -7.733702659606934e-06 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 599, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.018537580966949463, + 2.2825024127960205, + 7.4356794357299805e-06 + ], + "min": [ + -0.018581271171569824, + 2.2824742794036865, + -3.731250762939453e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 605, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 3.4365803003311157e-06, + 45.05037307739258, + 2.201646566390991e-06 + ], + "min": [ + -1.7881393432617188e-06, + 45.05034255981445, + -1.2665987014770508e-06 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.13985876739025116, + 0.008026359602808952, + 0.05718501657247543, + 0.9948629140853882 + ], + "min": [ + 0.090253084897995, + 0.0063728815875947475, + 0.04540440812706947, + 0.9884862303733826 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 359, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.23224323987960815, + -0.0038720795419067144, + 0.03853878751397133, + 0.973365306854248 + ], + "min": [ + 0.2261386215686798, + -0.003985876217484474, + 0.037501487880945206, + 0.9718858003616333 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 613, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 203, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999996423721313, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 187, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.969544170307927e-05, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "min": [ + 4.969544170307927e-05, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 546, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.16486911475658417, + -0.0015668782871216536, + 0.032274361699819565, + 0.9993045926094055 + ], + "min": [ + -0.031893547624349594, + -0.06064178794622421, + -0.1720692217350006, + 0.9693049192428589 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 371, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.030336719006299973, + -0.00038643271545879543, + -0.0030509813223034143, + 0.9997857809066772 + ], + "min": [ + 0.020470714196562767, + -0.0004611696640495211, + -0.0045809452421963215, + 0.9995291233062744 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 283, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-08, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1.0 + ], + "min": [ + 1.30385160446167e-08, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 525, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4213804304599762, + 0.02211507223546505, + 0.17220981419086456, + 0.9991625547409058 + ], + "min": [ + -0.13027016818523407, + -0.033354394137859344, + -0.029934976249933243, + 0.9061493873596191 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 519, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.36818069219589233, + -0.004938226193189621, + -0.03672770410776138, + 0.9983592629432678 + ], + "min": [ + 0.04365229606628418, + -0.014484290964901447, + -0.10348690301179886, + 0.9238634705543518 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 538, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 589, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 417, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 212, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.123526431620121, + -0.07318051904439926, + -0.20422951877117157, + 0.9682797789573669 + ], + "min": [ + 0.12280227243900299, + -0.0739516094326973, + -0.21202754974365234, + 0.9667503833770752 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 238, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.677651047706604, + -0.29770413041114807, + 0.6039482951164246, + 0.3589504063129425 + ], + "min": [ + 0.6312532424926758, + -0.34361618757247925, + 0.5770201086997986, + 0.33191004395484924 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.05344519019126892, + 0.07039212435483932, + 0.9978359937667847, + 0.11501389741897583 + ], + "min": [ + -0.05957644060254097, + -0.10063694417476654, + -0.9973471760749817, + -0.008116190321743488 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 321, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.9666666666666666 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character_Walking_time_0", + "type": "SCALAR" + }, + { + "bufferView": 333, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 557, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -6.5091986656188965, + -3.808891773223877, + -0.4497368633747101 + ], + "min": [ + -6.509203910827637, + -3.808932065963745, + -0.44974279403686523 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 285, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018551677465438843, + 2.2824809551239014, + 4.63516335003078e-06 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 4.63516335003078e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 223, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.8012506188824773e-06, + 0.00015944617916829884, + -1.3720271851980215e-07, + 1.0 + ], + "min": [ + 1.8012506188824773e-06, + 0.00015944617916829884, + -1.3720271851980215e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 383, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.11787582188844681, + -0.08655846863985062, + -0.038060761988162994, + 0.9865501523017883 + ], + "min": [ + 0.050129637122154236, + -0.2333427518606186, + -0.18150991201400757, + 0.9580236077308655 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 496, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 379, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 9.775161743164062e-06, + 22.770910263061523, + 1.0363757610321045e-05 + ], + "min": [ + -9.298324584960938e-06, + 22.770885467529297, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 387, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 464, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4602220952510834, + 0.06262792646884918, + -0.014900363981723785, + 0.9546638131141663 + ], + "min": [ + 0.29038870334625244, + 0.009192639961838722, + -0.02716829627752304, + 0.8873404264450073 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 516, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5094752311706543, + -0.00045705802040174603, + 0.08569139242172241, + 0.9990641474723816 + ], + "min": [ + 0.04278033226728439, + -0.009175324812531471, + 0.0063611590303480625, + 0.8561587929725647 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 428, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.615274965763092, + 0.09147502481937408, + 0.14577235281467438, + 0.934639036655426 + ], + "min": [ + 0.3243423402309418, + -0.12179058790206909, + -0.02567342109978199, + 0.7820845246315002 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 481, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 608, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.00982809066772461, + 2.002577543258667, + 2.3633241653442383e-05 + ], + "min": [ + -0.009878158569335938, + 2.0025482177734375, + -2.637505531311035e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.12322575598955154, + 0.1867716759443283, + 0.05322803556919098, + 0.990211009979248 + ], + "min": [ + 0.04314654693007469, + 0.12217019498348236, + 0.010650157928466797, + 0.9752040505409241 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 508, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 365, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.35908982157707214, + 0.014681422151625156, + 0.06364209949970245, + 0.9881294369697571 + ], + "min": [ + 0.14934328198432922, + -0.005565935280174017, + 0.020810263231396675, + 0.9328184127807617 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 633, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.17223387956619263, + 0.011169478297233582, + 0.04506560415029526, + 0.9998048543930054 + ], + "min": [ + -0.19014349579811096, + -0.0024950967635959387, + -0.009645001962780952, + 0.9817057847976685 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 362, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.032023537904024124, + -0.0024911793880164623, + -0.019574306905269623, + 0.9992690682411194 + ], + "min": [ + -0.037345655262470245, + -0.0026527720037847757, + -0.02070719748735428, + 0.9991076588630676 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.017184464260935783, + 0.020855071023106575, + -0.26100802421569824, + 0.965028703212738 + ], + "min": [ + 0.015216303989291191, + 0.01904902793467045, + -0.2829480469226837, + 0.9587545990943909 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 331, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.112335681915283, + 5.151423931121826, + -0.10164403915405273 + ], + "min": [ + 2.112314224243164, + 5.151405334472656, + -0.10166740417480469 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 324, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.4313545227050781, + 1.9488978385925293, + 1.3737468719482422 + ], + "min": [ + 1.4313373565673828, + 1.9488682746887207, + 1.3737294673919678 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.01546031516045332, + 0.004832530859857798, + -0.00889009889215231, + 0.999834418296814 + ], + "min": [ + 0.010453573428094387, + 0.0036396230570971966, + -0.05671585351228714, + 0.9983239769935608 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 281, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 374, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.14352749288082123, + -0.19809198379516602, + -0.13471603393554688, + 0.9572403430938721 + ], + "min": [ + 0.10630404204130173, + -0.23074835538864136, + -0.297109454870224, + 0.9216709136962891 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2637979984283447, + -0.0007969096768647432, + -0.023463308811187744, + 0.9921198487281799 + ], + "min": [ + 0.12307315319776535, + -0.0016307852929458022, + -0.04800768196582794, + 0.9633812308311462 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 630, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.19335709512233734, + 0.011140700429677963, + 0.03712765872478485, + 0.9999834895133972 + ], + "min": [ + -0.2717040777206421, + -0.007787367329001427, + -0.041114091873168945, + 0.9614707231521606 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 386, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.04008694738149643, + 0.004120196681469679, + 0.5689954161643982, + 0.9706199169158936 + ], + "min": [ + 0.012065121904015541, + 0.0014987472677603364, + 0.24031054973602295, + 0.8213527202606201 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 308, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "min": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 405, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 598, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 182, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 222, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.460183168295771e-07, + 22.77089500427246, + 6.812736501160543e-06 + ], + "min": [ + -2.460183168295771e-07, + 22.77089500427246, + 6.812736501160543e-06 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 342, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 500, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.09871673583984375, + 2.22261381149292, + 4.482269287109375e-05 + ], + "min": [ + 0.09868061542510986, + 2.2225799560546875, + -3.5762786865234375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 583, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 624, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.18342003226280212, + 0.4625886380672455, + 0.40098264813423157, + 0.915322482585907 + ], + "min": [ + -0.11913296580314636, + 0.09699290990829468, + 0.30179938673973083, + 0.8162391781806946 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 344, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.05728303641080856, + -0.022483158856630325, + 0.11415008455514908, + 0.9927259087562561 + ], + "min": [ + -0.08025413006544113, + -0.1162383183836937, + 0.02324865572154522, + 0.989997386932373 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.39606502652168274, + 0.06393416225910187, + 0.042634978890419006, + 0.9679672718048096 + ], + "min": [ + 0.2443922907114029, + 0.007028311491012573, + -0.09464090317487717, + 0.9131984710693359 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 517, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.8905096054077148, + 5.9824113845825195, + -0.2430410385131836 + ], + "min": [ + 0.8904943466186523, + 5.982382774353027, + -0.2430582046508789 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 271, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 325, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 9.834766387939453e-07, + 41.849334716796875, + 3.4570693969726562e-06 + ], + "min": [ + -7.003545761108398e-07, + 41.84931945800781, + -6.794929504394531e-06 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 588, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.12631464004516602, + 0.014103413559496403, + 0.02894601598381996, + 0.9999167323112488 + ], + "min": [ + -0.2253120094537735, + -0.005575133487582207, + -0.02281351014971733, + 0.9740036725997925 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 462, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 616, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 597, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.017484569922089577, + 0.029962653294205666, + 0.05493021011352539, + 0.9989464282989502 + ], + "min": [ + -0.012993323616683483, + -0.017851606011390686, + 0.045321494340896606, + 0.9982398748397827 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.14051729440689087, + 0.08032988756895065, + 0.2169266641139984, + 0.9733685255050659 + ], + "min": [ + 0.12550561130046844, + 0.06769057363271713, + 0.17218570411205292, + 0.9657147526741028 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 571, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000003576278687, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.828791618347168, + 5.778028964996338, + -0.20808792114257812 + ], + "min": [ + -0.8288059234619141, + 5.777997970581055, + -0.20810604095458984 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.5469267964363098e-06, + 41.84933853149414, + 1.8849968910217285e-06 + ], + "min": [ + -1.6654375940561295e-06, + 41.84931945800781, + -1.6093254089355469e-06 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 7.62939453125e-06, + 19.023361206054688, + 7.62939453125e-06 + ], + "min": [ + -7.152557373046875e-06, + 19.023324966430664, + -9.059906005859375e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 180, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6104982495307922, + -0.07320020347833633, + 0.048414260149002075, + 0.8288843035697937 + ], + "min": [ + 0.5526801943778992, + -0.09555656462907791, + -0.005197371821850538, + 0.7873787879943848 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 414, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 266, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 432, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 174, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 175, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 617, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.02571415901184082, + 2.323568344116211, + 2.0135194063186646e-05 + ], + "min": [ + 0.025665074586868286, + 2.323524236679077, + -1.5735626220703125e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 286, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.611599019379355e-07, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-07, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 284, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 228, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.98512316273991e-06, + 22.7723331451416, + 2.205953933298588e-06 + ], + "min": [ + -1.98512316273991e-06, + 22.7723331451416, + 2.205953933298588e-06 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 544, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000003576278687, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 576, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.29591068625450134, + 0.001323158387094736, + 0.055026814341545105, + 0.9999377131462097 + ], + "min": [ + -0.02861855737864971, + 3.734216807060875e-05, + 0.006827713456004858, + 0.953628420829773 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 233, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1.0, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1.0, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.08359970152378082, + 0.10933090001344681, + 0.05882913991808891, + 0.9923466444015503 + ], + "min": [ + 0.03577506169676781, + 0.10840625315904617, + 0.04500821605324745, + 0.988835871219635 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 471, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 6.509203910827637, + -3.808889389038086, + -0.31935131549835205 + ], + "min": [ + 6.509197235107422, + -3.808927536010742, + -0.31935685873031616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 317, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 561, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3289208710193634, + 0.22454611957073212, + 0.11444523930549622, + 0.9986773729324341 + ], + "min": [ + -0.4496552050113678, + -0.2842461168766022, + -0.5052515268325806, + 0.8241262435913086 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 197, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1.0, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 537, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.04787973687052727, + 0.0847688764333725, + -0.065516896545887, + 0.9978355765342712 + ], + "min": [ + -0.0020693850237876177, + 0.005241064820438623, + -0.6058869361877441, + 0.7895712852478027 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 482, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 3.2186508178710938e-06, + 41.849334716796875, + 2.294778823852539e-06 + ], + "min": [ + -2.6226043701171875e-06, + 41.84931945800781, + -2.7418136596679688e-06 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 509, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.4199485778808594e-05, + 19.023365020751953, + 2.3245811462402344e-05 + ], + "min": [ + -2.9385089874267578e-05, + 19.02332878112793, + -2.5510787963867188e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 232, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9569284859244362e-07, + 5.565229366766289e-05, + -0.034311242401599884, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-07, + 5.565229366766289e-05, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 610, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 577, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 430, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.015065670013427734, + 2.0928683280944824, + 2.2411346435546875e-05 + ], + "min": [ + 0.015050888061523438, + 2.092845916748047, + 1.049041748046875e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 315, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 1.1799194908235222e-05 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 1.1799194908235222e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 352, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 4.76837158203125e-06, + 19.023365020751953, + 6.198883056640625e-06 + ], + "min": [ + -1.049041748046875e-05, + 19.023338317871094, + -1.0013580322265625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 555, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.18088267743587494, + 0.7081363797187805, + 0.7748682498931885, + 0.12378036230802536 + ], + "min": [ + -0.08563048392534256, + -0.6869649887084961, + -0.7257469892501831, + -0.007972615770995617 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 460, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.025699138641357422, + 2.3235576152801514, + 1.3828277587890625e-05 + ], + "min": [ + 0.025686264038085938, + 2.3235349655151367, + 9.5367431640625e-07 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 181, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 446, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2323061227798462, + -0.00027341480017639697, + -0.08394801616668701, + 0.9933724999427795 + ], + "min": [ + 0.03818628191947937, + -0.0068419924937188625, + -0.10819492489099503, + 0.9683595895767212 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 341, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.5699740052223206, + 0.11541295796632767, + 0.29281482100486755, + 0.8423991799354553 + ], + "min": [ + 0.4477769434452057, + 0.06685309112071991, + 0.2629931569099426, + 0.7695973515510559 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 170, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 268, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.03992169722914696, + -2.2444967839874153e-07, + 5.544060059037292e-06, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-07, + 5.544060059037292e-06, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.01633167266845703, + 2.091195821762085, + 9.775161743164062e-06 + ], + "min": [ + 0.016323089599609375, + 2.0911662578582764, + -6.198883056640625e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 585, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.5759493708610535, + 0.05841023847460747, + 0.032488077878952026, + 0.8249241709709167 + ], + "min": [ + 0.552259087562561, + -0.18465866148471832, + -0.07742717862129211, + 0.8085960745811462 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 501, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.1082083135843277, + 0.16242840886116028, + 0.26776057481765747, + 0.9917136430740356 + ], + "min": [ + 0.0326661579310894, + 0.10416033118963242, + 0.05328565090894699, + 0.9466597437858582 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 262, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9045912722504e-06, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "min": [ + -1.9045912722504e-06, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -2.381840705871582, + 6.091213226318359, + 0.0932474136352539 + ], + "min": [ + -2.381855010986328, + 6.091182231903076, + 0.0932321548461914 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 314, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 450, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 3340, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_F010_Saber.002_COLOR_0_0", + "type": "VEC3" + }, + { + "bufferView": 494, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.8287720680236816, + 5.778042793273926, + -0.20808124542236328 + ], + "min": [ + -0.8288237452507019, + 5.777987003326416, + -0.20811843872070312 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 309, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 3340, + "max": [ + 0.9826270341873169, + 0.9952785298228264 + ], + "min": [ + 0.004950257949531078, + 0.007562220096588135 + ], + "name": "accessor_buffer_F010_Saber.002_TEXCOORD_0_0", + "type": "VEC2" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.205371856689453e-06, + 4.308732509613037, + 0.11991506814956665 + ], + "min": [ + -1.6689300537109375e-06, + 4.3086652755737305, + 0.11990783363580704 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 401, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.14477038383483887, + 0.27585312724113464, + 0.9954227805137634, + 0.10875106602907181 + ], + "min": [ + -0.1360315978527069, + -0.3243834972381592, + -0.9909538626670837, + 0.001317197922617197 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 607, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999996423721313, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 440, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.0288302693516016, + 0.025401953607797623, + 0.010065724141895771, + 0.9999460577964783 + ], + "min": [ + 0.009143766015768051, + -0.04278125241398811, + -0.017392504960298538, + 0.9987657070159912 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 435, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 552, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.8000295758247375, + -0.38312122225761414, + 0.5880354642868042, + 0.5944336652755737 + ], + "min": [ + 0.26392662525177, + -0.6670979857444763, + 0.27886316180229187, + 0.07201345264911652 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 204, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006230756640434265, + 1.5249916315078735, + 2.2089123376645148e-05 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 2.2089123376645148e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 167, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 614, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.6209564208984375, + 5.933866500854492, + -0.18953967094421387 + ], + "min": [ + -0.620999813079834, + 5.933826923370361, + -0.18958759307861328 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 302, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 456, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 172, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.7708856603348977e-06, + -8.915702346712351e-05, + -0.0010598038788884878, + 0.9999995231628418 + ], + "min": [ + -1.7708856603348977e-06, + -8.915702346712351e-05, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 349, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.004725456237792969, + 1.5559535026550293, + 1.811981201171875e-05 + ], + "min": [ + 0.004705905914306641, + 1.5559406280517578, + -1.4901161193847656e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 503, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 4.0745362639427185e-06, + 12.089052200317383, + -1.3113021850585938e-06 + ], + "min": [ + -2.4205073714256287e-06, + 12.089046478271484, + -6.556510925292969e-06 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 547, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 270, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-07, + 41.85009002685547, + -1.4621764421463013e-07 + ], + "min": [ + 2.655433490872383e-07, + 41.85009002685547, + -1.4621764421463013e-07 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 354, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 260, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 497, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -2.075800657272339, + 5.181265830993652, + -0.15666961669921875 + ], + "min": [ + -2.0758442878723145, + 5.1812238693237305, + -0.1567068099975586 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 288, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.0033597946166992188, + 1.90627121925354, + 5.7220458984375e-06 + ], + "min": [ + 0.0033435821533203125, + 1.9062323570251465, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 553, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 530, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.4313724040985107, + 1.9489097595214844, + 1.3737554550170898 + ], + "min": [ + 1.4313232898712158, + 1.9488589763641357, + 1.3737177848815918 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 289, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 275, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1.0, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 206, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 540, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.024191146716475487, + -0.11150987446308136, + -0.07717914134263992, + 0.9904854893684387 + ], + "min": [ + 0.00664842315018177, + -0.11843197792768478, + -0.25926902890205383, + 0.959041178226471 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 382, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.01815509796142578, + 2.1517763137817383, + -1.0013580322265625e-05 + ], + "min": [ + -0.018165111541748047, + 2.151749610900879, + -3.123283386230469e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 523, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 258, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.017888188362121582, + 2.1800546646118164, + -5.649722879752517e-06 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -5.649722879752517e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 334, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.0065250396728515625, + 1.828077793121338, + -1.5497207641601562e-05 + ], + "min": [ + -0.006542205810546875, + 1.8280558586120605, + -3.0517578125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 293, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 404, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.06098603457212448, + -0.08121724426746368, + 0.0904063805937767, + 0.9924531579017639 + ], + "min": [ + -0.17131856083869934, + -0.3111955523490906, + -0.2263297140598297, + 0.9269754886627197 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.6652047634124756e-06, + 12.089051246643066, + -1.9222497940063477e-06 + ], + "min": [ + -9.201467037200928e-07, + 12.089046478271484, + -4.954636096954346e-06 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.16806091368198395, + -0.0008588983910158277, + -0.01937202177941799, + 0.9968441724777222 + ], + "min": [ + 0.07697957754135132, + -0.0015606372617185116, + -0.03520051762461662, + 0.9851468205451965 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 381, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 208, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 620, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.1008232831954956e-06, + 12.033417701721191, + 4.842877388000488e-06 + ], + "min": [ + -1.428648829460144e-06, + 12.033411979675293, + 3.0994415283203125e-06 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 615, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.48500657081604004, + 0.008128128945827484, + 0.0038101968821138144, + 0.998948335647583 + ], + "min": [ + -0.05940983444452286, + -0.04093785956501961, + -0.11457008123397827, + 0.8670104146003723 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 420, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 340, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -2.0758142471313477, + 5.181254863739014, + -0.15667724609375 + ], + "min": [ + -2.075829029083252, + 5.181237697601318, + -0.1566934585571289 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 319, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.7277535536995856e-06, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "min": [ + -2.7277535536995856e-06, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 373, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.4313554763793945, + 1.9488956928253174, + 1.37374746799469 + ], + "min": [ + 1.4313411712646484, + 1.94887375831604, + 1.373722791671753 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 276, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 527, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.003368377685546875, + 1.9062774181365967, + 2.09808349609375e-05 + ], + "min": [ + 0.0033315420150756836, + 1.9062366485595703, + -2.09808349609375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 343, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.09870338439941406, + 2.222611904144287, + 2.9802322387695312e-05 + ], + "min": [ + 0.09868931770324707, + 2.222590446472168, + 4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.004721164703369141, + 1.5559616088867188, + 1.5020370483398438e-05 + ], + "min": [ + 0.004713535308837891, + 1.5559303760528564, + -8.344650268554688e-07 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.4139881134033203e-06, + 9.1685791015625, + 3.200024366378784e-06 + ], + "min": [ + -1.6689300537109375e-06, + 9.168535232543945, + -3.732740879058838e-06 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 248, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 622, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.37481021881103516, + -0.08789478242397308, + 0.08346261829137802, + 0.9625203609466553 + ], + "min": [ + 0.24815411865711212, + -0.11651493608951569, + -0.0916302502155304, + 0.9205743670463562 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.16205744445323944, + -0.002778196008875966, + -0.0208123829215765, + 0.9997683167457581 + ], + "min": [ + -0.004742264747619629, + -0.007937208749353886, + -0.05945529788732529, + 0.9849565625190735 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 188, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1.0, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.0000003576278687, + 1.0000004768371582 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 291, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.398074059328792e-07, + 45.050357818603516, + 2.3865140974521637e-09 + ], + "min": [ + -2.398074059328792e-07, + 45.050357818603516, + 2.3865140974521637e-09 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 488, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.112344264984131, + 5.151429653167725, + -0.10163116455078125 + ], + "min": [ + 2.112302541732788, + 5.151391983032227, + -0.10167694091796875 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.012483884580433369, + -0.01365621667355299, + 0.23880794644355774, + 0.9808360934257507 + ], + "min": [ + 0.00864197127521038, + -0.01732274517416954, + 0.19416344165802002, + 0.9708320498466492 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.009778380393981934, + 1.9066662788391113, + 2.3365020751953125e-05 + ], + "min": [ + 0.009773075580596924, + 1.9066277742385864, + 1.4126300811767578e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 534, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.16332881152629852, + -0.0021924132015556097, + -0.012901801615953445, + 0.999839186668396 + ], + "min": [ + -0.032415151596069336, + -0.007844998501241207, + -0.04265367239713669, + 0.985617995262146 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.6209735870361328, + 5.933867454528809, + -0.18955612182617188 + ], + "min": [ + -0.6209878921508789, + 5.933835983276367, + -0.1895732879638672 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000003576278687, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 493, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.16385410726070404, + -0.0046537709422409534, + -0.025580033659934998, + 0.99859619140625 + ], + "min": [ + 0.04614847153425217, + -0.00834368821233511, + -0.045861344784498215, + 0.9853826761245728 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.007064300123602152, + 0.0031102183274924755, + 0.08817757666110992, + 0.9997286200523376 + ], + "min": [ + -0.05645063519477844, + -0.010276895016431808, + -0.04902150109410286, + 0.9950225949287415 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 477, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 579, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.09416648000478745, + -0.031065523624420166, + -0.9755316972732544, + 0.13251253962516785 + ], + "min": [ + -0.13483065366744995, + -0.1585140824317932, + -0.9827479720115662, + 0.046919748187065125 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 392, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.010367073118686676, + 0.026020700111985207, + 0.005574364215135574, + 0.9995712637901306 + ], + "min": [ + -0.029957721009850502, + -0.04263531044125557, + -0.0220379326492548, + 0.9988893866539001 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997019767761, + 0.9999997019767761, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.22541102766990662, + -0.002154144924134016, + 0.001170284696854651, + 0.9835196733474731 + ], + "min": [ + 0.18070849776268005, + -0.005687756929546595, + -0.007271403446793556, + 0.9742342829704285 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 348, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 234, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-07 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-07 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 581, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.6838312149047852e-06, + 6.854518413543701, + -0.5485947728157043 + ], + "min": [ + -2.3543834686279297e-06, + 6.854480266571045, + -0.5486010909080505 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 409, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.8905124664306641, + 5.982405662536621, + -0.2430415153503418 + ], + "min": [ + 0.8904919624328613, + 5.982386589050293, + -0.24306488037109375 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 452, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.11902736127376556, + -0.002084823325276375, + -0.028994213789701462, + 0.9935969710350037 + ], + "min": [ + 0.10917888581752777, + -0.002222043927758932, + -0.030499938875436783, + 0.992419958114624 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.004048347473144531, + 1.9782629013061523, + -2.956390380859375e-05 + ], + "min": [ + -0.004058837890625, + 1.978226661682129, + -4.3392181396484375e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 591, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3231901526451111, + 0.31904318928718567, + 0.16974300146102905, + 0.9974219799041748 + ], + "min": [ + -0.08003358542919159, + -0.2763500213623047, + -0.25712525844573975, + 0.8766242861747742 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 177, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006532952189445496, + 1.8280677795410156, + -1.1722324416041374e-05 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -1.1722324416041374e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 564, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.1638278067111969, + 0.17582638561725616, + 0.22936508059501648, + 0.9995896220207214 + ], + "min": [ + 0.02268115244805813, + 0.0029334318824112415, + -0.08364342153072357, + 0.9433320760726929 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 322, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.6689300537109375e-06, + 7.483725547790527, + 1.4662742614746094e-05 + ], + "min": [ + -1.4901161193847656e-06, + 7.4837117195129395, + -1.2509524822235107e-05 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 295, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -9.933781939253095e-07, + 5.373970634536818e-05, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-07, + 5.373970634536818e-05, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 473, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.05690119042992592, + 0.00566576374694705, + 0.01428120769560337, + 0.9986143112182617 + ], + "min": [ + 0.05064700171351433, + 0.00541321188211441, + 0.01323179341852665, + 0.9982616305351257 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 329, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.4030008614063263, + 0.003750248346477747, + 0.09187088161706924, + 0.9199389815330505 + ], + "min": [ + 0.38219958543777466, + 0.00356577942147851, + 0.08731123805046082, + 0.9105690121650696 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 395, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.626791775226593, + -0.35697317123413086, + 0.6183279156684875, + 0.4474252462387085 + ], + "min": [ + 0.5874829888343811, + -0.3742434084415436, + 0.5201908946037292, + 0.36397284269332886 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5121, + "count": 3340, + "max": [ + 51, + 51, + 51, + 51 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.002_skin_0", + "type": "VEC4" + }, + { + "bufferView": 356, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.03271305933594704, + -0.00145717931445688, + -0.018813198432326317, + 0.9995459914207458 + ], + "min": [ + 0.023490186780691147, + -0.0016165364068001509, + -0.020451921969652176, + 0.9992542862892151 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 533, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.01093292236328125, + 2.2484869956970215, + -1.5497207641601562e-06 + ], + "min": [ + -0.010982275009155273, + 2.2484469413757324, + -3.6716461181640625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.009845733642578125, + 2.002579689025879, + 3.0994415283203125e-06 + ], + "min": [ + -0.009863853454589844, + 2.002546787261963, + -8.791685104370117e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 413, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.46000736951828003, + 0.03152599558234215, + -0.04419853910803795, + 0.9418922662734985 + ], + "min": [ + 0.3217529058456421, + -0.06592879444360733, + -0.34377336502075195, + 0.8436853885650635 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 3.17208468914032e-06, + 7.483736515045166, + 1.971796154975891e-05 + ], + "min": [ + -3.3229589462280273e-06, + 7.483699321746826, + -1.823902130126953e-05 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 358, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.008647918701171875, + 2.2196311950683594, + 6.556510925292969e-06 + ], + "min": [ + 0.008634090423583984, + 2.219604969024658, + -1.430511474609375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 631, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 416, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.12065981328487396, + 0.0003798922407440841, + -0.028892751783132553, + 0.9933441281318665 + ], + "min": [ + 0.1115017756819725, + 0.00035250571090728045, + -0.030522560700774193, + 0.9922245144844055 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.006222724914550781, + 1.525007963180542, + 1.52587890625e-05 + ], + "min": [ + -0.006236076354980469, + 1.5249779224395752, + -4.76837158203125e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 603, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.42069321870803833, + 0.023263368755578995, + 0.002807950833812356, + 0.9984909892082214 + ], + "min": [ + -0.03831353783607483, + -0.06716737896203995, + -0.22723887860774994, + 0.9035097360610962 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 468, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 390, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 476, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.15645623207092285, + 0.010588050819933414, + 0.04273870959877968, + 0.9883657097816467 + ], + "min": [ + 0.14605343341827393, + 0.010204009711742401, + 0.04120168462395668, + 0.9867029786109924 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 296, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 455, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.17218118906021118, + 0.07726967334747314, + 0.08277056366205215, + 0.9840719699859619 + ], + "min": [ + -0.5687631368637085, + -0.03817012906074524, + -0.0026246230117976665, + 0.8189079761505127 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 412, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 2.1457672119140625e-06, + 7.483728885650635, + 1.3113021850585938e-05 + ], + "min": [ + -4.0531158447265625e-06, + 7.483709812164307, + -1.0369811207056046e-05 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 290, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.000000238418579, + 1.0 + ], + "min": [ + 1.0, + 1.000000238418579, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 217, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 542, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 2.2351741790771484e-05, + 22.772350311279297, + 1.7642974853515625e-05 + ], + "min": [ + -2.5272369384765625e-05, + 22.772321701049805, + -1.7642974853515625e-05 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 2.1457672119140625e-06, + 45.050376892089844, + 4.023313522338867e-06 + ], + "min": [ + -1.6093254089355469e-06, + 45.05033874511719, + -4.492700099945068e-06 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.2142990231513977, + 0.008710382506251335, + 0.007254559081047773, + 0.9938622713088989 + ], + "min": [ + 0.11028195917606354, + 0.0048032901249825954, + -0.017979728057980537, + 0.9765638113021851 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 408, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999996423721313, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 461, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.30395814776420593, + 0.002761955140158534, + 0.05785207450389862, + 0.9542210698127747 + ], + "min": [ + 0.29374009370803833, + 0.0026750490069389343, + 0.056320395320653915, + 0.9509233236312866 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 346, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.6689300537109375e-06, + 12.089052200317383, + 2.2351741790771484e-06 + ], + "min": [ + -4.507601261138916e-07, + 12.089044570922852, + -7.450580596923828e-06 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 524, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -2.381829261779785, + 6.091211318969727, + 0.09325706958770752 + ], + "min": [ + -2.381869077682495, + 6.0911760330200195, + 0.09322134405374527 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Yawn_0", + "type": "VEC3" + }, + { + "bufferView": 634, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 562, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997019767761, + 0.9999996423721313, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 277, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.749335064640036e-09, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1.0 + ], + "min": [ + -3.749335064640036e-09, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 489, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.6804887652397156, + -0.004544736817479134, + -0.2923188805580139, + 0.9311265349388123 + ], + "min": [ + 0.21801918745040894, + -0.13387252390384674, + -0.35228684544563293, + 0.6335200667381287 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.087784767150879e-06, + 41.850101470947266, + 1.6391277313232422e-06 + ], + "min": [ + -9.387731552124023e-07, + 41.85007858276367, + -1.519918441772461e-06 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 600, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.4894944131374359, + -0.00010724014282459393, + -0.013581942766904831, + 0.9996159076690674 + ], + "min": [ + 0.024158209562301636, + -0.00331420311704278, + -0.08468065410852432, + 0.8678787350654602 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 625, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999996423721313, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 230, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 604, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 458, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.186489075422287, + 0.00365125248208642, + -0.04487039893865585, + 0.9913313388824463 + ], + "min": [ + 0.1214970126748085, + -0.0004450123815331608, + -0.08004932850599289, + 0.9791836738586426 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 265, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.6051130842242856e-06, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 1.6051130842242856e-06, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 565, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999997019767761, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 520, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000003576278687, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 272, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 504, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.3138423264026642, + -0.05865919962525368, + 0.01884089969098568, + 0.9543662667274475 + ], + "min": [ + 0.29159149527549744, + -0.061680588871240616, + 0.01815459132194519, + 0.947487473487854 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0013580322265625e-05, + 19.02716064453125, + 9.715557098388672e-06 + ], + "min": [ + -1.049041748046875e-05, + 19.027124404907227, + -9.179115295410156e-06 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 246, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-07, + 19.02713966369629, + 5.19820605404675e-06 + ], + "min": [ + 6.116943040979095e-07, + 19.02713966369629, + 5.19820605404675e-06 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 502, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999995827674866, + 0.9999996423721313 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.9371509552001953e-06, + 8.022503852844238, + 5.27501106262207e-06 + ], + "min": [ + -1.7881393432617188e-06, + 8.022464752197266, + -5.6140124797821045e-06 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 326, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.6072536110877991, + 0.1764809489250183, + 0.005088530946522951, + 0.9173010587692261 + ], + "min": [ + 0.3609119951725006, + 0.009429778903722763, + -0.17017100751399994, + 0.7740885615348816 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 529, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 255, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.960464477539063e-08, + 7.4837236404418945, + -1.7881393432617188e-06 + ], + "min": [ + -5.960464477539063e-08, + 7.4837236404418945, + -1.7881393432617188e-06 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 425, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.0043873474933207035, + 0.01913636364042759, + 0.03167296200990677, + 0.9999430179595947 + ], + "min": [ + -0.03925073891878128, + -0.025652628391981125, + -0.011231466196477413, + 0.9986997246742249 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 191, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 431, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.013776808977127075, + 0.007904808036983013, + 0.012526584789156914, + 0.9999035000801086 + ], + "min": [ + 0.0039803688414394855, + 0.0073607624508440495, + 0.011090894229710102, + 0.9997954368591309 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 606, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.11230652779340744, + 0.08230714499950409, + 0.016647951677441597, + 0.9924415946006775 + ], + "min": [ + -0.1816161423921585, + 0.0447072871029377, + -0.03208081051707268, + 0.979972243309021 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 609, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.37346184253692627, + -7.409354293486103e-05, + -0.006825698539614677, + 0.9999242424964905 + ], + "min": [ + -0.03445363789796829, + -0.005747898947447538, + -0.06894735991954803, + 0.9250620007514954 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 353, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.2313416302204132, + 0.42733529210090637, + 0.1651192009449005, + 0.9869678020477295 + ], + "min": [ + -0.10425511747598648, + 0.07881790399551392, + -0.0629025548696518, + 0.8733873963356018 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 250, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.737616568992962e-06, + -7.92778519098647e-05, + -0.08030900359153748, + 0.9967700242996216 + ], + "min": [ + 2.737616568992962e-06, + -7.92778519098647e-05, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 394, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -3.5135207176208496, + 8.98844051361084, + -0.11455347388982773 + ], + "min": [ + -3.513522148132324, + 8.9884033203125, + -0.11455550044775009 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 436, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 3.513521909713745, + 8.987099647521973, + -0.09783592820167542 + ], + "min": [ + 3.5135202407836914, + 8.987060546875, + -0.09783817827701569 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 236, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 254, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 444, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999995827674866, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 556, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 472, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.016335487365722656, + 2.0911879539489746, + 9.298324584960938e-06 + ], + "min": [ + 0.016317367553710938, + 2.091172933578491, + -7.152557373046875e-07 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 528, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.23321226239204407, + -0.0005258644814603031, + -0.005907810293138027, + 0.9992257952690125 + ], + "min": [ + 0.03889349475502968, + -0.001992400037124753, + -0.03604394197463989, + 0.9717556238174438 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 328, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.009784698486328125, + 1.9066550731658936, + 2.3096799850463867e-05 + ], + "min": [ + 0.009769439697265625, + 1.906639575958252, + 1.3828277587890625e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.000000238418579 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999997019767761, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_Idle_2", + "type": "VEC3" + }, + { + "bufferView": 451, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + -0.009847022593021393, + 2.0025761127471924, + 2.86102294921875e-06 + ], + "min": [ + -0.009865224361419678, + 2.0025548934936523, + -1.1920928955078125e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -8.009374141693115e-08, + 12.033416748046875, + 5.155801773071289e-06 + ], + "min": [ + -8.624047040939331e-07, + 12.033411979675293, + 2.086162567138672e-06 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 306, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.239861249923706e-07, + 12.033415794372559, + 3.5762786865234375e-07 + ], + "min": [ + -6.239861249923706e-07, + 12.033415794372559, + 3.5762786865234375e-07 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.19164203107357025, + 0.010969349183142185, + 0.06582394242286682, + 0.9906309247016907 + ], + "min": [ + 0.11946962028741837, + 0.006721641402691603, + 0.054351724684238434, + 0.9798974394798279 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 287, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 558, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 0.06762795150279999, + 0.08844052255153656, + -0.9890600442886353, + 0.12963023781776428 + ], + "min": [ + 0.006446733605116606, + -0.04662296921014786, + -0.9952765703201294, + 0.08730243891477585 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 438, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 292, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 388, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.0779564380645752, + 2.1093409061431885, + 3.814697265625e-06 + ], + "min": [ + 0.07794487476348877, + 2.109320878982544, + -1.33514404296875e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 351, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 279, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 164, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.0987086296081543, + 2.22261118888855, + 2.7179718017578125e-05 + ], + "min": [ + 0.09868621826171875, + 2.2225847244262695, + 9.059906005859375e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.18894062936306, + 0.045000359416007996, + 0.05795791372656822, + 0.9932901263237 + ], + "min": [ + 0.09659142792224884, + 0.027609357610344887, + 0.04495842382311821, + 0.9798877835273743 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 601, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + -0.010956764221191406, + 2.248481273651123, + -1.621246337890625e-05 + ], + "min": [ + -0.010968208312988281, + 2.2484450340270996, + -2.676248550415039e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_Idle_0", + "type": "VEC3" + }, + { + "bufferView": 368, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.12839406728744507, + 0.09395399689674377, + 0.057377591729164124, + 0.9990851283073425 + ], + "min": [ + -0.056537214666604996, + 0.003749663243070245, + 0.03209517151117325, + 0.9864088296890259 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 592, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999997615814209, + 0.9999997019767761, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:Head_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 332, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.38647565245628357, + -0.041564248502254486, + -0.28223755955696106, + 0.892213761806488 + ], + "min": [ + 0.34301039576530457, + -0.05170813947916031, + -0.3102066218852997, + 0.8676663637161255 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 398, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 0.09262010455131531, + 0.7226356863975525, + 0.7055319547653198, + 0.058627232909202576 + ], + "min": [ + -0.06122410297393799, + -0.7198480367660522, + -0.7098605036735535, + -0.009331149980425835 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_Walking_1", + "type": "VEC4" + }, + { + "bufferView": 586, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999997615814209, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Yawn_2", + "type": "VEC3" + }, + { + "bufferView": 421, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 6.509202480316162, + -3.808892250061035, + -0.31935322284698486 + ], + "min": [ + 6.509199619293213, + -3.808922290802002, + -0.31935441493988037 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_Walking_0", + "type": "VEC3" + }, + { + "bufferView": 429, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.000000238418579, + 1.000000238418579, + 1.0000003576278687 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 176, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 330, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999997615814209, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_Walking_2", + "type": "VEC3" + }, + { + "bufferView": 612, + "byteOffset": 0, + "componentType": 5126, + "count": 251, + "max": [ + -0.18404385447502136, + -0.03511805459856987, + 0.0509750097990036, + 0.9808171391487122 + ], + "min": [ + -0.2407776117324829, + -0.07764491438865662, + 0.018029099330306053, + 0.9682146310806274 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_Yawn_1", + "type": "VEC4" + }, + { + "bufferView": 249, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 1.0579824447631836e-06 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 1.0579824447631836e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 501, + "max": [ + 0.6693047881126404, + 0.35235124826431274, + -0.5831430554389954, + 0.3586310148239136 + ], + "min": [ + 0.6274645328521729, + 0.3059859275817871, + -0.5993227362632751, + 0.3346402645111084 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_Idle_1", + "type": "VEC4" + }, + { + "bufferView": 402, + "byteOffset": 0, + "componentType": 5126, + "count": 30, + "max": [ + 1.0001200437545776, + 1.0000041723251343, + 1.0000247955322266 + ], + "min": [ + 1.0001025199890137, + 0.9999999403953552, + 1.0000050067901611 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_Walking_2", + "type": "VEC3" + } + ], + "animations": [ + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 2, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 2, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 2, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 47, + "path": "scale" + } + } + ], + "name": "Character_Idle", + "samplers": [ + { + "input": 274, + "interpolation": "LINEAR", + "output": 542 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 503 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 356 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 397 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 56 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 414 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 510 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 155 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 410 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 77 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 47 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 447 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 33 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 560 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 216 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 396 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 249 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 210 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 261 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 182 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 206 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 619 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 11 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 562 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 486 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 110 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 520 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 499 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 322 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 556 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 398 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 360 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 121 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 528 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 226 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 349 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 104 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 82 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 408 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 547 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 504 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 198 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 118 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 521 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 35 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 445 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 610 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 179 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 473 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 372 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 606 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 368 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 338 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 83 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 622 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 515 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 2 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 318 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 365 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 438 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 96 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 16 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 262 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 39 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 509 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 321 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 113 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 154 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 352 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 500 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 67 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 145 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 50 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 341 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 295 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 190 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 73 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 69 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 4 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 51 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 103 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 581 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 191 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 306 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 236 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 369 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 176 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 387 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 267 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 166 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 72 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 385 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 401 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 221 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 84 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 600 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 123 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 12 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 302 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 419 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 342 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 258 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 85 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 516 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 117 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 570 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 400 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 506 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 115 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 227 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 436 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 453 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 232 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 337 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 309 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 634 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 340 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 584 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 178 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 543 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 305 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 173 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 605 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 90 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 246 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 526 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 559 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 36 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 317 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 540 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 487 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 288 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 297 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 172 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 18 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 512 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 58 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 63 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 310 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 27 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 513 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 608 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 31 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 242 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 251 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 394 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 326 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 248 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 162 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 44 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 441 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 417 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 109 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 94 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 620 + }, + { + "input": 274, + "interpolation": "LINEAR", + "output": 45 + } + ] + }, + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 2, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 2, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 2, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 47, + "path": "scale" + } + } + ], + "name": "Character_TPose", + "samplers": [ + { + "input": 618, + "interpolation": "LINEAR", + "output": 49 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 235 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 460 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 234 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 140 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 439 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 282 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 464 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 125 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 405 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 406 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 630 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 530 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 272 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 156 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 399 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 434 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 378 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 177 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 146 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 22 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 142 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 327 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 505 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 132 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 9 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 589 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 149 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 184 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 193 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 59 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 188 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 422 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 38 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 143 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 287 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 270 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 74 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 325 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 459 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 55 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 478 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 1 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 489 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 231 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 163 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 311 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 336 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 266 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 196 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 57 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 151 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 557 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 88 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 265 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 186 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 159 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 379 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 347 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 141 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 10 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 137 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 92 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 412 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 148 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 573 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 80 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 426 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 416 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 523 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 280 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 597 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 75 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 339 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 215 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 259 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 93 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 168 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 17 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 281 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 95 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 582 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 223 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 501 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 633 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 594 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 127 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 29 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 240 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 598 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 587 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 301 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 40 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 482 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 167 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 470 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 313 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 444 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 209 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 86 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 576 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 403 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 24 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 440 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 203 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 468 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 388 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 579 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 205 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 153 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 477 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 496 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 568 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 238 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 617 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 189 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 370 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 308 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 330 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 411 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 346 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 409 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 611 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 472 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 476 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 555 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 507 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 614 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 484 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 239 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 533 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 552 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 169 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 126 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 105 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 256 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 14 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 462 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 164 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 97 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 8 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 609 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 65 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 375 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 451 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 289 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 64 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 119 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 247 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 446 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 430 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 174 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 420 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 7 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 494 + }, + { + "input": 618, + "interpolation": "LINEAR", + "output": 28 + } + ] + }, + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 2, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 2, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 2, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 47, + "path": "scale" + } + } + ], + "name": "Character_Walking", + "samplers": [ + { + "input": 343, + "interpolation": "LINEAR", + "output": 532 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 277 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 367 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 389 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 585 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 197 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 604 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 535 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 631 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 366 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 625 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 344 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 483 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 284 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 130 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 23 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 212 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 32 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 493 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 437 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 380 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 498 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 384 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 275 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 564 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 187 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 522 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 465 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 296 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 616 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 431 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 593 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 469 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 254 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 538 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 112 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 544 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 323 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 157 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 220 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 364 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 52 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 279 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 362 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 199 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 133 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 623 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 122 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 268 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 329 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 214 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 495 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 371 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 6 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 200 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 228 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 263 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 351 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 87 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 488 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 480 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 348 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 37 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 219 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 374 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 353 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 615 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 134 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 550 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 241 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 519 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 41 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 595 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 536 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 273 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 131 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 626 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 290 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 91 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 454 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 635 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 66 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 485 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 376 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 181 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 128 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 561 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 525 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 202 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 54 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 554 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 541 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 402 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 243 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 546 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 335 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 48 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 204 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 492 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 628 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 293 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 20 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 201 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 588 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 180 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 5 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 357 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 629 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 429 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 590 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 404 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 208 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 78 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 457 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 596 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 89 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 613 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 171 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 456 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 42 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 101 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 252 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 599 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 25 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 435 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 264 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 62 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 294 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 448 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 607 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 527 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 13 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 298 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 553 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 463 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 278 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 575 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 285 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 433 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 563 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 391 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 46 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 354 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 283 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 175 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 233 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 549 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 114 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 195 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 418 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 602 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 534 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 312 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 229 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 551 + }, + { + "input": 343, + "interpolation": "LINEAR", + "output": 517 + } + ] + }, + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 23, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 2, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 2, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 2, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 47, + "path": "scale" + } + } + ], + "name": "Character_Yawn", + "samplers": [ + { + "input": 253, + "interpolation": "LINEAR", + "output": 98 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 129 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 358 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 424 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 257 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 34 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 79 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 15 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 211 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 508 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 569 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 170 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 19 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 271 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 514 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 450 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 120 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 350 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 471 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 144 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 250 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 381 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 443 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 583 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 466 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 580 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 124 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 276 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 303 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 361 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 425 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 108 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 222 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 292 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 194 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 255 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 260 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 355 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 386 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 213 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 332 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 578 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 150 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 185 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 481 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 565 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 331 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 224 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 497 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 603 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 586 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 475 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 300 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 160 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 539 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 511 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 314 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 237 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 423 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 333 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 291 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 479 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 100 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 558 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 230 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 413 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 304 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 328 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 467 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 21 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 183 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 106 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 0 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 458 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 474 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 71 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 432 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 601 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 345 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 612 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 165 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 3 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 421 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 567 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 147 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 531 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 577 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 139 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 70 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 269 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 158 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 26 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 395 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 107 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 68 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 43 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 102 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 415 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 428 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 81 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 518 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 244 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 524 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 53 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 382 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 161 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 442 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 627 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 136 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 390 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 334 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 286 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 529 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 624 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 76 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 60 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 299 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 111 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 393 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 377 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 319 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 571 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 621 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 135 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 548 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 574 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 320 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 591 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 455 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 359 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 592 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 427 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 307 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 632 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 324 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 461 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 491 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 392 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 407 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 152 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 316 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 490 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 138 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 502 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 225 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 383 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 572 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 315 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 116 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 207 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 192 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 373 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 545 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 61 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 363 + }, + { + "input": 253, + "interpolation": "LINEAR", + "output": 566 + } + ] + } + ], + "asset": { + "copyright": "", + "generator": "blendergltf v1.2.0", + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 40080, + "byteOffset": 0, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.002_POSITION_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 40080, + "byteOffset": 40080, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.002_NORMAL_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 26720, + "byteOffset": 80160, + "byteStride": 8, + "name": "bufferView_buffer_F010_Saber.002_TEXCOORD_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 40080, + "byteOffset": 106880, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.002_COLOR_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 28756, + "byteOffset": 146960, + "name": "bufferView_buffer_F010_Saber.002_0", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 106880, + "byteOffset": 175716, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.002_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 3328, + "byteOffset": 282596, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Body_skin_0" + }, + { + "buffer": 0, + "byteLength": 2004, + "byteOffset": 285924, + "byteStride": 4, + "name": "bufferView_buffer_Character_Idle_time_0" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 287928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 293940, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 301956, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 307968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 313980, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 321996, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 328008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 334020, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 342036, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 348048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 354060, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 362076, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 368088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 374100, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 382116, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 388128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 394140, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 402156, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 408168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 414180, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 422196, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 428208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 434220, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 442236, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 448248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 454260, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 462276, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 468288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 474300, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 482316, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 488328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 494340, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 502356, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 508368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 514380, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 522396, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 528408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 534420, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 542436, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 548448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 554460, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 562476, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 568488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 574500, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 582516, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 588528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 594540, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 602556, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 608568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 614580, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 622596, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 628608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 634620, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 642636, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 648648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 654660, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 662676, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 668688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 674700, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 682716, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 688728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 694740, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 702756, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 708768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 714780, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 722796, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 728808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 734820, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 742836, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 748848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 754860, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 762876, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 768888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 774900, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 782916, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 788928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 794940, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 802956, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 808968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 814980, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 822996, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 829008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 835020, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 843036, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 849048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 855060, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 863076, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 869088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 875100, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 883116, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 889128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 895140, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 903156, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 909168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 915180, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 923196, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 929208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 935220, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 943236, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 949248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 955260, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 963276, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 969288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 975300, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 983316, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 989328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 995340, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1003356, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1009368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1015380, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1023396, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1029408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1035420, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1043436, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1049448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1055460, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1063476, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1069488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1075500, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1083516, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1089528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1095540, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1103556, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1109568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1115580, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1123596, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1129608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1135620, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1143636, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1149648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1155660, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1163676, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1169688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1175700, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1183716, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1189728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1195740, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1203756, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1209768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1215780, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1223796, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1229808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1235820, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1243836, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1249848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1255860, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1263876, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1269888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1275900, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1283916, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1289928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1295940, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1303956, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1309968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Idle_0" + }, + { + "buffer": 0, + "byteLength": 8016, + "byteOffset": 1315980, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Idle_1" + }, + { + "buffer": 0, + "byteLength": 6012, + "byteOffset": 1323996, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Idle_2" + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 1330008, + "byteStride": 4, + "name": "bufferView_buffer_Character_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330016, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330040, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330072, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330120, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330152, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330176, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330200, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330232, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330256, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330280, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330312, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330360, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330392, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330416, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330440, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330472, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330520, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330552, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330576, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330600, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330632, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330656, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330680, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330712, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330760, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330792, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330816, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330840, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330872, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1330920, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330952, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1330976, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331000, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331032, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331056, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331080, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331112, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331160, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331192, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331216, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331240, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331272, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331320, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331352, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331376, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331400, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331432, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331456, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331480, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331512, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331560, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331592, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331616, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331640, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331672, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331720, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331752, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331776, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331800, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331832, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331856, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331880, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331912, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1331960, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1331992, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332016, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332040, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332072, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332120, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332152, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332176, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332200, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332232, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332256, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332280, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332312, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332360, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332392, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332416, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332440, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332472, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332520, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332552, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332576, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332600, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332632, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332656, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332680, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332712, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332760, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332792, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332816, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332840, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332872, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1332920, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332952, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1332976, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333000, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333032, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333056, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333080, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333112, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333160, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333192, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333216, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333240, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333272, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333320, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333352, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333376, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333400, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333432, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333456, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333480, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333512, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333560, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333592, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333616, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333640, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333672, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333720, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333752, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333776, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333800, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333832, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333856, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333880, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333912, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1333960, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1333992, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1334016, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1334040, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1334072, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1334096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 1334120, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 1334152, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 120, + "byteOffset": 1334176, + "byteStride": 4, + "name": "bufferView_buffer_Character_Walking_time_0" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1334296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1334656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1335136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1335496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1335856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1336336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1336696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1337056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1337536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1337896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1338256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1338736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1339096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1339456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1339936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1340296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1340656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1341136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1341496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1341856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1342336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1342696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1343056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1343536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1343896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1344256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1344736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1345096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1345456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1345936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1346296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1346656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1347136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1347496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1347856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1348336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1348696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1349056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1349536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1349896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1350256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1350736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1351096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1351456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1351936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1352296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1352656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1353136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1353496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1353856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1354336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1354696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1355056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1355536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1355896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1356256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1356736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1357096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1357456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1357936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1358296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1358656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1359136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1359496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1359856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1360336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1360696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1361056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1361536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1361896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1362256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1362736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1363096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1363456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1363936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1364296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1364656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1365136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1365496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1365856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1366336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1366696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1367056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1367536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1367896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1368256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1368736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1369096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1369456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1369936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1370296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1370656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1371136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1371496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1371856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1372336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1372696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1373056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1373536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1373896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1374256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1374736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1375096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1375456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1375936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1376296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1376656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1377136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1377496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1377856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1378336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1378696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1379056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1379536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1379896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1380256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1380736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1381096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1381456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1381936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1382296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1382656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1383136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1383496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1383856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1384336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1384696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1385056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1385536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1385896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1386256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1386736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1387096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1387456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1387936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1388296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1388656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1389136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1389496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1389856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1390336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1390696, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1391056, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1391536, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1391896, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1392256, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1392736, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1393096, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1393456, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1393936, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1394296, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1394656, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1395136, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1395496, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Walking_0" + }, + { + "buffer": 0, + "byteLength": 480, + "byteOffset": 1395856, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Walking_1" + }, + { + "buffer": 0, + "byteLength": 360, + "byteOffset": 1396336, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Walking_2" + }, + { + "buffer": 0, + "byteLength": 1004, + "byteOffset": 1396696, + "byteStride": 4, + "name": "bufferView_buffer_Character_Yawn_time_0" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1397700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1400712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1404728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1407740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1410752, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1414768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1417780, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1420792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1424808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1427820, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1430832, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1434848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1437860, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1440872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1444888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1447900, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1450912, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1454928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1457940, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1460952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1464968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1467980, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1470992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1475008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1478020, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1481032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1485048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1488060, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1491072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1495088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1498100, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1501112, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1505128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1508140, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1511152, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1515168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1518180, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1521192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1525208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1528220, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1531232, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1535248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1538260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1541272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1545288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1548300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1551312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1555328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1558340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1561352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1565368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1568380, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1571392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1575408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1578420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1581432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1585448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1588460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1591472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1595488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1598500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1601512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1605528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1608540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1611552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1615568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1618580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1621592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1625608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1628620, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1631632, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1635648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1638660, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1641672, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1645688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1648700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1651712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1655728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1658740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1661752, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1665768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1668780, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1671792, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1675808, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1678820, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1681832, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1685848, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1688860, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1691872, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1695888, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1698900, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1701912, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1705928, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1708940, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1711952, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1715968, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1718980, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1721992, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1726008, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1729020, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1732032, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1736048, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1739060, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1742072, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1746088, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1749100, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1752112, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1756128, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1759140, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1762152, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1766168, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1769180, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1772192, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1776208, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1779220, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1782232, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1786248, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1789260, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1792272, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1796288, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1799300, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1802312, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1806328, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1809340, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1812352, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1816368, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1819380, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1822392, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1826408, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1829420, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1832432, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1836448, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1839460, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1842472, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1846488, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1849500, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1852512, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1856528, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1859540, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1862552, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1866568, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1869580, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1872592, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1876608, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1879620, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1882632, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1886648, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1889660, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1892672, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1896688, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1899700, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1902712, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1906728, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_Yawn_2" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1909740, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Yawn_0" + }, + { + "buffer": 0, + "byteLength": 4016, + "byteOffset": 1912752, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Yawn_1" + }, + { + "buffer": 0, + "byteLength": 3012, + "byteOffset": 1916768, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_Yawn_2" + } + ], + "buffers": [ + { + "byteLength": 1919780, + "name": "buffer_saber-body-animations", + "uri": "buffer_saber-body-animations.bin" + } + ], + "images": [ + { + "name": "saber-pure-body.png", + "uri": "saber-pure-body.png" + }, + { + "name": "body_id_lut", + "uri" : "body_id.png" + } + ], + "materials": [ + { + "name": "saber-pure-body", + "alphaMode": "BLEND", + "doubleSided": false, + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0.0, + "roughnessFactor": 1.0 + }, + "extensions": { + "gl_avatar": { + "bodyIdLUT": 1 + } + } + } + ], + "meshes": [ + { + "name": "F010_Saber.002", + "primitives": [ + { + "attributes": { + "COLOR_0": 449, + "JOINTS_0": 537, + "NORMAL": 99, + "POSITION": 245, + "TEXCOORD_0": 452, + "WEIGHTS_0": 217 + }, + "indices": 218, + "material": 0, + "mode": 4 + } + ] + } + ], + "nodes": [ + { + "children": [ + 1, + 2 + ], + "name": "Character", + "rotation": [ + -0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "mesh": 0, + "name": "F010_Saber_Body", + "rotation": [ + -8.198130529990522e-08, + -3.4885669353279525e-10, + 6.977134425767417e-10, + 1.0 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "skin": 0, + "translation": [ + 2.8014183044433594e-06, + 1.072883719643869e-06, + -1.4305113836599048e-05 + ], + "extensions": { + "gl_avatar": { + "skin": [1, 2] + } + } + }, + { + "children": [ + 3, + 57, + 62 + ], + "name": "Armature_mixamorig:Hips", + "rotation": [ + 0.0, + 0.7071068286895752, + 0.7071068286895752, + 0.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -0.007442474365234375, + 0.6201396584510803, + 98.82971954345703 + ] + }, + { + "children": [ + 4 + ], + "name": "Armature_mixamorig:Spine", + "rotation": [ + -0.039921652525663376, + 0.0, + 0.0, + 0.9992028474807739 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.0, + 6.854499816894531, + -0.5485978126525879 + ] + }, + { + "children": [ + 5 + ], + "name": "Armature_mixamorig:Spine1", + "rotation": [ + 1.4901162970204496e-08, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -4.656612873077393e-10, + 8.022480964660645, + -2.384185791015625e-07 + ] + }, + { + "children": [ + 6, + 9, + 33 + ], + "name": "Armature_mixamorig:Spine2", + "rotation": [ + -5.029141902923584e-08, + 9.423000574271256e-13, + -2.358492047493943e-11, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -4.656612873077393e-10, + 9.168560028076172, + -4.76837158203125e-07 + ] + }, + { + "children": [ + 7 + ], + "name": "Armature_mixamorig:Neck", + "rotation": [ + 0.03992168977856636, + 1.427615485679809e-13, + 2.0030548400495896e-11, + 0.9992028474807739 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -2.2881511962946632e-10, + 10.314631462097168, + 1.1920928955078125e-06 + ] + }, + { + "children": [ + 8 + ], + "name": "Armature_mixamorig:Head", + "rotation": [ + -3.749335064640036e-09, + -6.35555176367169e-21, + 5.4569682106375694e-12, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -5.1451731764018405e-11, + 4.3087005615234375, + 0.11991112679243088 + ] + }, + { + "name": "Armature_mixamorig:HeadTop_End", + "rotation": [ + 0.0, + 2.610143520150023e-28, + -1.8189894035458565e-12, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 1.2972056762095008e-10, + 20.857254028320312, + 0.5804517269134521 + ] + }, + { + "children": [ + 10 + ], + "name": "Armature_mixamorig:LeftShoulder", + "rotation": [ + 0.5740949511528015, + 0.4067640006542206, + -0.5904093384742737, + 0.39544278383255005 + ], + "scale": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "translation": [ + 3.513521194458008, + 8.987089157104492, + -0.09783673286437988 + ] + }, + { + "children": [ + 11 + ], + "name": "Armature_mixamorig:LeftArm", + "rotation": [ + -0.19647400081157684, + -0.0007150349556468427, + 0.0035684211179614067, + 0.9805023074150085 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 0.9999999403953552 + ], + "translation": [ + -5.960464477539062e-07, + 7.4837188720703125, + -1.049041748046875e-05 + ] + }, + { + "children": [ + 12 + ], + "name": "Armature_mixamorig:LeftForeArm", + "rotation": [ + -0.005400624126195908, + -0.0001584456767886877, + 0.029325975105166435, + 0.9995554089546204 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -5.364418029785156e-07, + 22.7723331451416, + 5.662441253662109e-07 + ] + }, + { + "children": [ + 13, + 17, + 21, + 25, + 29 + ], + "name": "Armature_mixamorig:LeftHand", + "rotation": [ + -0.0046674893237650394, + -0.036291614174842834, + -0.01584092527627945, + 0.9992048144340515 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 4.76837158203125e-07, + 19.02334213256836, + 8.046627044677734e-07 + ] + }, + { + "children": [ + 14 + ], + "name": "Armature_mixamorig:LeftHandThumb1", + "rotation": [ + 0.24564014375209808, + 0.0797870084643364, + 0.2984432578086853, + 0.9188180565834045 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -1.3880550861358643, + 1.872644305229187, + 1.3422610759735107 + ] + }, + { + "children": [ + 15 + ], + "name": "Armature_mixamorig:LeftHandThumb2", + "rotation": [ + 0.00489170802757144, + 4.4890290951116185e-07, + 4.610102450897102e-07, + 0.9999881386756897 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -0.018166542053222656, + 2.1517605781555176, + -2.1755695343017578e-05 + ] + }, + { + "children": [ + 16 + ], + "name": "Armature_mixamorig:LeftHandThumb3", + "rotation": [ + 0.021618247032165527, + -5.850072852808808e-07, + -3.9590455003235547e-07, + 0.9997663497924805 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "translation": [ + 0.07795095443725586, + 2.1093316078186035, + 1.8775463104248047e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftHandThumb4", + "rotation": [ + 4.284083487959833e-08, + -1.769512749660862e-07, + -3.3527612686157227e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + -0.0597844123840332, + 1.8846036195755005, + -1.1980533599853516e-05 + ] + }, + { + "children": [ + 18 + ], + "name": "Armature_mixamorig:LeftHandIndex1", + "rotation": [ + 0.026657480746507645, + 0.0018764277920126915, + 0.07018843293190002, + 0.9971757531166077 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -2.3818466663360596, + 6.0911946296691895, + 0.09325551986694336 + ] + }, + { + "children": [ + 19 + ], + "name": "Armature_mixamorig:LeftHandIndex2", + "rotation": [ + -0.034092869609594345, + -7.741025598306805e-08, + 1.2725772080557363e-07, + 0.9994186758995056 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -0.009856224060058594, + 2.002563238143921, + 1.9297003746032715e-06 + ] + }, + { + "children": [ + 20 + ], + "name": "Armature_mixamorig:LeftHandIndex3", + "rotation": [ + -0.011232745833694935, + 8.382431815334712e-08, + -1.2014818651095993e-07, + 0.9999369382858276 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.0033556222915649414, + 1.906246304512024, + -2.428889274597168e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftHandIndex4", + "rotation": [ + -1.6298145055770874e-08, + -2.116430550813675e-07, + -1.4435499906539917e-07, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.006502628326416016, + 1.6352357864379883, + -7.256865501403809e-06 + ] + }, + { + "children": [ + 22 + ], + "name": "Armature_mixamorig:LeftHandMiddle1", + "rotation": [ + 0.030671721324324608, + 0.0003823289880529046, + 0.012456541880965233, + 0.9994519352912903 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "translation": [ + -0.620979368686676, + 5.9338483810424805, + -0.18955062329769135 + ] + }, + { + "children": [ + 23 + ], + "name": "Armature_mixamorig:LeftHandMiddle2", + "rotation": [ + -0.01664525642991066, + 1.53325672158644e-08, + 1.832339968643737e-08, + 0.999861478805542 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.018555283546447754, + 2.2824888229370117, + -2.2992491722106934e-05 + ] + }, + { + "children": [ + 24 + ], + "name": "Armature_mixamorig:LeftHandMiddle3", + "rotation": [ + -0.10026512295007706, + -6.588842182964072e-08, + 1.4567116579655703e-07, + 0.9949608445167542 + ], + "scale": [ + 1.0, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + -0.010961532592773438, + 2.2484676837921143, + -1.6957521438598633e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandMiddle4", + "rotation": [ + -4.5380154745089385e-08, + 5.855691398437557e-08, + 8.149073416063857e-09, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + 0.02951037883758545, + 2.0856528282165527, + 1.0073184967041016e-05 + ] + }, + { + "children": [ + 26 + ], + "name": "Armature_mixamorig:LeftHandRing1", + "rotation": [ + 0.10404136031866074, + -0.008528899401426315, + -0.08125600963830948, + 0.9912115335464478 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.8905025720596313, + 5.982393264770508, + -0.24304264783859253 + ] + }, + { + "children": [ + 27 + ], + "name": "Armature_mixamorig:LeftHandRing2", + "rotation": [ + -0.03329118713736534, + -6.639353955506522e-08, + -3.7273565567375044e-08, + 0.9994457960128784 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.017888784408569336, + 2.1800594329833984, + -1.7344951629638672e-05 + ] + }, + { + "children": [ + 28 + ], + "name": "Armature_mixamorig:LeftHandRing3", + "rotation": [ + -0.08213821053504944, + 5.25645127424923e-08, + 6.078793717279041e-07, + 0.9966209530830383 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.0040547847747802734, + 1.9782464504241943, + -3.8623809814453125e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandRing4", + "rotation": [ + -1.4202669262886047e-07, + -1.4062970876693726e-07, + -1.5425030142068863e-07, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "translation": [ + 0.02194046974182129, + 1.7619253396987915, + 2.6524066925048828e-05 + ] + }, + { + "children": [ + 30 + ], + "name": "Armature_mixamorig:LeftHandPinky1", + "rotation": [ + 0.13995902240276337, + -0.024145862087607384, + -0.16828545928001404, + 0.9754529595375061 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 2.112321376800537, + 5.15140962600708, + -0.10163509845733643 + ] + }, + { + "children": [ + 31 + ], + "name": "Armature_mixamorig:LeftHandPinky2", + "rotation": [ + -0.012911615893244743, + 6.519802298043942e-08, + 6.445289386647346e-07, + 0.999916672706604 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + -0.006536006927490234, + 1.828072190284729, + -1.633167266845703e-05 + ] + }, + { + "children": [ + 32 + ], + "name": "Armature_mixamorig:LeftHandPinky3", + "rotation": [ + -0.09343928843736649, + 1.850952742188383e-07, + -2.745443339335907e-07, + 0.9956250786781311 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -0.006233692169189453, + 1.5249935388565063, + 2.5272369384765625e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandPinky4", + "rotation": [ + 5.541368963690729e-08, + -5.9371814131736755e-09, + 1.3969838619232178e-09, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 0.012760639190673828, + 1.3818011283874512, + -5.304813385009766e-06 + ] + }, + { + "children": [ + 34 + ], + "name": "Armature_mixamorig:RightShoulder", + "rotation": [ + 0.5726097226142883, + -0.40782278776168823, + 0.5916988849639893, + 0.394577294588089 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -3.513521194458008, + 8.98842716217041, + -0.11455440521240234 + ] + }, + { + "children": [ + 35 + ], + "name": "Armature_mixamorig:RightArm", + "rotation": [ + -0.19615903496742249, + 0.0015209860866889358, + -0.007602959871292114, + 0.980541467666626 + ], + "scale": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + 6.854534149169922e-07, + 7.4837188720703125, + -6.9588422775268555e-06 + ] + }, + { + "children": [ + 36 + ], + "name": "Armature_mixamorig:RightForeArm", + "rotation": [ + -0.005199347157031298, + 0.00015941221499815583, + -0.03064456395804882, + 0.9995168447494507 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + -1.0132789611816406e-06, + 22.770898818969727, + -2.6673078536987305e-06 + ] + }, + { + "children": [ + 37, + 41, + 45, + 49, + 53 + ], + "name": "Armature_mixamorig:RightHand", + "rotation": [ + -0.027066726237535477, + 0.03516821190714836, + 0.024613087996840477, + 0.9987115859985352 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 5.960464477539062e-07, + 19.027141571044922, + -1.1309981346130371e-05 + ] + }, + { + "children": [ + 38 + ], + "name": "Armature_mixamorig:RightHandThumb1", + "rotation": [ + 0.24496246874332428, + -0.07342495024204254, + -0.27757158875465393, + 0.9260433316230774 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 1.4313437938690186, + 1.9488826990127563, + 1.373734474182129 + ] + }, + { + "children": [ + 39 + ], + "name": "Armature_mixamorig:RightHandThumb2", + "rotation": [ + 0.02597731165587902, + 4.695450286362757e-07, + 4.360061325314746e-07, + 0.9996625781059265 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.09870082139968872, + 2.2226028442382812, + 1.8328428268432617e-05 + ] + }, + { + "children": [ + 40 + ], + "name": "Armature_mixamorig:RightHandThumb3", + "rotation": [ + 0.0020599281415343285, + -4.209587416426075e-07, + -2.747407563674642e-07, + 0.9999979734420776 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.08420944213867188, + 1.993523359298706, + -2.4646520614624023e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandThumb4", + "rotation": [ + 6.705523247774181e-08, + -7.450580596923828e-09, + 6.05359673500061e-08, + 1.0 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + -0.1829054355621338, + 1.5351988077163696, + 9.775161743164062e-06 + ] + }, + { + "children": [ + 42 + ], + "name": "Armature_mixamorig:RightHandIndex1", + "rotation": [ + 0.04785900563001633, + -0.003934510983526707, + -0.08183817565441132, + 0.9954881072044373 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 2.2894375324249268, + 5.801694393157959, + 0.050646696239709854 + ] + }, + { + "children": [ + 43 + ], + "name": "Armature_mixamorig:RightHandIndex2", + "rotation": [ + -0.028287818655371666, + 7.496872456158599e-08, + 2.392710314325086e-07, + 0.9995998740196228 + ], + "scale": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 0.029898226261138916, + 2.2504000663757324, + 2.1301209926605225e-05 + ] + }, + { + "children": [ + 44 + ], + "name": "Armature_mixamorig:RightHandIndex3", + "rotation": [ + -0.14387890696525574, + 7.74066961639619e-08, + 1.5951893317378563e-07, + 0.9895954132080078 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 0.01506185531616211, + 2.0928609371185303, + 1.971423625946045e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandIndex4", + "rotation": [ + -2.57976381590197e-07, + -8.847565879932517e-08, + -1.480803035747158e-07, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.04495549201965332, + 1.9040567874908447, + -1.9669532775878906e-05 + ] + }, + { + "children": [ + 46 + ], + "name": "Armature_mixamorig:RightHandMiddle1", + "rotation": [ + 0.06535934656858444, + -0.0012092242250218987, + -0.018458466976881027, + 0.9976903200149536 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.6151741147041321, + 5.987786293029785, + -0.2521481215953827 + ] + }, + { + "children": [ + 47 + ], + "name": "Armature_mixamorig:RightHandMiddle2", + "rotation": [ + -0.02911515347659588, + -1.493660128915053e-08, + 1.2578189512169047e-07, + 0.9995761513710022 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 0.025691747665405273, + 2.3235480785369873, + 5.8710575103759766e-06 + ] + }, + { + "children": [ + 48 + ], + "name": "Armature_mixamorig:RightHandMiddle3", + "rotation": [ + -0.12079086899757385, + 3.73517679008728e-08, + 3.685922251861484e-07, + 0.9926779866218567 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999998211860657 + ], + "translation": [ + 0.011220812797546387, + 2.2008121013641357, + 2.9072165489196777e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandMiddle4", + "rotation": [ + 2.531742211431265e-07, + -1.9557775843281888e-08, + 2.561137080192566e-09, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "translation": [ + -0.036910414695739746, + 2.00234055519104, + 2.60770320892334e-06 + ] + }, + { + "children": [ + 50 + ], + "name": "Armature_mixamorig:RightHandRing1", + "rotation": [ + 0.08960019052028656, + 0.007558114361017942, + 0.0837147906422615, + 0.9924246072769165 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.8287993669509888, + 5.778010845184326, + -0.2080925703048706 + ] + }, + { + "children": [ + 51 + ], + "name": "Armature_mixamorig:RightHandRing2", + "rotation": [ + 0.02305533178150654, + -1.0247272363983484e-08, + -2.6083968762691256e-08, + 0.9997342824935913 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 0.008643150329589844, + 2.2196152210235596, + -9.953975677490234e-06 + ] + }, + { + "children": [ + 52 + ], + "name": "Armature_mixamorig:RightHandRing3", + "rotation": [ + -0.12460635602474213, + 6.288876619464645e-08, + 3.815565037257329e-07, + 0.992206335067749 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.016327381134033203, + 2.091179847717285, + 4.410743713378906e-06 + ] + }, + { + "name": "Armature_mixamorig:RightHandRing4", + "rotation": [ + -8.42846930027008e-08, + -6.05359673500061e-08, + -6.356277282293377e-08, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 1.0 + ], + "translation": [ + -0.02497267723083496, + 1.9166507720947266, + -1.8537044525146484e-05 + ] + }, + { + "children": [ + 54 + ], + "name": "Armature_mixamorig:RightHandPinky1", + "rotation": [ + 0.1575794368982315, + 0.028793327510356903, + 0.17742541432380676, + 0.9710097312927246 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -2.075824737548828, + 5.181243896484375, + -0.156680166721344 + ] + }, + { + "children": [ + 55 + ], + "name": "Armature_mixamorig:RightHandPinky2", + "rotation": [ + -0.021833697333931923, + -8.849674060229518e-08, + -3.185882917478011e-07, + 0.9997616410255432 + ], + "scale": [ + 1.0, + 0.9999998211860657, + 0.9999999403953552 + ], + "translation": [ + 0.009781837463378906, + 1.9066412448883057, + 3.445148468017578e-05 + ] + }, + { + "children": [ + 56 + ], + "name": "Armature_mixamorig:RightHandPinky3", + "rotation": [ + -0.0985320433974266, + -1.1792045739866808e-07, + -2.5736605735460216e-08, + 0.9951338768005371 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + 0.004714488983154297, + 1.55594801902771, + 1.9788742065429688e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandPinky4", + "rotation": [ + 1.695007227908718e-07, + -6.053597445543346e-08, + 1.6530977475781583e-08, + 1.0 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -0.014493942260742188, + 1.4579054117202759, + -3.3020973205566406e-05 + ] + }, + { + "children": [ + 58 + ], + "name": "Armature_mixamorig:LeftUpLeg", + "rotation": [ + -8.872594662534539e-06, + 0.0009148783865384758, + 0.9998617172241211, + 0.016607170924544334 + ], + "scale": [ + 1.0001250505447388, + 1.0, + 1.000000238418579 + ], + "translation": [ + 6.5092010498046875, + -3.8089065551757812, + -0.3193536400794983 + ] + }, + { + "children": [ + 59 + ], + "name": "Armature_mixamorig:LeftLeg", + "rotation": [ + -0.019678570330142975, + -0.00024797735386528075, + 0.012827177532017231, + 0.9997241497039795 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 4.90503225591965e-07, + 45.04969024658203, + -3.3028754842234775e-08 + ] + }, + { + "children": [ + 60 + ], + "name": "Armature_mixamorig:LeftFoot", + "rotation": [ + 0.4820258617401123, + 0.06575184315443039, + -0.03629865497350693, + 0.872931957244873 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "translation": [ + -3.387158358236775e-07, + 41.849327087402344, + -3.457535058259964e-08 + ] + }, + { + "children": [ + 61 + ], + "name": "Armature_mixamorig:LeftToeBase", + "rotation": [ + 0.29159197211265564, + -0.06168047711253166, + 0.01884075440466404, + 0.9543660879135132 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 8.810311555862427e-07, + 12.08905029296875, + -3.889203071594238e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftToe_End", + "rotation": [ + 9.872019290924072e-08, + 8.056988008320332e-06, + -1.909211277961731e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -3.5762786865234375e-07, + 4.706444263458252, + 5.960464477539063e-08 + ] + }, + { + "children": [ + 63 + ], + "name": "Armature_mixamorig:RightUpLeg", + "rotation": [ + -2.94413257506676e-06, + -0.0034815834369510412, + -0.9998561143875122, + 0.01660647802054882 + ], + "scale": [ + 1.000124216079712, + 1.0, + 1.0000035762786865 + ], + "translation": [ + -6.5092010498046875, + -3.8089065551757812, + -0.4497392773628235 + ] + }, + { + "children": [ + 64 + ], + "name": "Armature_mixamorig:RightLeg", + "rotation": [ + -0.022010719403624535, + 0.00022552665905095637, + -0.012826679274439812, + 0.999675452709198 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 1.0 + ], + "translation": [ + 4.079265636391938e-08, + 45.050357818603516, + -1.5308614820241928e-08 + ] + }, + { + "children": [ + 65 + ], + "name": "Armature_mixamorig:RightFoot", + "rotation": [ + 0.48082953691482544, + -0.06620366871356964, + 0.03643133118748665, + 0.8735518455505371 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.000000238418579 + ], + "translation": [ + -9.810537449084222e-08, + 41.85009765625, + 4.062894731760025e-08 + ] + }, + { + "children": [ + 66 + ], + "name": "Armature_mixamorig:RightToeBase", + "rotation": [ + 0.29314252734184265, + 0.06225594878196716, + -0.01912800408899784, + 0.9538480043411255 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "translation": [ + -6.51925802230835e-08, + 12.033415794372559, + 3.4570693969726562e-06 + ] + }, + { + "name": "Armature_mixamorig:RightToe_End", + "rotation": [ + -3.748573362827301e-08, + -8.230912499129772e-06, + -2.9453076422214508e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 1.043081283569336e-07, + 4.712545394897461, + 3.2782554626464844e-07 + ] + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987, + "name": "saber-pure-body.png", + "wrapS": 10497, + "wrapT": 10497 + }, + { + "magFilter": 9728, + "minFilter": 9728 + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 0 + ] + } + ], + "skins": [ + { + "inverseBindMatrices": 30, + "joints": [ + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 17, + 18, + 19, + 21, + 22, + 23, + 25, + 26, + 27, + 29, + 30, + 31, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 41, + 42, + 43, + 45, + 46, + 47, + 49, + 50, + 51, + 53, + 54, + 55, + 57, + 58, + 59, + 60, + 62, + 63, + 64, + 65 + ], + "name": "F010_Saber_Body", + "skeleton": 2 + }, + { + "inverseBindMatrices": 626, + "joints": [ + 5, + 6, + 7 + ], + "name": "F010_Saber_Face", + "skeleton": 2 + }, + { + "joints": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66 + ], + "name": "full", + "skeleton": 2 + } + ], + "textures": [ + { + "name": "saber-pure-body.png", + "sampler": 0, + "source": 0 + }, + { + "sampler" : 1, + "source" : 1 + } + ] +} diff --git a/models/gltf/saber-mixamo-body-no-face/saber-pure-body.png b/models/gltf/saber-mixamo-body-no-face/saber-pure-body.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f5e42ab3678f94ee774738ab0f3508a8d0918e Binary files /dev/null and b/models/gltf/saber-mixamo-body-no-face/saber-pure-body.png differ diff --git a/models/gltf/saber-stand-pose/body_id.png b/models/gltf/saber-stand-pose/body_id.png new file mode 100644 index 0000000000000000000000000000000000000000..41cad61355767fd2960f91516a35bab6ed96c33d Binary files /dev/null and b/models/gltf/saber-stand-pose/body_id.png differ diff --git a/models/gltf/saber-stand-pose/buffer_combined.bin b/models/gltf/saber-stand-pose/buffer_combined.bin new file mode 100644 index 0000000000000000000000000000000000000000..c5611fd7d9b5b28b77b7bcf5e9de220f05d7fb1f --- /dev/null +++ b/models/gltf/saber-stand-pose/buffer_combined.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72a9d7d46663d9016bd07b33c7b29d53826108d0a0fb4fad7bcc65c4b1992c38 +size 390784 diff --git a/models/gltf/saber-stand-pose/saber-pure-body.png b/models/gltf/saber-stand-pose/saber-pure-body.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f5e42ab3678f94ee774738ab0f3508a8d0918e Binary files /dev/null and b/models/gltf/saber-stand-pose/saber-pure-body.png differ diff --git a/models/gltf/saber-stand-pose/saber-stand-pose.gltf b/models/gltf/saber-stand-pose/saber-stand-pose.gltf new file mode 100644 index 0000000000000000000000000000000000000000..dc4705c4ba4322c71b36d8e0795bd4222b6d4d46 --- /dev/null +++ b/models/gltf/saber-stand-pose/saber-stand-pose.gltf @@ -0,0 +1,9693 @@ +{ + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "type": "skeleton", + "skins": { + "main": 2 + }, + "nodes": { + "head": 8, + "head-end": 9 + } + } + }, + "accessors": [ + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999997615814209, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999997615814209, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 12, + "componentType": 5126, + "count": 3340, + "max": [ + 0.9999616742134094, + 0.9999489784240723, + 0.999893069267273 + ], + "min": [ + -0.9999616742134094, + -0.9999061226844788, + -0.9999434351921082 + ], + "name": "accessor_buffer_F010_Saber.003_1", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -7.683411951120434e-08, + -6.379559636116028e-08, + -6.495974957942963e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 204, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 185, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.2474209866204546e-08, + 0, + 1.1175870895385742e-08, + 1.0 + ], + "min": [ + 5.2474209866204546e-08, + -6.693881005048752e-09, + 1.1175870895385742e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421491086483002, + 1.9935276508331299, + 0 + ], + "min": [ + 0.08421491086483002, + 1.9935276508331299, + -1.4662742614746094e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.000000238418579, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.000000238418579, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHand_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9955630898475647 + ], + "min": [ + -0.04229239746928215, + -0.012712083756923676, + -0.08309076726436615, + 0.9955630898475647 + ], + "name": "accessor_buffer_mixamorig:Spine_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 205, + "byteOffset": 0, + "componentType": 5126, + "count": 52, + "max": [ + 1.0011157989501953, + 1.0004726648330688, + 0.37282806634902954, + 0, + 0.17913757264614105, + 1.0011159181594849, + 0.9939067363739014, + 0, + 0.9973942041397095, + 0.997998058795929, + 1.0011157989501953, + 0, + 36.08419418334961, + 95.18425750732422, + 139.18643188476562, + 1.0 + ], + "min": [ + -1.0009628534317017, + -1.000463843345642, + -0.3957003951072693, + 0.0, + -0.16209860146045685, + -1.0005624294281006, + -0.9972899556159973, + 0.0, + -0.9975388050079346, + -0.3510676324367523, + -0.18741650879383087, + 0.0, + -40.01988983154297, + -137.4109344482422, + -8.502774238586426, + 1.0 + ], + "name": "accessor_buffer_IBM_F010_Saber_Body_skin_0", + "type": "MAT4" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.009372010064908e-08, + 8.05803392722737e-06, + 0, + 1.0 + ], + "min": [ + 8.009372010064908e-08, + 8.05803392722737e-06, + -2.0721923732480718e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.706444263458252, + 7.450580596923828e-08 + ], + "min": [ + -1.4901161193847656e-08, + 4.706444263458252, + 7.450580596923828e-08 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 173, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -2.4214385163645602e-08, + -1.8440185556301003e-07, + -1.564621925354004e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0023135317023843527, + 0, + 0.01988971047103405, + 0.9997969269752502 + ], + "min": [ + 0.0023135317023843527, + -0.002278696047142148, + 0.01988971047103405, + 0.9997969269752502 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.11862916499376297, + 0, + 0.10900042951107025, + 0.9868879914283752 + ], + "min": [ + 0.11862916499376297, + -0.009906747378408909, + 0.10900042951107025, + 0.9868879914283752 + ], + "name": "accessor_buffer_mixamorig:RightFoot_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1800551414489746, + 0 + ], + "min": [ + -0.01788640022277832, + 2.1800551414489746, + -1.3709068298339844e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.874301910400391e-06, + 20.857250213623047, + 0.5804516077041626 + ], + "min": [ + 3.874301910400391e-06, + 20.857250213623047, + 0.5804516077041626 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 187, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.470348358154297e-07, + 4.7125468254089355, + 0 + ], + "min": [ + 4.470348358154297e-07, + 4.7125468254089355, + -3.2223761081695557e-07 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 166, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521671295166, + 8.987075805664062, + 0 + ], + "min": [ + 3.513521671295166, + 8.987075805664062, + -0.09783673286437988 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00334930419921875, + 1.9062483310699463, + 0 + ], + "min": [ + 0.00334930419921875, + 1.9062483310699463, + -2.1457672119140625e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.535193920135498, + 5.602836608886719e-06 + ], + "min": [ + -0.18290114402770996, + 1.535193920135498, + 5.602836608886719e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.960464477539063e-08, + 12.089048385620117, + 0 + ], + "min": [ + 5.960464477539063e-08, + 12.089048385620117, + -3.0994415283203125e-06 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -1.3387762010097504e-07, + -1.294538236606968e-07, + -1.30385160446167e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_StandPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.023999802768230438, + 0.024741610512137413, + 0.9972760081291199 + ], + "min": [ + -0.06521116197109222, + 0.023999802768230438, + 0.024741610512137413, + 0.9972760081291199 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9166375398635864, + 0 + ], + "min": [ + -0.024967104196548462, + 1.9166375398635864, + -4.503875970840454e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 179, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.3860045075416565, + 0, + 0, + 0.6795456409454346 + ], + "min": [ + 0.3860045075416565, + -0.5462846755981445, + -0.30131596326828003, + 0.6795456409454346 + ], + "name": "accessor_buffer_mixamorig:RightArm_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.890507698059082, + 5.982392311096191, + 0 + ], + "min": [ + 0.890507698059082, + 5.982392311096191, + -0.24304690957069397 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999998807907104 + ], + "min": [ + 1.0, + 1.0, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869170188903809, + 2.222598075866699, + 1.7881393432617188e-05 + ], + "min": [ + 0.09869170188903809, + 2.222598075866699, + 1.7881393432617188e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.33544424176216125, + 0.06004149094223976, + 0.08555153012275696, + 0.9362441897392273 + ], + "min": [ + 0.33544424176216125, + 0.06004149094223976, + 0.08555153012275696, + 0.9362441897392273 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 0.9999998807907104 + ], + "min": [ + 1.0, + 0.9999999403953552, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.770896911621094, + 0 + ], + "min": [ + -2.5033950805664062e-06, + 22.770896911621094, + -1.5497207641601562e-06 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 193, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.778000831604004, + 0 + ], + "min": [ + -0.8287971019744873, + 5.778000831604004, + -0.20809143781661987 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.23361559212207794, + 0, + 0, + 0.9555493593215942 + ], + "min": [ + 0.23361559212207794, + -0.038398608565330505, + -0.1757122427225113, + 0.9555493593215942 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.9338507652282715, + 0 + ], + "min": [ + -0.6209769248962402, + 5.9338507652282715, + -0.18956023454666138 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9782490730285645, + 0 + ], + "min": [ + -0.004049777984619141, + 1.9782490730285645, + -4.219263792037964e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 0.9999998807907104 + ], + "min": [ + 0.9999998807907104, + 1.0, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 203, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.011158615350723267, + 0.00011168384662596509, + 0, + 0.999936580657959 + ], + "min": [ + 0.011158615350723267, + 0.00011168384662596509, + -0.0015345790889114141, + 0.999936580657959 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.445891797542572, + 0.5477845668792725, + 0.3333956003189087, + 0.6244678497314453 + ], + "min": [ + 0.445891797542572, + 0.5477845668792725, + 0.3333956003189087, + 0.6244678497314453 + ], + "name": "accessor_buffer_mixamorig:LeftArm_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 192, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 1.0, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.007720754016190767, + 0.04835978522896767, + 0.99878990650177 + ], + "min": [ + -0.0045347660779953, + 0.007720754016190767, + 0.04835978522896767, + 0.99878990650177 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5249905586242676, + 2.446584403514862e-06 + ], + "min": [ + -0.0062285661697387695, + 1.5249905586242676, + 2.446584403514862e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5123, + "count": 5004, + "max": [ + 1175 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.001_4", + "type": "SCALAR" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.5762786865234375e-07, + 41.85009002685547, + 0 + ], + "min": [ + 3.5762786865234375e-07, + 41.85009002685547, + -1.7881393432617188e-07 + ], + "name": "accessor_buffer_mixamorig:RightFoot_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 12, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9913477301597595, + 0.9988032579421997, + 0.9995606541633606 + ], + "min": [ + -0.9913485050201416, + -0.9999690651893616, + -0.9874789118766785 + ], + "name": "accessor_buffer_F010_Saber.001_1", + "type": "VEC3" + }, + { + "bufferView": 183, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 0.9999998807907104 + ], + "min": [ + 1.0, + 0.9999999403953552, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 100.59270477294922, + 0.07877415418624878 + ], + "min": [ + -0.5354928970336914, + 100.59270477294922, + 0.07877415418624878 + ], + "name": "accessor_buffer_mixamorig:Hips_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001275539398193, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0001275539398193, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9998988509178162 + ], + "min": [ + -0.01309253741055727, + -0.00130636862013489, + -0.005397016182541847, + 0.9998988509178162 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.7601996660232544e-07, + 0, + 3.166496753692627e-08, + 1.0 + ], + "min": [ + 1.7601996660232544e-07, + -5.960464477539063e-08, + 3.166496753692627e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:Hips_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.470348358154297e-08, + 6.854506015777588, + 0 + ], + "min": [ + 4.470348358154297e-08, + 6.854506015777588, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0029331406112760305, + 0, + 0, + 0.9999359250068665 + ], + "min": [ + 0.0029331406112760305, + -0.0019084879895672202, + -0.010766708292067051, + 0.9999359250068665 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.000117301940918, + 1.0000077486038208, + 1.0000001192092896 + ], + "min": [ + 1.000117301940918, + 1.0000077486038208, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.06037864461541176, + 0.9649360179901123 + ], + "min": [ + -0.003858969546854496, + -0.2554173171520233, + 0.06037864461541176, + 0.9649360179901123 + ], + "name": "accessor_buffer_mixamorig:Head_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.8312206268310547e-06, + 19.023344039916992, + 0 + ], + "min": [ + 2.8312206268310547e-06, + 19.023344039916992, + -1.4603137969970703e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHand_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015056610107421875, + 2.0928592681884766, + 1.9550323486328125e-05 + ], + "min": [ + 0.015056610107421875, + 2.0928592681884766, + 1.9550323486328125e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.022089609876275063, + 0.9928248524665833 + ], + "min": [ + -0.11739522963762283, + -0.005425058770924807, + 0.022089609876275063, + 0.9928248524665833 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9944446682929993 + ], + "min": [ + -0.05767667666077614, + -0.02014157362282276, + -0.0857178345322609, + 0.9944446682929993 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009777307510375977, + 1.9066495895385742, + 1.7259269952774048e-05 + ], + "min": [ + 0.009777307510375977, + 1.9066495895385742, + 1.7259269952774048e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.011218547821044922, + 2.2008183002471924, + 1.7702579498291016e-05 + ], + "min": [ + 0.011218547821044922, + 2.2008183002471924, + 1.7702579498291016e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.43302980065345764, + 0.060352127999067307, + 0.8952707052230835 + ], + "min": [ + -0.08563514798879623, + 0.43302980065345764, + 0.060352127999067307, + 0.8952707052230835 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.151768922805786, + 0 + ], + "min": [ + -0.018155336380004883, + 2.151768922805786, + -1.8805265426635742e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 1.0000001192092896, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 169, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.7723331451416, + 0 + ], + "min": [ + -4.410743713378906e-06, + 22.7723331451416, + -3.337860107421875e-06 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 201, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 0.9999998211860657 + ], + "min": [ + 0.9999999403953552, + 1.0, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "min": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Head_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.509200572967529, + 0, + 0 + ], + "min": [ + 6.509200572967529, + -3.808896780014038, + -0.31935346126556396 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.033411979675293, + 7.703900337219238e-06 + ], + "min": [ + -8.046627044677734e-07, + 12.033411979675293, + 7.703900337219238e-06 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 32, + "componentType": 5126, + "count": 1176, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_F010_Saber.001_3", + "type": "VEC3" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_Character_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2484705448150635, + 0 + ], + "min": [ + -0.010962486267089844, + 2.2484705448150635, + -2.2351741790771484e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289440870285034, + 5.801686763763428, + 0.05065116286277771 + ], + "min": [ + 2.289440870285034, + 5.801686763763428, + 0.05065116286277771 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 32, + "componentType": 5126, + "count": 3340, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_F010_Saber.003_3", + "type": "VEC3" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:Spine_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.4578994512557983, + 8.64267349243164e-06 + ], + "min": [ + -0.014496088027954102, + 1.4578994512557983, + 8.64267349243164e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8726470470428467, + 1.3422534465789795 + ], + "min": [ + -1.3880501985549927, + 1.8726470470428467, + 1.3422534465789795 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8280726671218872, + 0 + ], + "min": [ + -0.006534457206726074, + 1.8280726671218872, + -2.2076070308685303e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 8.022483825683594, + 2.4586915969848633e-07 + ], + "min": [ + -2.086162567138672e-07, + 8.022483825683594, + 2.4586915969848633e-07 + ], + "name": "accessor_buffer_mixamorig:Spine1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.17236490547657013, + 0, + 0, + 0.9812019467353821 + ], + "min": [ + 0.17236490547657013, + -0.012992478907108307, + -0.08581555634737015, + 0.9812019467353821 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:Neck_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 168, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.7367445230484009, + 0, + 0.4499008059501648, + 0.24924233555793762 + ], + "min": [ + 0.7367445230484009, + -0.4389476180076599, + 0.4499008059501648, + 0.24924233555793762 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0132789611816406e-06, + 7.483722686767578, + 2.384185791015625e-07 + ], + "min": [ + 1.0132789611816406e-06, + 7.483722686767578, + 2.384185791015625e-07 + ], + "name": "accessor_buffer_mixamorig:LeftArm_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 175, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02568674087524414, + 2.3235573768615723, + 4.947185516357422e-06 + ], + "min": [ + 0.02568674087524414, + 2.3235573768615723, + 4.947185516357422e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -2.3446042973773729e-07, + -8.847564458847046e-08, + -1.3969838619232178e-07, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.6151762008666992, + 5.987779140472412, + 0 + ], + "min": [ + 0.6151762008666992, + 5.987779140472412, + -0.25214096903800964 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 16, + "componentType": 5126, + "count": 1176, + "max": [ + 1.0, + 0.21810737252235413, + 0.0008118848782032728, + 0 + ], + "min": [ + 0.7810807824134827, + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_F010_Saber.001_skin_1", + "type": "VEC4" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.1123294830322266, + 5.1514129638671875, + 0 + ], + "min": [ + 2.1123294830322266, + 5.1514129638671875, + -0.10165001451969147 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 24, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9074609279632568, + 0.9870719909667969 + ], + "min": [ + 0.0168008916079998, + 0.018634021282196045 + ], + "name": "accessor_buffer_F010_Saber.001_2", + "type": "VEC2" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999998807907104, + 1.0 + ], + "min": [ + 1.0, + 0.9999998807907104, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5121, + "count": 1176, + "max": [ + 2, + 1, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.001_skin_0", + "type": "VEC4" + }, + { + "bufferView": 184, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01275944709777832, + 1.3817925453186035, + 0 + ], + "min": [ + 0.01275944709777832, + 1.3817925453186035, + -7.009599357843399e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.08950763195753098, + 0, + 0.9837349057197571 + ], + "min": [ + -0.15563872456550598, + 0.08950763195753098, + -0.005533887539058924, + 0.9837349057197571 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:Spine2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.181236743927002, + 0 + ], + "min": [ + -2.0758252143859863, + 5.181236743927002, + -0.1566818505525589 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 172, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.006499767303466797, + 1.6352322101593018, + 1.0728836059570312e-06 + ], + "min": [ + 0.006499767303466797, + 1.6352322101593018, + 1.0728836059570312e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5489668846130371, + 0, + 0.009858776815235615, + 0.8354716300964355 + ], + "min": [ + 0.5489668846130371, + -0.022921225056052208, + 0.009858776815235615, + 0.8354716300964355 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 195, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.002559185028076, + 0 + ], + "min": [ + -0.009859561920166016, + 2.002559185028076, + -2.9802322387695312e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999997615814209, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.031758811324834824, + 0.034727565944194794, + 0, + 0.9914401173591614 + ], + "min": [ + 0.031758811324834824, + 0.034727565944194794, + -0.12178684026002884, + 0.9914401173591614 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 24, + "componentType": 5126, + "count": 3340, + "max": [ + 0.9826270341873169, + 0.9952785298228264 + ], + "min": [ + 0.004950257949531078, + 0.007562220096588135 + ], + "name": "accessor_buffer_F010_Saber.003_2", + "type": "VEC2" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.3562554121017456, + 0.05348851531744003, + 0, + 0.9326991438865662 + ], + "min": [ + 0.3562554121017456, + 0.05348851531744003, + -0.017129110172390938, + 0.9326991438865662 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999999403953552, + 0.9999998807907104 + ], + "min": [ + 1.0000001192092896, + 0.9999999403953552, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 167, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.6251413226127625, + 0.5896649360656738, + 0, + 0.28389137983322144 + ], + "min": [ + 0.6251413226127625, + 0.5896649360656738, + -0.42532265186309814, + 0.28389137983322144 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.9900268316268921, + 0.13418997824192047 + ], + "min": [ + -0.042684633284807205, + -0.0042261360213160515, + 0.9900268316268921, + 0.13418997824192047 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 181, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.029507160186767578, + 2.085662364959717, + 3.4570693969726562e-06 + ], + "min": [ + 0.029507160186767578, + 2.085662364959717, + 3.4570693969726562e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.016574677079916, + 0, + 0, + 0.9998615384101868 + ], + "min": [ + 0.016574677079916, + -0.00012758278171531856, + -0.0014876582426950336, + 0.9998615384101868 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999791979789734 + ], + "min": [ + -0.006280909758061171, + -0.00010060171189252287, + -0.0014849783619865775, + 0.9999791979789734 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.473825588822365e-07, + 0, + 1.862645149230957e-09, + 1.0 + ], + "min": [ + 2.473825588822365e-07, + -1.6530975699424744e-08, + 1.862645149230957e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 202, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2824928760528564, + 0 + ], + "min": [ + -0.01855182647705078, + 2.2824928760528564, + -1.7464160919189453e-05 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.002349376678467, + 0 + ], + "min": [ + -0.036908626556396484, + 2.002349376678467, + -5.584210157394409e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.05844174697995186, + 0.0010015094885602593, + 0.010910611599683762, + 0.9982306957244873 + ], + "min": [ + 0.05844174697995186, + 0.0010015094885602593, + 0.010910611599683762, + 0.9982306957244873 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.029896020889282227, + 2.250403881072998, + 2.2351741790771484e-06 + ], + "min": [ + 0.029896020889282227, + 2.250403881072998, + 2.2351741790771484e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9942184090614319 + ], + "min": [ + -0.009276462718844414, + -0.01345310639590025, + -0.10612602531909943, + 0.9942184090614319 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.60770320892334e-07, + 9.168571472167969, + 0 + ], + "min": [ + 2.60770320892334e-07, + 9.168571472167969, + -4.279427230358124e-06 + ], + "name": "accessor_buffer_mixamorig:Spine2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9453137516975403 + ], + "min": [ + -0.1275932788848877, + -0.2732340097427368, + -0.12427811324596405, + 0.9453137516975403 + ], + "name": "accessor_buffer_mixamorig:LeftHand_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.12967029213905334, + 0.1232340857386589, + 0.21974103152751923, + 0.9590166211128235 + ], + "min": [ + 0.12967029213905334, + 0.1232340857386589, + 0.21974103152751923, + 0.9590166211128235 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.980232238769531e-07, + 4.30869722366333, + 0.11991274356842041 + ], + "min": [ + 2.980232238769531e-07, + 4.30869722366333, + 0.11991274356842041 + ], + "name": "accessor_buffer_mixamorig:Head_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2516975402832031e-06, + 19.027145385742188, + 3.2186508178710938e-06 + ], + "min": [ + 1.2516975402832031e-06, + 19.027145385742188, + 3.2186508178710938e-06 + ], + "name": "accessor_buffer_mixamorig:RightHand_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 1.0, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 164, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.6866067051887512 + ], + "min": [ + -0.2655738294124603, + -0.630494236946106, + -0.24600598216056824, + 0.6866067051887512 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 194, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.028195995837450027, + 0.012115469202399254, + 0.18897251784801483, + 0.9815027713775635 + ], + "min": [ + 0.028195995837450027, + 0.012115469202399254, + 0.18897251784801483, + 0.9815027713775635 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.091197967529297, + 0.09324419498443604 + ], + "min": [ + -2.381840944290161, + 6.091197967529297, + 0.09324419498443604 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08350761234760284, + 0.00025150523288175464, + 0, + 0.9964479804039001 + ], + "min": [ + 0.08350761234760284, + 0.00025150523288175464, + -0.010855857282876968, + 0.9964479804039001 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 174, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.1252118945121765, + 0, + 0.039776429533958435, + 0.991308867931366 + ], + "min": [ + 0.1252118945121765, + -0.006825051736086607, + 0.039776429533958435, + 0.991308867931366 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.004716396331787109, + 1.5559489727020264, + 1.634657382965088e-05 + ], + "min": [ + 0.004716396331787109, + 1.5559489727020264, + 1.634657382965088e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 41.84933090209961, + 1.1920928955078125e-07 + ], + "min": [ + -2.384185791015625e-07, + 41.84933090209961, + 1.1920928955078125e-07 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21364502608776093, + 0.6414198875427246, + 0, + 0.7329153418540955 + ], + "min": [ + 0.21364502608776093, + 0.6414198875427246, + -0.07596980780363083, + 0.7329153418540955 + ], + "name": "accessor_buffer_mixamorig:RightHand_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 9.313223525708736e-10, + 0, + 4.656612873077393e-10, + 1.0 + ], + "min": [ + 9.313223525708736e-10, + -6.9849201977945086e-09, + 4.656612873077393e-10, + 1.0 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.027168013155460358, + 0, + 0.0248433668166399, + 0.9659765958786011 + ], + "min": [ + 0.027168013155460358, + -0.2559962570667267, + 0.0248433668166399, + 0.9659765958786011 + ], + "name": "accessor_buffer_mixamorig:Neck_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5123, + "count": 14376, + "max": [ + 3339 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.003_4", + "type": "SCALAR" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.000958565971814096, + 0, + 0.9999093413352966 + ], + "min": [ + -0.00485301623120904, + 0.000958565971814096, + -0.012532252818346024, + 0.9999093413352966 + ], + "name": "accessor_buffer_mixamorig:Spine1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 191, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008361834101378918, + 0, + 0, + 0.9942134022712708 + ], + "min": [ + 0.008361834101378918, + -0.012613668106496334, + -0.10635195672512054, + 0.9942134022712708 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 176, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.058169297873973846, + 0.014287803322076797, + 0.030345715582370758, + 0.9977431297302246 + ], + "min": [ + 0.058169297873973846, + 0.014287803322076797, + 0.030345715582370758, + 0.9977431297302246 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03584354370832443, + 0, + 0, + 0.999342679977417 + ], + "min": [ + 0.03584354370832443, + -3.864036261802539e-05, + -0.00542936846613884, + 0.999342679977417 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07640352100133896, + 0.0164929311722517, + 0.013180557638406754, + 0.9968534708023071 + ], + "min": [ + 0.07640352100133896, + 0.0164929311722517, + 0.013180557638406754, + 0.9968534708023071 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.049686431884766, + 8.940696716308594e-08 + ], + "min": [ + -2.980232238769531e-07, + 45.049686431884766, + 8.940696716308594e-08 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "min": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 199, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948871374130249, + 1.373744249343872 + ], + "min": [ + 1.4313478469848633, + 1.948871374130249, + 1.373744249343872 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9798688888549805 + ], + "min": [ + -0.19954150915145874, + -0.0002482635900378227, + -0.006335121113806963, + 0.9798688888549805 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 190, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07794666290283203, + 2.109323263168335, + 0 + ], + "min": [ + 0.07794666290283203, + 2.109323263168335, + -3.039836883544922e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 182, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.2154067731180476e-08, + 0, + 1.0 + ], + "min": [ + -3.946480120475826e-08, + 5.2154067731180476e-08, + -2.86672685589906e-09, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008641242980957031, + 2.2196125984191895, + 1.0132789611816406e-06 + ], + "min": [ + 0.008641242980957031, + 2.2196125984191895, + 1.0132789611816406e-06 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.010021046735346317, + 0.6779959797859192, + 0.0857105553150177, + 0.7299826741218567 + ], + "min": [ + 0.010021046735346317, + 0.6779959797859192, + 0.0857105553150177, + 0.7299826741218567 + ], + "name": "accessor_buffer_mixamorig:Hips_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.17040301859378815, + 0.042156320065259933, + 0.33821991086006165, + 0.9245501756668091 + ], + "min": [ + 0.17040301859378815, + 0.042156320065259933, + 0.33821991086006165, + 0.9245501756668091 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9040591716766357, + 0 + ], + "min": [ + -0.04496002197265625, + 1.9040591716766357, + -1.2211501598358154e-05 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 165, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "min": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 170, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.2740827798843384, + 0.4902119040489197, + 0.822180449962616 + ], + "min": [ + -0.0926835685968399, + 0.2740827798843384, + 0.4902119040489197, + 0.822180449962616 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09324588626623154, + 0.25413286685943604, + 0.9626567959785461, + 0 + ], + "min": [ + 0.09324588626623154, + 0.25413286685943604, + 0.9626567959785461, + -0.003700426546856761 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 206, + "byteOffset": 0, + "componentType": 5126, + "count": 3, + "max": [ + 1.0011157989501953, + 4.722245511290524e-11, + 1.886907947598604e-12, + 0, + 3.766052140280474e-12, + 1.0011159181594849, + 0.07986891269683838, + 0, + 1.8865089611991293e-12, + 0, + 1.0011157989501953, + 0, + 0, + 0, + 2.1228513717651367, + 1.0 + ], + "min": [ + 1.0011157989501953, + -3.766054742365688e-12, + 2.0371814713867806e-16, + 0.0, + -4.722247592958695e-11, + 0.9979248046875, + 1.5544334530659398e-07, + 0.0, + -2.0430401600549222e-16, + -0.07986891269683838, + 0.9979247450828552, + 0.0, + -0.007442474830895662, + -137.4109344482422, + -8.502774238586426, + 1.0 + ], + "name": "accessor_buffer_IBM_F010_Saber_Face_skin_0", + "type": "MAT4" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0163266658782959, + 2.091181755065918, + 0 + ], + "min": [ + 0.0163266658782959, + 2.091181755065918, + -6.631016731262207e-07 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 198, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.000000238418579, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 177, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 196, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8846020698547363, + 6.258487701416016e-06 + ], + "min": [ + -0.05978739261627197, + 1.8846020698547363, + 6.258487701416016e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.509200572967529, + -3.808901071548462, + -0.4497387707233429 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 178, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.3709068298339844e-06, + 7.483715534210205, + 8.225440979003906e-06 + ], + "min": [ + 1.3709068298339844e-06, + 7.483715534210205, + 8.225440979003906e-06 + ], + "name": "accessor_buffer_mixamorig:RightArm_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:Spine1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.05435940623283386, + 0.004004946909844875, + 0.06862703710794449, + 0.9961522817611694 + ], + "min": [ + 0.05435940623283386, + 0.004004946909844875, + 0.06862703710794449, + 0.9961522817611694 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 1.0, + 1.0 + ], + "min": [ + 0.9999998211860657, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.1222748709278676e-08, + 0, + 2.374872920540838e-08, + 1.0 + ], + "min": [ + 5.1222748709278676e-08, + -1.0244548320770264e-08, + 2.374872920540838e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 180, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "min": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1.0 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 200, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.11761661618947983, + 0, + 0, + 0.900482714176178 + ], + "min": [ + 0.11761661618947983, + -0.07650640606880188, + -0.41163578629493713, + 0.900482714176178 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 3340, + "max": [ + 64.78005981445312, + 158.17137145996094, + 13.949725151062012 + ], + "min": [ + -64.76519775390625, + 0.9852595329284668, + -11.520842552185059 + ], + "name": "accessor_buffer_F010_Saber.003_0", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 197, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.377215390150013e-08, + 0, + 0, + 1.0 + ], + "min": [ + 4.377215390150013e-08, + -1.9185242194907914e-07, + -9.26665819633854e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.021942138671875, + 1.7619147300720215, + 6.273388862609863e-06 + ], + "min": [ + 0.021942138671875, + 1.7619147300720215, + 6.273388862609863e-06 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 171, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.5762786865234375e-07, + 10.314629554748535, + 8.195638656616211e-07 + ], + "min": [ + 3.5762786865234375e-07, + 10.314629554748535, + 8.195638656616211e-07 + ], + "name": "accessor_buffer_mixamorig:Neck_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + 1.0, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 7.576313018798828, + 154.56195068359375, + 7.6111836433410645 + ], + "min": [ + -7.576391220092773, + 136.62216186523438, + -2.516939640045166 + ], + "name": "accessor_buffer_F010_Saber.001_0", + "type": "VEC3" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 8.988415718078613, + 0 + ], + "min": [ + -3.513521671295166, + 8.988415718078613, + -0.1145542562007904 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "min": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "name": "accessor_buffer_mixamorig:LeftArm_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.008150998502969742, + 0.6793254613876343 + ], + "min": [ + -0.733644425868988, + -0.014712016098201275, + 0.008150998502969742, + 0.6793254613876343 + ], + "name": "accessor_buffer_mixamorig:RightLeg_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00094512541545555, + 0, + 0.9999086856842041 + ], + "min": [ + -0.005003147292882204, + 0.00094512541545555, + -0.012520255520939827, + 0.9999086856842041 + ], + "name": "accessor_buffer_mixamorig:Spine2_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 189, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 16, + "componentType": 5126, + "count": 3340, + "max": [ + 1.0, + 0.49809977412223816, + 0.31396016478538513, + 0.20796984434127808 + ], + "min": [ + 0.30062898993492126, + 0.0, + 0.0, + 0.0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_1", + "type": "VEC4" + }, + { + "bufferView": 188, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1.0 + ], + "min": [ + -3.492460010079412e-08, + -8.229400918935426e-06, + -3.247988189514217e-08, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9973621368408203 + ], + "min": [ + -0.07256873697042465, + -0.0005480631371028721, + -0.0015104126650840044, + 0.9973621368408203 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 186, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "min": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5121, + "count": 3340, + "max": [ + 51, + 51, + 51, + 51 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.003_skin_0", + "type": "VEC4" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.005280370358377695, + 0.0052629136480391026, + 0.990699291229248 + ], + "min": [ + -0.1358652412891388, + 0.005280370358377695, + 0.0052629136480391026, + 0.990699291229248 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_StandPose_1", + "type": "VEC4" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.172325134277344e-07, + 45.05035400390625, + 3.91155481338501e-07 + ], + "min": [ + 4.172325134277344e-07, + 45.05035400390625, + 3.91155481338501e-07 + ], + "name": "accessor_buffer_mixamorig:RightLeg_StandPose_0", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_StandPose_2", + "type": "VEC3" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "name": "accessor_buffer_mixamorig:RightFoot_StandPose_2", + "type": "VEC3" + } + ], + "animations": [ + { + "channels": [ + { + "sampler": 0, + "target": { + "node": 39, + "path": "translation" + } + }, + { + "sampler": 1, + "target": { + "node": 39, + "path": "rotation" + } + }, + { + "sampler": 2, + "target": { + "node": 39, + "path": "scale" + } + }, + { + "sampler": 3, + "target": { + "node": 54, + "path": "translation" + } + }, + { + "sampler": 4, + "target": { + "node": 54, + "path": "rotation" + } + }, + { + "sampler": 5, + "target": { + "node": 54, + "path": "scale" + } + }, + { + "sampler": 6, + "target": { + "node": 42, + "path": "translation" + } + }, + { + "sampler": 7, + "target": { + "node": 42, + "path": "rotation" + } + }, + { + "sampler": 8, + "target": { + "node": 42, + "path": "scale" + } + }, + { + "sampler": 9, + "target": { + "node": 55, + "path": "translation" + } + }, + { + "sampler": 10, + "target": { + "node": 55, + "path": "rotation" + } + }, + { + "sampler": 11, + "target": { + "node": 55, + "path": "scale" + } + }, + { + "sampler": 12, + "target": { + "node": 19, + "path": "translation" + } + }, + { + "sampler": 13, + "target": { + "node": 19, + "path": "rotation" + } + }, + { + "sampler": 14, + "target": { + "node": 19, + "path": "scale" + } + }, + { + "sampler": 15, + "target": { + "node": 22, + "path": "translation" + } + }, + { + "sampler": 16, + "target": { + "node": 22, + "path": "rotation" + } + }, + { + "sampler": 17, + "target": { + "node": 22, + "path": "scale" + } + }, + { + "sampler": 18, + "target": { + "node": 14, + "path": "translation" + } + }, + { + "sampler": 19, + "target": { + "node": 14, + "path": "rotation" + } + }, + { + "sampler": 20, + "target": { + "node": 14, + "path": "scale" + } + }, + { + "sampler": 21, + "target": { + "node": 53, + "path": "translation" + } + }, + { + "sampler": 22, + "target": { + "node": 53, + "path": "rotation" + } + }, + { + "sampler": 23, + "target": { + "node": 53, + "path": "scale" + } + }, + { + "sampler": 24, + "target": { + "node": 43, + "path": "translation" + } + }, + { + "sampler": 25, + "target": { + "node": 43, + "path": "rotation" + } + }, + { + "sampler": 26, + "target": { + "node": 43, + "path": "scale" + } + }, + { + "sampler": 27, + "target": { + "node": 45, + "path": "translation" + } + }, + { + "sampler": 28, + "target": { + "node": 45, + "path": "rotation" + } + }, + { + "sampler": 29, + "target": { + "node": 45, + "path": "scale" + } + }, + { + "sampler": 30, + "target": { + "node": 31, + "path": "translation" + } + }, + { + "sampler": 31, + "target": { + "node": 31, + "path": "rotation" + } + }, + { + "sampler": 32, + "target": { + "node": 31, + "path": "scale" + } + }, + { + "sampler": 33, + "target": { + "node": 29, + "path": "translation" + } + }, + { + "sampler": 34, + "target": { + "node": 29, + "path": "rotation" + } + }, + { + "sampler": 35, + "target": { + "node": 29, + "path": "scale" + } + }, + { + "sampler": 36, + "target": { + "node": 56, + "path": "translation" + } + }, + { + "sampler": 37, + "target": { + "node": 56, + "path": "rotation" + } + }, + { + "sampler": 38, + "target": { + "node": 56, + "path": "scale" + } + }, + { + "sampler": 39, + "target": { + "node": 62, + "path": "translation" + } + }, + { + "sampler": 40, + "target": { + "node": 62, + "path": "rotation" + } + }, + { + "sampler": 41, + "target": { + "node": 62, + "path": "scale" + } + }, + { + "sampler": 42, + "target": { + "node": 40, + "path": "translation" + } + }, + { + "sampler": 43, + "target": { + "node": 40, + "path": "rotation" + } + }, + { + "sampler": 44, + "target": { + "node": 40, + "path": "scale" + } + }, + { + "sampler": 45, + "target": { + "node": 0, + "path": "translation" + } + }, + { + "sampler": 46, + "target": { + "node": 0, + "path": "rotation" + } + }, + { + "sampler": 47, + "target": { + "node": 0, + "path": "scale" + } + }, + { + "sampler": 48, + "target": { + "node": 37, + "path": "translation" + } + }, + { + "sampler": 49, + "target": { + "node": 37, + "path": "rotation" + } + }, + { + "sampler": 50, + "target": { + "node": 37, + "path": "scale" + } + }, + { + "sampler": 51, + "target": { + "node": 26, + "path": "translation" + } + }, + { + "sampler": 52, + "target": { + "node": 26, + "path": "rotation" + } + }, + { + "sampler": 53, + "target": { + "node": 26, + "path": "scale" + } + }, + { + "sampler": 54, + "target": { + "node": 48, + "path": "translation" + } + }, + { + "sampler": 55, + "target": { + "node": 48, + "path": "rotation" + } + }, + { + "sampler": 56, + "target": { + "node": 48, + "path": "scale" + } + }, + { + "sampler": 57, + "target": { + "node": 66, + "path": "translation" + } + }, + { + "sampler": 58, + "target": { + "node": 66, + "path": "rotation" + } + }, + { + "sampler": 59, + "target": { + "node": 66, + "path": "scale" + } + }, + { + "sampler": 60, + "target": { + "node": 34, + "path": "translation" + } + }, + { + "sampler": 61, + "target": { + "node": 34, + "path": "rotation" + } + }, + { + "sampler": 62, + "target": { + "node": 34, + "path": "scale" + } + }, + { + "sampler": 63, + "target": { + "node": 63, + "path": "translation" + } + }, + { + "sampler": 64, + "target": { + "node": 63, + "path": "rotation" + } + }, + { + "sampler": 65, + "target": { + "node": 63, + "path": "scale" + } + }, + { + "sampler": 66, + "target": { + "node": 44, + "path": "translation" + } + }, + { + "sampler": 67, + "target": { + "node": 44, + "path": "rotation" + } + }, + { + "sampler": 68, + "target": { + "node": 44, + "path": "scale" + } + }, + { + "sampler": 69, + "target": { + "node": 46, + "path": "translation" + } + }, + { + "sampler": 70, + "target": { + "node": 46, + "path": "rotation" + } + }, + { + "sampler": 71, + "target": { + "node": 46, + "path": "scale" + } + }, + { + "sampler": 72, + "target": { + "node": 28, + "path": "translation" + } + }, + { + "sampler": 73, + "target": { + "node": 28, + "path": "rotation" + } + }, + { + "sampler": 74, + "target": { + "node": 28, + "path": "scale" + } + }, + { + "sampler": 75, + "target": { + "node": 15, + "path": "translation" + } + }, + { + "sampler": 76, + "target": { + "node": 15, + "path": "rotation" + } + }, + { + "sampler": 77, + "target": { + "node": 15, + "path": "scale" + } + }, + { + "sampler": 78, + "target": { + "node": 5, + "path": "translation" + } + }, + { + "sampler": 79, + "target": { + "node": 5, + "path": "rotation" + } + }, + { + "sampler": 80, + "target": { + "node": 5, + "path": "scale" + } + }, + { + "sampler": 81, + "target": { + "node": 27, + "path": "translation" + } + }, + { + "sampler": 82, + "target": { + "node": 27, + "path": "rotation" + } + }, + { + "sampler": 83, + "target": { + "node": 27, + "path": "scale" + } + }, + { + "sampler": 84, + "target": { + "node": 24, + "path": "translation" + } + }, + { + "sampler": 85, + "target": { + "node": 24, + "path": "rotation" + } + }, + { + "sampler": 86, + "target": { + "node": 24, + "path": "scale" + } + }, + { + "sampler": 87, + "target": { + "node": 51, + "path": "translation" + } + }, + { + "sampler": 88, + "target": { + "node": 51, + "path": "rotation" + } + }, + { + "sampler": 89, + "target": { + "node": 51, + "path": "scale" + } + }, + { + "sampler": 90, + "target": { + "node": 13, + "path": "translation" + } + }, + { + "sampler": 91, + "target": { + "node": 13, + "path": "rotation" + } + }, + { + "sampler": 92, + "target": { + "node": 13, + "path": "scale" + } + }, + { + "sampler": 93, + "target": { + "node": 57, + "path": "translation" + } + }, + { + "sampler": 94, + "target": { + "node": 57, + "path": "rotation" + } + }, + { + "sampler": 95, + "target": { + "node": 57, + "path": "scale" + } + }, + { + "sampler": 96, + "target": { + "node": 61, + "path": "translation" + } + }, + { + "sampler": 97, + "target": { + "node": 61, + "path": "rotation" + } + }, + { + "sampler": 98, + "target": { + "node": 61, + "path": "scale" + } + }, + { + "sampler": 99, + "target": { + "node": 3, + "path": "translation" + } + }, + { + "sampler": 100, + "target": { + "node": 3, + "path": "rotation" + } + }, + { + "sampler": 101, + "target": { + "node": 3, + "path": "scale" + } + }, + { + "sampler": 102, + "target": { + "node": 41, + "path": "translation" + } + }, + { + "sampler": 103, + "target": { + "node": 41, + "path": "rotation" + } + }, + { + "sampler": 104, + "target": { + "node": 41, + "path": "scale" + } + }, + { + "sampler": 105, + "target": { + "node": 6, + "path": "translation" + } + }, + { + "sampler": 106, + "target": { + "node": 6, + "path": "rotation" + } + }, + { + "sampler": 107, + "target": { + "node": 6, + "path": "scale" + } + }, + { + "sampler": 108, + "target": { + "node": 59, + "path": "translation" + } + }, + { + "sampler": 109, + "target": { + "node": 59, + "path": "rotation" + } + }, + { + "sampler": 110, + "target": { + "node": 59, + "path": "scale" + } + }, + { + "sampler": 111, + "target": { + "node": 58, + "path": "translation" + } + }, + { + "sampler": 112, + "target": { + "node": 58, + "path": "rotation" + } + }, + { + "sampler": 113, + "target": { + "node": 58, + "path": "scale" + } + }, + { + "sampler": 114, + "target": { + "node": 32, + "path": "translation" + } + }, + { + "sampler": 115, + "target": { + "node": 32, + "path": "rotation" + } + }, + { + "sampler": 116, + "target": { + "node": 32, + "path": "scale" + } + }, + { + "sampler": 117, + "target": { + "node": 7, + "path": "translation" + } + }, + { + "sampler": 118, + "target": { + "node": 7, + "path": "rotation" + } + }, + { + "sampler": 119, + "target": { + "node": 7, + "path": "scale" + } + }, + { + "sampler": 120, + "target": { + "node": 11, + "path": "translation" + } + }, + { + "sampler": 121, + "target": { + "node": 11, + "path": "rotation" + } + }, + { + "sampler": 122, + "target": { + "node": 11, + "path": "scale" + } + }, + { + "sampler": 123, + "target": { + "node": 20, + "path": "translation" + } + }, + { + "sampler": 124, + "target": { + "node": 20, + "path": "rotation" + } + }, + { + "sampler": 125, + "target": { + "node": 20, + "path": "scale" + } + }, + { + "sampler": 126, + "target": { + "node": 64, + "path": "translation" + } + }, + { + "sampler": 127, + "target": { + "node": 64, + "path": "rotation" + } + }, + { + "sampler": 128, + "target": { + "node": 64, + "path": "scale" + } + }, + { + "sampler": 129, + "target": { + "node": 49, + "path": "translation" + } + }, + { + "sampler": 130, + "target": { + "node": 49, + "path": "rotation" + } + }, + { + "sampler": 131, + "target": { + "node": 49, + "path": "scale" + } + }, + { + "sampler": 132, + "target": { + "node": 9, + "path": "translation" + } + }, + { + "sampler": 133, + "target": { + "node": 9, + "path": "rotation" + } + }, + { + "sampler": 134, + "target": { + "node": 9, + "path": "scale" + } + }, + { + "sampler": 135, + "target": { + "node": 4, + "path": "translation" + } + }, + { + "sampler": 136, + "target": { + "node": 4, + "path": "rotation" + } + }, + { + "sampler": 137, + "target": { + "node": 4, + "path": "scale" + } + }, + { + "sampler": 138, + "target": { + "node": 18, + "path": "translation" + } + }, + { + "sampler": 139, + "target": { + "node": 18, + "path": "rotation" + } + }, + { + "sampler": 140, + "target": { + "node": 18, + "path": "scale" + } + }, + { + "sampler": 141, + "target": { + "node": 65, + "path": "translation" + } + }, + { + "sampler": 142, + "target": { + "node": 65, + "path": "rotation" + } + }, + { + "sampler": 143, + "target": { + "node": 65, + "path": "scale" + } + }, + { + "sampler": 144, + "target": { + "node": 8, + "path": "translation" + } + }, + { + "sampler": 145, + "target": { + "node": 8, + "path": "rotation" + } + }, + { + "sampler": 146, + "target": { + "node": 8, + "path": "scale" + } + }, + { + "sampler": 147, + "target": { + "node": 60, + "path": "translation" + } + }, + { + "sampler": 148, + "target": { + "node": 60, + "path": "rotation" + } + }, + { + "sampler": 149, + "target": { + "node": 60, + "path": "scale" + } + }, + { + "sampler": 150, + "target": { + "node": 52, + "path": "translation" + } + }, + { + "sampler": 151, + "target": { + "node": 52, + "path": "rotation" + } + }, + { + "sampler": 152, + "target": { + "node": 52, + "path": "scale" + } + }, + { + "sampler": 153, + "target": { + "node": 30, + "path": "translation" + } + }, + { + "sampler": 154, + "target": { + "node": 30, + "path": "rotation" + } + }, + { + "sampler": 155, + "target": { + "node": 30, + "path": "scale" + } + }, + { + "sampler": 156, + "target": { + "node": 36, + "path": "translation" + } + }, + { + "sampler": 157, + "target": { + "node": 36, + "path": "rotation" + } + }, + { + "sampler": 158, + "target": { + "node": 36, + "path": "scale" + } + }, + { + "sampler": 159, + "target": { + "node": 10, + "path": "translation" + } + }, + { + "sampler": 160, + "target": { + "node": 10, + "path": "rotation" + } + }, + { + "sampler": 161, + "target": { + "node": 10, + "path": "scale" + } + }, + { + "sampler": 162, + "target": { + "node": 12, + "path": "translation" + } + }, + { + "sampler": 163, + "target": { + "node": 12, + "path": "rotation" + } + }, + { + "sampler": 164, + "target": { + "node": 12, + "path": "scale" + } + }, + { + "sampler": 165, + "target": { + "node": 21, + "path": "translation" + } + }, + { + "sampler": 166, + "target": { + "node": 21, + "path": "rotation" + } + }, + { + "sampler": 167, + "target": { + "node": 21, + "path": "scale" + } + }, + { + "sampler": 168, + "target": { + "node": 47, + "path": "translation" + } + }, + { + "sampler": 169, + "target": { + "node": 47, + "path": "rotation" + } + }, + { + "sampler": 170, + "target": { + "node": 47, + "path": "scale" + } + }, + { + "sampler": 171, + "target": { + "node": 35, + "path": "translation" + } + }, + { + "sampler": 172, + "target": { + "node": 35, + "path": "rotation" + } + }, + { + "sampler": 173, + "target": { + "node": 35, + "path": "scale" + } + }, + { + "sampler": 174, + "target": { + "node": 25, + "path": "translation" + } + }, + { + "sampler": 175, + "target": { + "node": 25, + "path": "rotation" + } + }, + { + "sampler": 176, + "target": { + "node": 25, + "path": "scale" + } + }, + { + "sampler": 177, + "target": { + "node": 33, + "path": "translation" + } + }, + { + "sampler": 178, + "target": { + "node": 33, + "path": "rotation" + } + }, + { + "sampler": 179, + "target": { + "node": 33, + "path": "scale" + } + }, + { + "sampler": 180, + "target": { + "node": 67, + "path": "translation" + } + }, + { + "sampler": 181, + "target": { + "node": 67, + "path": "rotation" + } + }, + { + "sampler": 182, + "target": { + "node": 67, + "path": "scale" + } + }, + { + "sampler": 183, + "target": { + "node": 16, + "path": "translation" + } + }, + { + "sampler": 184, + "target": { + "node": 16, + "path": "rotation" + } + }, + { + "sampler": 185, + "target": { + "node": 16, + "path": "scale" + } + }, + { + "sampler": 186, + "target": { + "node": 50, + "path": "translation" + } + }, + { + "sampler": 187, + "target": { + "node": 50, + "path": "rotation" + } + }, + { + "sampler": 188, + "target": { + "node": 50, + "path": "scale" + } + }, + { + "sampler": 189, + "target": { + "node": 17, + "path": "translation" + } + }, + { + "sampler": 190, + "target": { + "node": 17, + "path": "rotation" + } + }, + { + "sampler": 191, + "target": { + "node": 17, + "path": "scale" + } + }, + { + "sampler": 192, + "target": { + "node": 38, + "path": "translation" + } + }, + { + "sampler": 193, + "target": { + "node": 38, + "path": "rotation" + } + }, + { + "sampler": 194, + "target": { + "node": 38, + "path": "scale" + } + }, + { + "sampler": 195, + "target": { + "node": 23, + "path": "translation" + } + }, + { + "sampler": 196, + "target": { + "node": 23, + "path": "rotation" + } + }, + { + "sampler": 197, + "target": { + "node": 23, + "path": "scale" + } + } + ], + "name": "StandPose", + "samplers": [ + { + "input": 27, + "interpolation": "LINEAR", + "output": 34 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 74 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 170 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 114 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 172 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 37 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 88 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 71 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 195 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 72 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 49 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 125 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 118 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 130 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 0 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 42 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 134 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 187 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 93 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 140 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 119 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 30 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 2 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 190 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 135 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 161 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 64 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 173 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 103 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 175 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 95 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 147 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 79 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 196 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 26 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 62 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 150 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 166 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 39 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 12 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 11 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 109 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 5 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 121 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 108 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 86 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 77 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 18 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 142 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 153 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 19 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 32 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 97 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 36 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 73 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 211 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 91 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 83 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 123 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 28 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 201 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 100 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 66 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 183 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 177 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 57 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 69 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 29 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 85 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 104 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 14 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 9 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 43 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 58 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 25 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 75 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 136 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 165 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 96 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 157 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 185 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 16 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 160 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 193 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 87 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 208 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 213 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 169 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 149 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 94 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 68 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 139 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 6 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 92 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 59 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 52 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 24 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 116 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 45 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 56 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 171 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 60 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 23 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 188 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 76 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 138 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 204 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 113 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 162 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 112 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 151 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 82 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 127 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 65 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 50 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 63 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 163 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 198 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 155 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 98 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 101 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 47 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 202 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 22 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 129 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 137 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 212 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 203 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 143 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 133 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 131 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 199 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 17 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 154 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 120 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 61 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 7 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 90 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 146 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 186 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 8 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 53 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 15 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 214 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 141 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 67 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 81 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 152 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 35 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 33 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 179 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 70 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 124 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 106 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 41 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 44 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 38 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 144 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 174 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 21 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 126 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 99 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 78 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 176 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 197 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 115 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 13 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 148 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 102 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 159 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 181 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 184 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 31 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 189 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 128 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 168 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 55 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 111 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 4 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 209 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 20 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 207 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 205 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 167 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 158 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 48 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 40 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 145 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 117 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 182 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 194 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 180 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 164 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 191 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 80 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 132 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 46 + }, + { + "input": 27, + "interpolation": "LINEAR", + "output": 3 + } + ] + } + ], + "asset": { + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 146960, + "byteOffset": 0, + "byteStride": 44, + "name": "bufferView_buffer_F010_Saber.003_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 28752, + "byteOffset": 146960, + "name": "bufferView_buffer_F010_Saber.003_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 106880, + "byteOffset": 175712, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.003_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 51744, + "byteOffset": 282592, + "byteStride": 44, + "name": "bufferView_buffer_F010_Saber.001_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10008, + "byteOffset": 334336, + "name": "bufferView_buffer_F010_Saber.001_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 37632, + "byteOffset": 344344, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.001_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 381976, + "byteStride": 4, + "name": "bufferView_buffer_StandPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 381984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382008, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382040, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382088, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382120, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382168, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382200, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382248, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382280, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382328, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382360, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382408, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382440, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382488, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382520, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382568, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382600, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382648, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382680, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382704, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382728, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382760, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382808, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382840, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382888, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382920, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 382944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 382968, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383000, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383048, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383080, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383128, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383160, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383184, + "byteStride": 12, + "name": "bufferView_buffer_Character_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383208, + "byteStride": 16, + "name": "bufferView_buffer_Character_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383240, + "byteStride": 12, + "name": "bufferView_buffer_Character_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383264, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383288, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383320, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383368, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383400, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383448, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383480, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383528, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383560, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383608, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383640, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383688, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383720, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383768, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383800, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383848, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383880, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 383928, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383960, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 383984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384008, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384040, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384088, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384120, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384168, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384200, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384248, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384280, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384328, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384360, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384408, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384440, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384488, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384520, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384568, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384600, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384648, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384680, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384704, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384728, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384760, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384808, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384840, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384888, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384920, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 384944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 384968, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385000, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385048, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385080, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385128, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385160, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385184, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385208, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385240, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385264, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385288, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385320, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385344, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385368, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385400, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385424, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385448, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385480, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385504, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385528, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385560, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385584, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385608, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385640, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385664, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385688, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385720, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385744, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385768, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385800, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385824, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385848, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385880, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385904, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 385928, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385960, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 385984, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386008, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386040, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386064, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386088, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386120, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386144, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386168, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386200, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386224, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386248, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386280, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386304, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386328, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386360, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386384, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386408, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386440, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386464, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386488, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386520, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386544, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386568, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386600, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386624, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386648, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386680, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386704, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386728, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386760, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386784, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386808, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386840, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386864, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386888, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386920, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 386944, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 386968, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 387000, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 387024, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 387048, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 387080, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 387104, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 387128, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 387160, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 387184, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_StandPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 387208, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_StandPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 387240, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_StandPose_2" + }, + { + "buffer": 0, + "byteLength": 3328, + "byteOffset": 387264, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Body_skin_0" + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 390592, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Face_skin_0" + } + ], + "buffers": [ + { + "byteLength": 390784, + "name": "buffer_combined", + "uri": "buffer_combined.bin" + } + ], + "images": [ + { + "name": "saber-pure-body.png", + "uri": "saber-pure-body.png" + }, + { + "name": "saber_01_face.png", + "uri": "saber_01_face.png" + }, + { + "name": "body_id_lut", + "uri" : "body_id.png" + } + ], + "materials": [ + { + "name": "face.001", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0.0, + "roughnessFactor": 1.0 + } + }, + { + "name": "saber-pure-body", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1.0, + 1.0, + 1.0, + 1.0 + ], + "baseColorTexture": { + "index": 1, + "texCoord": 0 + }, + "metallicFactor": 0.0, + "roughnessFactor": 1.0 + }, + "extensions": { + "gl_avatar": { + "bodyIdLUT": 2 + } + } + } + ], + "meshes": [ + { + "name": "F010_Saber.003", + "primitives": [ + { + "attributes": { + "COLOR_0": 89, + "JOINTS_0": 210, + "NORMAL": 1, + "POSITION": 192, + "TEXCOORD_0": 122, + "WEIGHTS_0": 206 + }, + "indices": 156, + "material": 1, + "mode": 4 + } + ] + }, + { + "name": "F010_Saber.001", + "primitives": [ + { + "attributes": { + "COLOR_0": 84, + "JOINTS_0": 110, + "NORMAL": 54, + "POSITION": 200, + "TEXCOORD_0": 107, + "WEIGHTS_0": 105 + }, + "indices": 51, + "material": 0, + "mode": 4 + } + ] + } + ], + "nodes": [ + { + "children": [ + 1, + 2, + 3 + ], + "name": "Character", + "rotation": [ + 0.7071068286895752, + 0.0, + 0.0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0.0, + 0.0, + 0.0 + ] + }, + { + "mesh": 0, + "name": "F010_Saber_Body", + "rotation": [ + 8.198130529990522e-08, + 6.977134425767417e-10, + -3.4885669353279525e-10, + 1.0 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "skin": 0, + "translation": [ + -2.8014183044433594e-06, + -1.4305113836599048e-05, + 1.072883719643869e-06 + ], + "extensions": { + "gl_avatar": { + "skin": 2 + } + } + }, + { + "mesh": 1, + "name": "F010_Saber_Face", + "rotation": [ + 8.136032647598768e-08, + -1.5777218104420236e-30, + 1.0171798302661709e-16, + 1.0 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "skin": 1, + "translation": [ + 0.0, + 2.7755575615628914e-15, + -4.52195720095739e-22 + ] + }, + { + "children": [ + 4, + 58, + 63 + ], + "name": "Armature_mixamorig:Hips", + "rotation": [ + 0.0, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.007442474365234375, + 98.82971954345703, + 0.6201396584510803 + ] + }, + { + "children": [ + 5 + ], + "name": "Armature_mixamorig:Spine", + "rotation": [ + -0.039921652525663376, + 0.0, + 0.0, + 0.9992028474807739 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.0, + 6.854499816894531, + -0.5485978126525879 + ] + }, + { + "children": [ + 6 + ], + "name": "Armature_mixamorig:Spine1", + "rotation": [ + 1.4901162970204496e-08, + 0.0, + 0.0, + 1.0 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -4.656612873077393e-10, + 8.022480964660645, + -2.384185791015625e-07 + ] + }, + { + "children": [ + 7, + 10, + 34 + ], + "name": "Armature_mixamorig:Spine2", + "rotation": [ + -5.029141902923584e-08, + 9.423000574271256e-13, + -2.358492047493943e-11, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -4.656612873077393e-10, + 9.168560028076172, + -4.76837158203125e-07 + ] + }, + { + "children": [ + 8 + ], + "name": "Armature_mixamorig:Neck", + "rotation": [ + 0.03992168977856636, + 1.427615485679809e-13, + 2.0030548400495896e-11, + 0.9992028474807739 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -2.2881511962946632e-10, + 10.314631462097168, + 1.1920928955078125e-06 + ] + }, + { + "children": [ + 9 + ], + "name": "Armature_mixamorig:Head", + "rotation": [ + -3.749335064640036e-09, + -6.35555176367169e-21, + 5.4569682106375694e-12, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -5.1451731764018405e-11, + 4.3087005615234375, + 0.11991112679243088 + ] + }, + { + "name": "Armature_mixamorig:HeadTop_End", + "rotation": [ + 0.0, + 2.610143520150023e-28, + -1.8189894035458565e-12, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 1.2972056762095008e-10, + 20.857254028320312, + 0.5804517269134521 + ] + }, + { + "children": [ + 11 + ], + "name": "Armature_mixamorig:LeftShoulder", + "rotation": [ + 0.5740949511528015, + 0.4067640006542206, + -0.5904093384742737, + 0.39544278383255005 + ], + "scale": [ + 1.0000001192092896, + 1.0, + 1.0 + ], + "translation": [ + 3.513521194458008, + 8.987089157104492, + -0.09783673286437988 + ] + }, + { + "children": [ + 12 + ], + "name": "Armature_mixamorig:LeftArm", + "rotation": [ + -0.19647400081157684, + -0.0007150349556468427, + 0.0035684211179614067, + 0.9805023074150085 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 0.9999999403953552 + ], + "translation": [ + -5.960464477539062e-07, + 7.4837188720703125, + -1.049041748046875e-05 + ] + }, + { + "children": [ + 13 + ], + "name": "Armature_mixamorig:LeftForeArm", + "rotation": [ + -0.005400624126195908, + -0.0001584456767886877, + 0.029325975105166435, + 0.9995554089546204 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -5.364418029785156e-07, + 22.7723331451416, + 5.662441253662109e-07 + ] + }, + { + "children": [ + 14, + 18, + 22, + 26, + 30 + ], + "name": "Armature_mixamorig:LeftHand", + "rotation": [ + -0.0046674893237650394, + -0.036291614174842834, + -0.01584092527627945, + 0.9992048144340515 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 4.76837158203125e-07, + 19.02334213256836, + 8.046627044677734e-07 + ] + }, + { + "children": [ + 15 + ], + "name": "Armature_mixamorig:LeftHandThumb1", + "rotation": [ + 0.24564014375209808, + 0.0797870084643364, + 0.2984432578086853, + 0.9188180565834045 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -1.3880550861358643, + 1.872644305229187, + 1.3422610759735107 + ] + }, + { + "children": [ + 16 + ], + "name": "Armature_mixamorig:LeftHandThumb2", + "rotation": [ + 0.00489170802757144, + 4.4890290951116185e-07, + 4.610102450897102e-07, + 0.9999881386756897 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -0.018166542053222656, + 2.1517605781555176, + -2.1755695343017578e-05 + ] + }, + { + "children": [ + 17 + ], + "name": "Armature_mixamorig:LeftHandThumb3", + "rotation": [ + 0.021618247032165527, + -5.850072852808808e-07, + -3.9590455003235547e-07, + 0.9997663497924805 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "translation": [ + 0.07795095443725586, + 2.1093316078186035, + 1.8775463104248047e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftHandThumb4", + "rotation": [ + 4.284083487959833e-08, + -1.769512749660862e-07, + -3.3527612686157227e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + -0.0597844123840332, + 1.8846036195755005, + -1.1980533599853516e-05 + ] + }, + { + "children": [ + 19 + ], + "name": "Armature_mixamorig:LeftHandIndex1", + "rotation": [ + 0.026657480746507645, + 0.0018764277920126915, + 0.07018843293190002, + 0.9971757531166077 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -2.3818466663360596, + 6.0911946296691895, + 0.09325551986694336 + ] + }, + { + "children": [ + 20 + ], + "name": "Armature_mixamorig:LeftHandIndex2", + "rotation": [ + -0.034092869609594345, + -7.741025598306805e-08, + 1.2725772080557363e-07, + 0.9994186758995056 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -0.009856224060058594, + 2.002563238143921, + 1.9297003746032715e-06 + ] + }, + { + "children": [ + 21 + ], + "name": "Armature_mixamorig:LeftHandIndex3", + "rotation": [ + -0.011232745833694935, + 8.382431815334712e-08, + -1.2014818651095993e-07, + 0.9999369382858276 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.0033556222915649414, + 1.906246304512024, + -2.428889274597168e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftHandIndex4", + "rotation": [ + -1.6298145055770874e-08, + -2.116430550813675e-07, + -1.4435499906539917e-07, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.006502628326416016, + 1.6352357864379883, + -7.256865501403809e-06 + ] + }, + { + "children": [ + 23 + ], + "name": "Armature_mixamorig:LeftHandMiddle1", + "rotation": [ + 0.030671721324324608, + 0.0003823289880529046, + 0.012456541880965233, + 0.9994519352912903 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "translation": [ + -0.620979368686676, + 5.9338483810424805, + -0.18955062329769135 + ] + }, + { + "children": [ + 24 + ], + "name": "Armature_mixamorig:LeftHandMiddle2", + "rotation": [ + -0.01664525642991066, + 1.53325672158644e-08, + 1.832339968643737e-08, + 0.999861478805542 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.018555283546447754, + 2.2824888229370117, + -2.2992491722106934e-05 + ] + }, + { + "children": [ + 25 + ], + "name": "Armature_mixamorig:LeftHandMiddle3", + "rotation": [ + -0.10026512295007706, + -6.588842182964072e-08, + 1.4567116579655703e-07, + 0.9949608445167542 + ], + "scale": [ + 1.0, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + -0.010961532592773438, + 2.2484676837921143, + -1.6957521438598633e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandMiddle4", + "rotation": [ + -4.5380154745089385e-08, + 5.855691398437557e-08, + 8.149073416063857e-09, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + 0.02951037883758545, + 2.0856528282165527, + 1.0073184967041016e-05 + ] + }, + { + "children": [ + 27 + ], + "name": "Armature_mixamorig:LeftHandRing1", + "rotation": [ + 0.10404136031866074, + -0.008528899401426315, + -0.08125600963830948, + 0.9912115335464478 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.8905025720596313, + 5.982393264770508, + -0.24304264783859253 + ] + }, + { + "children": [ + 28 + ], + "name": "Armature_mixamorig:LeftHandRing2", + "rotation": [ + -0.03329118713736534, + -6.639353955506522e-08, + -3.7273565567375044e-08, + 0.9994457960128784 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.017888784408569336, + 2.1800594329833984, + -1.7344951629638672e-05 + ] + }, + { + "children": [ + 29 + ], + "name": "Armature_mixamorig:LeftHandRing3", + "rotation": [ + -0.08213821053504944, + 5.25645127424923e-08, + 6.078793717279041e-07, + 0.9966209530830383 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.0040547847747802734, + 1.9782464504241943, + -3.8623809814453125e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandRing4", + "rotation": [ + -1.4202669262886047e-07, + -1.4062970876693726e-07, + -1.5425030142068863e-07, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 1.0 + ], + "translation": [ + 0.02194046974182129, + 1.7619253396987915, + 2.6524066925048828e-05 + ] + }, + { + "children": [ + 31 + ], + "name": "Armature_mixamorig:LeftHandPinky1", + "rotation": [ + 0.13995902240276337, + -0.024145862087607384, + -0.16828545928001404, + 0.9754529595375061 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 2.112321376800537, + 5.15140962600708, + -0.10163509845733643 + ] + }, + { + "children": [ + 32 + ], + "name": "Armature_mixamorig:LeftHandPinky2", + "rotation": [ + -0.012911615893244743, + 6.519802298043942e-08, + 6.445289386647346e-07, + 0.999916672706604 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + -0.006536006927490234, + 1.828072190284729, + -1.633167266845703e-05 + ] + }, + { + "children": [ + 33 + ], + "name": "Armature_mixamorig:LeftHandPinky3", + "rotation": [ + -0.09343928843736649, + 1.850952742188383e-07, + -2.745443339335907e-07, + 0.9956250786781311 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -0.006233692169189453, + 1.5249935388565063, + 2.5272369384765625e-05 + ] + }, + { + "name": "Armature_mixamorig:LeftHandPinky4", + "rotation": [ + 5.541368963690729e-08, + -5.9371814131736755e-09, + 1.3969838619232178e-09, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 0.012760639190673828, + 1.3818011283874512, + -5.304813385009766e-06 + ] + }, + { + "children": [ + 35 + ], + "name": "Armature_mixamorig:RightShoulder", + "rotation": [ + 0.5726097226142883, + -0.40782278776168823, + 0.5916988849639893, + 0.394577294588089 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -3.513521194458008, + 8.98842716217041, + -0.11455440521240234 + ] + }, + { + "children": [ + 36 + ], + "name": "Armature_mixamorig:RightArm", + "rotation": [ + -0.19615903496742249, + 0.0015209860866889358, + -0.007602959871292114, + 0.980541467666626 + ], + "scale": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + 6.854534149169922e-07, + 7.4837188720703125, + -6.9588422775268555e-06 + ] + }, + { + "children": [ + 37 + ], + "name": "Armature_mixamorig:RightForeArm", + "rotation": [ + -0.005199347157031298, + 0.00015941221499815583, + -0.03064456395804882, + 0.9995168447494507 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + -1.0132789611816406e-06, + 22.770898818969727, + -2.6673078536987305e-06 + ] + }, + { + "children": [ + 38, + 42, + 46, + 50, + 54 + ], + "name": "Armature_mixamorig:RightHand", + "rotation": [ + -0.027066726237535477, + 0.03516821190714836, + 0.024613087996840477, + 0.9987115859985352 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 5.960464477539062e-07, + 19.027141571044922, + -1.1309981346130371e-05 + ] + }, + { + "children": [ + 39 + ], + "name": "Armature_mixamorig:RightHandThumb1", + "rotation": [ + 0.24496246874332428, + -0.07342495024204254, + -0.27757158875465393, + 0.9260433316230774 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 1.4313437938690186, + 1.9488826990127563, + 1.373734474182129 + ] + }, + { + "children": [ + 40 + ], + "name": "Armature_mixamorig:RightHandThumb2", + "rotation": [ + 0.02597731165587902, + 4.695450286362757e-07, + 4.360061325314746e-07, + 0.9996625781059265 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.09870082139968872, + 2.2226028442382812, + 1.8328428268432617e-05 + ] + }, + { + "children": [ + 41 + ], + "name": "Armature_mixamorig:RightHandThumb3", + "rotation": [ + 0.0020599281415343285, + -4.209587416426075e-07, + -2.747407563674642e-07, + 0.9999979734420776 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.08420944213867188, + 1.993523359298706, + -2.4646520614624023e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandThumb4", + "rotation": [ + 6.705523247774181e-08, + -7.450580596923828e-09, + 6.05359673500061e-08, + 1.0 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + -0.1829054355621338, + 1.5351988077163696, + 9.775161743164062e-06 + ] + }, + { + "children": [ + 43 + ], + "name": "Armature_mixamorig:RightHandIndex1", + "rotation": [ + 0.04785900563001633, + -0.003934510983526707, + -0.08183817565441132, + 0.9954881072044373 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 2.2894375324249268, + 5.801694393157959, + 0.050646696239709854 + ] + }, + { + "children": [ + 44 + ], + "name": "Armature_mixamorig:RightHandIndex2", + "rotation": [ + -0.028287818655371666, + 7.496872456158599e-08, + 2.392710314325086e-07, + 0.9995998740196228 + ], + "scale": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 0.029898226261138916, + 2.2504000663757324, + 2.1301209926605225e-05 + ] + }, + { + "children": [ + 45 + ], + "name": "Armature_mixamorig:RightHandIndex3", + "rotation": [ + -0.14387890696525574, + 7.74066961639619e-08, + 1.5951893317378563e-07, + 0.9895954132080078 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 0.01506185531616211, + 2.0928609371185303, + 1.971423625946045e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandIndex4", + "rotation": [ + -2.57976381590197e-07, + -8.847565879932517e-08, + -1.480803035747158e-07, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.04495549201965332, + 1.9040567874908447, + -1.9669532775878906e-05 + ] + }, + { + "children": [ + 47 + ], + "name": "Armature_mixamorig:RightHandMiddle1", + "rotation": [ + 0.06535934656858444, + -0.0012092242250218987, + -0.018458466976881027, + 0.9976903200149536 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 0.6151741147041321, + 5.987786293029785, + -0.2521481215953827 + ] + }, + { + "children": [ + 48 + ], + "name": "Armature_mixamorig:RightHandMiddle2", + "rotation": [ + -0.02911515347659588, + -1.493660128915053e-08, + 1.2578189512169047e-07, + 0.9995761513710022 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 0.025691747665405273, + 2.3235480785369873, + 5.8710575103759766e-06 + ] + }, + { + "children": [ + 49 + ], + "name": "Armature_mixamorig:RightHandMiddle3", + "rotation": [ + -0.12079086899757385, + 3.73517679008728e-08, + 3.685922251861484e-07, + 0.9926779866218567 + ], + "scale": [ + 1.0, + 0.9999998807907104, + 0.9999998211860657 + ], + "translation": [ + 0.011220812797546387, + 2.2008121013641357, + 2.9072165489196777e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandMiddle4", + "rotation": [ + 2.531742211431265e-07, + -1.9557775843281888e-08, + 2.561137080192566e-09, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 0.9999999403953552 + ], + "translation": [ + -0.036910414695739746, + 2.00234055519104, + 2.60770320892334e-06 + ] + }, + { + "children": [ + 51 + ], + "name": "Armature_mixamorig:RightHandRing1", + "rotation": [ + 0.08960019052028656, + 0.007558114361017942, + 0.0837147906422615, + 0.9924246072769165 + ], + "scale": [ + 1.0, + 0.9999999403953552, + 1.0 + ], + "translation": [ + -0.8287993669509888, + 5.778010845184326, + -0.2080925703048706 + ] + }, + { + "children": [ + 52 + ], + "name": "Armature_mixamorig:RightHandRing2", + "rotation": [ + 0.02305533178150654, + -1.0247272363983484e-08, + -2.6083968762691256e-08, + 0.9997342824935913 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 0.008643150329589844, + 2.2196152210235596, + -9.953975677490234e-06 + ] + }, + { + "children": [ + 53 + ], + "name": "Armature_mixamorig:RightHandRing3", + "rotation": [ + -0.12460635602474213, + 6.288876619464645e-08, + 3.815565037257329e-07, + 0.992206335067749 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0 + ], + "translation": [ + 0.016327381134033203, + 2.091179847717285, + 4.410743713378906e-06 + ] + }, + { + "name": "Armature_mixamorig:RightHandRing4", + "rotation": [ + -8.42846930027008e-08, + -6.05359673500061e-08, + -6.356277282293377e-08, + 1.0 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 1.0 + ], + "translation": [ + -0.02497267723083496, + 1.9166507720947266, + -1.8537044525146484e-05 + ] + }, + { + "children": [ + 55 + ], + "name": "Armature_mixamorig:RightHandPinky1", + "rotation": [ + 0.1575794368982315, + 0.028793327510356903, + 0.17742541432380676, + 0.9710097312927246 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + -2.075824737548828, + 5.181243896484375, + -0.156680166721344 + ] + }, + { + "children": [ + 56 + ], + "name": "Armature_mixamorig:RightHandPinky2", + "rotation": [ + -0.021833697333931923, + -8.849674060229518e-08, + -3.185882917478011e-07, + 0.9997616410255432 + ], + "scale": [ + 1.0, + 0.9999998211860657, + 0.9999999403953552 + ], + "translation": [ + 0.009781837463378906, + 1.9066412448883057, + 3.445148468017578e-05 + ] + }, + { + "children": [ + 57 + ], + "name": "Armature_mixamorig:RightHandPinky3", + "rotation": [ + -0.0985320433974266, + -1.1792045739866808e-07, + -2.5736605735460216e-08, + 0.9951338768005371 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0 + ], + "translation": [ + 0.004714488983154297, + 1.55594801902771, + 1.9788742065429688e-05 + ] + }, + { + "name": "Armature_mixamorig:RightHandPinky4", + "rotation": [ + 1.695007227908718e-07, + -6.053597445543346e-08, + 1.6530977475781583e-08, + 1.0 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -0.014493942260742188, + 1.4579054117202759, + -3.3020973205566406e-05 + ] + }, + { + "children": [ + 59 + ], + "name": "Armature_mixamorig:LeftUpLeg", + "rotation": [ + -8.872594662534539e-06, + 0.0009148783865384758, + 0.9998617172241211, + 0.016607170924544334 + ], + "scale": [ + 1.0001250505447388, + 1.0, + 1.000000238418579 + ], + "translation": [ + 6.5092010498046875, + -3.8089065551757812, + -0.3193536400794983 + ] + }, + { + "children": [ + 60 + ], + "name": "Armature_mixamorig:LeftLeg", + "rotation": [ + -0.019678570330142975, + -0.00024797735386528075, + 0.012827177532017231, + 0.9997241497039795 + ], + "scale": [ + 0.9999999403953552, + 1.0, + 0.9999999403953552 + ], + "translation": [ + 4.90503225591965e-07, + 45.04969024658203, + -3.3028754842234775e-08 + ] + }, + { + "children": [ + 61 + ], + "name": "Armature_mixamorig:LeftFoot", + "rotation": [ + 0.4820258617401123, + 0.06575184315443039, + -0.03629865497350693, + 0.872931957244873 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.0000001192092896 + ], + "translation": [ + -3.387158358236775e-07, + 41.849327087402344, + -3.457535058259964e-08 + ] + }, + { + "children": [ + 62 + ], + "name": "Armature_mixamorig:LeftToeBase", + "rotation": [ + 0.29159197211265564, + -0.06168047711253166, + 0.01884075440466404, + 0.9543660879135132 + ], + "scale": [ + 1.0, + 1.0, + 1.0000001192092896 + ], + "translation": [ + 8.810311555862427e-07, + 12.08905029296875, + -3.889203071594238e-06 + ] + }, + { + "name": "Armature_mixamorig:LeftToe_End", + "rotation": [ + 9.872019290924072e-08, + 8.056988008320332e-06, + -1.909211277961731e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + -3.5762786865234375e-07, + 4.706444263458252, + 5.960464477539063e-08 + ] + }, + { + "children": [ + 64 + ], + "name": "Armature_mixamorig:RightUpLeg", + "rotation": [ + -2.94413257506676e-06, + -0.0034815834369510412, + -0.9998561143875122, + 0.01660647802054882 + ], + "scale": [ + 1.000124216079712, + 1.0, + 1.0000035762786865 + ], + "translation": [ + -6.5092010498046875, + -3.8089065551757812, + -0.4497392773628235 + ] + }, + { + "children": [ + 65 + ], + "name": "Armature_mixamorig:RightLeg", + "rotation": [ + -0.022010719403624535, + 0.00022552665905095637, + -0.012826679274439812, + 0.999675452709198 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 1.0 + ], + "translation": [ + 4.079265636391938e-08, + 45.050357818603516, + -1.5308614820241928e-08 + ] + }, + { + "children": [ + 66 + ], + "name": "Armature_mixamorig:RightFoot", + "rotation": [ + 0.48082953691482544, + -0.06620366871356964, + 0.03643133118748665, + 0.8735518455505371 + ], + "scale": [ + 1.0, + 1.0000001192092896, + 1.000000238418579 + ], + "translation": [ + -9.810537449084222e-08, + 41.85009765625, + 4.062894731760025e-08 + ] + }, + { + "children": [ + 67 + ], + "name": "Armature_mixamorig:RightToeBase", + "rotation": [ + 0.29314252734184265, + 0.06225594878196716, + -0.01912800408899784, + 0.9538480043411255 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "translation": [ + -6.51925802230835e-08, + 12.033415794372559, + 3.4570693969726562e-06 + ] + }, + { + "name": "Armature_mixamorig:RightToe_End", + "rotation": [ + -3.748573362827301e-08, + -8.230912499129772e-06, + -2.9453076422214508e-08, + 1.0 + ], + "scale": [ + 1.0, + 1.0, + 1.0 + ], + "translation": [ + 1.043081283569336e-07, + 4.712545394897461, + 3.2782554626464844e-07 + ] + }, + { + "children": [ + 0 + ], + "matrix": [ + -1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ], + "name": "Scene_root" + } + ], + "samplers": [ + { + "name": "default" + }, + { + "magFilter": 9728, + "minFilter": 9728 + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "active_camera": null, + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 68 + ] + } + ], + "skins": [ + { + "inverseBindMatrices": 10, + "joints": [ + 3, + 4, + 5, + 6, + 7, + 8, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 19, + 20, + 22, + 23, + 24, + 26, + 27, + 28, + 30, + 31, + 32, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 43, + 44, + 46, + 47, + 48, + 50, + 51, + 52, + 54, + 55, + 56, + 58, + 59, + 60, + 61, + 63, + 64, + 65, + 66 + ], + "name": "F010_Saber_Body", + "skeleton": 3 + }, + { + "inverseBindMatrices": 178, + "joints": [ + 6, + 7, + 8 + ], + "name": "F010_Saber_Face", + "skeleton": 3 + }, + { + "joints": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67 + ], + "name": "full", + "skeleton": 3 + } + ], + "textures": [ + { + "name": "Saber-Face", + "sampler": 0, + "source": 1 + }, + { + "name": "saber-pure-body.png", + "sampler": 0, + "source": 0 + }, + { + "sampler" : 1, + "source" : 2 + } + ] +} diff --git a/models/gltf/saber-stand-pose/saber_01_face.png b/models/gltf/saber-stand-pose/saber_01_face.png new file mode 100644 index 0000000000000000000000000000000000000000..baba4465c57f1a481033cf7d77ff5ff2c85e72e4 Binary files /dev/null and b/models/gltf/saber-stand-pose/saber_01_face.png differ diff --git a/models/gltf/saber-suit/buffer_combined_suit.bin b/models/gltf/saber-suit/buffer_combined_suit.bin new file mode 100644 index 0000000000000000000000000000000000000000..a3fc9031aac4f9bd6203bfe046f1383e3dc6dccf --- /dev/null +++ b/models/gltf/saber-suit/buffer_combined_suit.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a12db5d1be8bb996cd7ff249b4cf36baa6e17e3e52cd8aab7ce94f63577d2485 +size 261028 diff --git a/models/gltf/saber-suit/saber-suit.gltf b/models/gltf/saber-suit/saber-suit.gltf new file mode 100644 index 0000000000000000000000000000000000000000..70e90057e554021c56926a755c971b788e92c8cf --- /dev/null +++ b/models/gltf/saber-suit/saber-suit.gltf @@ -0,0 +1,5487 @@ +{ + "accessors": [ + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + 0, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 180, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5121, + "count": 3459, + "max": [ + 63, + 63, + 63, + 60 + ], + "min": [ + 0, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F016_Saber.001_Untitled.001_skin_0", + "type": "VEC4" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + 0, + 0, + 0 + ], + "name": "accessor_buffer_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 9.422998405866911e-13, + 0, + 1 + ], + "min": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.043081283569336e-7, + 4.706444263458252, + 1.4901161193847656e-8 + ], + "min": [ + 1.043081283569336e-7, + 4.706444263458252, + 1.4901161193847656e-8 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 176, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00001167778464150615, + 0, + 0.9999808073043823, + 0 + ], + "min": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000014512252164422534, + 0.0003296945069450885, + 0, + 0.9999457001686096 + ], + "min": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 7.4837236404418945, + 0 + ], + "min": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.021941065788269043, + 1.7619209289550781, + 0.00002016910548263695 + ], + "min": [ + 0.021941065788269043, + 1.7619209289550781, + 0.00002016910548263695 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 193, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + 0 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9040616750717163, + 0 + ], + "min": [ + -0.044958412647247314, + 1.9040616750717163, + -0.000012791395420208573 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-7, + 41.85009002685547, + 0 + ], + "min": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.5535473109102895e-8, + 2.9428024461708446e-9, + 0, + 1 + ], + "min": [ + 5.5535473109102895e-8, + 2.9428024461708446e-9, + -0.000005548599347093841, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + 0 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 178, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1800546646118164, + 0 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + 0 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2824809551239014, + 0.00000463516335003078 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.7723331451416, + 0.000002205953933298588 + ], + "min": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999955296516418 + ], + "min": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 22.77089500427246, + 0.000006812736501160543 + ], + "min": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 41.84932327270508, + 0 + ], + "min": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 186, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5249916315078735, + 0.000022089123376645148 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000018012506188824773, + 0.00015944617916829884, + 0, + 1 + ], + "min": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 1 + ], + "min": [ + 0.9999999403953552, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 175, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.20922753821651e-8, + 0, + 1.4510078472085297e-8, + 1 + ], + "min": [ + 5.20922753821651e-8, + -1.1215498751937503e-8, + 1.4510078472085297e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 172, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.916641116142273, + 0 + ], + "min": [ + -0.02496713399887085, + 1.916641116142273, + -0.000015547877410426736 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.7445827893425303e-7, + 0, + 3.6372512113302946e-8, + 1 + ], + "min": [ + 1.7445827893425303e-7, + -6.26357206101602e-8, + 3.6372512113302946e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + 0, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.04969024658203, + 8.68749339133501e-9 + ], + "min": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 164, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + 0, + 1 + ], + "min": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.252031947591604e-7, + 0, + 2.586603153886813e-9, + 1 + ], + "min": [ + 2.252031947591604e-7, + -1.896821366642598e-8, + 2.586603153886813e-9, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + 0, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.656612517806025e-8, + 0, + 0, + 1 + ], + "min": [ + 4.656612517806025e-8, + -1.9324940581100236e-7, + -4.982575063650074e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1 + ], + "min": [ + 1, + 1.0000001192092896, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 183, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999995231628418 + ], + "min": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.833076872046149e-8, + 7.194104423291492e-9, + 1 + ], + "min": [ + -4.388131102928128e-8, + 4.833076872046149e-8, + 7.194104423291492e-9, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + 0, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.172354171165352e-8, + 0.000008062284905463457, + 0, + 1 + ], + "min": [ + 8.172354171165352e-8, + 0.000008062284905463457, + -1.2136295524101115e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 196, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + 0, + 0 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "min": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.933863162994385, + 0 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 16, + "componentType": 5126, + "count": 3459, + "max": [ + 0.9999816417694092, + 0.4915712773799896, + 0.31245285272598267, + 0.21360322833061218 + ], + "min": [ + 0.11102752387523651, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F016_Saber.001_Untitled.001_skin_1", + "type": "VEC4" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.000002737616568992962, + 0, + 0, + 0.9967700242996216 + ], + "min": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999997615814209, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.000000238418579, + 1, + 1.0000001192092896 + ], + "min": [ + 1.000000238418579, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 24, + "componentType": 5126, + "count": 3459, + "max": [ + 0.9927290081977844, + 0.9935779999941587 + ], + "min": [ + 0.3703190088272095, + 0.01139301061630249 + ], + "name": "accessor_buffer_F016_Saber.001_Untitled.001_2", + "type": "VEC2" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00007425900548696518, + 98.80355834960938, + 0.4175964593887329 + ], + "min": [ + 0.00007425900548696518, + 98.80355834960938, + 0.4175964593887329 + ], + "name": "accessor_buffer_mixamorig:Hips_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 179, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 182, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0008116317912936211, + 0, + 0.9999305605888367 + ], + "min": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 190, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8280677795410156, + 0 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.003121189074590802, + 0, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 197, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000016051130842242856, + 0, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.80437906032391e-23, + 0, + 1 + ], + "min": [ + -8.673616862896153e-19, + 6.80437906032391e-23, + -1.8189894035458565e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 166, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + 0 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0003684632829390466, + 0, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.010770494118332863, + 0, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.778012275695801, + 0 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000019077392607869115, + 0, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 177, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00034277912345714867, + 0, + 0.9999790191650391 + ], + "min": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + 0 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "min": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "name": "accessor_buffer_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 202, + "byteOffset": 0, + "componentType": 5126, + "count": 65, + "max": [ + 100, + 99.93576049804688, + 37.24126434326172, + 0, + 17.893775939941406, + 100.00001525878906, + 99.28009033203125, + 0, + 99.62825775146484, + 99.6885757446289, + 100, + 0, + 36.08419418334961, + 95.18425750732422, + 139.18643188476562, + 1 + ], + "min": [ + -99.98472595214844, + -99.93488311767578, + -39.525962829589844, + 0, + -16.1917781829834, + -99.9447250366211, + -99.61784362792969, + 0, + -99.6427001953125, + -35.06763458251953, + -18.72077751159668, + 0, + -40.01988983154297, + -158.2681884765625, + -8.502774238586426, + 1 + ], + "name": "accessor_buffer_IBM_F016_Saber.001_Untitled.000_skin_0", + "type": "MAT4" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + 0, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 19.023351669311523, + 0 + ], + "min": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "min": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "name": "accessor_buffer_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 170, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00083109550178051, + 0, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-7, + 0, + 4.313407657718926e-7, + 1 + ], + "min": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.012762725353240967, + 1.3817871809005737, + 0 + ], + "min": [ + 0.012762725353240967, + 1.3817871809005737, + -0.000005348862032406032 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 167, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + 0, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 201, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 3459, + "max": [ + 0.646462082862854, + 1.3730100393295288, + 0.14374901354312897 + ], + "min": [ + -0.6473091244697571, + 0.0026959951501339674, + -0.11143200844526291 + ], + "name": "accessor_buffer_F016_Saber.001_Untitled.001_0", + "type": "VEC3" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + 0, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 188, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.1517670154571533, + 0 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5123, + "count": 15102, + "max": [ + 3458 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F016_Saber.001_Untitled.001_3", + "type": "SCALAR" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.006504923105239868, + 1.635219693183899, + 0 + ], + "min": [ + 0.006504923105239868, + 1.635219693183899, + -0.00002377049531787634 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 189, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + 0 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.4578983783721924, + 0 + ], + "min": [ + -0.014494240283966064, + 1.4578983783721924, + -0.000007362202268268447 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 5.4569682106375694e-12, + 1 + ], + "min": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + 0 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00005565229366766289, + 0, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.029511988162994385, + 2.085664749145508, + 0 + ], + "min": [ + 0.029511988162994385, + 2.085664749145508, + -0.000003653607564046979 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.5351991653442383, + 0.000011235475540161133 + ], + "min": [ + -0.18289971351623535, + 1.5351991653442383, + 0.000011235475540161133 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 184, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.9782497882843018, + 0 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 171, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1 + ], + "min": [ + 1, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-7, + 7.483717918395996, + 0 + ], + "min": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "name": "accessor_buffer_mixamorig:RightArm_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -2.464207682351116e-7, + -8.914983595786907e-8, + -1.517519194749184e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 198, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8846017122268677, + 0 + ], + "min": [ + -0.0597844123840332, + 1.8846017122268677, + -0.00000426173210144043 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + 0 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 5.181240558624268, + 0 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.034996457397937775, + 0, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.0011933766072615981, + 0, + 0.9998803734779358 + ], + "min": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 199, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0025572776794434, + 0 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00004969544170307927, + 0.0011240799212828279, + 0, + 0.9999988079071045 + ], + "min": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 181, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + 0 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 165, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 12, + "componentType": 5126, + "count": 3459, + "max": [ + 0.9999777674674988, + 0.9998317956924438, + 0.9998589754104614 + ], + "min": [ + -0.9997113347053528, + -1, + -0.9999495148658752 + ], + "name": "accessor_buffer_F016_Saber.001_Untitled.001_1", + "type": "VEC3" + }, + { + "bufferView": 185, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 6.854499816894531, + 0 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 191, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00004930837167194113, + 0, + 1 + ], + "min": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 169, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -2.3662607873120578e-8, + -2.0191042438000295e-7, + -1.5510249795624986e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -1.473153474762512e-7, + -1.363462160952622e-7, + -1.3542921806219965e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 168, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.000005544060059037292, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "min": [ + 8.12722285303824e-12, + 20.857254028320312, + 0.5804517269134521 + ], + "name": "accessor_buffer_mixamorig:HeadTop_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + 0, + 0, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.0023322105407715, + 0 + ], + "min": [ + -0.03690838813781738, + 2.0023322105407715, + -0.0000020437873899936676 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle4_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 174, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 200, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 0.9999998807907104 + ], + "min": [ + 1, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -3.306195139884949e-8, + -0.000008229748345911503, + -2.3865142750878476e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "min": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "name": "accessor_buffer_mixamorig:RightLeg_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 4.7125468254089355, + 0 + ], + "min": [ + -6.258487701416016e-7, + 4.7125468254089355, + -5.960464477539063e-8 + ], + "name": "accessor_buffer_mixamorig:RightToe_End_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 192, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "min": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "name": "accessor_buffer_mixamorig:RightHand_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 195, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + 0, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 194, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-7, + 0, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 10.314631462097168, + 2.384185791015625e-7 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "name": "accessor_buffer_mixamorig:Neck_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 0.9999953508377075 + ], + "min": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.725291364276018e-8, + 0, + 3.259629011154175e-8, + 1 + ], + "min": [ + 3.725291364276018e-8, + -5.58793766813892e-9, + 3.259629011154175e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 8.988426208496094, + 0 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky4_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "min": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 173, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 0, + 0, + 1 + ], + "min": [ + -9.267012046620948e-8, + -5.819203607870804e-8, + -6.402842700481415e-8, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandRing4_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 187, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0, + 2.2484662532806396, + 0.000009948620572686195 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0", + "type": "VEC3" + } + ], + "asset": { + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 110688, + "byteOffset": 0, + "byteStride": 32, + "name": "bufferView_buffer_F016_Saber.001_Untitled.001_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 30204, + "byteOffset": 110688, + "name": "bufferView_buffer_F016_Saber.001_Untitled.001_1", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 110688, + "byteOffset": 140892, + "byteStride": 32, + "name": "bufferView_buffer_F016_Saber.001_Untitled.001_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 251580, + "byteStride": 4, + "name": "bufferView_buffer_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 251612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 251692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 251772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 251852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 251932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 251988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 252948, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 252972, + "byteStride": 16, + "name": "bufferView_buffer_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253004, + "byteStride": 12, + "name": "bufferView_buffer_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 253932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 253988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 254948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 254972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToe_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:HeadTop_End_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 255932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 255988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing4_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 256812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 256844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2" + }, + { + "buffer": 0, + "byteLength": 4160, + "byteOffset": 256868, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F016_Saber.001_Untitled.000_skin_0" + } + ], + "buffers": [ + { + "byteLength": 261028, + "name": "buffer_combined_suit", + "uri": "buffer_combined_suit.bin" + } + ], + "images": [ + { + "name": "saber-suite.png", + "uri": "saber-suite.png" + } + ], + "materials": [ + { + "name": "07___Default.004", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 1, + 1, + 1, + 1 + ], + "baseColorTexture": { + "index": 1, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 1 + } + } + ], + "meshes": [ + { + "name": "F016_Saber.001_Untitled.001", + "primitives": [ + { + "attributes": { + "NORMAL": 164, + "POSITION": 115, + "TEXCOORD_0": 81 + }, + "indices": 121, + "material": 0, + "mode": 4, + "extensions": { + "gl_avatar": { + "attributes": { + "JOINTS_0": 4, + "WEIGHTS_0": 76 + } + } + } + } + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "name": "Character", + "rotation": [ + 0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0, + 0, + 0 + ] + }, + { + "mesh": 0, + "name": "F016_Saber.001_Untitled.000", + "rotation": [ + 0, + 0, + 0, + 1 + ], + "scale": [ + 100, + 100, + 100 + ], + "translation": [ + 0, + 0, + 0 + ], + "extensions": { + "gl_avatar": { + "skin": 0 + } + } + }, + { + "children": [ + 0 + ], + "matrix": [ + -1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1 + ], + "name": "Scene_root" + } + ], + "samplers": [ + { + "name": "default" + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "active_camera": null, + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 2 + ] + } + ], + "textures": [ + { + "name": "D", + "sampler": 0, + "source": 0 + }, + { + "name": "Kd", + "sampler": 0, + "source": 0 + } + ], + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "visibility": [ + 0, + 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 0, 0, 0 + ], + "type": "skin", + "linkedSkeletons": [ + { + "inverseBindMatrices": 102, + "name": "F016_Saber.001_Untitled.000", + "skeleton": "main" + } + ] + } + } +} \ No newline at end of file diff --git a/models/gltf/saber-suit/saber-suite.png b/models/gltf/saber-suit/saber-suite.png new file mode 100644 index 0000000000000000000000000000000000000000..b2929d4811aefb982cc318de559d5a665f3fdce1 Binary files /dev/null and b/models/gltf/saber-suit/saber-suite.png differ diff --git a/models/merge/buffer_combined.bin b/models/merge/buffer_combined.bin new file mode 100644 index 0000000000000000000000000000000000000000..c5611fd7d9b5b28b77b7bcf5e9de220f05d7fb1f --- /dev/null +++ b/models/merge/buffer_combined.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72a9d7d46663d9016bd07b33c7b29d53826108d0a0fb4fad7bcc65c4b1992c38 +size 390784 diff --git a/models/merge/buffer_combined_dress.bin b/models/merge/buffer_combined_dress.bin new file mode 100644 index 0000000000000000000000000000000000000000..5a7cd1f5c251230a7d4927dcf0489aead8c6299b --- /dev/null +++ b/models/merge/buffer_combined_dress.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:95d60b41b4568307d86023838a4d17e80d50b2ca91c4fe7c6ea18c614f69b0c4 +size 228304 diff --git a/models/merge/buffer_combined_maid_hair.bin b/models/merge/buffer_combined_maid_hair.bin new file mode 100644 index 0000000000000000000000000000000000000000..18faec0e6ddb04269f846a2f65127603ca06519e --- /dev/null +++ b/models/merge/buffer_combined_maid_hair.bin @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f871452037d96fa6d306bc2e3b6c11420c9891cee4796cc26cf53987c143a59 +size 101808 diff --git a/models/merge/output.gltf b/models/merge/output.gltf new file mode 100644 index 0000000000000000000000000000000000000000..c4d68b9c23a89dd9541d9fb7f5a5d400522525d6 --- /dev/null +++ b/models/merge/output.gltf @@ -0,0 +1 @@ +{"accessors":[{"bufferView":21,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999997615814209,0.9999999403953552],"min":[0.9999999403953552,0.9999997615814209,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandIndex2_StandPose_2","type":"VEC3"},{"bufferView":0,"byteOffset":12,"componentType":5126,"count":3340,"max":[0.9999616742134094,0.9999489784240723,0.999893069267273],"min":[-0.9999616742134094,-0.9999061226844788,-0.9999434351921082],"name":"accessor_buffer_F010_Saber.003_1","type":"VEC3"},{"bufferView":29,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-7.683411951120434e-8,-6.379559636116028e-8,-6.495974957942963e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_StandPose_1","type":"VEC4"},{"bufferView":204,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999998807907104,0.9999998211860657],"min":[0.9999998211860657,0.9999998807907104,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_StandPose_2","type":"VEC3"},{"bufferView":185,"byteOffset":0,"componentType":5126,"count":2,"max":[5.2474209866204546e-8,0,1.1175870895385742e-8,1],"min":[5.2474209866204546e-8,-6.693881005048752e-9,1.1175870895385742e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_StandPose_1","type":"VEC4"},{"bufferView":49,"byteOffset":0,"componentType":5126,"count":2,"max":[0.08421491086483002,1.9935276508331299,0],"min":[0.08421491086483002,1.9935276508331299,-0.000014662742614746094],"name":"accessor_buffer_mixamorig:RightHandThumb3_StandPose_0","type":"VEC3"},{"bufferView":99,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000000238418579,0.9999999403953552,1],"min":[1.000000238418579,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHand_StandPose_2","type":"VEC3"},{"bufferView":143,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9955630898475647],"min":[-0.04229239746928215,-0.012712083756923676,-0.08309076726436615,0.9955630898475647],"name":"accessor_buffer_mixamorig:Spine_StandPose_1","type":"VEC4"},{"bufferView":147,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"min":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex1_StandPose_2","type":"VEC3"},{"bufferView":78,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"min":[0.9999998807907104,0.9999998807907104,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandMiddle1_StandPose_2","type":"VEC3"},{"bufferView":205,"byteOffset":0,"componentType":5126,"count":52,"max":[1.0011157989501953,1.0004726648330688,0.37282806634902954,0,0.17913757264614105,1.0011159181594849,0.9939067363739014,0,0.9973942041397095,0.997998058795929,1.0011157989501953,0,36.08419418334961,95.18425750732422,139.18643188476562,1],"min":[-1.0009628534317017,-1.000463843345642,-0.3957003951072693,0,-0.16209860146045685,-1.0005624294281006,-0.9972899556159973,0,-0.9975388050079346,-0.3510676324367523,-0.18741650879383087,0,-40.01988983154297,-137.4109344482422,-8.502774238586426,1],"name":"accessor_buffer_IBM_F010_Saber_Body_skin_0","type":"MAT4"},{"bufferView":47,"byteOffset":0,"componentType":5126,"count":2,"max":[8.009372010064908e-8,0.00000805803392722737,0,1],"min":[8.009372010064908e-8,0.00000805803392722737,-2.0721923732480718e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_StandPose_1","type":"VEC4"},{"bufferView":46,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.706444263458252,7.450580596923828e-8],"min":[-1.4901161193847656e-8,4.706444263458252,7.450580596923828e-8],"name":"accessor_buffer_mixamorig:LeftToe_End_StandPose_0","type":"VEC3"},{"bufferView":173,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.4214385163645602e-8,-1.8440185556301003e-7,-1.564621925354004e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_StandPose_1","type":"VEC4"},{"bufferView":77,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0023135317023843527,0,0.01988971047103405,0.9997969269752502],"min":[0.0023135317023843527,-0.002278696047142148,0.01988971047103405,0.9997969269752502],"name":"accessor_buffer_mixamorig:RightHandMiddle1_StandPose_1","type":"VEC4"},{"bufferView":149,"byteOffset":0,"componentType":5126,"count":2,"max":[0.11862916499376297,0,0.10900042951107025,0.9868879914283752],"min":[0.11862916499376297,-0.009906747378408909,0.10900042951107025,0.9868879914283752],"name":"accessor_buffer_mixamorig:RightFoot_StandPose_1","type":"VEC4"},{"bufferView":88,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1800551414489746,0],"min":[-0.01788640022277832,2.1800551414489746,-0.000013709068298339844],"name":"accessor_buffer_mixamorig:LeftHandRing2_StandPose_0","type":"VEC3"},{"bufferView":139,"byteOffset":0,"componentType":5126,"count":2,"max":[0.000003874301910400391,20.857250213623047,0.5804516077041626],"min":[0.000003874301910400391,20.857250213623047,0.5804516077041626],"name":"accessor_buffer_mixamorig:HeadTop_End_StandPose_0","type":"VEC3"},{"bufferView":54,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_StandPose_2","type":"VEC3"},{"bufferView":57,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999999403953552],"min":[1,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHand_StandPose_2","type":"VEC3"},{"bufferView":187,"byteOffset":0,"componentType":5126,"count":2,"max":[4.470348358154297e-7,4.7125468254089355,0],"min":[4.470348358154297e-7,4.7125468254089355,-3.2223761081695557e-7],"name":"accessor_buffer_mixamorig:RightToe_End_StandPose_0","type":"VEC3"},{"bufferView":166,"byteOffset":0,"componentType":5126,"count":2,"max":[3.513521671295166,8.987075805664062,0],"min":[3.513521671295166,8.987075805664062,-0.09783673286437988],"name":"accessor_buffer_mixamorig:LeftShoulder_StandPose_0","type":"VEC3"},{"bufferView":130,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00334930419921875,1.9062483310699463,0],"min":[0.00334930419921875,1.9062483310699463,-0.0000021457672119140625],"name":"accessor_buffer_mixamorig:LeftHandIndex3_StandPose_0","type":"VEC3"},{"bufferView":109,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.535193920135498,0.000005602836608886719],"min":[-0.18290114402770996,1.535193920135498,0.000005602836608886719],"name":"accessor_buffer_mixamorig:RightHandThumb4_StandPose_0","type":"VEC3"},{"bufferView":103,"byteOffset":0,"componentType":5126,"count":2,"max":[5.960464477539063e-8,12.089048385620117,0],"min":[5.960464477539063e-8,12.089048385620117,-0.0000030994415283203125],"name":"accessor_buffer_mixamorig:LeftToeBase_StandPose_0","type":"VEC3"},{"bufferView":81,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"min":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing3_StandPose_2","type":"VEC3"},{"bufferView":41,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-1.3387762010097504e-7,-1.294538236606968e-7,-1.30385160446167e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_StandPose_1","type":"VEC4"},{"bufferView":6,"byteOffset":0,"componentType":5126,"count":2,"max":[0.03333333333333333],"min":[0],"name":"accessor_buffer_StandPose_time_0","type":"SCALAR"},{"bufferView":66,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999999403953552],"min":[0.9999999403953552,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightToeBase_StandPose_2","type":"VEC3"},{"bufferView":74,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.023999802768230438,0.024741610512137413,0.9972760081291199],"min":[-0.06521116197109222,0.023999802768230438,0.024741610512137413,0.9972760081291199],"name":"accessor_buffer_mixamorig:RightHandIndex3_StandPose_1","type":"VEC4"},{"bufferView":28,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9166375398635864,0],"min":[-0.024967104196548462,1.9166375398635864,-0.000004503875970840454],"name":"accessor_buffer_mixamorig:RightHandRing4_StandPose_0","type":"VEC3"},{"bufferView":179,"byteOffset":0,"componentType":5126,"count":2,"max":[0.3860045075416565,0,0,0.6795456409454346],"min":[0.3860045075416565,-0.5462846755981445,-0.30131596326828003,0.6795456409454346],"name":"accessor_buffer_mixamorig:RightArm_StandPose_1","type":"VEC4"},{"bufferView":58,"byteOffset":0,"componentType":5126,"count":2,"max":[0.890507698059082,5.982392311096191,0],"min":[0.890507698059082,5.982392311096191,-0.24304690957069397],"name":"accessor_buffer_mixamorig:LeftHandRing1_StandPose_0","type":"VEC3"},{"bufferView":156,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999998807907104],"min":[1,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftFoot_StandPose_2","type":"VEC3"},{"bufferView":7,"byteOffset":0,"componentType":5126,"count":2,"max":[0.09869170188903809,2.222598075866699,0.000017881393432617188],"min":[0.09869170188903809,2.222598075866699,0.000017881393432617188],"name":"accessor_buffer_mixamorig:RightHandThumb2_StandPose_0","type":"VEC3"},{"bufferView":155,"byteOffset":0,"componentType":5126,"count":2,"max":[0.33544424176216125,0.06004149094223976,0.08555153012275696,0.9362441897392273],"min":[0.33544424176216125,0.06004149094223976,0.08555153012275696,0.9362441897392273],"name":"accessor_buffer_mixamorig:LeftFoot_StandPose_1","type":"VEC4"},{"bufferView":60,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,1],"min":[0.9999999403953552,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHandRing1_StandPose_2","type":"VEC3"},{"bufferView":12,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999998807907104],"min":[1,0.9999999403953552,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky1_StandPose_2","type":"VEC3"},{"bufferView":163,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.770896911621094,0],"min":[-0.0000025033950805664062,22.770896911621094,-0.0000015497207641601562],"name":"accessor_buffer_mixamorig:RightForeArm_StandPose_0","type":"VEC3"},{"bufferView":45,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,0.9999999403953552],"min":[0.9999998807907104,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandPinky3_StandPose_2","type":"VEC3"},{"bufferView":193,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.778000831604004,0],"min":[-0.8287971019744873,5.778000831604004,-0.20809143781661987],"name":"accessor_buffer_mixamorig:RightHandRing1_StandPose_0","type":"VEC3"},{"bufferView":161,"byteOffset":0,"componentType":5126,"count":2,"max":[0.23361559212207794,0,0,0.9555493593215942],"min":[0.23361559212207794,-0.038398608565330505,-0.1757122427225113,0.9555493593215942],"name":"accessor_buffer_mixamorig:LeftHandPinky1_StandPose_1","type":"VEC4"},{"bufferView":22,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.9338507652282715,0],"min":[-0.6209769248962402,5.9338507652282715,-0.18956023454666138],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_StandPose_0","type":"VEC3"},{"bufferView":79,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9782490730285645,0],"min":[-0.004049777984619141,1.9782490730285645,-0.00004219263792037964],"name":"accessor_buffer_mixamorig:LeftHandRing3_StandPose_0","type":"VEC3"},{"bufferView":162,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,1.0000001192092896],"min":[0.9999999403953552,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandPinky1_StandPose_2","type":"VEC3"},{"bufferView":105,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,0.9999998807907104],"min":[0.9999998807907104,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftToeBase_StandPose_2","type":"VEC3"},{"bufferView":203,"byteOffset":0,"componentType":5126,"count":2,"max":[0.011158615350723267,0.00011168384662596509,0,0.999936580657959],"min":[0.011158615350723267,0.00011168384662596509,-0.0015345790889114141,0.999936580657959],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_StandPose_1","type":"VEC4"},{"bufferView":128,"byteOffset":0,"componentType":5126,"count":2,"max":[0.445891797542572,0.5477845668792725,0.3333956003189087,0.6244678497314453],"min":[0.445891797542572,0.5477845668792725,0.3333956003189087,0.6244678497314453],"name":"accessor_buffer_mixamorig:LeftArm_StandPose_1","type":"VEC4"},{"bufferView":192,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999998807907104],"min":[1,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandThumb3_StandPose_2","type":"VEC3"},{"bufferView":17,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.007720754016190767,0.04835978522896767,0.99878990650177],"min":[-0.0045347660779953,0.007720754016190767,0.04835978522896767,0.99878990650177],"name":"accessor_buffer_mixamorig:RightHandPinky2_StandPose_1","type":"VEC4"},{"bufferView":121,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5249905586242676,0.000002446584403514862],"min":[-0.0062285661697387695,1.5249905586242676,0.000002446584403514862],"name":"accessor_buffer_mixamorig:LeftHandPinky3_StandPose_0","type":"VEC3"},{"bufferView":4,"byteOffset":0,"componentType":5123,"count":5004,"max":[1175],"min":[0],"name":"accessor_buffer_F010_Saber.001_4","type":"SCALAR"},{"bufferView":102,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999999403953552],"min":[1,1.0000001192092896,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandPinky4_StandPose_2","type":"VEC3"},{"bufferView":148,"byteOffset":0,"componentType":5126,"count":2,"max":[3.5762786865234375e-7,41.85009002685547,0],"min":[3.5762786865234375e-7,41.85009002685547,-1.7881393432617188e-7],"name":"accessor_buffer_mixamorig:RightFoot_StandPose_0","type":"VEC3"},{"bufferView":3,"byteOffset":12,"componentType":5126,"count":1176,"max":[0.9913477301597595,0.9988032579421997,0.9995606541633606],"min":[-0.9913485050201416,-0.9999690651893616,-0.9874789118766785],"name":"accessor_buffer_F010_Saber.001_1","type":"VEC3"},{"bufferView":183,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999998807907104],"min":[1,0.9999999403953552,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_StandPose_2","type":"VEC3"},{"bufferView":106,"byteOffset":0,"componentType":5126,"count":2,"max":[0,100.59270477294922,0.07877415418624878],"min":[-0.5354928970336914,100.59270477294922,0.07877415418624878],"name":"accessor_buffer_mixamorig:Hips_StandPose_0","type":"VEC3"},{"bufferView":72,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001275539398193,1.000000238418579,1.0000001192092896],"min":[1.0001275539398193,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightUpLeg_StandPose_2","type":"VEC3"},{"bufferView":80,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9998988509178162],"min":[-0.01309253741055727,-0.00130636862013489,-0.005397016182541847,0.9998988509178162],"name":"accessor_buffer_mixamorig:LeftHandRing3_StandPose_1","type":"VEC4"},{"bufferView":101,"byteOffset":0,"componentType":5126,"count":2,"max":[1.7601996660232544e-7,0,3.166496753692627e-8,1],"min":[1.7601996660232544e-7,-5.960464477539063e-8,3.166496753692627e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_StandPose_1","type":"VEC4"},{"bufferView":108,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999999403953552],"min":[1,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:Hips_StandPose_2","type":"VEC3"},{"bufferView":142,"byteOffset":0,"componentType":5126,"count":2,"max":[4.470348358154297e-8,6.854506015777588,0],"min":[4.470348358154297e-8,6.854506015777588,-0.5485977530479431],"name":"accessor_buffer_mixamorig:Spine_StandPose_0","type":"VEC3"},{"bufferView":42,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing4_StandPose_2","type":"VEC3"},{"bufferView":122,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0029331406112760305,0,0,0.9999359250068665],"min":[0.0029331406112760305,-0.0019084879895672202,-0.010766708292067051,0.9999359250068665],"name":"accessor_buffer_mixamorig:LeftHandPinky3_StandPose_1","type":"VEC4"},{"bufferView":33,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999999403953552,0.9999999403953552],"min":[0.9999998211860657,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandIndex2_StandPose_2","type":"VEC3"},{"bufferView":120,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000117301940918,1.0000077486038208,1.0000001192092896],"min":[1.000117301940918,1.0000077486038208,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftUpLeg_StandPose_2","type":"VEC3"},{"bufferView":69,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightShoulder_StandPose_2","type":"VEC3"},{"bufferView":152,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.06037864461541176,0.9649360179901123],"min":[-0.003858969546854496,-0.2554173171520233,0.06037864461541176,0.9649360179901123],"name":"accessor_buffer_mixamorig:Head_StandPose_1","type":"VEC4"},{"bufferView":97,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000028312206268310547,19.023344039916992,0],"min":[0.0000028312206268310547,19.023344039916992,-0.0000014603137969970703],"name":"accessor_buffer_mixamorig:LeftHand_StandPose_0","type":"VEC3"},{"bufferView":73,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015056610107421875,2.0928592681884766,0.000019550323486328125],"min":[0.015056610107421875,2.0928592681884766,0.000019550323486328125],"name":"accessor_buffer_mixamorig:RightHandIndex3_StandPose_0","type":"VEC3"},{"bufferView":158,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.022089609876275063,0.9928248524665833],"min":[-0.11739522963762283,-0.005425058770924807,0.022089609876275063,0.9928248524665833],"name":"accessor_buffer_mixamorig:RightHandRing3_StandPose_1","type":"VEC4"},{"bufferView":14,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9944446682929993],"min":[-0.05767667666077614,-0.02014157362282276,-0.0857178345322609,0.9944446682929993],"name":"accessor_buffer_mixamorig:RightHandIndex1_StandPose_1","type":"VEC4"},{"bufferView":16,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009777307510375977,1.9066495895385742,0.000017259269952774048],"min":[0.009777307510375977,1.9066495895385742,0.000017259269952774048],"name":"accessor_buffer_mixamorig:RightHandPinky2_StandPose_0","type":"VEC3"},{"bufferView":61,"byteOffset":0,"componentType":5126,"count":2,"max":[0.011218547821044922,2.2008183002471924,0.000017702579498291016],"min":[0.011218547821044922,2.2008183002471924,0.000017702579498291016],"name":"accessor_buffer_mixamorig:RightHandMiddle3_StandPose_0","type":"VEC3"},{"bufferView":8,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.43302980065345764,0.060352127999067307,0.8952707052230835],"min":[-0.08563514798879623,0.43302980065345764,0.060352127999067307,0.8952707052230835],"name":"accessor_buffer_mixamorig:RightHandThumb2_StandPose_1","type":"VEC4"},{"bufferView":82,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.151768922805786,0],"min":[-0.018155336380004883,2.151768922805786,-0.000018805265426635742],"name":"accessor_buffer_mixamorig:LeftHandThumb2_StandPose_0","type":"VEC3"},{"bufferView":111,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999997615814209,0.9999998807907104],"min":[1.0000001192092896,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandThumb4_StandPose_2","type":"VEC3"},{"bufferView":53,"byteOffset":0,"componentType":5126,"count":2,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_StandPose_1","type":"VEC4"},{"bufferView":169,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.7723331451416,0],"min":[-0.000004410743713378906,22.7723331451416,-0.000003337860107421875],"name":"accessor_buffer_mixamorig:LeftForeArm_StandPose_0","type":"VEC3"},{"bufferView":39,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999999403953552],"min":[1,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandPinky2_StandPose_2","type":"VEC3"},{"bufferView":201,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999998211860657],"min":[0.9999999403953552,1,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb1_StandPose_2","type":"VEC3"},{"bufferView":153,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,1],"min":[0.9999999403953552,1,1],"name":"accessor_buffer_mixamorig:Head_StandPose_2","type":"VEC3"},{"bufferView":118,"byteOffset":0,"componentType":5126,"count":2,"max":[6.509200572967529,0,0],"min":[6.509200572967529,-3.808896780014038,-0.31935346126556396],"name":"accessor_buffer_mixamorig:LeftUpLeg_StandPose_0","type":"VEC3"},{"bufferView":64,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.033411979675293,0.000007703900337219238],"min":[-8.046627044677734e-7,12.033411979675293,0.000007703900337219238],"name":"accessor_buffer_mixamorig:RightToeBase_StandPose_0","type":"VEC3"},{"bufferView":3,"byteOffset":32,"componentType":5126,"count":1176,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_F010_Saber.001_3","type":"VEC3"},{"bufferView":75,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex3_StandPose_2","type":"VEC3"},{"bufferView":52,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_StandPose_0","type":"VEC3"},{"bufferView":91,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2484705448150635,0],"min":[-0.010962486267089844,2.2484705448150635,-0.000022351741790771484],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_StandPose_0","type":"VEC3"},{"bufferView":13,"byteOffset":0,"componentType":5126,"count":2,"max":[2.289440870285034,5.801686763763428,0.05065116286277771],"min":[2.289440870285034,5.801686763763428,0.05065116286277771],"name":"accessor_buffer_mixamorig:RightHandIndex1_StandPose_0","type":"VEC3"},{"bufferView":0,"byteOffset":32,"componentType":5126,"count":3340,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_F010_Saber.003_3","type":"VEC3"},{"bufferView":144,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,1.0000001192092896],"min":[0.9999998807907104,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:Spine_StandPose_2","type":"VEC3"},{"bufferView":63,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:RightHandMiddle3_StandPose_2","type":"VEC3"},{"bufferView":100,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.4578994512557983,0.00000864267349243164],"min":[-0.014496088027954102,1.4578994512557983,0.00000864267349243164],"name":"accessor_buffer_mixamorig:RightHandPinky4_StandPose_0","type":"VEC3"},{"bufferView":25,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8726470470428467,1.3422534465789795],"min":[-1.3880501985549927,1.8726470470428467,1.3422534465789795],"name":"accessor_buffer_mixamorig:LeftHandThumb1_StandPose_0","type":"VEC3"},{"bufferView":96,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"min":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandRing2_StandPose_2","type":"VEC3"},{"bufferView":37,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8280726671218872,0],"min":[-0.006534457206726074,1.8280726671218872,-0.000022076070308685303],"name":"accessor_buffer_mixamorig:LeftHandPinky2_StandPose_0","type":"VEC3"},{"bufferView":85,"byteOffset":0,"componentType":5126,"count":2,"max":[0,8.022483825683594,2.4586915969848633e-7],"min":[-2.086162567138672e-7,8.022483825683594,2.4586915969848633e-7],"name":"accessor_buffer_mixamorig:Spine1_StandPose_0","type":"VEC3"},{"bufferView":59,"byteOffset":0,"componentType":5126,"count":2,"max":[0.17236490547657013,0,0,0.9812019467353821],"min":[0.17236490547657013,-0.012992478907108307,-0.08581555634737015,0.9812019467353821],"name":"accessor_buffer_mixamorig:LeftHandRing1_StandPose_1","type":"VEC4"},{"bufferView":126,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,0.9999999403953552],"min":[1.0000001192092896,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:Neck_StandPose_2","type":"VEC3"},{"bufferView":168,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftShoulder_StandPose_2","type":"VEC3"},{"bufferView":68,"byteOffset":0,"componentType":5126,"count":2,"max":[0.7367445230484009,0,0.4499008059501648,0.24924233555793762],"min":[0.7367445230484009,-0.4389476180076599,0.4499008059501648,0.24924233555793762],"name":"accessor_buffer_mixamorig:RightShoulder_StandPose_1","type":"VEC4"},{"bufferView":127,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000010132789611816406,7.483722686767578,2.384185791015625e-7],"min":[0.0000010132789611816406,7.483722686767578,2.384185791015625e-7],"name":"accessor_buffer_mixamorig:LeftArm_StandPose_0","type":"VEC3"},{"bufferView":175,"byteOffset":0,"componentType":5126,"count":2,"max":[0.02568674087524414,2.3235573768615723,0.000004947185516357422],"min":[0.02568674087524414,2.3235573768615723,0.000004947185516357422],"name":"accessor_buffer_mixamorig:RightHandMiddle2_StandPose_0","type":"VEC3"},{"bufferView":35,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.3446042973773729e-7,-8.847564458847046e-8,-1.3969838619232178e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_StandPose_1","type":"VEC4"},{"bufferView":76,"byteOffset":0,"componentType":5126,"count":2,"max":[0.6151762008666992,5.987779140472412,0],"min":[0.6151762008666992,5.987779140472412,-0.25214096903800964],"name":"accessor_buffer_mixamorig:RightHandMiddle1_StandPose_0","type":"VEC3"},{"bufferView":5,"byteOffset":16,"componentType":5126,"count":1176,"max":[1,0.21810737252235413,0.0008118848782032728,0],"min":[0.7810807824134827,0,0,0],"name":"accessor_buffer_F010_Saber.001_skin_1","type":"VEC4"},{"bufferView":160,"byteOffset":0,"componentType":5126,"count":2,"max":[2.1123294830322266,5.1514129638671875,0],"min":[2.1123294830322266,5.1514129638671875,-0.10165001451969147],"name":"accessor_buffer_mixamorig:LeftHandPinky1_StandPose_0","type":"VEC3"},{"bufferView":3,"byteOffset":24,"componentType":5126,"count":1176,"max":[0.9074609279632568,0.9870719909667969],"min":[0.0168008916079998,0.018634021282196045],"name":"accessor_buffer_F010_Saber.001_2","type":"VEC2"},{"bufferView":51,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998807907104,1],"min":[1,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:RightHandThumb3_StandPose_2","type":"VEC3"},{"bufferView":48,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.000000238418579,1.000000238418579],"min":[1.0000001192092896,1.000000238418579,1.000000238418579],"name":"accessor_buffer_mixamorig:LeftToe_End_StandPose_2","type":"VEC3"},{"bufferView":5,"byteOffset":0,"componentType":5121,"count":1176,"max":[2,1,0,0],"min":[2,0,0,0],"name":"accessor_buffer_F010_Saber.001_skin_0","type":"VEC4"},{"bufferView":184,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01275944709777832,1.3817925453186035,0],"min":[0.01275944709777832,1.3817925453186035,-0.000007009599357843399],"name":"accessor_buffer_mixamorig:LeftHandPinky4_StandPose_0","type":"VEC3"},{"bufferView":116,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.08950763195753098,0,0.9837349057197571],"min":[-0.15563872456550598,0.08950763195753098,-0.005533887539058924,0.9837349057197571],"name":"accessor_buffer_mixamorig:LeftLeg_StandPose_1","type":"VEC4"},{"bufferView":114,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine2_StandPose_2","type":"VEC3"},{"bufferView":10,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.181236743927002,0],"min":[-2.0758252143859863,5.181236743927002,-0.1566818505525589],"name":"accessor_buffer_mixamorig:RightHandPinky1_StandPose_0","type":"VEC3"},{"bufferView":172,"byteOffset":0,"componentType":5126,"count":2,"max":[0.006499767303466797,1.6352322101593018,0.0000010728836059570312],"min":[0.006499767303466797,1.6352322101593018,0.0000010728836059570312],"name":"accessor_buffer_mixamorig:LeftHandIndex4_StandPose_0","type":"VEC3"},{"bufferView":104,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5489668846130371,0,0.009858776815235615,0.8354716300964355],"min":[0.5489668846130371,-0.022921225056052208,0.009858776815235615,0.8354716300964355],"name":"accessor_buffer_mixamorig:LeftToeBase_StandPose_1","type":"VEC4"},{"bufferView":195,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"min":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandRing1_StandPose_2","type":"VEC3"},{"bufferView":19,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.002559185028076,0],"min":[-0.009859561920166016,2.002559185028076,-0.0000029802322387695312],"name":"accessor_buffer_mixamorig:LeftHandIndex2_StandPose_0","type":"VEC3"},{"bufferView":27,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,0.9999998807907104,0.9999999403953552],"min":[0.9999997615814209,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandThumb1_StandPose_2","type":"VEC3"},{"bufferView":141,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999999403953552],"min":[1,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:HeadTop_End_StandPose_2","type":"VEC3"},{"bufferView":50,"byteOffset":0,"componentType":5126,"count":2,"max":[0.031758811324834824,0.034727565944194794,0,0.9914401173591614],"min":[0.031758811324834824,0.034727565944194794,-0.12178684026002884,0.9914401173591614],"name":"accessor_buffer_mixamorig:RightHandThumb3_StandPose_1","type":"VEC4"},{"bufferView":0,"byteOffset":24,"componentType":5126,"count":3340,"max":[0.9826270341873169,0.9952785298228264],"min":[0.004950257949531078,0.007562220096588135],"name":"accessor_buffer_F010_Saber.003_2","type":"VEC2"},{"bufferView":65,"byteOffset":0,"componentType":5126,"count":2,"max":[0.3562554121017456,0.05348851531744003,0,0.9326991438865662],"min":[0.3562554121017456,0.05348851531744003,-0.017129110172390938,0.9326991438865662],"name":"accessor_buffer_mixamorig:RightToeBase_StandPose_1","type":"VEC4"},{"bufferView":159,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"min":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandRing3_StandPose_2","type":"VEC3"},{"bufferView":18,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999999403953552,0.9999998807907104],"min":[1.0000001192092896,0.9999999403953552,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky2_StandPose_2","type":"VEC3"},{"bufferView":167,"byteOffset":0,"componentType":5126,"count":2,"max":[0.6251413226127625,0.5896649360656738,0,0.28389137983322144],"min":[0.6251413226127625,0.5896649360656738,-0.42532265186309814,0.28389137983322144],"name":"accessor_buffer_mixamorig:LeftShoulder_StandPose_1","type":"VEC4"},{"bufferView":119,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.9900268316268921,0.13418997824192047],"min":[-0.042684633284807205,-0.0042261360213160515,0.9900268316268921,0.13418997824192047],"name":"accessor_buffer_mixamorig:LeftUpLeg_StandPose_1","type":"VEC4"},{"bufferView":181,"byteOffset":0,"componentType":5126,"count":2,"max":[0.029507160186767578,2.085662364959717,0.0000034570693969726562],"min":[0.029507160186767578,2.085662364959717,0.0000034570693969726562],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_StandPose_0","type":"VEC3"},{"bufferView":131,"byteOffset":0,"componentType":5126,"count":2,"max":[0.016574677079916,0,0,0.9998615384101868],"min":[0.016574677079916,-0.00012758278171531856,-0.0014876582426950336,0.9998615384101868],"name":"accessor_buffer_mixamorig:LeftHandIndex3_StandPose_1","type":"VEC4"},{"bufferView":20,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999791979789734],"min":[-0.006280909758061171,-0.00010060171189252287,-0.0014849783619865775,0.9999791979789734],"name":"accessor_buffer_mixamorig:LeftHandIndex2_StandPose_1","type":"VEC4"},{"bufferView":137,"byteOffset":0,"componentType":5126,"count":2,"max":[2.473825588822365e-7,0,1.862645149230957e-9,1],"min":[2.473825588822365e-7,-1.6530975699424744e-8,1.862645149230957e-9,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_StandPose_1","type":"VEC4"},{"bufferView":202,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2824928760528564,0],"min":[-0.01855182647705078,2.2824928760528564,-0.000017464160919189453],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_StandPose_0","type":"VEC3"},{"bufferView":136,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.002349376678467,0],"min":[-0.036908626556396484,2.002349376678467,-0.000005584210157394409],"name":"accessor_buffer_mixamorig:RightHandMiddle4_StandPose_0","type":"VEC3"},{"bufferView":23,"byteOffset":0,"componentType":5126,"count":2,"max":[0.05844174697995186,0.0010015094885602593,0.010910611599683762,0.9982306957244873],"min":[0.05844174697995186,0.0010015094885602593,0.010910611599683762,0.9982306957244873],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_StandPose_1","type":"VEC4"},{"bufferView":31,"byteOffset":0,"componentType":5126,"count":2,"max":[0.029896020889282227,2.250403881072998,0.0000022351741790771484],"min":[0.029896020889282227,2.250403881072998,0.0000022351741790771484],"name":"accessor_buffer_mixamorig:RightHandIndex2_StandPose_0","type":"VEC3"},{"bufferView":83,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9942184090614319],"min":[-0.009276462718844414,-0.01345310639590025,-0.10612602531909943,0.9942184090614319],"name":"accessor_buffer_mixamorig:LeftHandThumb2_StandPose_1","type":"VEC4"},{"bufferView":132,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandIndex3_StandPose_2","type":"VEC3"},{"bufferView":112,"byteOffset":0,"componentType":5126,"count":2,"max":[2.60770320892334e-7,9.168571472167969,0],"min":[2.60770320892334e-7,9.168571472167969,-0.000004279427230358124],"name":"accessor_buffer_mixamorig:Spine2_StandPose_0","type":"VEC3"},{"bufferView":98,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9453137516975403],"min":[-0.1275932788848877,-0.2732340097427368,-0.12427811324596405,0.9453137516975403],"name":"accessor_buffer_mixamorig:LeftHand_StandPose_1","type":"VEC4"},{"bufferView":26,"byteOffset":0,"componentType":5126,"count":2,"max":[0.12967029213905334,0.1232340857386589,0.21974103152751923,0.9590166211128235],"min":[0.12967029213905334,0.1232340857386589,0.21974103152751923,0.9590166211128235],"name":"accessor_buffer_mixamorig:LeftHandThumb1_StandPose_1","type":"VEC4"},{"bufferView":151,"byteOffset":0,"componentType":5126,"count":2,"max":[2.980232238769531e-7,4.30869722366333,0.11991274356842041],"min":[2.980232238769531e-7,4.30869722366333,0.11991274356842041],"name":"accessor_buffer_mixamorig:Head_StandPose_0","type":"VEC3"},{"bufferView":55,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000012516975402832031,19.027145385742188,0.0000032186508178710938],"min":[0.0000012516975402832031,19.027145385742188,0.0000032186508178710938],"name":"accessor_buffer_mixamorig:RightHand_StandPose_0","type":"VEC3"},{"bufferView":135,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,1,0.9999999403953552],"min":[0.9999998211860657,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightLeg_StandPose_2","type":"VEC3"},{"bufferView":164,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.6866067051887512],"min":[-0.2655738294124603,-0.630494236946106,-0.24600598216056824,0.6866067051887512],"name":"accessor_buffer_mixamorig:RightForeArm_StandPose_1","type":"VEC4"},{"bufferView":194,"byteOffset":0,"componentType":5126,"count":2,"max":[0.028195995837450027,0.012115469202399254,0.18897251784801483,0.9815027713775635],"min":[0.028195995837450027,0.012115469202399254,0.18897251784801483,0.9815027713775635],"name":"accessor_buffer_mixamorig:RightHandRing1_StandPose_1","type":"VEC4"},{"bufferView":145,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.091197967529297,0.09324419498443604],"min":[-2.381840944290161,6.091197967529297,0.09324419498443604],"name":"accessor_buffer_mixamorig:LeftHandIndex1_StandPose_0","type":"VEC3"},{"bufferView":38,"byteOffset":0,"componentType":5126,"count":2,"max":[0.08350761234760284,0.00025150523288175464,0,0.9964479804039001],"min":[0.08350761234760284,0.00025150523288175464,-0.010855857282876968,0.9964479804039001],"name":"accessor_buffer_mixamorig:LeftHandPinky2_StandPose_1","type":"VEC4"},{"bufferView":174,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1.0000001192092896],"min":[1,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandIndex4_StandPose_2","type":"VEC3"},{"bufferView":95,"byteOffset":0,"componentType":5126,"count":2,"max":[0.1252118945121765,0,0.039776429533958435,0.991308867931366],"min":[0.1252118945121765,-0.006825051736086607,0.039776429533958435,0.991308867931366],"name":"accessor_buffer_mixamorig:RightHandRing2_StandPose_1","type":"VEC4"},{"bufferView":43,"byteOffset":0,"componentType":5126,"count":2,"max":[0.004716396331787109,1.5559489727020264,0.00001634657382965088],"min":[0.004716396331787109,1.5559489727020264,0.00001634657382965088],"name":"accessor_buffer_mixamorig:RightHandPinky3_StandPose_0","type":"VEC3"},{"bufferView":117,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftLeg_StandPose_2","type":"VEC3"},{"bufferView":154,"byteOffset":0,"componentType":5126,"count":2,"max":[0,41.84933090209961,1.1920928955078125e-7],"min":[-2.384185791015625e-7,41.84933090209961,1.1920928955078125e-7],"name":"accessor_buffer_mixamorig:LeftFoot_StandPose_0","type":"VEC3"},{"bufferView":56,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21364502608776093,0.6414198875427246,0,0.7329153418540955],"min":[0.21364502608776093,0.6414198875427246,-0.07596980780363083,0.7329153418540955],"name":"accessor_buffer_mixamorig:RightHand_StandPose_1","type":"VEC4"},{"bufferView":140,"byteOffset":0,"componentType":5126,"count":2,"max":[9.313223525708736e-10,0,4.656612873077393e-10,1],"min":[9.313223525708736e-10,-6.9849201977945086e-9,4.656612873077393e-10,1],"name":"accessor_buffer_mixamorig:HeadTop_End_StandPose_1","type":"VEC4"},{"bufferView":125,"byteOffset":0,"componentType":5126,"count":2,"max":[0.027168013155460358,0,0.0248433668166399,0.9659765958786011],"min":[0.027168013155460358,-0.2559962570667267,0.0248433668166399,0.9659765958786011],"name":"accessor_buffer_mixamorig:Neck_StandPose_1","type":"VEC4"},{"bufferView":1,"byteOffset":0,"componentType":5123,"count":14376,"max":[3339],"min":[0],"name":"accessor_buffer_F010_Saber.003_4","type":"SCALAR"},{"bufferView":86,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.000958565971814096,0,0.9999093413352966],"min":[-0.00485301623120904,0.000958565971814096,-0.012532252818346024,0.9999093413352966],"name":"accessor_buffer_mixamorig:Spine1_StandPose_1","type":"VEC4"},{"bufferView":191,"byteOffset":0,"componentType":5126,"count":2,"max":[0.008361834101378918,0,0,0.9942134022712708],"min":[0.008361834101378918,-0.012613668106496334,-0.10635195672512054,0.9942134022712708],"name":"accessor_buffer_mixamorig:LeftHandThumb3_StandPose_1","type":"VEC4"},{"bufferView":176,"byteOffset":0,"componentType":5126,"count":2,"max":[0.058169297873973846,0.014287803322076797,0.030345715582370758,0.9977431297302246],"min":[0.058169297873973846,0.014287803322076797,0.030345715582370758,0.9977431297302246],"name":"accessor_buffer_mixamorig:RightHandMiddle2_StandPose_1","type":"VEC4"},{"bufferView":89,"byteOffset":0,"componentType":5126,"count":2,"max":[0.03584354370832443,0,0,0.999342679977417],"min":[0.03584354370832443,-0.00003864036261802539,-0.00542936846613884,0.999342679977417],"name":"accessor_buffer_mixamorig:LeftHandRing2_StandPose_1","type":"VEC4"},{"bufferView":32,"byteOffset":0,"componentType":5126,"count":2,"max":[0.07640352100133896,0.0164929311722517,0.013180557638406754,0.9968534708023071],"min":[0.07640352100133896,0.0164929311722517,0.013180557638406754,0.9968534708023071],"name":"accessor_buffer_mixamorig:RightHandIndex2_StandPose_1","type":"VEC4"},{"bufferView":115,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.049686431884766,8.940696716308594e-8],"min":[-2.980232238769531e-7,45.049686431884766,8.940696716308594e-8],"name":"accessor_buffer_mixamorig:LeftLeg_StandPose_0","type":"VEC3"},{"bufferView":123,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1],"min":[1,1.0000001192092896,1],"name":"accessor_buffer_mixamorig:LeftHandPinky3_StandPose_2","type":"VEC3"},{"bufferView":199,"byteOffset":0,"componentType":5126,"count":2,"max":[1.4313478469848633,1.948871374130249,1.373744249343872],"min":[1.4313478469848633,1.948871374130249,1.373744249343872],"name":"accessor_buffer_mixamorig:RightHandThumb1_StandPose_0","type":"VEC3"},{"bufferView":84,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999998211860657,0.9999999403953552],"min":[0.9999998807907104,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandThumb2_StandPose_2","type":"VEC3"},{"bufferView":44,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9798688888549805],"min":[-0.19954150915145874,-0.0002482635900378227,-0.006335121113806963,0.9798688888549805],"name":"accessor_buffer_mixamorig:RightHandPinky3_StandPose_1","type":"VEC4"},{"bufferView":190,"byteOffset":0,"componentType":5126,"count":2,"max":[0.07794666290283203,2.109323263168335,0],"min":[0.07794666290283203,2.109323263168335,-0.000003039836883544922],"name":"accessor_buffer_mixamorig:LeftHandThumb3_StandPose_0","type":"VEC3"},{"bufferView":182,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.2154067731180476e-8,0,1],"min":[-3.946480120475826e-8,5.2154067731180476e-8,-2.86672685589906e-9,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_StandPose_1","type":"VEC4"},{"bufferView":94,"byteOffset":0,"componentType":5126,"count":2,"max":[0.008641242980957031,2.2196125984191895,0.0000010132789611816406],"min":[0.008641242980957031,2.2196125984191895,0.0000010132789611816406],"name":"accessor_buffer_mixamorig:RightHandRing2_StandPose_0","type":"VEC3"},{"bufferView":9,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999998807907104,0.9999999403953552],"min":[0.9999998807907104,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandThumb2_StandPose_2","type":"VEC3"},{"bufferView":107,"byteOffset":0,"componentType":5126,"count":2,"max":[0.010021046735346317,0.6779959797859192,0.0857105553150177,0.7299826741218567],"min":[0.010021046735346317,0.6779959797859192,0.0857105553150177,0.7299826741218567],"name":"accessor_buffer_mixamorig:Hips_StandPose_1","type":"VEC4"},{"bufferView":11,"byteOffset":0,"componentType":5126,"count":2,"max":[0.17040301859378815,0.042156320065259933,0.33821991086006165,0.9245501756668091],"min":[0.17040301859378815,0.042156320065259933,0.33821991086006165,0.9245501756668091],"name":"accessor_buffer_mixamorig:RightHandPinky1_StandPose_1","type":"VEC4"},{"bufferView":34,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9040591716766357,0],"min":[-0.04496002197265625,1.9040591716766357,-0.000012211501598358154],"name":"accessor_buffer_mixamorig:RightHandIndex4_StandPose_0","type":"VEC3"},{"bufferView":165,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1],"min":[1,1.0000001192092896,1],"name":"accessor_buffer_mixamorig:RightForeArm_StandPose_2","type":"VEC3"},{"bufferView":36,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1.0000001192092896,1.0000001192092896],"min":[0.9999998807907104,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex4_StandPose_2","type":"VEC3"},{"bufferView":170,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.2740827798843384,0.4902119040489197,0.822180449962616],"min":[-0.0926835685968399,0.2740827798843384,0.4902119040489197,0.822180449962616],"name":"accessor_buffer_mixamorig:LeftForeArm_StandPose_1","type":"VEC4"},{"bufferView":71,"byteOffset":0,"componentType":5126,"count":2,"max":[0.09324588626623154,0.25413286685943604,0.9626567959785461,0],"min":[0.09324588626623154,0.25413286685943604,0.9626567959785461,-0.003700426546856761],"name":"accessor_buffer_mixamorig:RightUpLeg_StandPose_1","type":"VEC4"},{"bufferView":206,"byteOffset":0,"componentType":5126,"count":3,"max":[1.0011157989501953,4.722245511290524e-11,1.886907947598604e-12,0,3.766052140280474e-12,1.0011159181594849,0.07986891269683838,0,1.8865089611991293e-12,0,1.0011157989501953,0,0,0,2.1228513717651367,1],"min":[1.0011157989501953,-3.766054742365688e-12,2.0371814713867806e-16,0,-4.722247592958695e-11,0.9979248046875,1.5544334530659398e-7,0,-2.0430401600549222e-16,-0.07986891269683838,0.9979247450828552,0,-0.007442474830895662,-137.4109344482422,-8.502774238586426,1],"name":"accessor_buffer_IBM_F010_Saber_Face_skin_0","type":"MAT4"},{"bufferView":157,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0163266658782959,2.091181755065918,0],"min":[0.0163266658782959,2.091181755065918,-6.631016731262207e-7],"name":"accessor_buffer_mixamorig:RightHandRing3_StandPose_0","type":"VEC3"},{"bufferView":198,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000000238418579,1.0000001192092896,1.0000001192092896],"min":[1.000000238418579,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb4_StandPose_2","type":"VEC3"},{"bufferView":177,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandMiddle2_StandPose_2","type":"VEC3"},{"bufferView":196,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8846020698547363,0.000006258487701416016],"min":[-0.05978739261627197,1.8846020698547363,0.000006258487701416016],"name":"accessor_buffer_mixamorig:LeftHandThumb4_StandPose_0","type":"VEC3"},{"bufferView":70,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[-6.509200572967529,-3.808901071548462,-0.4497387707233429],"name":"accessor_buffer_mixamorig:RightUpLeg_StandPose_0","type":"VEC3"},{"bufferView":178,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000013709068298339844,7.483715534210205,0.000008225440979003906],"min":[0.0000013709068298339844,7.483715534210205,0.000008225440979003906],"name":"accessor_buffer_mixamorig:RightArm_StandPose_0","type":"VEC3"},{"bufferView":87,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:Spine1_StandPose_2","type":"VEC3"},{"bufferView":146,"byteOffset":0,"componentType":5126,"count":2,"max":[0.05435940623283386,0.004004946909844875,0.06862703710794449,0.9961522817611694],"min":[0.05435940623283386,0.004004946909844875,0.06862703710794449,0.9961522817611694],"name":"accessor_buffer_mixamorig:LeftHandIndex1_StandPose_1","type":"VEC4"},{"bufferView":24,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,1,1],"min":[0.9999998211860657,1,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_StandPose_2","type":"VEC3"},{"bufferView":110,"byteOffset":0,"componentType":5126,"count":2,"max":[5.1222748709278676e-8,0,2.374872920540838e-8,1],"min":[5.1222748709278676e-8,-1.0244548320770264e-8,2.374872920540838e-8,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_StandPose_1","type":"VEC4"},{"bufferView":180,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1.0000001192092896],"min":[1,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightArm_StandPose_2","type":"VEC3"},{"bufferView":30,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,1],"min":[1.0000001192092896,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:RightHandRing4_StandPose_2","type":"VEC3"},{"bufferView":200,"byteOffset":0,"componentType":5126,"count":2,"max":[0.11761661618947983,0,0,0.900482714176178],"min":[0.11761661618947983,-0.07650640606880188,-0.41163578629493713,0.900482714176178],"name":"accessor_buffer_mixamorig:RightHandThumb1_StandPose_1","type":"VEC4"},{"bufferView":0,"byteOffset":0,"componentType":5126,"count":3340,"max":[64.78005981445312,158.17137145996094,13.949725151062012],"min":[-64.76519775390625,0.9852595329284668,-11.520842552185059],"name":"accessor_buffer_F010_Saber.003_0","type":"VEC3"},{"bufferView":90,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1.0000001192092896],"min":[1,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing2_StandPose_2","type":"VEC3"},{"bufferView":197,"byteOffset":0,"componentType":5126,"count":2,"max":[4.377215390150013e-8,0,0,1],"min":[4.377215390150013e-8,-1.9185242194907914e-7,-9.26665819633854e-8,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_StandPose_1","type":"VEC4"},{"bufferView":15,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1.0000001192092896],"min":[1,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex1_StandPose_2","type":"VEC3"},{"bufferView":40,"byteOffset":0,"componentType":5126,"count":2,"max":[0.021942138671875,1.7619147300720215,0.000006273388862609863],"min":[0.021942138671875,1.7619147300720215,0.000006273388862609863],"name":"accessor_buffer_mixamorig:LeftHandRing4_StandPose_0","type":"VEC3"},{"bufferView":171,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999999403953552],"min":[0.9999999403953552,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftForeArm_StandPose_2","type":"VEC3"},{"bufferView":124,"byteOffset":0,"componentType":5126,"count":2,"max":[3.5762786865234375e-7,10.314629554748535,8.195638656616211e-7],"min":[3.5762786865234375e-7,10.314629554748535,8.195638656616211e-7],"name":"accessor_buffer_mixamorig:Neck_StandPose_0","type":"VEC3"},{"bufferView":138,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_StandPose_2","type":"VEC3"},{"bufferView":3,"byteOffset":0,"componentType":5126,"count":1176,"max":[7.576313018798828,154.56195068359375,7.6111836433410645],"min":[-7.576391220092773,136.62216186523438,-2.516939640045166],"name":"accessor_buffer_F010_Saber.001_0","type":"VEC3"},{"bufferView":67,"byteOffset":0,"componentType":5126,"count":2,"max":[0,8.988415718078613,0],"min":[-3.513521671295166,8.988415718078613,-0.1145542562007904],"name":"accessor_buffer_mixamorig:RightShoulder_StandPose_0","type":"VEC3"},{"bufferView":129,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:LeftArm_StandPose_2","type":"VEC3"},{"bufferView":134,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.008150998502969742,0.6793254613876343],"min":[-0.733644425868988,-0.014712016098201275,0.008150998502969742,0.6793254613876343],"name":"accessor_buffer_mixamorig:RightLeg_StandPose_1","type":"VEC4"},{"bufferView":113,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00094512541545555,0,0.9999086856842041],"min":[-0.005003147292882204,0.00094512541545555,-0.012520255520939827,0.9999086856842041],"name":"accessor_buffer_mixamorig:Spine2_StandPose_1","type":"VEC4"},{"bufferView":189,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999999403953552,0.9999999403953552],"min":[0.9999998211860657,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightToe_End_StandPose_2","type":"VEC3"},{"bufferView":2,"byteOffset":16,"componentType":5126,"count":3340,"max":[1,0.49809977412223816,0.31396016478538513,0.20796984434127808],"min":[0.30062898993492126,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_1","type":"VEC4"},{"bufferView":188,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-3.492460010079412e-8,-0.000008229400918935426,-3.247988189514217e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_StandPose_1","type":"VEC4"},{"bufferView":92,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9973621368408203],"min":[-0.07256873697042465,-0.0005480631371028721,-0.0015104126650840044,0.9973621368408203],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_StandPose_1","type":"VEC4"},{"bufferView":186,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999999403953552],"min":[1,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandPinky4_StandPose_2","type":"VEC3"},{"bufferView":2,"byteOffset":0,"componentType":5121,"count":3340,"max":[51,51,51,51],"min":[0,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_0","type":"VEC4"},{"bufferView":62,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.005280370358377695,0.0052629136480391026,0.990699291229248],"min":[-0.1358652412891388,0.005280370358377695,0.0052629136480391026,0.990699291229248],"name":"accessor_buffer_mixamorig:RightHandMiddle3_StandPose_1","type":"VEC4"},{"bufferView":133,"byteOffset":0,"componentType":5126,"count":2,"max":[4.172325134277344e-7,45.05035400390625,3.91155481338501e-7],"min":[4.172325134277344e-7,45.05035400390625,3.91155481338501e-7],"name":"accessor_buffer_mixamorig:RightLeg_StandPose_0","type":"VEC3"},{"bufferView":93,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"min":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_StandPose_2","type":"VEC3"},{"bufferView":150,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,1],"min":[0.9999999403953552,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:RightFoot_StandPose_2","type":"VEC3"},{"bufferView":293,"byteOffset":0,"componentType":5126,"count":2,"max":[0.019991455599665642,0,0.05151980370283127,0.9982961416244507],"min":[0.019991455599665642,-0.018730632960796356,0.05151980370283127,0.9982961416244507],"name":"accessor_buffer_mixamorig:RightHand_TPose_1","type":"VEC4"},{"bufferView":292,"byteOffset":0,"componentType":5126,"count":2,"max":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"min":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"name":"accessor_buffer_mixamorig:RightHand_TPose_0","type":"VEC3"},{"bufferView":273,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1],"min":[1,1.0000001192092896,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_2","type":"VEC3"},{"bufferView":231,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1.0000001192092896],"min":[1,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_2","type":"VEC3"},{"bufferView":320,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005565229366766289,0,0.9994112253189087],"min":[-1.9569284859244362e-7,0.00005565229366766289,-0.034311242401599884,0.9994112253189087],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_1","type":"VEC4"},{"bufferView":212,"byteOffset":0,"componentType":5126,"count":2,"max":[4.656612517806025e-8,0,0,1],"min":[4.656612517806025e-8,-1.9324940581100236e-7,-4.982575063650074e-8,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_1","type":"VEC4"},{"bufferView":262,"byteOffset":0,"componentType":5126,"count":2,"max":[0,7.4837236404418945,0],"min":[-5.960464477539063e-8,7.4837236404418945,-0.0000017881393432617188],"name":"accessor_buffer_mixamorig:LeftArm_TPose_0","type":"VEC3"},{"bufferView":211,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8846017122268677,0],"min":[-0.0597844123840332,1.8846017122268677,-0.00000426173210144043],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_0","type":"VEC3"},{"bufferView":246,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1.0000001192092896],"min":[1,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_2","type":"VEC3"},{"bufferView":378,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1],"min":[1,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_2","type":"VEC3"},{"bufferView":216,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"min":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_2","type":"VEC3"},{"bufferView":232,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.7125468254089355,0],"min":[-6.258487701416016e-7,4.7125468254089355,-5.960464477539063e-8],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_0","type":"VEC3"},{"bufferView":340,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.0912089347839355,0.09324643015861511],"min":[-2.381847381591797,6.0912089347839355,0.09324643015861511],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_0","type":"VEC3"},{"bufferView":261,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightArm_TPose_2","type":"VEC3"},{"bufferView":296,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0011933766072615981,0,0.9998803734779358],"min":[-0.000009156999112747144,0.0011933766072615981,-0.015421011485159397,0.9998803734779358],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_1","type":"VEC4"},{"bufferView":256,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0023322105407715,0],"min":[-0.03690838813781738,2.0023322105407715,-0.0000020437873899936676],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":287,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000016051130842242856,0,0.9999784827232361,0.0061686099506914616],"min":[0.0000016051130842242856,-0.0022346421610563993,0.9999784827232361,0.0061686099506914616],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_1","type":"VEC4"},{"bufferView":215,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00034277912345714867,0,0.9999790191650391],"min":[-0.0000010370887366661918,0.00034277912345714867,-0.0064829993061721325,0.9999790191650391],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_1","type":"VEC4"},{"bufferView":219,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999998807907104],"min":[1,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_2","type":"VEC3"},{"bufferView":234,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_2","type":"VEC3"},{"bufferView":311,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999995231628418],"min":[-0.0000017708856603348977,-0.00008915702346712351,-0.0010598038788884878,0.9999995231628418],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_1","type":"VEC4"},{"bufferView":277,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0025572776794434,0],"min":[-0.009857624769210815,2.0025572776794434,-0.000008842733222991228],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_0","type":"VEC3"},{"bufferView":327,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_2","type":"VEC3"},{"bufferView":260,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9826892614364624],"min":[-0.1844879388809204,-0.0005821919767186046,-0.016901638358831406,0.9826892614364624],"name":"accessor_buffer_mixamorig:RightArm_TPose_1","type":"VEC4"},{"bufferView":336,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:Spine_TPose_2","type":"VEC3"},{"bufferView":250,"byteOffset":0,"componentType":5126,"count":2,"max":[0,41.84932327270508,0],"min":[-1.1807060218416154e-7,41.84932327270508,-2.8172507882118225e-7],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_0","type":"VEC3"},{"bufferView":207,"byteOffset":12,"componentType":5126,"count":1109,"max":[0.9993376135826111,0.9996159672737122,0.9999437928199768],"min":[-0.9993394613265991,-0.9995570182800293,-0.9992420077323914],"name":"accessor_buffer_F010_Saber.003_1","type":"VEC3"},{"bufferView":390,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Hips_TPose_2","type":"VEC3"},{"bufferView":380,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.012829817831516266,0.9995352625846863],"min":[-0.02764846757054329,-0.000389853521483019,0.012829817831516266,0.9995352625846863],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_1","type":"VEC4"},{"bufferView":237,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_2","type":"VEC3"},{"bufferView":317,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.833076872046149e-8,7.194104423291492e-9,1],"min":[-4.388131102928128e-8,4.833076872046149e-8,7.194104423291492e-9,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":375,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1.0000001192092896],"min":[1,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_2","type":"VEC3"},{"bufferView":303,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"min":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":338,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.009517651982605457,0.9999545812606812],"min":[-0.000002889829829655355,-0.00046613236190751195,0.009517651982605457,0.9999545812606812],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":324,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_TPose_2","type":"VEC3"},{"bufferView":207,"byteOffset":0,"componentType":5126,"count":1109,"max":[11.429483413696289,164.35842895507812,10.030672073364258],"min":[-11.429343223571777,130.6600341796875,-14.70002269744873],"name":"accessor_buffer_F010_Saber.003_0","type":"VEC3"},{"bufferView":272,"byteOffset":0,"componentType":5126,"count":2,"max":[1.7445827893425303e-7,0,3.6372512113302946e-8,1],"min":[1.7445827893425303e-7,-6.26357206101602e-8,3.6372512113302946e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_1","type":"VEC4"},{"bufferView":263,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.001648154342547059,0.014273405075073242,0.9826878309249878],"min":[-0.1847110539674759,0.001648154342547059,0.014273405075073242,0.9826878309249878],"name":"accessor_buffer_mixamorig:LeftArm_TPose_1","type":"VEC4"},{"bufferView":213,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000000238418579,1,1.0000001192092896],"min":[1.000000238418579,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_2","type":"VEC3"},{"bufferView":389,"byteOffset":0,"componentType":5126,"count":2,"max":[5.5535473109102895e-8,2.9428024461708446e-9,0,1],"min":[5.5535473109102895e-8,2.9428024461708446e-9,-0.000005548599347093841,1],"name":"accessor_buffer_mixamorig:Hips_TPose_1","type":"VEC4"},{"bufferView":244,"byteOffset":0,"componentType":5126,"count":2,"max":[0.8905045986175537,5.982408046722412,0],"min":[0.8905045986175537,5.982408046722412,-0.24305573105812073],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_0","type":"VEC3"},{"bufferView":233,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-3.306195139884949e-8,-0.000008229748345911503,-2.3865142750878476e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_1","type":"VEC4"},{"bufferView":387,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_2","type":"VEC3"},{"bufferView":316,"byteOffset":0,"componentType":5126,"count":2,"max":[0.029511988162994385,2.085664749145508,0],"min":[0.029511988162994385,2.085664749145508,-0.000003653607564046979],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":356,"byteOffset":0,"componentType":5126,"count":2,"max":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"min":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_1","type":"VEC4"},{"bufferView":214,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"min":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_0","type":"VEC3"},{"bufferView":259,"byteOffset":0,"componentType":5126,"count":2,"max":[8.642673492431641e-7,7.483717918395996,0],"min":[8.642673492431641e-7,7.483717918395996,-0.0000068247318267822266],"name":"accessor_buffer_mixamorig:RightArm_TPose_0","type":"VEC3"},{"bufferView":325,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.7723331451416,0.000002205953933298588],"min":[-0.00000198512316273991,22.7723331451416,0.000002205953933298588],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_0","type":"VEC3"},{"bufferView":271,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.4578983783721924,0],"min":[-0.014494240283966064,1.4578983783721924,-0.000007362202268268447],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_0","type":"VEC3"},{"bufferView":314,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"min":[-1.9003864792921377e-7,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_1","type":"VEC4"},{"bufferView":341,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04963767156004906,0.9986410140991211],"min":[-0.01586439274251461,-0.0007755132974125445,0.04963767156004906,0.9986410140991211],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_1","type":"VEC4"},{"bufferView":253,"byteOffset":0,"componentType":5126,"count":2,"max":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"min":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"name":"accessor_buffer_mixamorig:Head_TPose_0","type":"VEC3"},{"bufferView":346,"byteOffset":0,"componentType":5126,"count":2,"max":[1.4313478469848633,1.948877215385437,1.3737415075302124],"min":[1.4313478469848633,1.948877215385437,1.3737415075302124],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_0","type":"VEC3"},{"bufferView":333,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":304,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9782497882843018,0],"min":[-0.004050195217132568,1.9782497882843018,-0.000013029115507379174],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_0","type":"VEC3"},{"bufferView":344,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000019077392607869115,0,0.006663992069661617,0.9999777674674988],"min":[0.0000019077392607869115,-0.00024382353876717389,0.006663992069661617,0.9999777674674988],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_1","type":"VEC4"},{"bufferView":394,"byteOffset":0,"componentType":5126,"count":2,"max":[5.414642258866342e-13,8.022480964660645,0],"min":[5.414642258866342e-13,8.022480964660645,-5.364418029785156e-7],"name":"accessor_buffer_mixamorig:Spine1_TPose_0","type":"VEC3"},{"bufferView":286,"byteOffset":0,"componentType":5126,"count":2,"max":[6.5092010498046875,0,0],"min":[6.5092010498046875,-3.8089029788970947,-0.3193536400794983],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_0","type":"VEC3"},{"bufferView":318,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"min":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":240,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_2","type":"VEC3"},{"bufferView":373,"byteOffset":0,"componentType":5126,"count":2,"max":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"min":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_0","type":"VEC3"},{"bufferView":401,"byteOffset":0,"componentType":5126,"count":2,"max":[0.29314252734184265,0.06225592643022537,0,0.9538480043411255],"min":[0.29314252734184265,0.06225592643022537,-0.019128000363707542,0.9538480043411255],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_1","type":"VEC4"},{"bufferView":251,"byteOffset":0,"componentType":5126,"count":2,"max":[0.49219897389411926,0.06156006455421448,0,0.8671404123306274],"min":[0.49219897389411926,0.06156006455421448,-0.04492250457406044,0.8671404123306274],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_1","type":"VEC4"},{"bufferView":400,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.033415794372559,3.5762786865234375e-7],"min":[-6.239861249923706e-7,12.033415794372559,3.5762786865234375e-7],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_0","type":"VEC3"},{"bufferView":377,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00083109550178051,0,0.998789370059967],"min":[-0.020914429798722267,0.00083109550178051,-0.04451649263501167,0.998789370059967],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_1","type":"VEC4"},{"bufferView":306,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_2","type":"VEC3"},{"bufferView":349,"byteOffset":0,"componentType":5126,"count":2,"max":[0,10.314631462097168,2.384185791015625e-7],"min":[-1.632623376768283e-11,10.314631462097168,2.384185791015625e-7],"name":"accessor_buffer_mixamorig:Neck_TPose_0","type":"VEC3"},{"bufferView":300,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_2","type":"VEC3"},{"bufferView":310,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009776592254638672,1.9066510200500488,0],"min":[0.009776592254638672,1.9066510200500488,-0.000011112497304566205],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_0","type":"VEC3"},{"bufferView":290,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999953508377075],"min":[-0.0000019045912722504,-0.0002899357641581446,-0.0030352880712598562,0.9999953508377075],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_1","type":"VEC4"},{"bufferView":374,"byteOffset":0,"componentType":5126,"count":2,"max":[8.172354171165352e-8,0.000008062284905463457,0,1],"min":[8.172354171165352e-8,0.000008062284905463457,-1.2136295524101115e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_1","type":"VEC4"},{"bufferView":243,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"min":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_2","type":"VEC3"},{"bufferView":295,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015063196420669556,2.0928525924682617,0],"min":[0.015063196420669556,2.0928525924682617,-0.00001477246405556798],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_0","type":"VEC3"},{"bufferView":297,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999997019767761],"min":[1,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_2","type":"VEC3"},{"bufferView":334,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.854499816894531,0],"min":[-4.3809234018254983e-11,6.854499816894531,-0.5485977530479431],"name":"accessor_buffer_mixamorig:Spine_TPose_0","type":"VEC3"},{"bufferView":278,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"min":[-9.933781939253095e-7,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_1","type":"VEC4"},{"bufferView":285,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"min":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_2","type":"VEC3"},{"bufferView":372,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"min":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_2","type":"VEC3"},{"bufferView":355,"byteOffset":0,"componentType":5126,"count":2,"max":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"min":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_0","type":"VEC3"},{"bufferView":218,"byteOffset":0,"componentType":5126,"count":2,"max":[5.549511570279719e-7,0,0.0010957049671560526,0.9999994039535522],"min":[5.549511570279719e-7,-0.00003228561763535254,0.0010957049671560526,0.9999994039535522],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_1","type":"VEC4"},{"bufferView":379,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.04969024658203,8.68749339133501e-9],"min":[-3.5517268770490773e-7,45.04969024658203,8.68749339133501e-9],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_0","type":"VEC3"},{"bufferView":358,"byteOffset":0,"componentType":5126,"count":2,"max":[0.012762725353240967,1.3817871809005737,0],"min":[0.012762725353240967,1.3817871809005737,-0.000005348862032406032],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_0","type":"VEC3"},{"bufferView":396,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_2","type":"VEC3"},{"bufferView":208,"byteOffset":0,"componentType":5123,"count":4038,"max":[1108],"min":[0],"name":"accessor_buffer_F010_Saber.003_4","type":"SCALAR"},{"bufferView":363,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_2","type":"VEC3"},{"bufferView":345,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_2","type":"VEC3"},{"bufferView":337,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2484662532806396,0.000009948620572686195],"min":[-0.010961860418319702,2.2484662532806396,0.000009948620572686195],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":270,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_2","type":"VEC3"},{"bufferView":207,"byteOffset":24,"componentType":5126,"count":1109,"max":[0.9941849112510681,0.6996400058269501],"min":[0.024950888007879257,0.007812023162841797],"name":"accessor_buffer_F010_Saber.003_2","type":"VEC2"},{"bufferView":275,"byteOffset":0,"componentType":5126,"count":2,"max":[0.4910941421985626,0,0.04505223408341408,0.8677260875701904],"min":[0.4910941421985626,-0.062034837901592255,0.04505223408341408,0.8677260875701904],"name":"accessor_buffer_mixamorig:RightFoot_TPose_1","type":"VEC4"},{"bufferView":236,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"min":[-8.061967378125701e-7,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_1","type":"VEC4"},{"bufferView":309,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999998211860657],"min":[1,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_2","type":"VEC3"},{"bufferView":241,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5351991653442383,0.000011235475540161133],"min":[-0.18289971351623535,1.5351991653442383,0.000011235475540161133],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_0","type":"VEC3"},{"bufferView":388,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"min":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"name":"accessor_buffer_mixamorig:Hips_TPose_0","type":"VEC3"},{"bufferView":405,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999999403953552],"min":[0.9999999403953552,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightLeg_TPose_2","type":"VEC3"},{"bufferView":301,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2824809551239014,0.00000463516335003078],"min":[-0.018551677465438843,2.2824809551239014,0.00000463516335003078],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":252,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"min":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_2","type":"VEC3"},{"bufferView":242,"byteOffset":0,"componentType":5126,"count":2,"max":[3.725291364276018e-8,0,3.259629011154175e-8,1],"min":[3.725291364276018e-8,-5.58793766813892e-9,3.259629011154175e-8,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_1","type":"VEC4"},{"bufferView":248,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00001167778464150615,0,0.9999808073043823,0],"min":[0.00001167778464150615,-0.0004857034655287862,0.9999808073043823,-0.006179941818118095],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_1","type":"VEC4"},{"bufferView":258,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"min":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":408,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":385,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8726567029953003,1.3422273397445679],"min":[-1.3880571126937866,1.8726567029953003,1.3422273397445679],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_0","type":"VEC3"},{"bufferView":279,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"min":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_2","type":"VEC3"},{"bufferView":353,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0008116317912936211,0,0.9999305605888367],"min":[-0.0000027277535536995856,0.0008116317912936211,-0.011757179163396358,0.9999305605888367],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":369,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_2","type":"VEC3"},{"bufferView":391,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.77089500427246,0.000006812736501160543],"min":[-2.460183168295771e-7,22.77089500427246,0.000006812736501160543],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_0","type":"VEC3"},{"bufferView":228,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.000000238418579,1],"min":[0.9999999403953552,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_2","type":"VEC3"},{"bufferView":307,"byteOffset":0,"componentType":5126,"count":2,"max":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"min":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_0","type":"VEC3"},{"bufferView":266,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.464207682351116e-7,-8.914983595786907e-8,-1.517519194749184e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_1","type":"VEC4"},{"bufferView":342,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,0.9999999403953552],"min":[1.0000001192092896,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_2","type":"VEC3"},{"bufferView":265,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9040616750717163,0],"min":[-0.044958412647247314,1.9040616750717163,-0.000012791395420208573],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_0","type":"VEC3"},{"bufferView":288,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001250505447388,0.9999999403953552,1.000000238418579],"min":[1.0001250505447388,0.9999999403953552,1.000000238418579],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_2","type":"VEC3"},{"bufferView":230,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.3662607873120578e-8,-2.0191042438000295e-7,-1.5510249795624986e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_1","type":"VEC4"},{"bufferView":267,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_2","type":"VEC3"},{"bufferView":386,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"min":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_1","type":"VEC4"},{"bufferView":397,"byteOffset":0,"componentType":5126,"count":2,"max":[2.112320899963379,5.151422500610352,0],"min":[2.112320899963379,5.151422500610352,-0.101677805185318],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_0","type":"VEC3"},{"bufferView":274,"byteOffset":0,"componentType":5126,"count":2,"max":[2.655433490872383e-7,41.85009002685547,0],"min":[2.655433490872383e-7,41.85009002685547,-1.4621764421463013e-7],"name":"accessor_buffer_mixamorig:RightFoot_TPose_0","type":"VEC3"},{"bufferView":294,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"min":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHand_TPose_2","type":"VEC3"},{"bufferView":235,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1800546646118164,0],"min":[-0.017888188362121582,2.1800546646118164,-0.000005649722879752517],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_0","type":"VEC3"},{"bufferView":210,"byteOffset":0,"componentType":5126,"count":2,"max":[0.03333333333333333],"min":[0],"name":"accessor_buffer_TPose_time_0","type":"SCALAR"},{"bufferView":254,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,5.4569682106375694e-12,1],"min":[-3.749335064640036e-9,-6.563448747235262e-21,5.4569682106375694e-12,1],"name":"accessor_buffer_mixamorig:Head_TPose_1","type":"VEC4"},{"bufferView":217,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"min":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_0","type":"VEC3"},{"bufferView":352,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"min":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":348,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_2","type":"VEC3"},{"bufferView":382,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.089044570922852,1.7881393432617188e-7],"min":[-4.116445779800415e-7,12.089044570922852,1.7881393432617188e-7],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_0","type":"VEC3"},{"bufferView":268,"byteOffset":0,"componentType":5126,"count":2,"max":[0,8.988426208496094,0],"min":[-3.513521432876587,8.988426208496094,-0.11455392837524414],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_0","type":"VEC3"},{"bufferView":350,"byteOffset":0,"componentType":5126,"count":2,"max":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"min":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"name":"accessor_buffer_mixamorig:Neck_TPose_1","type":"VEC4"},{"bufferView":326,"byteOffset":0,"componentType":5126,"count":2,"max":[4.818217576030293e-7,0,4.313407657718926e-7,1],"min":[4.818217576030293e-7,-0.00015852972865104675,4.313407657718926e-7,1],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_1","type":"VEC4"},{"bufferView":393,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999997615814209],"min":[1,1.0000001192092896,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_2","type":"VEC3"},{"bufferView":249,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001243352890015,0.9999998807907104,1.000003695487976],"min":[1.0001243352890015,0.9999998807907104,1.000003695487976],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_2","type":"VEC3"},{"bufferView":225,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":284,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000014512252164422534,0.0003296945069450885,0,0.9999457001686096],"min":[0.0000014512252164422534,0.0003296945069450885,-0.010418280959129333,0.9999457001686096],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_1","type":"VEC4"},{"bufferView":227,"byteOffset":0,"componentType":5126,"count":2,"max":[0.000002737616568992962,0,0,0.9967700242996216],"min":[0.000002737616568992962,-0.0000792778519098647,-0.08030900359153748,0.9967700242996216],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_1","type":"VEC4"},{"bufferView":312,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,1],"min":[1.0000001192092896,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_2","type":"VEC3"},{"bufferView":409,"byteOffset":0,"componentType":5126,"count":65,"max":[1.0011157989501953,1.0004726648330688,0.3728281855583191,0,0.1791374236345291,1.0011159181594849,0.9939086437225342,0,0.9973942041397095,0.9979981184005737,1.0011157989501953,0,36.08419418334961,95.18425750732422,139.18643188476562,1],"min":[-1.0009628534317017,-1.000463843345642,-0.3957006633281708,0,-0.1620984524488449,-1.0005624294281006,-0.9972899556159973,0,-0.9975388050079346,-0.3510676324367523,-0.1874166578054428,0,-40.01988983154297,-158.2681884765625,-8.502774238586426,1],"name":"accessor_buffer_IBM_F010_Saber_Hair.001_skin_0","type":"MAT4"},{"bufferView":347,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21339857578277588,0,0,0.9383423328399658],"min":[0.21339857578277588,-0.06705669313669205,-0.26358723640441895,0.9383423328399658],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_1","type":"VEC4"},{"bufferView":299,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.80437906032391e-23,0,1],"min":[-8.673616862896153e-19,6.80437906032391e-23,-1.8189894035458565e-12,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_1","type":"VEC4"},{"bufferView":367,"byteOffset":0,"componentType":5126,"count":2,"max":[1.2692300335737094e-11,9.168559074401855,0],"min":[1.2692300335737094e-11,9.168559074401855,-4.76837158203125e-7],"name":"accessor_buffer_mixamorig:Spine2_TPose_0","type":"VEC3"},{"bufferView":330,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998807907104,0.9999999403953552],"min":[1,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_2","type":"VEC3"},{"bufferView":376,"byteOffset":0,"componentType":5126,"count":2,"max":[2.289442539215088,5.801696300506592,0.050649963319301605],"min":[2.289442539215088,5.801696300506592,0.050649963319301605],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_0","type":"VEC3"},{"bufferView":229,"byteOffset":0,"componentType":5126,"count":2,"max":[0.006504923105239868,1.635219693183899,0],"min":[0.006504923105239868,1.635219693183899,-0.00002377049531787634],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_0","type":"VEC3"},{"bufferView":264,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,1],"min":[0.9999998807907104,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftArm_TPose_2","type":"VEC3"},{"bufferView":209,"byteOffset":0,"componentType":5121,"count":1109,"max":[5,31,32,32],"min":[5,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_0","type":"VEC4"},{"bufferView":383,"byteOffset":0,"componentType":5126,"count":2,"max":[0.291592001914978,0,0.018840743228793144,0.954366147518158],"min":[0.291592001914978,-0.06168048828840256,0.018840743228793144,0.954366147518158],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_1","type":"VEC4"},{"bufferView":406,"byteOffset":0,"componentType":5126,"count":2,"max":[0.615178108215332,5.987785816192627,0],"min":[0.615178108215332,5.987785816192627,-0.2521420121192932],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":239,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.034996457397937775,0,0.9979900121688843],"min":[-0.019062332808971405,0.034996457397937775,-0.04927309229969978,0.9979900121688843],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_1","type":"VEC4"},{"bufferView":368,"byteOffset":0,"componentType":5126,"count":2,"max":[0,9.422998405866911e-13,0,1],"min":[-5.029141902923584e-8,9.422998405866911e-13,-2.3584922209662906e-11,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_1","type":"VEC4"},{"bufferView":283,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"min":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_0","type":"VEC3"},{"bufferView":339,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[1.0000001192092896,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":207,"byteOffset":32,"componentType":5126,"count":1109,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_F010_Saber.003_3","type":"VEC3"},{"bufferView":282,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_2","type":"VEC3"},{"bufferView":398,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.05077396705746651,0.998155415058136],"min":[-0.014275818131864071,-0.030067145824432373,0.05077396705746651,0.998155415058136],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_1","type":"VEC4"},{"bufferView":381,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,1],"min":[1.0000001192092896,0.9999998211860657,1],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_2","type":"VEC3"},{"bufferView":407,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.003121189074590802,0,0.9987351894378662],"min":[-0.02078564278781414,0.003121189074590802,-0.04567611962556839,0.9987351894378662],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":331,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.933863162994385,0],"min":[-0.6209797859191895,5.933863162994385,-0.1895589530467987],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":289,"byteOffset":0,"componentType":5126,"count":2,"max":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"min":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_0","type":"VEC3"},{"bufferView":359,"byteOffset":0,"componentType":5126,"count":2,"max":[5.20922753821651e-8,0,1.4510078472085297e-8,1],"min":[5.20922753821651e-8,-1.1215498751937503e-8,1.4510078472085297e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_1","type":"VEC4"},{"bufferView":360,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_2","type":"VEC3"},{"bufferView":298,"byteOffset":0,"componentType":5126,"count":2,"max":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"min":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_0","type":"VEC3"},{"bufferView":351,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Neck_TPose_2","type":"VEC3"},{"bufferView":321,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,1,0.9999998807907104],"min":[0.9999997615814209,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_2","type":"VEC3"},{"bufferView":319,"byteOffset":0,"componentType":5126,"count":2,"max":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"min":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_0","type":"VEC3"},{"bufferView":335,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.000005544060059037292,0.9992028474807739],"min":[-0.03992169722914696,-2.2444967839874153e-7,0.000005544060059037292,0.9992028474807739],"name":"accessor_buffer_mixamorig:Spine_TPose_1","type":"VEC4"},{"bufferView":255,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Head_TPose_2","type":"VEC3"},{"bufferView":371,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-9.267012046620948e-8,-5.819203607870804e-8,-6.402842700481415e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_1","type":"VEC4"},{"bufferView":343,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5249916315078735,0.000022089123376645148],"min":[-0.006230756640434265,1.5249916315078735,0.000022089123376645148],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_0","type":"VEC3"},{"bufferView":281,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.010770494118332863,0,0.9985118508338928],"min":[-0.020383575931191444,0.010770494118332863,-0.049423426389694214,0.9985118508338928],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_1","type":"VEC4"},{"bufferView":399,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_2","type":"VEC3"},{"bufferView":357,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"min":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_2","type":"VEC3"},{"bufferView":313,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1517670154571533,0],"min":[-0.018159687519073486,2.1517670154571533,-0.0000034263357520103455],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_0","type":"VEC3"},{"bufferView":280,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.778012275695801,0],"min":[-0.8287959098815918,5.778012275695801,-0.20808981359004974],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_0","type":"VEC3"},{"bufferView":226,"byteOffset":0,"componentType":5126,"count":2,"max":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"min":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_0","type":"VEC3"},{"bufferView":276,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"min":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightFoot_TPose_2","type":"VEC3"},{"bufferView":323,"byteOffset":0,"componentType":5126,"count":2,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_TPose_1","type":"VEC4"},{"bufferView":245,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04820201173424721,0.9986330270767212],"min":[-0.015152297914028168,-0.013382739387452602,0.04820201173424721,0.9986330270767212],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_1","type":"VEC4"},{"bufferView":291,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_2","type":"VEC3"},{"bufferView":220,"byteOffset":0,"componentType":5126,"count":2,"max":[0,19.023351669311523,0],"min":[-5.494803190231323e-8,19.023351669311523,-0.0000032789830584079027],"name":"accessor_buffer_mixamorig:LeftHand_TPose_0","type":"VEC3"},{"bufferView":332,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04805108159780502,0.9987183213233948],"min":[-0.01581340841948986,-0.0016685931477695704,0.04805108159780502,0.9987183213233948],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":395,"byteOffset":0,"componentType":5126,"count":2,"max":[1.30385160446167e-8,9.691603259937703e-14,0,1],"min":[1.30385160446167e-8,9.691603259937703e-14,-6.765455166576895e-13,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_1","type":"VEC4"},{"bufferView":392,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000018012506188824773,0.00015944617916829884,0,1],"min":[0.0000018012506188824773,0.00015944617916829884,-1.3720271851980215e-7,1],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_1","type":"VEC4"},{"bufferView":403,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.050357818603516,2.3865140974521637e-9],"min":[-2.398074059328792e-7,45.050357818603516,2.3865140974521637e-9],"name":"accessor_buffer_mixamorig:RightLeg_TPose_0","type":"VEC3"},{"bufferView":384,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"min":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_2","type":"VEC3"},{"bufferView":315,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_2","type":"VEC3"},{"bufferView":362,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-1.473153474762512e-7,-1.363462160952622e-7,-1.3542921806219965e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_1","type":"VEC4"},{"bufferView":366,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"min":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_2","type":"VEC3"},{"bufferView":302,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"min":[-6.611599019379355e-7,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":322,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_TPose_0","type":"VEC3"},{"bufferView":354,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":305,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.007251414470374584,0.999973714351654],"min":[-0.000005368752681533806,-0.00042654300341382623,0.007251414470374584,0.999973714351654],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_1","type":"VEC4"},{"bufferView":224,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999955296516418],"min":[-0.0000013217339756010915,-0.00023518799571320415,-0.002985715866088867,0.9999955296516418],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":402,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,1],"min":[0.9999999403953552,1,1],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_2","type":"VEC3"},{"bufferView":257,"byteOffset":0,"componentType":5126,"count":2,"max":[2.252031947591604e-7,0,2.586603153886813e-9,1],"min":[2.252031947591604e-7,-1.896821366642598e-8,2.586603153886813e-9,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":209,"byteOffset":16,"componentType":5126,"count":1109,"max":[1,0.0767483115196228,0.01539947371929884,0],"min":[0.9057729244232178,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_1","type":"VEC4"},{"bufferView":370,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.916641116142273,0],"min":[-0.02496713399887085,1.916641116142273,-0.000015547877410426736],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_0","type":"VEC3"},{"bufferView":221,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015112828463315964,0.01513464655727148,0,0.9984008073806763],"min":[0.015112828463315964,0.01513464655727148,-0.052329666912555695,0.9984008073806763],"name":"accessor_buffer_mixamorig:LeftHand_TPose_1","type":"VEC4"},{"bufferView":223,"byteOffset":0,"componentType":5126,"count":2,"max":[0.025692284107208252,2.32354736328125,0],"min":[0.025692284107208252,2.32354736328125,-0.000005896072252653539],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":364,"byteOffset":0,"componentType":5126,"count":2,"max":[3.513521194458008,8.987088203430176,0],"min":[3.513521194458008,8.987088203430176,-0.09783625602722168],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_0","type":"VEC3"},{"bufferView":269,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5739166140556335,0,0.5932961106300354,0.39230477809906006],"min":[0.5739166140556335,-0.4058528542518616,0.5932961106300354,0.39230477809906006],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_1","type":"VEC4"},{"bufferView":404,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0003684632829390466,0,0.9994756579399109],"min":[-0.029726667329669,0.0003684632829390466,-0.012829470448195934,0.9994756579399109],"name":"accessor_buffer_mixamorig:RightLeg_TPose_1","type":"VEC4"},{"bufferView":361,"byteOffset":0,"componentType":5126,"count":2,"max":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"min":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_0","type":"VEC3"},{"bufferView":238,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.181240558624268,0],"min":[-2.0758204460144043,5.181240558624268,-0.15668104588985443],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_0","type":"VEC3"},{"bufferView":328,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8280677795410156,0],"min":[-0.006532952189445496,1.8280677795410156,-0.000011722324416041374],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_0","type":"VEC3"},{"bufferView":365,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5753993988037109,0.4047872722148895,0,0.39317330718040466],"min":[0.5753993988037109,0.4047872722148895,-0.592011570930481,0.39317330718040466],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_1","type":"VEC4"},{"bufferView":247,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[-6.5092010498046875,-3.8089101314544678,-0.4497392773628235],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_0","type":"VEC3"},{"bufferView":222,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999998807907104],"min":[1,1.0000001192092896,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHand_TPose_2","type":"VEC3"},{"bufferView":308,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00004969544170307927,0.0011240799212828279,0,0.9999988079071045],"min":[0.00004969544170307927,0.0011240799212828279,-0.0010827239602804184,0.9999988079071045],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_1","type":"VEC4"},{"bufferView":329,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00004930837167194113,0,1],"min":[-0.0000036987858038628474,0.00004930837167194113,-0.000254306651186198,1],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_1","type":"VEC4"},{"bufferView":427,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.80437906032391e-23,0,1],"min":[-8.673616862896153e-19,6.80437906032391e-23,-1.8189894035458565e-12,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_1","type":"VEC4"},{"bufferView":434,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"min":[0.9999998211860657,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_2","type":"VEC3"},{"bufferView":577,"byteOffset":0,"componentType":5126,"count":2,"max":[5.549511570279719e-7,0,0.0010957049671560526,0.9999994039535522],"min":[5.549511570279719e-7,-0.00003228561763535254,0.0010957049671560526,0.9999994039535522],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_1","type":"VEC4"},{"bufferView":414,"byteOffset":0,"componentType":5126,"count":2,"max":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"min":[5.965165861265831e-12,4.3087158203125,0.1199100986123085],"name":"accessor_buffer_mixamorig:Head_TPose_0","type":"VEC3"},{"bufferView":429,"byteOffset":0,"componentType":5126,"count":2,"max":[1.2692300335737094e-11,9.168559074401855,0],"min":[1.2692300335737094e-11,9.168559074401855,-4.76837158203125e-7],"name":"accessor_buffer_mixamorig:Spine2_TPose_0","type":"VEC3"},{"bufferView":596,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"min":[1.0000001192092896,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_2","type":"VEC3"},{"bufferView":526,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21339857578277588,0,0,0.9383423328399658],"min":[0.21339857578277588,-0.06705669313669205,-0.26358723640441895,0.9383423328399658],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_1","type":"VEC4"},{"bufferView":536,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightArm_TPose_2","type":"VEC3"},{"bufferView":576,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"min":[0.0033528581261634827,1.9062618017196655,0.000006702626706101],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_0","type":"VEC3"},{"bufferView":455,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"min":[0.9999998211860657,0.9999997019767761,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_2","type":"VEC3"},{"bufferView":433,"byteOffset":0,"componentType":5126,"count":2,"max":[0.49219897389411926,0.06156006455421448,0,0.8671404123306274],"min":[0.49219897389411926,0.06156006455421448,-0.04492250457406044,0.8671404123306274],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_1","type":"VEC4"},{"bufferView":507,"byteOffset":0,"componentType":5126,"count":2,"max":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"min":[0.008640080690383911,2.2196240425109863,0.000011700321920216084],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_0","type":"VEC3"},{"bufferView":550,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00001167778464150615,0,0.9999808073043823,0],"min":[0.00001167778464150615,-0.0004857034655287862,0.9999808073043823,-0.006179941818118095],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_1","type":"VEC4"},{"bufferView":511,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000019077392607869115,0,0.006663992069661617,0.9999777674674988],"min":[0.0000019077392607869115,-0.00024382353876717389,0.006663992069661617,0.9999777674674988],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_1","type":"VEC4"},{"bufferView":421,"byteOffset":0,"componentType":5126,"count":2,"max":[0.000002737616568992962,0,0,0.9967700242996216],"min":[0.000002737616568992962,-0.0000792778519098647,-0.08030900359153748,0.9967700242996216],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_1","type":"VEC4"},{"bufferView":592,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000014512252164422534,0.0003296945069450885,0,0.9999457001686096],"min":[0.0000014512252164422534,0.0003296945069450885,-0.010418280959129333,0.9999457001686096],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_1","type":"VEC4"},{"bufferView":558,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1800546646118164,0],"min":[-0.017888188362121582,2.1800546646118164,-0.000005649722879752517],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_0","type":"VEC3"},{"bufferView":457,"byteOffset":0,"componentType":5126,"count":2,"max":[3.725291364276018e-8,0,3.259629011154175e-8,1],"min":[3.725291364276018e-8,-5.58793766813892e-9,3.259629011154175e-8,1],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_1","type":"VEC4"},{"bufferView":442,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00034277912345714867,0,0.9999790191650391],"min":[-0.0000010370887366661918,0.00034277912345714867,-0.0064829993061721325,0.9999790191650391],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_1","type":"VEC4"},{"bufferView":420,"byteOffset":0,"componentType":5126,"count":2,"max":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"min":[0.08421140909194946,1.993523120880127,0.0000010579824447631836],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_0","type":"VEC3"},{"bufferView":546,"byteOffset":0,"componentType":5126,"count":2,"max":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"min":[1.043081283569336e-7,4.706444263458252,1.4901161193847656e-8],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_0","type":"VEC3"},{"bufferView":534,"byteOffset":0,"componentType":5126,"count":2,"max":[8.642673492431641e-7,7.483717918395996,0],"min":[8.642673492431641e-7,7.483717918395996,-0.0000068247318267822266],"name":"accessor_buffer_mixamorig:RightArm_TPose_0","type":"VEC3"},{"bufferView":551,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001243352890015,0.9999998807907104,1.000003695487976],"min":[1.0001243352890015,0.9999998807907104,1.000003695487976],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_2","type":"VEC3"},{"bufferView":413,"byteOffset":0,"componentType":5126,"count":2,"max":[0.041666666666666664],"min":[0],"name":"accessor_buffer_TPose_time_0","type":"SCALAR"},{"bufferView":495,"byteOffset":0,"componentType":5126,"count":2,"max":[0.8905045986175537,5.982408046722412,0],"min":[0.8905045986175537,5.982408046722412,-0.24305573105812073],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_0","type":"VEC3"},{"bufferView":465,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.181240558624268,0],"min":[-2.0758204460144043,5.181240558624268,-0.15668104588985443],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_0","type":"VEC3"},{"bufferView":410,"byteOffset":12,"componentType":5126,"count":3054,"max":[0.9999508857727051,0.9998086094856262,0.9994415640830994],"min":[-0.9999616742134094,-1,-0.9999049305915833],"name":"accessor_buffer_F010_Saber.003_1","type":"VEC3"},{"bufferView":537,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.1517670154571533,0],"min":[-0.018159687519073486,2.1517670154571533,-0.0000034263357520103455],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_0","type":"VEC3"},{"bufferView":549,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[-6.5092010498046875,-3.8089101314544678,-0.4497392773628235],"name":"accessor_buffer_mixamorig:RightUpLeg_TPose_0","type":"VEC3"},{"bufferView":582,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8280677795410156,0],"min":[-0.006532952189445496,1.8280677795410156,-0.000011722324416041374],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_0","type":"VEC3"},{"bufferView":611,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.000000238418579,1.0000001192092896],"min":[1.0000001192092896,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":446,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1],"min":[1,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_2","type":"VEC3"},{"bufferView":540,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.033415794372559,3.5762786865234375e-7],"min":[-6.239861249923706e-7,12.033415794372559,3.5762786865234375e-7],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_0","type":"VEC3"},{"bufferView":415,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,5.4569682106375694e-12,1],"min":[-3.749335064640036e-9,-6.563448747235262e-21,5.4569682106375694e-12,1],"name":"accessor_buffer_mixamorig:Head_TPose_1","type":"VEC4"},{"bufferView":417,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8726567029953003,1.3422273397445679],"min":[-1.3880571126937866,1.8726567029953003,1.3422273397445679],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_0","type":"VEC3"},{"bufferView":510,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5249916315078735,0.000022089123376645148],"min":[-0.006230756640434265,1.5249916315078735,0.000022089123376645148],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_0","type":"VEC3"},{"bufferView":588,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0],"min":[0,0,0],"name":"accessor_buffer_Character_TPose_0","type":"VEC3"},{"bufferView":606,"byteOffset":0,"componentType":5126,"count":2,"max":[2.112320899963379,5.151422500610352,0],"min":[2.112320899963379,5.151422500610352,-0.101677805185318],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_0","type":"VEC3"},{"bufferView":556,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00004969544170307927,0.0011240799212828279,0,0.9999988079071045],"min":[0.00004969544170307927,0.0011240799212828279,-0.0010827239602804184,0.9999988079071045],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_1","type":"VEC4"},{"bufferView":580,"byteOffset":0,"componentType":5126,"count":2,"max":[0.4910941421985626,0,0.04505223408341408,0.8677260875701904],"min":[0.4910941421985626,-0.062034837901592255,0.04505223408341408,0.8677260875701904],"name":"accessor_buffer_mixamorig:RightFoot_TPose_1","type":"VEC4"},{"bufferView":589,"byteOffset":0,"componentType":5126,"count":2,"max":[0.7071068286895752,0,0,0.7071067094802856],"min":[0.7071068286895752,0,0,0.7071067094802856],"name":"accessor_buffer_Character_TPose_1","type":"VEC4"},{"bufferView":436,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0011933766072615981,0,0.9998803734779358],"min":[-0.000009156999112747144,0.0011933766072615981,-0.015421011485159397,0.9998803734779358],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_1","type":"VEC4"},{"bufferView":430,"byteOffset":0,"componentType":5126,"count":2,"max":[0,9.422998405866911e-13,0,1],"min":[-5.029141902923584e-8,9.422998405866911e-13,-2.3584922209662906e-11,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_1","type":"VEC4"},{"bufferView":440,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,1],"min":[1.0000001192092896,0.9999998807907104,1],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_2","type":"VEC3"},{"bufferView":508,"byteOffset":0,"componentType":5126,"count":2,"max":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"min":[6.178794933475729e-7,0.00013458405737765133,0.0019599406514316797,0.9999980926513672],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_1","type":"VEC4"},{"bufferView":453,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0025572776794434,0],"min":[-0.009857624769210815,2.0025572776794434,-0.000008842733222991228],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_0","type":"VEC3"},{"bufferView":416,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Head_TPose_2","type":"VEC3"},{"bufferView":555,"byteOffset":0,"componentType":5126,"count":2,"max":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"min":[0.09869322180747986,2.222616195678711,0.000005245208740234375],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_0","type":"VEC3"},{"bufferView":570,"byteOffset":0,"componentType":5126,"count":2,"max":[0.006504923105239868,1.635219693183899,0],"min":[0.006504923105239868,1.635219693183899,-0.00002377049531787634],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_0","type":"VEC3"},{"bufferView":564,"byteOffset":0,"componentType":5126,"count":2,"max":[3.513521194458008,8.987088203430176,0],"min":[3.513521194458008,8.987088203430176,-0.09783625602722168],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_0","type":"VEC3"},{"bufferView":467,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_2","type":"VEC3"},{"bufferView":512,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandPinky3_TPose_2","type":"VEC3"},{"bufferView":422,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.000000238418579,1],"min":[0.9999999403953552,1.000000238418579,1],"name":"accessor_buffer_mixamorig:RightHandThumb3_TPose_2","type":"VEC3"},{"bufferView":485,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"min":[0.9999998211860657,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHand_TPose_2","type":"VEC3"},{"bufferView":583,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00004930837167194113,0,1],"min":[-0.0000036987858038628474,0.00004930837167194113,-0.000254306651186198,1],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_1","type":"VEC4"},{"bufferView":492,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.7125468254089355,0],"min":[-6.258487701416016e-7,4.7125468254089355,-5.960464477539063e-8],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_0","type":"VEC3"},{"bufferView":468,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2824809551239014,0.00000463516335003078],"min":[-0.018551677465438843,2.2824809551239014,0.00000463516335003078],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":571,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.3662607873120578e-8,-2.0191042438000295e-7,-1.5510249795624986e-7,1],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_1","type":"VEC4"},{"bufferView":472,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.007251414470374584,0.999973714351654],"min":[-0.000005368752681533806,-0.00042654300341382623,0.007251414470374584,0.999973714351654],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_1","type":"VEC4"},{"bufferView":542,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,1],"min":[0.9999999403953552,1,1],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_2","type":"VEC3"},{"bufferView":530,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Neck_TPose_2","type":"VEC3"},{"bufferView":411,"byteOffset":0,"componentType":5123,"count":11700,"max":[3053],"min":[0],"name":"accessor_buffer_F010_Saber.003_3","type":"SCALAR"},{"bufferView":450,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9040616750717163,0],"min":[-0.044958412647247314,1.9040616750717163,-0.000012791395420208573],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_0","type":"VEC3"},{"bufferView":590,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"min":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"name":"accessor_buffer_Character_TPose_2","type":"VEC3"},{"bufferView":444,"byteOffset":0,"componentType":5126,"count":2,"max":[2.289442539215088,5.801696300506592,0.050649963319301605],"min":[2.289442539215088,5.801696300506592,0.050649963319301605],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_0","type":"VEC3"},{"bufferView":428,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_2","type":"VEC3"},{"bufferView":443,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"min":[0.9999997615814209,0.9999997615814209,0.9999998807907104],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_2","type":"VEC3"},{"bufferView":517,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000016051130842242856,0,0.9999784827232361,0.0061686099506914616],"min":[0.0000016051130842242856,-0.0022346421610563993,0.9999784827232361,0.0061686099506914616],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_1","type":"VEC4"},{"bufferView":445,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00083109550178051,0,0.998789370059967],"min":[-0.020914429798722267,0.00083109550178051,-0.04451649263501167,0.998789370059967],"name":"accessor_buffer_mixamorig:RightHandIndex1_TPose_1","type":"VEC4"},{"bufferView":463,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005565229366766289,0,0.9994112253189087],"min":[-1.9569284859244362e-7,0.00005565229366766289,-0.034311242401599884,0.9994112253189087],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_1","type":"VEC4"},{"bufferView":441,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"min":[0.0047144293785095215,1.5559417009353638,0.000002086983840854373],"name":"accessor_buffer_mixamorig:RightHandPinky3_TPose_0","type":"VEC3"},{"bufferView":560,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_2","type":"VEC3"},{"bufferView":477,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.8846017122268677,0],"min":[-0.0597844123840332,1.8846017122268677,-0.00000426173210144043],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_0","type":"VEC3"},{"bufferView":514,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0008116317912936211,0,0.9999305605888367],"min":[-0.0000027277535536995856,0.0008116317912936211,-0.011757179163396358,0.9999305605888367],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":516,"byteOffset":0,"componentType":5126,"count":2,"max":[6.5092010498046875,0,0],"min":[6.5092010498046875,-3.8089029788970947,-0.3193536400794983],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_0","type":"VEC3"},{"bufferView":525,"byteOffset":0,"componentType":5126,"count":2,"max":[1.4313478469848633,1.948877215385437,1.3737415075302124],"min":[1.4313478469848633,1.948877215385437,1.3737415075302124],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_0","type":"VEC3"},{"bufferView":437,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999997019767761],"min":[1,0.9999998211860657,0.9999997019767761],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_2","type":"VEC3"},{"bufferView":545,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_2","type":"VEC3"},{"bufferView":494,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_2","type":"VEC3"},{"bufferView":426,"byteOffset":0,"componentType":5126,"count":2,"max":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"min":[8.12722285303824e-12,20.857254028320312,0.5804517269134521],"name":"accessor_buffer_mixamorig:HeadTop_End_TPose_0","type":"VEC3"},{"bufferView":451,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-2.464207682351116e-7,-8.914983595786907e-8,-1.517519194749184e-7,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_1","type":"VEC4"},{"bufferView":524,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_2","type":"VEC3"},{"bufferView":464,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999997615814209,1,0.9999998807907104],"min":[0.9999997615814209,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_2","type":"VEC3"},{"bufferView":491,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_2","type":"VEC3"},{"bufferView":518,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0001250505447388,0.9999999403953552,1.000000238418579],"min":[1.0001250505447388,0.9999999403953552,1.000000238418579],"name":"accessor_buffer_mixamorig:LeftUpLeg_TPose_2","type":"VEC3"},{"bufferView":480,"byteOffset":0,"componentType":5126,"count":2,"max":[0.025692284107208252,2.32354736328125,0],"min":[0.025692284107208252,2.32354736328125,-0.000005896072252653539],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_0","type":"VEC3"},{"bufferView":470,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"min":[0.9999999403953552,0.9999998211860657,0.9999997615814209],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":568,"byteOffset":0,"componentType":5126,"count":2,"max":[1.7445827893425303e-7,0,3.6372512113302946e-8,1],"min":[1.7445827893425303e-7,-6.26357206101602e-8,3.6372512113302946e-8,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_1","type":"VEC4"},{"bufferView":578,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,0.9999998807907104],"min":[1,1,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHandIndex3_TPose_2","type":"VEC3"},{"bufferView":500,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1,0.9999999403953552],"min":[0.9999999403953552,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightLeg_TPose_2","type":"VEC3"},{"bufferView":449,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1],"min":[1,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:Spine_TPose_2","type":"VEC3"},{"bufferView":410,"byteOffset":0,"componentType":5126,"count":3054,"max":[51.48958969116211,137.53976440429688,19.721698760986328],"min":[-51.49264144897461,0.5336894989013672,-21.39265251159668],"name":"accessor_buffer_F010_Saber.003_0","type":"VEC3"},{"bufferView":447,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.854499816894531,0],"min":[-4.3809234018254983e-11,6.854499816894531,-0.5485977530479431],"name":"accessor_buffer_mixamorig:Spine_TPose_0","type":"VEC3"},{"bufferView":585,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.04969024658203,8.68749339133501e-9],"min":[-3.5517268770490773e-7,45.04969024658203,8.68749339133501e-9],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_0","type":"VEC3"},{"bufferView":490,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999953508377075],"min":[-0.0000019045912722504,-0.0002899357641581446,-0.0030352880712598562,0.9999953508377075],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_1","type":"VEC4"},{"bufferView":432,"byteOffset":0,"componentType":5126,"count":2,"max":[0,41.84932327270508,0],"min":[-1.1807060218416154e-7,41.84932327270508,-2.8172507882118225e-7],"name":"accessor_buffer_mixamorig:LeftFoot_TPose_0","type":"VEC3"},{"bufferView":459,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.933863162994385,0],"min":[-0.6209797859191895,5.933863162994385,-0.1895589530467987],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":496,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04820201173424721,0.9986330270767212],"min":[-0.015152297914028168,-0.013382739387452602,0.04820201173424721,0.9986330270767212],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_1","type":"VEC4"},{"bufferView":489,"byteOffset":0,"componentType":5126,"count":2,"max":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"min":[0.02989715337753296,2.250401020050049,0.000006557500455528498],"name":"accessor_buffer_mixamorig:RightHandIndex2_TPose_0","type":"VEC3"},{"bufferView":478,"byteOffset":0,"componentType":5126,"count":2,"max":[4.656612517806025e-8,0,0,1],"min":[4.656612517806025e-8,-1.9324940581100236e-7,-4.982575063650074e-8,1],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_1","type":"VEC4"},{"bufferView":594,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.916641116142273,0],"min":[-0.02496713399887085,1.916641116142273,-0.000015547877410426736],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_0","type":"VEC3"},{"bufferView":535,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9826892614364624],"min":[-0.1844879388809204,-0.0005821919767186046,-0.016901638358831406,0.9826892614364624],"name":"accessor_buffer_mixamorig:RightArm_TPose_1","type":"VEC4"},{"bufferView":610,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.009517651982605457,0.9999545812606812],"min":[-0.000002889829829655355,-0.00046613236190751195,0.009517651982605457,0.9999545812606812],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_1","type":"VEC4"},{"bufferView":460,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04805108159780502,0.9987183213233948],"min":[-0.01581340841948986,-0.0016685931477695704,0.04805108159780502,0.9987183213233948],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":575,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"min":[0.9999998807907104,0.9999997615814209,0.9999998211860657],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":474,"byteOffset":0,"componentType":5126,"count":2,"max":[0,5.778012275695801,0],"min":[-0.8287959098815918,5.778012275695801,-0.20808981359004974],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_0","type":"VEC3"},{"bufferView":469,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"min":[-6.611599019379355e-7,0.00010853812273126096,0.0016283623408526182,0.9999986886978149],"name":"accessor_buffer_mixamorig:LeftHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":586,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.012829817831516266,0.9995352625846863],"min":[-0.02764846757054329,-0.000389853521483019,0.012829817831516266,0.9995352625846863],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_1","type":"VEC4"},{"bufferView":529,"byteOffset":0,"componentType":5126,"count":2,"max":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"min":[0.039921678602695465,1.0923948784392554e-13,1.9801653372564232e-11,0.9992028474807739],"name":"accessor_buffer_mixamorig:Neck_TPose_1","type":"VEC4"},{"bufferView":438,"byteOffset":0,"componentType":5126,"count":2,"max":[0.009776592254638672,1.9066510200500488,0],"min":[0.009776592254638672,1.9066510200500488,-0.000011112497304566205],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_0","type":"VEC3"},{"bufferView":476,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_2","type":"VEC3"},{"bufferView":608,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_2","type":"VEC3"},{"bufferView":538,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"min":[-1.9003864792921377e-7,0.00007007304520811886,0.022684887051582336,0.9997426867485046],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_1","type":"VEC4"},{"bufferView":473,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"min":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_2","type":"VEC3"},{"bufferView":605,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_2","type":"VEC3"},{"bufferView":523,"byteOffset":0,"componentType":5126,"count":2,"max":[5.20922753821651e-8,0,1.4510078472085297e-8,1],"min":[5.20922753821651e-8,-1.1215498751937503e-8,1.4510078472085297e-8,1],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_1","type":"VEC4"},{"bufferView":562,"byteOffset":0,"componentType":5126,"count":2,"max":[1.30385160446167e-8,9.691603259937703e-14,0,1],"min":[1.30385160446167e-8,9.691603259937703e-14,-6.765455166576895e-13,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_1","type":"VEC4"},{"bufferView":515,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"min":[1.0000001192092896,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_2","type":"VEC3"},{"bufferView":425,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999998807907104],"min":[1,1.0000001192092896,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftHand_TPose_2","type":"VEC3"},{"bufferView":479,"byteOffset":0,"componentType":5126,"count":2,"max":[1.000000238418579,1,1.0000001192092896],"min":[1.000000238418579,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb4_TPose_2","type":"VEC3"},{"bufferView":456,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.5351991653442383,0.000011235475540161133],"min":[-0.18289971351623535,1.5351991653442383,0.000011235475540161133],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_0","type":"VEC3"},{"bufferView":609,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.2484662532806396,0.000009948620572686195],"min":[-0.010961860418319702,2.2484662532806396,0.000009948620572686195],"name":"accessor_buffer_mixamorig:LeftHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":499,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.0003684632829390466,0,0.9994756579399109],"min":[-0.029726667329669,0.0003684632829390466,-0.012829470448195934,0.9994756579399109],"name":"accessor_buffer_mixamorig:RightLeg_TPose_1","type":"VEC4"},{"bufferView":498,"byteOffset":0,"componentType":5126,"count":2,"max":[0,45.050357818603516,2.3865140974521637e-9],"min":[-2.398074059328792e-7,45.050357818603516,2.3865140974521637e-9],"name":"accessor_buffer_mixamorig:RightLeg_TPose_0","type":"VEC3"},{"bufferView":505,"byteOffset":0,"componentType":5126,"count":2,"max":[0.0000018012506188824773,0.00015944617916829884,0,1],"min":[0.0000018012506188824773,0.00015944617916829884,-1.3720271851980215e-7,1],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_1","type":"VEC4"},{"bufferView":419,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1],"min":[1.0000001192092896,1,1],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_2","type":"VEC3"},{"bufferView":573,"byteOffset":0,"componentType":5126,"count":2,"max":[0.029511988162994385,2.085664749145508,0],"min":[0.029511988162994385,2.085664749145508,-0.000003653607564046979],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":602,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,0.9999999403953552],"min":[1.0000001192092896,1,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_2","type":"VEC3"},{"bufferView":604,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5739166140556335,0,0.5932961106300354,0.39230477809906006],"min":[0.5739166140556335,-0.4058528542518616,0.5932961106300354,0.39230477809906006],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_1","type":"VEC4"},{"bufferView":539,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"min":[0.9999999403953552,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandThumb2_TPose_2","type":"VEC3"},{"bufferView":528,"byteOffset":0,"componentType":5126,"count":2,"max":[0,10.314631462097168,2.384185791015625e-7],"min":[-1.632623376768283e-11,10.314631462097168,2.384185791015625e-7],"name":"accessor_buffer_mixamorig:Neck_TPose_0","type":"VEC3"},{"bufferView":532,"byteOffset":0,"componentType":5126,"count":2,"max":[2.252031947591604e-7,0,2.586603153886813e-9,1],"min":[2.252031947591604e-7,-1.896821366642598e-8,2.586603153886813e-9,1],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":593,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"min":[0.9999998807907104,0.9999999403953552,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_2","type":"VEC3"},{"bufferView":531,"byteOffset":0,"componentType":5126,"count":2,"max":[0,2.0023322105407715,0],"min":[-0.03690838813781738,2.0023322105407715,-0.0000020437873899936676],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_0","type":"VEC3"},{"bufferView":509,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"min":[1.0000001192092896,0.9999998807907104,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandRing2_TPose_2","type":"VEC3"},{"bufferView":541,"byteOffset":0,"componentType":5126,"count":2,"max":[0.29314252734184265,0.06225592643022537,0,0.9538480043411255],"min":[0.29314252734184265,0.06225592643022537,-0.019128000363707542,0.9538480043411255],"name":"accessor_buffer_mixamorig:RightToeBase_TPose_1","type":"VEC4"},{"bufferView":595,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-9.267012046620948e-8,-5.819203607870804e-8,-6.402842700481415e-8,1],"name":"accessor_buffer_mixamorig:RightHandRing4_TPose_1","type":"VEC4"},{"bufferView":486,"byteOffset":0,"componentType":5126,"count":2,"max":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"min":[0.00007425900548696518,98.80355834960938,0.4175964593887329],"name":"accessor_buffer_mixamorig:Hips_TPose_0","type":"VEC3"},{"bufferView":484,"byteOffset":0,"componentType":5126,"count":2,"max":[0.019991455599665642,0,0.05151980370283127,0.9982961416244507],"min":[0.019991455599665642,-0.018730632960796356,0.05151980370283127,0.9982961416244507],"name":"accessor_buffer_mixamorig:RightHand_TPose_1","type":"VEC4"},{"bufferView":520,"byteOffset":0,"componentType":5126,"count":2,"max":[4.818217576030293e-7,0,4.313407657718926e-7,1],"min":[4.818217576030293e-7,-0.00015852972865104675,4.313407657718926e-7,1],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_1","type":"VEC4"},{"bufferView":522,"byteOffset":0,"componentType":5126,"count":2,"max":[0.012762725353240967,1.3817871809005737,0],"min":[0.012762725353240967,1.3817871809005737,-0.000005348862032406032],"name":"accessor_buffer_mixamorig:LeftHandPinky4_TPose_0","type":"VEC3"},{"bufferView":506,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,0.9999997615814209],"min":[1,1.0000001192092896,0.9999997615814209],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_2","type":"VEC3"},{"bufferView":501,"byteOffset":0,"componentType":5126,"count":2,"max":[0.615178108215332,5.987785816192627,0],"min":[0.615178108215332,5.987785816192627,-0.2521420121192932],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_0","type":"VEC3"},{"bufferView":544,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-1.473153474762512e-7,-1.363462160952622e-7,-1.3542921806219965e-7,1],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_1","type":"VEC4"},{"bufferView":481,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999955296516418],"min":[-0.0000013217339756010915,-0.00023518799571320415,-0.002985715866088867,0.9999955296516418],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_1","type":"VEC4"},{"bufferView":553,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.001648154342547059,0.014273405075073242,0.9826878309249878],"min":[-0.1847110539674759,0.001648154342547059,0.014273405075073242,0.9826878309249878],"name":"accessor_buffer_mixamorig:LeftArm_TPose_1","type":"VEC4"},{"bufferView":466,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.034996457397937775,0,0.9979900121688843],"min":[-0.019062332808971405,0.034996457397937775,-0.04927309229969978,0.9979900121688843],"name":"accessor_buffer_mixamorig:RightHandPinky1_TPose_1","type":"VEC4"},{"bufferView":513,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"min":[0.01121482253074646,2.20082426071167,0.00002157763810828328],"name":"accessor_buffer_mixamorig:RightHandMiddle3_TPose_0","type":"VEC3"},{"bufferView":475,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.010770494118332863,0,0.9985118508338928],"min":[-0.020383575931191444,0.010770494118332863,-0.049423426389694214,0.9985118508338928],"name":"accessor_buffer_mixamorig:RightHandRing1_TPose_1","type":"VEC4"},{"bufferView":603,"byteOffset":0,"componentType":5126,"count":2,"max":[0,8.988426208496094,0],"min":[-3.513521432876587,8.988426208496094,-0.11455392837524414],"name":"accessor_buffer_mixamorig:RightShoulder_TPose_0","type":"VEC3"},{"bufferView":557,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998211860657,0.9999998211860657],"min":[1,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb2_TPose_2","type":"VEC3"},{"bufferView":600,"byteOffset":0,"componentType":5126,"count":2,"max":[0,6.0912089347839355,0.09324643015861511],"min":[-2.381847381591797,6.0912089347839355,0.09324643015861511],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_0","type":"VEC3"},{"bufferView":487,"byteOffset":0,"componentType":5126,"count":2,"max":[5.5535473109102895e-8,2.9428024461708446e-9,0,1],"min":[5.5535473109102895e-8,2.9428024461708446e-9,-0.000005548599347093841,1],"name":"accessor_buffer_mixamorig:Hips_TPose_1","type":"VEC4"},{"bufferView":572,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,1.0000001192092896],"min":[1,0.9999999403953552,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandIndex4_TPose_2","type":"VEC3"},{"bufferView":527,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandThumb1_TPose_2","type":"VEC3"},{"bufferView":504,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.77089500427246,0.000006812736501160543],"min":[-2.460183168295771e-7,22.77089500427246,0.000006812736501160543],"name":"accessor_buffer_mixamorig:RightForeArm_TPose_0","type":"VEC3"},{"bufferView":503,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,1,1.0000001192092896],"min":[0.9999998807907104,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":452,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandIndex4_TPose_2","type":"VEC3"},{"bufferView":559,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"min":[-8.061967378125701e-7,0.00017113897774834186,0.003068875055760145,0.9999952912330627],"name":"accessor_buffer_mixamorig:LeftHandRing2_TPose_1","type":"VEC4"},{"bufferView":412,"byteOffset":0,"componentType":5121,"count":3054,"max":[63,63,63,60],"min":[1,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_0","type":"VEC4"},{"bufferView":482,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:RightHandMiddle2_TPose_2","type":"VEC3"},{"bufferView":497,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1.0000001192092896],"min":[1,1.0000001192092896,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandRing1_TPose_2","type":"VEC3"},{"bufferView":418,"byteOffset":0,"componentType":5126,"count":2,"max":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"min":[0.21630768477916718,0.07504062354564667,0.2835485637187958,0.9312251806259155],"name":"accessor_buffer_mixamorig:LeftHandThumb1_TPose_1","type":"VEC4"},{"bufferView":552,"byteOffset":0,"componentType":5126,"count":2,"max":[0,7.4837236404418945,0],"min":[-5.960464477539063e-8,7.4837236404418945,-0.0000017881393432617188],"name":"accessor_buffer_mixamorig:LeftArm_TPose_0","type":"VEC3"},{"bufferView":462,"byteOffset":0,"componentType":5126,"count":2,"max":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"min":[0.07793843746185303,2.1093196868896484,0.0000030547380447387695],"name":"accessor_buffer_mixamorig:LeftHandThumb3_TPose_0","type":"VEC3"},{"bufferView":574,"byteOffset":0,"componentType":5126,"count":2,"max":[0,4.833076872046149e-8,7.194104423291492e-9,1],"min":[-4.388131102928128e-8,4.833076872046149e-8,7.194104423291492e-9,1],"name":"accessor_buffer_mixamorig:LeftHandMiddle4_TPose_1","type":"VEC4"},{"bufferView":579,"byteOffset":0,"componentType":5126,"count":2,"max":[2.655433490872383e-7,41.85009002685547,0],"min":[2.655433490872383e-7,41.85009002685547,-1.4621764421463013e-7],"name":"accessor_buffer_mixamorig:RightFoot_TPose_0","type":"VEC3"},{"bufferView":569,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.0000001192092896,1],"min":[1,1.0000001192092896,1],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_2","type":"VEC3"},{"bufferView":543,"byteOffset":0,"componentType":5126,"count":2,"max":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"min":[0.021941065788269043,1.7619209289550781,0.00002016910548263695],"name":"accessor_buffer_mixamorig:LeftHandRing4_TPose_0","type":"VEC3"},{"bufferView":607,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.05077396705746651,0.998155415058136],"min":[-0.014275818131864071,-0.030067145824432373,0.05077396705746651,0.998155415058136],"name":"accessor_buffer_mixamorig:LeftHandPinky1_TPose_1","type":"VEC4"},{"bufferView":597,"byteOffset":0,"componentType":5126,"count":2,"max":[0,12.089044570922852,1.7881393432617188e-7],"min":[-4.116445779800415e-7,12.089044570922852,1.7881393432617188e-7],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_0","type":"VEC3"},{"bufferView":471,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.9782497882843018,0],"min":[-0.004050195217132568,1.9782497882843018,-0.000013029115507379174],"name":"accessor_buffer_mixamorig:LeftHandRing3_TPose_0","type":"VEC3"},{"bufferView":601,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.04963767156004906,0.9986410140991211],"min":[-0.01586439274251461,-0.0007755132974125445,0.04963767156004906,0.9986410140991211],"name":"accessor_buffer_mixamorig:LeftHandIndex1_TPose_1","type":"VEC4"},{"bufferView":412,"byteOffset":16,"componentType":5126,"count":3054,"max":[1.000009298324585,0.4988971948623657,0.3152562081813812,0.21635007858276367],"min":[0.2751019597053528,0,0,0],"name":"accessor_buffer_F010_Saber.003_skin_1","type":"VEC4"},{"bufferView":612,"byteOffset":0,"componentType":5126,"count":65,"max":[1.0022532939910889,1.001609444618225,0.3732517957687378,0,0.17934095859527588,1.0022534132003784,0.9950379729270935,0,0.998527467250824,0.9991320371627808,1.0022532939910889,0,36.08419418334961,95.18425750732422,139.18643188476562,1],"min":[-1.0021002292633057,-1.0016006231307983,-0.39615026116371155,0,-0.16228264570236206,-1.0016993284225464,-0.998423159122467,0,-0.9986722469329834,-0.3514665365219116,-0.1876296103000641,0,-40.01988983154297,-158.2681884765625,-8.502774238586426,1],"name":"accessor_buffer_IBM_Saber_maid_dress_skin_0","type":"MAT4"},{"bufferView":547,"byteOffset":0,"componentType":5126,"count":2,"max":[8.172354171165352e-8,0.000008062284905463457,0,1],"min":[8.172354171165352e-8,0.000008062284905463457,-1.2136295524101115e-8,1],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_1","type":"VEC4"},{"bufferView":435,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015063196420669556,2.0928525924682617,0],"min":[0.015063196420669556,2.0928525924682617,-0.00001477246405556798],"name":"accessor_buffer_mixamorig:RightHandIndex3_TPose_0","type":"VEC3"},{"bufferView":448,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0.000005544060059037292,0.9992028474807739],"min":[-0.03992169722914696,-2.2444967839874153e-7,0.000005544060059037292,0.9992028474807739],"name":"accessor_buffer_mixamorig:Spine_TPose_1","type":"VEC4"},{"bufferView":548,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1.000000238418579,1.0000001192092896],"min":[1,1.000000238418579,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftToe_End_TPose_2","type":"VEC3"},{"bufferView":431,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine2_TPose_2","type":"VEC3"},{"bufferView":502,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.003121189074590802,0,0.9987351894378662],"min":[-0.02078564278781414,0.003121189074590802,-0.04567611962556839,0.9987351894378662],"name":"accessor_buffer_mixamorig:RightHandMiddle1_TPose_1","type":"VEC4"},{"bufferView":567,"byteOffset":0,"componentType":5126,"count":2,"max":[0,1.4578983783721924,0],"min":[-0.014494240283966064,1.4578983783721924,-0.000007362202268268447],"name":"accessor_buffer_mixamorig:RightHandPinky4_TPose_0","type":"VEC3"},{"bufferView":461,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1,1.0000001192092896],"min":[1.0000001192092896,1,1.0000001192092896],"name":"accessor_buffer_mixamorig:LeftHandMiddle1_TPose_2","type":"VEC3"},{"bufferView":423,"byteOffset":0,"componentType":5126,"count":2,"max":[0,19.023351669311523,0],"min":[-5.494803190231323e-8,19.023351669311523,-0.0000032789830584079027],"name":"accessor_buffer_mixamorig:LeftHand_TPose_0","type":"VEC3"},{"bufferView":439,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,0.9999995231628418],"min":[-0.0000017708856603348977,-0.00008915702346712351,-0.0010598038788884878,0.9999995231628418],"name":"accessor_buffer_mixamorig:RightHandPinky2_TPose_1","type":"VEC4"},{"bufferView":599,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"min":[0.9999999403953552,0.9999998211860657,0.9999998807907104],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_2","type":"VEC3"},{"bufferView":584,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999998807907104,0.9999999403953552],"min":[1,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftHandPinky2_TPose_2","type":"VEC3"},{"bufferView":488,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Hips_TPose_2","type":"VEC3"},{"bufferView":587,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,1],"min":[1.0000001192092896,0.9999998211860657,1],"name":"accessor_buffer_mixamorig:LeftLeg_TPose_2","type":"VEC3"},{"bufferView":521,"byteOffset":0,"componentType":5126,"count":2,"max":[1,0.9999999403953552,0.9999999403953552],"min":[1,0.9999999403953552,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_2","type":"VEC3"},{"bufferView":454,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"min":[-9.933781939253095e-7,0.00005373970634536818,0.003363647498190403,0.9999943375587463],"name":"accessor_buffer_mixamorig:LeftHandIndex2_TPose_1","type":"VEC4"},{"bufferView":410,"byteOffset":24,"componentType":5126,"count":3054,"max":[0.9956809878349304,0.9849260002374649],"min":[0.0069690002128481865,0.0113450288772583],"name":"accessor_buffer_F010_Saber.003_2","type":"VEC2"},{"bufferView":533,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"min":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightHandMiddle4_TPose_2","type":"VEC3"},{"bufferView":581,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"min":[0.9999999403953552,0.9999998211860657,0.9999999403953552],"name":"accessor_buffer_mixamorig:RightFoot_TPose_2","type":"VEC3"},{"bufferView":566,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"min":[1.0000001192092896,1.0000001192092896,0.9999999403953552],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_2","type":"VEC3"},{"bufferView":458,"byteOffset":0,"componentType":5126,"count":2,"max":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"min":[1.0000001192092896,0.9999998211860657,0.9999998211860657],"name":"accessor_buffer_mixamorig:RightHandThumb4_TPose_2","type":"VEC3"},{"bufferView":598,"byteOffset":0,"componentType":5126,"count":2,"max":[0.291592001914978,0,0.018840743228793144,0.954366147518158],"min":[0.291592001914978,-0.06168048828840256,0.018840743228793144,0.954366147518158],"name":"accessor_buffer_mixamorig:LeftToeBase_TPose_1","type":"VEC4"},{"bufferView":493,"byteOffset":0,"componentType":5126,"count":2,"max":[0,0,0,1],"min":[-3.306195139884949e-8,-0.000008229748345911503,-2.3865142750878476e-8,1],"name":"accessor_buffer_mixamorig:RightToe_End_TPose_1","type":"VEC4"},{"bufferView":483,"byteOffset":0,"componentType":5126,"count":2,"max":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"min":[6.116943040979095e-7,19.02713966369629,0.00000519820605404675],"name":"accessor_buffer_mixamorig:RightHand_TPose_0","type":"VEC3"},{"bufferView":519,"byteOffset":0,"componentType":5126,"count":2,"max":[0,22.7723331451416,0.000002205953933298588],"min":[-0.00000198512316273991,22.7723331451416,0.000002205953933298588],"name":"accessor_buffer_mixamorig:LeftForeArm_TPose_0","type":"VEC3"},{"bufferView":424,"byteOffset":0,"componentType":5126,"count":2,"max":[0.015112828463315964,0.01513464655727148,0,0.9984008073806763],"min":[0.015112828463315964,0.01513464655727148,-0.052329666912555695,0.9984008073806763],"name":"accessor_buffer_mixamorig:LeftHand_TPose_1","type":"VEC4"},{"bufferView":563,"byteOffset":0,"componentType":5126,"count":2,"max":[1,1,1],"min":[1,1,1],"name":"accessor_buffer_mixamorig:Spine1_TPose_2","type":"VEC3"},{"bufferView":561,"byteOffset":0,"componentType":5126,"count":2,"max":[5.414642258866342e-13,8.022480964660645,0],"min":[5.414642258866342e-13,8.022480964660645,-5.364418029785156e-7],"name":"accessor_buffer_mixamorig:Spine1_TPose_0","type":"VEC3"},{"bufferView":565,"byteOffset":0,"componentType":5126,"count":2,"max":[0.5753993988037109,0.4047872722148895,0,0.39317330718040466],"min":[0.5753993988037109,0.4047872722148895,-0.592011570930481,0.39317330718040466],"name":"accessor_buffer_mixamorig:LeftShoulder_TPose_1","type":"VEC4"},{"bufferView":591,"byteOffset":0,"componentType":5126,"count":2,"max":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"min":[0.01632753014564514,2.0911762714385986,0.000011799194908235222],"name":"accessor_buffer_mixamorig:RightHandRing3_TPose_0","type":"VEC3"},{"bufferView":554,"byteOffset":0,"componentType":5126,"count":2,"max":[0.9999998807907104,0.9999999403953552,1],"min":[0.9999998807907104,0.9999999403953552,1],"name":"accessor_buffer_mixamorig:LeftArm_TPose_2","type":"VEC3"}],"animations":[{"channels":[{"sampler":0,"target":{"node":39,"path":"translation"}},{"sampler":1,"target":{"node":39,"path":"rotation"}},{"sampler":2,"target":{"node":39,"path":"scale"}},{"sampler":3,"target":{"node":54,"path":"translation"}},{"sampler":4,"target":{"node":54,"path":"rotation"}},{"sampler":5,"target":{"node":54,"path":"scale"}},{"sampler":6,"target":{"node":42,"path":"translation"}},{"sampler":7,"target":{"node":42,"path":"rotation"}},{"sampler":8,"target":{"node":42,"path":"scale"}},{"sampler":9,"target":{"node":55,"path":"translation"}},{"sampler":10,"target":{"node":55,"path":"rotation"}},{"sampler":11,"target":{"node":55,"path":"scale"}},{"sampler":12,"target":{"node":19,"path":"translation"}},{"sampler":13,"target":{"node":19,"path":"rotation"}},{"sampler":14,"target":{"node":19,"path":"scale"}},{"sampler":15,"target":{"node":22,"path":"translation"}},{"sampler":16,"target":{"node":22,"path":"rotation"}},{"sampler":17,"target":{"node":22,"path":"scale"}},{"sampler":18,"target":{"node":14,"path":"translation"}},{"sampler":19,"target":{"node":14,"path":"rotation"}},{"sampler":20,"target":{"node":14,"path":"scale"}},{"sampler":21,"target":{"node":53,"path":"translation"}},{"sampler":22,"target":{"node":53,"path":"rotation"}},{"sampler":23,"target":{"node":53,"path":"scale"}},{"sampler":24,"target":{"node":43,"path":"translation"}},{"sampler":25,"target":{"node":43,"path":"rotation"}},{"sampler":26,"target":{"node":43,"path":"scale"}},{"sampler":27,"target":{"node":45,"path":"translation"}},{"sampler":28,"target":{"node":45,"path":"rotation"}},{"sampler":29,"target":{"node":45,"path":"scale"}},{"sampler":30,"target":{"node":31,"path":"translation"}},{"sampler":31,"target":{"node":31,"path":"rotation"}},{"sampler":32,"target":{"node":31,"path":"scale"}},{"sampler":33,"target":{"node":29,"path":"translation"}},{"sampler":34,"target":{"node":29,"path":"rotation"}},{"sampler":35,"target":{"node":29,"path":"scale"}},{"sampler":36,"target":{"node":56,"path":"translation"}},{"sampler":37,"target":{"node":56,"path":"rotation"}},{"sampler":38,"target":{"node":56,"path":"scale"}},{"sampler":39,"target":{"node":62,"path":"translation"}},{"sampler":40,"target":{"node":62,"path":"rotation"}},{"sampler":41,"target":{"node":62,"path":"scale"}},{"sampler":42,"target":{"node":40,"path":"translation"}},{"sampler":43,"target":{"node":40,"path":"rotation"}},{"sampler":44,"target":{"node":40,"path":"scale"}},{"sampler":45,"target":{"node":0,"path":"translation"}},{"sampler":46,"target":{"node":0,"path":"rotation"}},{"sampler":47,"target":{"node":0,"path":"scale"}},{"sampler":48,"target":{"node":37,"path":"translation"}},{"sampler":49,"target":{"node":37,"path":"rotation"}},{"sampler":50,"target":{"node":37,"path":"scale"}},{"sampler":51,"target":{"node":26,"path":"translation"}},{"sampler":52,"target":{"node":26,"path":"rotation"}},{"sampler":53,"target":{"node":26,"path":"scale"}},{"sampler":54,"target":{"node":48,"path":"translation"}},{"sampler":55,"target":{"node":48,"path":"rotation"}},{"sampler":56,"target":{"node":48,"path":"scale"}},{"sampler":57,"target":{"node":66,"path":"translation"}},{"sampler":58,"target":{"node":66,"path":"rotation"}},{"sampler":59,"target":{"node":66,"path":"scale"}},{"sampler":60,"target":{"node":34,"path":"translation"}},{"sampler":61,"target":{"node":34,"path":"rotation"}},{"sampler":62,"target":{"node":34,"path":"scale"}},{"sampler":63,"target":{"node":63,"path":"translation"}},{"sampler":64,"target":{"node":63,"path":"rotation"}},{"sampler":65,"target":{"node":63,"path":"scale"}},{"sampler":66,"target":{"node":44,"path":"translation"}},{"sampler":67,"target":{"node":44,"path":"rotation"}},{"sampler":68,"target":{"node":44,"path":"scale"}},{"sampler":69,"target":{"node":46,"path":"translation"}},{"sampler":70,"target":{"node":46,"path":"rotation"}},{"sampler":71,"target":{"node":46,"path":"scale"}},{"sampler":72,"target":{"node":28,"path":"translation"}},{"sampler":73,"target":{"node":28,"path":"rotation"}},{"sampler":74,"target":{"node":28,"path":"scale"}},{"sampler":75,"target":{"node":15,"path":"translation"}},{"sampler":76,"target":{"node":15,"path":"rotation"}},{"sampler":77,"target":{"node":15,"path":"scale"}},{"sampler":78,"target":{"node":5,"path":"translation"}},{"sampler":79,"target":{"node":5,"path":"rotation"}},{"sampler":80,"target":{"node":5,"path":"scale"}},{"sampler":81,"target":{"node":27,"path":"translation"}},{"sampler":82,"target":{"node":27,"path":"rotation"}},{"sampler":83,"target":{"node":27,"path":"scale"}},{"sampler":84,"target":{"node":24,"path":"translation"}},{"sampler":85,"target":{"node":24,"path":"rotation"}},{"sampler":86,"target":{"node":24,"path":"scale"}},{"sampler":87,"target":{"node":51,"path":"translation"}},{"sampler":88,"target":{"node":51,"path":"rotation"}},{"sampler":89,"target":{"node":51,"path":"scale"}},{"sampler":90,"target":{"node":13,"path":"translation"}},{"sampler":91,"target":{"node":13,"path":"rotation"}},{"sampler":92,"target":{"node":13,"path":"scale"}},{"sampler":93,"target":{"node":57,"path":"translation"}},{"sampler":94,"target":{"node":57,"path":"rotation"}},{"sampler":95,"target":{"node":57,"path":"scale"}},{"sampler":96,"target":{"node":61,"path":"translation"}},{"sampler":97,"target":{"node":61,"path":"rotation"}},{"sampler":98,"target":{"node":61,"path":"scale"}},{"sampler":99,"target":{"node":3,"path":"translation"}},{"sampler":100,"target":{"node":3,"path":"rotation"}},{"sampler":101,"target":{"node":3,"path":"scale"}},{"sampler":102,"target":{"node":41,"path":"translation"}},{"sampler":103,"target":{"node":41,"path":"rotation"}},{"sampler":104,"target":{"node":41,"path":"scale"}},{"sampler":105,"target":{"node":6,"path":"translation"}},{"sampler":106,"target":{"node":6,"path":"rotation"}},{"sampler":107,"target":{"node":6,"path":"scale"}},{"sampler":108,"target":{"node":59,"path":"translation"}},{"sampler":109,"target":{"node":59,"path":"rotation"}},{"sampler":110,"target":{"node":59,"path":"scale"}},{"sampler":111,"target":{"node":58,"path":"translation"}},{"sampler":112,"target":{"node":58,"path":"rotation"}},{"sampler":113,"target":{"node":58,"path":"scale"}},{"sampler":114,"target":{"node":32,"path":"translation"}},{"sampler":115,"target":{"node":32,"path":"rotation"}},{"sampler":116,"target":{"node":32,"path":"scale"}},{"sampler":117,"target":{"node":7,"path":"translation"}},{"sampler":118,"target":{"node":7,"path":"rotation"}},{"sampler":119,"target":{"node":7,"path":"scale"}},{"sampler":120,"target":{"node":11,"path":"translation"}},{"sampler":121,"target":{"node":11,"path":"rotation"}},{"sampler":122,"target":{"node":11,"path":"scale"}},{"sampler":123,"target":{"node":20,"path":"translation"}},{"sampler":124,"target":{"node":20,"path":"rotation"}},{"sampler":125,"target":{"node":20,"path":"scale"}},{"sampler":126,"target":{"node":64,"path":"translation"}},{"sampler":127,"target":{"node":64,"path":"rotation"}},{"sampler":128,"target":{"node":64,"path":"scale"}},{"sampler":129,"target":{"node":49,"path":"translation"}},{"sampler":130,"target":{"node":49,"path":"rotation"}},{"sampler":131,"target":{"node":49,"path":"scale"}},{"sampler":132,"target":{"node":9,"path":"translation"}},{"sampler":133,"target":{"node":9,"path":"rotation"}},{"sampler":134,"target":{"node":9,"path":"scale"}},{"sampler":135,"target":{"node":4,"path":"translation"}},{"sampler":136,"target":{"node":4,"path":"rotation"}},{"sampler":137,"target":{"node":4,"path":"scale"}},{"sampler":138,"target":{"node":18,"path":"translation"}},{"sampler":139,"target":{"node":18,"path":"rotation"}},{"sampler":140,"target":{"node":18,"path":"scale"}},{"sampler":141,"target":{"node":65,"path":"translation"}},{"sampler":142,"target":{"node":65,"path":"rotation"}},{"sampler":143,"target":{"node":65,"path":"scale"}},{"sampler":144,"target":{"node":8,"path":"translation"}},{"sampler":145,"target":{"node":8,"path":"rotation"}},{"sampler":146,"target":{"node":8,"path":"scale"}},{"sampler":147,"target":{"node":60,"path":"translation"}},{"sampler":148,"target":{"node":60,"path":"rotation"}},{"sampler":149,"target":{"node":60,"path":"scale"}},{"sampler":150,"target":{"node":52,"path":"translation"}},{"sampler":151,"target":{"node":52,"path":"rotation"}},{"sampler":152,"target":{"node":52,"path":"scale"}},{"sampler":153,"target":{"node":30,"path":"translation"}},{"sampler":154,"target":{"node":30,"path":"rotation"}},{"sampler":155,"target":{"node":30,"path":"scale"}},{"sampler":156,"target":{"node":36,"path":"translation"}},{"sampler":157,"target":{"node":36,"path":"rotation"}},{"sampler":158,"target":{"node":36,"path":"scale"}},{"sampler":159,"target":{"node":10,"path":"translation"}},{"sampler":160,"target":{"node":10,"path":"rotation"}},{"sampler":161,"target":{"node":10,"path":"scale"}},{"sampler":162,"target":{"node":12,"path":"translation"}},{"sampler":163,"target":{"node":12,"path":"rotation"}},{"sampler":164,"target":{"node":12,"path":"scale"}},{"sampler":165,"target":{"node":21,"path":"translation"}},{"sampler":166,"target":{"node":21,"path":"rotation"}},{"sampler":167,"target":{"node":21,"path":"scale"}},{"sampler":168,"target":{"node":47,"path":"translation"}},{"sampler":169,"target":{"node":47,"path":"rotation"}},{"sampler":170,"target":{"node":47,"path":"scale"}},{"sampler":171,"target":{"node":35,"path":"translation"}},{"sampler":172,"target":{"node":35,"path":"rotation"}},{"sampler":173,"target":{"node":35,"path":"scale"}},{"sampler":174,"target":{"node":25,"path":"translation"}},{"sampler":175,"target":{"node":25,"path":"rotation"}},{"sampler":176,"target":{"node":25,"path":"scale"}},{"sampler":177,"target":{"node":33,"path":"translation"}},{"sampler":178,"target":{"node":33,"path":"rotation"}},{"sampler":179,"target":{"node":33,"path":"scale"}},{"sampler":180,"target":{"node":67,"path":"translation"}},{"sampler":181,"target":{"node":67,"path":"rotation"}},{"sampler":182,"target":{"node":67,"path":"scale"}},{"sampler":183,"target":{"node":16,"path":"translation"}},{"sampler":184,"target":{"node":16,"path":"rotation"}},{"sampler":185,"target":{"node":16,"path":"scale"}},{"sampler":186,"target":{"node":50,"path":"translation"}},{"sampler":187,"target":{"node":50,"path":"rotation"}},{"sampler":188,"target":{"node":50,"path":"scale"}},{"sampler":189,"target":{"node":17,"path":"translation"}},{"sampler":190,"target":{"node":17,"path":"rotation"}},{"sampler":191,"target":{"node":17,"path":"scale"}},{"sampler":192,"target":{"node":38,"path":"translation"}},{"sampler":193,"target":{"node":38,"path":"rotation"}},{"sampler":194,"target":{"node":38,"path":"scale"}},{"sampler":195,"target":{"node":23,"path":"translation"}},{"sampler":196,"target":{"node":23,"path":"rotation"}},{"sampler":197,"target":{"node":23,"path":"scale"}}],"name":"StandPose","samplers":[{"input":27,"interpolation":"LINEAR","output":34},{"input":27,"interpolation":"LINEAR","output":74},{"input":27,"interpolation":"LINEAR","output":170},{"input":27,"interpolation":"LINEAR","output":114},{"input":27,"interpolation":"LINEAR","output":172},{"input":27,"interpolation":"LINEAR","output":37},{"input":27,"interpolation":"LINEAR","output":88},{"input":27,"interpolation":"LINEAR","output":71},{"input":27,"interpolation":"LINEAR","output":195},{"input":27,"interpolation":"LINEAR","output":72},{"input":27,"interpolation":"LINEAR","output":49},{"input":27,"interpolation":"LINEAR","output":125},{"input":27,"interpolation":"LINEAR","output":118},{"input":27,"interpolation":"LINEAR","output":130},{"input":27,"interpolation":"LINEAR","output":0},{"input":27,"interpolation":"LINEAR","output":42},{"input":27,"interpolation":"LINEAR","output":134},{"input":27,"interpolation":"LINEAR","output":187},{"input":27,"interpolation":"LINEAR","output":93},{"input":27,"interpolation":"LINEAR","output":140},{"input":27,"interpolation":"LINEAR","output":119},{"input":27,"interpolation":"LINEAR","output":30},{"input":27,"interpolation":"LINEAR","output":2},{"input":27,"interpolation":"LINEAR","output":190},{"input":27,"interpolation":"LINEAR","output":135},{"input":27,"interpolation":"LINEAR","output":161},{"input":27,"interpolation":"LINEAR","output":64},{"input":27,"interpolation":"LINEAR","output":173},{"input":27,"interpolation":"LINEAR","output":103},{"input":27,"interpolation":"LINEAR","output":175},{"input":27,"interpolation":"LINEAR","output":95},{"input":27,"interpolation":"LINEAR","output":147},{"input":27,"interpolation":"LINEAR","output":79},{"input":27,"interpolation":"LINEAR","output":196},{"input":27,"interpolation":"LINEAR","output":26},{"input":27,"interpolation":"LINEAR","output":62},{"input":27,"interpolation":"LINEAR","output":150},{"input":27,"interpolation":"LINEAR","output":166},{"input":27,"interpolation":"LINEAR","output":39},{"input":27,"interpolation":"LINEAR","output":12},{"input":27,"interpolation":"LINEAR","output":11},{"input":27,"interpolation":"LINEAR","output":109},{"input":27,"interpolation":"LINEAR","output":5},{"input":27,"interpolation":"LINEAR","output":121},{"input":27,"interpolation":"LINEAR","output":108},{"input":27,"interpolation":"LINEAR","output":86},{"input":27,"interpolation":"LINEAR","output":77},{"input":27,"interpolation":"LINEAR","output":18},{"input":27,"interpolation":"LINEAR","output":142},{"input":27,"interpolation":"LINEAR","output":153},{"input":27,"interpolation":"LINEAR","output":19},{"input":27,"interpolation":"LINEAR","output":32},{"input":27,"interpolation":"LINEAR","output":97},{"input":27,"interpolation":"LINEAR","output":36},{"input":27,"interpolation":"LINEAR","output":73},{"input":27,"interpolation":"LINEAR","output":211},{"input":27,"interpolation":"LINEAR","output":91},{"input":27,"interpolation":"LINEAR","output":83},{"input":27,"interpolation":"LINEAR","output":123},{"input":27,"interpolation":"LINEAR","output":28},{"input":27,"interpolation":"LINEAR","output":201},{"input":27,"interpolation":"LINEAR","output":100},{"input":27,"interpolation":"LINEAR","output":66},{"input":27,"interpolation":"LINEAR","output":183},{"input":27,"interpolation":"LINEAR","output":177},{"input":27,"interpolation":"LINEAR","output":57},{"input":27,"interpolation":"LINEAR","output":69},{"input":27,"interpolation":"LINEAR","output":29},{"input":27,"interpolation":"LINEAR","output":85},{"input":27,"interpolation":"LINEAR","output":104},{"input":27,"interpolation":"LINEAR","output":14},{"input":27,"interpolation":"LINEAR","output":9},{"input":27,"interpolation":"LINEAR","output":43},{"input":27,"interpolation":"LINEAR","output":58},{"input":27,"interpolation":"LINEAR","output":25},{"input":27,"interpolation":"LINEAR","output":75},{"input":27,"interpolation":"LINEAR","output":136},{"input":27,"interpolation":"LINEAR","output":165},{"input":27,"interpolation":"LINEAR","output":96},{"input":27,"interpolation":"LINEAR","output":157},{"input":27,"interpolation":"LINEAR","output":185},{"input":27,"interpolation":"LINEAR","output":16},{"input":27,"interpolation":"LINEAR","output":160},{"input":27,"interpolation":"LINEAR","output":193},{"input":27,"interpolation":"LINEAR","output":87},{"input":27,"interpolation":"LINEAR","output":208},{"input":27,"interpolation":"LINEAR","output":213},{"input":27,"interpolation":"LINEAR","output":169},{"input":27,"interpolation":"LINEAR","output":149},{"input":27,"interpolation":"LINEAR","output":94},{"input":27,"interpolation":"LINEAR","output":68},{"input":27,"interpolation":"LINEAR","output":139},{"input":27,"interpolation":"LINEAR","output":6},{"input":27,"interpolation":"LINEAR","output":92},{"input":27,"interpolation":"LINEAR","output":59},{"input":27,"interpolation":"LINEAR","output":52},{"input":27,"interpolation":"LINEAR","output":24},{"input":27,"interpolation":"LINEAR","output":116},{"input":27,"interpolation":"LINEAR","output":45},{"input":27,"interpolation":"LINEAR","output":56},{"input":27,"interpolation":"LINEAR","output":171},{"input":27,"interpolation":"LINEAR","output":60},{"input":27,"interpolation":"LINEAR","output":23},{"input":27,"interpolation":"LINEAR","output":188},{"input":27,"interpolation":"LINEAR","output":76},{"input":27,"interpolation":"LINEAR","output":138},{"input":27,"interpolation":"LINEAR","output":204},{"input":27,"interpolation":"LINEAR","output":113},{"input":27,"interpolation":"LINEAR","output":162},{"input":27,"interpolation":"LINEAR","output":112},{"input":27,"interpolation":"LINEAR","output":151},{"input":27,"interpolation":"LINEAR","output":82},{"input":27,"interpolation":"LINEAR","output":127},{"input":27,"interpolation":"LINEAR","output":65},{"input":27,"interpolation":"LINEAR","output":50},{"input":27,"interpolation":"LINEAR","output":63},{"input":27,"interpolation":"LINEAR","output":163},{"input":27,"interpolation":"LINEAR","output":198},{"input":27,"interpolation":"LINEAR","output":155},{"input":27,"interpolation":"LINEAR","output":98},{"input":27,"interpolation":"LINEAR","output":101},{"input":27,"interpolation":"LINEAR","output":47},{"input":27,"interpolation":"LINEAR","output":202},{"input":27,"interpolation":"LINEAR","output":22},{"input":27,"interpolation":"LINEAR","output":129},{"input":27,"interpolation":"LINEAR","output":137},{"input":27,"interpolation":"LINEAR","output":212},{"input":27,"interpolation":"LINEAR","output":203},{"input":27,"interpolation":"LINEAR","output":143},{"input":27,"interpolation":"LINEAR","output":133},{"input":27,"interpolation":"LINEAR","output":131},{"input":27,"interpolation":"LINEAR","output":199},{"input":27,"interpolation":"LINEAR","output":17},{"input":27,"interpolation":"LINEAR","output":154},{"input":27,"interpolation":"LINEAR","output":120},{"input":27,"interpolation":"LINEAR","output":61},{"input":27,"interpolation":"LINEAR","output":7},{"input":27,"interpolation":"LINEAR","output":90},{"input":27,"interpolation":"LINEAR","output":146},{"input":27,"interpolation":"LINEAR","output":186},{"input":27,"interpolation":"LINEAR","output":8},{"input":27,"interpolation":"LINEAR","output":53},{"input":27,"interpolation":"LINEAR","output":15},{"input":27,"interpolation":"LINEAR","output":214},{"input":27,"interpolation":"LINEAR","output":141},{"input":27,"interpolation":"LINEAR","output":67},{"input":27,"interpolation":"LINEAR","output":81},{"input":27,"interpolation":"LINEAR","output":152},{"input":27,"interpolation":"LINEAR","output":35},{"input":27,"interpolation":"LINEAR","output":33},{"input":27,"interpolation":"LINEAR","output":179},{"input":27,"interpolation":"LINEAR","output":70},{"input":27,"interpolation":"LINEAR","output":124},{"input":27,"interpolation":"LINEAR","output":106},{"input":27,"interpolation":"LINEAR","output":41},{"input":27,"interpolation":"LINEAR","output":44},{"input":27,"interpolation":"LINEAR","output":38},{"input":27,"interpolation":"LINEAR","output":144},{"input":27,"interpolation":"LINEAR","output":174},{"input":27,"interpolation":"LINEAR","output":21},{"input":27,"interpolation":"LINEAR","output":126},{"input":27,"interpolation":"LINEAR","output":99},{"input":27,"interpolation":"LINEAR","output":78},{"input":27,"interpolation":"LINEAR","output":176},{"input":27,"interpolation":"LINEAR","output":197},{"input":27,"interpolation":"LINEAR","output":115},{"input":27,"interpolation":"LINEAR","output":13},{"input":27,"interpolation":"LINEAR","output":148},{"input":27,"interpolation":"LINEAR","output":102},{"input":27,"interpolation":"LINEAR","output":159},{"input":27,"interpolation":"LINEAR","output":181},{"input":27,"interpolation":"LINEAR","output":184},{"input":27,"interpolation":"LINEAR","output":31},{"input":27,"interpolation":"LINEAR","output":189},{"input":27,"interpolation":"LINEAR","output":128},{"input":27,"interpolation":"LINEAR","output":168},{"input":27,"interpolation":"LINEAR","output":55},{"input":27,"interpolation":"LINEAR","output":111},{"input":27,"interpolation":"LINEAR","output":4},{"input":27,"interpolation":"LINEAR","output":209},{"input":27,"interpolation":"LINEAR","output":20},{"input":27,"interpolation":"LINEAR","output":207},{"input":27,"interpolation":"LINEAR","output":205},{"input":27,"interpolation":"LINEAR","output":167},{"input":27,"interpolation":"LINEAR","output":158},{"input":27,"interpolation":"LINEAR","output":48},{"input":27,"interpolation":"LINEAR","output":40},{"input":27,"interpolation":"LINEAR","output":145},{"input":27,"interpolation":"LINEAR","output":117},{"input":27,"interpolation":"LINEAR","output":182},{"input":27,"interpolation":"LINEAR","output":194},{"input":27,"interpolation":"LINEAR","output":180},{"input":27,"interpolation":"LINEAR","output":164},{"input":27,"interpolation":"LINEAR","output":191},{"input":27,"interpolation":"LINEAR","output":80},{"input":27,"interpolation":"LINEAR","output":132},{"input":27,"interpolation":"LINEAR","output":46},{"input":27,"interpolation":"LINEAR","output":3}]}],"asset":{"version":"2.0"},"bufferViews":[{"buffer":0,"byteLength":146960,"byteOffset":0,"byteStride":44,"name":"bufferView_buffer_F010_Saber.003_0","target":34962},{"buffer":0,"byteLength":28752,"byteOffset":146960,"name":"bufferView_buffer_F010_Saber.003_1","target":34963},{"buffer":0,"byteLength":106880,"byteOffset":175712,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_skin_0","target":34962},{"buffer":0,"byteLength":51744,"byteOffset":282592,"byteStride":44,"name":"bufferView_buffer_F010_Saber.001_0","target":34962},{"buffer":0,"byteLength":10008,"byteOffset":334336,"name":"bufferView_buffer_F010_Saber.001_1","target":34963},{"buffer":0,"byteLength":37632,"byteOffset":344344,"byteStride":32,"name":"bufferView_buffer_F010_Saber.001_skin_0","target":34962},{"buffer":0,"byteLength":8,"byteOffset":381976,"byteStride":4,"name":"bufferView_buffer_StandPose_time_0"},{"buffer":0,"byteLength":24,"byteOffset":381984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382008,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382040,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382064,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382088,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382120,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382144,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382168,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382200,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382248,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382280,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382328,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382360,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382408,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382440,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382464,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382488,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382520,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382544,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382568,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382600,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382648,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382680,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382704,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382728,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382760,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382784,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382808,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382840,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382864,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382888,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":382920,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":382944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":382968,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383000,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383024,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383048,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383080,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383104,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383128,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383160,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383184,"byteStride":12,"name":"bufferView_buffer_Character_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383208,"byteStride":16,"name":"bufferView_buffer_Character_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383240,"byteStride":12,"name":"bufferView_buffer_Character_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383288,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383320,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383344,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383368,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383400,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383424,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383448,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383480,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383528,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383560,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383584,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383608,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383640,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383688,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383720,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383744,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383768,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383800,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383848,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383880,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":383928,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":383960,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":383984,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384008,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384040,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384064,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384088,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384120,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384144,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384168,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384200,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384224,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384248,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384280,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384304,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384328,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384360,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384408,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384440,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384488,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384520,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384544,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384568,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384600,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384624,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384648,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384680,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384704,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384728,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384760,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384784,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384808,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384840,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384864,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384888,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":384920,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":384944,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":384968,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385000,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385024,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385048,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385080,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385104,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385128,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385160,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385184,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385208,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385240,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385264,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385288,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385320,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385344,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385368,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385400,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385424,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385448,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385480,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385504,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385528,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385560,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385584,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385608,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385640,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385664,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385688,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385720,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385744,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385768,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385800,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385824,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385848,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385880,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":385928,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":385960,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":385984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386008,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386040,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386088,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386120,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386144,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386168,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386200,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386224,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386248,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386280,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386328,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386360,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386408,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386440,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386488,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386520,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386544,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386568,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386600,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386624,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386648,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386680,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386704,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386728,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386760,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386784,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386808,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386840,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386864,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386888,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":386920,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":386944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":386968,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":387000,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":387024,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":387048,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":387080,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":387104,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":387128,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":387160,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_StandPose_2"},{"buffer":0,"byteLength":24,"byteOffset":387184,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_StandPose_0"},{"buffer":0,"byteLength":32,"byteOffset":387208,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_StandPose_1"},{"buffer":0,"byteLength":24,"byteOffset":387240,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_StandPose_2"},{"buffer":0,"byteLength":3328,"byteOffset":387264,"byteStride":64,"name":"bufferView_buffer_IBM_F010_Saber_Body_skin_0"},{"buffer":0,"byteLength":192,"byteOffset":390592,"byteStride":64,"name":"bufferView_buffer_IBM_F010_Saber_Face_skin_0"},{"buffer":1,"byteLength":48796,"byteOffset":0,"byteStride":44,"name":"bufferView_buffer_F010_Saber.003_0","target":34962},{"buffer":1,"byteLength":8076,"byteOffset":48796,"name":"bufferView_buffer_F010_Saber.003_1","target":34963},{"buffer":1,"byteLength":35488,"byteOffset":56872,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_skin_0","target":34962},{"buffer":1,"byteLength":8,"byteOffset":92360,"byteStride":4,"name":"bufferView_buffer_TPose_time_0"},{"buffer":1,"byteLength":24,"byteOffset":92368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92392,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92448,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92472,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92528,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92552,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92584,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92608,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92632,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92664,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92688,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92712,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92744,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92768,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92792,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92872,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":92928,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":92952,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":92984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93008,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93032,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93088,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93112,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93144,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93168,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93192,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93248,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93272,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93328,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93352,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93384,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93408,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93432,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93464,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93488,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93512,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93544,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93568,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93592,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93648,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93672,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93704,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93728,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93752,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93784,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93808,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93832,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93864,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93888,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93912,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":93944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":93968,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":93992,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94024,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94048,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94072,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94104,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94128,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94152,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94184,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94208,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94232,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94288,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94312,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94344,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94392,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94448,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94472,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94528,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94552,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94584,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94608,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94632,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94688,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94712,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94744,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94768,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94792,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94824,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94872,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":94928,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":94952,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":94984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95008,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95032,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95064,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95088,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95112,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95144,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95168,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95192,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95224,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95248,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95272,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95328,"byteStride":12,"name":"bufferView_buffer_Character_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95352,"byteStride":16,"name":"bufferView_buffer_Character_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95384,"byteStride":12,"name":"bufferView_buffer_Character_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95408,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95432,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95464,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95488,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95512,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95544,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95568,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95592,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95624,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95648,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95672,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95704,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95728,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95752,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95784,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95808,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95832,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95864,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95888,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95912,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":95944,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":95968,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":95992,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96024,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96048,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96072,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96104,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96128,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96152,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96184,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96208,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96232,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96288,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96312,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96344,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96368,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96392,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96448,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96472,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96504,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96528,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96552,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96584,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96608,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96632,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96688,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96712,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96744,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96768,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96792,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96848,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96872,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":96928,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":96952,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":96984,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97008,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97032,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97088,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97112,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97144,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97168,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97192,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97248,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97272,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97304,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97328,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97352,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97408,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97432,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97488,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97512,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97544,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_2"},{"buffer":1,"byteLength":24,"byteOffset":97568,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0"},{"buffer":1,"byteLength":32,"byteOffset":97592,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1"},{"buffer":1,"byteLength":24,"byteOffset":97624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2"},{"buffer":1,"byteLength":4160,"byteOffset":97648,"byteStride":64,"name":"bufferView_buffer_IBM_F010_Saber_Hair.001_skin_0"},{"buffer":2,"byteLength":97728,"byteOffset":0,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_0","target":34962},{"buffer":2,"byteLength":23400,"byteOffset":97728,"name":"bufferView_buffer_F010_Saber.003_1","target":34963},{"buffer":2,"byteLength":97728,"byteOffset":121128,"byteStride":32,"name":"bufferView_buffer_F010_Saber.003_skin_0","target":34962},{"buffer":2,"byteLength":8,"byteOffset":218856,"byteStride":4,"name":"bufferView_buffer_TPose_time_0"},{"buffer":2,"byteLength":24,"byteOffset":218864,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":218888,"byteStride":16,"name":"bufferView_buffer_mixamorig:Head_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":218920,"byteStride":12,"name":"bufferView_buffer_mixamorig:Head_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":218944,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":218968,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219000,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219024,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219048,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219080,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219104,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219128,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219160,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHand_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219184,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219208,"byteStride":16,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219240,"byteStride":12,"name":"bufferView_buffer_mixamorig:HeadTop_End_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219264,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219288,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219320,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219344,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219368,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219400,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftFoot_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219424,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219448,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219480,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219528,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219560,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219584,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219608,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219640,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219688,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219720,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219744,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219768,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219800,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219848,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219880,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219904,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":219928,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":219960,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":219984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220008,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220040,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220088,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220120,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220144,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220168,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220200,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220248,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220280,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220328,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220360,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220408,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220440,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220488,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220520,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220544,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220568,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220600,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220648,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220680,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220704,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220728,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHand_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220760,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHand_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220784,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220808,"byteStride":16,"name":"bufferView_buffer_mixamorig:Hips_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220840,"byteStride":12,"name":"bufferView_buffer_mixamorig:Hips_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220864,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220888,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":220920,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandIndex2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":220944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":220968,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221000,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToe_End_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221024,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221048,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221080,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221104,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221128,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221160,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221184,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221208,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221240,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221288,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221320,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightForeArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221344,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221368,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221400,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221448,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221480,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221504,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221528,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221560,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221584,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221608,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221640,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftUpLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221664,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221688,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221720,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftForeArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221744,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221768,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221800,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221824,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221848,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221880,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221904,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":221928,"byteStride":16,"name":"bufferView_buffer_mixamorig:Neck_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":221960,"byteStride":12,"name":"bufferView_buffer_mixamorig:Neck_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":221984,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222008,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222040,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandMiddle4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222064,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222088,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222120,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222144,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222168,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222200,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandThumb2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222224,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222248,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222280,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightToeBase_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222304,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222328,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222360,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222384,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222408,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222440,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToe_End_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222464,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222488,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222520,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightUpLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222544,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222568,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222600,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftArm_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222624,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222648,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222680,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandThumb2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222704,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222728,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222760,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandRing2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222784,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222808,"byteStride":16,"name":"bufferView_buffer_mixamorig:Spine1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222840,"byteStride":12,"name":"bufferView_buffer_mixamorig:Spine1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222864,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222888,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":222920,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftShoulder_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":222944,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":222968,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223000,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandPinky4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223024,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223048,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223080,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223104,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223128,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223160,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223184,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223208,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223240,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223264,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223288,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223320,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightFoot_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223344,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223368,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223400,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky2_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223424,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223448,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223480,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftLeg_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223504,"byteStride":12,"name":"bufferView_buffer_Character_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223528,"byteStride":16,"name":"bufferView_buffer_Character_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223560,"byteStride":12,"name":"bufferView_buffer_Character_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223584,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223608,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223640,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing3_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223664,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223688,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223720,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightHandRing4_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223744,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223768,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223800,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftToeBase_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223824,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223848,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223880,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandIndex1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223904,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":223928,"byteStride":16,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":223960,"byteStride":12,"name":"bufferView_buffer_mixamorig:RightShoulder_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":223984,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":224008,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":224040,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandPinky1_TPose_2"},{"buffer":2,"byteLength":24,"byteOffset":224064,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_0"},{"buffer":2,"byteLength":32,"byteOffset":224088,"byteStride":16,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_1"},{"buffer":2,"byteLength":24,"byteOffset":224120,"byteStride":12,"name":"bufferView_buffer_mixamorig:LeftHandMiddle3_TPose_2"},{"buffer":2,"byteLength":4160,"byteOffset":224144,"byteStride":64,"name":"bufferView_buffer_IBM_Saber_maid_dress_skin_0"}],"buffers":[{"byteLength":390784,"name":"buffer_combined","uri":"buffer_combined.bin"},{"byteLength":101808,"name":"buffer_combined_maid_hair","uri":"buffer_combined_maid_hair.bin"},{"byteLength":228304,"name":"buffer_combined_dress","uri":"buffer_combined_dress.bin"}],"images":[{"name":"saber-pure-body.png","uri":"saber-pure-body.png"},{"name":"saber_01_face.png","uri":"saber_01_face.png"},{"name":"saber-dress-texture.png","uri":"saber-dress-texture.png"}],"materials":[{"name":"face.001","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":0,"texCoord":0},"metallicFactor":0,"roughnessFactor":1}},{"name":"saber-pure-body","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":1,"texCoord":0},"metallicFactor":0,"roughnessFactor":1},"alphaMode":"MASK","alphaCutOff":0.5},{"emissiveFactor":[0,0,0],"name":"F010_SaberSG","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":3,"texCoord":3},"metallicFactor":0,"roughnessFactor":1},"doubleSided":true},{"emissiveFactor":[0,0,0],"name":"F010_SaberSG.001","pbrMetallicRoughness":{"baseColorFactor":[1,1,1,1],"baseColorTexture":{"index":4,"texCoord":4},"metallicFactor":0,"roughnessFactor":1},"doubleSided":true}],"meshes":[{"name":"F010_Saber.003","primitives":[{"attributes":{"JOINTS_0":210,"NORMAL":1,"POSITION":192,"TEXCOORD_0":122,"WEIGHTS_0":206},"indices":156,"material":1,"mode":4}]},{"name":"F010_Saber.001","primitives":[{"attributes":{"JOINTS_0":110,"NORMAL":54,"POSITION":200,"TEXCOORD_0":107,"WEIGHTS_0":105},"indices":51,"material":0,"mode":4}]},{"name":"F010_Saber.003","primitives":[{"attributes":{"NORMAL":241,"POSITION":250,"TEXCOORD_0":303,"JOINTS_0":357,"WEIGHTS_0":407},"indices":298,"material":2,"mode":4}]},{"name":"F010_Saber.003","primitives":[{"attributes":{"NORMAL":448,"POSITION":513,"TEXCOORD_0":613,"JOINTS_0":581,"WEIGHTS_0":595},"indices":483,"material":3,"mode":4}]}],"nodes":[{"children":[1,2,3],"name":"Character","rotation":[0.7071068286895752,0,0,0.7071067094802856],"scale":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"translation":[0,0,0]},{"mesh":0,"name":"F010_Saber_Body","rotation":[8.198130529990522e-8,6.977134425767417e-10,-3.4885669353279525e-10,1],"scale":[1.0011157989501953,1.0011157989501953,1.0011157989501953],"skin":0,"translation":[-0.0000028014183044433594,-0.000014305113836599048,0.000001072883719643869]},{"mesh":1,"name":"F010_Saber_Face","rotation":[8.136032647598768e-8,-1.5777218104420236e-30,1.0171798302661709e-16,1],"scale":[1.0011157989501953,1.0011157989501953,1.0011157989501953],"skin":1,"translation":[0,2.7755575615628914e-15,-4.52195720095739e-22]},{"children":[4,58,63],"name":"Armature_mixamorig:Hips","rotation":[0,0,0,1],"scale":[1,1,1],"translation":[0.007442474365234375,98.82971954345703,0.6201396584510803]},{"children":[5],"name":"Armature_mixamorig:Spine","rotation":[-0.039921652525663376,0,0,0.9992028474807739],"scale":[1,0.9999999403953552,1],"translation":[0,6.854499816894531,-0.5485978126525879]},{"children":[6],"name":"Armature_mixamorig:Spine1","rotation":[1.4901162970204496e-8,0,0,1],"scale":[1,0.9999999403953552,0.9999999403953552],"translation":[-4.656612873077393e-10,8.022480964660645,-2.384185791015625e-7]},{"children":[7,10,34],"name":"Armature_mixamorig:Spine2","rotation":[-5.029141902923584e-8,9.423000574271256e-13,-2.358492047493943e-11,1],"scale":[1,1,1],"translation":[-4.656612873077393e-10,9.168560028076172,-4.76837158203125e-7]},{"children":[8],"name":"Armature_mixamorig:Neck","rotation":[0.03992168977856636,1.427615485679809e-13,2.0030548400495896e-11,0.9992028474807739],"scale":[1,1,1],"translation":[-2.2881511962946632e-10,10.314631462097168,0.0000011920928955078125]},{"children":[9],"name":"Armature_mixamorig:Head","rotation":[-3.749335064640036e-9,-6.35555176367169e-21,5.4569682106375694e-12,1],"scale":[1,1,1],"translation":[-5.1451731764018405e-11,4.3087005615234375,0.11991112679243088]},{"name":"Armature_mixamorig:HeadTop_End","rotation":[0,2.610143520150023e-28,-1.8189894035458565e-12,1],"scale":[1,1,1],"translation":[1.2972056762095008e-10,20.857254028320312,0.5804517269134521]},{"children":[11],"name":"Armature_mixamorig:LeftShoulder","rotation":[0.5740949511528015,0.4067640006542206,-0.5904093384742737,0.39544278383255005],"scale":[1.0000001192092896,1,1],"translation":[3.513521194458008,8.987089157104492,-0.09783673286437988]},{"children":[12],"name":"Armature_mixamorig:LeftArm","rotation":[-0.19647400081157684,-0.0007150349556468427,0.0035684211179614067,0.9805023074150085],"scale":[1,1.0000001192092896,0.9999999403953552],"translation":[-5.960464477539062e-7,7.4837188720703125,-0.00001049041748046875]},{"children":[13],"name":"Armature_mixamorig:LeftForeArm","rotation":[-0.005400624126195908,-0.0001584456767886877,0.029325975105166435,0.9995554089546204],"scale":[1,0.9999998807907104,0.9999999403953552],"translation":[-5.364418029785156e-7,22.7723331451416,5.662441253662109e-7]},{"children":[14,18,22,26,30],"name":"Armature_mixamorig:LeftHand","rotation":[-0.0046674893237650394,-0.036291614174842834,-0.01584092527627945,0.9992048144340515],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[4.76837158203125e-7,19.02334213256836,8.046627044677734e-7]},{"children":[15],"name":"Armature_mixamorig:LeftHandThumb1","rotation":[0.24564014375209808,0.0797870084643364,0.2984432578086853,0.9188180565834045],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-1.3880550861358643,1.872644305229187,1.3422610759735107]},{"children":[16],"name":"Armature_mixamorig:LeftHandThumb2","rotation":[0.00489170802757144,4.4890290951116185e-7,4.610102450897102e-7,0.9999881386756897],"scale":[1,1,1],"translation":[-0.018166542053222656,2.1517605781555176,-0.000021755695343017578]},{"children":[17],"name":"Armature_mixamorig:LeftHandThumb3","rotation":[0.021618247032165527,-5.850072852808808e-7,-3.9590455003235547e-7,0.9997663497924805],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[0.07795095443725586,2.1093316078186035,0.0000018775463104248047]},{"name":"Armature_mixamorig:LeftHandThumb4","rotation":[4.284083487959833e-8,-1.769512749660862e-7,-3.3527612686157227e-8,1],"scale":[1,1,1.0000001192092896],"translation":[-0.0597844123840332,1.8846036195755005,-0.000011980533599853516]},{"children":[19],"name":"Armature_mixamorig:LeftHandIndex1","rotation":[0.026657480746507645,0.0018764277920126915,0.07018843293190002,0.9971757531166077],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[-2.3818466663360596,6.0911946296691895,0.09325551986694336]},{"children":[20],"name":"Armature_mixamorig:LeftHandIndex2","rotation":[-0.034092869609594345,-7.741025598306805e-8,1.2725772080557363e-7,0.9994186758995056],"scale":[1,1,1],"translation":[-0.009856224060058594,2.002563238143921,0.0000019297003746032715]},{"children":[21],"name":"Armature_mixamorig:LeftHandIndex3","rotation":[-0.011232745833694935,8.382431815334712e-8,-1.2014818651095993e-7,0.9999369382858276],"scale":[1,1,1],"translation":[0.0033556222915649414,1.906246304512024,-0.000002428889274597168]},{"name":"Armature_mixamorig:LeftHandIndex4","rotation":[-1.6298145055770874e-8,-2.116430550813675e-7,-1.4435499906539917e-7,1],"scale":[1,1,1],"translation":[0.006502628326416016,1.6352357864379883,-0.000007256865501403809]},{"children":[23],"name":"Armature_mixamorig:LeftHandMiddle1","rotation":[0.030671721324324608,0.0003823289880529046,0.012456541880965233,0.9994519352912903],"scale":[0.9999999403953552,1,1],"translation":[-0.620979368686676,5.9338483810424805,-0.18955062329769135]},{"children":[24],"name":"Armature_mixamorig:LeftHandMiddle2","rotation":[-0.01664525642991066,1.53325672158644e-8,1.832339968643737e-8,0.999861478805542],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.018555283546447754,2.2824888229370117,-0.000022992491722106934]},{"children":[25],"name":"Armature_mixamorig:LeftHandMiddle3","rotation":[-0.10026512295007706,-6.588842182964072e-8,1.4567116579655703e-7,0.9949608445167542],"scale":[1,0.9999998211860657,0.9999998211860657],"translation":[-0.010961532592773438,2.2484676837921143,-0.000016957521438598633]},{"name":"Armature_mixamorig:LeftHandMiddle4","rotation":[-4.5380154745089385e-8,5.855691398437557e-8,8.149073416063857e-9,1],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[0.02951037883758545,2.0856528282165527,0.000010073184967041016]},{"children":[27],"name":"Armature_mixamorig:LeftHandRing1","rotation":[0.10404136031866074,-0.008528899401426315,-0.08125600963830948,0.9912115335464478],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.8905025720596313,5.982393264770508,-0.24304264783859253]},{"children":[28],"name":"Armature_mixamorig:LeftHandRing2","rotation":[-0.03329118713736534,-6.639353955506522e-8,-3.7273565567375044e-8,0.9994457960128784],"scale":[1,0.9999999403953552,1],"translation":[-0.017888784408569336,2.1800594329833984,-0.000017344951629638672]},{"children":[29],"name":"Armature_mixamorig:LeftHandRing3","rotation":[-0.08213821053504944,5.25645127424923e-8,6.078793717279041e-7,0.9966209530830383],"scale":[1,0.9999999403953552,1],"translation":[-0.0040547847747802734,1.9782464504241943,-0.000038623809814453125]},{"name":"Armature_mixamorig:LeftHandRing4","rotation":[-1.4202669262886047e-7,-1.4062970876693726e-7,-1.5425030142068863e-7,1],"scale":[0.9999999403953552,1,1],"translation":[0.02194046974182129,1.7619253396987915,0.000026524066925048828]},{"children":[31],"name":"Armature_mixamorig:LeftHandPinky1","rotation":[0.13995902240276337,-0.024145862087607384,-0.16828545928001404,0.9754529595375061],"scale":[1,0.9999999403953552,1],"translation":[2.112321376800537,5.15140962600708,-0.10163509845733643]},{"children":[32],"name":"Armature_mixamorig:LeftHandPinky2","rotation":[-0.012911615893244743,6.519802298043942e-8,6.445289386647346e-7,0.999916672706604],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[-0.006536006927490234,1.828072190284729,-0.00001633167266845703]},{"children":[33],"name":"Armature_mixamorig:LeftHandPinky3","rotation":[-0.09343928843736649,1.850952742188383e-7,-2.745443339335907e-7,0.9956250786781311],"scale":[1,1.0000001192092896,1],"translation":[-0.006233692169189453,1.5249935388565063,0.000025272369384765625]},{"name":"Armature_mixamorig:LeftHandPinky4","rotation":[5.541368963690729e-8,-5.9371814131736755e-9,1.3969838619232178e-9,1],"scale":[1,1,1.0000001192092896],"translation":[0.012760639190673828,1.3818011283874512,-0.000005304813385009766]},{"children":[35],"name":"Armature_mixamorig:RightShoulder","rotation":[0.5726097226142883,-0.40782278776168823,0.5916988849639893,0.394577294588089],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[-3.513521194458008,8.98842716217041,-0.11455440521240234]},{"children":[36],"name":"Armature_mixamorig:RightArm","rotation":[-0.19615903496742249,0.0015209860866889358,-0.007602959871292114,0.980541467666626],"scale":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"translation":[6.854534149169922e-7,7.4837188720703125,-0.0000069588422775268555]},{"children":[37],"name":"Armature_mixamorig:RightForeArm","rotation":[-0.005199347157031298,0.00015941221499815583,-0.03064456395804882,0.9995168447494507],"scale":[1,1,1.0000001192092896],"translation":[-0.0000010132789611816406,22.770898818969727,-0.0000026673078536987305]},{"children":[38,42,46,50,54],"name":"Armature_mixamorig:RightHand","rotation":[-0.027066726237535477,0.03516821190714836,0.024613087996840477,0.9987115859985352],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[5.960464477539062e-7,19.027141571044922,-0.000011309981346130371]},{"children":[39],"name":"Armature_mixamorig:RightHandThumb1","rotation":[0.24496246874332428,-0.07342495024204254,-0.27757158875465393,0.9260433316230774],"scale":[1,0.9999999403953552,1],"translation":[1.4313437938690186,1.9488826990127563,1.373734474182129]},{"children":[40],"name":"Armature_mixamorig:RightHandThumb2","rotation":[0.02597731165587902,4.695450286362757e-7,4.360061325314746e-7,0.9996625781059265],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.09870082139968872,2.2226028442382812,0.000018328428268432617]},{"children":[41],"name":"Armature_mixamorig:RightHandThumb3","rotation":[0.0020599281415343285,-4.209587416426075e-7,-2.747407563674642e-7,0.9999979734420776],"scale":[1,1,1],"translation":[0.08420944213867188,1.993523359298706,-0.000024646520614624023]},{"name":"Armature_mixamorig:RightHandThumb4","rotation":[6.705523247774181e-8,-7.450580596923828e-9,6.05359673500061e-8,1],"scale":[1,0.9999998807907104,0.9999998807907104],"translation":[-0.1829054355621338,1.5351988077163696,0.000009775161743164062]},{"children":[43],"name":"Armature_mixamorig:RightHandIndex1","rotation":[0.04785900563001633,-0.003934510983526707,-0.08183817565441132,0.9954881072044373],"scale":[1,1,1],"translation":[2.2894375324249268,5.801694393157959,0.050646696239709854]},{"children":[44],"name":"Armature_mixamorig:RightHandIndex2","rotation":[-0.028287818655371666,7.496872456158599e-8,2.392710314325086e-7,0.9995998740196228],"scale":[1,1,0.9999999403953552],"translation":[0.029898226261138916,2.2504000663757324,0.000021301209926605225]},{"children":[45],"name":"Armature_mixamorig:RightHandIndex3","rotation":[-0.14387890696525574,7.74066961639619e-8,1.5951893317378563e-7,0.9895954132080078],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[0.01506185531616211,2.0928609371185303,0.00001971423625946045]},{"name":"Armature_mixamorig:RightHandIndex4","rotation":[-2.57976381590197e-7,-8.847565879932517e-8,-1.480803035747158e-7,1],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.04495549201965332,1.9040567874908447,-0.000019669532775878906]},{"children":[47],"name":"Armature_mixamorig:RightHandMiddle1","rotation":[0.06535934656858444,-0.0012092242250218987,-0.018458466976881027,0.9976903200149536],"scale":[1,1,1],"translation":[0.6151741147041321,5.987786293029785,-0.2521481215953827]},{"children":[48],"name":"Armature_mixamorig:RightHandMiddle2","rotation":[-0.02911515347659588,-1.493660128915053e-8,1.2578189512169047e-7,0.9995761513710022],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[0.025691747665405273,2.3235480785369873,0.0000058710575103759766]},{"children":[49],"name":"Armature_mixamorig:RightHandMiddle3","rotation":[-0.12079086899757385,3.73517679008728e-8,3.685922251861484e-7,0.9926779866218567],"scale":[1,0.9999998807907104,0.9999998211860657],"translation":[0.011220812797546387,2.2008121013641357,0.000029072165489196777]},{"name":"Armature_mixamorig:RightHandMiddle4","rotation":[2.531742211431265e-7,-1.9557775843281888e-8,2.561137080192566e-9,1],"scale":[1,1,0.9999999403953552],"translation":[-0.036910414695739746,2.00234055519104,0.00000260770320892334]},{"children":[51],"name":"Armature_mixamorig:RightHandRing1","rotation":[0.08960019052028656,0.007558114361017942,0.0837147906422615,0.9924246072769165],"scale":[1,0.9999999403953552,1],"translation":[-0.8287993669509888,5.778010845184326,-0.2080925703048706]},{"children":[52],"name":"Armature_mixamorig:RightHandRing2","rotation":[0.02305533178150654,-1.0247272363983484e-8,-2.6083968762691256e-8,0.9997342824935913],"scale":[1,1,1.0000001192092896],"translation":[0.008643150329589844,2.2196152210235596,-0.000009953975677490234]},{"children":[53],"name":"Armature_mixamorig:RightHandRing3","rotation":[-0.12460635602474213,6.288876619464645e-8,3.815565037257329e-7,0.992206335067749],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.016327381134033203,2.091179847717285,0.000004410743713378906]},{"name":"Armature_mixamorig:RightHandRing4","rotation":[-8.42846930027008e-8,-6.05359673500061e-8,-6.356277282293377e-8,1],"scale":[0.9999999403953552,0.9999998807907104,1],"translation":[-0.02497267723083496,1.9166507720947266,-0.000018537044525146484]},{"children":[55],"name":"Armature_mixamorig:RightHandPinky1","rotation":[0.1575794368982315,0.028793327510356903,0.17742541432380676,0.9710097312927246],"scale":[1,1.0000001192092896,1],"translation":[-2.075824737548828,5.181243896484375,-0.156680166721344]},{"children":[56],"name":"Armature_mixamorig:RightHandPinky2","rotation":[-0.021833697333931923,-8.849674060229518e-8,-3.185882917478011e-7,0.9997616410255432],"scale":[1,0.9999998211860657,0.9999999403953552],"translation":[0.009781837463378906,1.9066412448883057,0.00003445148468017578]},{"children":[57],"name":"Armature_mixamorig:RightHandPinky3","rotation":[-0.0985320433974266,-1.1792045739866808e-7,-2.5736605735460216e-8,0.9951338768005371],"scale":[1,1.0000001192092896,1],"translation":[0.004714488983154297,1.55594801902771,0.000019788742065429688]},{"name":"Armature_mixamorig:RightHandPinky4","rotation":[1.695007227908718e-7,-6.053597445543346e-8,1.6530977475781583e-8,1],"scale":[0.9999998807907104,0.9999998807907104,0.9999999403953552],"translation":[-0.014493942260742188,1.4579054117202759,-0.000033020973205566406]},{"children":[59],"name":"Armature_mixamorig:LeftUpLeg","rotation":[-0.000008872594662534539,0.0009148783865384758,0.9998617172241211,0.016607170924544334],"scale":[1.0001250505447388,1,1.000000238418579],"translation":[6.5092010498046875,-3.8089065551757812,-0.3193536400794983]},{"children":[60],"name":"Armature_mixamorig:LeftLeg","rotation":[-0.019678570330142975,-0.00024797735386528075,0.012827177532017231,0.9997241497039795],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[4.90503225591965e-7,45.04969024658203,-3.3028754842234775e-8]},{"children":[61],"name":"Armature_mixamorig:LeftFoot","rotation":[0.4820258617401123,0.06575184315443039,-0.03629865497350693,0.872931957244873],"scale":[1,1.0000001192092896,1.0000001192092896],"translation":[-3.387158358236775e-7,41.849327087402344,-3.457535058259964e-8]},{"children":[62],"name":"Armature_mixamorig:LeftToeBase","rotation":[0.29159197211265564,-0.06168047711253166,0.01884075440466404,0.9543660879135132],"scale":[1,1,1.0000001192092896],"translation":[8.810311555862427e-7,12.08905029296875,-0.000003889203071594238]},{"name":"Armature_mixamorig:LeftToe_End","rotation":[9.872019290924072e-8,0.000008056988008320332,-1.909211277961731e-8,1],"scale":[1,1,1],"translation":[-3.5762786865234375e-7,4.706444263458252,5.960464477539063e-8]},{"children":[64],"name":"Armature_mixamorig:RightUpLeg","rotation":[-0.00000294413257506676,-0.0034815834369510412,-0.9998561143875122,0.01660647802054882],"scale":[1.000124216079712,1,1.0000035762786865],"translation":[-6.5092010498046875,-3.8089065551757812,-0.4497392773628235]},{"children":[65],"name":"Armature_mixamorig:RightLeg","rotation":[-0.022010719403624535,0.00022552665905095637,-0.012826679274439812,0.999675452709198],"scale":[0.9999998807907104,0.9999998807907104,1],"translation":[4.079265636391938e-8,45.050357818603516,-1.5308614820241928e-8]},{"children":[66],"name":"Armature_mixamorig:RightFoot","rotation":[0.48082953691482544,-0.06620366871356964,0.03643133118748665,0.8735518455505371],"scale":[1,1.0000001192092896,1.000000238418579],"translation":[-9.810537449084222e-8,41.85009765625,4.062894731760025e-8]},{"children":[67],"name":"Armature_mixamorig:RightToeBase","rotation":[0.29314252734184265,0.06225594878196716,-0.01912800408899784,0.9538480043411255],"scale":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"translation":[-6.51925802230835e-8,12.033415794372559,0.0000034570693969726562]},{"name":"Armature_mixamorig:RightToe_End","rotation":[-3.748573362827301e-8,-0.000008230912499129772,-2.9453076422214508e-8,1],"scale":[1,1,1],"translation":[1.043081283569336e-7,4.712545394897461,3.2782554626464844e-7]},{"children":[0],"matrix":[-1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1],"name":"Scene_root"},{"children":[70],"name":"Character","rotation":[0.7071068286895752,0,0,0.7071067094802856],"scale":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"translation":[0,0,0]},{"mesh":2,"name":"F010_Saber_Hair.001","rotation":[0,0,0,1],"scale":[1.0011157989501953,1.0011157989501953,1.0011157989501953],"translation":[0,-7.586585270321754e-15,-4.6566128730773926e-8],"skin":3},{"children":[69],"matrix":[-1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1],"name":"Scene_root"},{"children":[73,74],"name":"Character","rotation":[0.7071068286895752,0,0,0.7071067094802856],"scale":[0.009999999776482582,0.009999999776482582,0.009999999776482582],"translation":[0,0,0]},{"mesh":3,"name":"Saber_maid_dress","rotation":[0,2.215453975872375e-14,1.0171550148477943e-16,1],"scale":[1.0022532939910889,1.0022532939910889,1.0022532939910889],"translation":[9.596120962738694e-15,-1.715214104081042e-8,-9.706444359380839e-8],"skin":4},{"children":[75,129,134],"name":"Armature_mixamorig:Hips","rotation":[0,0,0,1],"scale":[1,1,1],"translation":[0.007442474365234375,98.82971954345703,0.6201396584510803]},{"children":[76],"name":"Armature_mixamorig:Spine","rotation":[-0.039921652525663376,0,0,0.9992028474807739],"scale":[1,0.9999999403953552,1],"translation":[0,6.854499816894531,-0.5485978126525879]},{"children":[77],"name":"Armature_mixamorig:Spine1","rotation":[1.4901162970204496e-8,0,0,1],"scale":[1,0.9999999403953552,0.9999999403953552],"translation":[-4.656612873077393e-10,8.022480964660645,-2.384185791015625e-7]},{"children":[78,81,105],"name":"Armature_mixamorig:Spine2","rotation":[-5.029141902923584e-8,9.423000574271256e-13,-2.358492047493943e-11,1],"scale":[1,1,1],"translation":[-4.656612873077393e-10,9.168560028076172,-4.76837158203125e-7]},{"children":[79],"name":"Armature_mixamorig:Neck","rotation":[0.03992168977856636,1.427615485679809e-13,2.0030548400495896e-11,0.9992028474807739],"scale":[1,1,1],"translation":[-2.2881511962946632e-10,10.314631462097168,0.0000011920928955078125]},{"children":[80],"name":"Armature_mixamorig:Head","rotation":[-3.749335064640036e-9,-6.35555176367169e-21,5.4569682106375694e-12,1],"scale":[1,1,1],"translation":[-5.1451731764018405e-11,4.3087005615234375,0.11991112679243088]},{"name":"Armature_mixamorig:HeadTop_End","rotation":[0,2.610143520150023e-28,-1.8189894035458565e-12,1],"scale":[1,1,1],"translation":[1.2972056762095008e-10,20.857254028320312,0.5804517269134521]},{"children":[82],"name":"Armature_mixamorig:LeftShoulder","rotation":[0.5740949511528015,0.4067640006542206,-0.5904093384742737,0.39544278383255005],"scale":[1.0000001192092896,1,1],"translation":[3.513521194458008,8.987089157104492,-0.09783673286437988]},{"children":[83],"name":"Armature_mixamorig:LeftArm","rotation":[-0.19647400081157684,-0.0007150349556468427,0.0035684211179614067,0.9805023074150085],"scale":[1,1.0000001192092896,0.9999999403953552],"translation":[-5.960464477539062e-7,7.4837188720703125,-0.00001049041748046875]},{"children":[84],"name":"Armature_mixamorig:LeftForeArm","rotation":[-0.005400624126195908,-0.0001584456767886877,0.029325975105166435,0.9995554089546204],"scale":[1,0.9999998807907104,0.9999999403953552],"translation":[-5.364418029785156e-7,22.7723331451416,5.662441253662109e-7]},{"children":[85,89,93,97,101],"name":"Armature_mixamorig:LeftHand","rotation":[-0.0046674893237650394,-0.036291614174842834,-0.01584092527627945,0.9992048144340515],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[4.76837158203125e-7,19.02334213256836,8.046627044677734e-7]},{"children":[86],"name":"Armature_mixamorig:LeftHandThumb1","rotation":[0.24564014375209808,0.0797870084643364,0.2984432578086853,0.9188180565834045],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-1.3880550861358643,1.872644305229187,1.3422610759735107]},{"children":[87],"name":"Armature_mixamorig:LeftHandThumb2","rotation":[0.00489170802757144,4.4890290951116185e-7,4.610102450897102e-7,0.9999881386756897],"scale":[1,1,1],"translation":[-0.018166542053222656,2.1517605781555176,-0.000021755695343017578]},{"children":[88],"name":"Armature_mixamorig:LeftHandThumb3","rotation":[0.021618247032165527,-5.850072852808808e-7,-3.9590455003235547e-7,0.9997663497924805],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[0.07795095443725586,2.1093316078186035,0.0000018775463104248047]},{"name":"Armature_mixamorig:LeftHandThumb4","rotation":[4.284083487959833e-8,-1.769512749660862e-7,-3.3527612686157227e-8,1],"scale":[1,1,1.0000001192092896],"translation":[-0.0597844123840332,1.8846036195755005,-0.000011980533599853516]},{"children":[90],"name":"Armature_mixamorig:LeftHandIndex1","rotation":[0.026657480746507645,0.0018764277920126915,0.07018843293190002,0.9971757531166077],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[-2.3818466663360596,6.0911946296691895,0.09325551986694336]},{"children":[91],"name":"Armature_mixamorig:LeftHandIndex2","rotation":[-0.034092869609594345,-7.741025598306805e-8,1.2725772080557363e-7,0.9994186758995056],"scale":[1,1,1],"translation":[-0.009856224060058594,2.002563238143921,0.0000019297003746032715]},{"children":[92],"name":"Armature_mixamorig:LeftHandIndex3","rotation":[-0.011232745833694935,8.382431815334712e-8,-1.2014818651095993e-7,0.9999369382858276],"scale":[1,1,1],"translation":[0.0033556222915649414,1.906246304512024,-0.000002428889274597168]},{"name":"Armature_mixamorig:LeftHandIndex4","rotation":[-1.6298145055770874e-8,-2.116430550813675e-7,-1.4435499906539917e-7,1],"scale":[1,1,1],"translation":[0.006502628326416016,1.6352357864379883,-0.000007256865501403809]},{"children":[94],"name":"Armature_mixamorig:LeftHandMiddle1","rotation":[0.030671721324324608,0.0003823289880529046,0.012456541880965233,0.9994519352912903],"scale":[0.9999999403953552,1,1],"translation":[-0.620979368686676,5.9338483810424805,-0.18955062329769135]},{"children":[95],"name":"Armature_mixamorig:LeftHandMiddle2","rotation":[-0.01664525642991066,1.53325672158644e-8,1.832339968643737e-8,0.999861478805542],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.018555283546447754,2.2824888229370117,-0.000022992491722106934]},{"children":[96],"name":"Armature_mixamorig:LeftHandMiddle3","rotation":[-0.10026512295007706,-6.588842182964072e-8,1.4567116579655703e-7,0.9949608445167542],"scale":[1,0.9999998211860657,0.9999998211860657],"translation":[-0.010961532592773438,2.2484676837921143,-0.000016957521438598633]},{"name":"Armature_mixamorig:LeftHandMiddle4","rotation":[-4.5380154745089385e-8,5.855691398437557e-8,8.149073416063857e-9,1],"scale":[0.9999999403953552,0.9999998807907104,0.9999999403953552],"translation":[0.02951037883758545,2.0856528282165527,0.000010073184967041016]},{"children":[98],"name":"Armature_mixamorig:LeftHandRing1","rotation":[0.10404136031866074,-0.008528899401426315,-0.08125600963830948,0.9912115335464478],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.8905025720596313,5.982393264770508,-0.24304264783859253]},{"children":[99],"name":"Armature_mixamorig:LeftHandRing2","rotation":[-0.03329118713736534,-6.639353955506522e-8,-3.7273565567375044e-8,0.9994457960128784],"scale":[1,0.9999999403953552,1],"translation":[-0.017888784408569336,2.1800594329833984,-0.000017344951629638672]},{"children":[100],"name":"Armature_mixamorig:LeftHandRing3","rotation":[-0.08213821053504944,5.25645127424923e-8,6.078793717279041e-7,0.9966209530830383],"scale":[1,0.9999999403953552,1],"translation":[-0.0040547847747802734,1.9782464504241943,-0.000038623809814453125]},{"name":"Armature_mixamorig:LeftHandRing4","rotation":[-1.4202669262886047e-7,-1.4062970876693726e-7,-1.5425030142068863e-7,1],"scale":[0.9999999403953552,1,1],"translation":[0.02194046974182129,1.7619253396987915,0.000026524066925048828]},{"children":[102],"name":"Armature_mixamorig:LeftHandPinky1","rotation":[0.13995902240276337,-0.024145862087607384,-0.16828545928001404,0.9754529595375061],"scale":[1,0.9999999403953552,1],"translation":[2.112321376800537,5.15140962600708,-0.10163509845733643]},{"children":[103],"name":"Armature_mixamorig:LeftHandPinky2","rotation":[-0.012911615893244743,6.519802298043942e-8,6.445289386647346e-7,0.999916672706604],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[-0.006536006927490234,1.828072190284729,-0.00001633167266845703]},{"children":[104],"name":"Armature_mixamorig:LeftHandPinky3","rotation":[-0.09343928843736649,1.850952742188383e-7,-2.745443339335907e-7,0.9956250786781311],"scale":[1,1.0000001192092896,1],"translation":[-0.006233692169189453,1.5249935388565063,0.000025272369384765625]},{"name":"Armature_mixamorig:LeftHandPinky4","rotation":[5.541368963690729e-8,-5.9371814131736755e-9,1.3969838619232178e-9,1],"scale":[1,1,1.0000001192092896],"translation":[0.012760639190673828,1.3818011283874512,-0.000005304813385009766]},{"children":[106],"name":"Armature_mixamorig:RightShoulder","rotation":[0.5726097226142883,-0.40782278776168823,0.5916988849639893,0.394577294588089],"scale":[1.0000001192092896,1.0000001192092896,1],"translation":[-3.513521194458008,8.98842716217041,-0.11455440521240234]},{"children":[107],"name":"Armature_mixamorig:RightArm","rotation":[-0.19615903496742249,0.0015209860866889358,-0.007602959871292114,0.980541467666626],"scale":[0.9999998807907104,0.9999998211860657,0.9999998211860657],"translation":[6.854534149169922e-7,7.4837188720703125,-0.0000069588422775268555]},{"children":[108],"name":"Armature_mixamorig:RightForeArm","rotation":[-0.005199347157031298,0.00015941221499815583,-0.03064456395804882,0.9995168447494507],"scale":[1,1,1.0000001192092896],"translation":[-0.0000010132789611816406,22.770898818969727,-0.0000026673078536987305]},{"children":[109,113,117,121,125],"name":"Armature_mixamorig:RightHand","rotation":[-0.027066726237535477,0.03516821190714836,0.024613087996840477,0.9987115859985352],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[5.960464477539062e-7,19.027141571044922,-0.000011309981346130371]},{"children":[110],"name":"Armature_mixamorig:RightHandThumb1","rotation":[0.24496246874332428,-0.07342495024204254,-0.27757158875465393,0.9260433316230774],"scale":[1,0.9999999403953552,1],"translation":[1.4313437938690186,1.9488826990127563,1.373734474182129]},{"children":[111],"name":"Armature_mixamorig:RightHandThumb2","rotation":[0.02597731165587902,4.695450286362757e-7,4.360061325314746e-7,0.9996625781059265],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.09870082139968872,2.2226028442382812,0.000018328428268432617]},{"children":[112],"name":"Armature_mixamorig:RightHandThumb3","rotation":[0.0020599281415343285,-4.209587416426075e-7,-2.747407563674642e-7,0.9999979734420776],"scale":[1,1,1],"translation":[0.08420944213867188,1.993523359298706,-0.000024646520614624023]},{"name":"Armature_mixamorig:RightHandThumb4","rotation":[6.705523247774181e-8,-7.450580596923828e-9,6.05359673500061e-8,1],"scale":[1,0.9999998807907104,0.9999998807907104],"translation":[-0.1829054355621338,1.5351988077163696,0.000009775161743164062]},{"children":[114],"name":"Armature_mixamorig:RightHandIndex1","rotation":[0.04785900563001633,-0.003934510983526707,-0.08183817565441132,0.9954881072044373],"scale":[1,1,1],"translation":[2.2894375324249268,5.801694393157959,0.050646696239709854]},{"children":[115],"name":"Armature_mixamorig:RightHandIndex2","rotation":[-0.028287818655371666,7.496872456158599e-8,2.392710314325086e-7,0.9995998740196228],"scale":[1,1,0.9999999403953552],"translation":[0.029898226261138916,2.2504000663757324,0.000021301209926605225]},{"children":[116],"name":"Armature_mixamorig:RightHandIndex3","rotation":[-0.14387890696525574,7.74066961639619e-8,1.5951893317378563e-7,0.9895954132080078],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[0.01506185531616211,2.0928609371185303,0.00001971423625946045]},{"name":"Armature_mixamorig:RightHandIndex4","rotation":[-2.57976381590197e-7,-8.847565879932517e-8,-1.480803035747158e-7,1],"scale":[0.9999999403953552,0.9999999403953552,0.9999999403953552],"translation":[-0.04495549201965332,1.9040567874908447,-0.000019669532775878906]},{"children":[118],"name":"Armature_mixamorig:RightHandMiddle1","rotation":[0.06535934656858444,-0.0012092242250218987,-0.018458466976881027,0.9976903200149536],"scale":[1,1,1],"translation":[0.6151741147041321,5.987786293029785,-0.2521481215953827]},{"children":[119],"name":"Armature_mixamorig:RightHandMiddle2","rotation":[-0.02911515347659588,-1.493660128915053e-8,1.2578189512169047e-7,0.9995761513710022],"scale":[0.9999999403953552,0.9999998807907104,0.9999998807907104],"translation":[0.025691747665405273,2.3235480785369873,0.0000058710575103759766]},{"children":[120],"name":"Armature_mixamorig:RightHandMiddle3","rotation":[-0.12079086899757385,3.73517679008728e-8,3.685922251861484e-7,0.9926779866218567],"scale":[1,0.9999998807907104,0.9999998211860657],"translation":[0.011220812797546387,2.2008121013641357,0.000029072165489196777]},{"name":"Armature_mixamorig:RightHandMiddle4","rotation":[2.531742211431265e-7,-1.9557775843281888e-8,2.561137080192566e-9,1],"scale":[1,1,0.9999999403953552],"translation":[-0.036910414695739746,2.00234055519104,0.00000260770320892334]},{"children":[122],"name":"Armature_mixamorig:RightHandRing1","rotation":[0.08960019052028656,0.007558114361017942,0.0837147906422615,0.9924246072769165],"scale":[1,0.9999999403953552,1],"translation":[-0.8287993669509888,5.778010845184326,-0.2080925703048706]},{"children":[123],"name":"Armature_mixamorig:RightHandRing2","rotation":[0.02305533178150654,-1.0247272363983484e-8,-2.6083968762691256e-8,0.9997342824935913],"scale":[1,1,1.0000001192092896],"translation":[0.008643150329589844,2.2196152210235596,-0.000009953975677490234]},{"children":[124],"name":"Armature_mixamorig:RightHandRing3","rotation":[-0.12460635602474213,6.288876619464645e-8,3.815565037257329e-7,0.992206335067749],"scale":[0.9999999403953552,0.9999999403953552,1],"translation":[0.016327381134033203,2.091179847717285,0.000004410743713378906]},{"name":"Armature_mixamorig:RightHandRing4","rotation":[-8.42846930027008e-8,-6.05359673500061e-8,-6.356277282293377e-8,1],"scale":[0.9999999403953552,0.9999998807907104,1],"translation":[-0.02497267723083496,1.9166507720947266,-0.000018537044525146484]},{"children":[126],"name":"Armature_mixamorig:RightHandPinky1","rotation":[0.1575794368982315,0.028793327510356903,0.17742541432380676,0.9710097312927246],"scale":[1,1.0000001192092896,1],"translation":[-2.075824737548828,5.181243896484375,-0.156680166721344]},{"children":[127],"name":"Armature_mixamorig:RightHandPinky2","rotation":[-0.021833697333931923,-8.849674060229518e-8,-3.185882917478011e-7,0.9997616410255432],"scale":[1,0.9999998211860657,0.9999999403953552],"translation":[0.009781837463378906,1.9066412448883057,0.00003445148468017578]},{"children":[128],"name":"Armature_mixamorig:RightHandPinky3","rotation":[-0.0985320433974266,-1.1792045739866808e-7,-2.5736605735460216e-8,0.9951338768005371],"scale":[1,1.0000001192092896,1],"translation":[0.004714488983154297,1.55594801902771,0.000019788742065429688]},{"name":"Armature_mixamorig:RightHandPinky4","rotation":[1.695007227908718e-7,-6.053597445543346e-8,1.6530977475781583e-8,1],"scale":[0.9999998807907104,0.9999998807907104,0.9999999403953552],"translation":[-0.014493942260742188,1.4579054117202759,-0.000033020973205566406]},{"children":[130],"name":"Armature_mixamorig:LeftUpLeg","rotation":[-0.000008872594662534539,0.0009148783865384758,0.9998617172241211,0.016607170924544334],"scale":[1.0001250505447388,1,1.000000238418579],"translation":[6.5092010498046875,-3.8089065551757812,-0.3193536400794983]},{"children":[131],"name":"Armature_mixamorig:LeftLeg","rotation":[-0.019678570330142975,-0.00024797735386528075,0.012827177532017231,0.9997241497039795],"scale":[0.9999999403953552,1,0.9999999403953552],"translation":[4.90503225591965e-7,45.04969024658203,-3.3028754842234775e-8]},{"children":[132],"name":"Armature_mixamorig:LeftFoot","rotation":[0.4820258617401123,0.06575184315443039,-0.03629865497350693,0.872931957244873],"scale":[1,1.0000001192092896,1.0000001192092896],"translation":[-3.387158358236775e-7,41.849327087402344,-3.457535058259964e-8]},{"children":[133],"name":"Armature_mixamorig:LeftToeBase","rotation":[0.29159197211265564,-0.06168047711253166,0.01884075440466404,0.9543660879135132],"scale":[1,1,1.0000001192092896],"translation":[8.810311555862427e-7,12.08905029296875,-0.000003889203071594238]},{"name":"Armature_mixamorig:LeftToe_End","rotation":[9.872019290924072e-8,0.000008056988008320332,-1.909211277961731e-8,1],"scale":[1,1,1],"translation":[-3.5762786865234375e-7,4.706444263458252,5.960464477539063e-8]},{"children":[135],"name":"Armature_mixamorig:RightUpLeg","rotation":[-0.00000294413257506676,-0.0034815834369510412,-0.9998561143875122,0.01660647802054882],"scale":[1.000124216079712,1,1.0000035762786865],"translation":[-6.5092010498046875,-3.8089065551757812,-0.4497392773628235]},{"children":[136],"name":"Armature_mixamorig:RightLeg","rotation":[-0.022010719403624535,0.00022552665905095637,-0.012826679274439812,0.999675452709198],"scale":[0.9999998807907104,0.9999998807907104,1],"translation":[4.079265636391938e-8,45.050357818603516,-1.5308614820241928e-8]},{"children":[137],"name":"Armature_mixamorig:RightFoot","rotation":[0.48082953691482544,-0.06620366871356964,0.03643133118748665,0.8735518455505371],"scale":[1,1.0000001192092896,1.000000238418579],"translation":[-9.810537449084222e-8,41.85009765625,4.062894731760025e-8]},{"children":[138],"name":"Armature_mixamorig:RightToeBase","rotation":[0.29314252734184265,0.06225594878196716,-0.01912800408899784,0.9538480043411255],"scale":[0.9999999403953552,0.9999999403953552,1.0000001192092896],"translation":[-6.51925802230835e-8,12.033415794372559,0.0000034570693969726562]},{"name":"Armature_mixamorig:RightToe_End","rotation":[-3.748573362827301e-8,-0.000008230912499129772,-2.9453076422214508e-8,1],"scale":[1,1,1],"translation":[1.043081283569336e-7,4.712545394897461,3.2782554626464844e-7]},{"children":[72],"matrix":[-1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1],"name":"Scene_root"}],"samplers":[{"name":"default"},{"name":"default"},{"name":"default"}],"scene":0,"scenes":[{"name":"Scene","nodes":[68,71,139]}],"skins":[{"inverseBindMatrices":10,"joints":[3,4,5,6,7,8,10,11,12,13,14,15,16,18,19,20,22,23,24,26,27,28,30,31,32,34,35,36,37,38,39,40,42,43,44,46,47,48,50,51,52,54,55,56,58,59,60,61,63,64,65,66],"name":"F010_Saber_Body","skeleton":3},{"inverseBindMatrices":178,"joints":[6,7,8],"name":"F010_Saber_Face","skeleton":3},{"joints":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"name":"full","skeleton":3},{"joints":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"name":"full","skeleton":3,"inverseBindMatrices":349},{"joints":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"name":"full","skeleton":3,"inverseBindMatrices":596}],"textures":[{"name":"Saber-Face","sampler":0,"source":1},{"name":"saber-pure-body.png","sampler":0,"source":0},{"sampler":1,"source":2},{"name":"saber","sampler":1,"source":1},{"name":"saber-dress-texture.png","sampler":2,"source":2}]} \ No newline at end of file diff --git a/models/merge/saber-dress-texture.png b/models/merge/saber-dress-texture.png new file mode 100644 index 0000000000000000000000000000000000000000..03ba13cc2d939f828261ae7ee29ab89cf8553f8f --- /dev/null +++ b/models/merge/saber-dress-texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33d4b9521ea57051e246a841a9f73cacb04f986d7cf7a530061219dedf2338d0 +size 1038135 diff --git a/models/merge/saber-pure-body.png b/models/merge/saber-pure-body.png new file mode 100644 index 0000000000000000000000000000000000000000..27bee97e5e9833f1f0966d90aba3d19b3ff834b7 Binary files /dev/null and b/models/merge/saber-pure-body.png differ diff --git a/models/merge/saber_01_face.png b/models/merge/saber_01_face.png new file mode 100644 index 0000000000000000000000000000000000000000..baba4465c57f1a481033cf7d77ff5ff2c85e72e4 Binary files /dev/null and b/models/merge/saber_01_face.png differ diff --git a/output.gltf b/output.gltf new file mode 100644 index 0000000000000000000000000000000000000000..966b1f2c557347f4aa78139dd50d2e85407c01e9 --- /dev/null +++ b/output.gltf @@ -0,0 +1,5862 @@ +{ + "accessors": [ + { + "bufferView": 145, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 83, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "min": [ + -6.239861249923706e-7, + 12.033415794372559, + 3.5762786865234375e-7 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 137, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "min": [ + -0.009857624769210815, + 2.0025572776794434, + -0.000008842733222991228 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 62, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "min": [ + 5.414642258866342e-13, + 8.022480964660645, + -5.364418029785156e-7 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 20, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "min": [ + -0.018551677465438843, + 2.2824809551239014, + 0.00000463516335003078 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 119, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "min": [ + 0.01121482253074646, + 2.20082426071167, + 0.00002157763810828328 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 106, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 51, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "min": [ + -1.9569284859244362e-7, + 0.00005565229366766289, + -0.034311242401599884, + 0.9994112253189087 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 71, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "min": [ + -4.116445779800415e-7, + 12.089044570922852, + 1.7881393432617188e-7 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 86, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "min": [ + 0.09869322180747986, + 2.222616195678711, + 0.000005245208740234375 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 93, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "min": [ + 5.549511570279719e-7, + -0.00003228561763535254, + 0.0010957049671560526, + 0.9999994039535522 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 18, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "min": [ + -0.000009156999112747144, + 0.0011933766072615981, + -0.015421011485159397, + 0.9998803734779358 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 56, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "min": [ + 0.01632753014564514, + 2.0911762714385986, + 0.000011799194908235222 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 8, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "min": [ + 0.009776592254638672, + 1.9066510200500488, + -0.000011112497304566205 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 77, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "min": [ + -0.006532952189445496, + 1.8280677795410156, + -0.000011722324416041374 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 80, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "min": [ + -5.960464477539063e-8, + 7.4837236404418945, + -0.0000017881393432617188 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 0, + "componentType": 5121, + "count": 1176, + "max": [ + 2, + 1, + 0, + 0 + ], + "min": [ + 2, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.000_skin_0", + "type": "VEC4" + }, + { + "bufferView": 122, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "min": [ + -3.513521432876587, + 8.988426208496094, + -0.11455392837524414 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 36, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "min": [ + 0.4910941421985626, + -0.062034837901592255, + 0.04505223408341408, + 0.8677260875701904 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 37, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 148, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 94, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 0.9999998807907104 + ], + "min": [ + 1, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 163, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "min": [ + 1.0001243352890015, + 0.9999998807907104, + 1.000003695487976 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 25, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 12, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "min": [ + -0.01586439274251461, + -0.0007755132974125445, + 0.04963767156004906, + 0.9986410140991211 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 24, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "min": [ + 0.5753993988037109, + 0.4047872722148895, + -0.592011570930481, + 0.39317330718040466 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 66, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "min": [ + -0.000005368752681533806, + -0.00042654300341382623, + 0.007251414470374584, + 0.999973714351654 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 109, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 38, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "min": [ + -0.010961860418319702, + 2.2484662532806396, + 0.000009948620572686195 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 162, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "min": [ + 0.00001167778464150615, + -0.0004857034655287862, + 0.9999808073043823, + -0.006179941818118095 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 82, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 70, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 98, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "min": [ + -0.018159687519073486, + 2.1517670154571533, + -0.0000034263357520103455 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 22, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999997615814209 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 143, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "min": [ + -0.00000198512316273991, + 22.7723331451416, + 0.000002205953933298588 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 112, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 4, + "byteOffset": 0, + "componentType": 5123, + "count": 5004, + "max": [ + 1175 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_F010_Saber.000_0", + "type": "SCALAR" + }, + { + "bufferView": 73, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "min": [ + 0.9999999403953552, + 0.9999998211860657, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 132, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "min": [ + 0.49219897389411926, + 0.06156006455421448, + -0.04492250457406044, + 0.8671404123306274 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 101, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "min": [ + 0.08421140909194946, + 1.993523120880127, + 0.0000010579824447631836 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 69, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "min": [ + -0.029726667329669, + 0.0003684632829390466, + -0.012829470448195934, + 0.9994756579399109 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 60, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "min": [ + 0.039921678602695465, + 1.0923948784392554e-13, + 1.9801653372564232e-11, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 149, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "min": [ + 6.116943040979095e-7, + 19.02713966369629, + 0.00000519820605404675 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 114, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "min": [ + -0.02764846757054329, + -0.000389853521483019, + 0.012829817831516266, + 0.9995352625846863 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 74, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "min": [ + 6.5092010498046875, + -3.8089029788970947, + -0.3193536400794983 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 33, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "min": [ + -0.0000010370887366661918, + 0.00034277912345714867, + -0.0064829993061721325, + 0.9999790191650391 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 150, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "min": [ + 0.019991455599665642, + -0.018730632960796356, + 0.05151980370283127, + 0.9982961416244507 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 103, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "min": [ + 0.9999999403953552, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 104, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "min": [ + -2.460183168295771e-7, + 22.77089500427246, + 0.000006812736501160543 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 118, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.000000238418579, + 1 + ], + "min": [ + 1, + 1.000000238418579, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 90, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "min": [ + 6.178794933475729e-7, + 0.00013458405737765133, + 0.0019599406514316797, + 0.9999980926513672 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 57, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "min": [ + 0.0000014512252164422534, + 0.0003296945069450885, + -0.010418280959129333, + 0.9999457001686096 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 17, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "min": [ + 0.015063196420669556, + 2.0928525924682617, + -0.00001477246405556798 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 120, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "min": [ + -0.0000027277535536995856, + 0.0008116317912936211, + -0.011757179163396358, + 0.9999305605888367 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 9, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "min": [ + -0.0000017708856603348977, + -0.00008915702346712351, + -0.0010598038788884878, + 0.9999995231628418 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 107, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "min": [ + 0.615178108215332, + 5.987785816192627, + -0.2521420121192932 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 47, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "min": [ + 2.112320899963379, + 5.151422500610352, + -0.101677805185318 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 49, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 14, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "min": [ + 8.642673492431641e-7, + 7.483717918395996, + -0.0000068247318267822266 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 87, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "min": [ + 0.00004969544170307927, + 0.0011240799212828279, + -0.0010827239602804184, + 0.9999988079071045 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 95, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "min": [ + -5.494803190231323e-8, + 19.023351669311523, + -0.0000032789830584079027 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 39, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "min": [ + -0.000002889829829655355, + -0.00046613236190751195, + 0.009517651982605457, + 0.9999545812606812 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 141, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "min": [ + -3.749335064640036e-9, + -6.563448747235262e-21, + 5.4569682106375694e-12, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 27, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "min": [ + -5.029141902923584e-8, + 9.422998405866911e-13, + -2.3584922209662906e-11, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 127, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 126, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "min": [ + -8.061967378125701e-7, + 0.00017113897774834186, + 0.003068875055760145, + 0.9999952912330627 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 45, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "min": [ + 0.21339857578277588, + -0.06705669313669205, + -0.26358723640441895, + 0.9383423328399658 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 64, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 19, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999997019767761 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 157, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 2, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9074609279632568, + 0.9870719909667969 + ], + "min": [ + 0.0168008916079998, + 0.018634021282196045 + ], + "name": "accessor_buffer_F010_Saber.000_TEXCOORD_0_0", + "type": "VEC2" + }, + { + "bufferView": 123, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "min": [ + 0.5739166140556335, + -0.4058528542518616, + 0.5932961106300354, + 0.39230477809906006 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 26, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "min": [ + 1.2692300335737094e-11, + 9.168559074401855, + -4.76837158203125e-7 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 28, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 91, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 97, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "min": [ + 1, + 1.0000001192092896, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 113, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "min": [ + -3.5517268770490773e-7, + 45.04969024658203, + 8.68749339133501e-9 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 108, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "min": [ + -0.02078564278781414, + 0.003121189074590802, + -0.04567611962556839, + 0.9987351894378662 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 30, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "min": [ + -0.0000019045912722504, + -0.0002899357641581446, + -0.0030352880712598562, + 0.9999953508377075 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 15, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "min": [ + -0.1844879388809204, + -0.0005821919767186046, + -0.016901638358831406, + 0.9826892614364624 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 58, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "min": [ + 0.9999998807907104, + 0.9999999403953552, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 78, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "min": [ + -0.0000036987858038628474, + 0.00004930837167194113, + -0.000254306651186198, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 34, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 0.9999997615814209, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 6, + "byteOffset": 0, + "componentType": 5126, + "count": 3, + "max": [ + -1.0011157989501953, + 3.76585091235726e-12, + -5.520964653462045e-20, + 0, + 1.886712574367122e-12, + -1.6290225346438092e-7, + 1.0011157989501953, + 0, + 3.765848310272046e-12, + 1.0011159181594849, + 0.07986891269683838, + 0, + -0.00744246831163764, + -122.5326919555664, + 2.1228513717651367, + 1 + ], + "min": [ + -1.0011157989501953, + -4.722267715751016e-11, + -1.886721247984502e-12, + 0, + -6.410383498526299e-19, + -0.07986891269683838, + 0.9979247450828552, + 0, + -4.7222680626957114e-11, + 0.9979248046875, + 1.5544334530659398e-7, + 0, + -0.007442474830895662, + -137.4109344482422, + -8.502774238586426, + 1 + ], + "name": "accessor_buffer_IBM_F010_Saber_Face_skin_0", + "type": "MAT4" + }, + { + "bufferView": 146, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "min": [ + 0.8905045986175537, + 5.982408046722412, + -0.24305573105812073 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 41, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "min": [ + -1.3880571126937866, + 1.8726567029953003, + 1.3422273397445679 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 50, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "min": [ + 0.07793843746185303, + 2.1093196868896484, + 0.0000030547380447387695 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 43, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 102, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "min": [ + 0.000002737616568992962, + -0.0000792778519098647, + -0.08030900359153748, + 0.9967700242996216 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 140, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "min": [ + 5.965165861265831e-12, + 4.3087158203125, + 0.1199100986123085 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 29, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "min": [ + 0.02989715337753296, + 2.250401020050049, + 0.000006557500455528498 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 96, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "min": [ + 0.015112828463315964, + 0.01513464655727148, + -0.052329666912555695, + 0.9984008073806763 + ], + "name": "accessor_buffer_mixamorig:LeftHand_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 84, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "min": [ + 0.29314252734184265, + 0.06225592643022537, + -0.019128000363707542, + 0.9538480043411255 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 85, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1, + 1 + ], + "min": [ + 0.9999999403953552, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightToeBase_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 128, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00007425900548696518, + 0.4175964593887329, + 98.80355834960938 + ], + "min": [ + -0.00007425900548696518, + 0.4175964593887329, + 98.80355834960938 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 31, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 136, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 79, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 7.576391696929932, + 7.6111836433410645, + 154.5619659423828 + ], + "min": [ + -7.576313018798828, + -2.516939878463745, + 136.62217712402344 + ], + "name": "accessor_buffer_F010_Saber.000_POSITION_0", + "type": "VEC3" + }, + { + "bufferView": 46, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 68, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "min": [ + -2.398074059328792e-7, + 45.050357818603516, + 2.3865140974521637e-9 + ], + "name": "accessor_buffer_mixamorig:RightLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 0.9913486242294312, + 0.9995606541633606, + 0.9988025426864624 + ], + "min": [ + -0.9913477301597595, + -0.9874794483184814, + -0.9999688863754272 + ], + "name": "accessor_buffer_F010_Saber.000_NORMAL_0", + "type": "VEC3" + }, + { + "bufferView": 10, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998807907104, + 1 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 124, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1 + ], + "min": [ + 1.0000001192092896, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:RightShoulder_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 142, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Head_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 158, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "min": [ + -2.0758204460144043, + 5.181240558624268, + -0.15668104588985443 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 72, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "min": [ + 0.291592001914978, + -0.06168048828840256, + 0.018840743228793144, + 0.954366147518158 + ], + "name": "accessor_buffer_mixamorig:LeftToeBase_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 3, + "byteOffset": 0, + "componentType": 5126, + "count": 1176, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_F010_Saber.000_COLOR_0_0", + "type": "VEC3" + }, + { + "bufferView": 32, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "min": [ + 0.0047144293785095215, + 1.5559417009353638, + 0.000002086983840854373 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 125, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "min": [ + -0.017888188362121582, + 2.1800546646118164, + -0.000005649722879752517 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 105, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "min": [ + 0.0000018012506188824773, + 0.00015944617916829884, + -1.3720271851980215e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:RightForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 161, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "min": [ + -6.5092010498046875, + -3.8089101314544678, + -0.4497392773628235 + ], + "name": "accessor_buffer_mixamorig:RightUpLeg_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 54, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "min": [ + -0.01581340841948986, + -0.0016685931477695704, + 0.04805108159780502, + 0.9987183213233948 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 139, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "min": [ + 0.9999998211860657, + 0.9999997019767761, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 129, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.00000392553374695126, + 0.7071068286895752, + 0.7071068286895752, + 0.000003921371899195947 + ], + "min": [ + -0.00000392553374695126, + 0.7071068286895752, + 0.7071068286895752, + 0.000003921371899195947 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 61, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 130, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 1, + 1 + ], + "min": [ + 1, + 1, + 1 + ], + "name": "accessor_buffer_mixamorig:Hips_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 92, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "min": [ + 0.0033528581261634827, + 1.9062618017196655, + 0.000006702626706101 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 40, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.000000238418579, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 121, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 153, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "min": [ + -0.03992169722914696, + -2.2444967839874153e-7, + 0.000005544060059037292, + 0.9992028474807739 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 133, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "min": [ + 0.9999998211860657, + 0.9999999403953552, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 76, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "min": [ + 1.0001250505447388, + 0.9999999403953552, + 1.000000238418579 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 100, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 59, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "min": [ + -1.632623376768283e-11, + 10.314631462097168, + 2.384185791015625e-7 + ], + "name": "accessor_buffer_mixamorig:Neck_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 53, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "min": [ + -0.6209797859191895, + 5.933863162994385, + -0.1895589530467987 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 5, + "byteOffset": 16, + "componentType": 5126, + "count": 1176, + "max": [ + 1, + 0.21810737252235413, + 0.0008118848782032728, + 0 + ], + "min": [ + 0.7810807824134827, + 0, + 0, + 0 + ], + "name": "accessor_buffer_F010_Saber.000_skin_1", + "type": "VEC4" + }, + { + "bufferView": 154, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999999403953552, + 1 + ], + "min": [ + 1, + 0.9999999403953552, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 147, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "min": [ + -0.015152297914028168, + -0.013382739387452602, + 0.04820201173424721, + 0.9986330270767212 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 63, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "min": [ + 1.30385160446167e-8, + 9.691603259937703e-14, + -6.765455166576895e-13, + 1 + ], + "name": "accessor_buffer_mixamorig:Spine1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 89, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "min": [ + 0.008640080690383911, + 2.2196240425109863, + 0.000011700321920216084 + ], + "name": "accessor_buffer_mixamorig:RightHandRing2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 21, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "min": [ + -6.611599019379355e-7, + 0.00010853812273126096, + 0.0016283623408526182, + 0.9999986886978149 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 144, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "min": [ + 4.818217576030293e-7, + -0.00015852972865104675, + 4.313407657718926e-7, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftForeArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 48, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "min": [ + -0.014275818131864071, + -0.030067145824432373, + 0.05077396705746651, + 0.998155415058136 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 7, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.03333333333333333 + ], + "min": [ + 0 + ], + "name": "accessor_buffer_Character_TPose_time_0", + "type": "SCALAR" + }, + { + "bufferView": 115, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "min": [ + 1.0000001192092896, + 0.9999998211860657, + 1 + ], + "name": "accessor_buffer_mixamorig:LeftLeg_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 44, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "min": [ + 1.4313478469848633, + 1.948877215385437, + 1.3737415075302124 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 52, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "min": [ + 0.9999997615814209, + 1, + 0.9999998807907104 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 116, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "min": [ + 2.289442539215088, + 5.801696300506592, + 0.050649963319301605 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 23, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "min": [ + 3.513521194458008, + 8.987088203430176, + -0.09783625602722168 + ], + "name": "accessor_buffer_mixamorig:LeftShoulder_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 117, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "min": [ + -0.020914429798722267, + 0.00083109550178051, + -0.04451649263501167, + 0.998789370059967 + ], + "name": "accessor_buffer_mixamorig:RightHandIndex1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 135, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "min": [ + 0.0000019077392607869115, + -0.00024382353876717389, + 0.006663992069661617, + 0.9999777674674988 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 55, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "min": [ + 1.0000001192092896, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 111, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "min": [ + -0.020383575931191444, + 0.010770494118332863, + -0.049423426389694214, + 0.9985118508338928 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 65, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "min": [ + -0.004050195217132568, + 1.9782497882843018, + -0.000013029115507379174 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 159, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "min": [ + -0.019062332808971405, + 0.034996457397937775, + -0.04927309229969978, + 0.9979900121688843 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 151, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "min": [ + 0.9999998211860657, + 0.9999998807907104, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:RightHand_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 131, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "min": [ + -1.1807060218416154e-7, + 41.84932327270508, + -2.8172507882118225e-7 + ], + "name": "accessor_buffer_mixamorig:LeftFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 99, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "min": [ + -1.9003864792921377e-7, + 0.00007007304520811886, + 0.022684887051582336, + 0.9997426867485046 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 155, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "min": [ + 0.025692284107208252, + 2.32354736328125, + -0.000005896072252653539 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 16, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "min": [ + 0.9999998807907104, + 1, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightArm_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 152, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "min": [ + -4.3809234018254983e-11, + 6.854499816894531, + -0.5485977530479431 + ], + "name": "accessor_buffer_mixamorig:Spine_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 138, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "min": [ + -9.933781939253095e-7, + 0.00005373970634536818, + 0.003363647498190403, + 0.9999943375587463 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 110, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "min": [ + -0.8287959098815918, + 5.778012275695801, + -0.20808981359004974 + ], + "name": "accessor_buffer_mixamorig:RightHandRing1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 156, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "min": [ + -0.0000013217339756010915, + -0.00023518799571320415, + -0.002985715866088867, + 0.9999955296516418 + ], + "name": "accessor_buffer_mixamorig:RightHandMiddle2_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 134, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "min": [ + -0.006230756640434265, + 1.5249916315078735, + 0.000022089123376645148 + ], + "name": "accessor_buffer_mixamorig:LeftHandPinky3_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 88, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "min": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "name": "accessor_buffer_mixamorig:RightHandThumb2_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 160, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "min": [ + 0.9999999403953552, + 1.0000001192092896, + 1.0000001192092896 + ], + "name": "accessor_buffer_mixamorig:RightHandPinky1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 35, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "min": [ + 2.655433490872383e-7, + 41.85009002685547, + -1.4621764421463013e-7 + ], + "name": "accessor_buffer_mixamorig:RightFoot_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 11, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "min": [ + -2.381847381591797, + 6.0912089347839355, + 0.09324643015861511 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_0", + "type": "VEC3" + }, + { + "bufferView": 67, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "min": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandRing3_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 13, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "min": [ + 1.0000001192092896, + 1, + 0.9999999403953552 + ], + "name": "accessor_buffer_mixamorig:LeftHandIndex1_Character_TPose_2", + "type": "VEC3" + }, + { + "bufferView": 42, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "min": [ + 0.21630768477916718, + 0.07504062354564667, + 0.2835485637187958, + 0.9312251806259155 + ], + "name": "accessor_buffer_mixamorig:LeftHandThumb1_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 81, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "min": [ + -0.1847110539674759, + 0.001648154342547059, + 0.014273405075073242, + 0.9826878309249878 + ], + "name": "accessor_buffer_mixamorig:LeftArm_Character_TPose_1", + "type": "VEC4" + }, + { + "bufferView": 75, + "byteOffset": 0, + "componentType": 5126, + "count": 2, + "max": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "min": [ + 0.0000016051130842242856, + -0.0022346421610563993, + 0.9999784827232361, + 0.0061686099506914616 + ], + "name": "accessor_buffer_mixamorig:LeftUpLeg_Character_TPose_1", + "type": "VEC4" + } + ], + "asset": { + "copyright": "", + "generator": "blendergltf v1.2.0", + "version": "2.0" + }, + "bufferViews": [ + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 0, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_POSITION_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 14112, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_NORMAL_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 9408, + "byteOffset": 28224, + "byteStride": 8, + "name": "bufferView_buffer_F010_Saber.000_TEXCOORD_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 14112, + "byteOffset": 37632, + "byteStride": 12, + "name": "bufferView_buffer_F010_Saber.000_COLOR_0_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 10012, + "byteOffset": 51744, + "name": "bufferView_buffer_F010_Saber.000_0", + "target": 34963 + }, + { + "buffer": 0, + "byteLength": 37632, + "byteOffset": 61756, + "byteStride": 32, + "name": "bufferView_buffer_F010_Saber.000_skin_0", + "target": 34962 + }, + { + "buffer": 0, + "byteLength": 192, + "byteOffset": 99388, + "byteStride": 64, + "name": "bufferView_buffer_IBM_F010_Saber_Face_skin_0" + }, + { + "buffer": 0, + "byteLength": 8, + "byteOffset": 99580, + "byteStride": 4, + "name": "bufferView_buffer_Character_TPose_time_0" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 99932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 99988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 100948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 100972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Neck_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftUpLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightToeBase_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101748, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101772, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101804, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101828, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101852, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101884, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101908, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 101932, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101964, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 101988, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102012, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102044, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandThumb2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102068, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102092, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102124, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandThumb3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102148, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102172, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102204, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102228, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102252, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102284, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102308, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102332, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102364, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102388, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102412, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102444, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftLeg_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102468, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102492, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102524, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandIndex1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102548, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102572, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102604, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102628, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102652, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102684, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightShoulder_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102708, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102732, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102764, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102788, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102812, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102844, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Hips_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102868, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102892, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102924, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftFoot_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 102948, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 102972, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103004, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandPinky3_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103028, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103052, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103084, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandIndex2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103108, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103132, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103164, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Head_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103188, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103212, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103244, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftForeArm_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103268, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103292, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103324, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:LeftHandRing1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103348, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103372, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103404, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHand_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103428, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103452, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103484, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:Spine_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103508, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103532, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103564, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandMiddle2_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103588, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103612, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103644, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightHandPinky1_Character_TPose_2" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103668, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_0" + }, + { + "buffer": 0, + "byteLength": 32, + "byteOffset": 103692, + "byteStride": 16, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_1" + }, + { + "buffer": 0, + "byteLength": 24, + "byteOffset": 103724, + "byteStride": 12, + "name": "bufferView_buffer_mixamorig:RightUpLeg_Character_TPose_2" + } + ], + "buffers": [ + { + "byteLength": 103748, + "name": "buffer_saber-face", + "uri": "buffer_saber-face.bin" + } + ], + "images": [ + { + "name": "saber_01_face.png", + "uri": "saber_01_face.png" + } + ], + "materials": [ + { + "alphaMode": "OPAQUE", + "doubleSided": false, + "emissiveFactor": [ + 0, + 0, + 0 + ], + "name": "face.001", + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.800000011920929, + 0.800000011920929, + 0.800000011920929, + 1 + ], + "baseColorTexture": { + "index": 0, + "texCoord": 0 + }, + "metallicFactor": 0, + "roughnessFactor": 1 + } + } + ], + "meshes": [ + { + "name": "F010_Saber.000", + "primitives": [ + { + "attributes": { + "COLOR_0": 107, + "NORMAL": 101, + "POSITION": 98, + "TEXCOORD_0": 70 + }, + "indices": 36, + "material": 0, + "mode": 4, + "extensions": { + "gl_avatar": { + "attributes": { + "JOINTS_0": 16, + "WEIGHTS_0": 126 + } + } + } + } + ] + } + ], + "nodes": [ + { + "children": [ + 1, + 2 + ], + "name": "Character", + "rotation": [ + -0.7071068286895752, + 0, + 0, + 0.7071067094802856 + ], + "scale": [ + 0.009999999776482582, + 0.009999999776482582, + 0.009999999776482582 + ], + "translation": [ + 0, + 0, + 0 + ] + }, + { + "mesh": 0, + "name": "F010_Saber_Face", + "rotation": [ + -8.136032647598768e-8, + 1.0171798302661709e-16, + -1.2870997341503742e-30, + 1 + ], + "scale": [ + 1.0011157989501953, + 1.0011157989501953, + 1.0011157989501953 + ], + "translation": [ + 0, + -4.52195720095739e-22, + 2.7755575615628914e-15 + ], + "extensions": { + "gl_avatar": { + "skin": 0 + } + } + }, + { + "children": [ + 3, + 57, + 62 + ], + "name": "Armature_mixamorig:Hips", + "rotation": [ + 0, + 0.7071068286895752, + 0.7071068286895752, + 0 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.007442474365234375, + 0.6201396584510803, + 98.82971954345703 + ] + }, + { + "children": [ + 4 + ], + "name": "Armature_mixamorig:Spine", + "rotation": [ + -0.039921652525663376, + 0, + 0, + 0.9992028474807739 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 0, + 6.854499816894531, + -0.5485978126525879 + ] + }, + { + "children": [ + 5 + ], + "name": "Armature_mixamorig:Spine1", + "rotation": [ + 1.4901162970204496e-8, + 0, + 0, + 1 + ], + "scale": [ + 1, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -4.656612873077393e-10, + 8.022480964660645, + -2.384185791015625e-7 + ] + }, + { + "children": [ + 6, + 9, + 33 + ], + "name": "Armature_mixamorig:Spine2", + "rotation": [ + -5.029141902923584e-8, + 9.423000574271256e-13, + -2.358492047493943e-11, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -4.656612873077393e-10, + 9.168560028076172, + -4.76837158203125e-7 + ] + }, + { + "children": [ + 7 + ], + "name": "Armature_mixamorig:Neck", + "rotation": [ + 0.03992168977856636, + 1.427615485679809e-13, + 2.0030548400495896e-11, + 0.9992028474807739 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -2.2881511962946632e-10, + 10.314631462097168, + 0.0000011920928955078125 + ] + }, + { + "children": [ + 8 + ], + "name": "Armature_mixamorig:Head", + "rotation": [ + -3.749335064640036e-9, + -6.35555176367169e-21, + 5.4569682106375694e-12, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -5.1451731764018405e-11, + 4.3087005615234375, + 0.11991112679243088 + ] + }, + { + "name": "Armature_mixamorig:HeadTop_End", + "rotation": [ + 0, + 2.610143520150023e-28, + -1.8189894035458565e-12, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 1.2972056762095008e-10, + 20.857254028320312, + 0.5804517269134521 + ] + }, + { + "children": [ + 10 + ], + "name": "Armature_mixamorig:LeftShoulder", + "rotation": [ + 0.5740949511528015, + 0.4067640006542206, + -0.5904093384742737, + 0.39544278383255005 + ], + "scale": [ + 1.0000001192092896, + 1, + 1 + ], + "translation": [ + 3.513521194458008, + 8.987089157104492, + -0.09783673286437988 + ] + }, + { + "children": [ + 11 + ], + "name": "Armature_mixamorig:LeftArm", + "rotation": [ + -0.19647400081157684, + -0.0007150349556468427, + 0.0035684211179614067, + 0.9805023074150085 + ], + "scale": [ + 1, + 1.0000001192092896, + 0.9999999403953552 + ], + "translation": [ + -5.960464477539062e-7, + 7.4837188720703125, + -0.00001049041748046875 + ] + }, + { + "children": [ + 12 + ], + "name": "Armature_mixamorig:LeftForeArm", + "rotation": [ + -0.005400624126195908, + -0.0001584456767886877, + 0.029325975105166435, + 0.9995554089546204 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -5.364418029785156e-7, + 22.7723331451416, + 5.662441253662109e-7 + ] + }, + { + "children": [ + 13, + 17, + 21, + 25, + 29 + ], + "name": "Armature_mixamorig:LeftHand", + "rotation": [ + -0.0046674893237650394, + -0.036291614174842834, + -0.01584092527627945, + 0.9992048144340515 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 4.76837158203125e-7, + 19.02334213256836, + 8.046627044677734e-7 + ] + }, + { + "children": [ + 14 + ], + "name": "Armature_mixamorig:LeftHandThumb1", + "rotation": [ + 0.24564014375209808, + 0.0797870084643364, + 0.2984432578086853, + 0.9188180565834045 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -1.3880550861358643, + 1.872644305229187, + 1.3422610759735107 + ] + }, + { + "children": [ + 15 + ], + "name": "Armature_mixamorig:LeftHandThumb2", + "rotation": [ + 0.00489170802757144, + 4.4890290951116185e-7, + 4.610102450897102e-7, + 0.9999881386756897 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.018166542053222656, + 2.1517605781555176, + -0.000021755695343017578 + ] + }, + { + "children": [ + 16 + ], + "name": "Armature_mixamorig:LeftHandThumb3", + "rotation": [ + 0.021618247032165527, + -5.850072852808808e-7, + -3.9590455003235547e-7, + 0.9997663497924805 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1 + ], + "translation": [ + 0.07795095443725586, + 2.1093316078186035, + 0.0000018775463104248047 + ] + }, + { + "name": "Armature_mixamorig:LeftHandThumb4", + "rotation": [ + 4.284083487959833e-8, + -1.769512749660862e-7, + -3.3527612686157227e-8, + 1 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + -0.0597844123840332, + 1.8846036195755005, + -0.000011980533599853516 + ] + }, + { + "children": [ + 18 + ], + "name": "Armature_mixamorig:LeftHandIndex1", + "rotation": [ + 0.026657480746507645, + 0.0018764277920126915, + 0.07018843293190002, + 0.9971757531166077 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -2.3818466663360596, + 6.0911946296691895, + 0.09325551986694336 + ] + }, + { + "children": [ + 19 + ], + "name": "Armature_mixamorig:LeftHandIndex2", + "rotation": [ + -0.034092869609594345, + -7.741025598306805e-8, + 1.2725772080557363e-7, + 0.9994186758995056 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -0.009856224060058594, + 2.002563238143921, + 0.0000019297003746032715 + ] + }, + { + "children": [ + 20 + ], + "name": "Armature_mixamorig:LeftHandIndex3", + "rotation": [ + -0.011232745833694935, + 8.382431815334712e-8, + -1.2014818651095993e-7, + 0.9999369382858276 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.0033556222915649414, + 1.906246304512024, + -0.000002428889274597168 + ] + }, + { + "name": "Armature_mixamorig:LeftHandIndex4", + "rotation": [ + -1.6298145055770874e-8, + -2.116430550813675e-7, + -1.4435499906539917e-7, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.006502628326416016, + 1.6352357864379883, + -0.000007256865501403809 + ] + }, + { + "children": [ + 22 + ], + "name": "Armature_mixamorig:LeftHandMiddle1", + "rotation": [ + 0.030671721324324608, + 0.0003823289880529046, + 0.012456541880965233, + 0.9994519352912903 + ], + "scale": [ + 0.9999999403953552, + 1, + 1 + ], + "translation": [ + -0.620979368686676, + 5.9338483810424805, + -0.18955062329769135 + ] + }, + { + "children": [ + 23 + ], + "name": "Armature_mixamorig:LeftHandMiddle2", + "rotation": [ + -0.01664525642991066, + 1.53325672158644e-8, + 1.832339968643737e-8, + 0.999861478805542 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.018555283546447754, + 2.2824888229370117, + -0.000022992491722106934 + ] + }, + { + "children": [ + 24 + ], + "name": "Armature_mixamorig:LeftHandMiddle3", + "rotation": [ + -0.10026512295007706, + -6.588842182964072e-8, + 1.4567116579655703e-7, + 0.9949608445167542 + ], + "scale": [ + 1, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + -0.010961532592773438, + 2.2484676837921143, + -0.000016957521438598633 + ] + }, + { + "name": "Armature_mixamorig:LeftHandMiddle4", + "rotation": [ + -4.5380154745089385e-8, + 5.855691398437557e-8, + 8.149073416063857e-9, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + 0.02951037883758545, + 2.0856528282165527, + 0.000010073184967041016 + ] + }, + { + "children": [ + 26 + ], + "name": "Armature_mixamorig:LeftHandRing1", + "rotation": [ + 0.10404136031866074, + -0.008528899401426315, + -0.08125600963830948, + 0.9912115335464478 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.8905025720596313, + 5.982393264770508, + -0.24304264783859253 + ] + }, + { + "children": [ + 27 + ], + "name": "Armature_mixamorig:LeftHandRing2", + "rotation": [ + -0.03329118713736534, + -6.639353955506522e-8, + -3.7273565567375044e-8, + 0.9994457960128784 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.017888784408569336, + 2.1800594329833984, + -0.000017344951629638672 + ] + }, + { + "children": [ + 28 + ], + "name": "Armature_mixamorig:LeftHandRing3", + "rotation": [ + -0.08213821053504944, + 5.25645127424923e-8, + 6.078793717279041e-7, + 0.9966209530830383 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.0040547847747802734, + 1.9782464504241943, + -0.000038623809814453125 + ] + }, + { + "name": "Armature_mixamorig:LeftHandRing4", + "rotation": [ + -1.4202669262886047e-7, + -1.4062970876693726e-7, + -1.5425030142068863e-7, + 1 + ], + "scale": [ + 0.9999999403953552, + 1, + 1 + ], + "translation": [ + 0.02194046974182129, + 1.7619253396987915, + 0.000026524066925048828 + ] + }, + { + "children": [ + 30 + ], + "name": "Armature_mixamorig:LeftHandPinky1", + "rotation": [ + 0.13995902240276337, + -0.024145862087607384, + -0.16828545928001404, + 0.9754529595375061 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 2.112321376800537, + 5.15140962600708, + -0.10163509845733643 + ] + }, + { + "children": [ + 31 + ], + "name": "Armature_mixamorig:LeftHandPinky2", + "rotation": [ + -0.012911615893244743, + 6.519802298043942e-8, + 6.445289386647346e-7, + 0.999916672706604 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + -0.006536006927490234, + 1.828072190284729, + -0.00001633167266845703 + ] + }, + { + "children": [ + 32 + ], + "name": "Armature_mixamorig:LeftHandPinky3", + "rotation": [ + -0.09343928843736649, + 1.850952742188383e-7, + -2.745443339335907e-7, + 0.9956250786781311 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + -0.006233692169189453, + 1.5249935388565063, + 0.000025272369384765625 + ] + }, + { + "name": "Armature_mixamorig:LeftHandPinky4", + "rotation": [ + 5.541368963690729e-8, + -5.9371814131736755e-9, + 1.3969838619232178e-9, + 1 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 0.012760639190673828, + 1.3818011283874512, + -0.000005304813385009766 + ] + }, + { + "children": [ + 34 + ], + "name": "Armature_mixamorig:RightShoulder", + "rotation": [ + 0.5726097226142883, + -0.40782278776168823, + 0.5916988849639893, + 0.394577294588089 + ], + "scale": [ + 1.0000001192092896, + 1.0000001192092896, + 1 + ], + "translation": [ + -3.513521194458008, + 8.98842716217041, + -0.11455440521240234 + ] + }, + { + "children": [ + 35 + ], + "name": "Armature_mixamorig:RightArm", + "rotation": [ + -0.19615903496742249, + 0.0015209860866889358, + -0.007602959871292114, + 0.980541467666626 + ], + "scale": [ + 0.9999998807907104, + 0.9999998211860657, + 0.9999998211860657 + ], + "translation": [ + 6.854534149169922e-7, + 7.4837188720703125, + -0.0000069588422775268555 + ] + }, + { + "children": [ + 36 + ], + "name": "Armature_mixamorig:RightForeArm", + "rotation": [ + -0.005199347157031298, + 0.00015941221499815583, + -0.03064456395804882, + 0.9995168447494507 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + -0.0000010132789611816406, + 22.770898818969727, + -0.0000026673078536987305 + ] + }, + { + "children": [ + 37, + 41, + 45, + 49, + 53 + ], + "name": "Armature_mixamorig:RightHand", + "rotation": [ + -0.027066726237535477, + 0.03516821190714836, + 0.024613087996840477, + 0.9987115859985352 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 5.960464477539062e-7, + 19.027141571044922, + -0.000011309981346130371 + ] + }, + { + "children": [ + 38 + ], + "name": "Armature_mixamorig:RightHandThumb1", + "rotation": [ + 0.24496246874332428, + -0.07342495024204254, + -0.27757158875465393, + 0.9260433316230774 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + 1.4313437938690186, + 1.9488826990127563, + 1.373734474182129 + ] + }, + { + "children": [ + 39 + ], + "name": "Armature_mixamorig:RightHandThumb2", + "rotation": [ + 0.02597731165587902, + 4.695450286362757e-7, + 4.360061325314746e-7, + 0.9996625781059265 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.09870082139968872, + 2.2226028442382812, + 0.000018328428268432617 + ] + }, + { + "children": [ + 40 + ], + "name": "Armature_mixamorig:RightHandThumb3", + "rotation": [ + 0.0020599281415343285, + -4.209587416426075e-7, + -2.747407563674642e-7, + 0.9999979734420776 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.08420944213867188, + 1.993523359298706, + -0.000024646520614624023 + ] + }, + { + "name": "Armature_mixamorig:RightHandThumb4", + "rotation": [ + 6.705523247774181e-8, + -7.450580596923828e-9, + 6.05359673500061e-8, + 1 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + -0.1829054355621338, + 1.5351988077163696, + 0.000009775161743164062 + ] + }, + { + "children": [ + 42 + ], + "name": "Armature_mixamorig:RightHandIndex1", + "rotation": [ + 0.04785900563001633, + -0.003934510983526707, + -0.08183817565441132, + 0.9954881072044373 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 2.2894375324249268, + 5.801694393157959, + 0.050646696239709854 + ] + }, + { + "children": [ + 43 + ], + "name": "Armature_mixamorig:RightHandIndex2", + "rotation": [ + -0.028287818655371666, + 7.496872456158599e-8, + 2.392710314325086e-7, + 0.9995998740196228 + ], + "scale": [ + 1, + 1, + 0.9999999403953552 + ], + "translation": [ + 0.029898226261138916, + 2.2504000663757324, + 0.000021301209926605225 + ] + }, + { + "children": [ + 44 + ], + "name": "Armature_mixamorig:RightHandIndex3", + "rotation": [ + -0.14387890696525574, + 7.74066961639619e-8, + 1.5951893317378563e-7, + 0.9895954132080078 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + 0.01506185531616211, + 2.0928609371185303, + 0.00001971423625946045 + ] + }, + { + "name": "Armature_mixamorig:RightHandIndex4", + "rotation": [ + -2.57976381590197e-7, + -8.847565879932517e-8, + -1.480803035747158e-7, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 0.9999999403953552 + ], + "translation": [ + -0.04495549201965332, + 1.9040567874908447, + -0.000019669532775878906 + ] + }, + { + "children": [ + 46 + ], + "name": "Armature_mixamorig:RightHandMiddle1", + "rotation": [ + 0.06535934656858444, + -0.0012092242250218987, + -0.018458466976881027, + 0.9976903200149536 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 0.6151741147041321, + 5.987786293029785, + -0.2521481215953827 + ] + }, + { + "children": [ + 47 + ], + "name": "Armature_mixamorig:RightHandMiddle2", + "rotation": [ + -0.02911515347659588, + -1.493660128915053e-8, + 1.2578189512169047e-7, + 0.9995761513710022 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 0.9999998807907104 + ], + "translation": [ + 0.025691747665405273, + 2.3235480785369873, + 0.0000058710575103759766 + ] + }, + { + "children": [ + 48 + ], + "name": "Armature_mixamorig:RightHandMiddle3", + "rotation": [ + -0.12079086899757385, + 3.73517679008728e-8, + 3.685922251861484e-7, + 0.9926779866218567 + ], + "scale": [ + 1, + 0.9999998807907104, + 0.9999998211860657 + ], + "translation": [ + 0.011220812797546387, + 2.2008121013641357, + 0.000029072165489196777 + ] + }, + { + "name": "Armature_mixamorig:RightHandMiddle4", + "rotation": [ + 2.531742211431265e-7, + -1.9557775843281888e-8, + 2.561137080192566e-9, + 1 + ], + "scale": [ + 1, + 1, + 0.9999999403953552 + ], + "translation": [ + -0.036910414695739746, + 2.00234055519104, + 0.00000260770320892334 + ] + }, + { + "children": [ + 50 + ], + "name": "Armature_mixamorig:RightHandRing1", + "rotation": [ + 0.08960019052028656, + 0.007558114361017942, + 0.0837147906422615, + 0.9924246072769165 + ], + "scale": [ + 1, + 0.9999999403953552, + 1 + ], + "translation": [ + -0.8287993669509888, + 5.778010845184326, + -0.2080925703048706 + ] + }, + { + "children": [ + 51 + ], + "name": "Armature_mixamorig:RightHandRing2", + "rotation": [ + 0.02305533178150654, + -1.0247272363983484e-8, + -2.6083968762691256e-8, + 0.9997342824935913 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 0.008643150329589844, + 2.2196152210235596, + -0.000009953975677490234 + ] + }, + { + "children": [ + 52 + ], + "name": "Armature_mixamorig:RightHandRing3", + "rotation": [ + -0.12460635602474213, + 6.288876619464645e-8, + 3.815565037257329e-7, + 0.992206335067749 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1 + ], + "translation": [ + 0.016327381134033203, + 2.091179847717285, + 0.000004410743713378906 + ] + }, + { + "name": "Armature_mixamorig:RightHandRing4", + "rotation": [ + -8.42846930027008e-8, + -6.05359673500061e-8, + -6.356277282293377e-8, + 1 + ], + "scale": [ + 0.9999999403953552, + 0.9999998807907104, + 1 + ], + "translation": [ + -0.02497267723083496, + 1.9166507720947266, + -0.000018537044525146484 + ] + }, + { + "children": [ + 54 + ], + "name": "Armature_mixamorig:RightHandPinky1", + "rotation": [ + 0.1575794368982315, + 0.028793327510356903, + 0.17742541432380676, + 0.9710097312927246 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + -2.075824737548828, + 5.181243896484375, + -0.156680166721344 + ] + }, + { + "children": [ + 55 + ], + "name": "Armature_mixamorig:RightHandPinky2", + "rotation": [ + -0.021833697333931923, + -8.849674060229518e-8, + -3.185882917478011e-7, + 0.9997616410255432 + ], + "scale": [ + 1, + 0.9999998211860657, + 0.9999999403953552 + ], + "translation": [ + 0.009781837463378906, + 1.9066412448883057, + 0.00003445148468017578 + ] + }, + { + "children": [ + 56 + ], + "name": "Armature_mixamorig:RightHandPinky3", + "rotation": [ + -0.0985320433974266, + -1.1792045739866808e-7, + -2.5736605735460216e-8, + 0.9951338768005371 + ], + "scale": [ + 1, + 1.0000001192092896, + 1 + ], + "translation": [ + 0.004714488983154297, + 1.55594801902771, + 0.000019788742065429688 + ] + }, + { + "name": "Armature_mixamorig:RightHandPinky4", + "rotation": [ + 1.695007227908718e-7, + -6.053597445543346e-8, + 1.6530977475781583e-8, + 1 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 0.9999999403953552 + ], + "translation": [ + -0.014493942260742188, + 1.4579054117202759, + -0.000033020973205566406 + ] + }, + { + "children": [ + 58 + ], + "name": "Armature_mixamorig:LeftUpLeg", + "rotation": [ + -0.000008872594662534539, + 0.0009148783865384758, + 0.9998617172241211, + 0.016607170924544334 + ], + "scale": [ + 1.0001250505447388, + 1, + 1.000000238418579 + ], + "translation": [ + 6.5092010498046875, + -3.8089065551757812, + -0.3193536400794983 + ] + }, + { + "children": [ + 59 + ], + "name": "Armature_mixamorig:LeftLeg", + "rotation": [ + -0.019678570330142975, + -0.00024797735386528075, + 0.012827177532017231, + 0.9997241497039795 + ], + "scale": [ + 0.9999999403953552, + 1, + 0.9999999403953552 + ], + "translation": [ + 4.90503225591965e-7, + 45.04969024658203, + -3.3028754842234775e-8 + ] + }, + { + "children": [ + 60 + ], + "name": "Armature_mixamorig:LeftFoot", + "rotation": [ + 0.4820258617401123, + 0.06575184315443039, + -0.03629865497350693, + 0.872931957244873 + ], + "scale": [ + 1, + 1.0000001192092896, + 1.0000001192092896 + ], + "translation": [ + -3.387158358236775e-7, + 41.849327087402344, + -3.457535058259964e-8 + ] + }, + { + "children": [ + 61 + ], + "name": "Armature_mixamorig:LeftToeBase", + "rotation": [ + 0.29159197211265564, + -0.06168047711253166, + 0.01884075440466404, + 0.9543660879135132 + ], + "scale": [ + 1, + 1, + 1.0000001192092896 + ], + "translation": [ + 8.810311555862427e-7, + 12.08905029296875, + -0.000003889203071594238 + ] + }, + { + "name": "Armature_mixamorig:LeftToe_End", + "rotation": [ + 9.872019290924072e-8, + 0.000008056988008320332, + -1.909211277961731e-8, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + -3.5762786865234375e-7, + 4.706444263458252, + 5.960464477539063e-8 + ] + }, + { + "children": [ + 63 + ], + "name": "Armature_mixamorig:RightUpLeg", + "rotation": [ + -0.00000294413257506676, + -0.0034815834369510412, + -0.9998561143875122, + 0.01660647802054882 + ], + "scale": [ + 1.000124216079712, + 1, + 1.0000035762786865 + ], + "translation": [ + -6.5092010498046875, + -3.8089065551757812, + -0.4497392773628235 + ] + }, + { + "children": [ + 64 + ], + "name": "Armature_mixamorig:RightLeg", + "rotation": [ + -0.022010719403624535, + 0.00022552665905095637, + -0.012826679274439812, + 0.999675452709198 + ], + "scale": [ + 0.9999998807907104, + 0.9999998807907104, + 1 + ], + "translation": [ + 4.079265636391938e-8, + 45.050357818603516, + -1.5308614820241928e-8 + ] + }, + { + "children": [ + 65 + ], + "name": "Armature_mixamorig:RightFoot", + "rotation": [ + 0.48082953691482544, + -0.06620366871356964, + 0.03643133118748665, + 0.8735518455505371 + ], + "scale": [ + 1, + 1.0000001192092896, + 1.000000238418579 + ], + "translation": [ + -9.810537449084222e-8, + 41.85009765625, + 4.062894731760025e-8 + ] + }, + { + "children": [ + 66 + ], + "name": "Armature_mixamorig:RightToeBase", + "rotation": [ + 0.29314252734184265, + 0.06225594878196716, + -0.01912800408899784, + 0.9538480043411255 + ], + "scale": [ + 0.9999999403953552, + 0.9999999403953552, + 1.0000001192092896 + ], + "translation": [ + -6.51925802230835e-8, + 12.033415794372559, + 0.0000034570693969726562 + ] + }, + { + "name": "Armature_mixamorig:RightToe_End", + "rotation": [ + -3.748573362827301e-8, + -0.000008230912499129772, + -2.9453076422214508e-8, + 1 + ], + "scale": [ + 1, + 1, + 1 + ], + "translation": [ + 1.043081283569336e-7, + 4.712545394897461, + 3.2782554626464844e-7 + ] + } + ], + "samplers": [ + { + "magFilter": 9729, + "minFilter": 9987, + "name": "Saber-Face", + "wrapS": 10497, + "wrapT": 10497 + } + ], + "scene": 0, + "scenes": [ + { + "extras": { + "background_color": [ + 0.05087608844041824, + 0.05087608844041824, + 0.05087608844041824 + ], + "frames_per_second": 30 + }, + "name": "Scene", + "nodes": [ + 0 + ] + } + ], + "textures": [ + { + "name": "Saber-Face", + "sampler": 0, + "source": 0 + } + ], + "extensionsUsed": [ + "gl_avatar" + ], + "extensions": { + "gl_avatar": { + "visibility": [ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ], + "type": "skin", + "linkedSkeletons": [ + { + "inverseBindMatrices": 83, + "joints": [ + 5, + 6, + 7 + ], + "name": "F010_Saber_Face", + "skeleton": "main" + } + ] + } + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000000000000000000000000000000000000..2d910004fc96ebe0fb431a6e80e39a245092a83d --- /dev/null +++ b/package.json @@ -0,0 +1,42 @@ +{ + "name": "gl-avatar-threejs", + "version": "0.0.1", + "description": "threejs viewer supporting gl avatar", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "webpack", + "build-watch": "webpack --watch", + "build-viewer": "webpack --config webpack-viewer.config.js", + "dev-server": "node_modules/.bin/webpack-dev-server" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/shrekshao/gl-avatar-threejs.git" + }, + "author": "shrekshao", + "license": "ISC", + "bugs": { + "url": "https://github.com/shrekshao/gl-avatar-threejs/issues" + }, + "homepage": "https://github.com/shrekshao/gl-avatar-threejs#readme", + "dependencies": { + "css-loader": "^0.28.7", + "dat.gui": "^0.7.2", + "html-webpack-plugin": "^2.30.1", + "style-loader": "^0.19.0", + "three": "^0.87.1", + "three-orbit-controls": "^82.1.0" + }, + "devDependencies": { + "command-line-args": "^5.0.1", + "command-line-usage": "^4.1.0", + "fs": "0.0.1-security", + "fs-extra": "^5.0.0", + "path": "^0.12.7", + "pngjs": "^3.3.2", + "webpack": "^3.8.1", + "webpack-cli": "^3.3.0", + "webpack-dev-server": "^3.1.11" + } +} diff --git a/s.html b/s.html new file mode 100644 index 0000000000000000000000000000000000000000..e26624258b55f5c1c1382c03a0e07b1615fefc62 --- /dev/null +++ b/s.html @@ -0,0 +1,78 @@ + + + + + gl-avatar-three-js + + + + + + Fork me on GitHub +
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/src/GLTFAvatarMerge.js b/src/GLTFAvatarMerge.js new file mode 100644 index 0000000000000000000000000000000000000000..7b4ca340eee710602e2bcfb9b5ab218c40a69cfa --- /dev/null +++ b/src/GLTFAvatarMerge.js @@ -0,0 +1,575 @@ +// mergeGLTF util in browser + + +var textureWithVisibility = null; +var bodyIdLUTTexture = null; + +// // this two keys are actually id for skeleton.textures +// var textureWithVisibilityKey = null; +// var bodyIdLUTTextureKey = null; + +var visiblityMaterial = null; + + +var canvas1 = document.createElement('canvas'); +var context1 = canvas1.getContext('2d'); + +function image2Data(img) { + + canvas1.width = img.width; + canvas1.height = img.height; + context1.drawImage(img, 0, 0); + return context1.getImageData(0, 0, img.width, img.height); +} + +function image2PNGDataURI(img) { + canvas1.width = img.width; + canvas1.height = img.height; + context1.drawImage(img, 0, 0); + return canvas1.toDataURL(); // default is png +} + +function mergeGLTFAvatar(skeletonObject, skinObjectArray) { + // { + // json: gltf json object, + // bins: { key: buffer, key: buffer, ...}, + // imgs: { key: img, key: img, ...} + // } + + console.log(skeletonObject.json); + + // TODO: change bins and imgs to array, use index instead of uri + var merged = { + json: Object.assign({}, skeletonObject.json), + bins: Object.assign({}, skeletonObject.bins), + // imgs: Object.assign({}, skeletonObject.imgs) + imgs: {} + }; + + var skeleton = merged.json; + // find texture with bodyIdLUT + for (var i = 0, len = skeleton.materials.length; i < len; i++) { + var m = skeleton.materials[i]; + if (m.extensions && m.extensions.gl_avatar && m.extensions.gl_avatar.bodyIdLUT !== undefined) { + // m has pbr related texture + // assume there's only one such a thing + + visiblityMaterial = m; + // bodyIdLUTTexture = skeleton.textures[m.extensions.gl_avatar.bodyIdLUT]; + bodyIdLUTTexture = skeleton.images[skeleton.textures[m.extensions.gl_avatar.bodyIdLUT].source].uri; + // bodyIdLUTTextureKey = m.extensions.gl_avatar.bodyIdLUT; + // textureWithVisibility = skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index]; + textureWithVisibility = skeleton.images[skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index].source].uri; + // textureWithVisibilityKey = m.pbrMetallicRoughness.baseColorTexture.index; + + merged.imgs[textureWithVisibility] = image2Data(skeletonObject.imgs[textureWithVisibility]); + merged.imgs[bodyIdLUTTexture] = image2Data(skeletonObject.imgs[bodyIdLUTTexture]); + + break; + } + } + + + + // for (var key in merged.imgs) { + // merged.imgs[key] = image2Data(merged.imgs[key]); + // } + for (var key in skeletonObject.imgs) { + if (! (key in merged.imgs)) { + + merged.imgs[key] = image2PNGDataURI(skeletonObject.imgs[key]); + } + } + + + + // merged.bins = merged.bins.concat(skeletonObject.bins); + // merged.imgs = merged.imgs.concat(skeletonObject.imgs); + + + + if(!skeleton.extensions) { + skeleton.extensions = {}; + } + + if (!skeleton.extensions.gl_avatar) { + skeleton.extensions.gl_avatar = {}; + } + + + if (!skeleton.extensions.gl_avatar.visibility) { + skeleton.extensions.gl_avatar.visibility = []; + } + + for (var i = 0, len = skinObjectArray.length; i < len; i++) { + var skin = skinObjectArray[i]; + merge(skeleton, skin.json); + + // temp: this probably didn't support multiple export + for (var key in skin.imgs) { + // skin.imgs[key] = image2Data(skin.imgs[key]); + skin.imgs[key] = image2PNGDataURI(skin.imgs[key]); + } + + // TODO: solve duplicate key issue + merged.bins = Object.assign( merged.bins, skin.bins ); + merged.imgs = Object.assign( merged.imgs, skin.imgs ); + + bakeVisibility(merged, textureWithVisibility, bodyIdLUTTexture, skeleton.extensions.gl_avatar.visibility); + } + + + // + var img = merged.imgs[textureWithVisibility]; + canvas1.width = img.width; + canvas1.height = img.height; + context1.putImageData(img, 0, 0); + merged.imgs[textureWithVisibility] = canvas1.toDataURL(); + + delete merged.imgs[bodyIdLUTTexture]; + + // send merged gltf and buffers & image to makeglb + return merged; +} + + + +/** + * + * @param {*} skeleton gltf json + * @param {*} skin gltf json + */ +function merge(skeleton, skin) { + var i, len, j, lenj; + + var linkedSkeletons = skin.extensions.gl_avatar.linkedSkeletons || []; + + + // buffers + var bufferBaseId = skeleton.buffers.length; + // for (i = 0, len = skin.buffers.length; i < len; i++) { + // skeleton.buffers.push(skin.buffers[i]); + // } + skeleton.buffers = skeleton.buffers.concat(skin.buffers); + + + // bufferViews + var bufferViewBaseId = skeleton.bufferViews.length; + for (i = 0, len = skin.bufferViews.length; i < len; i++) { + skeleton.bufferViews.push(skin.bufferViews[i]); + skeleton.bufferViews[i + bufferViewBaseId].buffer += bufferBaseId; + } + + // accessors + var accessorBaseId = skeleton.accessors.length; + for (i = 0, len = skin.accessors.length; i < len; i++) { + skeleton.accessors.push(skin.accessors[i]); + skeleton.accessors[i + accessorBaseId].bufferView += bufferViewBaseId; + } + + + // images + // TODO: delete bodyIdLUT if exist, and change texture.source + var imageBaseId = skeleton.images.length; + skeleton.images = skeleton.images.concat(skin.images); + + // samplers + var samplerBaseId = skeleton.samplers.length; + skeleton.samplers = skeleton.samplers.concat(skin.samplers); + + // textures + var textureBaseId = skeleton.textures.length; + skeleton.textures = skeleton.textures.concat(skin.textures); + for (i = 0, len = skin.textures.length; i < len; i++) { + var t = skeleton.textures[i + textureBaseId]; + if (t.sampler !== undefined) { + t.sampler += samplerBaseId; + } + if (t.source !== undefined) { + t.source += imageBaseId; + } + } + + // materials + var materialBaseId = skeleton.materials.length; + + // find texture with bodyIdLUT + for (i = 0, len = skeleton.materials.length; i < len; i++) { + var m = skeleton.materials[i]; + if (m.extensions && m.extensions.gl_avatar && m.extensions.gl_avatar.bodyIdLUT !== undefined) { + // m has pbr related texture + // assume there's only one such a thing + + visiblityMaterial = m; + // bodyIdLUTTexture = skeleton.textures[m.extensions.gl_avatar.bodyIdLUT]; + bodyIdLUTTexture = skeleton.images[skeleton.textures[m.extensions.gl_avatar.bodyIdLUT].source].uri; + // bodyIdLUTTextureKey = m.extensions.gl_avatar.bodyIdLUT; + // textureWithVisibility = skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index]; + textureWithVisibility = skeleton.images[skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index].source].uri; + // textureWithVisibilityKey = m.pbrMetallicRoughness.baseColorTexture.index; + + break; + } + } + + + for (i = 0, len = skin.materials.length; i < len; i++) { + skeleton.materials.push(skin.materials[i]); + var m = skeleton.materials[i + materialBaseId]; + if (m.pbrMetallicRoughness !== undefined) { + if (m.pbrMetallicRoughness.baseColorTexture !== undefined) { + var bt = m.pbrMetallicRoughness.baseColorTexture; + for (var tt in bt) { + bt[tt] += imageBaseId; + } + } + } + } + + + + // meshes + var meshBaseId = skeleton.meshes.length; + for (i = 0, len = skin.meshes.length; i < len; i++) { + skeleton.meshes.push(skin.meshes[i]); + var m = skeleton.meshes[i + meshBaseId]; + if (m.primitives !== undefined) { + + for (j = 0, lenj = m.primitives.length; j < lenj; j++) { + var p = m.primitives[j]; + + if (p.indices !== undefined) { + p.indices += accessorBaseId; + } + + if (p.material !== undefined) { + p.material += materialBaseId; + } + + if (p.attributes !== undefined) { + var a = p.attributes; + for (var att in a) { + a[att] += accessorBaseId; + } + } + + if (p.extensions !== undefined) { + if (p.extensions.gl_avatar.attributes) { + var ea = p.extensions.gl_avatar.attributes; + if (!p.attributes) { + p.attributes = {}; + } + for (var att2 in ea) { + p.attributes[att2] = ea[att2] + accessorBaseId; + } + } + + delete p.extensions; + } + } + + } + } + + // nodes + var skinBaseId = skeleton.skins.length; + + var nodeRigidBind = {}; + var nodeBaseId = skeleton.nodes.length; + // var numLinkedSkin = 0; + for (i = 0, len = skin.nodes.length; i < len; i++) { + skeleton.nodes.push(skin.nodes[i]); + var n = skeleton.nodes[i + nodeBaseId]; + + if (n.skin !== undefined) { + n.skin += skinBaseId; + } + + + if (n.children !== undefined) { + var c = n.children; + for (j = 0, lenj = c.length; j < lenj; j++) { + c[j] += nodeBaseId; + } + } + + if (n.mesh !== undefined) { + n.mesh += meshBaseId; + } + + // skins link + if (n.extensions) { + // create a new skin copy of skin linked + // replace inverseBindMatrices + if (n.extensions.gl_avatar) { + if (n.extensions.gl_avatar.skin !== undefined) { + // linked skin + // assume linkedSkeletons exists + var linkedSkinInfo = linkedSkeletons[n.extensions.gl_avatar.skin]; + var skinKey = linkedSkinInfo.skeleton; + var newSkin = Object.assign({}, skeleton.skins[skeleton.extensions.gl_avatar.skins[skinKey]]); + skeleton.skins.push(newSkin); + // numLinkedSkin++; + n.skin = skeleton.skins.length - 1; + newSkin.inverseBindMatrices = linkedSkinInfo.inverseBindMatrices + accessorBaseId; + } + + var root = n.extensions.gl_avatar.root; + if ( root !== undefined) { + // rigid bind / sub skeleton node + + var nid = i + nodeBaseId; + // nodeRigidBind[root] = nid; + nodeRigidBind[nid] = nid; + var newParentNode = skeleton.nodes[skeleton.extensions.gl_avatar.nodes[root]]; + + if (!newParentNode.children) { + newParentNode.children = []; + } + newParentNode.children.push(nid); + } + } + + delete n.extensions; + } + + } + + + // remove rigidbind nodes' original parent node in skin + // var finishUnparenting = false; + var numUnparenting = (Object.keys(nodeRigidBind)).length; + for (i = nodeBaseId, len = skeleton.nodes.length; i < len; i++) { + var n = skeleton.nodes[i]; + if (n.children) { + // for (j = 0, lenj = n.children.length; j < lenj; j++) { + for (j = 0; j < n.children.length; j++) { + if (n.children[j] in nodeRigidBind) { + // delete nodeRigidBind[n.children[j]]; + n.children.splice(j, 1); + j--; + numUnparenting--; + + if (numUnparenting == 0) { + i = len; // early termination + break; + } + + } + } + } + } + + + + // skins (sub-skeleton) + if (skin.skins) { + // if (!skeleton.skins) { + // skeleton.skins = []; + // } + + for (i = 0, len = skin.skins.length; i < len; i++) { + var s = skin.skins[i]; + + if (s.gl_avatar) { + // constructed linked skin in gltf loader + continue; + } + + skeleton.skins.push(s); + + if (s.joints) { + for (j = 0, lenj = s.joints.length; j < lenj; j++) { + s.joints[j] += nodeBaseId; + } + } + + if (s.inverseBindMatrices !== undefined) { + s.inverseBindMatrices += accessorBaseId; + } + + if (s.skeleton !== undefined) { + if (typeof s.skeleton == 'number') { + s.skeleton += nodeBaseId; + } else { + s.skeleton = skeleton.extensions.gl_avatar.skins[s.skeleton]; + } + } + } + } + + + + + + + + // scenes (assume only one scene) + var sceneNodeBaseId = skeleton.scenes[0].nodes.length; + skeleton.scenes[0].nodes = skeleton.scenes[0].nodes.concat(skin.scenes[0].nodes); + for (i = 0, len = skin.scenes[0].nodes.length; i < len; i++) { + // WARNING: TODO: the scene root node might also be rigid bind node + skeleton.scenes[0].nodes[i + sceneNodeBaseId] += nodeBaseId; + } + + + // animations + if (skin.animations) { + if (!skeleton.animations) { + skeleton.animations = []; + } + + for (i = 0, len = skin.animations.length; i < len; i++) { + var a = skin.animations[i]; + + skeleton.animations.push(a); + + if (a.channels) { + for (j = 0, lenj = a.channels.length; j < lenj; j++) { + var c = a.channels[j]; + c.target.node += nodeBaseId; + } + } + + if (a.samplers) { + for (j = 0, lenj = a.samplers.length; j < lenj; j++) { + var s = a.samplers[j]; + s.input += accessorBaseId; + s.output += accessorBaseId; + } + } + } + } + + + + + // TODO: cameras... + + + // extensions: visibility array + visibilityAndOperation(skeleton, skin.extensions.gl_avatar.visibility); + +} + + + + +function visibilityAndOperation(skeleton, vi) { + if (skeleton.extensions.gl_avatar.visibility.length === 0) { + skeleton.extensions.gl_avatar.visibility = vi.slice(0); + return; + } + + var v = skeleton.extensions.gl_avatar.visibility; + var vl = v.length; + for (var i = 0, len = vi.length; i < len; i++) { + if (vl <= i) { + v[i] = vi[i]; + } else { + v[i] = v[i] && vi[i]; + } + } +} + + + +function bakeVisibility(skeleton, texURI, bodyIdLUTURI, visibility) { + if (texURI == null || bodyIdLUTURI == null) { + console.log('No texture with visibility or body id lut in this model'); + return; + } + + + // console.log('texture with visibility: ', texInfo); + // console.log('body Id LUT texture: ', bodyIdLUTInfo); + + visiblityMaterial.alphaMode = "MASK"; + visiblityMaterial.alphaCutOff = 0.5; + + + // // some canvas used to get pixels array data + // var img; + // var canvas1 = document.createElement('canvas'); + // var context1 = canvas1.getContext('2d'); + // // img = texInfo.source; + // img = skeleton.imgs[texURI]; + + // canvas1.width = img.width; + // canvas1.height = img.height; + // context1.drawImage(img, 0, 0); + // var tex = context1.getImageData(0, 0, img.width, img.height); + + // var canvas2 = document.createElement('canvas'); + // var context2 = canvas2.getContext('2d'); + // // img = bodyIdLUTInfo.source; + // img = skeleton.imgs[bodyIdLUTURI]; + + // canvas2.width = img.width; + // canvas2.height = img.height; + // context2.drawImage(img, 0, 0); + // var lut = context2.getImageData(0, 0, img.width, img.height); + + var width = skeleton.imgs[texURI].width; + var height = skeleton.imgs[texURI].height; + + var tex = skeleton.imgs[texURI].data; + var lut = skeleton.imgs[bodyIdLUTURI].data; + + // temp: assume img and lut are of the same size + for (var y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + var idx = (width * y + x) << 2; // * 4 + + var bodyId = lut[idx]; + + if (visibility[bodyId] === 0) { + tex[idx + 3] = 0; + } + } + } + + + // // write pixel back to image object + // context1.putImageData(tex, 0, 0); + + + + // fs.createReadStream(texPath) + // .pipe(new PNG({filterType: 4})) + // .on('parsed', function() { + + // var tex = this; + + // fs.createReadStream(bodyIdLUTPath) + // .pipe(new PNG({filterType: 0})) + // .on('parsed', function() { + // var lut = this; + + // // temp assume same size + // for (var y = 0; y < this.height; y++) { + // for (var x = 0; x < this.width; x++) { + // var idx = (this.width * y + x) << 2; + + // var bodyId = lut.data[idx]; + + // if (visibilty[bodyId] === 0) { + // tex.data[idx + 3] = 0; + // } + // } + // } + + + + // tex.pack().pipe(fs.createWriteStream(texPath)); + + // }); + + + + // }); +} + + + +export {mergeGLTFAvatar}; \ No newline at end of file diff --git a/src/GLTFAvatarPhysics.js b/src/GLTFAvatarPhysics.js new file mode 100644 index 0000000000000000000000000000000000000000..f1794af71ae5e10ba084a542a2ea6196e7330afa --- /dev/null +++ b/src/GLTFAvatarPhysics.js @@ -0,0 +1,7 @@ +// +var Ammo = require('lib/ammo.js'); + + +function GLTFAvatarPhysics () { + // TODO: +} \ No newline at end of file diff --git a/src/GLTFAvatarSystem.js b/src/GLTFAvatarSystem.js new file mode 100644 index 0000000000000000000000000000000000000000..a8986c234680e38024e708a812b82bc6f74f9fcc --- /dev/null +++ b/src/GLTFAvatarSystem.js @@ -0,0 +1,117 @@ +var THREE = require('three'); + +var glAvatarSystem = { + + curSkeleton: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + + curVisibilityArray: null, + + curAccessories: { + clothes: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + hair: { + name: null, + scene: null + // sceneID: null + // asset: null + }, + face: { + name: null, + scene: null + }, + instrument: { + name: null, + scene: null + } + }, + + // assets + skeletons: {}, + + accessories: { + clothes: {}, + hair: {}, + face: {}, + instrument: {} + }, + + + + repo: { + skeletons: { + // 'mixamo': { + // url: 'models/gltf/saber-body-mixamo-animations/saber-body-animations.gltf', + // // scene info (camera, light) + // cameraPos: new THREE.Vector3(1.5, 2, 1.5), + // center: new THREE.Vector3(0, 0.8, 0), + // objectRotation: new THREE.Euler(0, 180, 0), + // // init skins + // skins: { + // hair: 'maid', + // clothes: 'maid-dress' + // } + // }, + // 'stand-pose': { + // url: 'models/gltf/saber-stand-pose/saber-stand-pose.gltf', + + // cameraPos: new THREE.Vector3(1.5, 2, 1.5), + // center: new THREE.Vector3(0, 0.8, 0), + // objectRotation: new THREE.Euler(0, 180, 0), + + // skins: { + // hair: 'lily', + // clothes: 'maid-dress' + // } + // }, + 'no-face': { + url: 'models/gltf/saber-mixamo-body-no-face/saber-body-animations.gltf', + + cameraPos: new THREE.Vector3(1.5, 2, 1.5), + center: new THREE.Vector3(0, 0.8, 0), + objectRotation: new THREE.Euler(0, 180, 0), + + skins: { + hair: 'maid', + clothes: 'maid-dress', + face: 'saber' + } + } + + }, + + // skins + clothes: { + 'maid-dress': 'models/gltf/saber-dress-mixamo/saber-dress.gltf', + 'suit': 'models/gltf/saber-suit/saber-suit.gltf' + }, + hair: { + 'maid': 'models/gltf/saber-maid-hair-mixamo/saber-maid-hair.gltf', + 'lily': 'models/gltf/saber-lily-hair-sub-skeleton/saber-lily-hair-sub-skeleton.gltf' + }, + + face: { + 'saber': 'models/gltf/saber-face/saber-face.gltf', + 'eriri': 'models/gltf/saber-face/eriri-face-test.gltf' + }, + + + instrument: { + + } + }, + + isLoaded: function (type, key) { + return key in this.accessories[type]; + } +}; + +export { glAvatarSystem }; \ No newline at end of file diff --git a/src/GLTFAvatarViewer.js b/src/GLTFAvatarViewer.js new file mode 100644 index 0000000000000000000000000000000000000000..14bc3e7131f509582d24f9c5d43244bc82e218fe --- /dev/null +++ b/src/GLTFAvatarViewer.js @@ -0,0 +1,548 @@ +var THREE = require('three'); +THREE.OrbitControls = require('three-orbit-controls')(THREE); +THREE.GLTFLoader = require('./GLTFLoader.js')(THREE); + +import {glAvatarSystem} from './GLTFAvatarSystem.js'; +import {mergeGLTFAvatar} from './GLTFAvatarMerge.js'; +import {fileSave} from './lib/makeglb.js'; + +var clock = new THREE.Clock(); + + + + +function Viewer(preserveDrawingBuffer) { + + // for canvas snapshot purpose + this.preserveDrawingBuffer = preserveDrawingBuffer || false; + + // this.container = null; + this.canvas = null; + this.fullWindow = true; + + this.skeletonMixer = null; + this.skinMixers = []; // animation mixer for skin files + + this.gltf_skeleton = null; + + this.renderer = null; + this.scene = null; + this.camera = null; + this.orbitControls = null; + + this.loader = null; + + + this.skeletonAnimations = []; // temp for control block, just animation name || id + this.skeletonClips = {}; // for mixing + this.skeletonActionStates = {}; // true or false + // // exposed for gui + // this.control = { + + // }; + + this.skeletonUpdateCallback = null; // (key) => void + this.skinUpdateCallback = null; // (cat, key) => void +} + +// Viewer.prototype.setCanvas = function(canvas) { +// this.canvas; +// }; + +Viewer.prototype.init = function(canvas) { + + + + if (canvas) { + this.canvas = canvas; + this.fullWindow = false; + this.renderer = new THREE.WebGLRenderer( + { + canvas: this.canvas, + antialias: true, + preserveDrawingBuffer: this.preserveDrawingBuffer + } + ); + } else { + this.renderer = new THREE.WebGLRenderer( { + antialias: true , + preserveDrawingBuffer: this.preserveDrawingBuffer + } ); + this.canvas = this.renderer.domElement; + this.fullWindow = true; + this.canvas.width = window.innerWidth; + this.canvas.height = window.innerHeight; + this.renderer.setSize( window.innerWidth, window.innerHeight ); // test + document.getElementById('container').appendChild(this.canvas); + } + + + // this.camera = new THREE.PerspectiveCamera( 45, container.offsetWidth / container.offsetHeight, 0.001, 1000 ); + + + // this.renderer.setSize( this.canvas.width, this.canvas.height ); // test + this.camera = new THREE.PerspectiveCamera( 45, this.canvas.width / this.canvas.height, 0.01, 100 ); + + this.renderer.setPixelRatio(window.devicePixelRatio); + // this.renderer.setPixelRatio(this.canvas.width / this.canvas.height); + + // this.renderer.setSize( window.innerWidth, window.innerHeight ); + // this.renderer.setSize( container.width, container.height ); + + // scene info: add light, add ground, shadow + + this.loader = new THREE.GLTFLoader(); + this.orbitControls = new THREE.OrbitControls(this.camera, this.renderer.domElement); + + + this.onWindowResize(); + window.addEventListener( 'resize', this.onWindowResize.bind(this), false ); + + + this.initScene(); + + + // this.selectSkeleton('mixamo'); + this.selectSkeleton(Object.keys(glAvatarSystem.repo.skeletons)[0]); + + this.animate(); + +}; + +Viewer.prototype.initScene = function () { + this.scene = new THREE.Scene(); + this.scene.background = new THREE.Color( 0x222222 ); + + this.scene.add(this.camera); + // test add lights + var ambient = new THREE.AmbientLight( 0x222222 ); + this.scene.add( ambient ); + var directionalLight = new THREE.DirectionalLight( 0xdddddd ); + directionalLight.position.set( 1, 1, 1 ).normalize(); + this.scene.add( directionalLight ); + + var spot1 = new THREE.SpotLight( 0xffffff, 1 ); + // spot1.position.set( 10, 20, 10 ); + spot1.position.set( 10, 20, -30 ); + spot1.angle = 0.25; + spot1.distance = 1024; + spot1.penumbra = 0.75; + // if ( sceneInfo.shadows ) { + // spot1.castShadow = true; + // spot1.shadow.bias = 0.0001; + // spot1.shadow.mapSize.width = 2048; + // spot1.shadow.mapSize.height = 2048; + // } + this.scene.add( spot1 ); +}; + +Viewer.prototype.cleanup = function() { + if (this.skeletonMixer) { + this.skeletonMixer.stopAllAction(); + this.skeletonMixer = null; + } + + if (this.skinMixers) { + for (var i = 0, len = this.skinMixers.length; i < len; i++) { + this.skinMixers[i].stopAllAction(); + } + this.skinMixers = []; + } + + if (this.scene) { + for (var i = 0, len = this.scene.children.length; i < len; i++) { + this.scene.remove(this.scene.children[i]); + } + } + + this.initScene(); + +}; + +var onWindowResize = Viewer.prototype.onWindowResize = function() { + + // var i, len = cameras.length; + // for (i = 0; i < len; i++) { // just do it for default + // cameras[i].aspect = container.offsetWidth / container.offsetHeight; + // cameras[i].updateProjectionMatrix(); + // } + // renderer.setSize( window.innerWidth, window.innerHeight ); + if (this.fullWindow) { + this.renderer.setSize( window.innerWidth, window.innerHeight ); + } else { + this.renderer.setSize(this.canvas.width, this.canvas.height); + } + + this.camera.aspect = this.canvas.width / this.canvas.height; + this.camera.updateProjectionMatrix(); +}; + +var animate = Viewer.prototype.animate = function() { + requestAnimationFrame( this.animate.bind(this) ); + // requestAnimationFrame( animate ); + + var delta = clock.getDelta(); + + if (this.skeletonMixer) { + this.skeletonMixer.update(delta); + } + + for (var i = 0, len = this.skinMixers.length; i < len; i++) { + this.skinMixers[i].update(delta); + } + + // if (cameraIndex == 0) + // orbitControls.update(); + this.orbitControls.update(); + + // render(); + this.renderer.render(this.scene, this.camera); +}; + +// TODO: get envmap + +// skeleton animation +Viewer.prototype.playAnimation = function(index) { + if (this.skeletonMixer) { + this.skeletonMixer.stopAllAction(); + this.skeletonMixer.clipAction(this.gltf_skeleton.animations[index]).play(); + } +}; + +// skeleton animation +Viewer.prototype.playAnimationMixing = function(key, isPlaying) { + if (this.skeletonMixer) { + var action = this.skeletonMixer.clipAction(this.skeletonClips[key]); + action.setEffectiveTimeScale(1); + isPlaying ? action.play() : action.stop(); + } +}; + +Viewer.prototype.updateVisibilityArray = function(v, v1) { + for (var i = 0, len = v1.length; i < len; i++) { + v[i] = v1[i] ? v[i] : 0; + } + + // // gl_avatar_linked_skeleton.visibilityLUT.data = gl_avatar_linked_skeleton.visibility; + // for (var i, len = v.length; i < len; i++) { + // gl_avatar_linked_skeleton.visibilityLUT.image.data[i] = v[i] * 255; + // } + this.gltf_skeleton.gl_avatar.visibilityLUT.needsUpdate = true; +}; + +Viewer.prototype.updateVisibilityValue = function(id, value) { + this.gltf_skeleton.gl_avatar.visibility[id] = value ? 255 : 0; + + + this.gltf_skeleton.gl_avatar.visibilityLUT.needsUpdate = true; +}; + +Viewer.prototype.getVisibilityArray = function() { + return this.gltf_skeleton.gl_avatar.visibility; +}; + +Viewer.prototype.selectSkin = function(type, key, uri) { + + if (!uri) { + // skin from repo + uri = glAvatarSystem.repo[type][key]; + } + + // var uri = glAvatarSystem.repo[type][key]; + + // console.log(glAvatarSystem); + if (glAvatarSystem.isLoaded(type, key)) { + this.skinOnload(type, key, glAvatarSystem.accessories[type][key].gltf); + } else { + var self = this; + this.loader.setGlAvatarOfLinkingSkeleton(this.gltf_skeleton.gl_avatar); + this.loader.load( uri, function(data, json, bins, imgs) { + // glAvatarSystem.accessories[type][key] = data; + // console.log(bins); + // console.log(imgs); + + glAvatarSystem.accessories[type][key] = { + gltf: data, + + json: json, + bins: bins, + imgs: imgs + }; + // TODO + self.skinOnload(type, key, data); + }, undefined, function ( error ) { + console.error( error ); + } ); + } + +}; + +Viewer.prototype.skinOnload = function(type, key, data) { + var c = glAvatarSystem.curAccessories[type]; + + var skinMixers = this.skinMixers; + + if (key === c.name) { + console.log('same ' + type); + return; + } + + + // remove current replaced accessory + if (c.scene) { + // delete previous component + c.scene.parent.remove(c.scene); + if (c.scene.attach_child) { + console.log('has attach child (sub skeleton or rigid bind)'); + c.scene.attach_child.parent.remove(c.scene.attach_child); + } + + if (c.scene.skinMixer) { + // c.scene.skinMixer.stopAllAction(); + + for ( var i = 0, len = skinMixers.length; i < len; i ++ ) { + if (skinMixers[i] == c.scene.skinMixer) { + // remove the skin mixer for previous skin file, if exists + skinMixers.splice(i, 1); + break; + } + } + } + + // refresh visibility array + this.gltf_skeleton.gl_avatar.visibility.fill(255); + for (var t in glAvatarSystem.curAccessories) { + if (t !== type && glAvatarSystem.curAccessories[t].scene) { + var a = glAvatarSystem.curAccessories[t]; + this.updateVisibilityArray(this.gltf_skeleton.gl_avatar.visibility, glAvatarSystem.accessories[t][a.name].gltf.gl_avatar.visibility); + } + } + } + + // -------------------------- + + // update current new skin file + if (this.loader.enableGLTFAvatar) { + this.updateVisibilityArray(this.gltf_skeleton.gl_avatar.visibility, data.gl_avatar.visibility); + } + + // gltf = data; + var gltf = data; + var object = gltf.scene; + + c.name = key; + c.scene = object; + + // status.innerHTML = "Load time: " + ( performance.now() - loadStartTime ).toFixed( 2 ) + " ms."; + + // temp + // console.log(gltf_skeleton); + + + object.traverse( function ( node ) { + if ( node.isMesh ) node.castShadow = true; + } ); + + + // rigid bind, if any + if (object.attach_child) { + // assume attach_child has gl_avatar_base_root + object.attach_child.gl_avatar_base_root.add(object.attach_child); + object.attach_child.updateMatrixWorld(); + // object.attach_child.updateMatrix(); + } + + + + // var optionalSceneRoot = gltf_skeleton.gl_avatar.nodes['head-end'].children[0]; // point to lily hair root try + + if (!object.skinMixer) { + var animations = gltf.animations; + if ( animations && animations.length ) { + // var mixer = new THREE.AnimationMixer( object ); + // var mixer = new THREE.AnimationMixer( optionalSceneRoot ); + var mixer = new THREE.AnimationMixer( object.attach_child || object ); + + for ( var i = 0, len = animations.length; i < len; i ++ ) { + var animation = animations[ i ]; + // mixer.clipAction( animation, optionalSceneRoot ).play(); + mixer.clipAction( animation ).play(); + } + + // temp: assuming only one mixer + skinMixers.push(mixer); + object.skinMixer = mixer; + } + } + else { + var m = object.skinMixer; + // for ( var i = 0, len = m._actions.length; i < len; i ++ ) { + // m._actions[i].play(); + // } + skinMixers.push(m); + // // console.log(m); + } + + + this.scene.add(object); + object.updateMatrixWorld(); + // object.updateMatrix(); + // object.children[0].updateMatrix(); + + // this.onWindowResize(); + + if (this.skinUpdateCallback) { + this.skinUpdateCallback(type, key); + } +}; + + + + + + + + +Viewer.prototype.selectSkeleton = function(key, uri) { + var info = null; + if (!uri) { + // uri = glAvatarSystem.repo.skeletons[key].url; + info = glAvatarSystem.repo.skeletons[key]; + uri = info.url; + } + + + + + + // scene, mixer, cleanup + var self = this; + + this.loader.load( uri, function(data, json, bins, imgs) { + // glAvatarSystem.accessories[type][key] = data; + // console.log(bins); + // console.log(imgs); + + glAvatarSystem.skeletons[key] = { + gltf: data, + + json: json, + bins: bins, + imgs: imgs + }; + + + self.cleanup(); + + // camera setting + if (info) { + self.camera.position.copy(info.cameraPos); + self.orbitControls.target.copy(info.center); + data.scene.rotation.copy(info.objectRotation); + + // self.skeletonOnLoad(key, data); + + + } + + self.skeletonOnLoad(key, data); + + if (info) { + for (var key in info.skins) { + var skin = info.skins[key]; + if (skin) { + self.selectSkin(key, info.skins[key]); + } + } + } + + + }, undefined, function ( error ) { + console.error( error ); + } ); +}; + + +Viewer.prototype.skeletonOnLoad = function(key, data) { + var gltf = data; + + this.gltf_skeleton = gltf; + + glAvatarSystem.curSkeleton.name = key; + glAvatarSystem.curSkeleton.scene = gltf.scene; + + // clear accessories (TODO: these logic should go into gltfavatarsystem) + for (var cat in glAvatarSystem.curAccessories) { + glAvatarSystem.curAccessories[cat].name = null; + glAvatarSystem.curAccessories[cat].scene = null; + } + + for (var cat in glAvatarSystem.accessories) { + glAvatarSystem.accessories[cat] = {}; + } + + // animations + var animations = gltf.animations; + if ( animations && animations.length ) { + + + // TODO: gui interface + // removeOptions(animationSelector); + this.skeletonAnimations = []; // for control block + + this.skeletonClips = {}; + this.skeletonActionStates = {}; + this.skeletonVisibilityId2Name = gltf.gl_avatar.visibilityId2Name || []; + // this.skeletonActionStates = new Map(); + + this.skeletonMixer = new THREE.AnimationMixer( gltf.scene ); + for ( var i = 0; i < animations.length; i ++ ) { + var animation = animations[ i ]; + // var o = document.createElement('option'); + // o.text = animation.name || i; + // animationSelector.add(o); + this.skeletonAnimations.push(animation.name || i.toFixed()); + + + // clips mixing + var key = animation.name || i; + this.skeletonActionStates[key] = false; + this.skeletonClips[key] = animation; + + if (i === 0) { + this.skeletonActionStates[key] = true; + this.playAnimationMixing(key, true); + } + } + + // this.playAnimation(0); + } + this.scene.add( gltf.scene ); + + if (this.skeletonUpdateCallback) { + this.skeletonUpdateCallback(key); + } +}; + + +Viewer.prototype.mergeAndExport = function() { + var skinArray = []; + + for (var cat in glAvatarSystem.curAccessories) { + var c = glAvatarSystem.curAccessories[cat]; + if (c.name) { + skinArray.push(glAvatarSystem.accessories[cat][c.name]); + } + } + + var merged = mergeGLTFAvatar( + glAvatarSystem.skeletons[glAvatarSystem.curSkeleton.name], + skinArray + ); + + fileSave(merged.json, merged.bins, merged.imgs); +}; + + +var AvatarSystem = glAvatarSystem; +export { Viewer, AvatarSystem }; \ No newline at end of file diff --git a/src/GLTFLoader.js b/src/GLTFLoader.js new file mode 100644 index 0000000000000000000000000000000000000000..64716ca571c011614fc3936c9e4da146540e3ade --- /dev/null +++ b/src/GLTFLoader.js @@ -0,0 +1,2900 @@ +/** + * @author Rich Tibbett / https://github.com/richtr + * @author mrdoob / http://mrdoob.com/ + * @author Tony Parisi / http://www.tonyparisi.com/ + * @author Takahiro / https://github.com/takahirox + * @author Don McCurdy / https://www.donmccurdy.com + * + * modified by shrekshao for glavatar use + */ +module.exports = function( THREE ) { + + return ( function () { + + function GLTFLoader( manager ) { + + this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; + + } + + // used by clothes file + // set by the skeleton file before loading + var gl_avatar_skeletons = null; + + // gl_avatar extension of the skeleton file + var gl_avatar_linked_skeleton = null; + + // use data texture as workaround for visibility array in webgl 1 + + + GLTFLoader.prototype = { + + enableGLTFAvatar: true, + // enableGLTFAvatar: false, + // enableGLTFAvatarPhysics: true, + + constructor: GLTFLoader, + + crossOrigin: 'Anonymous', + + setGlAvatarOfLinkingSkeleton: function(g) { + if (this.enableGLTFAvatar && g) { + gl_avatar_linked_skeleton = g; + gl_avatar_skeletons = g.skeletons; + } + }, + + // setGlAvatarSkeltonMap : function (g) { + // gl_avatar_skeletons = g; + // }, + + load: function ( url, onLoad, onProgress, onError ) { + + var scope = this; + + var path = this.path && ( typeof this.path === 'string' ) ? this.path : THREE.Loader.prototype.extractUrlBase( url ); + + var loader = new THREE.FileLoader( scope.manager ); + + loader.setResponseType( 'arraybuffer' ); + + loader.load( url, function ( data ) { + + try { + + scope.parse( data, path, onLoad, onError ); + + } catch ( e ) { + + // For SyntaxError or TypeError, return a generic failure message. + onError( e.constructor === Error ? e : new Error( 'THREE.GLTFLoader: Unable to parse model.' ) ); + + } + + }, onProgress, onError ); + + }, + + setCrossOrigin: function ( value ) { + + this.crossOrigin = value; + + }, + + setPath: function ( value ) { + + this.path = value; + + }, + + parse: function ( data, path, onLoad, onError ) { + + var content; + var extensions = {}; + + var magic = convertUint8ArrayToString( new Uint8Array( data, 0, 4 ) ); + + if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) { + + extensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data ); + content = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content; + + } else { + + content = convertUint8ArrayToString( new Uint8Array( data ) ); + + } + + var json = JSON.parse( content ); + + if ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) { + + onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) ); + return; + + } + + if ( json.extensionsUsed ) { + + if( json.extensionsUsed.indexOf( EXTENSIONS.GL_AVATAR ) >= 0 && this.enableGLTFAvatar) { + + extensions[ EXTENSIONS.GL_AVATAR ] = new GLTFAvatarExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_LIGHTS ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_LIGHTS ] = new GLTFLightsExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_COMMON ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] = new GLTFMaterialsCommonExtension( json ); + + } + + if( json.extensionsUsed.indexOf( EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ) >= 0 ) { + + extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] = new GLTFMaterialsPbrSpecularGlossinessExtension(); + + } + + } + + console.time( 'GLTFLoader' ); + + var parser = new GLTFParser( json, extensions, { + + path: path || this.path, + crossOrigin: this.crossOrigin + + } ); + + parser.parse( function ( scene, scenes, cameras, animations ) { + + console.timeEnd( 'GLTFLoader' ); + + var glTF = { + scene: scene, + scenes: scenes, + cameras: cameras, + animations: animations, + + gl_avatar: parser.extensions && parser.extensions['gl_avatar'] + }; + + + + // !note: modified + + onLoad( glTF, parser.json, parser.buffers, parser.images ); + + // parser._withDependencies([ + // 'buffers', + // 'textures', + // 'nodes' + // ]).then(function(dependencies) { + // onLoad( glTF, parser.json, dependencies.buffers, dependencies.textures ); + // }); + + + + }, onError ); + + } + + }; + + /* GLTFREGISTRY */ + + function GLTFRegistry() { + + var objects = {}; + + return { + + get: function ( key ) { + + return objects[ key ]; + + }, + + add: function ( key, object ) { + + objects[ key ] = object; + + }, + + remove: function ( key ) { + + delete objects[ key ]; + + }, + + removeAll: function () { + + objects = {}; + + }, + + update: function ( scene, camera ) { + + for ( var name in objects ) { + + var object = objects[ name ]; + + if ( object.update ) { + + object.update( scene, camera ); + + } + + } + + } + + }; + + } + + /*********************************/ + /********** EXTENSIONS ***********/ + /*********************************/ + + var EXTENSIONS = { + KHR_BINARY_GLTF: 'KHR_binary_glTF', + KHR_LIGHTS: 'KHR_lights', + KHR_MATERIALS_COMMON: 'KHR_materials_common', + KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness', + GL_AVATAR: 'gl_avatar' + }; + + // var isUsingGlAvatar = false; + + var GL_AVATAR_VISIBILITY_LENGTH = 60; + + function updateVisibilityArray(v, v1) { + for (var i = 0, len = v1.length; i < len; i++) { + v[i] = v1[i] ? v[i] : 0; + } + + // // gl_avatar_linked_skeleton.visibilityLUT.data = gl_avatar_linked_skeleton.visibility; + // for (var i, len = v.length; i < len; i++) { + // gl_avatar_linked_skeleton.visibilityLUT.image.data[i] = v[i] * 255; + // } + gl_avatar_linked_skeleton.visibilityLUT.needsUpdate = true; + } + + + /** + * gl_avatar + */ + function GLTFAvatarExtension( json ) { + this.name = EXTENSIONS.GL_AVATAR; + + var extension = ( json.extensions && json.extensions[ EXTENSIONS.GL_AVATAR ] ) || {}; + + var type = this.type = extension.type || "skeleton"; + + if (type === "skeleton") { + + // parser + + this.skeletons = {}; + this.skinId2SkeletonKey = {}; + this.visibility = new Uint8Array(256).fill(255); + this.visibilityId2Name = extension.visibilityId2Name || []; + var skins = extension.skins || {}; + + // store id first, will get replaced with skeleton object in parser + for (var s in skins) { + this.skeletons[s] = skins[s]; + this.skinId2SkeletonKey[skins[s]] = s; + } + + + // reference to node + // may attach sub skeleton + var nodes = extension.nodes || {}; + this.nodes = {}; + this.nodeId2Name = {}; + // store id first, will get replaced with real object in parser + for (var n in nodes) { + this.nodes[n] = nodes[n]; + this.nodeId2Name[ nodes[n] ] = n; + } + + } else { + // must be skin (clothes) + if (!gl_avatar_skeletons) { + console.error('gl avatar linking skeletons not set!'); + } + this.visibility = extension.visibility; + + + // put linkedSkeletons to skins + json.skins = json.skins || []; + + if (extension.linkedSkeletons) { + var ls; + for (var i = 0, len = extension.linkedSkeletons.length; i < len; i++) { + ls = extension.linkedSkeletons[i]; + json.skins.push({ + // 'gl_avatar': json.skins.length, + 'gl_avatar': 1, + 'skeleton': ls.skeleton, + 'inverseBindMatrices': ls.inverseBindMatrices, + 'joints': [] + }); + } + } + + + + } + } + + + + /** + * Lights Extension + * + * Specification: PENDING + */ + function GLTFLightsExtension( json ) { + + this.name = EXTENSIONS.KHR_LIGHTS; + + this.lights = {}; + + var extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS ] ) || {}; + var lights = extension.lights || {}; + + for ( var lightId in lights ) { + + var light = lights[ lightId ]; + var lightNode; + + var color = new THREE.Color().fromArray( light.color ); + + switch ( light.type ) { + + case 'directional': + lightNode = new THREE.DirectionalLight( color ); + lightNode.position.set( 0, 0, 1 ); + break; + + case 'point': + lightNode = new THREE.PointLight( color ); + break; + + case 'spot': + lightNode = new THREE.SpotLight( color ); + lightNode.position.set( 0, 0, 1 ); + break; + + case 'ambient': + lightNode = new THREE.AmbientLight( color ); + break; + + } + + if ( lightNode ) { + + if ( light.constantAttenuation !== undefined ) { + + lightNode.intensity = light.constantAttenuation; + + } + + if ( light.linearAttenuation !== undefined ) { + + lightNode.distance = 1 / light.linearAttenuation; + + } + + if ( light.quadraticAttenuation !== undefined ) { + + lightNode.decay = light.quadraticAttenuation; + + } + + if ( light.fallOffAngle !== undefined ) { + + lightNode.angle = light.fallOffAngle; + + } + + if ( light.fallOffExponent !== undefined ) { + + console.warn( 'THREE.GLTFLoader:: light.fallOffExponent not currently supported.' ); + + } + + lightNode.name = light.name || ( 'light_' + lightId ); + this.lights[ lightId ] = lightNode; + + } + + } + + } + + /** + * Common Materials Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_common + */ + function GLTFMaterialsCommonExtension( json ) { + + this.name = EXTENSIONS.KHR_MATERIALS_COMMON; + + } + + GLTFMaterialsCommonExtension.prototype.getMaterialType = function ( material ) { + + var khrMaterial = material.extensions[ this.name ]; + + switch ( khrMaterial.type ) { + + case 'commonBlinn' : + case 'commonPhong' : + return THREE.MeshPhongMaterial; + + case 'commonLambert' : + return THREE.MeshLambertMaterial; + + case 'commonConstant' : + default : + return THREE.MeshBasicMaterial; + + } + + }; + + GLTFMaterialsCommonExtension.prototype.extendParams = function ( materialParams, material, parser ) { + + var khrMaterial = material.extensions[ this.name ]; + + var pending = []; + + var keys = []; + + // TODO: Currently ignored: 'ambientFactor', 'ambientTexture' + switch ( khrMaterial.type ) { + + case 'commonBlinn' : + case 'commonPhong' : + keys.push( 'diffuseFactor', 'diffuseTexture', 'specularFactor', 'specularTexture', 'shininessFactor' ); + break; + + case 'commonLambert' : + keys.push( 'diffuseFactor', 'diffuseTexture' ); + break; + + case 'commonConstant' : + default : + break; + + } + + var materialValues = {}; + + keys.forEach( function( v ) { + + if ( khrMaterial[ v ] !== undefined ) materialValues[ v ] = khrMaterial[ v ]; + + } ); + + if ( materialValues.diffuseFactor !== undefined ) { + + materialParams.color = new THREE.Color().fromArray( materialValues.diffuseFactor ); + materialParams.opacity = materialValues.diffuseFactor[ 3 ]; + + } + + if ( materialValues.diffuseTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', materialValues.diffuseTexture.index ) ); + + } + + if ( materialValues.specularFactor !== undefined ) { + + materialParams.specular = new THREE.Color().fromArray( materialValues.specularFactor ); + + } + + if ( materialValues.specularTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'specularMap', materialValues.specularTexture.index ) ); + + } + + if ( materialValues.shininessFactor !== undefined ) { + + materialParams.shininess = materialValues.shininessFactor; + + } + + return Promise.all( pending ); + + }; + + /* BINARY EXTENSION */ + + var BINARY_EXTENSION_BUFFER_NAME = 'binary_glTF'; + var BINARY_EXTENSION_HEADER_MAGIC = 'glTF'; + var BINARY_EXTENSION_HEADER_LENGTH = 12; + var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 }; + + function GLTFBinaryExtension( data ) { + + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + + var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH ); + + this.header = { + magic: convertUint8ArrayToString( new Uint8Array( data.slice( 0, 4 ) ) ), + version: headerView.getUint32( 4, true ), + length: headerView.getUint32( 8, true ) + }; + + if ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) { + + throw new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' ); + + } else if ( this.header.version < 2.0 ) { + + throw new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use GLTFLoader instead.' ); + + } + + var chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH ); + var chunkIndex = 0; + + while ( chunkIndex < chunkView.byteLength ) { + + var chunkLength = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + var chunkType = chunkView.getUint32( chunkIndex, true ); + chunkIndex += 4; + + if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) { + + var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength ); + this.content = convertUint8ArrayToString( contentArray ); + + } else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) { + + var byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data.slice( byteOffset, byteOffset + chunkLength ); + + } + + // Clients must ignore chunks with unknown types. + + chunkIndex += chunkLength; + + } + + if ( this.content === null ) { + + throw new Error( 'THREE.GLTFLoader: JSON content not found.' ); + + } + + } + + /** + * Specular-Glossiness Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/Khronos/KHR_materials_pbrSpecularGlossiness + */ + function GLTFMaterialsPbrSpecularGlossinessExtension() { + + return { + + name: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, + + getMaterialType: function () { + + return THREE.ShaderMaterial; + + }, + + extendParams: function ( params, material, parser ) { + + var pbrSpecularGlossiness = material.extensions[ this.name ]; + + var shader = THREE.ShaderLib[ 'standard' ]; + + var uniforms = THREE.UniformsUtils.clone( shader.uniforms ); + + var specularMapParsFragmentChunk = [ + '#ifdef USE_SPECULARMAP', + ' uniform sampler2D specularMap;', + '#endif' + ].join( '\n' ); + + var glossinessMapParsFragmentChunk = [ + '#ifdef USE_GLOSSINESSMAP', + ' uniform sampler2D glossinessMap;', + '#endif' + ].join( '\n' ); + + var specularMapFragmentChunk = [ + 'vec3 specularFactor = specular;', + '#ifdef USE_SPECULARMAP', + ' vec4 texelSpecular = texture2D( specularMap, vUv );', + ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' specularFactor *= texelSpecular.rgb;', + '#endif' + ].join( '\n' ); + + var glossinessMapFragmentChunk = [ + 'float glossinessFactor = glossiness;', + '#ifdef USE_GLOSSINESSMAP', + ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );', + ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' glossinessFactor *= texelGlossiness.a;', + '#endif' + ].join( '\n' ); + + var lightPhysicalFragmentChunk = [ + 'PhysicalMaterial material;', + 'material.diffuseColor = diffuseColor.rgb;', + 'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );', + 'material.specularColor = specularFactor.rgb;', + ].join( '\n' ); + + var fragmentShader = shader.fragmentShader + .replace( '#include ', '' ) + .replace( 'uniform float roughness;', 'uniform vec3 specular;' ) + .replace( 'uniform float metalness;', 'uniform float glossiness;' ) + .replace( '#include ', specularMapParsFragmentChunk ) + .replace( '#include ', glossinessMapParsFragmentChunk ) + .replace( '#include ', specularMapFragmentChunk ) + .replace( '#include ', glossinessMapFragmentChunk ) + .replace( '#include ', lightPhysicalFragmentChunk ); + + delete uniforms.roughness; + delete uniforms.metalness; + delete uniforms.roughnessMap; + delete uniforms.metalnessMap; + + uniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) }; + uniforms.glossiness = { value: 0.5 }; + uniforms.specularMap = { value: null }; + uniforms.glossinessMap = { value: null }; + + params.vertexShader = shader.vertexShader; + params.fragmentShader = fragmentShader; + params.uniforms = uniforms; + params.defines = { 'STANDARD': '' }; + + params.color = new THREE.Color( 1.0, 1.0, 1.0 ); + params.opacity = 1.0; + + var pending = []; + + if ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) { + + var array = pbrSpecularGlossiness.diffuseFactor; + + params.color.fromArray( array ); + params.opacity = array[ 3 ]; + + } + + if ( pbrSpecularGlossiness.diffuseTexture !== undefined ) { + + pending.push( parser.assignTexture( params, 'map', pbrSpecularGlossiness.diffuseTexture.index ) ); + + } + + params.emissive = new THREE.Color( 0.0, 0.0, 0.0 ); + params.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0; + params.specular = new THREE.Color( 1.0, 1.0, 1.0 ); + + if ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) { + + params.specular.fromArray( pbrSpecularGlossiness.specularFactor ); + + } + + if ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) { + + var specGlossIndex = pbrSpecularGlossiness.specularGlossinessTexture.index; + pending.push( parser.assignTexture( params, 'glossinessMap', specGlossIndex ) ); + pending.push( parser.assignTexture( params, 'specularMap', specGlossIndex ) ); + + } + + return Promise.all( pending ); + + }, + + createMaterial: function ( params ) { + + // setup material properties based on MeshStandardMaterial for Specular-Glossiness + + var material = new THREE.ShaderMaterial( { + defines: params.defines, + vertexShader: params.vertexShader, + fragmentShader: params.fragmentShader, + uniforms: params.uniforms, + fog: true, + lights: true, + opacity: params.opacity, + transparent: params.transparent + } ); + + material.isGLTFSpecularGlossinessMaterial = true; + + material.color = params.color; + + material.map = params.map === undefined ? null : params.map; + + material.lightMap = null; + material.lightMapIntensity = 1.0; + + material.aoMap = params.aoMap === undefined ? null : params.aoMap; + material.aoMapIntensity = 1.0; + + material.emissive = params.emissive; + material.emissiveIntensity = 1.0; + material.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap; + + material.bumpMap = params.bumpMap === undefined ? null : params.bumpMap; + material.bumpScale = 1; + + material.normalMap = params.normalMap === undefined ? null : params.normalMap; + material.normalScale = new THREE.Vector2( 1, 1 ); + + material.displacementMap = null; + material.displacementScale = 1; + material.displacementBias = 0; + + material.specularMap = params.specularMap === undefined ? null : params.specularMap; + material.specular = params.specular; + + material.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap; + material.glossiness = params.glossiness; + + material.alphaMap = null; + + material.envMap = params.envMap === undefined ? null : params.envMap; + material.envMapIntensity = 1.0; + + material.refractionRatio = 0.98; + + material.extensions.derivatives = true; + + return material; + + }, + + // Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer. + refreshUniforms: function ( renderer, scene, camera, geometry, material, group ) { + + var uniforms = material.uniforms; + var defines = material.defines; + + uniforms.opacity.value = material.opacity; + + uniforms.diffuse.value.copy( material.color ); + uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); + + uniforms.map.value = material.map; + uniforms.specularMap.value = material.specularMap; + uniforms.alphaMap.value = material.alphaMap; + + uniforms.lightMap.value = material.lightMap; + uniforms.lightMapIntensity.value = material.lightMapIntensity; + + uniforms.aoMap.value = material.aoMap; + uniforms.aoMapIntensity.value = material.aoMapIntensity; + + // uv repeat and offset setting priorities + // 1. color map + // 2. specular map + // 3. normal map + // 4. bump map + // 5. alpha map + // 6. emissive map + + var uvScaleMap; + + if ( material.map ) { + + uvScaleMap = material.map; + + } else if ( material.specularMap ) { + + uvScaleMap = material.specularMap; + + } else if ( material.displacementMap ) { + + uvScaleMap = material.displacementMap; + + } else if ( material.normalMap ) { + + uvScaleMap = material.normalMap; + + } else if ( material.bumpMap ) { + + uvScaleMap = material.bumpMap; + + } else if ( material.glossinessMap ) { + + uvScaleMap = material.glossinessMap; + + } else if ( material.alphaMap ) { + + uvScaleMap = material.alphaMap; + + } else if ( material.emissiveMap ) { + + uvScaleMap = material.emissiveMap; + + } + + if ( uvScaleMap !== undefined ) { + + // backwards compatibility + if ( uvScaleMap.isWebGLRenderTarget ) { + + uvScaleMap = uvScaleMap.texture; + + } + + var offset = uvScaleMap.offset; + var repeat = uvScaleMap.repeat; + + uniforms.offsetRepeat.value.set( offset.x, offset.y, repeat.x, repeat.y ); + + } + + uniforms.envMap.value = material.envMap; + uniforms.envMapIntensity.value = material.envMapIntensity; + uniforms.flipEnvMap.value = ( material.envMap && material.envMap.isCubeTexture ) ? -1 : 1; + + uniforms.refractionRatio.value = material.refractionRatio; + + uniforms.specular.value.copy( material.specular ); + uniforms.glossiness.value = material.glossiness; + + uniforms.glossinessMap.value = material.glossinessMap; + + uniforms.emissiveMap.value = material.emissiveMap; + uniforms.bumpMap.value = material.bumpMap; + uniforms.normalMap.value = material.normalMap; + + uniforms.displacementMap.value = material.displacementMap; + uniforms.displacementScale.value = material.displacementScale; + uniforms.displacementBias.value = material.displacementBias; + + if ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) { + + defines.USE_GLOSSINESSMAP = ''; + // set USE_ROUGHNESSMAP to enable vUv + defines.USE_ROUGHNESSMAP = ''; + + } + + if ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) { + + delete defines.USE_GLOSSINESSMAP; + delete defines.USE_ROUGHNESSMAP; + + } + + } + + }; + + } + + /*********************************/ + /********** INTERNALS ************/ + /*********************************/ + + /* CONSTANTS */ + + var WEBGL_CONSTANTS = { + FLOAT: 5126, + //FLOAT_MAT2: 35674, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 + }; + + var WEBGL_TYPE = { + 5126: Number, + //35674: THREE.Matrix2, + 35675: THREE.Matrix3, + 35676: THREE.Matrix4, + 35664: THREE.Vector2, + 35665: THREE.Vector3, + 35666: THREE.Vector4, + 35678: THREE.Texture + }; + + var WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array + }; + + var WEBGL_FILTERS = { + 9728: THREE.NearestFilter, + 9729: THREE.LinearFilter, + 9984: THREE.NearestMipMapNearestFilter, + 9985: THREE.LinearMipMapNearestFilter, + 9986: THREE.NearestMipMapLinearFilter, + 9987: THREE.LinearMipMapLinearFilter + }; + + var WEBGL_WRAPPINGS = { + 33071: THREE.ClampToEdgeWrapping, + 33648: THREE.MirroredRepeatWrapping, + 10497: THREE.RepeatWrapping + }; + + var WEBGL_TEXTURE_FORMATS = { + 6406: THREE.AlphaFormat, + 6407: THREE.RGBFormat, + 6408: THREE.RGBAFormat, + 6409: THREE.LuminanceFormat, + 6410: THREE.LuminanceAlphaFormat + }; + + var WEBGL_TEXTURE_DATATYPES = { + 5121: THREE.UnsignedByteType, + 32819: THREE.UnsignedShort4444Type, + 32820: THREE.UnsignedShort5551Type, + 33635: THREE.UnsignedShort565Type + }; + + var WEBGL_SIDES = { + 1028: THREE.BackSide, // Culling front + 1029: THREE.FrontSide // Culling back + //1032: THREE.NoSide // Culling front and back, what to do? + }; + + var WEBGL_DEPTH_FUNCS = { + 512: THREE.NeverDepth, + 513: THREE.LessDepth, + 514: THREE.EqualDepth, + 515: THREE.LessEqualDepth, + 516: THREE.GreaterEqualDepth, + 517: THREE.NotEqualDepth, + 518: THREE.GreaterEqualDepth, + 519: THREE.AlwaysDepth + }; + + var WEBGL_BLEND_EQUATIONS = { + 32774: THREE.AddEquation, + 32778: THREE.SubtractEquation, + 32779: THREE.ReverseSubtractEquation + }; + + var WEBGL_BLEND_FUNCS = { + 0: THREE.ZeroFactor, + 1: THREE.OneFactor, + 768: THREE.SrcColorFactor, + 769: THREE.OneMinusSrcColorFactor, + 770: THREE.SrcAlphaFactor, + 771: THREE.OneMinusSrcAlphaFactor, + 772: THREE.DstAlphaFactor, + 773: THREE.OneMinusDstAlphaFactor, + 774: THREE.DstColorFactor, + 775: THREE.OneMinusDstColorFactor, + 776: THREE.SrcAlphaSaturateFactor + // The followings are not supported by Three.js yet + //32769: CONSTANT_COLOR, + //32770: ONE_MINUS_CONSTANT_COLOR, + //32771: CONSTANT_ALPHA, + //32772: ONE_MINUS_CONSTANT_COLOR + }; + + var WEBGL_TYPE_SIZES = { + 'SCALAR': 1, + 'VEC2': 2, + 'VEC3': 3, + 'VEC4': 4, + 'MAT2': 4, + 'MAT3': 9, + 'MAT4': 16 + }; + + var PATH_PROPERTIES = { + scale: 'scale', + translation: 'position', + rotation: 'quaternion', + weights: 'morphTargetInfluences' + }; + + var INTERPOLATION = { + CATMULLROMSPLINE: THREE.InterpolateSmooth, + CUBICSPLINE: THREE.InterpolateSmooth, + LINEAR: THREE.InterpolateLinear, + STEP: THREE.InterpolateDiscrete + }; + + var STATES_ENABLES = { + 2884: 'CULL_FACE', + 2929: 'DEPTH_TEST', + 3042: 'BLEND', + 3089: 'SCISSOR_TEST', + 32823: 'POLYGON_OFFSET_FILL', + 32926: 'SAMPLE_ALPHA_TO_COVERAGE' + }; + + var ALPHA_MODES = { + OPAQUE: 'OPAQUE', + MASK: 'MASK', + BLEND: 'BLEND' + }; + + /* UTILITY FUNCTIONS */ + + function _each( object, callback, thisObj ) { + + if ( !object ) { + return Promise.resolve(); + } + + var results; + var fns = []; + + if ( Object.prototype.toString.call( object ) === '[object Array]' ) { + + results = []; + + var length = object.length; + + for ( var idx = 0; idx < length; idx ++ ) { + + var value = callback.call( thisObj || this, object[ idx ], idx ); + + if ( value ) { + + fns.push( value ); + + if ( value instanceof Promise ) { + + value.then( function( key, value ) { + + results[ key ] = value; + + }.bind( this, idx )); + + } else { + + results[ idx ] = value; + + } + + } + + } + + } else { + + results = {}; + + for ( var key in object ) { + + if ( object.hasOwnProperty( key ) ) { + + var value = callback.call( thisObj || this, object[ key ], key ); + + if ( value ) { + + fns.push( value ); + + if ( value instanceof Promise ) { + + value.then( function( key, value ) { + + results[ key ] = value; + + }.bind( this, key )); + + } else { + + results[ key ] = value; + + } + + } + + } + + } + + } + + return Promise.all( fns ).then( function() { + + return results; + + }); + + } + + function resolveURL( url, path ) { + + // Invalid URL + if ( typeof url !== 'string' || url === '' ) + return ''; + + // Absolute URL http://,https://,// + if ( /^(https?:)?\/\//i.test( url ) ) { + + return url; + + } + + // Data URI + if ( /^data:.*,.*$/i.test( url ) ) { + + return url; + + } + + // Blob URL + if ( /^blob:.*$/i.test( url ) ) { + + return url; + + } + + // Relative URL + return ( path || '' ) + url; + + } + + function convertUint8ArrayToString( array ) { + + if ( window.TextDecoder !== undefined ) { + + return new TextDecoder().decode( array ); + + } + + // Avoid the String.fromCharCode.apply(null, array) shortcut, which + // throws a "maximum call stack size exceeded" error for large arrays. + + var s = ''; + + for ( var i = 0, il = array.length; i < il; i ++ ) { + + s += String.fromCharCode( array[ i ] ); + + } + + return s; + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material + */ + function createDefaultMaterial() { + + return new THREE.MeshStandardMaterial( { + color: 0xFFFFFF, + emissive: 0x000000, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: THREE.FrontSide + } ); + + } + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets + * @param {THREE.Mesh} mesh + * @param {GLTF.Mesh} meshDef + * @param {GLTF.Primitive} primitiveDef + * @param {Object} dependencies + */ + function addMorphTargets ( mesh, meshDef, primitiveDef, dependencies ) { + + var geometry = mesh.geometry; + var material = mesh.material; + + var targets = primitiveDef.targets; + var morphAttributes = geometry.morphAttributes; + + morphAttributes.position = []; + morphAttributes.normal = []; + + material.morphTargets = true; + + for ( var i = 0, il = targets.length; i < il; i ++ ) { + + var target = targets[ i ]; + var attributeName = 'morphTarget' + i; + + var positionAttribute, normalAttribute; + + if ( target.POSITION !== undefined ) { + + // Three.js morph formula is + // position + // + weight0 * ( morphTarget0 - position ) + // + weight1 * ( morphTarget1 - position ) + // ... + // while the glTF one is + // position + // + weight0 * morphTarget0 + // + weight1 * morphTarget1 + // ... + // then adding position to morphTarget. + // So morphTarget value will depend on mesh's position, then cloning attribute + // for the case if attribute is shared among two or more meshes. + + positionAttribute = dependencies.accessors[ target.POSITION ].clone(); + var position = geometry.attributes.position; + + for ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) { + + positionAttribute.setXYZ( + j, + positionAttribute.getX( j ) + position.getX( j ), + positionAttribute.getY( j ) + position.getY( j ), + positionAttribute.getZ( j ) + position.getZ( j ) + ); + + } + + } else { + + // Copying the original position not to affect the final position. + // See the formula above. + positionAttribute = geometry.attributes.position.clone(); + + } + + if ( target.NORMAL !== undefined ) { + + material.morphNormals = true; + + // see target.POSITION's comment + + normalAttribute = dependencies.accessors[ target.NORMAL ].clone(); + var normal = geometry.attributes.normal; + + for ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) { + + normalAttribute.setXYZ( + j, + normalAttribute.getX( j ) + normal.getX( j ), + normalAttribute.getY( j ) + normal.getY( j ), + normalAttribute.getZ( j ) + normal.getZ( j ) + ); + + } + + } else { + + normalAttribute = geometry.attributes.normal.clone(); + + } + + if ( target.TANGENT !== undefined ) { + + // TODO: implement + + } + + positionAttribute.name = attributeName; + normalAttribute.name = attributeName; + + morphAttributes.position.push( positionAttribute ); + morphAttributes.normal.push( normalAttribute ); + + } + + mesh.updateMorphTargets(); + + if ( meshDef.weights !== undefined ) { + + for ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) { + + mesh.morphTargetInfluences[ i ] = meshDef.weights[ i ]; + + } + + } + + } + + /* GLTF PARSER */ + + function GLTFParser( json, extensions, options ) { + + this.json = json || {}; + this.extensions = extensions || {}; + this.options = options || {}; + + // loader object cache + this.cache = new GLTFRegistry(); + + this.enableGLTFAvatar = extensions[EXTENSIONS.GL_AVATAR] ? true : false; + + } + + GLTFParser.prototype._withDependencies = function ( dependencies ) { + + var _dependencies = {}; + + for ( var i = 0; i < dependencies.length; i ++ ) { + + var dependency = dependencies[ i ]; + var fnName = 'load' + dependency.charAt( 0 ).toUpperCase() + dependency.slice( 1 ); + + var cached = this.cache.get( dependency ); + + if ( cached !== undefined ) { + + _dependencies[ dependency ] = cached; + + } else if ( this[ fnName ] ) { + + var fn = this[ fnName ](); + this.cache.add( dependency, fn ); + + _dependencies[ dependency ] = fn; + + } + + } + + return _each( _dependencies, function ( dependency ) { + + return dependency; + + } ); + + }; + + GLTFParser.prototype.parse = function ( onLoad, onError ) { + + var json = this.json; + + // Clear the loader cache + this.cache.removeAll(); + + // !! modified + this.buffers = {}; + this.images = {}; //external sources + + // Fire the callback on complete + this._withDependencies( [ + + 'scenes', + 'cameras', + 'animations' + + ] ).then( function ( dependencies ) { + + var scenes = []; + + for ( var name in dependencies.scenes ) { + + scenes.push( dependencies.scenes[ name ] ); + + } + + var scene = json.scene !== undefined ? dependencies.scenes[ json.scene ] : scenes[ 0 ]; + + var cameras = []; + + for ( var name in dependencies.cameras ) { + + var camera = dependencies.cameras[ name ]; + cameras.push( camera ); + + } + + var animations = []; + + for ( var name in dependencies.animations ) { + + animations.push( dependencies.animations[ name ] ); + + } + + onLoad( scene, scenes, cameras, animations ); + + } ).catch( onError ); + + }; + + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + GLTFParser.prototype.getDependency = function ( type, index ) { + + var cacheKey = type + ':' + index; + var dependency = this.cache.get( cacheKey ); + + if ( !dependency ) { + + var fnName = 'load' + type.charAt( 0 ).toUpperCase() + type.slice( 1 ); + dependency = this[ fnName ]( index ); + this.cache.add( cacheKey, dependency ); + + } + + return dependency; + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBuffer = function ( bufferIndex ) { + + var bufferDef = this.json.buffers[ bufferIndex ]; + + if ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) { + + throw new Error( 'THREE.GLTFLoader: %s buffer type is not supported.', bufferDef.type ); + + } + + // If present, GLB container is required to be the first buffer. + if ( bufferDef.uri === undefined && bufferIndex === 0 ) { + + return Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body ); + + } + + var options = this.options; + + return new Promise( function ( resolve ) { + + var loader = new THREE.FileLoader(); + loader.setResponseType( 'arraybuffer' ); + loader.load( resolveURL( bufferDef.uri, options.path ), resolve); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + GLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) { + + var bufferViewDef = this.json.bufferViews[ bufferViewIndex ]; + + // temp: assume there is + var parser = this; + var bufferURI = this.json.buffers[bufferViewDef.buffer].uri || null; + + return this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) { + + if (bufferURI && !parser.buffers[bufferURI]) { + parser.buffers[bufferURI] = buffer; + } + + var byteLength = bufferViewDef.byteLength || 0; + var byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice( byteOffset, byteOffset + byteLength ); + + } ); + + }; + + GLTFParser.prototype.loadAccessors = function () { + + var parser = this; + var json = this.json; + + return _each( json.accessors, function ( accessor ) { + + return parser.getDependency( 'bufferView', accessor.bufferView ).then( function ( bufferView ) { + + var itemSize = WEBGL_TYPE_SIZES[ accessor.type ]; + var TypedArray = WEBGL_COMPONENT_TYPES[ accessor.componentType ]; + + // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12. + var elementBytes = TypedArray.BYTES_PER_ELEMENT; + var itemBytes = elementBytes * itemSize; + var byteStride = json.bufferViews[ accessor.bufferView ].byteStride; + var array; + + // The buffer is not interleaved if the stride is the item size in bytes. + if ( byteStride && byteStride !== itemBytes ) { + + // Use the full buffer if it's interleaved. + array = new TypedArray( bufferView ); + + // Integer parameters to IB/IBA are in array elements, not bytes. + var ib = new THREE.InterleavedBuffer( array, byteStride / elementBytes ); + + return new THREE.InterleavedBufferAttribute( ib, itemSize, accessor.byteOffset / elementBytes ); + + } else { + + array = new TypedArray( bufferView, accessor.byteOffset, accessor.count * itemSize ); + + return new THREE.BufferAttribute( array, itemSize ); + + } + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + GLTFParser.prototype.loadTexture = function ( textureIndex ) { + + var parser = this; + var json = this.json; + var options = this.options; + + var URL = window.URL || window.webkitURL; + + var textureDef = json.textures[ textureIndex ]; + var source = json.images[ textureDef.source ]; + var sourceURI = source.uri; + var isObjectURL = false; + + if ( source.bufferView !== undefined ) { + + // Load binary image data from bufferView, if provided. + + sourceURI = parser.getDependency( 'bufferView', source.bufferView ) + .then( function ( bufferView ) { + + isObjectURL = true; + var blob = new Blob( [ bufferView ], { type: source.mimeType } ); + sourceURI = URL.createObjectURL( blob ); + return sourceURI; + + } ); + + } + + return Promise.resolve( sourceURI ).then( function ( sourceURI ) { + + // Load Texture resource. + + var textureLoader = THREE.Loader.Handlers.get( sourceURI ) || new THREE.TextureLoader(); + textureLoader.setCrossOrigin( options.crossOrigin ); + + return new Promise( function ( resolve, reject ) { + + textureLoader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject ); + + } ); + + } ).then( function ( texture ) { + + // Clean up resources and configure Texture. + + if ( isObjectURL !== undefined ) { + + URL.revokeObjectURL( sourceURI ); + + } + + texture.flipY = false; + + if ( textureDef.name !== undefined ) texture.name = textureDef.name; + + texture.format = textureDef.format !== undefined ? WEBGL_TEXTURE_FORMATS[ textureDef.format ] : THREE.RGBAFormat; + + if ( textureDef.internalFormat !== undefined && texture.format !== WEBGL_TEXTURE_FORMATS[ textureDef.internalFormat ] ) { + + console.warn( 'THREE.GLTFLoader: Three.js does not support texture internalFormat which is different from texture format. ' + + 'internalFormat will be forced to be the same value as format.' ); + + } + + texture.type = textureDef.type !== undefined ? WEBGL_TEXTURE_DATATYPES[ textureDef.type ] : THREE.UnsignedByteType; + + var samplers = json.samplers || {}; + var sampler = samplers[ textureDef.sampler ] || {}; + + texture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || THREE.LinearFilter; + texture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || THREE.LinearMipMapLinearFilter; + texture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || THREE.RepeatWrapping; + texture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || THREE.RepeatWrapping; + + return texture; + + } ); + + }; + + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} textureName + * @param {number} textureIndex + * @return {Promise} + */ + GLTFParser.prototype.assignTexture = function ( materialParams, textureName, textureIndex ) { + + var parser = this; + var imageURI = this.json.images[ this.json.textures[textureIndex].source ].uri || null; + + return this.getDependency( 'texture', textureIndex ).then( function ( texture ) { + + + // TODO: !! this has to be raw arraybuffer from xhr + if (imageURI && !parser.images[imageURI]) { + parser.images[imageURI] = texture.image; + } + + materialParams[ textureName ] = texture; + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @return {Promise>} + */ + GLTFParser.prototype.loadMaterials = function () { + + var parser = this; + var json = this.json; + var extensions = this.extensions; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[ EXTENSIONS.GL_AVATAR ] : null; + + return _each( json.materials, function ( material ) { + + var materialType; + var materialParams = {}; + var materialExtensions = material.extensions || {}; + + var pending = []; + + if ( gl_avatar && materialExtensions[ EXTENSIONS.GL_AVATAR ] ) { + + // bodyIdLUT + if (materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT !== undefined) { + pending.push( parser.assignTexture( materialParams, 'bodyIdLUT', materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT ) ); + var visibilityLUTArray = gl_avatar.visibility; + // // TODO: change to 16x16 to save mem + var texture = gl_avatar.visibilityLUT = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, 256, 1, THREE.AlphaFormat, THREE.UnsignedByteType); + // var texture = gl_avatar.visibilityLUT = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, GL_AVATAR_VISIBILITY_LENGTH, 1, THREE.AlphaFormat, THREE.UnsignedByteType); + // var texture = materialParams['visibilityLUT'] = new THREE.DataTexture(visibilityLUTArray, 16, 16, THREE.AlphaFormat, THREE.UnsignedByteType); + texture.magFilter = THREE.NearestFilter; + texture.minFilter = THREE.NearestFilter; + texture.wrapS = THREE.ClampToEdgeWrapping; + texture.wrapT = THREE.ClampToEdgeWrapping; + texture.needsUpdate = true; + } + + } + + // if ( materialExtensions[ EXTENSIONS.GL_AVATAR ] && materialExtensions[ EXTENSIONS.GL_AVATAR ].toon !== undefined) { + // // toon shading material test + // var toon = materialExtensions[ EXTENSIONS.GL_AVATAR ].toon; + // console.log(toon); + // // materialType = THREE.MeshPhongMaterial; + // materialType = THREE.MeshToonMaterial; + + // materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 ); + // materialParams.opacity = 1.0; + + // if ( Array.isArray( toon.color ) ) { + + // var array = toon.color; + + // materialParams.color.fromArray( array ); + // materialParams.opacity = array[ 3 ]; + + // } + + // if ( toon.map !== undefined ) { + + // pending.push( parser.assignTexture( materialParams, 'map', toon.map.index ) ); + + // } + + // } + // else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] ) { + if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_COMMON ] ) { + + var khcExtension = extensions[ EXTENSIONS.KHR_MATERIALS_COMMON ]; + materialType = khcExtension.getMaterialType( material ); + pending.push( khcExtension.extendParams( materialParams, material, parser ) ); + + } else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) { + + var sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ]; + materialType = sgExtension.getMaterialType( material ); + pending.push( sgExtension.extendParams( materialParams, material, parser ) ); + + } else if ( material.pbrMetallicRoughness !== undefined ) { + + // Specification: + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material + + materialType = THREE.MeshStandardMaterial; + + var metallicRoughness = material.pbrMetallicRoughness; + + materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 ); + materialParams.opacity = 1.0; + + if ( Array.isArray( metallicRoughness.baseColorFactor ) ) { + + var array = metallicRoughness.baseColorFactor; + + materialParams.color.fromArray( array ); + materialParams.opacity = array[ 3 ]; + + } + + if ( metallicRoughness.baseColorTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture.index ) ); + + } + + materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0; + materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0; + + if ( metallicRoughness.metallicRoughnessTexture !== undefined ) { + + var textureIndex = metallicRoughness.metallicRoughnessTexture.index; + pending.push( parser.assignTexture( materialParams, 'metalnessMap', textureIndex ) ); + pending.push( parser.assignTexture( materialParams, 'roughnessMap', textureIndex ) ); + + } + + } else { + + materialType = THREE.MeshPhongMaterial; + + } + + if ( material.doubleSided === true ) { + + materialParams.side = THREE.DoubleSide; + + } + + var alphaMode = material.alphaMode || ALPHA_MODES.OPAQUE; + + if ( alphaMode !== ALPHA_MODES.OPAQUE ) { + + materialParams.transparent = true; + + } else { + + materialParams.transparent = false; + + } + + if ( material.normalTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'normalMap', material.normalTexture.index ) ); + + } + + if ( material.occlusionTexture !== undefined ) { + + pending.push( parser.assignTexture( materialParams, 'aoMap', material.occlusionTexture.index ) ); + + } + + if ( material.emissiveFactor !== undefined ) { + + if ( materialType === THREE.MeshBasicMaterial ) { + + materialParams.color = new THREE.Color().fromArray( material.emissiveFactor ); + + } else { + + materialParams.emissive = new THREE.Color().fromArray( material.emissiveFactor ); + + } + + } + + if ( material.emissiveTexture !== undefined ) { + + if ( materialType === THREE.MeshBasicMaterial ) { + + pending.push( parser.assignTexture( materialParams, 'map', material.emissiveTexture.index ) ); + + } else { + + pending.push( parser.assignTexture( materialParams, 'emissiveMap', material.emissiveTexture.index ) ); + + } + + } + + + + return Promise.all( pending ).then( function () { + + var _material; + + if ( materialType === THREE.ShaderMaterial ) { + + _material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams ); + + } else { + + _material = new materialType( materialParams ); + + } + + + if ( gl_avatar && materialExtensions[ EXTENSIONS.GL_AVATAR ] ) { + var bodyIdLUT = materialExtensions[ EXTENSIONS.GL_AVATAR ].bodyIdLUT; + if (bodyIdLUT !== undefined) { + _material.onBeforeCompile = function (shader) { + shader.uniforms.bodyIdLUT = { + type: 't', + value: materialParams.bodyIdLUT + }; + + shader.uniforms.visibilityLUT = { + type: 't', + value: materialParams.visibilityLUT + }; + + // TODO: uniform buffer of visibility array + + // console.log(shader.fragmentShader); + shader.fragmentShader = shader.fragmentShader.replace( + 'void main() {', + [ + '#define GLAVATAR_HAS_BODY_ID_LUT', + + '#ifdef GLAVATAR_HAS_BODY_ID_LUT', + '#define GLAVATAR_BODY_VISIBILITY_LENGTH 60', + // 'uniform usampler2D bodyIdLUT;', + 'uniform sampler2D bodyIdLUT;', + // 'uniform bool visibility[GLAVATAR_BODY_VISIBILITY_LENGTH]; //wait for webgl2 to use uniform buffer', + 'uniform sampler2D visibilityLUT;', + '#endif', + + 'void main()', + '{', + '#ifdef GLAVATAR_HAS_BODY_ID_LUT', + // ' uint bodyId = texture(bodyIdLUT, v_uv).r;', + // ' int bodyId = int(texture2D(bodyIdLUT, vUv).r * 255.0);', + // ' int bodyId = int(texture2D(bodyIdLUT, vUv).r * 255.0);', + ' vec2 bodyId = vec2(texture2D(bodyIdLUT, vUv).r, 0.5);', + // ' gl_FragColor = vec4(bodyId.r, bodyId.r, bodyId.r, 1.0);', + // ' float t = texture2D(visibilityLUT, vec2(vUv.x, 0.5)).a;', + // ' float t = texture2D(visibilityLUT, vec2(0.0, 0.0)).a;', + + // ' float t = texture2D(visibilityLUT, bodyId).a;', + // ' gl_FragColor = vec4(t,t,t, 1.0);', + // ' return;', + + // ' if (bodyId < GLAVATAR_BODY_VISIBILITY_LENGTH)', + // ' {', + // ' if (!visibility[bodyId])', + // ' if (1)', + // ' if (0u == visibility[bodyId])', + ' if (texture2D(visibilityLUT, bodyId).a < 0.5)', + ' {', + ' discard;', + ' }', + // ' }', + '#endif' + ].join('\n') + ); + + + }; + } + + } + + if ( material.name !== undefined ) _material.name = material.name; + + // Normal map textures use OpenGL conventions: + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#materialnormaltexture + _material.normalScale.x = -1; + + _material.userData = material.extras; + + return _material; + + } ); + + } ); + + }; + + GLTFParser.prototype.loadGeometries = function ( primitives ) { + + return this._withDependencies( [ + + 'accessors', + + ] ).then( function ( dependencies ) { + + return _each( primitives, function ( primitive ) { + + var geometry = new THREE.BufferGeometry(); + + var attributes = primitive.attributes; + + for ( var attributeId in attributes ) { + + var attributeEntry = attributes[ attributeId ]; + + if ( attributeEntry === undefined ) return; + + var bufferAttribute = dependencies.accessors[ attributeEntry ]; + + switch ( attributeId ) { + + case 'POSITION': + + geometry.addAttribute( 'position', bufferAttribute ); + break; + + case 'NORMAL': + + geometry.addAttribute( 'normal', bufferAttribute ); + break; + + case 'TEXCOORD_0': + case 'TEXCOORD0': + case 'TEXCOORD': + + geometry.addAttribute( 'uv', bufferAttribute ); + break; + + case 'TEXCOORD_1': + + geometry.addAttribute( 'uv2', bufferAttribute ); + break; + + case 'COLOR_0': + case 'COLOR0': + case 'COLOR': + + geometry.addAttribute( 'color', bufferAttribute ); + break; + + case 'WEIGHTS_0': + case 'WEIGHT': // WEIGHT semantic deprecated. + + geometry.addAttribute( 'skinWeight', bufferAttribute ); + break; + + case 'JOINTS_0': + case 'JOINT': // JOINT semantic deprecated. + + geometry.addAttribute( 'skinIndex', bufferAttribute ); + break; + + } + + } + + if ( primitive.indices !== undefined ) { + + geometry.setIndex( dependencies.accessors[ primitive.indices ] ); + + } + + return geometry; + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + */ + GLTFParser.prototype.loadMeshes = function () { + + var scope = this; + var json = this.json; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + return this._withDependencies( [ + + 'accessors', + 'materials' + + ] ).then( function ( dependencies ) { + + return _each( json.meshes, function ( meshDef ) { + + var group = new THREE.Group(); + + if ( meshDef.name !== undefined ) group.name = meshDef.name; + if ( meshDef.extras ) group.userData = meshDef.extras; + + var primitives = meshDef.primitives || []; + + if (gl_avatar) { + // gl_avatar for clothes + // move attributes from extension field to actual primitive attribute field + for (var i = 0, len = primitives.length; i < len; i++) { + if (primitives[i].extensions && primitives[i].extensions.gl_avatar) { + var att = primitives[i].extensions.gl_avatar.attributes; + for (var a in att) { + primitives[i].attributes[a] = att[a]; + } + } + } + } + + + return scope.loadGeometries( primitives ).then( function ( geometries ) { + + for ( var name in primitives ) { + + var primitive = primitives[ name ]; + var geometry = geometries[ name ]; + + var material = primitive.material === undefined + ? createDefaultMaterial() + : dependencies.materials[ primitive.material ]; + + if ( material.aoMap + && geometry.attributes.uv2 === undefined + && geometry.attributes.uv !== undefined ) { + + console.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' ); + geometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) ); + + } + + if ( geometry.attributes.color !== undefined ) { + + material.vertexColors = THREE.VertexColors; + material.needsUpdate = true; + + } + + if ( geometry.attributes.normal === undefined ) { + + if ( material.flatShading !== undefined ) { + + material.flatShading = true; + + } else { + + // TODO: Remove this backwards-compatibility fix after r87 release. + material.shading = THREE.FlatShading; + + } + + } + + var mesh; + + if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === undefined ) { + + mesh = new THREE.Mesh( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) { + + mesh = new THREE.Mesh( geometry, material ); + mesh.drawMode = THREE.TriangleStripDrawMode; + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) { + + mesh = new THREE.Mesh( geometry, material ); + mesh.drawMode = THREE.TriangleFanDrawMode; + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) { + + mesh = new THREE.LineSegments( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) { + + mesh = new THREE.Line( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) { + + mesh = new THREE.LineLoop( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) { + + mesh = new THREE.Points( geometry, material ); + + } else { + + throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ', primitive.mode ); + + } + + mesh.name = group.name + '_' + name; + + if ( primitive.targets !== undefined ) { + + addMorphTargets( mesh, meshDef, primitive, dependencies ); + + } + + if ( primitive.extras ) mesh.userData = primitive.extras; + + group.add( mesh ); + + } + + return group; + + } ); + + } ); + + } ); + + }; + + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + */ + GLTFParser.prototype.loadCameras = function () { + + var json = this.json; + + return _each( json.cameras, function ( camera ) { + + var _camera; + + var params = camera[ camera.type ]; + + if ( !params ) { + + console.warn( 'THREE.GLTFLoader: Missing camera parameters.' ); + return; + + } + + if ( camera.type === 'perspective' ) { + + var aspectRatio = params.aspectRatio || 1; + var xfov = params.yfov * aspectRatio; + + _camera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( xfov ), aspectRatio, params.znear || 1, params.zfar || 2e6 ); + + } else if ( camera.type === 'orthographic' ) { + + _camera = new THREE.OrthographicCamera( params.xmag / -2, params.xmag / 2, params.ymag / 2, params.ymag / -2, params.znear, params.zfar ); + + } + + if ( camera.name !== undefined ) _camera.name = camera.name; + if ( camera.extras ) _camera.userData = camera.extras; + + return _camera; + + } ); + + }; + + GLTFParser.prototype.loadSkins = function () { + + var json = this.json; + var parser = this; + + return this._withDependencies( [ + + 'accessors' + + ] ).then( function ( dependencies ) { + + return _each( json.skins, function ( skin ) { + + // console.log(skin); + + // this is for linked skeleton + // here gl_avatar also indicates id in newly created skins array + if (parser.enableGLTFAvatar && skin.gl_avatar !== undefined) { + var _skinlink = { + link: skin.skeleton, + inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ] + }; + return _skinlink; + } + + var _skin = { + joints: skin.joints, + inverseBindMatrices: dependencies.accessors[ skin.inverseBindMatrices ] + }; + + // // clothes file sub skeleton extensions + // if (skin.extensions && skin.extensions.gl_avatar) { + // var gla = skin.extensions.gl_avatar; + // if (gla.root) { + // // console.log(gl_avatar_linked_skeleton); + // var root = gl_avatar_linked_skeleton.nodes[gla.root]; + // _skin.root = root; + // // console.log(root); + // } + // } + + return _skin; + + } ); + + } ); + + }; + + GLTFParser.prototype.loadAnimations = function () { + + var json = this.json; + + return this._withDependencies( [ + + 'accessors', + 'nodes' + + ] ).then( function ( dependencies ) { + + return _each( json.animations, function ( animation, animationId ) { + + var tracks = []; + + for ( var channelId in animation.channels ) { + + var channel = animation.channels[ channelId ]; + var sampler = animation.samplers[ channel.sampler ]; + + if ( sampler ) { + + var target = channel.target; + var name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated. + var input = animation.parameters !== undefined ? animation.parameters[ sampler.input ] : sampler.input; + var output = animation.parameters !== undefined ? animation.parameters[ sampler.output ] : sampler.output; + + var inputAccessor = dependencies.accessors[ input ]; + var outputAccessor = dependencies.accessors[ output ]; + + var node = dependencies.nodes[ name ]; + + if ( node ) { + + node.updateMatrix(); + node.matrixAutoUpdate = true; + + var TypedKeyframeTrack; + + switch ( PATH_PROPERTIES[ target.path ] ) { + + case PATH_PROPERTIES.weights: + + TypedKeyframeTrack = THREE.NumberKeyframeTrack; + break; + + case PATH_PROPERTIES.rotation: + + TypedKeyframeTrack = THREE.QuaternionKeyframeTrack; + break; + + case PATH_PROPERTIES.position: + case PATH_PROPERTIES.scale: + default: + + TypedKeyframeTrack = THREE.VectorKeyframeTrack; + break; + + } + + var targetName = node.name ? node.name : node.uuid; + + if ( sampler.interpolation === 'CATMULLROMSPLINE' ) { + + console.warn( 'THREE.GLTFLoader: CATMULLROMSPLINE interpolation is not supported. Using CUBICSPLINE instead.' ); + + } + + var interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : THREE.InterpolateLinear; + + var targetNames = []; + + if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) { + + // node should be THREE.Group here but + // PATH_PROPERTIES.weights(morphTargetInfluences) should be + // the property of a mesh object under node. + // So finding targets here. + + node.traverse( function ( object ) { + + if ( object.isMesh === true && object.material.morphTargets === true ) { + + targetNames.push( object.name ? object.name : object.uuid ); + + } + + } ); + + } else { + + targetNames.push( targetName ); + + } + + // KeyframeTrack.optimize() will modify given 'times' and 'values' + // buffers before creating a truncated copy to keep. Because buffers may + // be reused by other tracks, make copies here. + for ( var i = 0, il = targetNames.length; i < il; i ++ ) { + + tracks.push( new TypedKeyframeTrack( + targetNames[ i ] + '.' + PATH_PROPERTIES[ target.path ], + THREE.AnimationUtils.arraySlice( inputAccessor.array, 0 ), + THREE.AnimationUtils.arraySlice( outputAccessor.array, 0 ), + interpolation + ) ); + + } + + } + + } + + } + + var name = animation.name !== undefined ? animation.name : 'animation_' + animationId; + + return new THREE.AnimationClip( name, undefined, tracks ); + + } ); + + } ); + + }; + + GLTFParser.prototype.loadNodes = function () { + + var json = this.json; + var extensions = this.extensions; + var scope = this; + + var nodes = json.nodes || []; + var skins = json.skins || []; + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + // Nothing in the node definition indicates whether it is a Bone or an + // Object3D. Use the skins' joint references to mark bones. + skins.forEach( function ( skin ) { + + skin.joints.forEach( function ( id ) { + + nodes[ id ].isBone = true; + + } ); + + } ); + + return _each( json.nodes, function ( node ) { + + var matrix = new THREE.Matrix4(); + + var _node = node.isBone === true ? new THREE.Bone() : new THREE.Object3D(); + + if ( node.name !== undefined ) { + + _node.name = THREE.PropertyBinding.sanitizeNodeName( node.name ); + + } + + if ( node.extras ) _node.userData = node.extras; + + if ( node.matrix !== undefined ) { + + matrix.fromArray( node.matrix ); + _node.applyMatrix( matrix ); + + } else { + + if ( node.translation !== undefined ) { + + _node.position.fromArray( node.translation ); + + } + + if ( node.rotation !== undefined ) { + + _node.quaternion.fromArray( node.rotation ); + + } + + if ( node.scale !== undefined ) { + + _node.scale.fromArray( node.scale ); + + } + + } + + return _node; + + } ).then( function ( __nodes ) { + + return scope._withDependencies( [ + + 'meshes', + 'skins', + 'cameras' + + ] ).then( function ( dependencies ) { + + return _each( __nodes, function ( _node, nodeId ) { + + var node = json.nodes[ nodeId ]; + + var meshes; + + if ( node.mesh !== undefined) { + + meshes = [ node.mesh ]; + + } else if ( node.meshes !== undefined ) { + + console.warn( 'THREE.GLTFLoader: Legacy glTF file detected. Nodes may have no more than one mesh.' ); + + meshes = node.meshes; + + } + + if ( meshes !== undefined ) { + + for ( var meshId in meshes ) { + + var mesh = meshes[ meshId ]; + var group = dependencies.meshes[ mesh ]; + + if ( group === undefined ) { + + console.warn( 'THREE.GLTFLoader: Could not find node "' + mesh + '".' ); + continue; + + } + + // do not clone children as they will be replaced anyway + var clonedgroup = group.clone( false ); + + for ( var childrenId in group.children ) { + + var child = group.children[ childrenId ]; + var originalChild = child; + + // clone Mesh to add to _node + + var originalMaterial = child.material; + var originalGeometry = child.geometry; + var originalInfluences = child.morphTargetInfluences; + var originalUserData = child.userData; + var originalName = child.name; + + var material = originalMaterial; + + switch ( child.type ) { + + case 'LineSegments': + child = new THREE.LineSegments( originalGeometry, material ); + break; + + case 'LineLoop': + child = new THREE.LineLoop( originalGeometry, material ); + break; + + case 'Line': + child = new THREE.Line( originalGeometry, material ); + break; + + case 'Points': + child = new THREE.Points( originalGeometry, material ); + break; + + default: + child = new THREE.Mesh( originalGeometry, material ); + child.drawMode = originalChild.drawMode; + + } + + child.castShadow = true; + child.morphTargetInfluences = originalInfluences; + child.userData = originalUserData; + child.name = originalName; + + var skinEntry; + + if ( node.skin !== undefined ) { + + skinEntry = dependencies.skins[ node.skin ]; + + } + + var linkSkeleton = null; + if (gl_avatar) { + if (gl_avatar.type === "skin") { + if (node.extensions && node.extensions.gl_avatar) { + // skinEntry + // bind skeleton from main skeleton file + var s = node.extensions.gl_avatar.skin; + skinEntry = dependencies.skins[ s ]; + + var link = skinEntry.link; + + linkSkeleton = gl_avatar_skeletons[link]; + } + } + } + + // Replace Mesh with SkinnedMesh in library + if ( skinEntry ) { + + var geometry = originalGeometry; + material = originalMaterial; + material.skinning = true; + + child = new THREE.SkinnedMesh( geometry, material ); + child.castShadow = true; + child.userData = originalUserData; + child.name = originalName; + + var skeleton; + if (linkSkeleton) { + var boneInverses = []; + var m = skinEntry.inverseBindMatrices.array; + for ( var i = 0, l = linkSkeleton.bones.length; i < l; i ++ ) { + var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + boneInverses.push( mat ); + } + + skeleton = new THREE.Skeleton(linkSkeleton.bones, boneInverses); + } else { + var bones = []; + var boneInverses = []; + + for ( var i = 0, l = skinEntry.joints.length; i < l; i ++ ) { + + var jointId = skinEntry.joints[ i ]; + var jointNode = __nodes[ jointId ]; + + if ( jointNode ) { + + bones.push( jointNode ); + + var m = skinEntry.inverseBindMatrices.array; + var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + boneInverses.push( mat ); + + } else { + + console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', jointId ); + + } + + } + + + + + // if (gl_avatar && gl_avatar.type === "skin") { + // if (skinEntry.root) { + // // sub_skeleton module + + // // assume bones[0] is root(skeleton) of this skeleton (joint list) + // bones[0].gl_avatar_base_root = skinEntry.root; + // } + // } + + + // gl_avatar: only referenced skeleton will be created + // this can be modified in the furture + // to enable pure skeleton file without skin? + skeleton = new THREE.Skeleton( bones, boneInverses ); + + + } + + + + if ( gl_avatar ) { + if (gl_avatar.type === "skeleton") { + if (node.skin in gl_avatar.skinId2SkeletonKey) { + gl_avatar.skeletons[gl_avatar.skinId2SkeletonKey[node.skin]] = skeleton; + } + + + + // if there's manually created full joint list skin + // enter this branch + if (node.extensions && node.extensions.gl_avatar) { + + var externalSkins; + if (node.extensions.gl_avatar.skin !== undefined) { + if (Array.isArray(node.extensions.gl_avatar.skin)) { + externalSkins = node.extensions.gl_avatar.skin; + } else { + // one number id + externalSkins = [node.extensions.gl_avatar.skin] + } + } else { + externalSkins = []; + } + + + // var s = node.extensions.gl_avatar.skin; + // assert( skeleton === null ) + var s; + for (var sid = 0, sidl = externalSkins.length; sid < sidl; sid++) { + s = externalSkins[sid]; + + if (s !== undefined) { + console.log('manually added joint list skin: ' + s); + + skinEntry = dependencies.skins[ s ]; + + var bones = []; + // assert( no boneinverses ) + + for ( var i = 0, l = skinEntry.joints.length; i < l; i ++ ) { + + var jointId = skinEntry.joints[ i ]; + var jointNode = __nodes[ jointId ]; + + if ( jointNode ) { + + bones.push( jointNode ); + + // var m = skinEntry.inverseBindMatrices.array; + // var mat = new THREE.Matrix4().fromArray( m, i * 16 ); + // boneInverses.push( mat ); + + } else { + + console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', jointId ); + + } + + } + + + if (s in gl_avatar.skinId2SkeletonKey) { + gl_avatar.skeletons[gl_avatar.skinId2SkeletonKey[s]] = new THREE.Skeleton(bones); + } + } + + } + } + + + + + } + } + + child.bind( skeleton, child.matrixWorld ); + + } + + clonedgroup.add( child ); + + } + + if (gl_avatar_linked_skeleton) { + console.log( gl_avatar_linked_skeleton.nodes.head.children ); + } + + _node.add( clonedgroup ); + + } + + } + + if ( node.camera !== undefined ) { + + var camera = dependencies.cameras[ node.camera ]; + + _node.add( camera ); + + } + + if ( node.extensions + && node.extensions[ EXTENSIONS.KHR_LIGHTS ] + && node.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) { + + var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights; + _node.add( lights[ node.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] ); + + } + + + // for skeleton, add special node to node map for future reference + if ( gl_avatar ) { + if (gl_avatar.type === "skeleton") { + if (nodeId in gl_avatar.nodeId2Name) { + gl_avatar.nodes[gl_avatar.nodeId2Name[nodeId]] = _node; + } + } else { + // skin + if (node.extensions && node.extensions.gl_avatar) { + var gla = node.extensions.gl_avatar; + if (gla.root !== undefined) { + // rigid bind + _node.gl_avatar_base_root = gl_avatar_linked_skeleton.nodes[gla.root]; + } + } + } + } + + return _node; + + } ); + + } ); + + } ); + + }; + + GLTFParser.prototype.loadScenes = function () { + + var json = this.json; + var extensions = this.extensions; + + var gl_avatar = this.enableGLTFAvatar ? this.extensions[EXTENSIONS.GL_AVATAR] : null; + + // scene node hierachy builder + + function buildNodeHierachy( nodeId, parentObject, allNodes ) { + + var _node = allNodes[ nodeId ]; + parentObject.add( _node ); + + var node = json.nodes[ nodeId ]; + + if ( node.children ) { + + var children = node.children; + + for ( var i = 0, l = children.length; i < l; i ++ ) { + + var child = children[ i ]; + buildNodeHierachy( child, _node, allNodes ); + + } + + } + + } + + return this._withDependencies( [ + + 'nodes' + + ] ).then( function ( dependencies ) { + + return _each( json.scenes, function ( scene ) { + + var _scene = new THREE.Scene(); + if ( scene.name !== undefined ) _scene.name = scene.name; + + if ( scene.extras ) _scene.userData = scene.extras; + + var nodes = scene.nodes || []; + + for ( var i = 0, l = nodes.length; i < l; i ++ ) { + + var nodeId = nodes[ i ]; + buildNodeHierachy( nodeId, _scene, dependencies.nodes ); + + } + + _scene.traverse( function ( child ) { + + // for Specular-Glossiness. + if ( child.material && child.material.isGLTFSpecularGlossinessMaterial ) { + + child.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms; + + } + + } ); + + + // Ambient lighting, if present, is always attached to the scene root. + if ( scene.extensions + && scene.extensions[ EXTENSIONS.KHR_LIGHTS ] + && scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light !== undefined ) { + + var lights = extensions[ EXTENSIONS.KHR_LIGHTS ].lights; + _scene.add( lights[ scene.extensions[ EXTENSIONS.KHR_LIGHTS ].light ] ); + + } + + + + + + // gl avatar sub skeleton link test + + if (gl_avatar && gl_avatar.type === "skin") { + // var temp_base_root; + for ( var i = 0, l = dependencies.nodes.length; i < l; i ++ ) { + + var node = dependencies.nodes[ i ]; + if (node.gl_avatar_base_root) { + // node.gl_avatar_base_root.add(node); // move to outsider logic to handle + + + // TODO: might use .userData. field + // !!: assume there's only one attach (rigid bind) node + _scene.attach_child = node; + } + + } + + console.log(_scene); + // console.log(gl_avatar_linked_skeleton); + } + + + return _scene; + + } ); + + } ); + + }; + + return GLTFLoader; + +} )(); +}; diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000000000000000000000000000000000000..fbf127c9becf2c2767514f42469e0b24a8c9bdf0 --- /dev/null +++ b/src/app.js @@ -0,0 +1,169 @@ +// var THREE = require('three'); +// THREE.OrbitControls = require('three-orbit-controls')(THREE); +// THREE.GLTFLoader = require('./GLTFLoader.js')(THREE); + +import {Viewer, AvatarSystem} from './GLTFAvatarViewer.js'; +// import {mergeGLTFAvatar} from './GLTFAvatarMerge.js'; +// import {fileSave} from './lib/makeglb.js'; + +import dat from 'dat.gui'; + + +var viewer = new Viewer(); + + +// viewer.init(); +// document.getElementById('container').appendChild(viewer.canvas); + + + + + + +var AvatarControl = function() { + this.skeleton = 'mixamo'; + this.skin = { + hair: 'maid', + clothes: 'maid-dress', + + face: 'saber' + }; + + // skeleton animations + this.animations = 'null'; + + this.mergeAndExport = function() { + viewer.mergeAndExport(); + }; +}; + + +var control = new AvatarControl(); + +var gui = new dat.GUI(); + +// var skeletonControl = gui.add(control, 'skeleton', ['mixamo', 'stand-pose']); // TODO: get repo from avatar system +var skeletonControl = gui.add(control, 'skeleton', Object.keys(AvatarSystem.repo.skeletons)); // TODO: get repo from avatar system +skeletonControl.onChange(function(value) { + // console.log(value); + viewer.selectSkeleton(value); +}); + + +var animationFolder = gui.addFolder('animations'); +animationFolder.open(); + +var visibilityFolder = gui.addFolder('visibility-control'); +var visibilityToggles = []; +var visibilityValues = {}; + +// var animationControl; +var animationToggles = []; +viewer.skeletonUpdateCallback = function(key) { + // if ( animationControl ) animationFolder.remove(animationControl); + // animationControl = animationFolder.add(control, 'animations', viewer.skeletonAnimations); + + // animationControl.onChange(function(value) { + // if ( viewer.skeletonAnimations.length > 0) { + // control.animations = viewer.skeletonAnimations[0]; + + // for (var i = 0, len = viewer.skeletonAnimations.length; i < len; i++) { + // if (value == viewer.skeletonAnimations[i]) { + // viewer.playAnimation(i); + // } + // } + + // animationControl.updateDisplay(); + // } + + // }); + + + for (var i = 0, len = animationToggles.length; i < len; i++) { + animationFolder.remove(animationToggles[i]); + } + animationToggles = []; + for (var key in viewer.skeletonActionStates) { + var toggle = animationFolder.add(viewer.skeletonActionStates, key); + toggle.onChange((function() { + var k = key; + return function(v) { + viewer.playAnimationMixing(k, v); + }; + })()); + animationToggles.push(toggle); + } + + + for (var i = 0, len = visibilityToggles.length; i < len; i++) { + visibilityFolder.remove(visibilityToggles[i]); + } + visibilityToggles = []; + visibilityValues = {}; + // for (var id in viewer.skeletonVisibilityId2Name) { + for (var id = 1, len = viewer.skeletonVisibilityId2Name.length; id < len; id++) { + // if (id === 0) continue; + + visibilityValues[id] = true; + + var toggle = visibilityFolder.add(visibilityValues, id).name(id + ' ' + viewer.skeletonVisibilityId2Name[id]); + + toggle.onChange((function() { + var i = id; + return function(v) { + viewer.updateVisibilityValue(i, v); + }; + })()); + + + toggle.listen(); + + visibilityToggles.push(toggle); + } + +}; + + +viewer.skinUpdateCallback = function(type, key) { + var array = viewer.getVisibilityArray(); + for (var i = 0, len = array.length; i < len; i++) { + visibilityValues[i] = array[i] === 255 ? true : false; + } +}; + + + + +var skinFolder = gui.addFolder('skins'); +skinFolder.open(); + +// skinFolder.add(control.skin, 'hair', Object.keys(AvatarSystem.repo.hair)).onChange(function(value) { +// viewer.selectSkin('hair', value); +// }); +// skinFolder.add(control.skin, 'clothes', Object.keys(AvatarSystem.repo.clothes)).onChange(function(value) { +// viewer.selectSkin('clothes', value); +// }); + +function getSelectSkinFunc(cat) { + var c = cat; + return function(value) { + viewer.selectSkin(c, value); + }; +} + +for (var cat in control.skin) { + skinFolder.add(control.skin, cat, Object.keys(AvatarSystem.repo[cat])).onChange( + getSelectSkinFunc(cat) + ); +} + + +gui.add(control, 'mergeAndExport'); + + + +// viewer.init(document.getElementById('canvas')); +viewer.init(); + + + diff --git a/src/lib/ammo.js b/src/lib/ammo.js new file mode 100644 index 0000000000000000000000000000000000000000..2d0d43ef87fae7c641798fff793da0dea469f692 --- /dev/null +++ b/src/lib/ammo.js @@ -0,0 +1,585 @@ + + // This is ammo.js, a port of Bullet Physics to JavaScript. zlib licensed. + var Ammo = function(Ammo) { + Ammo = Ammo || {}; + +var c;c||(c=typeof Ammo !== 'undefined' ? Ammo : {});var aa={},ba;for(ba in c)c.hasOwnProperty(ba)&&(aa[ba]=c[ba]);c.arguments=[];c.thisProgram="./this.program";c.quit=function(a,b){throw b;};c.preRun=[];c.postRun=[];var ca=!1,da=!1,ea=!1,fa=!1; +if(c.ENVIRONMENT)if("WEB"===c.ENVIRONMENT)ca=!0;else if("WORKER"===c.ENVIRONMENT)da=!0;else if("NODE"===c.ENVIRONMENT)ea=!0;else if("SHELL"===c.ENVIRONMENT)fa=!0;else throw Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.");else ca="object"===typeof window,da="function"===typeof importScripts,ea="object"===typeof process&&"function"===typeof require&&!ca&&!da,fa=!ca&&!ea&&!da; +if(ea){var ha,ia;c.read=function(a,b){var e=ja(a);e||(ha||(ha=require("fs")),ia||(ia=require("path")),a=ia.normalize(a),e=ha.readFileSync(a));return b?e:e.toString()};c.readBinary=function(a){a=c.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1>2]=a;a=cb.buffer;for(var g=0;g>2],b.m=a,(db(f[g]),a)|0;a=xa[a>>2];return(db(e),a)|0}var fb=0;function gb(){fb+=4;return xa[fb-4>>2]}var hb={}; +function ib(a,b){fb=b;try{var e=gb(),f=gb(),g=gb();a=0;ib.g||(ib.g=[null,[],[]],ib.l=function(a,b){var e=ib.g[a];assert(e);if(0===b||10===b){a=1===a?c.print:c.printErr;a:{for(var f=b=0;e[f];)++f;if(16g?f+=String.fromCharCode(g):(g-=65536,f+=String.fromCharCode(55296|g>>10,56320|g&1023))}}else f+=String.fromCharCode(g)}}a(b);e.length=0}else e.push(b)});for(b=0;b>2],k=xa[f+(8*b+4)>>2],m=0;m>2]=0;for(ob=nb+mb;kb>0]=0}else jb.subarray||jb.slice?va.set(jb,nb):va.set(new Uint8Array(jb),nb);var pb={},qb=1;function rb(a,b){rb.h||(rb.h={});a in rb.h||(c.dynCall_v(b),rb.h[a]=1)}Ea=ma(4);Aa=Ba=pa(oa);Ca=Aa+Ha;Da=pa(Ca);xa[Ea>>2]=Da;na=!0;var sb=!1; +function la(a){for(var b=[],e=0;e>4; +g=(g&15)<<4|h>>2;var m=(h&3)<<6|k;b+=String.fromCharCode(f);64!==h&&(b+=String.fromCharCode(g));64!==k&&(b+=String.fromCharCode(m))}while(e>2]=a);return a},___syscall140:function(a,b){fb=b;try{var e= +hb.A();gb();var f=gb(),g=gb(),h=gb();FS.D(e,f,h);xa[g>>2]=e.position;e.B&&0===f&&0===h&&(e.B=null);return 0}catch(k){return"undefined"!==typeof FS&&k instanceof FS.i||sa(k),-k.j}},___syscall146:ib,___syscall6:function(a,b){fb=b;try{var e=hb.A();FS.close(e);return 0}catch(f){return"undefined"!==typeof FS&&f instanceof FS.i||sa(f),-f.j}},_abort:function(){c.abort()},_emscripten_asm_const_diiiiiiii:function(a,b,e,f,g,h,k,m,u){return Wa[a](b,e,f,g,h,k,m,u)},_emscripten_memcpy_big:function(a,b,e){va.set(va.subarray(b, +b+e),a);return a},_gettimeofday:function(a){var b=Date.now();xa[a>>2]=b/1E3|0;xa[a+4>>2]=b%1E3*1E3|0;return 0},_llvm_pow_f32:Qa,_llvm_trap:function(){sa("trap!")},_pthread_getspecific:function(a){return pb[a]||0},_pthread_key_create:function(a){if(0==a)return 22;xa[a>>2]=qb;pb[qb]=0;qb++;return 0},_pthread_once:rb,_pthread_setspecific:function(a,b){if(!(a in pb))return 22;pb[a]=b;return 0},flush_NO_FILESYSTEM:function(){var a=c._fflush;a&&a(0);if(a=ib.l){var b=ib.g;b[1].length&&a(1,10);b[2].length&& +a(2,10)}},DYNAMICTOP_PTR:Ea,tempDoublePtr:Ya,ABORT:ra,STACKTOP:Ba,STACK_MAX:Ca,cttz_i8:nb};// EMSCRIPTEN_START_ASM +var d=(/** @suppress {uselessCode} */ function(global,env,buffer) { +"use asm";var a=new global.Int8Array(buffer);var b=new global.Int16Array(buffer);var c=new global.Int32Array(buffer);var d=new global.Uint8Array(buffer);var e=new global.Uint16Array(buffer);var f=new global.Uint32Array(buffer);var g=new global.Float32Array(buffer);var h=new global.Float64Array(buffer);var i=env.DYNAMICTOP_PTR|0;var j=env.tempDoublePtr|0;var k=env.ABORT|0;var l=env.STACKTOP|0;var m=env.STACK_MAX|0;var n=env.cttz_i8|0;var o=0;var p=0;var q=0;var r=0;var s=global.NaN,t=global.Infinity;var u=0,v=0,w=0,x=0,y=0.0;var z=0;var A=global.Math.floor;var B=global.Math.abs;var C=global.Math.sqrt;var D=global.Math.pow;var E=global.Math.cos;var F=global.Math.sin;var G=global.Math.tan;var H=global.Math.acos;var I=global.Math.asin;var J=global.Math.atan;var K=global.Math.atan2;var L=global.Math.exp;var M=global.Math.log;var N=global.Math.ceil;var O=global.Math.imul;var P=global.Math.min;var Q=global.Math.max;var R=global.Math.clz32;var S=env.abort;var T=env.assert;var U=env.enlargeMemory;var V=env.getTotalMemory;var W=env.abortOnCannotGrowMemory;var X=env.invoke_di;var Y=env.invoke_did;var Z=env.invoke_diidii;var _=env.invoke_diii;var $=env.invoke_diiidii;var aa=env.invoke_diiii;var ba=env.invoke_diiiii;var ca=env.invoke_diiiiiiii;var da=env.invoke_diiiiiiiii;var ea=env.invoke_diiiiiiiiii;var fa=env.invoke_ii;var ga=env.invoke_iidid;var ha=env.invoke_iii;var ia=env.invoke_iiid;var ja=env.invoke_iiii;var ka=env.invoke_iiiii;var la=env.invoke_iiiiiii;var ma=env.invoke_iiiiiiiiii;var na=env.invoke_iiiiiiiiiii;var oa=env.invoke_v;var pa=env.invoke_vi;var qa=env.invoke_vid;var ra=env.invoke_vidd;var sa=env.invoke_viddiii;var ta=env.invoke_vidi;var ua=env.invoke_vidii;var va=env.invoke_vii;var wa=env.invoke_viid;var xa=env.invoke_viidi;var ya=env.invoke_viidii;var za=env.invoke_viii;var Aa=env.invoke_viiid;var Ba=env.invoke_viiidii;var Ca=env.invoke_viiii;var Da=env.invoke_viiiid;var Ea=env.invoke_viiiidddddidi;var Fa=env.invoke_viiiiddddiid;var Ga=env.invoke_viiiii;var Ha=env.invoke_viiiiid;var Ia=env.invoke_viiiiii;var Ja=env.invoke_viiiiiii;var Ka=env.invoke_viiiiiiiii;var La=env.invoke_viiiiiiiiii;var Ma=env.__ZSt18uncaught_exceptionv;var Na=env.___cxa_begin_catch;var Oa=env.___cxa_find_matching_catch;var Pa=env.___cxa_pure_virtual;var Qa=env.___gxx_personality_v0;var Ra=env.___resumeException;var Sa=env.___setErrNo;var Ta=env.___syscall140;var Ua=env.___syscall146;var Va=env.___syscall6;var Wa=env._abort;var Xa=env._emscripten_asm_const_diiiiiiii;var Ya=env._emscripten_memcpy_big;var Za=env._gettimeofday;var _a=env._llvm_pow_f32;var $a=env._llvm_trap;var ab=env._pthread_getspecific;var bb=env._pthread_key_create;var cb=env._pthread_once;var db=env._pthread_setspecific;var eb=env.flush_NO_FILESYSTEM;var fb=0.0; +// EMSCRIPTEN_START_FUNCS +function sf(a,e,f){a=a|0;e=e|0;f=f|0;Zh(a,e,f)|0;c[e+52>>2]=c[a+48>>2];c[e+56>>2]=c[a+52>>2];c[e+60>>2]=c[a+56>>2];c[e+64>>2]=c[a+60>>2];c[e+68>>2]=c[a+64>>2];c[e+72>>2]=c[a+68>>2];c[e+76>>2]=c[a+72>>2];c[e+80>>2]=c[a+76>>2];c[e+84>>2]=c[a+80>>2];c[e+88>>2]=c[a+84>>2];c[e+92>>2]=c[a+88>>2];c[e+96>>2]=c[a+92>>2];c[e+100>>2]=c[a+96>>2];c[e+104>>2]=c[a+100>>2];c[e+108>>2]=c[a+104>>2];c[e+112>>2]=c[a+108>>2];c[e+116>>2]=c[a+112>>2];c[e+120>>2]=c[a+116>>2];c[e+124>>2]=c[a+120>>2];c[e+128>>2]=c[a+124>>2];c[e+132>>2]=c[a+128>>2];c[e+136>>2]=c[a+132>>2];c[e+140>>2]=c[a+136>>2];c[e+144>>2]=c[a+140>>2];c[e+148>>2]=c[a+144>>2];c[e+152>>2]=c[a+148>>2];c[e+156>>2]=c[a+152>>2];c[e+160>>2]=c[a+156>>2];c[e+164>>2]=c[a+160>>2];c[e+168>>2]=c[a+164>>2];c[e+172>>2]=c[a+168>>2];c[e+176>>2]=c[a+172>>2];c[e+228>>2]=c[a+868>>2];c[e+212>>2]=c[a+872>>2];c[e+196>>2]=c[a+680>>2];c[e+180>>2]=c[a+696>>2];c[e+232>>2]=c[a+932>>2];c[e+216>>2]=c[a+936>>2];c[e+200>>2]=c[a+684>>2];c[e+184>>2]=c[a+700>>2];c[e+236>>2]=c[a+996>>2];c[e+220>>2]=c[a+1e3>>2];c[e+204>>2]=c[a+688>>2];c[e+188>>2]=c[a+704>>2];f=b[a+1300>>1]|0;c[e+244>>2]=f&255;c[e+248>>2]=(f&65535)>>>8&65535;c[e+276>>2]=c[a+1316>>2];c[e+324>>2]=c[a+1364>>2];c[e+252>>2]=d[a+1309>>0];c[e+300>>2]=c[a+1340>>2];c[e+280>>2]=c[a+1320>>2];c[e+328>>2]=c[a+1368>>2];c[e+256>>2]=d[a+1310>>0];c[e+304>>2]=c[a+1344>>2];c[e+284>>2]=c[a+1324>>2];c[e+332>>2]=c[a+1372>>2];c[e+260>>2]=d[a+1311>>0];c[e+308>>2]=c[a+1348>>2];c[e+288>>2]=c[a+1328>>2];c[e+336>>2]=c[a+1376>>2];c[e+264>>2]=d[a+1312>>0];c[e+312>>2]=c[a+1352>>2];c[e+292>>2]=c[a+1332>>2];c[e+340>>2]=c[a+1380>>2];c[e+268>>2]=d[a+1313>>0];c[e+316>>2]=c[a+1356>>2];c[e+296>>2]=c[a+1336>>2];c[e+344>>2]=c[a+1384>>2];c[e+272>>2]=d[a+1314>>0];c[e+320>>2]=c[a+1360>>2];return 12711}function tf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;i=c[b+4>>2]|0;if((i|0)==(c[b+8>>2]|0)?(h=i|0?i<<1:1,(i|0)<(h|0)):0){if(!h){f=i;g=0}else{c[6472]=(c[6472]|0)+1;e=ic((h*244|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[b+4>>2]|0;g=e}if((f|0)>0){e=0;do{k=g+(e*244|0)|0;j=c[b+12>>2]|0;l=j+(e*244|0)|0;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];k=g+(e*244|0)+16|0;l=j+(e*244|0)+16|0;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];k=g+(e*244|0)+32|0;l=j+(e*244|0)+32|0;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];k=g+(e*244|0)+48|0;l=j+(e*244|0)+48|0;c[k>>2]=c[l>>2];c[k+4>>2]=c[l+4>>2];c[k+8>>2]=c[l+8>>2];c[k+12>>2]=c[l+12>>2];_h(g+(e*244|0)+64|0,j+(e*244|0)+64|0,180)|0;e=e+1|0}while((e|0)!=(f|0))}e=c[b+12>>2]|0;if(e|0){if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+12>>2]=0}a[b+16>>0]=1;c[b+12>>2]=g;c[b+8>>2]=h;e=c[b+4>>2]|0}else e=i;c[b+4>>2]=e+1;l=c[b+12>>2]|0;c[l+(i*244|0)>>2]=c[d>>2];c[l+(i*244|0)+4>>2]=c[d+4>>2];c[l+(i*244|0)+8>>2]=c[d+8>>2];c[l+(i*244|0)+12>>2]=c[d+12>>2];c[l+(i*244|0)+16>>2]=c[d+16>>2];c[l+(i*244|0)+16+4>>2]=c[d+16+4>>2];c[l+(i*244|0)+16+8>>2]=c[d+16+8>>2];c[l+(i*244|0)+16+12>>2]=c[d+16+12>>2];c[l+(i*244|0)+32>>2]=c[d+32>>2];c[l+(i*244|0)+32+4>>2]=c[d+32+4>>2];c[l+(i*244|0)+32+8>>2]=c[d+32+8>>2];c[l+(i*244|0)+32+12>>2]=c[d+32+12>>2];c[l+(i*244|0)+48>>2]=c[d+48>>2];c[l+(i*244|0)+48+4>>2]=c[d+48+4>>2];c[l+(i*244|0)+48+8>>2]=c[d+48+8>>2];c[l+(i*244|0)+48+12>>2]=c[d+48+12>>2];_h(l+(i*244|0)+64|0,d+64|0,180)|0;return (c[b+12>>2]|0)+(i*244|0)|0}function uf(a,e,f){a=a|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0;Zh(a,e,f)|0;c[e+52>>2]=c[a+552>>2];c[e+56>>2]=c[a+556>>2];c[e+60>>2]=c[a+560>>2];c[e+64>>2]=c[a+564>>2];c[e+68>>2]=c[a+568>>2];c[e+72>>2]=c[a+572>>2];c[e+76>>2]=c[a+576>>2];c[e+80>>2]=c[a+580>>2];c[e+84>>2]=c[a+584>>2];c[e+88>>2]=c[a+588>>2];c[e+92>>2]=c[a+592>>2];c[e+96>>2]=c[a+596>>2];c[e+100>>2]=c[a+600>>2];c[e+104>>2]=c[a+604>>2];c[e+108>>2]=c[a+608>>2];c[e+112>>2]=c[a+612>>2];c[e+116>>2]=c[a+616>>2];c[e+120>>2]=c[a+620>>2];c[e+124>>2]=c[a+624>>2];c[e+128>>2]=c[a+628>>2];c[e+132>>2]=c[a+632>>2];c[e+136>>2]=c[a+636>>2];c[e+140>>2]=c[a+640>>2];c[e+144>>2]=c[a+644>>2];c[e+148>>2]=c[a+648>>2];c[e+152>>2]=c[a+652>>2];c[e+156>>2]=c[a+656>>2];c[e+160>>2]=c[a+660>>2];c[e+164>>2]=c[a+664>>2];c[e+168>>2]=c[a+668>>2];c[e+172>>2]=c[a+672>>2];c[e+176>>2]=c[a+676>>2];f=b[a+736>>1]|0;c[e+184>>2]=f&255;c[e+188>>2]=(f&65535)>>>8&65535;c[e+196>>2]=c[a+684>>2];c[e+192>>2]=c[a+680>>2];c[e+180>>2]=d[a+740>>0];i=+g[a+688>>2];j=+g[a+692>>2];h=+bh(i-j,6.2831854820251465);if(!(h<-3.1415927410125732)){if(h>3.1415927410125732)h=h+-6.2831854820251465}else h=h+6.2831854820251465;g[e+200>>2]=h;h=+bh(i+j,6.2831854820251465);if(h<-3.1415927410125732){j=h+6.2831854820251465;f=e+204|0;g[f>>2]=j;f=a+696|0;f=c[f>>2]|0;k=e+208|0;c[k>>2]=f;k=a+700|0;k=c[k>>2]|0;f=e+212|0;c[f>>2]=k;f=a+704|0;f=c[f>>2]|0;a=e+216|0;c[a>>2]=f;return 12957}if(!(h>3.1415927410125732)){j=h;k=e+204|0;g[k>>2]=j;k=a+696|0;k=c[k>>2]|0;f=e+208|0;c[f>>2]=k;f=a+700|0;f=c[f>>2]|0;k=e+212|0;c[k>>2]=f;a=a+704|0;a=c[a>>2]|0;k=e+216|0;c[k>>2]=a;return 12957}j=h+-6.2831854820251465;k=e+204|0;g[k>>2]=j;k=a+696|0;k=c[k>>2]|0;f=e+208|0;c[f>>2]=k;f=a+700|0;f=c[f>>2]|0;k=e+212|0;c[k>>2]=f;a=a+704|0;a=c[a>>2]|0;k=e+216|0;c[k>>2]=a;return 12957}function vf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0;k=l;l=l+64|0;n=+g[a+20>>2];u=+g[a+40>>2];p=+g[a+24>>2];s=+g[a+36>>2];t=+g[a+32>>2];m=+g[a+16>>2];j=+g[a>>2];i=+g[a+4>>2];q=+g[a+8>>2];h=1.0/((n*u-p*s)*j+i*(p*t-u*m)+(s*m-n*t)*q);z=+g[b>>2];y=+g[b+4>>2];A=+g[b+8>>2];x=+g[b+16>>2];w=+g[b+20>>2];v=+g[b+24>>2];r=+g[b+32>>2];o=+g[b+36>>2];f=+g[b+40>>2];g[k+16>>2]=A*(s*m-n*t)*h+(z*(n*u-p*s)*h+y*(p*t-u*m)*h);g[k+16+4>>2]=A*(t*i-s*j)*h+(z*(s*q-u*i)*h+y*(u*j-t*q)*h);g[k+16+8>>2]=A*(n*j-m*i)*h+(z*(p*i-n*q)*h+y*(m*q-p*j)*h);g[k+16+12>>2]=0.0;g[k+16+16>>2]=(n*u-p*s)*h*x+(p*t-u*m)*h*w+(s*m-n*t)*h*v;g[k+16+20>>2]=(s*q-u*i)*h*x+(u*j-t*q)*h*w+(t*i-s*j)*h*v;g[k+16+24>>2]=(p*i-n*q)*h*x+(m*q-p*j)*h*w+(n*j-m*i)*h*v;g[k+16+28>>2]=0.0;g[k+16+32>>2]=(n*u-p*s)*h*r+(p*t-u*m)*h*o+(s*m-n*t)*h*f;g[k+16+36>>2]=(s*q-u*i)*h*r+(u*j-t*q)*h*o+(t*i-s*j)*h*f;g[k+16+40>>2]=(p*i-n*q)*h*r+(m*q-p*j)*h*o+(n*j-m*i)*h*f;g[k+16+44>>2]=0.0;lh(k+16|0,k);f=+g[k>>2];h=+g[k+4>>2];i=+g[k+8>>2];m=+g[k+12>>2];j=1.0/+C(+(f*f+h*h+i*i+m*m));g[k>>2]=f*j;g[k+4>>2]=h*j;g[k+8>>2]=i*j;g[k+12>>2]=m*j;m=m*j<-1.0?-1.0:m*j;g[e>>2]=+H(+(m>1.0?1.0:m))*2.0;g[d>>2]=f*j;g[d+4>>2]=h*j;g[d+8>>2]=i*j;g[d+12>>2]=0.0;if(f*j*f*j+h*j*h*j+i*j*i*j<1.4210854715202004e-14){c[d>>2]=1065353216;c[d+4>>2]=0;c[d+8>>2]=0;g[d+12>>2]=0.0;l=k;return}else{A=1.0/+C(+(f*j*f*j+h*j*h*j+i*j*i*j));g[d>>2]=f*j*A;g[d+4>>2]=A*h*j;g[d+8>>2]=A*i*j;l=k;return}}function wf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[b+12>>2]|0;k=c[b+36>>2]|0;if((k|0)>=(j|0))return;do if((c[b+40>>2]|0)<(j|0)){if(!j){g=k;d=0}else{c[6472]=(c[6472]|0)+1;d=ic((j<<2|3)+16|0)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}g=c[b+36>>2]|0}e=c[b+44>>2]|0;if((g|0)<=0){if(!e){a[b+48>>0]=1;c[b+44>>2]=d;c[b+40>>2]=j;i=b+44|0;break}}else{f=0;do{c[d+(f<<2)>>2]=c[e+(f<<2)>>2];f=f+1|0}while((f|0)!=(g|0))}if(a[b+48>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}a[b+48>>0]=1;c[b+44>>2]=d;c[b+40>>2]=j;i=b+44|0}else{d=c[b+44>>2]|0;i=b+44|0}while(0);Nk(d+(k<<2)|0,0,(j<<2)-(k<<2)|0)|0;c[b+36>>2]=j;h=c[b+56>>2]|0;if((h|0)<(j|0)){do if((c[b+60>>2]|0)<(j|0)){if(!j){g=h;d=0}else{c[6472]=(c[6472]|0)+1;d=ic((j<<2|3)+16|0)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}g=c[b+56>>2]|0}e=c[b+64>>2]|0;if((g|0)<=0){if(!e){a[b+68>>0]=1;c[b+64>>2]=d;c[b+60>>2]=j;break}}else{f=0;do{c[d+(f<<2)>>2]=c[e+(f<<2)>>2];f=f+1|0}while((f|0)!=(g|0))}if(a[b+68>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}a[b+68>>0]=1;c[b+64>>2]=d;c[b+60>>2]=j}else d=c[b+64>>2]|0;while(0);Nk(d+(h<<2)|0,0,(j<<2)-(h<<2)|0)|0}c[b+56>>2]=j;if((j|0)>0){Nk(c[i>>2]|0,-1,j<<2|0)|0;Nk(c[b+64>>2]|0,-1,j<<2|0)|0}if((k|0)<=0)return;g=c[b+16>>2]|0;d=c[i>>2]|0;e=c[b+64>>2]|0;f=0;do{j=c[(c[g+(f<<4)+4>>2]|0)+12>>2]<<16|c[(c[g+(f<<4)>>2]|0)+12>>2];j=(j+~(j<<15)>>10^j+~(j<<15))*9|0;j=d+((((j>>6^j)+~((j>>6^j)<<11)>>16^(j>>6^j)+~((j>>6^j)<<11))&(c[b+12>>2]|0)+-1)<<2)|0;c[e+(f<<2)>>2]=c[j>>2];c[j>>2]=f;f=f+1|0}while((f|0)!=(k|0));return}function xf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((c[b+8>>2]|0)>=(d|0))return;if((d|0)!=0?(c[6472]=(c[6472]|0)+1,e=ic((d*36|3)+16|0)|0,(e|0)!=0):0){c[(e+4+15&-16)+-4>>2]=e;o=e+4+15&-16}else o=0;i=c[b+4>>2]|0;if((i|0)>0){m=0;do{j=o+(m*36|0)|0;k=c[b+12>>2]|0;a[j+16>>0]=1;c[j+12>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;l=c[k+(m*36|0)+4>>2]|0;if((l|0)>0){c[6472]=(c[6472]|0)+1;e=ic((l<<2|3)+16|0)|0;if(!e)h=0;else{c[(e+4+15&-16)+-4>>2]=e;h=e+4+15&-16}f=c[j+4>>2]|0;g=c[j+12>>2]|0;if((f|0)<=0)if(!g){a[j+16>>0]=1;c[j+12>>2]=h;c[j+8>>2]=l;Nk(h|0,0,l<<2|0)|0}else n=14;else{e=0;do{c[h+(e<<2)>>2]=c[g+(e<<2)>>2];e=e+1|0}while((e|0)!=(f|0));n=14}if((n|0)==14){n=0;if(a[j+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}a[j+16>>0]=1;c[j+12>>2]=h;c[j+8>>2]=l;Nk(h|0,0,l<<2|0)|0}e=c[j+12>>2]|0;c[j+4>>2]=l;f=c[k+(m*36|0)+12>>2]|0;g=0;do{c[e+(g<<2)>>2]=c[f+(g<<2)>>2];g=g+1|0}while((g|0)!=(l|0))}else c[j+4>>2]=l;l=k+(m*36|0)+20|0;c[j+20>>2]=c[l>>2];c[j+20+4>>2]=c[l+4>>2];c[j+20+8>>2]=c[l+8>>2];c[j+20+12>>2]=c[l+12>>2];m=m+1|0}while((m|0)!=(i|0));e=c[b+4>>2]|0;if((e|0)>0){i=0;do{g=c[b+12>>2]|0;k=g+(i*36|0)+4|0;j=g+(i*36|0)+12|0;h=c[j>>2]|0;f=g+(i*36|0)+16|0;if(h|0){if(a[f>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[j>>2]=0}a[f>>0]=1;c[j>>2]=0;c[k>>2]=0;c[g+(i*36|0)+8>>2]=0;i=i+1|0}while((i|0)!=(e|0))}}e=c[b+12>>2]|0;if(e|0){if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+12>>2]=0}a[b+16>>0]=1;c[b+12>>2]=o;c[b+8>>2]=d;return}function yf(a,b,d){a=a|0;b=+b;d=+d;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0;v=c[a+832>>2]|0;if((v|0)<=0)return;a=c[a+840>>2]|0;o=0;do{l=c[a+(o*56|0)>>2]|0;m=c[a+(o*56|0)+4>>2]|0;y=c[m+8>>2]|0;x=c[m+12>>2]|0;w=c[m+16>>2]|0;p=a+(o*56|0)+8|0;j=+g[p>>2];q=a+(o*56|0)+12|0;i=+g[q>>2];r=a+(o*56|0)+16|0;t=+g[r>>2];b=+g[y+8>>2]*j+ +g[x+8>>2]*i+ +g[w+8>>2]*t;e=+g[y+12>>2]*j+ +g[x+12>>2]*i+ +g[w+12>>2]*t;d=+g[y+16>>2]*j+ +g[x+16>>2]*i+ +g[w+16>>2]*t;n=+g[l+8>>2];f=+g[l+12>>2];h=+g[l+16>>2];s=n-+g[l+24>>2]-(b-(j*+g[y+24>>2]+i*+g[x+24>>2]+t*+g[w+24>>2]));u=f-+g[l+28>>2]-(e-(j*+g[y+28>>2]+i*+g[x+28>>2]+t*+g[w+28>>2]));t=h-+g[l+32>>2]-(d-(j*+g[y+32>>2]+i*+g[x+32>>2]+t*+g[w+32>>2]));i=+g[a+(o*56|0)+24>>2];j=+g[a+(o*56|0)+28>>2];k=+g[a+(o*56|0)+32>>2];if(s*i+u*j+t*k<0.0){e=+g[a+(o*56|0)+40>>2]-(n*i+f*j+h*k-(b*i+e*j+d*k));b=i*e+0.0;d=j*e+0.0;e=k*e+0.0}else{b=0.0;d=0.0;e=0.0}z=+g[a+(o*56|0)+44>>2];b=b-z*(s-i*(s*i+u*j+t*k));d=d-z*(u-j*(s*i+u*j+t*k));t=e-z*(t-k*(s*i+u*j+t*k));u=+g[a+(o*56|0)+48>>2];g[l+8>>2]=n+u*b;g[l+12>>2]=f+u*d;g[l+16>>2]=u*t+h;y=c[m+8>>2]|0;x=a+(o*56|0)+52|0;u=+g[x>>2]*+g[p>>2];g[y+8>>2]=+g[y+8>>2]-b*u;g[y+12>>2]=+g[y+12>>2]-d*u;g[y+16>>2]=+g[y+16>>2]-t*u;y=c[m+12>>2]|0;u=+g[x>>2]*+g[q>>2];g[y+8>>2]=+g[y+8>>2]-b*u;g[y+12>>2]=+g[y+12>>2]-d*u;g[y+16>>2]=+g[y+16>>2]-t*u;y=c[m+16>>2]|0;u=+g[x>>2]*+g[r>>2];g[y+8>>2]=+g[y+8>>2]-b*u;g[y+12>>2]=+g[y+12>>2]-d*u;g[y+16>>2]=+g[y+16>>2]-t*u;o=o+1|0}while((o|0)!=(v|0));return}function zf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[b+12>>2]|0;k=c[b+32>>2]|0;if((k|0)>=(j|0))return;do if((c[b+36>>2]|0)<(j|0)){if(!j){g=k;d=0}else{c[6472]=(c[6472]|0)+1;d=ic((j<<2|3)+16|0)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}g=c[b+32>>2]|0}e=c[b+40>>2]|0;if((g|0)<=0){if(!e){a[b+44>>0]=1;c[b+40>>2]=d;c[b+36>>2]=j;i=b+40|0;break}}else{f=0;do{c[d+(f<<2)>>2]=c[e+(f<<2)>>2];f=f+1|0}while((f|0)!=(g|0))}if(a[b+44>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}a[b+44>>0]=1;c[b+40>>2]=d;c[b+36>>2]=j;i=b+40|0}else{d=c[b+40>>2]|0;i=b+40|0}while(0);Nk(d+(k<<2)|0,0,(j<<2)-(k<<2)|0)|0;c[b+32>>2]=j;h=c[b+52>>2]|0;if((h|0)<(j|0)){do if((c[b+56>>2]|0)<(j|0)){if(!j){g=h;d=0}else{c[6472]=(c[6472]|0)+1;d=ic((j<<2|3)+16|0)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}g=c[b+52>>2]|0}e=c[b+60>>2]|0;if((g|0)<=0){if(!e){a[b+64>>0]=1;c[b+60>>2]=d;c[b+56>>2]=j;break}}else{f=0;do{c[d+(f<<2)>>2]=c[e+(f<<2)>>2];f=f+1|0}while((f|0)!=(g|0))}if(a[b+64>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}a[b+64>>0]=1;c[b+60>>2]=d;c[b+56>>2]=j}else d=c[b+60>>2]|0;while(0);Nk(d+(h<<2)|0,0,(j<<2)-(h<<2)|0)|0}c[b+52>>2]=j;if((j|0)>0){Nk(c[i>>2]|0,-1,j<<2|0)|0;Nk(c[b+60>>2]|0,-1,j<<2|0)|0}if((k|0)<=0)return;g=c[b+16>>2]|0;d=c[i>>2]|0;e=c[b+60>>2]|0;f=0;do{j=c[g+(f*12|0)+4>>2]<<16|c[g+(f*12|0)>>2];j=(j+~(j<<15)>>10^j+~(j<<15))*9|0;j=d+((((j>>6^j)+~((j>>6^j)<<11)>>16^(j>>6^j)+~((j>>6^j)<<11))&(c[b+12>>2]|0)+-1)<<2)|0;c[e+(f<<2)>>2]=c[j>>2];c[j>>2]=f;f=f+1|0}while((f|0)!=(k|0));return}function Af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;g=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=g;if(g|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];c[b+20>>2]=c[a+72>>2];e=c[a+16>>2]|0;c[b+16>>2]=e;c[b+12>>2]=0;if(!e)return 16564;g=ub[c[(c[d>>2]|0)+16>>2]&63](d,76,e)|0;e=c[g+8>>2]|0;c[b+12>>2]=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;if((c[b+16>>2]|0)>0){f=0;while(1){h=c[a+24>>2]|0;c[e+72>>2]=c[h+(f*80|0)+72>>2];c[e+64>>2]=sb[c[(c[d>>2]|0)+28>>2]&31](d,c[h+(f*80|0)+64>>2]|0)|0;if(!(sb[c[(c[d>>2]|0)+24>>2]&31](d,c[(c[a+24>>2]|0)+(f*80|0)+64>>2]|0)|0)){h=c[(c[d>>2]|0)+16>>2]|0;i=c[(c[a+24>>2]|0)+(f*80|0)+64>>2]|0;i=qb[c[(c[i>>2]|0)+52>>2]&127](i)|0;i=ub[h&63](d,i,1)|0;h=c[(c[a+24>>2]|0)+(f*80|0)+64>>2]|0;h=ub[c[(c[h>>2]|0)+56>>2]&63](h,c[i+8>>2]|0,d)|0;Rb[c[(c[d>>2]|0)+20>>2]&31](d,i,h,1346455635,c[(c[a+24>>2]|0)+(f*80|0)+64>>2]|0)}i=c[a+24>>2]|0;c[e+68>>2]=c[i+(f*80|0)+68>>2];c[e>>2]=c[i+(f*80|0)>>2];c[e+4>>2]=c[i+(f*80|0)+4>>2];c[e+8>>2]=c[i+(f*80|0)+8>>2];c[e+12>>2]=c[i+(f*80|0)+12>>2];c[e+16>>2]=c[i+(f*80|0)+16>>2];c[e+20>>2]=c[i+(f*80|0)+20>>2];c[e+24>>2]=c[i+(f*80|0)+24>>2];c[e+28>>2]=c[i+(f*80|0)+28>>2];c[e+32>>2]=c[i+(f*80|0)+32>>2];c[e+36>>2]=c[i+(f*80|0)+36>>2];c[e+40>>2]=c[i+(f*80|0)+40>>2];c[e+44>>2]=c[i+(f*80|0)+44>>2];c[e+48>>2]=c[i+(f*80|0)+48>>2];c[e+52>>2]=c[i+(f*80|0)+52>>2];c[e+56>>2]=c[i+(f*80|0)+56>>2];c[e+60>>2]=c[i+(f*80|0)+60>>2];f=f+1|0;if((f|0)>=(c[b+16>>2]|0)){e=d;break}else e=e+76|0}}else e=d;Rb[c[(c[e>>2]|0)+20>>2]&31](d,g,16539,1497453121,c[g+8>>2]|0);return 16564}function Bf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;f=l;l=l+256|0;c[f+32>>2]=5884;k=f+32+36|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];m=f+32+52|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[f+32+212>>2]=a;c[f+32+216>>2]=e;c[f+32+68>>2]=1065353216;c[f+32+72>>2]=0;c[f+32+72+4>>2]=0;c[f+32+72+8>>2]=0;c[f+32+72+12>>2]=0;c[f+32+88>>2]=1065353216;c[f+32+92>>2]=0;c[f+32+92+4>>2]=0;c[f+32+92+8>>2]=0;c[f+32+92+12>>2]=0;c[f+32+108>>2]=1065353216;c[f+32+112>>2]=0;c[f+32+116>>2]=c[k>>2];c[f+32+116+4>>2]=c[k+4>>2];c[f+32+116+8>>2]=c[k+8>>2];c[f+32+116+12>>2]=c[k+12>>2];c[f+32+132>>2]=1065353216;c[f+32+136>>2]=0;c[f+32+136+4>>2]=0;c[f+32+136+8>>2]=0;c[f+32+136+12>>2]=0;c[f+32+152>>2]=1065353216;c[f+32+156>>2]=0;c[f+32+156+4>>2]=0;c[f+32+156+8>>2]=0;c[f+32+156+12>>2]=0;c[f+32+172>>2]=1065353216;c[f+32+176>>2]=0;c[f+32+180>>2]=c[d>>2];c[f+32+180+4>>2]=c[d+4>>2];c[f+32+180+8>>2]=c[d+8>>2];c[f+32+180+12>>2]=c[d+12>>2];n=+g[d>>2]-+g[b>>2];j=+g[d+4>>2]-+g[b+4>>2];i=+g[d+8>>2]-+g[b+8>>2];h=1.0/+C(+(n*n+j*j+i*i));q=n*h==0.0?999999984306749440.0:1.0/(n*h);g[f+32+4>>2]=q;p=j*h==0.0?999999984306749440.0:1.0/(j*h);g[f+32+8>>2]=p;o=i*h==0.0?999999984306749440.0:1.0/(i*h);g[f+32+12>>2]=o;c[f+32+20>>2]=q<0.0&1;c[f+32+24>>2]=p<0.0&1;c[f+32+28>>2]=o<0.0&1;g[f+32+32>>2]=n*h*(+g[m>>2]-+g[k>>2])+j*h*(+g[f+32+56>>2]-+g[f+32+40>>2])+i*h*(+g[f+32+60>>2]-+g[f+32+44>>2]);a=c[a+68>>2]|0;e=c[(c[a>>2]|0)+24>>2]|0;c[f+16>>2]=0;c[f+16+4>>2]=0;c[f+16+8>>2]=0;c[f+16+12>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;Tb[e&7](a,b,d,f+32|0,f+16|0,f);l=f;return}function Cf(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;h=l;l=l+128|0;if(!b){l=h;return}if(c[b+40>>2]|0){Cf(a,c[b+36>>2]|0,d+1|0,e,f);Cf(a,c[b+40>>2]|0,d+1|0,e,f)}if((d|0)<0){l=h;return}m=+g[b>>2];r=+g[b+16>>2];j=+g[b+4>>2];q=+g[b+20>>2];i=+g[b+8>>2];p=+g[b+24>>2];k=(m+r)*.5-(r-m)*.5;n=(j+q)*.5-(q-j)*.5;o=(i+p)*.5-(p-i)*.5;m=(m+r)*.5+(r-m)*.5;j=(j+q)*.5+(q-j)*.5;i=(i+p)*.5+(p-i)*.5;b=(c[b+40>>2]|0)==0?f:e;g[h>>2]=k;g[h+4>>2]=n;g[h+8>>2]=o;g[h+12>>2]=0.0;g[h+16>>2]=m;g[h+20>>2]=n;g[h+24>>2]=o;g[h+28>>2]=0.0;g[h+32>>2]=m;g[h+36>>2]=j;g[h+40>>2]=o;g[h+44>>2]=0.0;g[h+48>>2]=k;g[h+52>>2]=j;g[h+56>>2]=o;g[h+60>>2]=0.0;g[h+64>>2]=k;g[h+68>>2]=n;g[h+72>>2]=i;g[h+76>>2]=0.0;g[h+80>>2]=m;g[h+84>>2]=n;g[h+88>>2]=i;g[h+92>>2]=0.0;g[h+96>>2]=m;g[h+100>>2]=j;g[h+104>>2]=i;g[h+108>>2]=0.0;g[h+112>>2]=k;g[h+116>>2]=j;g[h+120>>2]=i;g[h+124>>2]=0.0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,h,h+16|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+16|0,h+32|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+32|0,h+48|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+48|0,h,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+64|0,h+80|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+80|0,h+96|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+96|0,h+112|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+112|0,h+64|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h,h+64|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+16|0,h+80|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+32|0,h+96|0,b);Nb[c[(c[a>>2]|0)+8>>2]&127](a,h+48|0,h+112|0,b);l=h;return}function Df(a,b,c,d,e,f,h,i){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=+f;h=+h;i=+i;var j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;z=+g[e>>2];y=+g[e+16>>2];x=+g[e+32>>2];w=+g[e+4>>2];v=+g[e+20>>2];u=+g[e+36>>2];t=+g[e+8>>2];s=+g[e+24>>2];r=+g[e+40>>2];j=d-((z*0.0+y*-i+x*h)*0.0+(w*0.0+v*-i+u*h)*i+(t*0.0+s*-i+r*h)*-h)+c;o=0.0-((z*0.0+y*-i+x*h)*-i+(w*0.0+v*-i+u*h)*0.0+(t*0.0+s*-i+r*h)*f)+0.0;l=0.0-((z*0.0+y*-i+x*h)*h+(w*0.0+v*-i+u*h)*-f+(t*0.0+s*-i+r*h)*0.0)+0.0;m=0.0-((z*i+y*0.0+x*-f)*0.0+(w*i+v*0.0+u*-f)*i+(t*i+s*0.0+r*-f)*-h)+0.0;n=d-((z*i+y*0.0+x*-f)*-i+(w*i+v*0.0+u*-f)*0.0+(t*i+s*0.0+r*-f)*f)+c;k=0.0-((z*i+y*0.0+x*-f)*h+(w*i+v*0.0+u*-f)*-f+(t*i+s*0.0+r*-f)*0.0)+0.0;p=0.0-((z*-h+y*f+x*0.0)*0.0+(w*-h+v*f+u*0.0)*i+(t*-h+s*f+r*0.0)*-h)+0.0;q=0.0-((z*-h+y*f+x*0.0)*-i+(w*-h+v*f+u*0.0)*0.0+(t*-h+s*f+r*0.0)*f)+0.0;h=d-((z*-h+y*f+x*0.0)*h+(w*-h+v*f+u*0.0)*-f+(t*-h+s*f+r*0.0)*0.0)+c;i=1.0/(l*(q*m-n*p)+(j*(n*h-k*q)+o*(k*p-h*m)));g[a>>2]=(q*m-n*p)*i*0.0+(1.0/b*(n*h-k*q)*i+(k*p-h*m)*i*0.0);g[a+4>>2]=(p*o-q*j)*i*0.0+(1.0/b*(q*l-h*o)*i+(h*j-p*l)*i*0.0);g[a+8>>2]=(n*j-m*o)*i*0.0+(1.0/b*(k*o-n*l)*i+(m*l-k*j)*i*0.0);g[a+12>>2]=0.0;g[a+16>>2]=(q*m-n*p)*i*0.0+((n*h-k*q)*i*0.0+1.0/b*(k*p-h*m)*i);g[a+20>>2]=(p*o-q*j)*i*0.0+((q*l-h*o)*i*0.0+1.0/b*(h*j-p*l)*i);g[a+24>>2]=(n*j-m*o)*i*0.0+((k*o-n*l)*i*0.0+1.0/b*(m*l-k*j)*i);g[a+28>>2]=0.0;g[a+32>>2]=1.0/b*(q*m-n*p)*i+((n*h-k*q)*i*0.0+(k*p-h*m)*i*0.0);g[a+36>>2]=1.0/b*(p*o-q*j)*i+((q*l-h*o)*i*0.0+(h*j-p*l)*i*0.0);g[a+40>>2]=1.0/b*(n*j-m*o)*i+((k*o-n*l)*i*0.0+(m*l-k*j)*i*0.0);g[a+44>>2]=0.0;return}function Ef(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0;r=l;l=l+96|0;n=r;o=n+96|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));if(!i)q=c[c[b+880>>2]>>2]|0;else q=i;i=c[b+772>>2]|0;if((i|0)==(c[b+776>>2]|0)?(p=i|0?i<<1:1,(i|0)<(p|0)):0){if(!p)j=0;else{c[6472]=(c[6472]|0)+1;i=ic((p*104|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[b+772>>2]|0}if((i|0)>0){k=0;do{n=j+(k*104|0)|0;m=(c[b+780>>2]|0)+(k*104|0)|0;o=n+104|0;do{c[n>>2]=c[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(o|0));k=k+1|0}while((k|0)!=(i|0))}i=c[b+780>>2]|0;if(i|0){if(a[b+784>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[b+780>>2]=0}a[b+784>>0]=1;c[b+780>>2]=j;c[b+776>>2]=p;i=c[b+772>>2]|0}n=c[b+780>>2]|0;c[n+(i*104|0)>>2]=0;c[n+(i*104|0)+4>>2]=q;n=n+(i*104|0)+8|0;m=r;o=n+96|0;do{c[n>>2]=c[m>>2];n=n+4|0;m=m+4|0}while((n|0)<(o|0));q=c[b+772>>2]|0;c[b+772>>2]=q+1;p=c[b+780>>2]|0;k=c[b+720>>2]|0;c[p+(q*104|0)+8>>2]=k+(d*104|0);o=c[b+720>>2]|0;c[p+(q*104|0)+12>>2]=o+(e*104|0);m=c[b+720>>2]|0;c[p+(q*104|0)+16>>2]=m+(f*104|0);n=c[b+720>>2]|0;c[p+(q*104|0)+20>>2]=n+(h*104|0);z=+g[k+(d*104|0)+8>>2];w=+g[k+(d*104|0)+12>>2];A=+g[k+(d*104|0)+16>>2];t=+g[m+(f*104|0)+8>>2]-z;y=+g[m+(f*104|0)+12>>2]-w;v=+g[m+(f*104|0)+16>>2]-A;u=+g[n+(h*104|0)+8>>2]-z;x=+g[n+(h*104|0)+12>>2]-w;s=+g[n+(h*104|0)+16>>2]-A;g[p+(q*104|0)+24>>2]=(+g[o+(e*104|0)+16>>2]-A)*(t*x-y*u)+((+g[o+(e*104|0)+8>>2]-z)*(y*s-v*x)+(+g[o+(e*104|0)+12>>2]-w)*(v*u-t*s));a[b+924>>0]=1;l=r;return}function Ff(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0;f=l;l=l+784|0;c[f+712>>2]=1065353216;c[f+712+4>>2]=0;c[f+712+4+4>>2]=0;c[f+712+4+8>>2]=0;c[f+712+4+12>>2]=0;c[f+712+20>>2]=1065353216;c[f+712+24>>2]=0;c[f+712+24+4>>2]=0;c[f+712+24+8>>2]=0;c[f+712+24+12>>2]=0;c[f+712+40>>2]=1065353216;e=f+712+44|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[f+536>>2]=3832;c[f+536+168>>2]=0;g[f+536+172>>2]=0.0;c[f+536+164>>2]=c[b+200>>2];e=c[b+196>>2]|0;c[f+480+8>>2]=0;c[f+480+12>>2]=1065353216;c[f+480+16>>2]=1065353216;c[f+480+20>>2]=1065353216;g[f+480+24>>2]=0.0;c[f+480>>2]=6864;c[f+480+4>>2]=8;c[f+480+28>>2]=e;c[f+480+44>>2]=e;c[f+376+8>>2]=0;c[f+376+12>>2]=1065353216;c[f+376+16>>2]=1065353216;c[f+376+20>>2]=1065353216;g[f+376+24>>2]=0.0;g[f+376+44>>2]=.03999999910593033;c[f+376+52>>2]=0;c[f+376>>2]=3860;c[f+376+4>>2]=1;c[f+376+56>>2]=c[d>>2];c[f+376+56+4>>2]=c[d+4>>2];c[f+376+56+8>>2]=c[d+8>>2];c[f+376+56+12>>2]=c[d+12>>2];c[f+376+72>>2]=c[d+16>>2];c[f+376+72+4>>2]=c[d+16+4>>2];c[f+376+72+8>>2]=c[d+16+8>>2];c[f+376+72+12>>2]=c[d+16+12>>2];c[f+376+88>>2]=c[d+32>>2];c[f+376+88+4>>2]=c[d+32+4>>2];c[f+376+88+8>>2]=c[d+32+8>>2];c[f+376+88+12>>2]=c[d+32+12>>2];g[f+16+308>>2]=9.999999747378752e-05;a[f+16+332>>0]=0;c[f>>2]=5156;c[f+4>>2]=f+16;c[f+8>>2]=f+480;c[f+12>>2]=f+376;if(_c(f,b+4|0,b+68|0,f+712|0,f+712|0,f+536|0)|0?(h=+g[f+536+164>>2],+g[b+200>>2]>h):0)g[b+200>>2]=h;c[f+376>>2]=7316;e=c[f+376+52>>2]|0;if(!e){l=f;return}Ab[c[c[e>>2]>>2]&511](e);e=c[f+376+52>>2]|0;if(!e){l=f;return}c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);l=f;return}function Gf(d,e,f,g,h,i,j,k,m){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0;o=l;l=l+48|0;c[6472]=(c[6472]|0)+1;g=ic(83)|0;if(!g)n=0;else{c[(g+4+15&-16)+-4>>2]=g;n=g+4+15&-16}c[n>>2]=h;b[n+4>>1]=i;b[n+6>>1]=j;i=n+16|0;c[i>>2]=c[e>>2];c[i+4>>2]=c[e+4>>2];c[i+8>>2]=c[e+8>>2];c[i+12>>2]=c[e+12>>2];i=n+32|0;c[i>>2]=c[f>>2];c[i+4>>2]=c[f+4>>2];c[i+8>>2]=c[f+8>>2];c[i+12>>2]=c[f+12>>2];c[n+8>>2]=0;i=n+56|0;c[i>>2]=0;j=n+52|0;c[j>>2]=0;c[o+16>>2]=c[e>>2];c[o+16+4>>2]=c[e+4>>2];c[o+16+8>>2]=c[e+8>>2];c[o+16+12>>2]=c[e+12>>2];c[o+16+16>>2]=c[f>>2];c[o+16+16+4>>2]=c[f+4>>2];c[o+16+16+8>>2]=c[f+8>>2];c[o+16+16+12>>2]=c[f+12>>2];c[n+60>>2]=c[d+144>>2];g=(c[d+188>>2]|0)+1|0;c[d+188>>2]=g;c[n+12>>2]=g;g=c[d+8>>2]|0;if(!g){c[6472]=(c[6472]|0)+1;g=ic(63)|0;if(!g)g=0;else{c[(g+4+15&-16)+-4>>2]=g;g=g+4+15&-16}k=g;m=k+44|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0))}else c[d+8>>2]=0;c[g+32>>2]=0;c[g+36>>2]=n;c[g+40>>2]=0;c[g>>2]=c[o+16>>2];c[g+4>>2]=c[o+16+4>>2];c[g+8>>2]=c[o+16+8>>2];c[g+12>>2]=c[o+16+12>>2];c[g+16>>2]=c[o+16+16>>2];c[g+20>>2]=c[o+16+20>>2];c[g+24>>2]=c[o+16+24>>2];c[g+28>>2]=c[o+16+28>>2];af(d+4|0,c[d+4>>2]|0,g);c[d+16>>2]=(c[d+16>>2]|0)+1;c[n+48>>2]=g;k=d+124+(c[d+144>>2]<<2)|0;c[j>>2]=0;c[i>>2]=c[k>>2];g=c[k>>2]|0;if(g|0)c[g+52>>2]=n;c[k>>2]=n;if(a[d+193>>0]|0){l=o;return n|0}c[o>>2]=9096;c[o+4>>2]=d;c[o+8>>2]=n;Ue(c[d+4>>2]|0,o+16|0,o);Ue(c[d+64>>2]|0,o+16|0,o);l=o;return n|0}function Hf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0;f=l;l=l+608|0;p=+g[d+116>>2]-+g[d+52>>2];o=+g[d+120>>2]-+g[d+56>>2];n=+g[d+124>>2]-+g[d+60>>2];i=+g[e+116>>2]-+g[e+52>>2];k=+g[e+120>>2]-+g[e+56>>2];j=+g[e+124>>2]-+g[e+60>>2];m=+g[d+252>>2];if(p*p+o*o+n*n>2],i*i+k*k+j*j>2]|0;h=c[e+248>>2]|0;c[f+552+8>>2]=0;c[f+552+12>>2]=1065353216;c[f+552+16>>2]=1065353216;c[f+552+20>>2]=1065353216;g[f+552+24>>2]=0.0;c[f+552>>2]=6864;c[f+552+4>>2]=8;c[f+552+28>>2]=h;c[f+552+44>>2]=h;c[f+376>>2]=3832;g[f+376+164>>2]=999999984306749440.0;c[f+376+168>>2]=0;g[f+376+172>>2]=0.0;g[f+16+308>>2]=9.999999747378752e-05;a[f+16+332>>0]=0;c[f>>2]=9332;c[f+4>>2]=f+16;c[f+8>>2]=b;c[f+12>>2]=f+552;if(od(f,d+4|0,d+68|0,e+4|0,e+68|0,f+376|0)|0){i=+g[f+376+164>>2];if(+g[d+244>>2]>i)g[d+244>>2]=i;if(+g[e+244>>2]>i)g[e+244>>2]=i;if(i<1.0)j=i;else j=1.0}else j=1.0;b=c[e+192>>2]|0;h=c[d+248>>2]|0;c[f+552+8>>2]=0;c[f+552+12>>2]=1065353216;c[f+552+16>>2]=1065353216;c[f+552+20>>2]=1065353216;g[f+552+24>>2]=0.0;c[f+552>>2]=6864;c[f+552+4>>2]=8;c[f+552+28>>2]=h;c[f+552+44>>2]=h;c[f+376>>2]=3832;g[f+376+164>>2]=999999984306749440.0;c[f+376+168>>2]=0;g[f+376+172>>2]=0.0;g[f+16+308>>2]=9.999999747378752e-05;a[f+16+332>>0]=0;c[f>>2]=9332;c[f+4>>2]=f+16;c[f+8>>2]=f+552;c[f+12>>2]=b;if(od(f,d+4|0,d+68|0,e+4|0,e+68|0,f+376|0)|0){i=+g[f+376+164>>2];if(+g[d+244>>2]>i)g[d+244>>2]=i;if(+g[e+244>>2]>i)g[e+244>>2]=i;if(!(j>i))i=j}else i=j;p=i;l=f;return +p}function If(a,d){a=a|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0;e=l;l=l+128|0;G=c[(c[a+8>>2]|0)+24>>2]|0;h=c[G+(d*80|0)+64>>2]|0;f=c[a+12>>2]|0;x=+g[G+(d*80|0)>>2];D=+g[f>>2];w=+g[G+(d*80|0)+16>>2];C=+g[f+4>>2];v=+g[G+(d*80|0)+32>>2];B=+g[f+8>>2];u=+g[G+(d*80|0)+4>>2];t=+g[G+(d*80|0)+20>>2];s=+g[G+(d*80|0)+36>>2];r=+g[G+(d*80|0)+8>>2];p=+g[G+(d*80|0)+24>>2];n=+g[G+(d*80|0)+40>>2];A=+g[f+16>>2];z=+g[f+20>>2];y=+g[f+24>>2];q=+g[f+32>>2];o=+g[f+36>>2];m=+g[f+40>>2];F=+g[G+(d*80|0)+48>>2];E=+g[G+(d*80|0)+52>>2];i=+g[G+(d*80|0)+56>>2];k=+g[f+48>>2]+(D*F+C*E+B*i);j=A*F+z*E+y*i+ +g[f+52>>2];i=q*F+o*E+m*i+ +g[f+56>>2];g[e+56>>2]=x*D+w*C+v*B;g[e+56+4>>2]=D*u+C*t+B*s;g[e+56+8>>2]=D*r+C*p+B*n;g[e+56+12>>2]=0.0;g[e+56+16>>2]=x*A+w*z+v*y;g[e+56+20>>2]=u*A+t*z+s*y;g[e+56+24>>2]=r*A+p*z+n*y;g[e+56+28>>2]=0.0;g[e+56+32>>2]=x*q+w*o+v*m;g[e+56+36>>2]=u*q+t*o+s*m;g[e+56+40>>2]=r*q+p*o+n*m;g[e+56+44>>2]=0.0;g[e+56+48>>2]=k;g[e+56+52>>2]=j;g[e+56+56>>2]=i;g[e+56+60>>2]=0.0;f=c[a+4>>2]|0;c[e+32>>2]=0;c[e+32+4>>2]=h;c[e+32+8>>2]=f;c[e+32+12>>2]=e+56;c[e+32+16>>2]=-1;c[e+32+20>>2]=d;f=c[a+24>>2]|0;g[e+4>>2]=1.0;c[e+8>>2]=0;b[e+12>>1]=1;b[e+14>>1]=-1;c[e+16>>2]=0;c[e>>2]=5988;c[e+20>>2]=f;c[e+24>>2]=d;c[e+4>>2]=c[f+4>>2];c[e+16>>2]=c[f+16>>2];Kc(c[a+16>>2]|0,c[a+20>>2]|0,e+32|0,e);l=e;return}function Jf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0;i=l;l=l+80|0;f=+gb[c[(c[a>>2]|0)+48>>2]&15](a);h=0;do{q=i+64+(h<<2)|0;c[i+64>>2]=0;c[i+64+4>>2]=0;c[i+64+8>>2]=0;c[i+64+12>>2]=0;g[q>>2]=1.0;j=c[(c[a>>2]|0)+64>>2]|0;k=+g[i+64>>2];m=+g[i+64+4>>2];n=+g[i+64+8>>2];o=k*+g[b+4>>2]+m*+g[b+20>>2]+n*+g[b+36>>2];p=k*+g[b+8>>2]+m*+g[b+24>>2]+n*+g[b+40>>2];g[i+32>>2]=+g[b>>2]*k+ +g[b+16>>2]*m+ +g[b+32>>2]*n;g[i+32+4>>2]=o;g[i+32+8>>2]=p;g[i+32+12>>2]=0.0;Kb[j&127](i+48|0,a,i+32|0);p=+g[i+48>>2];o=+g[i+48+4>>2];n=+g[i+48+8>>2];m=p*+g[b+16>>2]+o*+g[b+20>>2]+n*+g[b+24>>2]+ +g[b+52>>2];k=p*+g[b+32>>2]+o*+g[b+36>>2]+n*+g[b+40>>2]+ +g[b+56>>2];g[i+32>>2]=p*+g[b>>2]+o*+g[b+4>>2]+n*+g[b+8>>2]+ +g[b+48>>2];g[i+32+4>>2]=m;g[i+32+8>>2]=k;g[i+32+12>>2]=0.0;j=i+32+(h<<2)|0;g[e+(h<<2)>>2]=f+ +g[j>>2];g[q>>2]=-1.0;q=c[(c[a>>2]|0)+64>>2]|0;k=+g[i+64>>2];m=+g[i+64+4>>2];n=+g[i+64+8>>2];o=k*+g[b+4>>2]+m*+g[b+20>>2]+n*+g[b+36>>2];p=k*+g[b+8>>2]+m*+g[b+24>>2]+n*+g[b+40>>2];g[i>>2]=+g[b>>2]*k+ +g[b+16>>2]*m+ +g[b+32>>2]*n;g[i+4>>2]=o;g[i+8>>2]=p;g[i+12>>2]=0.0;Kb[q&127](i+16|0,a,i);p=+g[i+16>>2];o=+g[i+16+4>>2];n=+g[i+16+8>>2];m=p*+g[b+16>>2]+o*+g[b+20>>2]+n*+g[b+24>>2]+ +g[b+52>>2];k=p*+g[b+32>>2]+o*+g[b+36>>2]+n*+g[b+40>>2]+ +g[b+56>>2];g[i+32>>2]=p*+g[b>>2]+o*+g[b+4>>2]+n*+g[b+8>>2]+ +g[b+48>>2];g[i+32+4>>2]=m;g[i+32+8>>2]=k;g[i+32+12>>2]=0.0;g[d+(h<<2)>>2]=+g[j>>2]-f;h=h+1|0}while((h|0)!=3);l=i;return}function Kf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0;k=l;l=l+160|0;i=c[b+12>>2]|0;if(!i){l=k;return}m=(a[b+16>>0]|0)!=0;n=m?e:d;e=m?d:e;p=c[n+4>>2]|0;o=c[e+4>>2]|0;c[h+4>>2]=i;d=c[i+752>>2]|0;c[k+136>>2]=9496;c[k+136+4>>2]=p;c[k+136+8>>2]=o;c[k+136+12>>2]=d;g[k+128>>2]=999999984306749440.0;d=c[n+12>>2]|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[k+16>>2]=c[d+16>>2];c[k+16+4>>2]=c[d+16+4>>2];c[k+16+8>>2]=c[d+16+8>>2];c[k+16+12>>2]=c[d+16+12>>2];c[k+32>>2]=c[d+32>>2];c[k+32+4>>2]=c[d+32+4>>2];c[k+32+8>>2]=c[d+32+8>>2];c[k+32+12>>2]=c[d+32+12>>2];c[k+48>>2]=c[d+48>>2];c[k+48+4>>2]=c[d+48+4>>2];c[k+48+8>>2]=c[d+48+8>>2];c[k+48+12>>2]=c[d+48+12>>2];e=c[e+12>>2]|0;c[k+64>>2]=c[e>>2];c[k+64+4>>2]=c[e+4>>2];c[k+64+8>>2]=c[e+8>>2];c[k+64+12>>2]=c[e+12>>2];c[k+80>>2]=c[e+16>>2];c[k+80+4>>2]=c[e+16+4>>2];c[k+80+8>>2]=c[e+16+8>>2];c[k+80+12>>2]=c[e+16+12>>2];c[k+96>>2]=c[e+32>>2];c[k+96+4>>2]=c[e+32+4>>2];c[k+96+8>>2]=c[e+32+8>>2];c[k+96+12>>2]=c[e+32+12>>2];c[k+112>>2]=c[e+48>>2];c[k+112+4>>2]=c[e+48+4>>2];c[k+112+8>>2]=c[e+48+8>>2];c[k+112+12>>2]=c[e+48+12>>2];Md(k+136|0,k,h,c[f+20>>2]|0,m);do if(a[b+8>>0]|0?(j=c[h+4>>2]|0,c[j+748>>2]|0):0){e=c[j+740>>2]|0;d=c[(c[h+8>>2]|0)+8>>2]|0;i=c[(c[h+12>>2]|0)+8>>2]|0;if((e|0)==(d|0)){Oe(j,e+4|0,i+4|0);break}else{Oe(j,i+4|0,d+4|0);break}}while(0);l=k;return}function Lf(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0;b=c[a+752>>2]|0;if((b|0)>0){d=c[a+760>>2]|0;e=0;do{f=c[d+(e*44|0)+8>>2]|0;h=c[d+(e*44|0)+12>>2]|0;i=c[d+(e*44|0)+16>>2]|0;l=+g[f+8>>2];n=+g[f+12>>2];j=+g[f+16>>2];k=+g[h+8>>2]-l;o=+g[h+12>>2]-n;m=+g[h+16>>2]-j;l=+g[i+8>>2]-l;n=+g[i+12>>2]-n;j=+g[i+16>>2]-j;g[d+(e*44|0)+36>>2]=+C(+((k*n-o*l)*(k*n-o*l)+((o*j-m*n)*(o*j-m*n)+(m*l-k*j)*(m*l-k*j))));e=e+1|0}while((e|0)!=(b|0))}d=c[a+712>>2]|0;if((d|0)>0){c[6472]=(c[6472]|0)+1;b=ic((d<<2|3)+16|0)|0;if(!b)f=0;else{c[(b+4+15&-16)+-4>>2]=b;f=b+4+15&-16}Nk(f|0,0,d<<2|0)|0;d=c[a+712>>2]|0;if((d|0)>0){b=c[a+720>>2]|0;e=0;do{g[b+(e*104|0)+92>>2]=0.0;e=e+1|0}while((e|0)!=(d|0));i=f;h=f}else{i=f;h=f}}else{i=0;h=0}f=c[a+752>>2]|0;if((f|0)>0){b=c[a+760>>2]|0;d=c[a+720>>2]|0;e=0;do{o=+B(+(+g[b+(e*44|0)+36>>2]));p=c[b+(e*44|0)+8>>2]|0;q=h+(((p-d|0)/104|0)<<2)|0;c[q>>2]=(c[q>>2]|0)+1;g[p+92>>2]=o+ +g[p+92>>2];p=c[b+(e*44|0)+12>>2]|0;q=h+(((p-d|0)/104|0)<<2)|0;c[q>>2]=(c[q>>2]|0)+1;g[p+92>>2]=o+ +g[p+92>>2];p=c[b+(e*44|0)+16>>2]|0;q=h+(((p-d|0)/104|0)<<2)|0;c[q>>2]=(c[q>>2]|0)+1;g[p+92>>2]=o+ +g[p+92>>2];e=e+1|0}while((e|0)!=(f|0));d=c[a+712>>2]|0}if((d|0)>0){e=0;do{b=c[h+(e<<2)>>2]|0;if((b|0)>0){q=(c[a+720>>2]|0)+(e*104|0)+92|0;g[q>>2]=+g[q>>2]/+(b|0)}else g[(c[a+720>>2]|0)+(e*104|0)+92>>2]=0.0;e=e+1|0}while((e|0)!=(d|0));if(!i)return}else if((h|0)==0|(i|0)==0)return;c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);return}function Mf(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;m=l;l=l+16|0;bj(12232);e=c[b+232>>2]|0;if((e|0)>0){k=(a[26472]|0)==0;j=0;do{i=c[(c[b+240>>2]|0)+(j<<2)>>2]|0;a:do if(i){f=c[i+216>>2]|0;b:do switch(f|0){case 4:case 2:{if((f|0)==4)break a;break}default:{q=+g[i+312>>2];p=+g[i+316>>2];o=+g[i+320>>2];n=+g[i+472>>2];if(q*q+p*p+o*o>2],o=+g[i+332>>2],p=+g[i+336>>2],q=+g[i+476>>2],n*n+o*o+p*p>2]=+g[i+220>>2]+d;break b}g[i+220>>2]=0.0;if((f&-2|0)!=4){c[i+216>>2]=0;f=0}}}while(0);h=f&-2;do if(k){if((h|0)!=2?!(+g[i+220>>2]>2.0):0)break;if(c[i+204>>2]&3|0){if((h|0)==4)break a;c[i+216>>2]=2;break a}if((f|0)==1){if((h|0)==4)break a;c[i+216>>2]=3;break a}else{if((f|0)!=2)break a;e=(c[i+260>>2]|0)+2|0;c[i+328>>2]=0;c[i+328+4>>2]=0;c[i+328+8>>2]=0;c[i+328+12>>2]=0;c[i+260>>2]=e;c[i+312>>2]=0;c[i+312+4>>2]=0;c[i+312+8>>2]=0;c[i+312+12>>2]=0;e=c[b+232>>2]|0;break a}}while(0);if((h|0)!=4)c[i+216>>2]=1}while(0);j=j+1|0}while((j|0)<(e|0))}e=c[2405]|0;k=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=k;if(k|0){l=m;return}do if(c[e+4>>2]|0){Za(m|0,0)|0;k=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[m+4>>2]|0)-(c[k+4>>2]|0)+(((c[m>>2]|0)-(c[k>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[e+16>>2]|0)){e=c[2405]|0;break}else{l=m;return}}while(0);c[2405]=c[e+20>>2];l=m;return}function Nf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0;I=l;l=l+32|0;j=+g[b+16>>2];f=+g[b>>2];k=+g[b+20>>2];h=+g[b+4>>2];o=+g[b+24>>2];i=+g[b+8>>2];t=+g[b+32>>2];x=+g[b+36>>2];y=+g[b+40>>2];F=(k-h)*(y-i)-(o-i)*(x-h);G=(o-i)*(t-f)-(j-f)*(y-i);H=(j-f)*(x-h)-(k-h)*(t-f);g[I+16>>2]=F;g[I+16+4>>2]=G;g[I+16+8>>2]=H;g[I+16+12>>2]=0.0;p=+g[a+4>>2];r=+g[a+8>>2];v=+g[a+12>>2];E=F*p+G*r+H*v-(f*F+h*G+i*H);n=+g[a+20>>2];s=+g[a+24>>2];w=+g[a+28>>2];if(E*(F*n+G*s+H*w-(f*F+h*G+i*H))>=0.0){l=I;return}B=c[a+36>>2]|0;if(E<=0.0&(B&1|0)!=0){l=I;return}D=E/(E-(F*n+G*s+H*w-(f*F+h*G+i*H)));if(!(D<+g[a+40>>2])){l=I;return}A=(F*F+G*G+H*H)*-9.999999747378752e-05;z=f-(n*D+p*(1.0-D));u=h-(s*D+r*(1.0-D));q=i-(w*D+v*(1.0-D));m=j-(n*D+p*(1.0-D));k=k-(s*D+r*(1.0-D));j=o-(w*D+v*(1.0-D));if(!(H*(z*k-u*m)+(F*(u*j-q*k)+G*(q*m-z*j))>=A)){l=I;return}i=t-(n*D+p*(1.0-D));h=x-(s*D+r*(1.0-D));f=y-(w*D+v*(1.0-D));if(!(H*(m*h-k*i)+(F*(k*f-j*h)+G*(j*i-m*f))>=A)){l=I;return}if(!(H*(u*i-z*h)+(F*(q*h-u*f)+G*(z*f-q*i))>=A)){l=I;return}f=1.0/+C(+(F*F+G*G+H*H));g[I+16>>2]=F*f;g[I+16+4>>2]=G*f;g[I+16+8>>2]=H*f;b=c[(c[a>>2]|0)+12>>2]|0;if(E<=0.0&(B&2|0)==0){g[I>>2]=-(F*f);g[I+4>>2]=-(G*f);g[I+8>>2]=-(H*f);g[I+12>>2]=0.0;g[a+40>>2]=+ib[b&3](a,I,D,d,e);l=I;return}else{g[a+40>>2]=+ib[b&3](a,I+16|0,D,d,e);l=I;return}}function Of(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0;k=l;l=l+144|0;i=c[b+12>>2]|0;if(!i){l=k;return}n=c[d+4>>2]|0;m=c[e+4>>2]|0;c[h+4>>2]=i;g[k+12+128>>2]=999999984306749440.0;d=c[d+12>>2]|0;c[k+12>>2]=c[d>>2];c[k+12+4>>2]=c[d+4>>2];c[k+12+8>>2]=c[d+8>>2];c[k+12+12>>2]=c[d+12>>2];c[k+12+16>>2]=c[d+16>>2];c[k+12+16+4>>2]=c[d+16+4>>2];c[k+12+16+8>>2]=c[d+16+8>>2];c[k+12+16+12>>2]=c[d+16+12>>2];c[k+12+32>>2]=c[d+32>>2];c[k+12+32+4>>2]=c[d+32+4>>2];c[k+12+32+8>>2]=c[d+32+8>>2];c[k+12+32+12>>2]=c[d+32+12>>2];c[k+12+48>>2]=c[d+48>>2];c[k+12+48+4>>2]=c[d+48+4>>2];c[k+12+48+8>>2]=c[d+48+8>>2];c[k+12+48+12>>2]=c[d+48+12>>2];e=c[e+12>>2]|0;c[k+12+64>>2]=c[e>>2];c[k+12+64+4>>2]=c[e+4>>2];c[k+12+64+8>>2]=c[e+8>>2];c[k+12+64+12>>2]=c[e+12>>2];c[k+12+80>>2]=c[e+16>>2];c[k+12+80+4>>2]=c[e+16+4>>2];c[k+12+80+8>>2]=c[e+16+8>>2];c[k+12+80+12>>2]=c[e+16+12>>2];c[k+12+96>>2]=c[e+32>>2];c[k+12+96+4>>2]=c[e+32+4>>2];c[k+12+96+8>>2]=c[e+32+8>>2];c[k+12+96+12>>2]=c[e+32+12>>2];c[k+12+112>>2]=c[e+48>>2];c[k+12+112+4>>2]=c[e+48+4>>2];c[k+12+112+8>>2]=c[e+48+8>>2];c[k+12+112+12>>2]=c[e+48+12>>2];c[k>>2]=9476;c[k+4>>2]=n;c[k+8>>2]=m;ec(k,k+12|0,h,c[f+20>>2]|0,0);do if(a[b+8>>0]|0?(j=c[h+4>>2]|0,c[j+748>>2]|0):0){d=c[j+740>>2]|0;e=c[(c[h+8>>2]|0)+8>>2]|0;i=c[(c[h+12>>2]|0)+8>>2]|0;if((d|0)==(e|0)){Oe(j,d+4|0,i+4|0);break}else{Oe(j,i+4|0,e+4|0);break}}while(0);l=k;return}function Pf(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0;r=l;l=l+80|0;g[r+16+60>>2]=0.0;g[r+16+8>>2]=0.0;g[r+16+12>>2]=.10000000149011612;g[r+16+16>>2]=300.0;g[r+16>>2]=1.0;g[r+16+4>>2]=-1.0;g[r+16+28>>2]=0.0;g[r+16+32>>2]=.20000000298023224;g[r+16+36>>2]=0.0;g[r+16+40>>2]=0.0;g[r+16+20>>2]=1.0;g[r+16+24>>2]=.5;c[r+16+56>>2]=0;g[r+16+48>>2]=0.0;a[r+16+44>>0]=0;p=0;do{o=c[b+856+(p<<2)>>2]|0;n=a[b+788+p>>0]|0;if(!o){if(n<<24>>24){n=1;q=5}}else q=5;if((q|0)==5){q=0;g[r+16+40>>2]=0.0;c[r+16+56>>2]=o;c[r+16+52>>2]=c[b+840+(p<<2)>>2];c[r+16+48>>2]=c[b+824+(p<<2)>>2];c[r+16+20>>2]=c[b+732>>2];a[r+16+44>>0]=n;c[r+16+4>>2]=c[b+696+(p<<2)>>2];c[r+16+24>>2]=c[b+728>>2];c[r+16>>2]=c[b+680+(p<<2)>>2];g[r+16+16>>2]=0.0;c[r+16+12>>2]=c[b+808+(p<<2)>>2];c[r+16+8>>2]=c[b+792+(p<<2)>>2];c[r>>2]=c[b+1064+(p<<2)>>2];c[r+4>>2]=c[b+1080+(p<<2)>>2];c[r+8>>2]=c[b+1096+(p<<2)>>2];g[r+12>>2]=0.0;o=c[b+1304>>2]>>p*3;if(!(o&1))n=c[d+32>>2]|0;else n=b+740+(p<<2)|0;c[r+16+28>>2]=c[n>>2];if(!(o&2))n=c[d+32>>2]|0;else n=b+772+(p<<2)|0;c[r+16+36>>2]=c[n>>2];c[r+16+32>>2]=c[((o&4|0)==0?d+4|0:b+756+(p<<2)|0)>>2];if(a[b+1301>>0]|0){o=p+1|0;if(!(c[b+868+(((o|0)==3?0:o)<<6)+56>>2]|0))n=1;else n=(c[b+868+(((p+2|0)%3|0)<<6)+56>>2]|0)==0&1}else n=0;e=(md(b,r+16|0,f,h,i,j,k,m,d,e,r,0,n)|0)+e|0}p=p+1|0}while((p|0)!=3);l=r;return e|0}function Qf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;q=l;l=l+48|0;if((f|0)==(d|0)|((d|0)==(e|0)|(e|0)==(f|0))){l=q;return}m=q;n=m+36|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));if(!h)p=c[c[b+880>>2]>>2]|0;else p=h;h=c[b+752>>2]|0;if((h|0)==(c[b+756>>2]|0)?(o=h|0?h<<1:1,(h|0)<(o|0)):0){if(!o)i=0;else{c[6472]=(c[6472]|0)+1;h=ic((o*44|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=c[b+752>>2]|0}if((h|0)>0){j=0;do{m=i+(j*44|0)|0;k=(c[b+760>>2]|0)+(j*44|0)|0;n=m+44|0;do{c[m>>2]=c[k>>2];m=m+4|0;k=k+4|0}while((m|0)<(n|0));j=j+1|0}while((j|0)!=(h|0))}h=c[b+760>>2]|0;if(h|0){if(a[b+764>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+760>>2]=0}a[b+764>>0]=1;c[b+760>>2]=i;c[b+756>>2]=o;h=c[b+752>>2]|0}m=c[b+760>>2]|0;c[m+(h*44|0)>>2]=0;c[m+(h*44|0)+4>>2]=p;m=m+(h*44|0)+8|0;k=q;n=m+36|0;do{c[m>>2]=c[k>>2];m=m+4|0;k=k+4|0}while((m|0)<(n|0));p=c[b+752>>2]|0;c[b+752>>2]=p+1;o=c[b+760>>2]|0;k=c[b+720>>2]|0;c[o+(p*44|0)+8>>2]=k+(d*104|0);m=c[b+720>>2]|0;c[o+(p*44|0)+12>>2]=m+(e*104|0);n=c[b+720>>2]|0;c[o+(p*44|0)+16>>2]=n+(f*104|0);t=+g[k+(d*104|0)+8>>2];v=+g[k+(d*104|0)+12>>2];r=+g[k+(d*104|0)+16>>2];s=+g[m+(e*104|0)+8>>2]-t;w=+g[m+(e*104|0)+12>>2]-v;u=+g[m+(e*104|0)+16>>2]-r;t=+g[n+(f*104|0)+8>>2]-t;v=+g[n+(f*104|0)+12>>2]-v;r=+g[n+(f*104|0)+16>>2]-r;g[o+(p*44|0)+36>>2]=+C(+((s*v-w*t)*(s*v-w*t)+((w*r-u*v)*(w*r-u*v)+(u*t-s*r)*(u*t-s*r))));a[b+924>>0]=1;l=q;return}function Rf(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;if((c[b+104>>2]|0)>0){l=0;do{h=c[(c[b+4>>2]|0)+684>>2]|0;k=(c[b+112>>2]|0)+(l<<3)+4|0;d=c[k>>2]|0;if((c[h+60>>2]|0)>0){j=0;do{i=(c[h+68>>2]|0)+(j<<2)|0;e=c[i>>2]|0;a:do if(e|0){f=0;do{g=f+280|0;b:do if(!f)while(1){f=e;e=c[e+280>>2]|0;if((c[f+276>>2]|0)!=(d|0))break b;c[i>>2]=e;_H(f);if(!e)break a}else while(1){f=e;e=c[e+280>>2]|0;if((c[f+276>>2]|0)!=(d|0))break b;c[g>>2]=e;_H(f);if(!e)break a}while(0)}while((e|0)!=0)}while(0);j=j+1|0}while((j|0)<(c[h+60>>2]|0));d=c[k>>2]|0}if(d|0)Ab[c[(c[d>>2]|0)+4>>2]&511](d);l=l+1|0}while((l|0)<(c[b+104>>2]|0))}d=c[b+72>>2]|0;if(d|0){if(a[b+76>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+72>>2]=0}a[b+76>>0]=1;c[b+72>>2]=0;c[b+64>>2]=0;c[b+68>>2]=0;d=c[b+92>>2]|0;if(d|0){if(a[b+96>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+92>>2]=0}a[b+96>>0]=1;c[b+92>>2]=0;c[b+84>>2]=0;c[b+88>>2]=0;d=c[b+112>>2]|0;if(d|0){if(a[b+116>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+112>>2]=0}a[b+116>>0]=1;c[b+112>>2]=0;c[b+104>>2]=0;c[b+108>>2]=0;d=c[b+132>>2]|0;if(!d){a[b+136>>0]=1;c[b+132>>2]=0;c[b+124>>2]=0;b=b+128|0;c[b>>2]=0;return}if(a[b+136>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+132>>2]=0;a[b+136>>0]=1;c[b+132>>2]=0;c[b+124>>2]=0;b=b+128|0;c[b>>2]=0;return}function Sf(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;c[d+4>>2]=1065353216;c[d+8>>2]=1065353216;c[d+12>>2]=1065353216;g[d+16>>2]=0.0;a[d+36>>0]=1;c[d+32>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;c[d+48>>2]=0;c[d>>2]=8644;a[d+100>>0]=1;c[d+96>>2]=0;c[d+88>>2]=0;c[d+92>>2]=0;a[d+120>>0]=1;c[d+116>>2]=0;c[d+108>>2]=0;c[d+112>>2]=0;a[d+140>>0]=1;c[d+136>>2]=0;c[d+128>>2]=0;c[d+132>>2]=0;a[d+160>>0]=1;c[d+156>>2]=0;c[d+148>>2]=0;c[d+152>>2]=0;a[d+164>>0]=e&1;a[d+165>>0]=f&1;g[d+168>>2]=0.0;c[6472]=(c[6472]|0)+1;e=ic(51)|0;if(!e)h=0;else{c[(e+4+15&-16)+-4>>2]=e;h=e+4+15&-16}e=c[d+24>>2]|0;if((e|0)>0){f=0;do{i=h+(f<<5)|0;j=(c[d+32>>2]|0)+(f<<5)|0;c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];c[i+16>>2]=c[j+16>>2];c[i+20>>2]=c[j+20>>2];c[i+24>>2]=c[j+24>>2];c[i+28>>2]=c[j+28>>2];f=f+1|0}while((f|0)!=(e|0))}e=c[d+32>>2]|0;if(e|0){if(a[d+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[d+32>>2]=0}a[d+36>>0]=1;c[d+32>>2]=h;c[d+28>>2]=1;j=c[d+24>>2]|0;c[h+(j<<5)>>2]=0;c[h+(j<<5)+4>>2]=0;c[h+(j<<5)+8>>2]=12;c[h+(j<<5)+12>>2]=0;c[h+(j<<5)+16>>2]=0;c[h+(j<<5)+20>>2]=16;c[h+(j<<5)+24>>2]=2;c[h+(j<<5)+28>>2]=0;c[d+24>>2]=(c[d+24>>2]|0)+1;j=b[d+164>>1]|0;e=c[d+32>>2]|0;c[e>>2]=(c[((j&255)<<24>>24==0?d+148|0:d+128|0)>>2]|0)/3|0;c[e+4>>2]=0;c[e+24>>2]=(j&255)<<24>>24==0?3:2;c[e+8>>2]=(j&255)<<24>>24==0?6:12;if((j&65535)<256){i=12;d=(c[d+108>>2]|0)/3|0;j=e+12|0;c[j>>2]=d;j=e+16|0;c[j>>2]=0;j=e+20|0;c[j>>2]=i;return}else{i=16;d=c[d+88>>2]|0;j=e+12|0;c[j>>2]=d;j=e+16|0;c[j>>2]=0;j=e+20|0;c[j>>2]=i;return}}function Tf(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=l;l=l+16|0;i=c[b+28>>2]|0;j=c[b+32>>2]|0;if(!(a[b+1301>>0]|0)){h=0;e=Pf(b,d,0,i+4|0,j+4|0,i+312|0,j+312|0,i+328|0,j+328|0)|0;do{f=b+868+(h<<6)|0;if(!((c[b+868+(h<<6)+56>>2]|0)==0?(a[b+868+(h<<6)+44>>0]|0)==0:0)){g=b+1208+(h<<4)|0;c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];g=c[b+1304>>2]>>(h*3|0)+9;if(!(g&1))c[b+868+(h<<6)+28>>2]=c[c[d+32>>2]>>2];if(!(g&2))c[b+868+(h<<6)+36>>2]=c[c[d+32>>2]>>2];if(!(g&4))c[b+868+(h<<6)+32>>2]=c[d+4>>2];e=(md(b,f,i+4|0,j+4|0,i+312|0,j+312|0,i+328|0,j+328|0,d,e,k,1,0)|0)+e|0}h=h+1|0}while((h|0)!=3);l=k;return}h=0;e=0;do{f=b+868+(h<<6)|0;if(!((c[b+868+(h<<6)+56>>2]|0)==0?(a[b+868+(h<<6)+44>>0]|0)==0:0)){g=b+1208+(h<<4)|0;c[k>>2]=c[g>>2];c[k+4>>2]=c[g+4>>2];c[k+8>>2]=c[g+8>>2];c[k+12>>2]=c[g+12>>2];g=c[b+1304>>2]>>(h*3|0)+9;if(!(g&1))c[b+868+(h<<6)+28>>2]=c[c[d+32>>2]>>2];if(!(g&2))c[b+868+(h<<6)+36>>2]=c[c[d+32>>2]>>2];if(!(g&4))c[b+868+(h<<6)+32>>2]=c[d+4>>2];e=(md(b,f,i+4|0,j+4|0,i+312|0,j+312|0,i+328|0,j+328|0,d,e,k,1,0)|0)+e|0}h=h+1|0}while((h|0)!=3);Pf(b,d,e,i+4|0,j+4|0,i+312|0,j+312|0,i+328|0,j+328|0)|0;l=k;return}function Uf(a,b,d){a=a|0;b=+b;d=+d;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0;v=l;l=l+16|0;k=+g[a+452>>2];q=c[a+192>>2]|0;s=+gb[c[(c[q>>2]|0)+48>>2]&15](q);q=c[a+812>>2]|0;if((q|0)<=0){l=v;return}t=0;do{r=c[a+820>>2]|0;u=c[r+(t*104|0)>>2]|0;u=(c[u+236>>2]&2|0)==0?0:u;if(u|0){p=+g[u+332>>2];e=+g[r+(t*104|0)+84>>2];j=+g[u+336>>2];n=+g[r+(t*104|0)+80>>2];f=+g[r+(t*104|0)+76>>2];o=+g[u+328>>2];d=k*(p*e-j*n+ +g[u+312>>2]);e=k*(+g[u+316>>2]+(j*f-e*o));f=k*(n*o-p*f+ +g[u+320>>2])}else{d=0.0;e=0.0;f=0.0}m=c[r+(t*104|0)+24>>2]|0;n=+g[m+8>>2];o=+g[m+12>>2];p=+g[m+16>>2];j=n-+g[m+24>>2]-d;i=o-+g[m+28>>2]-e;h=p-+g[m+32>>2]-f;d=+g[r+(t*104|0)+4>>2];e=+g[r+(t*104|0)+8>>2];f=+g[r+(t*104|0)+12>>2];if(j*d+i*e+h*f<=1.1920928955078125e-07?(y=n*d+o*e+p*f+ +g[r+(t*104|0)+20>>2],z=+g[r+(t*104|0)+96>>2],y=(y>2],x=(j-(j-d*(j*d+i*e+h*f))*z+d*y)*b,w=(i-(i-e*(j*d+i*e+h*f))*z+y*e)*b,j=(h-(h-f*(j*d+i*e+h*f))*z+y*f)*b,f=+g[r+(t*104|0)+28>>2]*x+ +g[r+(t*104|0)+32>>2]*w+ +g[r+(t*104|0)+36>>2]*j,h=x*+g[r+(t*104|0)+44>>2]+w*+g[r+(t*104|0)+48>>2]+j*+g[r+(t*104|0)+52>>2],j=x*+g[r+(t*104|0)+60>>2]+w*+g[r+(t*104|0)+64>>2]+j*+g[r+(t*104|0)+68>>2],g[v>>2]=f,g[v+4>>2]=h,g[v+8>>2]=j,g[v+12>>2]=0.0,i=+g[r+(t*104|0)+92>>2],g[m+8>>2]=n-f*i,g[m+12>>2]=o-i*h,g[m+16>>2]=p-i*j,u|0):0)Zk(u,v,r+(t*104|0)+76|0);t=t+1|0}while((t|0)!=(q|0));l=v;return}function Vf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;e=c[a+56>>2]|0;if(!e){e=c[a+52>>2]|0;if(!e){c[6472]=(c[6472]|0)+1;e=ic(31)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[a+60>>2]|0;c[e+4>>2]=f;g=e+8|0;c[g>>2]=0;c[6472]=(c[6472]|0)+1;f=ic((f*24|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}c[e>>2]=f;c[g>>2]=c[a+48>>2];c[a+48>>2]=e}else c[a+52>>2]=c[e+8>>2];h=c[e+4>>2]|0;e=c[e>>2]|0;if((h|0)>0){f=0;g=e;do{f=f+1|0;i=g;g=g+24|0;c[i>>2]=(f|0)<(h|0)?g:0}while((f|0)!=(h|0));i=e}else i=e}else i=e;c[a+56>>2]=c[i>>2];c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;c[i+20>>2]=0;e=c[a+56>>2]|0;if(!e){e=c[a+52>>2]|0;if(!e){c[6472]=(c[6472]|0)+1;e=ic(31)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[a+60>>2]|0;c[e+4>>2]=f;g=e+8|0;c[g>>2]=0;c[6472]=(c[6472]|0)+1;f=ic((f*24|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}c[e>>2]=f;c[g>>2]=c[a+48>>2];c[a+48>>2]=e}else c[a+52>>2]=c[e+8>>2];h=c[e+4>>2]|0;e=c[e>>2]|0;if((h|0)>0){f=0;g=e;do{f=f+1|0;j=g;g=g+24|0;c[j>>2]=(f|0)<(h|0)?g:0}while((f|0)!=(h|0))}}c[a+56>>2]=c[e>>2];j=e;c[j>>2]=0;c[j+4>>2]=0;c[i+8>>2]=e;c[e+8>>2]=i;j=c[a+100>>2]|0;c[i+20>>2]=j;c[e+20>>2]=j;c[i+12>>2]=d;c[e+12>>2]=b;c[i+16>>2]=0;c[e+16>>2]=0;e=c[a+116>>2]|0;c[a+116>>2]=e+1;if((e|0)<(c[a+120>>2]|0))return i|0;c[a+120>>2]=e+1;return i|0}function Wf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;f=Is()|0;vj(f,4,b);c[f>>2]=4900;c[f+552>>2]=c[d>>2];c[f+552+4>>2]=c[d+4>>2];c[f+552+8>>2]=c[d+8>>2];c[f+552+12>>2]=c[d+12>>2];c[f+568>>2]=c[d+16>>2];c[f+568+4>>2]=c[d+16+4>>2];c[f+568+8>>2]=c[d+16+8>>2];c[f+568+12>>2]=c[d+16+12>>2];c[f+584>>2]=c[d+32>>2];c[f+584+4>>2]=c[d+32+4>>2];c[f+584+8>>2]=c[d+32+8>>2];c[f+584+12>>2]=c[d+32+12>>2];c[f+600>>2]=c[d+48>>2];c[f+600+4>>2]=c[d+48+4>>2];c[f+600+8>>2]=c[d+48+8>>2];c[f+600+12>>2]=c[d+48+12>>2];c[f+616>>2]=c[d>>2];c[f+616+4>>2]=c[d+4>>2];c[f+616+8>>2]=c[d+8>>2];c[f+616+12>>2]=c[d+12>>2];c[f+632>>2]=c[d+16>>2];c[f+632+4>>2]=c[d+16+4>>2];c[f+632+8>>2]=c[d+16+8>>2];c[f+632+12>>2]=c[d+16+12>>2];c[f+648>>2]=c[d+32>>2];c[f+648+4>>2]=c[d+32+4>>2];c[f+648+8>>2]=c[d+32+8>>2];c[f+648+12>>2]=c[d+32+12>>2];c[f+664>>2]=c[d+48>>2];c[f+664+4>>2]=c[d+48+4>>2];c[f+664+8>>2]=c[d+48+8>>2];c[f+664+12>>2]=c[d+48+12>>2];g[f+688>>2]=0.0;g[f+692>>2]=-1.0;g[f+696>>2]=.8999999761581421;g[f+700>>2]=.30000001192092896;g[f+704>>2]=1.0;g[f+708>>2]=0.0;g[f+712>>2]=0.0;a[f+716>>0]=0;a[f+736>>0]=0;a[f+737>>0]=0;a[f+738>>0]=0;a[f+739>>0]=1;a[f+740>>0]=e&1;c[f+748>>2]=0;d=c[f+28>>2]|0;l=+g[f+600>>2];k=+g[f+604>>2];j=+g[f+608>>2];i=l*+g[d+20>>2]+k*+g[d+24>>2]+j*+g[d+28>>2]+ +g[d+56>>2];h=l*+g[d+36>>2]+k*+g[d+40>>2]+j*+g[d+44>>2]+ +g[d+60>>2];g[f+664>>2]=l*+g[d+4>>2]+k*+g[d+8>>2]+j*+g[d+12>>2]+ +g[d+52>>2];g[f+668>>2]=i;g[f+672>>2]=h;g[f+676>>2]=0.0;g[f+732>>2]=e?-1.0:1.0;return f|0}function Xf(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+32|0;if((b|0)<0)b=c[a+12>>2]|0;d=c[a>>2]|0;if(!((b|0)>0&(d|0)!=0)){l=o;return}while(1){e=d+40|0;if(c[e>>2]|0){n=0;while(1){m=(c[a+16>>2]|0)>>>n&1;k=d+32|0;f=c[k>>2]|0;if(f>>>0>d>>>0){i=(c[f+40>>2]|0)==(d|0)&1;g=c[f+36+((i^1)<<2)>>2]|0;h=c[f+32>>2]|0;if(!h)j=a;else j=h+36+(((c[h+40>>2]|0)==(f|0)&1)<<2)|0;c[j>>2]=d;c[g+32>>2]=d;c[f+32>>2]=d;c[k>>2]=h;k=d+36|0;c[f+36>>2]=c[k>>2];c[f+40>>2]=c[e>>2];c[(c[k>>2]|0)+32>>2]=f;c[(c[e>>2]|0)+32>>2]=f;c[d+36+(i<<2)>>2]=f;c[d+36+((i^1)<<2)>>2]=g;c[o>>2]=c[f>>2];c[o+4>>2]=c[f+4>>2];c[o+8>>2]=c[f+8>>2];c[o+12>>2]=c[f+12>>2];c[o+16>>2]=c[f+16>>2];c[o+20>>2]=c[f+20>>2];c[o+24>>2]=c[f+24>>2];c[o+28>>2]=c[f+28>>2];c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];c[f+16>>2]=c[d+16>>2];c[f+20>>2]=c[d+20>>2];c[f+24>>2]=c[d+24>>2];c[f+28>>2]=c[d+28>>2];c[d>>2]=c[o>>2];c[d+4>>2]=c[o+4>>2];c[d+8>>2]=c[o+8>>2];c[d+12>>2]=c[o+12>>2];c[d+16>>2]=c[o+16>>2];c[d+20>>2]=c[o+20>>2];c[d+24>>2]=c[o+24>>2];c[d+28>>2]=c[o+28>>2];d=f}d=c[d+36+(m<<2)>>2]|0;e=d+40|0;if(!(c[e>>2]|0))break;else n=n+1&31}}if(!(Sg(a,d)|0))e=0;else e=c[a>>2]|0;af(a,e,d);c[a+16>>2]=(c[a+16>>2]|0)+1;b=b+-1|0;if(!b)break;d=c[a>>2]|0}l=o;return}function Yf(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=Is()|0;vj(e,4,b);c[e>>2]=4900;c[e+552>>2]=c[d>>2];c[e+552+4>>2]=c[d+4>>2];c[e+552+8>>2]=c[d+8>>2];c[e+552+12>>2]=c[d+12>>2];c[e+568>>2]=c[d+16>>2];c[e+568+4>>2]=c[d+16+4>>2];c[e+568+8>>2]=c[d+16+8>>2];c[e+568+12>>2]=c[d+16+12>>2];c[e+584>>2]=c[d+32>>2];c[e+584+4>>2]=c[d+32+4>>2];c[e+584+8>>2]=c[d+32+8>>2];c[e+584+12>>2]=c[d+32+12>>2];c[e+600>>2]=c[d+48>>2];c[e+600+4>>2]=c[d+48+4>>2];c[e+600+8>>2]=c[d+48+8>>2];c[e+600+12>>2]=c[d+48+12>>2];c[e+616>>2]=c[d>>2];c[e+616+4>>2]=c[d+4>>2];c[e+616+8>>2]=c[d+8>>2];c[e+616+12>>2]=c[d+12>>2];c[e+632>>2]=c[d+16>>2];c[e+632+4>>2]=c[d+16+4>>2];c[e+632+8>>2]=c[d+16+8>>2];c[e+632+12>>2]=c[d+16+12>>2];c[e+648>>2]=c[d+32>>2];c[e+648+4>>2]=c[d+32+4>>2];c[e+648+8>>2]=c[d+32+8>>2];c[e+648+12>>2]=c[d+32+12>>2];c[e+664>>2]=c[d+48>>2];c[e+664+4>>2]=c[d+48+4>>2];c[e+664+8>>2]=c[d+48+8>>2];c[e+664+12>>2]=c[d+48+12>>2];g[e+688>>2]=0.0;g[e+692>>2]=-1.0;g[e+696>>2]=.8999999761581421;g[e+700>>2]=.30000001192092896;g[e+704>>2]=1.0;g[e+708>>2]=0.0;g[e+712>>2]=0.0;a[e+716>>0]=0;a[e+736>>0]=0;a[e+737>>0]=0;a[e+738>>0]=0;a[e+739>>0]=1;a[e+740>>0]=0;c[e+748>>2]=0;d=c[e+28>>2]|0;k=+g[e+600>>2];j=+g[e+604>>2];i=+g[e+608>>2];h=k*+g[d+20>>2]+j*+g[d+24>>2]+i*+g[d+28>>2]+ +g[d+56>>2];f=k*+g[d+36>>2]+j*+g[d+40>>2]+i*+g[d+44>>2]+ +g[d+60>>2];g[e+664>>2]=k*+g[d+4>>2]+j*+g[d+8>>2]+i*+g[d+12>>2]+ +g[d+52>>2];g[e+668>>2]=h;g[e+672>>2]=f;g[e+676>>2]=0.0;g[e+732>>2]=1.0;return e|0}function Zf(b){b=b|0;var d=0,e=0.0,f=0,h=0,i=0.0,j=0.0,k=0;k=l;l=l+64|0;bj(12402);a:do if(!(a[b+274>>0]|0)){d=c[b+232>>2]|0;if((d|0)>0){h=0;while(1){f=c[(c[b+240>>2]|0)+(h<<2)>>2]|0;switch(c[f+216>>2]|0){case 2:case 5:break;default:if((c[f+480>>2]|0)!=0?(c[f+204>>2]&3|0)==0:0){if((a[b+300>>0]|0)!=0?(j=+g[b+268>>2],j!=0.0):0)e=+g[b+264>>2]-j;else e=+g[b+264>>2]*+g[f+244>>2];Ig(f+68|0,+g[f+132>>2],+g[f+136>>2],+g[f+140>>2],f+148|0,e,k);d=c[f+480>>2]|0;Gb[c[(c[d>>2]|0)+12>>2]&127](d,k);d=c[b+232>>2]|0}}h=h+1|0;if((h|0)>=(d|0))break a}}}else{d=c[b+8>>2]|0;if((d|0)>0){h=0;do{f=c[(c[b+16>>2]|0)+(h<<2)>>2]|0;if((!((f|0)==0?1:(c[f+236>>2]&2|0)==0)?(c[f+480>>2]|0)!=0:0)?(c[f+204>>2]&3|0)==0:0){if((a[b+300>>0]|0)!=0?(i=+g[b+268>>2],i!=0.0):0)e=+g[b+264>>2]-i;else e=+g[b+264>>2]*+g[f+244>>2];Ig(f+68|0,+g[f+132>>2],+g[f+136>>2],+g[f+140>>2],f+148|0,e,k);d=c[f+480>>2]|0;Gb[c[(c[d>>2]|0)+12>>2]&127](d,k);d=c[b+8>>2]|0}h=h+1|0}while((h|0)<(d|0))}}while(0);d=c[2405]|0;b=(c[d+16>>2]|0)+-1|0;c[d+16>>2]=b;if(b|0){l=k;return}do if(c[d+4>>2]|0){Za(k|0,0)|0;b=c[6471]|0;g[d+8>>2]=+g[d+8>>2]+ +(((c[k+4>>2]|0)-(c[b+4>>2]|0)+(((c[k>>2]|0)-(c[b>>2]|0)|0)*1e6|0)-(c[d+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[d+16>>2]|0)){d=c[2405]|0;break}else{l=k;return}}while(0);c[2405]=c[d+20>>2];l=k;return}function _f(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0;i=l;l=l+32|0;d=a[b+8>>0]|0?d:e;if(((c[(c[d+4>>2]|0)+4>>2]|0)+-21|0)>>>0>=9){l=i;return}e=c[(c[d+8>>2]|0)+192>>2]|0;y=+gb[c[(c[e>>2]|0)+48>>2]&15](e);c[b+64>>2]=f;g[b+68>>2]=y+.05999999865889549;c[b+56>>2]=h;h=c[b+16>>2]|0;Kb[c[(c[h>>2]|0)+28>>2]&127](h,i+16|0,i);y=+g[i>>2];x=+g[i+16>>2];w=+g[i+4>>2];v=+g[i+16+4>>2];u=+g[i+8>>2];t=+g[i+16+8>>2];h=c[d+12>>2]|0;C=+g[h>>2];o=+g[h+16>>2];D=+g[h+32>>2];z=+g[h+4>>2];m=+g[h+20>>2];A=+g[h+36>>2];q=+g[h+8>>2];j=+g[h+24>>2];r=+g[h+40>>2];E=-+g[h+48>>2];s=-+g[h+52>>2];k=-+g[h+56>>2];p=(y+x)*.5*C+(w+v)*.5*o+(u+t)*.5*D+(C*E+o*s+D*k);n=(y+x)*.5*z+(w+v)*.5*m+(u+t)*.5*A+(z*E+m*s+A*k);k=(y+x)*.5*q+(w+v)*.5*j+(u+t)*.5*r+(q*E+j*s+r*k);s=+g[b+68>>2];o=((y-x)*.5+s)*+B(+(C+o*0.0+D*0.0))+((w-v)*.5+s)*+B(+(C*0.0+o+D*0.0))+((u-t)*.5+s)*+B(+(D+(C*0.0+o*0.0)));m=((y-x)*.5+s)*+B(+(z+m*0.0+A*0.0))+((w-v)*.5+s)*+B(+(z*0.0+m+A*0.0))+((u-t)*.5+s)*+B(+(A+(z*0.0+m*0.0)));j=((y-x)*.5+s)*+B(+(q+j*0.0+r*0.0))+((w-v)*.5+s)*+B(+(q*0.0+j+r*0.0))+((u-t)*.5+s)*+B(+(r+(q*0.0+j*0.0)));g[b+24>>2]=p-o;g[b+28>>2]=n-m;g[b+32>>2]=k-j;g[b+36>>2]=0.0;g[b+40>>2]=p+o;g[b+44>>2]=n+m;g[b+48>>2]=k+j;g[b+52>>2]=0.0;Nb[c[(c[e>>2]|0)+64>>2]&127](e,b+12|0,b+24|0,b+40|0);l=i;return}function $f(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0;k=l;l=l+16|0;c[b+8>>2]=0;c[b+12>>2]=1065353216;c[b+16>>2]=1065353216;c[b+20>>2]=1065353216;g[b+24>>2]=0.0;g[b+44>>2]=.03999999910593033;c[b+52>>2]=0;c[b+56>>2]=1065353216;c[b+60>>2]=1065353216;c[b+64>>2]=1065353216;g[b+68>>2]=0.0;c[b+72>>2]=-1082130432;c[b+76>>2]=-1082130432;c[b+80>>2]=-1082130432;g[b+84>>2]=0.0;a[b+88>>0]=0;c[b>>2]=7448;a[b+108>>0]=1;c[b+104>>2]=0;c[b+96>>2]=0;c[b+100>>2]=0;c[b+4>>2]=4;if((e|0)<=0){c[b+96>>2]=e;jj(b);l=k;return}c[6472]=(c[6472]|0)+1;h=ic((e<<4|3)+16|0)|0;if(!h)j=0;else{c[(h+4+15&-16)+-4>>2]=h;j=h+4+15&-16}h=c[b+96>>2]|0;if((h|0)>0){i=0;do{m=j+(i<<4)|0;n=(c[b+104>>2]|0)+(i<<4)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];i=i+1|0}while((i|0)!=(h|0))}h=c[b+104>>2]|0;if(h|0){if(a[b+108>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+104>>2]=0}a[b+108>>0]=1;c[b+104>>2]=j;c[b+100>>2]=e;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];if((e|0)!=1){h=1;do{n=(c[b+104>>2]|0)+(h<<4)|0;c[n>>2]=c[k>>2];c[n+4>>2]=c[k+4>>2];c[n+8>>2]=c[k+8>>2];c[n+12>>2]=c[k+12>>2];h=h+1|0}while((h|0)!=(e|0))}c[b+96>>2]=e;i=0;h=d;while(1){n=c[b+104>>2]|0;d=c[h+4>>2]|0;m=c[h+8>>2]|0;c[n+(i<<4)>>2]=c[h>>2];c[n+(i<<4)+4>>2]=d;c[n+(i<<4)+8>>2]=m;g[n+(i<<4)+12>>2]=0.0;i=i+1|0;if((i|0)==(e|0))break;else h=h+f|0}jj(b);l=k;return}function ag(b){b=b|0;var d=0;c[b>>2]=4952;d=c[b+176>>2]|0;if(d|0){if(a[b+180>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+176>>2]=0}a[b+180>>0]=1;c[b+176>>2]=0;c[b+168>>2]=0;c[b+172>>2]=0;d=c[b+156>>2]|0;if(d|0){if(a[b+160>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+156>>2]=0}a[b+160>>0]=1;c[b+156>>2]=0;c[b+148>>2]=0;c[b+152>>2]=0;d=c[b+136>>2]|0;if(d|0){if(a[b+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+136>>2]=0}a[b+140>>0]=1;c[b+136>>2]=0;c[b+128>>2]=0;c[b+132>>2]=0;d=c[b+116>>2]|0;if(d|0){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+116>>2]=0}a[b+120>>0]=1;c[b+116>>2]=0;c[b+108>>2]=0;c[b+112>>2]=0;d=c[b+96>>2]|0;if(d|0){if(a[b+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+96>>2]=0}a[b+100>>0]=1;c[b+96>>2]=0;c[b+88>>2]=0;c[b+92>>2]=0;d=c[b+76>>2]|0;if(d|0){if(a[b+80>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+76>>2]=0}a[b+80>>0]=1;c[b+76>>2]=0;c[b+68>>2]=0;c[b+72>>2]=0;d=c[b+56>>2]|0;if(d|0){if(a[b+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+56>>2]=0}a[b+60>>0]=1;c[b+56>>2]=0;c[b+48>>2]=0;c[b+52>>2]=0;d=c[b+36>>2]|0;if(d|0){if(a[b+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+36>>2]=0}a[b+40>>0]=1;c[b+36>>2]=0;c[b+28>>2]=0;c[b+32>>2]=0;d=c[b+16>>2]|0;if(!d){a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}function bg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0.0;x=l;l=l+48|0;t=+g[e>>2];u=+g[d>>2];v=+g[e+4>>2];w=+g[d+4>>2];s=+g[e+8>>2];h=+g[d+8>>2];k=+C(+((t-u)*.5*(t-u)*.5+(v-w)*.5*(v-w)*.5+(s-h)*.5*(s-h)*.5));i=+g[a+56>>2];d=+B(+i)>.7071067690849304;j=+g[a+52>>2];if(d){r=1.0/+C(+(i*i+j*j));y=+g[a+48>>2];f=y;m=y*-(i*r);n=0.0;o=-(i*r);p=j*r;q=(i*i+j*j)*r;r=-(y*j*r)}else{q=+g[a+48>>2];r=1.0/+C(+(q*q+j*j));f=q;m=(q*q+j*j)*r;n=-(j*r);o=q*r;p=0.0;q=-(i*q*r);r=i*-(j*r)}y=(t+u)*.5*f+(v+w)*.5*j+(s+h)*.5*i-+g[a+64>>2];f=(t+u)*.5-f*y;n=k*n;o=k*o;u=k*p;q=k*q;r=k*r;t=k*m;g[x>>2]=q+(n+f);g[x+4>>2]=r+(o+((v+w)*.5-j*y));g[x+8>>2]=t+(u+((s+h)*.5-i*y));g[x+12>>2]=0.0;g[x+16>>2]=n+f-q;g[x+20>>2]=o+((v+w)*.5-j*y)-r;g[x+24>>2]=u+((s+h)*.5-i*y)-t;g[x+28>>2]=0.0;g[x+32>>2]=f-n-q;g[x+36>>2]=(v+w)*.5-j*y-o-r;g[x+40>>2]=(s+h)*.5-i*y-u-t;g[x+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,x,0,0);g[x>>2]=f-n-q;g[x+4>>2]=(v+w)*.5-j*y-o-r;g[x+8>>2]=(s+h)*.5-i*y-u-t;g[x+12>>2]=0.0;g[x+16>>2]=q+(f-n);g[x+20>>2]=r+((v+w)*.5-j*y-o);g[x+24>>2]=t+((s+h)*.5-i*y-u);g[x+28>>2]=0.0;g[x+32>>2]=q+(n+f);g[x+36>>2]=r+(o+((v+w)*.5-j*y));g[x+40>>2]=t+(u+((s+h)*.5-i*y));g[x+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,x,0,1);l=x;return}function cg(a,b,e){a=a|0;b=b|0;e=e|0;$e(a,b,e)|0;c[b+256>>2]=c[a+264>>2];c[b+260>>2]=c[a+268>>2];c[b+264>>2]=c[a+272>>2];c[b+268>>2]=c[a+276>>2];c[b+272>>2]=c[a+280>>2];c[b+276>>2]=c[a+284>>2];c[b+280>>2]=c[a+288>>2];c[b+284>>2]=c[a+292>>2];c[b+288>>2]=c[a+296>>2];c[b+292>>2]=c[a+300>>2];c[b+296>>2]=c[a+304>>2];c[b+300>>2]=c[a+308>>2];c[b+304>>2]=c[a+312>>2];c[b+308>>2]=c[a+316>>2];c[b+312>>2]=c[a+320>>2];c[b+316>>2]=c[a+324>>2];c[b+320>>2]=c[a+328>>2];c[b+324>>2]=c[a+332>>2];c[b+328>>2]=c[a+336>>2];c[b+332>>2]=c[a+340>>2];c[b+448>>2]=c[a+344>>2];c[b+336>>2]=c[a+544>>2];c[b+340>>2]=c[a+548>>2];c[b+344>>2]=c[a+552>>2];c[b+348>>2]=c[a+556>>2];c[b+352>>2]=c[a+348>>2];c[b+356>>2]=c[a+352>>2];c[b+360>>2]=c[a+356>>2];c[b+364>>2]=c[a+360>>2];c[b+368>>2]=c[a+364>>2];c[b+372>>2]=c[a+368>>2];c[b+376>>2]=c[a+372>>2];c[b+380>>2]=c[a+376>>2];c[b+384>>2]=c[a+380>>2];c[b+388>>2]=c[a+384>>2];c[b+392>>2]=c[a+388>>2];c[b+396>>2]=c[a+392>>2];c[b+400>>2]=c[a+396>>2];c[b+404>>2]=c[a+400>>2];c[b+408>>2]=c[a+404>>2];c[b+412>>2]=c[a+408>>2];c[b+416>>2]=c[a+412>>2];c[b+420>>2]=c[a+416>>2];c[b+424>>2]=c[a+420>>2];c[b+428>>2]=c[a+424>>2];c[b+432>>2]=c[a+428>>2];c[b+436>>2]=c[a+432>>2];c[b+440>>2]=c[a+436>>2];c[b+444>>2]=c[a+440>>2];c[b+452>>2]=c[a+444>>2];c[b+456>>2]=c[a+448>>2];c[b+484>>2]=d[a+452>>0];c[b+460>>2]=c[a+456>>2];c[b+464>>2]=c[a+460>>2];c[b+468>>2]=c[a+464>>2];c[b+472>>2]=c[a+468>>2];c[b+476>>2]=c[a+472>>2];c[b+480>>2]=c[a+476>>2];return 12028}function dg(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=h|0;var i=0;i=l;l=l+144|0;c[b+164>>2]=1065353216;c[b+168>>2]=1065353216;c[b+172>>2]=1065353216;g[b+176>>2]=0.0;c[b+180>>2]=0;g[b+184>>2]=999999984306749440.0;c[b+188>>2]=0;c[b+188+4>>2]=0;c[b+188+8>>2]=0;c[b+188+12>>2]=0;c[b+204>>2]=1;c[b+208>>2]=-1;c[b+212>>2]=-1;c[b+216>>2]=1;g[b+220>>2]=0.0;g[b+224>>2]=.5;g[b+228>>2]=0.0;g[b+232>>2]=0.0;c[b+236>>2]=1;c[b+240>>2]=0;g[b+244>>2]=1.0;c[b+248>>2]=0;c[b+248+4>>2]=0;c[b+248+8>>2]=0;c[b+248+12>>2]=0;c[b+4>>2]=1065353216;c[b+8>>2]=0;c[b+8+4>>2]=0;c[b+8+8>>2]=0;c[b+8+12>>2]=0;c[b+24>>2]=1065353216;c[b+28>>2]=0;c[b+28+4>>2]=0;c[b+28+8>>2]=0;c[b+28+12>>2]=0;c[b+44>>2]=1065353216;c[b+48>>2]=0;c[b+48+4>>2]=0;c[b+48+8>>2]=0;c[b+48+12>>2]=0;c[b+48+16>>2]=0;c[b>>2]=4252;a[b+500>>0]=1;c[b+496>>2]=0;c[b+488>>2]=0;c[b+492>>2]=0;g[i>>2]=d;c[i+4>>2]=e;c[i+72>>2]=f;c[i+76>>2]=c[h>>2];c[i+76+4>>2]=c[h+4>>2];c[i+76+8>>2]=c[h+8>>2];c[i+76+12>>2]=c[h+12>>2];g[i+92>>2]=0.0;g[i+96>>2]=0.0;g[i+100>>2]=.5;g[i+104>>2]=0.0;g[i+108>>2]=0.0;g[i+112>>2]=.800000011920929;g[i+116>>2]=1.0;a[i+120>>0]=0;g[i+124>>2]=.004999999888241291;g[i+128>>2]=.009999999776482582;g[i+132>>2]=.009999999776482582;g[i+136>>2]=.009999999776482582;c[i+8>>2]=1065353216;c[i+12>>2]=0;c[i+12+4>>2]=0;c[i+12+8>>2]=0;c[i+12+12>>2]=0;c[i+28>>2]=1065353216;c[i+32>>2]=0;c[i+32+4>>2]=0;c[i+32+8>>2]=0;c[i+32+12>>2]=0;c[i+48>>2]=1065353216;c[i+52>>2]=0;c[i+52+4>>2]=0;c[i+52+8>>2]=0;c[i+52+12>>2]=0;c[i+52+16>>2]=0;xd(b,i);l=i;return}function eg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;Yd(b,d);c[b>>2]=3212;c[6472]=(c[6472]|0)+1;e=ic(27)|0;i=e+4+15&-16;c[i+-4>>2]=e;a[i+4>>0]=0;c[(e+4+15&-16)>>2]=3244;c[b+92>>2]=i;c[6472]=(c[6472]|0)+1;i=ic(27)|0;e=i+4+15&-16;c[e+-4>>2]=i;a[e+4>>0]=0;c[(i+4+15&-16)>>2]=3264;c[b+96>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(27)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[e>>2]=3264;c[b+100>>2]=e;a[e+4>>0]=1;c[6472]=(c[6472]|0)+1;i=ic(27)|0;e=i+4+15&-16;c[e+-4>>2]=i;a[e+4>>0]=0;c[(i+4+15&-16)>>2]=3284;c[b+104>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(27)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[e>>2]=3304;c[b+108>>2]=e;a[e+4>>0]=1;if(!(a[b+20>>0]|0))return;e=c[b+16>>2]|0;if(!e)return;if((c[e>>2]|0)>=156)return;f=c[e+16>>2]|0;if(f){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0);e=c[b+16>>2]|0;if(!e)i=b+16|0;else{f=b+16|0;g=11}}else{f=b+16|0;g=11}if((g|0)==11){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);i=f}c[6472]=(c[6472]|0)+1;e=ic(39)|0;if(!e)h=0;else{c[(e+4+15&-16)+-4>>2]=e;h=e+4+15&-16}e=c[d+12>>2]|0;c[h>>2]=156;f=h+4|0;c[f>>2]=e;c[6472]=(c[6472]|0)+1;e=ic((e*156|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[h+16>>2]=e;c[h+12>>2]=e;f=c[f>>2]|0;c[h+8>>2]=f;if(f+-1|0){b=c[h>>2]|0;g=f+-1|0;d=e;do{j=d;d=d+b|0;c[j>>2]=d;g=g+-1|0}while((g|0)!=0);e=e+(O(b,f+-1|0)|0)|0}c[e>>2]=0;c[i>>2]=h;return}function fg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;l=c[d>>2]|0;l=sb[c[(c[l>>2]|0)+56>>2]&31](l,48)|0;c[l+4>>2]=c[d>>2];c[l>>2]=6420;a[l+28>>0]=1;c[l+24>>2]=0;c[l+16>>2]=0;c[l+20>>2]=0;c[l+32>>2]=c[d+4>>2];a[l+36>>0]=0;c[6472]=(c[6472]|0)+1;b=ic(87)|0;if(!b)k=0;else{c[(b+4+15&-16)+-4>>2]=b;k=b+4+15&-16}c[k>>2]=9516;h=k+20|0;a[h>>0]=1;j=k+16|0;c[j>>2]=0;d=k+8|0;c[d>>2]=0;i=k+12|0;c[i>>2]=0;a[k+24>>0]=0;a[k+44>>0]=1;c[k+40>>2]=0;c[k+32>>2]=0;c[k+36>>2]=0;a[k+64>>0]=1;c[k+60>>2]=0;c[k+52>>2]=0;c[k+56>>2]=0;c[6472]=(c[6472]|0)+1;b=ic(43)|0;if(!b)g=0;else{c[(b+4+15&-16)+-4>>2]=b;g=b+4+15&-16}b=c[d>>2]|0;if((b|0)>0){d=0;do{m=g+(d*12|0)|0;n=(c[j>>2]|0)+(d*12|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];d=d+1|0}while((d|0)!=(b|0))}b=c[j>>2]|0;if(!b){a[h>>0]=1;c[j>>2]=g;c[i>>2]=2;zf(k);n=l+8|0;c[n>>2]=k;n=e+4|0;n=c[n>>2]|0;n=n+68|0;n=c[n>>2]|0;m=l+40|0;c[m>>2]=n;m=f+4|0;m=c[m>>2]|0;m=m+68|0;m=c[m>>2]|0;n=l+44|0;c[n>>2]=m;return l|0}if(a[h>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0)}c[j>>2]=0;a[h>>0]=1;c[j>>2]=g;c[i>>2]=2;zf(k);n=l+8|0;c[n>>2]=k;n=e+4|0;n=c[n>>2]|0;n=n+68|0;n=c[n>>2]|0;m=l+40|0;c[m>>2]=n;m=f+4|0;m=c[m>>2]|0;m=m+68|0;m=c[m>>2]|0;n=l+44|0;c[n>>2]=m;return l|0}function gg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;Ab[c[(c[b>>2]|0)+32>>2]&511](b);e=ub[c[(c[b>>2]|0)+16>>2]&63](b,104,1)|0;d=c[e+8>>2]|0;f=d;g=f+104|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[d+88>>2]=c[a+248>>2];c[d+92>>2]=c[a+252>>2];c[d+96>>2]=c[a+256>>2];c[d+100>>2]=c[a+260>>2];c[d>>2]=c[a+92>>2];c[d+4>>2]=c[a+96>>2];c[d+8>>2]=c[a+100>>2];c[d+12>>2]=c[a+104>>2];c[d+16>>2]=c[a+108>>2];c[d+20>>2]=c[a+116>>2];c[d+24>>2]=c[a+120>>2];c[d+28>>2]=c[a+124>>2];c[d+32>>2]=c[a+128>>2];c[d+36>>2]=c[a+132>>2];c[d+40>>2]=c[a+140>>2];c[d+44>>2]=c[a+144>>2];c[d+48>>2]=c[a+148>>2];c[d+52>>2]=c[a+152>>2];c[d+56>>2]=c[a+168>>2];c[d+60>>2]=c[a+172>>2];c[d+64>>2]=c[a+112>>2];c[d+68>>2]=c[a+156>>2];c[d+72>>2]=c[a+160>>2];c[d+76>>2]=c[a+164>>2];c[d+80>>2]=c[a+136>>2];Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,12441,1145853764,d);d=c[a+8>>2]|0;if((d|0)<=0){Ti(a,b);cd(a,b);a=c[b>>2]|0;a=a+36|0;a=c[a>>2]|0;Ab[a&511](b);return}f=0;do{e=c[(c[a+16>>2]|0)+(f<<2)>>2]|0;if(c[e+236>>2]&8){g=qb[c[(c[e>>2]|0)+16>>2]&127](e)|0;g=ub[c[(c[b>>2]|0)+16>>2]&63](b,g,1)|0;d=ub[c[(c[e>>2]|0)+20>>2]&63](e,c[g+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,g,d,1497645651,e);d=c[a+8>>2]|0}f=f+1|0}while((f|0)<(d|0));Ti(a,b);cd(a,b);a=c[b>>2]|0;a=a+36|0;a=c[a>>2]|0;Ab[a&511](b);return}function hg(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0.0,j=0.0,k=0.0;h=l;l=l+32|0;d=c[a+8>>2]|0;if((d|0)<=0){l=h;return}f=0;do{e=c[(c[a+16>>2]|0)+(f<<2)>>2]|0;if((!((e|0)==0?1:(c[e+236>>2]&2|0)==0)?(c[e+216>>2]|0)!=2:0)?!(b==0.0?1:(c[e+204>>2]&2|0)==0):0){d=c[e+480>>2]|0;if(!d)d=e+4|0;else{Gb[c[(c[d>>2]|0)+8>>2]&127](d,e+4|0);d=e+4|0}j=1.0/b*(+g[e+56>>2]-+g[e+120>>2]);k=1.0/b*(+g[e+60>>2]-+g[e+124>>2]);g[e+312>>2]=1.0/b*(+g[e+52>>2]-+g[e+116>>2]);g[e+316>>2]=j;g[e+320>>2]=k;g[e+324>>2]=0.0;vf(e+68|0,d,h+8|0,h);k=+g[h>>2];j=1.0/b*k*+g[h+8+4>>2];i=1.0/b*k*+g[h+8+8>>2];g[e+328>>2]=1.0/b*+g[h+8>>2]*k;g[e+332>>2]=j;g[e+336>>2]=i;g[e+340>>2]=0.0;c[e+132>>2]=c[e+312>>2];c[e+132+4>>2]=c[e+312+4>>2];c[e+132+8>>2]=c[e+312+8>>2];c[e+132+12>>2]=c[e+312+12>>2];c[e+148>>2]=c[e+328>>2];c[e+148+4>>2]=c[e+328+4>>2];c[e+148+8>>2]=c[e+328+8>>2];c[e+148+12>>2]=c[e+328+12>>2];c[e+68>>2]=c[d>>2];c[e+68+4>>2]=c[d+4>>2];c[e+68+8>>2]=c[d+8>>2];c[e+68+12>>2]=c[d+12>>2];c[e+84>>2]=c[e+20>>2];c[e+84+4>>2]=c[e+20+4>>2];c[e+84+8>>2]=c[e+20+8>>2];c[e+84+12>>2]=c[e+20+12>>2];c[e+100>>2]=c[e+36>>2];c[e+100+4>>2]=c[e+36+4>>2];c[e+100+8>>2]=c[e+36+8>>2];c[e+100+12>>2]=c[e+36+12>>2];c[e+116>>2]=c[e+52>>2];c[e+116+4>>2]=c[e+52+4>>2];c[e+116+8>>2]=c[e+52+8>>2];c[e+116+12>>2]=c[e+52+12>>2];d=c[a+8>>2]|0}f=f+1|0}while((f|0)<(d|0));l=h;return}function ig(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!(a[d+164>>0]|0)){f=c[d+148>>2]|0;if((f|0)==(c[d+152>>2]|0)?(k=f|0?f<<1:1,(f|0)<(k|0)):0){if(!k)g=0;else{c[6472]=(c[6472]|0)+1;f=ic((k<<1)+19|0)|0;if(!f)g=0;else{c[(f+4+15&-16)+-4>>2]=f;g=f+4+15&-16}f=c[d+148>>2]|0}i=c[d+156>>2]|0;if((f|0)<=0)if(!i)f=d+160|0;else h=27;else{h=0;do{b[g+(h<<1)>>1]=b[i+(h<<1)>>1]|0;h=h+1|0}while((h|0)!=(f|0));h=27}if((h|0)==27){if(a[d+160>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[d+156>>2]=0;f=d+160|0}a[f>>0]=1;c[d+156>>2]=g;c[d+152>>2]=k;f=c[d+148>>2]|0}k=c[d+156>>2]|0;b[k+(f<<1)>>1]=e;c[d+148>>2]=f+1;e=k;d=d+32|0;d=c[d>>2]|0;d=d+4|0;c[d>>2]=e;return}else{f=c[d+128>>2]|0;if((f|0)==(c[d+132>>2]|0)?(j=f|0?f<<1:1,(f|0)<(j|0)):0){if(!j)g=0;else{c[6472]=(c[6472]|0)+1;f=ic((j<<2|3)+16|0)|0;if(!f)g=0;else{c[(f+4+15&-16)+-4>>2]=f;g=f+4+15&-16}f=c[d+128>>2]|0}i=c[d+136>>2]|0;if((f|0)<=0)if(!i)f=d+140|0;else h=12;else{h=0;do{c[g+(h<<2)>>2]=c[i+(h<<2)>>2];h=h+1|0}while((h|0)!=(f|0));h=12}if((h|0)==12){if(a[d+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[d+136>>2]=0;f=d+140|0}a[f>>0]=1;c[d+136>>2]=g;c[d+132>>2]=j;f=c[d+128>>2]|0}k=c[d+136>>2]|0;c[k+(f<<2)>>2]=e;c[d+128>>2]=(c[d+128>>2]|0)+1;e=k;d=d+32|0;d=c[d>>2]|0;d=d+4|0;c[d>>2]=e;return}}function jg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[6458]=(c[6458]|0)+1;g=((d<<16|b)+~((d<<16|b)<<15)>>10^(d<<16|b)+~((d<<16|b)<<15))*9|0;l=c[a+40>>2]|0;g=l+(((c[a+12>>2]|0)+-1&((g>>6^g)+~((g>>6^g)<<11)>>16^(g>>6^g)+~((g>>6^g)<<11)))<<2)|0;f=c[g>>2]|0;if((f|0)==-1){n=0;return n|0}m=c[a+16>>2]|0;e=f;while(1){k=m+(e*12|0)|0;if((c[k>>2]|0)==(b|0)?(c[m+(e*12|0)+4>>2]|0)==(d|0):0)break;e=c[(c[a+60>>2]|0)+(e<<2)>>2]|0;if((e|0)==-1){e=0;n=21;break}}if((n|0)==21)return e|0;if(!k){n=0;return n|0}j=c[m+(e*12|0)+8>>2]|0;i=(e*12|0)/12|0;h=c[a+60>>2]|0;if((f|0)!=(i|0)){d=f;while(1){b=h+(d<<2)|0;e=c[b>>2]|0;if((e|0)==(i|0))break;else d=e}e=c[h+(i<<2)>>2]|0;if((d|0)==-1)n=11;else c[b>>2]=e}else{e=c[h+(f<<2)>>2]|0;n=11}if((n|0)==11)c[g>>2]=e;g=(c[a+8>>2]|0)+-1|0;if((g|0)==(i|0)){c[a+8>>2]=i;n=j;return n|0}f=c[m+(g*12|0)+4>>2]<<16|c[m+(g*12|0)>>2];f=(f+~(f<<15)>>10^f+~(f<<15))*9|0;f=((f>>6^f)+~((f>>6^f)<<11)>>16^(f>>6^f)+~((f>>6^f)<<11))&(c[a+12>>2]|0)+-1;e=c[l+(f<<2)>>2]|0;if((e|0)!=(g|0)){d=e;while(1){b=h+(d<<2)|0;e=c[b>>2]|0;if((e|0)==(g|0))break;else d=e}e=c[h+(g<<2)>>2]|0;if((d|0)==-1)n=19;else c[b>>2]=e}else{e=c[h+(g<<2)>>2]|0;n=19}if((n|0)==19)c[l+(f<<2)>>2]=e;c[k>>2]=c[m+(g*12|0)>>2];c[k+4>>2]=c[m+(g*12|0)+4>>2];c[k+8>>2]=c[m+(g*12|0)+8>>2];n=(c[a+40>>2]|0)+(f<<2)|0;c[(c[a+60>>2]|0)+(i<<2)>>2]=c[n>>2];c[n>>2]=i;c[a+8>>2]=(c[a+8>>2]|0)+-1;n=j;return n|0}function kg(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0;h=l;l=l+16|0;b=+g[a+336>>2]*b;d=+g[a+452>>2];e=c[a+792>>2]|0;if((e|0)<=0){l=h;return}f=0;do{t=c[a+800>>2]|0;j=t+(f*96|0)+20|0;w=c[j>>2]|0;o=c[t+(f*96|0)>>2]|0;z=+g[t+(f*96|0)+4>>2];y=+g[t+(f*96|0)+8>>2];x=+g[t+(f*96|0)+12>>2];i=t+(f*96|0)+76|0;v=+g[w+332>>2];q=+g[t+(f*96|0)+84>>2];A=+g[w+336>>2];m=+g[t+(f*96|0)+80>>2];k=+g[i>>2];n=+g[w+328>>2];s=+g[o+8>>2];r=+g[o+12>>2];p=+g[o+16>>2];u=b*(z*+g[w+4>>2]+y*+g[w+8>>2]+x*+g[w+12>>2]+ +g[w+52>>2]-s)+(d*(v*q-A*m+ +g[w+312>>2])-(s-+g[o+24>>2]));q=b*(z*+g[w+20>>2]+y*+g[w+24>>2]+x*+g[w+28>>2]+ +g[w+56>>2]-r)+(d*(+g[w+316>>2]+(A*k-q*n))-(r-+g[o+28>>2]));k=b*(z*+g[w+36>>2]+y*+g[w+40>>2]+x*+g[w+44>>2]+ +g[w+60>>2]-p)+(d*(m*n-v*k+ +g[w+320>>2])-(p-+g[o+32>>2]));v=+g[t+(f*96|0)+24>>2];n=(u*+g[t+(f*96|0)+28>>2]+q*+g[t+(f*96|0)+32>>2]+ +g[t+(f*96|0)+36>>2]*k)*v;m=(u*+g[t+(f*96|0)+44>>2]+q*+g[t+(f*96|0)+48>>2]+k*+g[t+(f*96|0)+52>>2])*v;k=v*(u*+g[t+(f*96|0)+60>>2]+q*+g[t+(f*96|0)+64>>2]+k*+g[t+(f*96|0)+68>>2]);q=+g[t+(f*96|0)+92>>2];g[o+8>>2]=s+n*q;g[o+12>>2]=q*m+r;g[o+16>>2]=q*k+p;j=c[j>>2]|0;g[h>>2]=-n;g[h+4>>2]=-m;g[h+8>>2]=-k;g[h+12>>2]=0.0;Zk(j,h,i);f=f+1|0}while((f|0)!=(e|0));l=h;return}function lg(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,h=0.0,i=0,j=0.0,k=0,l=0,m=0.0,n=0.0,o=0,p=0.0;b=c[a+712>>2]|0;if((b|0)>0){d=0;do{l=(c[a+720>>2]|0)+(d*104|0)+72|0;d=d+1|0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0}while((d|0)!=(b|0))}b=c[a+752>>2]|0;if((b|0)>0){d=0;do{o=c[a+760>>2]|0;k=c[o+(d*44|0)+12>>2]|0;i=c[o+(d*44|0)+8>>2]|0;j=+g[i+8>>2];e=+g[k+8>>2]-j;f=+g[i+12>>2];h=+g[k+12>>2]-f;m=+g[i+16>>2];n=+g[k+16>>2]-m;l=c[o+(d*44|0)+16>>2]|0;j=+g[l+8>>2]-j;f=+g[l+12>>2]-f;m=+g[l+16>>2]-m;p=1.0/+C(+((e*f-h*j)*(e*f-h*j)+((h*m-n*f)*(h*m-n*f)+(n*j-e*m)*(n*j-e*m))));g[o+(d*44|0)+20>>2]=p*(h*m-n*f);g[o+(d*44|0)+24>>2]=p*(n*j-e*m);g[o+(d*44|0)+28>>2]=(e*f-h*j)*p;c[o+(d*44|0)+32>>2]=0;g[i+72>>2]=h*m-n*f+ +g[i+72>>2];g[i+76>>2]=n*j-e*m+ +g[i+76>>2];g[i+80>>2]=e*f-h*j+ +g[i+80>>2];g[k+72>>2]=h*m-n*f+ +g[k+72>>2];g[k+76>>2]=n*j-e*m+ +g[k+76>>2];g[k+80>>2]=e*f-h*j+ +g[k+80>>2];g[l+72>>2]=h*m-n*f+ +g[l+72>>2];g[l+76>>2]=n*j-e*m+ +g[l+76>>2];g[l+80>>2]=e*f-h*j+ +g[l+80>>2];d=d+1|0}while((d|0)!=(b|0))}l=c[a+712>>2]|0;if((l|0)<=0)return;b=c[a+720>>2]|0;k=0;do{d=b+(k*104|0)+72|0;e=+g[d>>2];i=b+(k*104|0)+76|0;f=+g[i>>2];a=b+(k*104|0)+80|0;h=+g[a>>2];j=+C(+(e*e+f*f+h*h));if(j>1.1920928955078125e-07){g[d>>2]=e*(1.0/j);g[i>>2]=1.0/j*f;g[a>>2]=1.0/j*h}k=k+1|0}while((k|0)!=(l|0));return}function mg(b,d,e,f){b=b|0;d=+d;e=e|0;f=+f;var h=0,i=0.0,j=0,k=0;k=l;l=l+16|0;Za(c[6471]|0,0)|0;or(25844);c[6462]=(c[6462]|0)+1;j=c[6465]|0;c[6465]=j+1;if(!j){Za(k|0,0)|0;j=c[6471]|0;c[6464]=(c[k+4>>2]|0)-(c[j+4>>2]|0)+(((c[k>>2]|0)-(c[j>>2]|0)|0)*1e6|0)}c[6470]=0;Za(k|0,0)|0;bj(12426);if(e){g[b+268>>2]=f;i=+g[b+264>>2]+d;g[b+264>>2]=i;if(!(i>=f)){d=f;j=0}else{g[b+264>>2]=i-+(~~(i/f)|0)*f;d=f;j=~~(i/f)}}else{g[b+264>>2]=a[b+300>>0]|0?0.0:d;g[b+268>>2]=0.0;j=!(+B(+d)<1.1920928955078125e-07)&1;e=j}if(qb[c[(c[b>>2]|0)+20>>2]&127](b)|0){h=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;a[26472]=(qb[c[(c[h>>2]|0)+48>>2]&127](h)|0)>>>4&1}if(j){e=(j|0)>(e|0)?e:j;Bb[c[(c[b>>2]|0)+164>>2]&31](b,d*+(e|0));Ab[c[(c[b>>2]|0)+168>>2]&511](b);if((e|0)>0){h=0;do{Bb[c[(c[b>>2]|0)+160>>2]&31](b,d);Ab[c[(c[b>>2]|0)+80>>2]&511](b);h=h+1|0}while((h|0)<(e|0));e=b}else e=b}else{Ab[c[(c[b>>2]|0)+80>>2]&511](b);e=b}Ab[c[(c[e>>2]|0)+120>>2]&511](b);c[6470]=(c[6470]|0)+1;e=c[2405]|0;b=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=b;if(b|0){l=k;return j|0}do if(c[e+4>>2]|0){Za(k|0,0)|0;b=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[k+4>>2]|0)-(c[b+4>>2]|0)+(((c[k>>2]|0)-(c[b>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[e+16>>2]|0)){e=c[2405]|0;break}else{l=k;return j|0}}while(0);c[2405]=c[e+20>>2];l=k;return j|0}function ng(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=zs()|0;c[h+4>>2]=5;c[h+8>>2]=-1;c[h+12>>2]=-1;g[h+16>>2]=3402823466385288598117041.0e14;a[h+20>>0]=1;a[h+21>>0]=0;c[h+24>>2]=-1;c[h+28>>2]=b;c[h+32>>2]=d;g[h+36>>2]=0.0;g[h+40>>2]=.30000001192092896;c[h+44>>2]=0;c[h>>2]=4844;c[h+300>>2]=c[e>>2];c[h+300+4>>2]=c[e+4>>2];c[h+300+8>>2]=c[e+8>>2];c[h+300+12>>2]=c[e+12>>2];c[h+316>>2]=c[e+16>>2];c[h+316+4>>2]=c[e+16+4>>2];c[h+316+8>>2]=c[e+16+8>>2];c[h+316+12>>2]=c[e+16+12>>2];c[h+332>>2]=c[e+32>>2];c[h+332+4>>2]=c[e+32+4>>2];c[h+332+8>>2]=c[e+32+8>>2];c[h+332+12>>2]=c[e+32+12>>2];c[h+348>>2]=c[e+48>>2];c[h+348+4>>2]=c[e+48+4>>2];c[h+348+8>>2]=c[e+48+8>>2];c[h+348+12>>2]=c[e+48+12>>2];c[h+364>>2]=c[f>>2];c[h+364+4>>2]=c[f+4>>2];c[h+364+8>>2]=c[f+8>>2];c[h+364+12>>2]=c[f+12>>2];c[h+380>>2]=c[f+16>>2];c[h+380+4>>2]=c[f+16+4>>2];c[h+380+8>>2]=c[f+16+8>>2];c[h+380+12>>2]=c[f+16+12>>2];c[h+396>>2]=c[f+32>>2];c[h+396+4>>2]=c[f+32+4>>2];c[h+396+8>>2]=c[f+32+8>>2];c[h+396+12>>2]=c[f+32+12>>2];c[h+412>>2]=c[f+48>>2];c[h+412+4>>2]=c[f+48+4>>2];c[h+412+8>>2]=c[f+48+8>>2];c[h+412+12>>2]=c[f+48+12>>2];a[h+552>>0]=0;c[h+524>>2]=0;g[h+572>>2]=-1.0;g[h+444>>2]=999999984306749440.0;g[h+448>>2]=999999984306749440.0;g[h+452>>2]=999999984306749440.0;g[h+428>>2]=1.0;g[h+432>>2]=.30000001192092896;g[h+436>>2]=1.0;g[h+440>>2]=.009999999776482582;g[h+456>>2]=.05000000074505806;c[h+592>>2]=0;g[h+596>>2]=0.0;g[h+600>>2]=.699999988079071;g[h+604>>2]=0.0;return h|0}function og(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0.0;m=l;l=l+672|0;c[m+568+8>>2]=0;c[m+568+12>>2]=1065353216;c[m+568+16>>2]=1065353216;c[m+568+20>>2]=1065353216;g[m+568+24>>2]=0.0;c[m+568+52>>2]=0;c[m+568>>2]=3860;c[m+568+4>>2]=1;c[m+568+56>>2]=c[d>>2];c[m+568+56+4>>2]=c[d+4>>2];c[m+568+56+8>>2]=c[d+8>>2];c[m+568+56+12>>2]=c[d+12>>2];c[m+568+72>>2]=c[d+16>>2];c[m+568+72+4>>2]=c[d+16+4>>2];c[m+568+72+8>>2]=c[d+16+8>>2];c[m+568+72+12>>2]=c[d+16+12>>2];c[m+568+88>>2]=c[d+32>>2];c[m+568+88+4>>2]=c[d+32+4>>2];c[m+568+88+8>>2]=c[d+32+8>>2];c[m+568+88+12>>2]=c[d+32+12>>2];c[m+568+44>>2]=c[b+204>>2];g[m+208+308>>2]=9.999999747378752e-05;a[m+208+332>>0]=0;c[m+200>>2]=9312;d=c[b+4>>2]|0;c[m+176>>2]=9380;c[m+176+4>>2]=m+208;c[m+176+8>>2]=m+200;c[m+176+12>>2]=d;c[m+176+16>>2]=m+568;c[m+176+20>>2]=0;c[m>>2]=3832;c[m+168>>2]=0;g[m+164>>2]=1.0;c[m+172>>2]=c[b+208>>2];if((Jd(m+176|0,b+8|0,b+72|0,b+136|0,b+136|0,m)|0?(j=+g[m+132>>2],k=+g[m+136>>2],h=+g[m+140>>2],j*j+k*k+h*h>9.999999747378752e-05):0)?(i=+g[m+164>>2],i<+g[b+200>>2]):0){n=1.0/+C(+(j*j+k*k+h*h));g[m+132>>2]=j*n;g[m+136>>2]=k*n;g[m+140>>2]=h*n;+kb[c[(c[b>>2]|0)+12>>2]&3](b,m+132|0,m+148|0,i,e,f)}c[m+568>>2]=7316;e=c[m+568+52>>2]|0;if(!e){l=m;return}Ab[c[c[e>>2]>>2]&511](e);e=c[m+568+52>>2]|0;if(!e){l=m;return}c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);l=m;return}function pg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;h=+g[d+100>>2];j=+g[d+16>>2];k=+g[d+20>>2];l=+g[d+24>>2];e=+g[d+108>>2];e=+g[d+112>>2]-h*+g[d+116>>2]-(j*+g[a+64>>2]+k*+g[a+68>>2]+l*+g[a+72>>2]+(+g[d>>2]*+g[a+80>>2]+ +g[d+4>>2]*+g[a+84>>2]+ +g[d+8>>2]*+g[a+88>>2]))*e-e*(+g[d+48>>2]*+g[b+64>>2]+ +g[d+52>>2]*+g[b+68>>2]+ +g[d+56>>2]*+g[b+72>>2]+(+g[d+32>>2]*+g[b+80>>2]+ +g[d+36>>2]*+g[b+84>>2]+ +g[d+40>>2]*+g[b+88>>2]));f=+g[d+120>>2];if(!(h+e>2];if(h+e>f){i=f;e=f-h}else i=h+e}else{i=f;e=f-h}g[d+100>>2]=i;if(c[a+240>>2]|0){i=e*k*+g[a+132>>2]*+g[a+116>>2];k=e*l*+g[a+136>>2]*+g[a+120>>2];g[a+64>>2]=+g[a+112>>2]*e*j*+g[a+128>>2]+ +g[a+64>>2];g[a+68>>2]=i+ +g[a+68>>2];g[a+72>>2]=k+ +g[a+72>>2];k=e*+g[a+100>>2]*+g[d+68>>2];l=e*+g[a+104>>2]*+g[d+72>>2];g[a+80>>2]=e*+g[a+96>>2]*+g[d+64>>2]+ +g[a+80>>2];g[a+84>>2]=k+ +g[a+84>>2];g[a+88>>2]=l+ +g[a+88>>2]}if(!(c[b+240>>2]|0))return;l=e*+g[d+52>>2]*+g[b+132>>2]*+g[b+116>>2];k=e*+g[d+56>>2]*+g[b+136>>2]*+g[b+120>>2];g[b+64>>2]=+g[b+112>>2]*e*+g[d+48>>2]*+g[b+128>>2]+ +g[b+64>>2];g[b+68>>2]=l+ +g[b+68>>2];g[b+72>>2]=k+ +g[b+72>>2];k=e*+g[b+100>>2]*+g[d+84>>2];l=e*+g[b+104>>2]*+g[d+88>>2];g[b+80>>2]=e*+g[b+96>>2]*+g[d+80>>2]+ +g[b+80>>2];g[b+84>>2]=k+ +g[b+84>>2];g[b+88>>2]=l+ +g[b+88>>2];return}function qg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;e=+g[d+128>>2];if(!(e!=0.0))return;c[6008]=(c[6008]|0)+1;k=+g[d+96>>2];f=+g[d+16>>2];h=+g[d+20>>2];i=+g[d+24>>2];j=+g[d+108>>2];j=e-k*+g[d+116>>2]-(f*+g[a+144>>2]+h*+g[a+148>>2]+i*+g[a+152>>2]+(+g[d>>2]*+g[a+160>>2]+ +g[d+4>>2]*+g[a+164>>2]+ +g[d+8>>2]*+g[a+168>>2]))*j-j*(+g[d+48>>2]*+g[b+144>>2]+ +g[d+52>>2]*+g[b+148>>2]+ +g[d+56>>2]*+g[b+152>>2]+(+g[d+32>>2]*+g[b+160>>2]+ +g[d+36>>2]*+g[b+164>>2]+ +g[d+40>>2]*+g[b+168>>2]));l=+g[d+120>>2];e=k+j>2]=k+j>2]|0){l=e*h*+g[a+132>>2]*+g[a+116>>2];k=e*i*+g[a+136>>2]*+g[a+120>>2];g[a+144>>2]=+g[a+112>>2]*e*f*+g[a+128>>2]+ +g[a+144>>2];g[a+148>>2]=l+ +g[a+148>>2];g[a+152>>2]=k+ +g[a+152>>2];k=e*+g[a+100>>2]*+g[d+68>>2];l=e*+g[a+104>>2]*+g[d+72>>2];g[a+160>>2]=e*+g[a+96>>2]*+g[d+64>>2]+ +g[a+160>>2];g[a+164>>2]=k+ +g[a+164>>2];g[a+168>>2]=l+ +g[a+168>>2]}if(!(c[b+240>>2]|0))return;l=e*+g[d+52>>2]*+g[b+132>>2]*+g[b+116>>2];k=e*+g[d+56>>2]*+g[b+136>>2]*+g[b+120>>2];g[b+144>>2]=+g[b+112>>2]*e*+g[d+48>>2]*+g[b+128>>2]+ +g[b+144>>2];g[b+148>>2]=l+ +g[b+148>>2];g[b+152>>2]=k+ +g[b+152>>2];k=e*+g[b+100>>2]*+g[d+84>>2];l=e*+g[b+104>>2]*+g[d+88>>2];g[b+160>>2]=e*+g[b+96>>2]*+g[d+80>>2]+ +g[b+160>>2];g[b+164>>2]=k+ +g[b+164>>2];g[b+168>>2]=l+ +g[b+168>>2];return}function rg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0;t=l;l=l+32|0;s=c[a+12>>2]|0;if(!s){l=t;return}c[f+4>>2]=s;a=c[b+4>>2]|0;e=c[d+4>>2]|0;b=c[b+12>>2]|0;d=c[d+12>>2]|0;m=+g[d+48>>2];h=+g[b+48>>2]-m;n=+g[d+52>>2];i=+g[b+52>>2]-n;o=+g[d+56>>2];k=+g[b+56>>2]-o;q=+C(+(h*h+i*i+k*k));r=+g[e+28>>2]*+g[e+12>>2];p=+g[a+28>>2]*+g[a+12>>2]+r;if(q>p){if(!(c[s+748>>2]|0)){l=t;return}a=c[s+740>>2]|0;b=c[(c[f+8>>2]|0)+8>>2]|0;e=c[(c[f+12>>2]|0)+8>>2]|0;if((a|0)==(b|0)){Oe(s,a+4|0,e+4|0);l=t;return}else{Oe(s,e+4|0,b+4|0);l=t;return}}c[t+16>>2]=1065353216;c[t+16+4>>2]=0;c[t+16+8>>2]=0;g[t+16+12>>2]=0.0;if(q>1.1920928955078125e-07){g[t+16>>2]=h*(1.0/q);g[t+16+4>>2]=i*(1.0/q);g[t+16+8>>2]=k*(1.0/q);g[t+16+12>>2]=0.0;j=h*(1.0/q);i=i*(1.0/q);h=k*(1.0/q)}else{j=1.0;i=0.0;h=0.0}g[t>>2]=r*j+m;g[t+4>>2]=r*i+n;g[t+8>>2]=r*h+o;g[t+12>>2]=0.0;Lb[c[(c[f>>2]|0)+16>>2]&15](f,t+16|0,t,q-p);a=c[f+4>>2]|0;do if(c[a+748>>2]|0){b=c[a+740>>2]|0;d=c[(c[f+8>>2]|0)+8>>2]|0;e=c[(c[f+12>>2]|0)+8>>2]|0;if((b|0)==(d|0)){Oe(a,b+4|0,e+4|0);break}else{Oe(a,e+4|0,d+4|0);break}}while(0);l=t;return}function sg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[6459]=(c[6459]|0)+1;l=((e<<16|d)+~((e<<16|d)<<15)>>10^(e<<16|d)+~((e<<16|d)<<15))*9|0;l=(l>>6^l)+~((l>>6^l)<<11)>>16^(l>>6^l)+~((l>>6^l)<<11);k=c[b+12>>2]|0;f=c[(c[b+40>>2]|0)+((k+-1&l)<<2)>>2]|0;a:do if((f|0)!=-1){h=c[b+16>>2]|0;while(1){g=h+(f*12|0)|0;if((c[g>>2]|0)==(d|0)?(c[h+(f*12|0)+4>>2]|0)==(e|0):0)break;f=c[(c[b+60>>2]|0)+(f<<2)>>2]|0;if((f|0)==-1)break a}if(g|0){b=g;return b|0}}while(0);j=c[b+8>>2]|0;if((j|0)==(k|0)){h=k|0?k<<1:1;if((k|0)<(h|0)){if(!h){g=k;i=0}else{c[6472]=(c[6472]|0)+1;f=ic((h*12|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}g=c[b+8>>2]|0;i=f}if((g|0)>0){f=0;do{m=i+(f*12|0)|0;n=(c[b+16>>2]|0)+(f*12|0)|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];f=f+1|0}while((f|0)!=(g|0))}f=c[b+16>>2]|0;if(f|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=i;c[b+12>>2]=h;f=c[b+8>>2]|0}else{f=k;h=k}}else{f=j;h=k}c[b+8>>2]=f+1;g=c[b+16>>2]|0;if((k|0)<(h|0)){zf(b);f=(c[b+12>>2]|0)+-1&l}else f=k+-1&l;c[g+(j*12|0)>>2]=d;c[g+(j*12|0)+4>>2]=e;c[g+(j*12|0)+8>>2]=0;n=(c[b+40>>2]|0)+(f<<2)|0;c[(c[b+60>>2]|0)+(j<<2)>>2]=c[n>>2];c[n>>2]=j;n=g+(j*12|0)|0;return n|0}function tg(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=Is()|0;c[i+4>>2]=4;c[i+8>>2]=-1;c[i+12>>2]=-1;g[i+16>>2]=3402823466385288598117041.0e14;a[i+20>>0]=1;a[i+21>>0]=0;c[i+24>>2]=-1;c[i+28>>2]=b;c[i+32>>2]=d;g[i+36>>2]=0.0;g[i+40>>2]=.30000001192092896;c[i+44>>2]=0;c[i>>2]=4900;c[i+552>>2]=c[e>>2];c[i+552+4>>2]=c[e+4>>2];c[i+552+8>>2]=c[e+8>>2];c[i+552+12>>2]=c[e+12>>2];c[i+568>>2]=c[e+16>>2];c[i+568+4>>2]=c[e+16+4>>2];c[i+568+8>>2]=c[e+16+8>>2];c[i+568+12>>2]=c[e+16+12>>2];c[i+584>>2]=c[e+32>>2];c[i+584+4>>2]=c[e+32+4>>2];c[i+584+8>>2]=c[e+32+8>>2];c[i+584+12>>2]=c[e+32+12>>2];c[i+600>>2]=c[e+48>>2];c[i+600+4>>2]=c[e+48+4>>2];c[i+600+8>>2]=c[e+48+8>>2];c[i+600+12>>2]=c[e+48+12>>2];c[i+616>>2]=c[f>>2];c[i+616+4>>2]=c[f+4>>2];c[i+616+8>>2]=c[f+8>>2];c[i+616+12>>2]=c[f+12>>2];c[i+632>>2]=c[f+16>>2];c[i+632+4>>2]=c[f+16+4>>2];c[i+632+8>>2]=c[f+16+8>>2];c[i+632+12>>2]=c[f+16+12>>2];c[i+648>>2]=c[f+32>>2];c[i+648+4>>2]=c[f+32+4>>2];c[i+648+8>>2]=c[f+32+8>>2];c[i+648+12>>2]=c[f+32+12>>2];c[i+664>>2]=c[f+48>>2];c[i+664+4>>2]=c[f+48+4>>2];c[i+664+8>>2]=c[f+48+8>>2];c[i+664+12>>2]=c[f+48+12>>2];g[i+688>>2]=0.0;g[i+692>>2]=-1.0;g[i+696>>2]=.8999999761581421;g[i+700>>2]=.30000001192092896;g[i+704>>2]=1.0;g[i+708>>2]=0.0;g[i+712>>2]=0.0;a[i+716>>0]=0;a[i+736>>0]=0;a[i+737>>0]=0;a[i+738>>0]=0;a[i+739>>0]=1;a[i+740>>0]=h&1;c[i+748>>2]=0;g[i+732>>2]=h?-1.0:1.0;return i|0}function ug(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;g=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=g;if(g|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];g=c[a+48>>2]|0;ub[c[(c[g>>2]|0)+56>>2]&63](g,b+12|0,d)|0;c[b+52>>2]=c[a+12>>2];do if((c[a+52>>2]|0)!=0?((qb[c[(c[d>>2]|0)+52>>2]&127](d)|0)&1|0)==0:0){e=sb[c[(c[d>>2]|0)+24>>2]&31](d,c[a+52>>2]|0)|0;if(!e){c[b+40>>2]=sb[c[(c[d>>2]|0)+28>>2]&31](d,c[a+52>>2]|0)|0;c[b+44>>2]=0;e=c[a+52>>2]|0;e=qb[c[(c[e>>2]|0)+12>>2]&127](e)|0;e=ub[c[(c[d>>2]|0)+16>>2]&63](d,e,1)|0;g=c[a+52>>2]|0;g=ub[c[(c[g>>2]|0)+16>>2]&63](g,c[e+8>>2]|0,d)|0;Rb[c[(c[d>>2]|0)+20>>2]&31](d,e,g,1213612625,c[a+52>>2]|0);break}else{c[b+40>>2]=e;c[b+44>>2]=0;break}}else f=8;while(0);if((f|0)==8){c[b+40>>2]=0;c[b+44>>2]=0}if(c[a+56>>2]|0?((qb[c[(c[d>>2]|0)+52>>2]&127](d)|0)&2|0)==0:0){e=sb[c[(c[d>>2]|0)+24>>2]&31](d,c[a+56>>2]|0)|0;if(!e){c[b+48>>2]=sb[c[(c[d>>2]|0)+28>>2]&31](d,c[a+56>>2]|0)|0;b=c[a+56>>2]|0;b=qb[c[(c[b>>2]|0)+8>>2]&127](b)|0;b=ub[c[(c[d>>2]|0)+16>>2]&63](d,b,1)|0;g=c[a+56>>2]|0;g=ub[c[(c[g>>2]|0)+12>>2]&63](g,c[b+8>>2]|0,d)|0;Rb[c[(c[d>>2]|0)+20>>2]&31](d,b,g,1346456916,c[a+56>>2]|0);return 16845}else{c[b+48>>2]=e;return 16845}}c[b+48>>2]=0;return 16845}function vg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=Is()|0;c[h+4>>2]=4;c[h+8>>2]=-1;c[h+12>>2]=-1;g[h+16>>2]=3402823466385288598117041.0e14;a[h+20>>0]=1;a[h+21>>0]=0;c[h+24>>2]=-1;c[h+28>>2]=b;c[h+32>>2]=d;g[h+36>>2]=0.0;g[h+40>>2]=.30000001192092896;c[h+44>>2]=0;c[h>>2]=4900;c[h+552>>2]=c[e>>2];c[h+552+4>>2]=c[e+4>>2];c[h+552+8>>2]=c[e+8>>2];c[h+552+12>>2]=c[e+12>>2];c[h+568>>2]=c[e+16>>2];c[h+568+4>>2]=c[e+16+4>>2];c[h+568+8>>2]=c[e+16+8>>2];c[h+568+12>>2]=c[e+16+12>>2];c[h+584>>2]=c[e+32>>2];c[h+584+4>>2]=c[e+32+4>>2];c[h+584+8>>2]=c[e+32+8>>2];c[h+584+12>>2]=c[e+32+12>>2];c[h+600>>2]=c[e+48>>2];c[h+600+4>>2]=c[e+48+4>>2];c[h+600+8>>2]=c[e+48+8>>2];c[h+600+12>>2]=c[e+48+12>>2];c[h+616>>2]=c[f>>2];c[h+616+4>>2]=c[f+4>>2];c[h+616+8>>2]=c[f+8>>2];c[h+616+12>>2]=c[f+12>>2];c[h+632>>2]=c[f+16>>2];c[h+632+4>>2]=c[f+16+4>>2];c[h+632+8>>2]=c[f+16+8>>2];c[h+632+12>>2]=c[f+16+12>>2];c[h+648>>2]=c[f+32>>2];c[h+648+4>>2]=c[f+32+4>>2];c[h+648+8>>2]=c[f+32+8>>2];c[h+648+12>>2]=c[f+32+12>>2];c[h+664>>2]=c[f+48>>2];c[h+664+4>>2]=c[f+48+4>>2];c[h+664+8>>2]=c[f+48+8>>2];c[h+664+12>>2]=c[f+48+12>>2];g[h+688>>2]=0.0;g[h+692>>2]=-1.0;g[h+696>>2]=.8999999761581421;g[h+700>>2]=.30000001192092896;g[h+704>>2]=1.0;g[h+708>>2]=0.0;g[h+712>>2]=0.0;a[h+716>>0]=0;a[h+736>>0]=0;a[h+737>>0]=0;a[h+738>>0]=0;a[h+739>>0]=1;a[h+740>>0]=0;c[h+748>>2]=0;g[h+732>>2]=1.0;return h|0}function wg(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0;c[6472]=(c[6472]|0)+1;b=ic((h+2|0)>>>0>268435455?18:(h+2<<4|3)+16|0)|0;if(!b)k=0;else{c[(b+4+15&-16)+-4>>2]=b;k=b+4+15&-16}j=XH((h+2|0)>>>0>1073741823?-1:h+2<<2)|0;if((h|0)>-2){b=0;do{p=+(b|0)/+(h+1|0);o=+g[e>>2];n=+g[e+4>>2];n=n+p*(+g[f+4>>2]-n);m=+g[e+8>>2];m=m+p*(+g[f+8>>2]-m);g[k+(b<<4)>>2]=o+p*(+g[f>>2]-o);g[k+(b<<4)+4>>2]=n;g[k+(b<<4)+8>>2]=m;g[k+(b<<4)+12>>2]=0.0;g[j+(b<<2)>>2]=1.0;b=b+1|0}while((b|0)<(h+2|0))}c[6472]=(c[6472]|0)+1;b=ic(1271)|0;if(!b)l=0;else{c[(b+4+15&-16)+-4>>2]=b;l=b+4+15&-16}qc(l,d,h+2|0,k,j);if(i&1|0){g[(c[l+720>>2]|0)+88>>2]=0.0;a[l+924>>0]=1}if(i&2|0){g[(c[l+720>>2]|0)+((h+1|0)*104|0)+88>>2]=0.0;a[l+924>>0]=1}if(k|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0)}YH(j);if((h+2|0)<=1)return l|0;j=l+720|0;k=l+732|0;f=l+740|0;b=l+924|0;e=1;do{r=e+-1|0;q=c[j>>2]|0;Rh(l,0);i=(c[k>>2]|0)+-1|0;d=c[f>>2]|0;c[d+(i*52|0)+8>>2]=q+(r*104|0);c[d+(i*52|0)+12>>2]=q+(e*104|0);n=+g[q+(r*104|0)+8>>2]-+g[q+(e*104|0)+8>>2];o=+g[q+(r*104|0)+12>>2]-+g[q+(e*104|0)+12>>2];p=+g[q+(r*104|0)+16>>2]-+g[q+(e*104|0)+16>>2];g[d+(i*52|0)+16>>2]=+C(+(n*n+o*o+p*p));a[b>>0]=1;e=e+1|0}while((e|0)!=(h+2|0));return l|0}function xg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;k=+g[d+100>>2];e=+g[d+16>>2];f=+g[d+20>>2];h=+g[d+24>>2];j=+g[d+108>>2];j=+g[d+112>>2]-k*+g[d+116>>2]-(e*+g[a+64>>2]+f*+g[a+68>>2]+h*+g[a+72>>2]+(+g[d>>2]*+g[a+80>>2]+ +g[d+4>>2]*+g[a+84>>2]+ +g[d+8>>2]*+g[a+88>>2]))*j-j*(+g[d+48>>2]*+g[b+64>>2]+ +g[d+52>>2]*+g[b+68>>2]+ +g[d+56>>2]*+g[b+72>>2]+(+g[d+32>>2]*+g[b+80>>2]+ +g[d+36>>2]*+g[b+84>>2]+ +g[d+40>>2]*+g[b+88>>2]));l=+g[d+120>>2];i=k+j>2]=k+j>2]|0){l=i*f*+g[a+132>>2]*+g[a+116>>2];k=i*h*+g[a+136>>2]*+g[a+120>>2];g[a+64>>2]=+g[a+112>>2]*i*e*+g[a+128>>2]+ +g[a+64>>2];g[a+68>>2]=l+ +g[a+68>>2];g[a+72>>2]=k+ +g[a+72>>2];k=i*+g[a+100>>2]*+g[d+68>>2];l=i*+g[a+104>>2]*+g[d+72>>2];g[a+80>>2]=i*+g[a+96>>2]*+g[d+64>>2]+ +g[a+80>>2];g[a+84>>2]=k+ +g[a+84>>2];g[a+88>>2]=l+ +g[a+88>>2]}if(!(c[b+240>>2]|0))return;l=i*+g[d+52>>2]*+g[b+132>>2]*+g[b+116>>2];k=i*+g[d+56>>2]*+g[b+136>>2]*+g[b+120>>2];g[b+64>>2]=+g[b+112>>2]*i*+g[d+48>>2]*+g[b+128>>2]+ +g[b+64>>2];g[b+68>>2]=l+ +g[b+68>>2];g[b+72>>2]=k+ +g[b+72>>2];k=i*+g[b+100>>2]*+g[d+84>>2];l=i*+g[b+104>>2]*+g[d+88>>2];g[b+80>>2]=i*+g[b+96>>2]*+g[d+80>>2]+ +g[b+80>>2];g[b+84>>2]=k+ +g[b+84>>2];g[b+88>>2]=l+ +g[b+88>>2];return}function yg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0;J=+g[a+4>>2];I=+g[a+20>>2];H=+g[a+36>>2];F=+g[a+8>>2];E=+g[a+24>>2];D=+g[a+40>>2];B=+g[a+12>>2];z=+g[a+28>>2];x=+g[a+44>>2];u=+g[b+4>>2];t=+g[b+20>>2];s=+g[b+36>>2];q=+g[b+8>>2];p=+g[b+24>>2];o=+g[b+40>>2];m=+g[b+12>>2];k=+g[b+28>>2];i=+g[b+44>>2];c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;A=+g[e>>2];y=+g[e+4>>2];w=+g[e+8>>2];g[d+16>>2]=J*A+I*y+H*w;g[d+20>>2]=F*A+E*y+D*w;g[d+24>>2]=B*A+z*y+x*w;g[d+28>>2]=0.0;l=-+g[e>>2];j=-+g[e+4>>2];h=-+g[e+8>>2];g[d+32>>2]=u*l+t*j+s*h;g[d+36>>2]=q*l+p*j+o*h;g[d+40>>2]=m*l+k*j+i*h;g[d+44>>2]=0.0;G=(J*A+I*y+H*w)*+g[a+396>>2];C=(F*A+E*y+D*w)*+g[a+400>>2];v=(B*A+z*y+x*w)*+g[a+404>>2];g[d+48>>2]=G;g[d+52>>2]=C;g[d+56>>2]=v;g[d+60>>2]=0.0;r=(u*l+t*j+s*h)*+g[b+396>>2];n=(q*l+p*j+o*h)*+g[b+400>>2];f=(m*l+k*j+i*h)*+g[b+404>>2];g[d+64>>2]=r;g[d+68>>2]=n;g[d+72>>2]=f;g[d+76>>2]=0.0;g[d+80>>2]=(J*A+I*y+H*w)*G+(F*A+E*y+D*w)*C+(B*A+z*y+x*w)*v+((u*l+t*j+s*h)*r+(q*l+p*j+o*h)*n+(m*l+k*j+i*h)*f);return}function zg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0.0,x=0,y=0;x=l;l=l+16|0;f=c[a+52>>2]|0;w=+g[a+28+(((f+2|0)%3|0)<<2)>>2];if((e|0)<=0){l=x;return}h=0;while(1){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+(f<<2)>>2]=c[a+28+(f<<2)>>2];f=b+(h<<4)|0;u=b+(h<<4)+4|0;v=b+(h<<4)+8|0;m=w*+g[f>>2]+ +g[x>>2];o=w*+g[u>>2]+ +g[x+4>>2];n=w*+g[v>>2]+ +g[x+8>>2];p=+gb[c[(c[a>>2]|0)+48>>2]&15](a);i=+g[f>>2];j=+g[u>>2];k=+g[v>>2];if(i*(m-p*i)+j*(o-p*j)+k*(n-p*k)>-999999984306749440.0){g[d+(h<<4)>>2]=m-p*i;g[d+(h<<4)+4>>2]=o-p*j;g[d+(h<<4)+8>>2]=n-p*k;g[d+(h<<4)+12>>2]=0.0;q=+g[f>>2];s=+g[u>>2];t=+g[v>>2];r=i*(m-p*i)+j*(o-p*j)+k*(n-p*k)}else{q=i;s=j;t=k;r=-999999984306749440.0}c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;y=c[a+52>>2]|0;g[x+(y<<2)>>2]=-+g[a+28+(y<<2)>>2];p=w*q+ +g[x>>2];o=w*s+ +g[x+4>>2];m=w*t+ +g[x+8>>2];n=+gb[c[(c[a>>2]|0)+48>>2]&15](a);k=+g[f>>2];j=+g[u>>2];i=+g[v>>2];if(k*(p-n*k)+j*(o-n*j)+i*(m-n*i)>r){g[d+(h<<4)>>2]=p-n*k;g[d+(h<<4)+4>>2]=o-n*j;g[d+(h<<4)+8>>2]=m-n*i;g[d+(h<<4)+12>>2]=0.0}h=h+1|0;if((h|0)==(e|0))break;f=c[a+52>>2]|0}l=x;return}function Ag(a,b,d,e,f,h,i,j,k,l){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;k=k|0;l=+l;var m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;c[a>>2]=c[h>>2];c[a+4>>2]=c[h+4>>2];c[a+8>>2]=c[h+8>>2];c[a+12>>2]=c[h+12>>2];s=+g[e+4>>2];v=+g[a+8>>2];w=+g[e+8>>2];p=+g[a+4>>2];m=+g[a>>2];r=+g[e>>2];u=(s*v-w*p)*+g[b>>2]+ +g[b+4>>2]*(w*m-v*r)+(p*r-s*m)*+g[b+8>>2];t=(s*v-w*p)*+g[b+16>>2]+(w*m-v*r)*+g[b+20>>2]+(p*r-s*m)*+g[b+24>>2];s=(s*v-w*p)*+g[b+32>>2]+(w*m-v*r)*+g[b+36>>2]+(p*r-s*m)*+g[b+40>>2];g[a+16>>2]=u;g[a+20>>2]=t;g[a+24>>2]=s;g[a+28>>2]=0.0;r=+g[f+4>>2];w=+g[f+8>>2];n=+g[f>>2];q=+g[d>>2]*(r*-v-w*-p)+ +g[d+4>>2]*(w*-m-n*-v)+(n*-p-r*-m)*+g[d+8>>2];o=(r*-v-w*-p)*+g[d+16>>2]+(w*-m-n*-v)*+g[d+20>>2]+(n*-p-r*-m)*+g[d+24>>2];m=(r*-v-w*-p)*+g[d+32>>2]+(w*-m-n*-v)*+g[d+36>>2]+(n*-p-r*-m)*+g[d+40>>2];g[a+32>>2]=q;g[a+36>>2]=o;g[a+40>>2]=m;g[a+44>>2]=0.0;u=+g[i>>2]*u;t=+g[i+4>>2]*t;s=+g[i+8>>2]*s;g[a+48>>2]=u;g[a+52>>2]=t;g[a+56>>2]=s;g[a+60>>2]=0.0;r=+g[k>>2]*q;p=+g[k+4>>2]*o;n=+g[k+8>>2]*m;g[a+64>>2]=r;g[a+68>>2]=p;g[a+72>>2]=n;g[a+76>>2]=0.0;g[a+80>>2]=u*+g[a+16>>2]+t*+g[a+20>>2]+s*+g[a+24>>2]+j+l+(r*q+p*o+n*m);return}function Bg(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=l;l=l+96|0;g=c[b+8>>2]|0;if((g|0)==(c[b+12>>2]|0)?(j=g|0?g<<1:1,(g|0)<(j|0)):0){if(!j)h=0;else{c[6472]=(c[6472]|0)+1;g=ic((j<<2|3)+16|0)|0;if(!g)h=0;else{c[(g+4+15&-16)+-4>>2]=g;h=g+4+15&-16}g=c[b+8>>2]|0}if((g|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[b+16>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(g|0))}i=c[b+16>>2]|0;if(i){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);g=c[b+8>>2]|0}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=h;c[b+12>>2]=j}c[(c[b+16>>2]|0)+(g<<2)>>2]=d;c[b+8>>2]=g+1;c[k+32>>2]=c[d+4>>2];c[k+32+4>>2]=c[d+4+4>>2];c[k+32+8>>2]=c[d+4+8>>2];c[k+32+12>>2]=c[d+4+12>>2];c[k+32+16>>2]=c[d+20>>2];c[k+32+16+4>>2]=c[d+20+4>>2];c[k+32+16+8>>2]=c[d+20+8>>2];c[k+32+16+12>>2]=c[d+20+12>>2];c[k+32+32>>2]=c[d+36>>2];c[k+32+32+4>>2]=c[d+36+4>>2];c[k+32+32+8>>2]=c[d+36+8>>2];c[k+32+32+12>>2]=c[d+36+12>>2];c[k+32+48>>2]=c[d+52>>2];c[k+32+48+4>>2]=c[d+52+4>>2];c[k+32+48+8>>2]=c[d+52+8>>2];c[k+32+48+12>>2]=c[d+52+12>>2];j=c[d+192>>2]|0;Nb[c[(c[j>>2]|0)+8>>2]&127](j,k+32|0,k+16|0,k);j=c[b+68>>2]|0;c[d+188>>2]=xb[c[(c[j>>2]|0)+8>>2]&3](j,k+16|0,k,c[(c[d+192>>2]|0)+4>>2]|0,d,e,f,c[b+24>>2]|0,0)|0;l=k;return}function Cg(b){b=b|0;var d=0,e=0,f=0;c[b>>2]=4288;if(a[b+272>>0]|0?(d=c[b+204>>2]|0,Ab[c[c[d>>2]>>2]&511](d),d=c[b+204>>2]|0,d|0):0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+196>>2]|0;if(d|0?(Ab[c[c[d>>2]>>2]&511](d),f=c[b+196>>2]|0,f|0):0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}if(a[b+273>>0]|0?(e=c[b+200>>2]|0,Ab[c[c[e>>2]>>2]&511](e),e=c[b+200>>2]|0,e|0):0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}d=c[b+316>>2]|0;if(d|0){if(a[b+320>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+316>>2]=0}a[b+320>>0]=1;c[b+316>>2]=0;c[b+308>>2]=0;c[b+312>>2]=0;d=c[b+288>>2]|0;if(d|0){if(a[b+292>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+288>>2]=0}a[b+292>>0]=1;c[b+288>>2]=0;c[b+280>>2]=0;c[b+284>>2]=0;d=c[b+240>>2]|0;if(d|0){if(a[b+244>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+240>>2]=0}a[b+244>>0]=1;c[b+240>>2]=0;c[b+232>>2]=0;c[b+236>>2]=0;d=c[b+220>>2]|0;if(d|0){if(a[b+224>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+220>>2]=0}a[b+224>>0]=1;c[b+220>>2]=0;c[b+212>>2]=0;c[b+216>>2]=0;d=c[b+188>>2]|0;if(!d){a[b+192>>0]=1;c[b+188>>2]=0;c[b+180>>2]=0;f=b+184|0;c[f>>2]=0;Aj(b);return}if(a[b+192>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+188>>2]=0;a[b+192>>0]=1;c[b+188>>2]=0;c[b+180>>2]=0;f=b+184|0;c[f>>2]=0;Aj(b);return}function Dg(b,d,e,f,h,i,j,k,l){b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=l|0;var m=0.0,n=0.0,o=0.0,p=0;p=qs()|0;c[p+8>>2]=0;g[p+12>>2]=0.0;c[p>>2]=8252;c[p+4>>2]=24;c[p+64>>2]=b;c[p+68>>2]=d;g[p+72>>2]=h;g[p+76>>2]=i;g[p+80>>2]=+(b+-1|0);g[p+84>>2]=+(d+-1|0);g[p+88>>2]=f;c[p+92>>2]=e;c[p+96>>2]=k;a[p+100>>0]=l&1;a[p+101>>0]=0;a[p+102>>0]=0;c[p+104>>2]=j;c[p+108>>2]=1065353216;c[p+112>>2]=1065353216;c[p+116>>2]=1065353216;g[p+120>>2]=0.0;switch(j|0){case 0:{g[p+16>>2]=h;c[p+20>>2]=0;c[p+24>>2]=0;g[p+28>>2]=0.0;g[p+32>>2]=i;g[p+36>>2]=+(b+-1|0);g[p+40>>2]=+(d+-1|0);g[p+44>>2]=0.0;f=0.0;m=+(d+-1|0);n=0.0;o=i;i=+(b+-1|0);break}case 1:{c[p+16>>2]=0;g[p+20>>2]=h;c[p+24>>2]=0;g[p+28>>2]=0.0;g[p+32>>2]=+(b+-1|0);g[p+36>>2]=i;g[p+40>>2]=+(d+-1|0);g[p+44>>2]=0.0;f=h;m=+(d+-1|0);n=0.0;o=+(b+-1|0);h=0.0;break}case 2:{c[p+16>>2]=0;c[p+20>>2]=0;g[p+24>>2]=h;g[p+28>>2]=0.0;g[p+32>>2]=+(b+-1|0);g[p+36>>2]=+(d+-1|0);g[p+40>>2]=i;g[p+44>>2]=0.0;f=0.0;m=i;n=h;o=+(b+-1|0);h=0.0;i=+(d+-1|0);break}default:{f=+g[p+20>>2];m=+g[p+40>>2];n=+g[p+24>>2];o=+g[p+32>>2];h=+g[p+16>>2];i=+g[p+36>>2]}}g[p+48>>2]=(h+o)*.5;g[p+52>>2]=(f+i)*.5;g[p+56>>2]=(n+m)*.5;g[p+60>>2]=0.0;return p|0}function Eg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;h=l;l=l+64|0;a[d+84>>0]=0;c[h>>2]=c[b+4>>2];c[h+4>>2]=c[b+4+4>>2];c[h+8>>2]=c[b+4+8>>2];c[h+12>>2]=c[b+4+12>>2];c[h+16>>2]=c[b+20>>2];c[h+16+4>>2]=c[b+20+4>>2];c[h+16+8>>2]=c[b+20+8>>2];c[h+16+12>>2]=c[b+20+12>>2];c[h+32>>2]=c[b+36>>2];c[h+32+4>>2]=c[b+36+4>>2];c[h+32+8>>2]=c[b+36+8>>2];c[h+32+12>>2]=c[b+36+12>>2];c[h+48>>2]=c[b+52>>2];c[h+48+4>>2]=c[b+52+4>>2];c[h+48+8>>2]=c[b+52+8>>2];c[h+48+12>>2]=c[b+52+12>>2];if(e?(f=c[b+480>>2]|0,f|0):0)Gb[c[(c[f>>2]|0)+8>>2]&127](f,h);w=+g[d+156>>2];u=+g[h>>2];v=+g[d+160>>2];t=+g[h+4>>2];o=+g[d+164>>2];s=+g[h+8>>2];r=+g[h+16>>2];q=+g[h+20>>2];p=+g[h+24>>2];n=+g[h+32>>2];k=+g[h+36>>2];i=+g[h+40>>2];m=w*r+v*q+o*p+ +g[h+52>>2];j=w*n+v*k+o*i+ +g[h+56>>2];g[d+36>>2]=w*u+v*t+o*s+ +g[h+48>>2];g[d+40>>2]=m;g[d+44>>2]=j;g[d+48>>2]=0.0;j=+g[d+172>>2];m=+g[d+176>>2];o=+g[d+180>>2];g[d+52>>2]=u*j+t*m+s*o;g[d+56>>2]=j*r+m*q+o*p;g[d+60>>2]=j*n+m*k+o*i;g[d+64>>2]=0.0;o=+g[d+188>>2];m=+g[d+192>>2];j=+g[d+196>>2];g[d+68>>2]=u*o+t*m+s*j;g[d+72>>2]=o*r+m*q+j*p;g[d+76>>2]=o*n+m*k+j*i;g[d+80>>2]=0.0;l=h;return}function Fg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0.0;a:do if(b>>>0<=20)do switch(b|0){case 9:{e=(c[d>>2]|0)+(4-1)&~(4-1);b=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=b;break a}case 10:{b=(c[d>>2]|0)+(4-1)&~(4-1);e=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=e;c[a+4>>2]=((e|0)<0)<<31>>31;break a}case 11:{b=(c[d>>2]|0)+(4-1)&~(4-1);e=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=e;c[a+4>>2]=0;break a}case 12:{f=(c[d>>2]|0)+(8-1)&~(8-1);b=c[f>>2]|0;e=c[f+4>>2]|0;c[d>>2]=f+8;c[a>>2]=b;c[a+4>>2]=e;break a}case 13:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=(f&65535)<<16>>16;c[a+4>>2]=(((f&65535)<<16>>16|0)<0)<<31>>31;break a}case 14:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=f&65535;c[a+4>>2]=0;break a}case 15:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=(f&255)<<24>>24;c[a+4>>2]=(((f&255)<<24>>24|0)<0)<<31>>31;break a}case 16:{e=(c[d>>2]|0)+(4-1)&~(4-1);f=c[e>>2]|0;c[d>>2]=e+4;c[a>>2]=f&255;c[a+4>>2]=0;break a}case 17:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}case 18:{f=(c[d>>2]|0)+(8-1)&~(8-1);g=+h[f>>3];c[d>>2]=f+8;h[a>>3]=g;break a}default:break a}while(0);while(0);return}function Gg(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0;w=l;l=l+2048|0;if((e|0)>0)f=0;else{l=w;return}do{g[d+(f<<4)+12>>2]=-999999984306749440.0;f=f+1|0}while((f|0)!=(e|0));t=0;do{if((qb[c[(c[a>>2]|0)+96>>2]&127](a)|0)>0){p=b+(t<<4)|0;s=b+(t<<4)+4|0;o=b+(t<<4)+8|0;r=d+(t<<4)+12|0;q=d+(t<<4)|0;u=0;do{if(((qb[c[(c[a>>2]|0)+96>>2]&127](a)|0)-u|0)<128){f=(qb[c[(c[a>>2]|0)+96>>2]&127](a)|0)-u|0;if((f|0)>0)v=10;else{i=-3402823466385288598117041.0e14;f=-1}}else{f=128;v=10}if((v|0)==10){v=0;h=0;do{Kb[c[(c[a>>2]|0)+108>>2]&127](a,h,w+(h<<4)|0);h=h+1|0}while((h|0)!=(f|0));j=+g[p>>2];k=+g[s>>2];m=+g[o>>2];n=0;i=-3402823466385288598117041.0e14;h=-1;do{x=j*+g[w+(n<<4)>>2]+k*+g[w+(n<<4)+4>>2]+m*+g[w+(n<<4)+8>>2];y=x>i;h=y?n:h;i=y?x:i;n=n+1|0}while((n|0)!=(f|0));f=h}if(i>+g[r>>2]){y=w+(f<<4)|0;c[q>>2]=c[y>>2];c[q+4>>2]=c[y+4>>2];c[q+8>>2]=c[y+8>>2];c[q+12>>2]=c[y+12>>2];g[r>>2]=i}u=u+128|0}while((u|0)<(qb[c[(c[a>>2]|0)+96>>2]&127](a)|0))}t=t+1|0}while((t|0)!=(e|0));l=w;return}function Hg(b,d){b=b|0;d=d|0;var e=0;e=zs()|0;vj(e,5,b);c[e>>2]=4844;c[e+300>>2]=c[d>>2];c[e+300+4>>2]=c[d+4>>2];c[e+300+8>>2]=c[d+8>>2];c[e+300+12>>2]=c[d+12>>2];c[e+316>>2]=c[d+16>>2];c[e+316+4>>2]=c[d+16+4>>2];c[e+316+8>>2]=c[d+16+8>>2];c[e+316+12>>2]=c[d+16+12>>2];c[e+332>>2]=c[d+32>>2];c[e+332+4>>2]=c[d+32+4>>2];c[e+332+8>>2]=c[d+32+8>>2];c[e+332+12>>2]=c[d+32+12>>2];c[e+348>>2]=c[d+48>>2];c[e+348+4>>2]=c[d+48+4>>2];c[e+348+8>>2]=c[d+48+8>>2];c[e+348+12>>2]=c[d+48+12>>2];a[e+527>>0]=0;c[e+364>>2]=c[e+300>>2];c[e+364+4>>2]=c[e+300+4>>2];c[e+364+8>>2]=c[e+300+8>>2];c[e+364+12>>2]=c[e+300+12>>2];c[e+380>>2]=c[e+316>>2];c[e+380+4>>2]=c[e+316+4>>2];c[e+380+8>>2]=c[e+316+8>>2];c[e+380+12>>2]=c[e+316+12>>2];c[e+396>>2]=c[e+332>>2];c[e+396+4>>2]=c[e+332+4>>2];c[e+396+8>>2]=c[e+332+8>>2];c[e+396+12>>2]=c[e+332+12>>2];a[e+524>>0]=0;a[e+525>>0]=0;a[e+526>>0]=0;a[e+552>>0]=0;c[e+412>>2]=0;c[e+412+4>>2]=0;c[e+412+8>>2]=0;c[e+412+12>>2]=0;g[e+572>>2]=-1.0;g[e+444>>2]=999999984306749440.0;g[e+448>>2]=999999984306749440.0;g[e+452>>2]=999999984306749440.0;g[e+428>>2]=1.0;g[e+432>>2]=.30000001192092896;g[e+436>>2]=1.0;g[e+440>>2]=.009999999776482582;g[e+456>>2]=.05000000074505806;c[e+592>>2]=0;g[e+596>>2]=0.0;g[e+600>>2]=.699999988079071;g[e+604>>2]=0.0;return e|0}function Ig(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=e|0;f=+f;h=h|0;var i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;k=l;l=l+16|0;j=c*f+ +g[a+52>>2];i=d*f+ +g[a+56>>2];g[h+48>>2]=b*f+ +g[a+48>>2];g[h+52>>2]=j;g[h+56>>2]=i;g[h+60>>2]=0.0;i=+g[e>>2];j=+g[e+4>>2];b=+g[e+8>>2];c=+C(+(i*i+j*j+b*b));c=c*f>.7853981852531433?.7853981852531433/f:c;if(c<1.0000000474974513e-03)d=f*.5-c*f*f*f*.02083333395421505*c;else d=+F(+(c*.5*f))/c;o=i*d;n=j*d;i=b*d;q=+E(+(c*f*.5));lh(a,k);b=+g[k>>2];p=+g[k+12>>2];c=+g[k+8>>2];f=+g[k+4>>2];r=1.0/+C(+((q*p-o*b-n*f-i*c)*(q*p-o*b-n*f-i*c)+((i*p+q*c+o*f-n*b)*(i*p+q*c+o*f-n*b)+((q*b+o*p+n*c-i*f)*(q*b+o*p+n*c-i*f)+(i*b+(n*p+q*f)-o*c)*(i*b+(n*p+q*f)-o*c)))));d=(q*b+o*p+n*c-i*f)*r;j=r*(i*b+(n*p+q*f)-o*c);m=r*(i*p+q*c+o*f-n*b);c=r*(q*p-o*b-n*f-i*c);i=d*(2.0/(c*c+(m*m+(d*d+j*j))));f=j*(2.0/(c*c+(m*m+(d*d+j*j))));b=m*(2.0/(c*c+(m*m+(d*d+j*j))));g[h>>2]=1.0-(j*f+m*b);g[h+4>>2]=d*f-c*b;g[h+8>>2]=d*b+c*f;g[h+12>>2]=0.0;g[h+16>>2]=d*f+c*b;g[h+20>>2]=1.0-(d*i+m*b);g[h+24>>2]=j*b-c*i;g[h+28>>2]=0.0;g[h+32>>2]=d*b-c*f;g[h+36>>2]=j*b+c*i;g[h+40>>2]=1.0-(d*i+j*f);g[h+44>>2]=0.0;l=k;return}function Jg(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0;r=l;l=l+16|0;g[e>>2]=3402823466385288598117041.0e14;g[f>>2]=-3402823466385288598117041.0e14;m=c[a+96>>2]|0;if((m|0)>0){q=0;do{t=c[a+104>>2]|0;s=+g[t+(q<<4)>>2]*+g[a+12>>2];n=+g[t+(q<<4)+4>>2]*+g[a+16>>2];o=+g[t+(q<<4)+8>>2]*+g[a+20>>2];k=s*+g[b>>2]+n*+g[b+4>>2]+o*+g[b+8>>2]+ +g[b+48>>2];p=s*+g[b+16>>2]+n*+g[b+20>>2]+o*+g[b+24>>2]+ +g[b+52>>2];o=s*+g[b+32>>2]+n*+g[b+36>>2]+o*+g[b+40>>2]+ +g[b+56>>2];n=k*+g[d>>2]+p*+g[d+4>>2]+o*+g[d+8>>2];if(n<+g[e>>2]){g[e>>2]=n;g[h>>2]=k;g[h+4>>2]=p;g[h+8>>2]=o;g[h+12>>2]=0.0}if(n>+g[f>>2]){g[f>>2]=n;g[i>>2]=k;g[i+4>>2]=p;g[i+8>>2]=o;g[i+12>>2]=0.0}q=q+1|0}while((q|0)!=(m|0));n=+g[f>>2];m=(g[j>>2]=n,c[j>>2]|0)}else{m=-8388609;n=-3402823466385288598117041.0e14}k=+g[e>>2];if(!(k>n)){l=r;return}c[e>>2]=m;g[f>>2]=k;c[r>>2]=c[h>>2];c[r+4>>2]=c[h+4>>2];c[r+8>>2]=c[h+8>>2];c[r+12>>2]=c[h+12>>2];c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];l=r;return}function Kg(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+48|0;e=(c[a+48>>2]|0)+4|0;c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];c[e+8>>2]=c[b+8>>2];c[e+12>>2]=c[b+12>>2];b=d+32+4|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;g[d+32>>2]=1.0;Kb[c[(c[a>>2]|0)+68>>2]&127](d+16|0,a,d+32|0);g[a+32>>2]=+g[d+16>>2]+ +g[a+12>>2];g[d+32>>2]=-1.0;Kb[c[(c[a>>2]|0)+68>>2]&127](d,a,d+32|0);c[d+16>>2]=c[d>>2];c[d+16+4>>2]=c[d+4>>2];c[d+16+8>>2]=c[d+8>>2];c[d+16+12>>2]=c[d+12>>2];g[a+16>>2]=+g[d+16>>2]-+g[a+12>>2];c[d+32>>2]=0;c[d+32+4>>2]=0;c[d+32+8>>2]=0;c[d+32+12>>2]=0;g[b>>2]=1.0;Kb[c[(c[a>>2]|0)+68>>2]&127](d+16|0,a,d+32|0);g[a+36>>2]=+g[d+16+4>>2]+ +g[a+12>>2];g[b>>2]=-1.0;Kb[c[(c[a>>2]|0)+68>>2]&127](d,a,d+32|0);c[d+16>>2]=c[d>>2];c[d+16+4>>2]=c[d+4>>2];c[d+16+8>>2]=c[d+8>>2];c[d+16+12>>2]=c[d+12>>2];g[a+20>>2]=+g[d+16+4>>2]-+g[a+12>>2];c[d+32>>2]=0;c[d+32+4>>2]=0;c[d+32+8>>2]=0;c[d+32+12>>2]=0;g[d+32+8>>2]=1.0;Kb[c[(c[a>>2]|0)+68>>2]&127](d+16|0,a,d+32|0);g[a+40>>2]=+g[d+16+8>>2]+ +g[a+12>>2];g[d+32+8>>2]=-1.0;Kb[c[(c[a>>2]|0)+68>>2]&127](d,a,d+32|0);c[d+16>>2]=c[d>>2];c[d+16+4>>2]=c[d+4>>2];c[d+16+8>>2]=c[d+8>>2];c[d+16+12>>2]=c[d+12>>2];g[a+24>>2]=+g[d+16+8>>2]-+g[a+12>>2];l=d;return}function Lg(b,d,e){b=b|0;d=+d;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0;f=c[b+8>>2]|0;if(f|0?(c[f+204>>2]&3|0)==0:0){if((c[f+216>>2]&-2|0)!=4)c[f+216>>2]=1;g[f+220>>2]=0.0}f=c[b+12>>2]|0;if(f|0?(c[f+204>>2]&3|0)==0:0){if((c[f+216>>2]&-2|0)!=4)c[f+216>>2]=1;g[f+220>>2]=0.0}f=c[b+20>>2]|0;if(f|0?(c[f+204>>2]&3|0)==0:0){if((c[f+216>>2]&-2|0)!=4)c[f+216>>2]=1;g[f+220>>2]=0.0}f=c[b+24>>2]|0;if(f|0?(c[f+204>>2]&3|0)==0:0){if((c[f+216>>2]&-2|0)!=4)c[f+216>>2]=1;g[f+220>>2]=0.0}f=c[b+156>>2]|0;c[b+156>>2]=f+1;a[b+152>>0]=(f|0)>=(c[b+160>>2]|0)&1;if(f|0){c[b+72>>2]=0;c[b+72+4>>2]=0;c[b+72+8>>2]=0;c[b+72+12>>2]=0;c[b+72+16>>2]=0;c[b+72+20>>2]=0;c[b+72+24>>2]=0;c[b+72+28>>2]=0;return}j=+g[b+64>>2];i=1.0/d*+g[b+72>>2]*j;h=1.0/d*j*+g[b+76>>2];d=1.0/d*j*+g[b+80>>2];g[b+72>>2]=i;g[b+76>>2]=h;g[b+80>>2]=d;g[b+84>>2]=0.0;j=+g[b+68>>2];if(j>0.0){l=j*i*+g[b+120>>2]+j*h*+g[b+124>>2]+j*d*+g[b+128>>2];k=j*i*+g[b+136>>2]+j*h*+g[b+140>>2]+j*d*+g[b+144>>2];g[b+88>>2]=j*i*+g[b+104>>2]+j*h*+g[b+108>>2]+j*d*+g[b+112>>2];g[b+92>>2]=l;g[b+96>>2]=k;g[b+100>>2]=0.0;g[b+72>>2]=(1.0-j)*i;g[b+76>>2]=(1.0-j)*h;g[b+80>>2]=(1.0-j)*d;i=(1.0-j)*i;h=(1.0-j)*h;d=(1.0-j)*d}g[b+72>>2]=1.0/+(e|0)*i;g[b+76>>2]=1.0/+(e|0)*h;g[b+80>>2]=1.0/+(e|0)*d;return}function Mg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;while(1){l=c[a+12>>2]|0;k=c[l+(((b+d|0)/2|0)<<2)>>2]|0;e=b;f=d;while(1){j=c[(c[k+740>>2]|0)+208>>2]|0;if((j|0)>-1)while(1){h=c[l+(e<<2)>>2]|0;g=c[(c[h+740>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+744>>2]|0)+208>>2]|0;if((g|0)<(j|0))e=e+1|0;else break}else{i=c[(c[k+744>>2]|0)+208>>2]|0;while(1){h=c[l+(e<<2)>>2]|0;g=c[(c[h+740>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+744>>2]|0)+208>>2]|0;if((g|0)<(i|0))e=e+1|0;else break}}if((j|0)>-1)while(1){h=c[l+(f<<2)>>2]|0;g=c[(c[h+740>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+744>>2]|0)+208>>2]|0;if((j|0)<(g|0))f=f+-1|0;else break}else{i=c[(c[k+744>>2]|0)+208>>2]|0;while(1){h=c[l+(f<<2)>>2]|0;g=c[(c[h+740>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+744>>2]|0)+208>>2]|0;if((i|0)<(g|0))f=f+-1|0;else break}}if((e|0)<=(f|0)){i=l+(e<<2)|0;j=c[i>>2]|0;c[i>>2]=c[l+(f<<2)>>2];c[(c[a+12>>2]|0)+(f<<2)>>2]=j;e=e+1|0;f=f+-1|0}if((e|0)>(f|0))break;l=c[a+12>>2]|0}if((f|0)>(b|0))Mg(a,b,f);if((e|0)<(d|0))b=e;else break}return}function Ng(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0;o=l;l=l+16|0;if((f|0)>-3&(f+3|0)>-1){c[6472]=(c[6472]|0)+1;a=ic((f+3<<4|3)+16|0)|0;if(!a)h=0;else{c[(a+4+15&-16)+-4>>2]=a;h=a+4+15&-16}a=0;do{n=h+(a<<4)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];a=a+1|0}while((a|0)!=(f+3|0));n=h;m=h}else{n=0;m=0}if((f|0)>-3){h=0;k=m;while(1){if(!h)i=0.0;else{a=h;j=.5;i=0.0;while(1){i=(a&1|0)==0?i:i+j;a=a>>1;if(!a)break;else j=j*.5}}j=i*2.0+-1.0;p=(+(h<<1|0)*3.1415927410125732+3.1415927410125732)/+(f+3|0);q=+C(+(1.0-j*j));i=q*+F(+p);g[k>>2]=q*+E(+p);g[k+4>>2]=i;g[k+8>>2]=j;g[k+12>>2]=0.0;h=h+1|0;if((h|0)==(f+3|0))break;else k=k+16|0}a=0;do{r=m+(a<<4)|0;h=m+(a<<4)+4|0;k=m+(a<<4)+8|0;p=+g[h>>2]*+g[e+4>>2]+ +g[d+4>>2];q=+g[k>>2]*+g[e+8>>2]+ +g[d+8>>2];g[r>>2]=+g[r>>2]*+g[e>>2]+ +g[d>>2];g[h>>2]=p;g[k>>2]=q;g[m+(a<<4)+12>>2]=0.0;a=a+1|0}while((a|0)<(f+3|0))}a=_b(b,m,f+3|0,1)|0;if((m|0)==0|(n|0)==0){l=o;return a|0}c[6473]=(c[6473]|0)+1;nd(c[n+-4>>2]|0);l=o;return a|0}function Og(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0;j=l;l=l+48|0;n=+g[d>>2];o=+g[d+4>>2];m=+g[d+8>>2];p=n*+g[b+4>>2]+o*+g[b+20>>2]+m*+g[b+36>>2];q=n*+g[b+8>>2]+o*+g[b+24>>2]+m*+g[b+40>>2];g[j+32>>2]=+g[b>>2]*n+ +g[b+16>>2]*o+ +g[b+32>>2]*m;g[j+32+4>>2]=p;g[j+32+8>>2]=q;g[j+32+12>>2]=0.0;Kb[c[(c[a>>2]|0)+64>>2]&127](j+16|0,a,j+32|0);q=+g[j+16>>2];p=+g[j+16+4>>2];m=+g[j+16+8>>2];o=q*+g[b>>2]+p*+g[b+4>>2]+m*+g[b+8>>2]+ +g[b+48>>2];n=q*+g[b+16>>2]+p*+g[b+20>>2]+m*+g[b+24>>2]+ +g[b+52>>2];m=q*+g[b+32>>2]+p*+g[b+36>>2]+m*+g[b+40>>2]+ +g[b+56>>2];r=c[(c[a>>2]|0)+64>>2]|0;p=-+g[j+32+4>>2];q=-+g[j+32+8>>2];g[j>>2]=-+g[j+32>>2];g[j+4>>2]=p;g[j+8>>2]=q;g[j+12>>2]=0.0;Kb[r&127](j+16|0,a,j);q=+g[j+16>>2];p=+g[j+16+4>>2];i=+g[j+16+8>>2];k=q*+g[b>>2]+p*+g[b+4>>2]+i*+g[b+8>>2]+ +g[b+48>>2];h=q*+g[b+16>>2]+p*+g[b+20>>2]+i*+g[b+24>>2]+ +g[b+52>>2];i=q*+g[b+32>>2]+p*+g[b+36>>2]+i*+g[b+40>>2]+ +g[b+56>>2];g[e>>2]=o*+g[d>>2]+n*+g[d+4>>2]+m*+g[d+8>>2];i=k*+g[d>>2]+h*+g[d+4>>2]+i*+g[d+8>>2];g[f>>2]=i;h=+g[e>>2];if(!(h>i)){l=j;return}g[e>>2]=i;g[f>>2]=h;l=j;return}function Pg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;while(1){l=c[a+12>>2]|0;k=c[l+(((b+d|0)/2|0)<<2)>>2]|0;e=b;f=d;while(1){j=c[(c[k+28>>2]|0)+208>>2]|0;if((j|0)>-1)while(1){h=c[l+(e<<2)>>2]|0;g=c[(c[h+28>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+32>>2]|0)+208>>2]|0;if((g|0)<(j|0))e=e+1|0;else break}else{i=c[(c[k+32>>2]|0)+208>>2]|0;while(1){h=c[l+(e<<2)>>2]|0;g=c[(c[h+28>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+32>>2]|0)+208>>2]|0;if((g|0)<(i|0))e=e+1|0;else break}}if((j|0)>-1)while(1){h=c[l+(f<<2)>>2]|0;g=c[(c[h+28>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+32>>2]|0)+208>>2]|0;if((j|0)<(g|0))f=f+-1|0;else break}else{i=c[(c[k+32>>2]|0)+208>>2]|0;while(1){h=c[l+(f<<2)>>2]|0;g=c[(c[h+28>>2]|0)+208>>2]|0;if((g|0)<=-1)g=c[(c[h+32>>2]|0)+208>>2]|0;if((i|0)<(g|0))f=f+-1|0;else break}}if((e|0)<=(f|0)){i=l+(e<<2)|0;j=c[i>>2]|0;c[i>>2]=c[l+(f<<2)>>2];c[(c[a+12>>2]|0)+(f<<2)>>2]=j;e=e+1|0;f=f+-1|0}if((e|0)>(f|0))break;l=c[a+12>>2]|0}if((f|0)>(b|0))Pg(a,b,f);if((e|0)<(d|0))b=e;else break}return}function Qg(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+16|0;h=c[a+12>>2]|0;i=c[h+(((d+b|0)/2|0)<<4)>>2]|0;j=c[h+(((d+b|0)/2|0)<<4)+4>>2]|0;k=c[h+(((d+b|0)/2|0)<<4)+8>>2]|0;e=b;f=d;while(1){g=e;while(1){e=c[h+(g<<4)+4>>2]|0;if((e|0)>=(j|0)){if((e|0)!=(j|0))break;e=c[h+(g<<4)>>2]|0;if((e|0)>=(i|0)){if((e|0)!=(i|0))break;if((c[h+(g<<4)+8>>2]|0)>=(k|0))break}}g=g+1|0}while(1){e=c[h+(f<<4)+4>>2]|0;if((j|0)>=(e|0)){if((j|0)!=(e|0))break;e=c[h+(f<<4)>>2]|0;if((i|0)>=(e|0)){if((i|0)!=(e|0))break;if((k|0)>=(c[h+(f<<4)+8>>2]|0))break}}f=f+-1|0}if((g|0)>(f|0))e=g;else{e=h+(g<<4)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];h=h+(f<<4)|0;c[e>>2]=c[h>>2];c[e+4>>2]=c[h+4>>2];c[e+8>>2]=c[h+8>>2];c[e+12>>2]=c[h+12>>2];e=(c[a+12>>2]|0)+(f<<4)|0;c[e>>2]=c[m>>2];c[e+4>>2]=c[m+4>>2];c[e+8>>2]=c[m+8>>2];c[e+12>>2]=c[m+12>>2];e=g+1|0;f=f+-1|0}if((e|0)>(f|0))break;h=c[a+12>>2]|0}if((f|0)>(b|0))Qg(a,b,f);if((e|0)>=(d|0)){l=m;return}Qg(a,e,d);l=m;return}function Rg(a){a=a|0;var b=0,d=0,e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;tm(a+988|0);if((c[a+752>>2]|0)<=0)return;o=0;do{f=c[a+760>>2]|0;n=f+(o*44|0)|0;d=c[f+(o*44|0)+8>>2]|0;e=c[f+(o*44|0)+12>>2]|0;b=c[f+(o*44|0)+16>>2]|0;k=+g[d+8>>2];m=+g[d+12>>2];l=+g[d+16>>2];q=+g[d+20>>2];u=+g[e+8>>2];h=u>2];i=r>2];j=s>2];p=t>2];h=t>2];i=s>2];j=r>2];p=u>2]|0;if(!b){c[6472]=(c[6472]|0)+1;b=ic(63)|0;if(!b)b=0;else{c[(b+4+15&-16)+-4>>2]=b;b=b+4+15&-16}d=b;e=d+44|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0))}else c[a+992>>2]=0;c[b+32>>2]=0;c[b+36>>2]=n;c[b+40>>2]=0;g[b>>2]=h;g[b+4>>2]=i;g[b+8>>2]=j;g[b+12>>2]=p;g[b+16>>2]=k;g[b+20>>2]=m;g[b+24>>2]=l;g[b+28>>2]=q;af(a+988|0,c[a+988>>2]|0,b);c[a+1e3>>2]=(c[a+1e3>>2]|0)+1;c[f+(o*44|0)+40>>2]=b;o=o+1|0}while((o|0)<(c[a+752>>2]|0));return}function Sg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0;if((c[a>>2]|0)==(b|0)){c[a>>2]=0;a=0;return a|0}e=c[b+32>>2]|0;d=c[e+32>>2]|0;b=c[e+36+(((c[e+40>>2]|0)!=(b|0)&1)<<2)>>2]|0;if(!d){c[a>>2]=b;c[b+32>>2]=0;d=c[a+4>>2]|0;if(!d)d=b;else{c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);d=c[a>>2]|0}c[a+4>>2]=e;a=d;return a|0}c[d+36+(((c[d+40>>2]|0)==(e|0)&1)<<2)>>2]=b;c[b+32>>2]=d;b=c[a+4>>2]|0;if(b|0){c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0)}c[a+4>>2]=e;do{s=+g[d>>2];x=d+4|0;q=+g[x>>2];v=d+8|0;o=+g[v>>2];y=d+16|0;m=+g[y>>2];w=d+20|0;i=+g[w>>2];e=d+24|0;k=+g[e>>2];u=c[d+36>>2]|0;b=c[d+40>>2]|0;t=+g[u>>2];r=+g[b>>2];r=t>2]=r;t=+g[u+16>>2];l=+g[b+16>>2];l=t>l?t:l;g[y>>2]=l;t=+g[u+4>>2];p=+g[b+4>>2];p=t>2]=p;t=+g[u+20>>2];h=+g[b+20>>2];h=t>h?t:h;g[w>>2]=h;t=+g[u+8>>2];n=+g[b+8>>2];n=t>2]=n;t=+g[u+24>>2];j=+g[b+24>>2];j=t>j?t:j;g[e>>2]=j;if(!(s!=r|q!=p|o!=n|m!=l)?!(k!=j|i!=h):0){f=14;break}d=c[d+32>>2]|0}while((d|0)!=0);if((f|0)==14)return d|0;y=c[a>>2]|0;return y|0}function Tg(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,h=0.0,i=0,j=0;i=c[a+28>>2]|0;e=0.0;f=0.0;h=0.0;j=0;a:while(1){switch(j|0){case 0:{e=+g[a+80>>2]+ +g[a+64>>2];f=+g[a+84>>2]+ +g[a+68>>2];h=+g[a+88>>2]+ +g[a+72>>2];break}case 1:{e=+g[a+80>>2]+ +g[a+64>>2];f=+g[a+84>>2]+ +g[a+68>>2];h=+g[a+72>>2]-+g[a+88>>2];break}case 2:{e=+g[a+80>>2]+ +g[a+64>>2];f=+g[a+68>>2]-+g[a+84>>2];h=+g[a+88>>2]+ +g[a+72>>2];break}case 3:{e=+g[a+80>>2]+ +g[a+64>>2];f=+g[a+68>>2]-+g[a+84>>2];h=+g[a+72>>2]-+g[a+88>>2];break}case 4:{e=+g[a+64>>2]-+g[a+80>>2];f=+g[a+84>>2]+ +g[a+68>>2];h=+g[a+88>>2]+ +g[a+72>>2];break}case 5:{e=+g[a+64>>2]-+g[a+80>>2];f=+g[a+84>>2]+ +g[a+68>>2];h=+g[a+72>>2]-+g[a+88>>2];break}case 6:{e=+g[a+64>>2]-+g[a+80>>2];f=+g[a+68>>2]-+g[a+84>>2];h=+g[a+88>>2]+ +g[a+72>>2];break}case 7:{e=+g[a+64>>2]-+g[a+80>>2];f=+g[a+68>>2]-+g[a+84>>2];h=+g[a+72>>2]-+g[a+88>>2];break}default:{}}if((i|0)>0){b=c[a+36>>2]|0;d=0;do{if(+g[b+(d*36|0)+32>>2]+(e*+g[b+(d*36|0)+20>>2]+f*+g[b+(d*36|0)+24>>2]+h*+g[b+(d*36|0)+28>>2])>0.0){b=0;d=16;break a}d=d+1|0}while((d|0)<(i|0))}j=j+1|0;if((j|0)>=8){b=1;d=16;break}}if((d|0)==16)return b|0;return 0}function Ug(a,b,d,e,f,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0;r=l;l=l+16|0;g[e>>2]=3402823466385288598117041.0e14;g[f>>2]=-3402823466385288598117041.0e14;m=c[a+8>>2]|0;if((m|0)>0){q=0;do{t=c[a+16>>2]|0;s=+g[t+(q<<4)>>2];n=+g[t+(q<<4)+4>>2];o=+g[t+(q<<4)+8>>2];k=s*+g[b>>2]+n*+g[b+4>>2]+o*+g[b+8>>2]+ +g[b+48>>2];p=s*+g[b+16>>2]+n*+g[b+20>>2]+o*+g[b+24>>2]+ +g[b+52>>2];o=s*+g[b+32>>2]+n*+g[b+36>>2]+o*+g[b+40>>2]+ +g[b+56>>2];n=k*+g[d>>2]+p*+g[d+4>>2]+o*+g[d+8>>2];if(n<+g[e>>2]){g[e>>2]=n;g[h>>2]=k;g[h+4>>2]=p;g[h+8>>2]=o;g[h+12>>2]=0.0}if(n>+g[f>>2]){g[f>>2]=n;g[i>>2]=k;g[i+4>>2]=p;g[i+8>>2]=o;g[i+12>>2]=0.0}q=q+1|0}while((q|0)!=(m|0));n=+g[f>>2];m=(g[j>>2]=n,c[j>>2]|0)}else{m=-8388609;n=-3402823466385288598117041.0e14}k=+g[e>>2];if(!(k>n)){l=r;return}c[e>>2]=m;g[f>>2]=k;c[r>>2]=c[h>>2];c[r+4>>2]=c[h+4>>2];c[r+8>>2]=c[h+8>>2];c[r+12>>2]=c[h+12>>2];c[h>>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];l=r;return}function Vg(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+32|0;j=(a[b+28>>0]|0)!=0;k=j?e:d;j=j?d:e;h=c[k+4>>2]|0;i=c[h+16>>2]|0;g=c[b+12>>2]|0;if((g|0)<(i|0)){if((c[b+16>>2]|0)<(i|0)){if(!i){e=g;f=0}else{c[6472]=(c[6472]|0)+1;d=ic((i<<2|3)+16|0)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}e=c[b+12>>2]|0;f=d}if((e|0)>0){d=0;do{c[f+(d<<2)>>2]=c[(c[b+20>>2]|0)+(d<<2)>>2];d=d+1|0}while((d|0)!=(e|0))}d=c[b+20>>2]|0;if(d|0){if(a[b+24>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+20>>2]=0}a[b+24>>0]=1;c[b+20>>2]=f;c[b+16>>2]=i;e=b+20|0}else e=b+20|0;d=g;do{c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)!=(i|0))}c[b+12>>2]=i;if((i|0)<=0){l=m;return}d=0;do{if(!(c[h+64>>2]|0)){e=c[(c[h+24>>2]|0)+(d*80|0)+64>>2]|0;f=c[k+8>>2]|0;g=c[k+12>>2]|0;c[m>>2]=k;c[m+4>>2]=e;c[m+8>>2]=f;c[m+12>>2]=g;c[m+16>>2]=-1;c[m+20>>2]=d;g=c[b+4>>2]|0;g=vb[c[(c[g>>2]|0)+8>>2]&31](g,m,j,c[b+32>>2]|0)|0;c[(c[b+20>>2]|0)+(d<<2)>>2]=g}else c[(c[b+20>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)!=(i|0));l=m;return}function Wg(a,d,e){a=a|0;d=d|0;e=e|0;Zh(a,d,e)|0;c[d+52>>2]=c[a+48>>2];c[d+56>>2]=c[a+52>>2];c[d+60>>2]=c[a+56>>2];c[d+64>>2]=c[a+60>>2];c[d+68>>2]=c[a+64>>2];c[d+72>>2]=c[a+68>>2];c[d+76>>2]=c[a+72>>2];c[d+80>>2]=c[a+76>>2];c[d+84>>2]=c[a+80>>2];c[d+88>>2]=c[a+84>>2];c[d+92>>2]=c[a+88>>2];c[d+96>>2]=c[a+92>>2];c[d+100>>2]=c[a+96>>2];c[d+104>>2]=c[a+100>>2];c[d+108>>2]=c[a+104>>2];c[d+112>>2]=c[a+108>>2];c[d+116>>2]=c[a+112>>2];c[d+120>>2]=c[a+116>>2];c[d+124>>2]=c[a+120>>2];c[d+128>>2]=c[a+124>>2];c[d+132>>2]=c[a+128>>2];c[d+136>>2]=c[a+132>>2];c[d+140>>2]=c[a+136>>2];c[d+144>>2]=c[a+140>>2];c[d+148>>2]=c[a+144>>2];c[d+152>>2]=c[a+148>>2];c[d+156>>2]=c[a+152>>2];c[d+160>>2]=c[a+156>>2];c[d+164>>2]=c[a+160>>2];c[d+168>>2]=c[a+164>>2];c[d+172>>2]=c[a+168>>2];c[d+176>>2]=c[a+172>>2];c[d+228>>2]=c[a+868>>2];c[d+212>>2]=c[a+872>>2];c[d+196>>2]=c[a+680>>2];c[d+180>>2]=c[a+696>>2];c[d+232>>2]=c[a+932>>2];c[d+216>>2]=c[a+936>>2];c[d+200>>2]=c[a+684>>2];c[d+184>>2]=c[a+700>>2];c[d+236>>2]=c[a+996>>2];c[d+220>>2]=c[a+1e3>>2];c[d+204>>2]=c[a+688>>2];c[d+188>>2]=c[a+704>>2];a=b[a+1300>>1]|0;c[d+244>>2]=a&255;c[d+248>>2]=(a&65535)>>>8&65535;return 12657}function Xg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[b+32>>2]|0;if(!d)g=0;else g=c[b+40>>2]|0;e=c[b+52>>2]|0;if(!e)h=0;else h=c[b+60>>2]|0;f=c[b+72>>2]|0;if(!f)i=0;else i=c[b+80>>2]|0;j=c[b+8>>2]|0;+pb[c[(c[j>>2]|0)+12>>2]&3](j,g,d,h,e,i,f,c[b+4>>2]|0,c[b+20>>2]|0,c[b+24>>2]|0);d=c[b+32>>2]|0;if((d|0)<0){if((c[b+36>>2]|0)<0){e=c[b+40>>2]|0;if(e|0){if(a[b+44>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+40>>2]=0}a[b+44>>0]=1;c[b+40>>2]=0;c[b+36>>2]=0}do{c[(c[b+40>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)!=0)}c[b+32>>2]=0;d=c[b+52>>2]|0;if((d|0)<0){if((c[b+56>>2]|0)<0){e=c[b+60>>2]|0;if(e|0){if(a[b+64>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+60>>2]=0}a[b+64>>0]=1;c[b+60>>2]=0;c[b+56>>2]=0}do{c[(c[b+60>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)!=0)}c[b+52>>2]=0;d=c[b+72>>2]|0;if((d|0)>=0){c[b+72>>2]=0;return}if((c[b+76>>2]|0)<0){e=c[b+80>>2]|0;if(e|0){if(a[b+84>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+80>>2]=0}a[b+84>>0]=1;c[b+80>>2]=0;c[b+76>>2]=0}do{c[(c[b+80>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)!=0);c[b+72>>2]=0;return}function Yg(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[6472]=(c[6472]|0)+1;d=ic(39)|0;if(!d)i=0;else{c[(d+4+15&-16)+-4>>2]=d;i=d+4+15&-16}g=i;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;if((c[b+872>>2]|0)>0){h=c[c[b+880>>2]>>2]|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];c[i+16>>2]=c[h+16>>2]}else{c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0}d=c[b+872>>2]|0;if((d|0)!=(c[b+876>>2]|0)){h=d;f=b+880|0;f=c[f>>2]|0;f=f+(h<<2)|0;c[f>>2]=g;h=h+1|0;c[b+872>>2]=h;return i|0}h=d|0?d<<1:1;if((d|0)>=(h|0)){h=d;f=b+880|0;f=c[f>>2]|0;f=f+(h<<2)|0;c[f>>2]=g;h=h+1|0;c[b+872>>2]=h;return i|0}if(!h)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((h<<2|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[b+872>>2]|0}if((d|0)>0){f=0;do{c[e+(f<<2)>>2]=c[(c[b+880>>2]|0)+(f<<2)>>2];f=f+1|0}while((f|0)!=(d|0))}f=c[b+880>>2]|0;if(f){if(a[b+884>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0);d=c[b+872>>2]|0}c[b+880>>2]=0}a[b+884>>0]=1;c[b+880>>2]=e;c[b+876>>2]=h;h=d;f=b+880|0;f=c[f>>2]|0;f=f+(h<<2)|0;c[f>>2]=g;h=h+1|0;c[b+872>>2]=h;return i|0}function Zg(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0.0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;l=+g[d>>2];if(+g[b>>2]<=l){i=+g[d+4>>2];if((((+g[b+4>>2]<=i?+g[b+8>>2]<=+g[d+8>>2]:0)?+g[b+16>>2]>=+g[d+16>>2]:0)?+g[b+20>>2]>=+g[d+20>>2]:0)?+g[b+24>>2]>=+g[d+24>>2]:0){d=0;return d|0}else h=d+4|0}else{i=+g[d+4>>2];h=d+4|0}g[d>>2]=l-f;n=i-f;g[h>>2]=n;i=+g[d+8>>2]-f;g[d+8>>2]=i;q=+g[d+16>>2]+f;g[d+16>>2]=q;o=+g[d+20>>2]+f;g[d+20>>2]=o;m=+g[d+24>>2]+f;g[d+24>>2]=m;p=+g[e>>2];g[(p>0.0?d+16|0:d)>>2]=p+(p>0.0?q:l-f);f=+g[e+4>>2];g[(f>0.0?d+20|0:h)>>2]=f+(f>0.0?o:n);f=+g[e+8>>2];g[(f>0.0?d+24|0:d+8|0)>>2]=f+(f>0.0?m:i);h=Sg(a,b)|0;a:do if(h){j=c[a+8>>2]|0;if((j|0)<=-1){h=c[a>>2]|0;break}if(j){k=0;e=h;while(1){h=c[e+32>>2]|0;k=k+1|0;if(!h){h=e;break a}if((k|0)>=(j|0))break;else e=h}}}else h=0;while(0);c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];af(a,h,b);d=1;return d|0}function _g(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,b,f,h);l=c[h>>2]|0;o=c[h+4>>2]|0;i=c[h+8>>2]|0;m=c[f>>2]|0;k=c[f+4>>2]|0;b=c[f+8>>2]|0;n=+g[d>>2];p=+g[d+4>>2];q=+g[d+8>>2];if(n>0.0)l=(g[j>>2]=(c[j>>2]=l,+g[j>>2])+n,c[j>>2]|0);else m=(g[j>>2]=(c[j>>2]=m,+g[j>>2])+n,c[j>>2]|0);if(p>0.0)d=(g[j>>2]=(c[j>>2]=o,+g[j>>2])+p,c[j>>2]|0);else{d=o;k=(g[j>>2]=(c[j>>2]=k,+g[j>>2])+p,c[j>>2]|0)}if(q>0.0)i=(g[j>>2]=(c[j>>2]=i,+g[j>>2])+q,c[j>>2]|0);else b=(g[j>>2]=(c[j>>2]=b,+g[j>>2])+q,c[j>>2]|0);n=+g[e>>2];p=+g[e+4>>2];q=+g[e+8>>2];q=+C(+(n*n+p*p+q*q));q=q*+gb[c[(c[a>>2]|0)+16>>2]&15](a);c[f>>2]=m;c[f+4>>2]=k;c[f+8>>2]=b;g[f+12>>2]=0.0;c[h>>2]=l;c[h+4>>2]=d;c[h+8>>2]=i;g[h+12>>2]=0.0;g[f>>2]=+g[f>>2]-q;g[f+4>>2]=+g[f+4>>2]-q;g[f+8>>2]=+g[f+8>>2]-q;g[h>>2]=q+ +g[h>>2];g[h+4>>2]=q+ +g[h+4>>2];g[h+8>>2]=q+ +g[h+8>>2];return}function $g(b,d,e){b=b|0;d=+d;e=e|0;var f=0,h=0.0,i=0,j=0,k=0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;j=c[b+712>>2]|0;if(e){if((j|0)>0){e=c[b+720>>2]|0;f=0;do{g[e+(f*104|0)+88>>2]=0.0;f=f+1|0}while((f|0)!=(j|0))}e=c[b+752>>2]|0;if((e|0)>0){f=c[b+760>>2]|0;i=0;do{m=c[f+(i*44|0)+8>>2]|0;l=c[f+(i*44|0)+12>>2]|0;k=c[f+(i*44|0)+16>>2]|0;o=+g[m+8>>2];q=+g[m+12>>2];h=+g[m+16>>2];n=+g[l+8>>2]-o;r=+g[l+12>>2]-q;p=+g[l+16>>2]-h;o=+g[k+8>>2]-o;q=+g[k+12>>2]-q;h=+g[k+16>>2]-h;h=+C(+((n*q-r*o)*(n*q-r*o)+((r*h-p*q)*(r*h-p*q)+(p*o-n*h)*(p*o-n*h))));g[m+88>>2]=h+ +g[m+88>>2];g[l+88>>2]=h+ +g[l+88>>2];g[k+88>>2]=h+ +g[k+88>>2];i=i+1|0}while((i|0)!=(e|0))}if((j|0)<=0){m=b+924|0;a[m>>0]=1;return}e=c[b+720>>2]|0;f=0;do{m=e+(f*104|0)+88|0;g[m>>2]=1.0/+g[m>>2];f=f+1|0}while((f|0)!=(j|0))}if((j|0)<=0){m=b+924|0;a[m>>0]=1;return}f=c[b+720>>2]|0;e=0;h=0.0;do{r=+g[f+(e*104|0)+88>>2];h=h+(r>0.0?1.0/r:0.0);e=e+1|0}while((e|0)!=(j|0));h=1.0/h*d;e=0;do{m=f+(e*104|0)+88|0;g[m>>2]=+g[m>>2]/h;e=e+1|0}while((e|0)!=(j|0));m=b+924|0;a[m>>0]=1;return}function ah(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[b+4>>2]|0;if((e|0)==(c[b+8>>2]|0)){xf(b,e|0?e<<1:1);e=c[b+4>>2]|0}j=(c[b+12>>2]|0)+(e*36|0)|0;a[j+16>>0]=1;c[j+12>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;k=c[d+4>>2]|0;if((k|0)<=0){c[j+4>>2]=k;k=j+20|0;d=d+20|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];d=c[b+4>>2]|0;d=d+1|0;c[b+4>>2]=d;return}c[6472]=(c[6472]|0)+1;e=ic((k<<2|3)+16|0)|0;if(!e)h=0;else{c[(e+4+15&-16)+-4>>2]=e;h=e+4+15&-16}f=c[j+4>>2]|0;g=c[j+12>>2]|0;if((f|0)<=0)if(!g){a[j+16>>0]=1;c[j+12>>2]=h;c[j+8>>2]=k;Nk(h|0,0,k<<2|0)|0}else i=11;else{e=0;do{c[h+(e<<2)>>2]=c[g+(e<<2)>>2];e=e+1|0}while((e|0)!=(f|0));i=11}if((i|0)==11){if(a[j+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}a[j+16>>0]=1;c[j+12>>2]=h;c[j+8>>2]=k;Nk(h|0,0,k<<2|0)|0}e=c[j+12>>2]|0;c[j+4>>2]=k;f=c[d+12>>2]|0;g=0;do{c[e+(g<<2)>>2]=c[f+(g<<2)>>2];g=g+1|0}while((g|0)!=(k|0));k=j+20|0;d=d+20|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];d=c[b+4>>2]|0;d=d+1|0;c[b+4>>2]=d;return}function bh(a,b){a=+a;b=+b;var d=0,e=0,f=0,h=0,i=0,k=0,l=0,m=0;l=(g[j>>2]=a,c[j>>2]|0);i=(g[j>>2]=b,c[j>>2]|0);a:do if((i<<1|0)!=0?!((l>>>23&255|0)==255|((YC(b)|0)&2147483647)>>>0>2139095040):0){if(l<<1>>>0<=i<<1>>>0)return +((l<<1|0)==(i<<1|0)?a*0.0:a);if(!(l>>>23&255)){if((l<<9|0)>-1){d=0;e=l<<9;do{d=d+-1|0;e=e<<1}while((e|0)>-1);e=d}else e=0;d=e;f=l<<1-e}else{d=l>>>23&255;f=l&8388607|8388608}if(!(i>>>23&255)){if((i<<9|0)>-1){e=0;h=i<<9;do{e=e+-1|0;h=h<<1}while((h|0)>-1)}else e=0;k=e;i=i<<1-e}else{k=i>>>23&255;i=i&8388607|8388608}e=f-i|0;b:do if((d|0)>(k|0)){h=(e|0)>-1;while(1){if(h){if(!e)break}else e=f;f=e<<1;d=d+-1|0;e=f-i|0;if((d|0)>(k|0))h=(e|0)>-1;else{h=(e|0)>-1;break b}}b=a*0.0;break a}else h=(e|0)>-1;while(0);if(h){if(!e){b=a*0.0;break}}else e=f;if(e>>>0<8388608)do{e=e<<1;d=d+-1|0}while(e>>>0<8388608);if((d|0)>0)d=e+-8388608|d<<23;else d=e>>>(1-d|0);b=(c[j>>2]=d|l&-2147483648,+g[j>>2])}else m=3;while(0);if((m|0)==3)b=a*b/(a*b);return +b}function ch(a,b,d,e,f,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0.0,o=0.0;m=l;l=l+80|0;o=+g[h+52>>2]-+g[f+52>>2];n=+g[h+56>>2]-+g[f+56>>2];g[m+56>>2]=+g[h+48>>2]-+g[f+48>>2];g[m+56+4>>2]=o;g[m+56+8>>2]=n;g[m+56+12>>2]=0.0;if(wc(d,f,e,h,m+56|0,m,1)|0){c[j>>2]=c[m+4>>2];c[j+4>>2]=c[m+4+4>>2];c[j+8>>2]=c[m+4+8>>2];c[j+12>>2]=c[m+4+12>>2];c[k>>2]=c[m+20>>2];c[k+4>>2]=c[m+20+4>>2];c[k+8>>2]=c[m+20+8>>2];c[k+12>>2]=c[m+20+12>>2];c[i>>2]=c[m+36>>2];c[i+4>>2]=c[m+36+4>>2];c[i+8>>2]=c[m+36+8>>2];c[i+12>>2]=c[m+36+12>>2];k=1;l=m;return k|0}if(!(ud(d,f,e,h,m+56|0,m)|0)){k=0;l=m;return k|0}c[j>>2]=c[m+4>>2];c[j+4>>2]=c[m+4+4>>2];c[j+8>>2]=c[m+4+8>>2];c[j+12>>2]=c[m+4+12>>2];c[k>>2]=c[m+20>>2];c[k+4>>2]=c[m+20+4>>2];c[k+8>>2]=c[m+20+8>>2];c[k+12>>2]=c[m+20+12>>2];c[i>>2]=c[m+36>>2];c[i+4>>2]=c[m+36+4>>2];c[i+8>>2]=c[m+36+8>>2];c[i+12>>2]=c[m+36+12>>2];k=0;l=m;return k|0}function dh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0;p=l;l=l+2048|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;e=+g[d>>2];h=+g[d+4>>2];f=+g[d+8>>2];if(e*e+h*h+f*f<9.999999747378752e-05){n=1.0;m=0.0;h=0.0}else{q=1.0/+C(+(e*e+h*h+f*f));n=e*q;m=f*q;h=h*q}if((qb[c[(c[b>>2]|0)+96>>2]&127](b)|0)<=0){l=p;return}k=0;f=-999999984306749440.0;while(1){if(((qb[c[(c[b>>2]|0)+96>>2]&127](b)|0)-k|0)<128){d=(qb[c[(c[b>>2]|0)+96>>2]&127](b)|0)-k|0;if((d|0)>0)o=8;else{e=-3402823466385288598117041.0e14;d=-1}}else{d=128;o=8}if((o|0)==8){o=0;i=0;do{Kb[c[(c[b>>2]|0)+108>>2]&127](b,i,p+(i<<4)|0);i=i+1|0}while((i|0)!=(d|0));j=0;e=-3402823466385288598117041.0e14;i=-1;do{q=n*+g[p+(j<<4)>>2]+h*+g[p+(j<<4)+4>>2]+m*+g[p+(j<<4)+8>>2];r=q>e;i=r?j:i;e=r?q:e;j=j+1|0}while((j|0)!=(d|0));d=i}if(e>f){r=p+(d<<4)|0;c[a>>2]=c[r>>2];c[a+4>>2]=c[r+4>>2];c[a+8>>2]=c[r+8>>2];c[a+12>>2]=c[r+12>>2]}else e=f;k=k+128|0;if((k|0)>=(qb[c[(c[b>>2]|0)+96>>2]&127](b)|0))break;else f=e}l=p;return}function eh(b,e,f,h,i,j){b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;var k=0;if((d[h+55>>0]|0|0)==(e|0)){h=0;return h|0}k=c[5168+(i<<2)>>2]|0;if(+g[h>>2]*+g[f+16>>2]+ +g[h+4>>2]*+g[f+20>>2]+ +g[h+8>>2]*+g[f+24>>2]-+g[h+16>>2]<-9.999999747378752e-06){k=cf(b,c[h+20+(k<<2)>>2]|0,c[h+20+(i<<2)>>2]|0,f,0)|0;if(!k){h=0;return h|0}a[k+52>>0]=i;c[k+32>>2]=h;a[h+52+i>>0]=0;c[h+32+(i<<2)>>2]=k;i=c[j>>2]|0;if(!i)c[j+4>>2]=k;else{a[i+53>>0]=2;c[i+36>>2]=k;a[k+54>>0]=1;c[k+40>>2]=i}c[j>>2]=k;c[j+8>>2]=(c[j+8>>2]|0)+1;h=1;return h|0}i=c[5180+(i<<2)>>2]|0;a[h+55>>0]=e;if(!(eh(b,e,f,c[h+32+(k<<2)>>2]|0,d[h+52+k>>0]|0,j)|0)){h=0;return h|0}if(!(eh(b,e,f,c[h+32+(i<<2)>>2]|0,d[h+52+i>>0]|0,j)|0)){h=0;return h|0}i=c[h+48>>2]|0;if(i|0)c[i+44>>2]=c[h+44>>2];i=c[h+44>>2]|0;if(i|0)c[i+48>>2]=c[h+48>>2];if((c[b+9280>>2]|0)==(h|0))c[b+9280>>2]=c[h+48>>2];c[b+9284>>2]=(c[b+9284>>2]|0)+-1;c[h+44>>2]=0;c[h+48>>2]=c[b+9288>>2];i=c[b+9288>>2]|0;if(i|0)c[i+44>>2]=h;c[b+9288>>2]=h;c[b+9292>>2]=(c[b+9292>>2]|0)+1;h=1;return h|0}function fh(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0.0,l=0.0;e=c[d+204>>2]|0;if((e&3|0)==0?(c[d+504>>2]&1|0)==0:0){h=+g[d+344>>2];if(h!=0.0){l=1.0/h*+g[b+252>>2];k=1.0/h*+g[b+256>>2];g[d+364>>2]=1.0/h*+g[b+248>>2];g[d+368>>2]=l;g[d+372>>2]=k;g[d+376>>2]=0.0}c[d+380>>2]=c[b+248>>2];c[d+380+4>>2]=c[b+248+4>>2];c[d+380+8>>2]=c[b+248+8>>2];c[d+380+12>>2]=c[b+248+12>>2]}if(!(c[d+192>>2]|0))return;if(e&1){if((c[d+216>>2]&-2|0)!=4)c[d+216>>2]=2}else{f=c[b+232>>2]|0;if((f|0)==(c[b+236>>2]|0)?(j=f|0?f<<1:1,(f|0)<(j|0)):0){if(!j)e=0;else{c[6472]=(c[6472]|0)+1;e=ic((j<<2|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[b+232>>2]|0}if((f|0)>0){i=0;do{c[e+(i<<2)>>2]=c[(c[b+240>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0))}i=c[b+240>>2]|0;if(i){if(a[b+244>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);f=c[b+232>>2]|0}c[b+240>>2]=0}a[b+244>>0]=1;c[b+240>>2]=e;c[b+236>>2]=j;e=c[d+204>>2]|0}c[(c[b+240>>2]|0)+(f<<2)>>2]=d;c[b+232>>2]=f+1}j=(e&3|0)==0;Nb[c[(c[b>>2]|0)+36>>2]&127](b,d,j?1:2,j?-1:-3);return}function gh(a,d,f,g){a=a|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;i=c[a+68+(d<<2)>>2]|0;h=b[i+((f&65535)<<2)+-4>>1]|0;if((e[i+((f&65535)<<2)>>1]|0)>=(h&65535))return;j=c[a+60>>2]|0;o=j+((e[i+((f&65535)<<2)+2>>1]|0)<<6)+54+(d<<1)|0;k=i+((f&65535)<<2)|0;f=i+((f&65535)<<2)+-4|0;while(1){i=e[k+-2>>1]|0;if(!(h&1)){h=e[k+2>>1]|0;if(((((e[j+(h<<6)+54+((1<>1]|0)>=(e[j+(i<<6)+48+((1<>1]|0)?(e[j+(i<<6)+54+((1<>1]|0)>=(e[j+(h<<6)+48+((1<>1]|0):0)?(e[j+(h<<6)+54+((1<<(1<>1]|0)>=(e[j+(i<<6)+48+((1<<(1<>1]|0):0)?(e[j+(i<<6)+54+((1<<(1<>1]|0)>=(e[j+(h<<6)+48+((1<<(1<>1]|0):0)?(n=c[a+92>>2]|0,l=j+(h<<6)|0,m=j+(i<<6)|0,vb[c[(c[n>>2]|0)+12>>2]&31](n,l,m,g)|0,n=c[a+96>>2]|0,n|0):0)vb[c[(c[n>>2]|0)+12>>2]&31](n,l,m,g)|0;h=j+(i<<6)+48+(d<<1)|0}else h=j+(i<<6)+54+(d<<1)|0;b[h>>1]=(b[h>>1]|0)+1<<16>>16;b[o>>1]=(b[o>>1]|0)+-1<<16>>16;i=e[k>>1]|e[k+2>>1]<<16;h=e[f>>1]|e[f+2>>1]<<16;b[k>>1]=h;b[k+2>>1]=h>>>16;b[f>>1]=i;b[f+2>>1]=i>>>16;i=k+-4|0;f=f+-4|0;h=b[f>>1]|0;if((e[i>>1]|0)>=(h&65535))break;j=c[a+60>>2]|0;k=i}return}function hh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,l=0,m=0.0,n=0.0;h=c[d+204>>2]|0;if((h&3|0)==0?(c[d+504>>2]&1|0)==0:0){i=+g[d+344>>2];if(i!=0.0){n=1.0/i*+g[b+252>>2];m=1.0/i*+g[b+256>>2];g[d+364>>2]=1.0/i*+g[b+248>>2];g[d+368>>2]=n;g[d+372>>2]=m;g[d+376>>2]=0.0}c[d+380>>2]=c[b+248>>2];c[d+380+4>>2]=c[b+248+4>>2];c[d+380+8>>2]=c[b+248+8>>2];c[d+380+12>>2]=c[b+248+12>>2]}if(!(c[d+192>>2]|0))return;if(h&1){if((c[d+216>>2]&-2|0)!=4)c[d+216>>2]=2}else{h=c[b+232>>2]|0;if((h|0)==(c[b+236>>2]|0)?(l=h|0?h<<1:1,(h|0)<(l|0)):0){if(!l)j=0;else{c[6472]=(c[6472]|0)+1;h=ic((l<<2|3)+16|0)|0;if(!h)j=0;else{c[(h+4+15&-16)+-4>>2]=h;j=h+4+15&-16}h=c[b+232>>2]|0}if((h|0)>0){k=0;do{c[j+(k<<2)>>2]=c[(c[b+240>>2]|0)+(k<<2)>>2];k=k+1|0}while((k|0)!=(h|0))}k=c[b+240>>2]|0;if(k){if(a[b+244>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);h=c[b+232>>2]|0}c[b+240>>2]=0}a[b+244>>0]=1;c[b+240>>2]=j;c[b+236>>2]=l}c[(c[b+240>>2]|0)+(h<<2)>>2]=d;c[b+232>>2]=h+1}Nb[c[(c[b>>2]|0)+36>>2]&127](b,d,e,f);return}function ih(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;o=(+g[a+32>>2]-+g[a+16>>2])*.5;l=(+g[a+36>>2]-+g[a+20>>2])*.5;i=(+g[a+40>>2]-+g[a+24>>2])*.5;n=+gb[c[(c[a>>2]|0)+48>>2]&15](a);k=+gb[c[(c[a>>2]|0)+48>>2]&15](a);i=i+ +gb[c[(c[a>>2]|0)+48>>2]&15](a);C=(+g[a+32>>2]+ +g[a+16>>2])*.5;z=(+g[a+36>>2]+ +g[a+20>>2])*.5;x=(+g[a+40>>2]+ +g[a+24>>2])*.5;G=+g[b>>2];w=+B(+G);F=+g[b+4>>2];v=+B(+F);t=+g[b+8>>2];u=+B(+t);E=+g[b+16>>2];s=+B(+E);D=+g[b+20>>2];r=+B(+D);p=+g[b+24>>2];q=+B(+p);A=+g[b+32>>2];m=+B(+A);y=+g[b+36>>2];j=+B(+y);f=+g[b+40>>2];h=+B(+f);t=C*G+z*F+x*t+ +g[b+48>>2];p=C*E+z*D+x*p+ +g[b+52>>2];f=C*A+z*y+x*f+ +g[b+56>>2];g[d>>2]=t-((o+n)*w+(l+k)*v+i*u);g[d+4>>2]=p-((o+n)*s+(l+k)*r+i*q);g[d+8>>2]=f-((o+n)*m+(l+k)*j+i*h);g[d+12>>2]=0.0;g[e>>2]=(o+n)*w+(l+k)*v+i*u+t;g[e+4>>2]=(o+n)*s+(l+k)*r+i*q+p;g[e+8>>2]=(o+n)*m+(l+k)*j+i*h+f;g[e+12>>2]=0.0;return}function jh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0.0,I=0.0;I=+g[a+48>>2];z=+g[a+32>>2];H=+g[a+52>>2];x=+g[a+36>>2];F=+g[a+56>>2];v=+g[a+40>>2];G=(c[a+16>>2]|0)==0;m=+gb[c[(c[a>>2]|0)+48>>2]&15](a);k=+gb[c[(c[a>>2]|0)+48>>2]&15](a);i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);m=(G?0.0:(I-z)*.5)+m;k=(G?0.0:(H-x)*.5)+k;i=(G?0.0:(F-v)*.5)+i;E=+g[b>>2];u=+B(+E);D=+g[b+4>>2];t=+B(+D);r=+g[b+8>>2];s=+B(+r);C=+g[b+16>>2];q=+B(+C);A=+g[b+20>>2];p=+B(+A);n=+g[b+24>>2];o=+B(+n);y=+g[b+32>>2];l=+B(+y);w=+g[b+36>>2];j=+B(+w);f=+g[b+40>>2];h=+B(+f);z=G?0.0:(I+z)*.5;x=G?0.0:(H+x)*.5;v=G?0.0:(F+v)*.5;r=z*E+x*D+v*r+ +g[b+48>>2];n=z*C+x*A+v*n+ +g[b+52>>2];f=z*y+x*w+v*f+ +g[b+56>>2];g[d>>2]=r-(m*u+k*t+i*s);g[d+4>>2]=n-(m*q+k*p+i*o);g[d+8>>2]=f-(m*l+k*j+i*h);g[d+12>>2]=0.0;g[e>>2]=m*u+k*t+i*s+r;g[e+4>>2]=m*q+k*p+i*o+n;g[e+8>>2]=m*l+k*j+i*h+f;g[e+12>>2]=0.0;return}function kh(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;h=c[a+68+(d<<2)>>2]|0;l=c[a+60>>2]|0;n=e[h+((f&65535)<<2)+2>>1]|0;g=b[h+((f&65535)<<2)+-4>>1]|0;if((e[h+((f&65535)<<2)>>1]|0)>=(g&65535))return;i=l;j=h+((f&65535)<<2)|0;f=h+((f&65535)<<2)+-4|0;while(1){h=e[j+-2>>1]|0;if(!(g&1))g=i+(h<<6)+48+(d<<1)|0;else{if(((((e[l+(n<<6)+54+((1<>1]|0)>=(e[i+(h<<6)+48+((1<>1]|0)?(e[i+(h<<6)+54+((1<>1]|0)>=(e[l+(n<<6)+48+((1<>1]|0):0)?(e[l+(n<<6)+54+((1<<(1<>1]|0)>=(e[i+(h<<6)+48+((1<<(1<>1]|0):0)?(e[i+(h<<6)+54+((1<<(1<>1]|0)>=(e[l+(n<<6)+48+((1<<(1<>1]|0):0)?(m=c[a+92>>2]|0,k=i+(h<<6)|0,ub[c[(c[m>>2]|0)+8>>2]&63](m,l+(n<<6)|0,k)|0,m=c[a+96>>2]|0,m|0):0)ub[c[(c[m>>2]|0)+8>>2]&63](m,l+(n<<6)|0,k)|0;g=i+(h<<6)+54+(d<<1)|0}b[g>>1]=(b[g>>1]|0)+1<<16>>16;b[l+(n<<6)+48+(d<<1)>>1]=(b[l+(n<<6)+48+(d<<1)>>1]|0)+-1<<16>>16;h=e[j>>1]|e[j+2>>1]<<16;g=e[f>>1]|e[f+2>>1]<<16;b[j>>1]=g;b[j+2>>1]=g>>>16;b[f>>1]=h;b[f+2>>1]=h>>>16;h=j+-4|0;f=f+-4|0;g=b[f>>1]|0;if((e[h>>1]|0)>=(g&65535))break;i=c[a+60>>2]|0;j=h}return}function lh(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0,f=0,h=0,i=0,j=0;f=l;l=l+16|0;c=+g[(bI(a)|0)>>2];d=+g[(KH(a+16|0)|0)>>2];e=+g[(JH(a+32|0)|0)>>2];if(c+d+e>0.0){e=+RH(c+d+e+1.0);g[f+12>>2]=e*.5;d=+g[(KH(a+32|0)|0)>>2];g[f>>2]=(d-+g[(JH(a+16|0)|0)>>2])*(.5/e);d=+g[(JH(a)|0)>>2];g[f+4>>2]=(d-+g[(bI(a+32|0)|0)>>2])*(.5/e);d=+g[(bI(a+16|0)|0)>>2];g[f+8>>2]=(d-+g[(KH(a)|0)>>2])*(.5/e);j=f;i=f+4|0;h=f+8|0;a=f+12|0;Ar(b,j,i,h,a);l=f;return}else{h=(c>2];j=bI(a+((((h+1|0)>>>0)%3|0)<<4)|0)|0;e=e-+g[j+((((h+1|0)>>>0)%3|0)<<2)>>2];a=bI(a+((((h+2|0)>>>0)%3|0)<<4)|0)|0;e=+RH(e-+g[a+((((h+2|0)>>>0)%3|0)<<2)>>2]+1.0);g[f+(h<<2)>>2]=e*.5;g[f+12>>2]=(+g[a+((((h+1|0)>>>0)%3|0)<<2)>>2]-+g[j+((((h+2|0)>>>0)%3|0)<<2)>>2])*(.5/e);g[f+((((h+1|0)>>>0)%3|0)<<2)>>2]=(+g[j+(h<<2)>>2]+ +g[i+((((h+1|0)>>>0)%3|0)<<2)>>2])*(.5/e);g[f+((((h+2|0)>>>0)%3|0)<<2)>>2]=(+g[a+(h<<2)>>2]+ +g[i+((((h+2|0)>>>0)%3|0)<<2)>>2])*(.5/e);a=f;h=f+4|0;i=f+8|0;j=f+12|0;Ar(b,a,h,i,j);l=f;return}}function mh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+212>>2]|0;a:do if((f|0)>0){g=c[a+220>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0))break a}if((d|0)<(f|0)){c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+220>>2]|0)+(f+-1<<2)>>2]=b;c[a+212>>2]=f+-1}}while(0);a=c[b+28>>2]|0;d=c[a+488>>2]|0;b:do if((d|0)>0){g=c[a+496>>2]|0;e=0;while(1){f=g+(e<<2)|0;if((c[f>>2]|0)==(b|0))break;e=e+1|0;if((e|0)>=(d|0))break b}if((e|0)<(d|0)){c[f>>2]=c[g+(d+-1<<2)>>2];c[(c[a+496>>2]|0)+(d+-1<<2)>>2]=b;c[a+488>>2]=d+-1;d=d+-1|0}}while(0);c[a+256>>2]=(d|0)>0&1;a=c[b+32>>2]|0;d=c[a+488>>2]|0;if((d|0)<=0){b=d;b=(b|0)>0;b=b&1;h=a+256|0;c[h>>2]=b;return}g=c[a+496>>2]|0;e=0;while(1){f=g+(e<<2)|0;if((c[f>>2]|0)==(b|0))break;e=e+1|0;if((e|0)>=(d|0)){h=19;break}}if((h|0)==19){b=(d|0)>0;b=b&1;h=a+256|0;c[h>>2]=b;return}if((e|0)>=(d|0)){b=d;b=(b|0)>0;b=b&1;h=a+256|0;c[h>>2]=b;return}c[f>>2]=c[g+(d+-1<<2)>>2];c[(c[a+496>>2]|0)+(d+-1<<2)>>2]=b;c[a+488>>2]=d+-1;b=d+-1|0;b=(b|0)>0;b=b&1;h=a+256|0;c[h>>2]=b;return}function nh(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0;j=qb[c[(c[b>>2]|0)+28>>2]&127](b)|0;i=+g[j>>2]-+g[d>>2];h=+g[j+4>>2]-+g[d+4>>2];f=+g[j+8>>2]-+g[d+8>>2];if(!(i*i+h*h+f*f>1.1920928955078125e-07))return;Kg(b,d);if((a[b+61>>0]|0)!=0?(e=c[b+52>>2]|0,Ab[c[c[e>>2]>>2]&511](e),e=c[b+52>>2]|0,(e|0)!=0):0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);d=b+52|0}else d=b+52|0;c[6472]=(c[6472]|0)+1;e=ic(191)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[e+52>>2]=282;a[e+60>>0]=0;a[e+80>>0]=1;c[e+76>>2]=0;c[e+68>>2]=0;c[e+72>>2]=0;a[e+100>>0]=1;c[e+96>>2]=0;c[e+88>>2]=0;c[e+92>>2]=0;a[e+120>>0]=1;c[e+116>>2]=0;c[e+108>>2]=0;c[e+112>>2]=0;a[e+140>>0]=1;c[e+136>>2]=0;c[e+128>>2]=0;c[e+132>>2]=0;c[e+144>>2]=0;a[e+164>>0]=1;c[e+160>>2]=0;c[e+152>>2]=0;c[e+156>>2]=0;c[e+168>>2]=0;c[e+4>>2]=-8388609;c[e+8>>2]=-8388609;c[e+12>>2]=-8388609;g[e+16>>2]=0.0;c[e+20>>2]=2139095039;c[e+24>>2]=2139095039;c[e+28>>2]=2139095039;g[e+32>>2]=0.0;c[e>>2]=8172;c[d>>2]=e;Zc(e,c[b+48>>2]|0,(a[b+60>>0]|0)!=0,b+16|0,b+32|0);a[b+61>>0]=1;return}function oh(b,d){b=b|0;d=d|0;var e=0.0,f=0.0;if(a[b+1309>>0]|0){e=(+g[b+1256>>2]-+g[b+1316>>2])*+g[b+1340>>2];g[b+792>>2]=e*(+g[d>>2]*+g[b+1364>>2]/+(c[d+48>>2]|0));e=+B(+e);g[b+808>>2]=e/+g[d>>2]}if(a[b+1310>>0]|0){e=(+g[b+1260>>2]-+g[b+1320>>2])*+g[b+1344>>2];g[b+796>>2]=e*(+g[d>>2]*+g[b+1368>>2]/+(c[d+48>>2]|0));e=+B(+e);g[b+812>>2]=e/+g[d>>2]}if(a[b+1311>>0]|0){e=(+g[b+1264>>2]-+g[b+1324>>2])*+g[b+1348>>2];g[b+800>>2]=e*(+g[d>>2]*+g[b+1372>>2]/+(c[d+48>>2]|0));e=+B(+e);g[b+816>>2]=e/+g[d>>2]}if(a[b+1312>>0]|0){f=-((+g[b+1192>>2]-+g[b+1328>>2])*+g[b+1352>>2]);e=+g[d>>2];g[b+876>>2]=e*+g[b+1376>>2]/+(c[d+48>>2]|0)*f;g[b+880>>2]=+B(+f)/e}if(a[b+1313>>0]|0){e=-((+g[b+1196>>2]-+g[b+1332>>2])*+g[b+1356>>2]);f=+g[d>>2];g[b+940>>2]=f*+g[b+1380>>2]/+(c[d+48>>2]|0)*e;g[b+944>>2]=+B(+e)/f}if(!(a[b+1314>>0]|0)){Tf(b,d);return}e=-((+g[b+1200>>2]-+g[b+1336>>2])*+g[b+1360>>2]);f=+g[d>>2];g[b+1004>>2]=f*+g[b+1384>>2]/+(c[d+48>>2]|0)*e;g[b+1008>>2]=+B(+e)/f;Tf(b,d);return}function ph(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,k=0,l=0.0,m=0.0;if(a[b+48>>0]|0){c[d>>2]=0;c[d+4>>2]=0;return}c[d>>2]=4;c[d+4>>2]=2;Tc(b,(c[b+28>>2]|0)+4|0,(c[b+32>>2]|0)+4|0);g[b+1088>>2]=0.0;a[b+297>>0]=0;f=+g[b+192>>2];h=+g[b+196>>2];do if(f<=h){m=+g[b+892>>2];l=+g[b+908>>2];i=+g[b+924>>2];i=+Lj(+K(+(+g[b+832>>2]*m+ +g[b+848>>2]*l+ +g[b+864>>2]*i),+(+g[b+828>>2]*m+ +g[b+844>>2]*l+ +g[b+860>>2]*i)),f,h);g[b+1084>>2]=i;if(i>2]=i-f;a[b+297>>0]=1;k=1;break}if(i>h){g[b+1088>>2]=i-h;a[b+297>>0]=1;k=1}else k=0}else k=0;while(0);a[b+296>>0]=0;e=c[b+1032>>2]|0;c[b+1080>>2]=e;f=+g[b+184>>2];h=+g[b+188>>2];i=(c[j>>2]=e,+g[j>>2]);do if(!(f<=h))e=11;else{if(!(i>h)){if(!(i>2]=i-f;a[b+296>>0]=1;e=13}while(0);if((e|0)==11?(g[b+1032>>2]=0.0,a[b+1096>>0]|0):0)e=13;if((e|0)==13){c[d>>2]=(c[d>>2]|0)+1;c[d+4>>2]=(c[d+4>>2]|0)+-1}if(k<<24>>24==0?(a[b+1112>>0]|0)==0:0)return;c[d>>2]=(c[d>>2]|0)+1;c[d+4>>2]=(c[d+4>>2]|0)+-1;return}function qh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0.0,j=0.0;e=l;l=l+160|0;c[e+136>>2]=0;c[e+136+4>>2]=0;c[e+136+8>>2]=0;c[e+136+12>>2]=0;c[e+136+16>>2]=0;c[e+32>>2]=7200;f=e+32+4|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[e+32+20>>2]=1065353216;c[e+32+24>>2]=0;c[e+32+24+4>>2]=0;c[e+32+24+8>>2]=0;c[e+32+24+12>>2]=0;c[e+32+40>>2]=1065353216;c[e+32+44>>2]=0;c[e+32+44+4>>2]=0;c[e+32+44+8>>2]=0;c[e+32+44+12>>2]=0;c[e+32+60>>2]=1065353216;c[e+32+64>>2]=0;c[e+32+68>>2]=c[e+136+4>>2];c[e+32+68+4>>2]=c[e+136+4+4>>2];c[e+32+68+8>>2]=c[e+136+4+8>>2];c[e+32+68+12>>2]=c[e+136+4+12>>2];g[e+32+84>>2]=-999999984306749440.0;j=+g[d>>2];i=+g[d+4>>2];h=+g[d+8>>2];g[e+32+88>>2]=j+i*0.0+h*0.0;g[e+32+92>>2]=j*0.0+i+h*0.0;g[e+32+96>>2]=j*0.0+i*0.0+h;g[e+32+100>>2]=0.0;c[e+16>>2]=1566444395;c[e+16+4>>2]=1566444395;c[e+16+8>>2]=1566444395;g[e+16+12>>2]=0.0;d=c[(c[b>>2]|0)+64>>2]|0;g[e>>2]=-999999984306749440.0;g[e+4>>2]=-999999984306749440.0;g[e+8>>2]=-999999984306749440.0;g[e+12>>2]=0.0;Nb[d&127](b,e+32|0,e,e+16|0);c[a>>2]=c[f>>2];c[a+4>>2]=c[f+4>>2];c[a+8>>2]=c[f+8>>2];c[a+12>>2]=c[f+12>>2];l=e;return}function rh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0;q=l;l=l+16|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;e=+g[d>>2];f=+g[d+4>>2];h=+g[d+8>>2];if(e*e+f*f+h*h<9.999999747378752e-05){p=1.0;o=0.0;n=0.0}else{n=1.0/+C(+(e*e+f*f+h*h));p=e*n;o=f*n;n=h*n}d=c[b+52>>2]|0;m=+g[b+28+(((d+2|0)%3|0)<<2)>>2];c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[q+(d<<2)>>2]=c[b+28+(d<<2)>>2];j=p*m;k=o*m;m=n*m;f=j+ +g[q>>2];i=k+ +g[q+4>>2];e=m+ +g[q+8>>2];h=+gb[c[(c[b>>2]|0)+48>>2]&15](b);f=f-p*h;i=i-o*h;h=e-n*h;e=n*h+(p*f+o*i);if(e>-999999984306749440.0){g[a>>2]=f;g[a+4>>2]=i;g[a+8>>2]=h;g[a+12>>2]=0.0;i=e}else i=-999999984306749440.0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;d=c[b+52>>2]|0;g[q+(d<<2)>>2]=-+g[b+28+(d<<2)>>2];e=j+ +g[q>>2];h=k+ +g[q+4>>2];m=m+ +g[q+8>>2];f=+gb[c[(c[b>>2]|0)+48>>2]&15](b);e=e-p*f;h=h-o*f;f=m-n*f;if(!(n*f+(p*e+o*h)>i)){l=q;return}g[a>>2]=e;g[a+4>>2]=h;g[a+8>>2]=f;g[a+12>>2]=0.0;l=q;return}function sh(a,b,d,e,f,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=+f;h=+h;i=+i;j=+j;k=+k;m=+m;var n=0;n=l;l=l+128|0;c[n+80>>2]=c[a+4>>2];c[n+80+4>>2]=c[a+20>>2];c[n+80+8>>2]=c[a+36>>2];g[n+80+12>>2]=0.0;c[n+80+16>>2]=c[a+8>>2];c[n+80+20>>2]=c[a+24>>2];c[n+80+24>>2]=c[a+40>>2];g[n+80+28>>2]=0.0;c[n+80+32>>2]=c[a+12>>2];c[n+80+36>>2]=c[a+28>>2];c[n+80+40>>2]=c[a+44>>2];g[n+80+44>>2]=0.0;c[n+32>>2]=c[b+4>>2];c[n+32+4>>2]=c[b+20>>2];c[n+32+8>>2]=c[b+36>>2];g[n+32+12>>2]=0.0;c[n+32+16>>2]=c[b+8>>2];c[n+32+20>>2]=c[b+24>>2];c[n+32+24>>2]=c[b+40>>2];g[n+32+28>>2]=0.0;c[n+32+32>>2]=c[b+12>>2];c[n+32+36>>2]=c[b+28>>2];c[n+32+40>>2]=c[b+44>>2];g[n+32+44>>2]=0.0;h=h-+g[a+56>>2];i=i-+g[a+60>>2];g[n+16>>2]=f-+g[a+52>>2];g[n+16+4>>2]=h;g[n+16+8>>2]=i;g[n+16+12>>2]=0.0;k=k-+g[b+56>>2];m=m-+g[b+60>>2];g[n>>2]=j-+g[b+52>>2];g[n+4>>2]=k;g[n+8>>2]=m;g[n+12>>2]=0.0;Ag(d,n+80|0,n+32|0,n+16|0,n,e,a+396|0,+g[a+344>>2],b+396|0,+g[b+344>>2]);l=n;return}function th(a,b,c,d,e,f,h,i,j,k,l,m,n,o){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;i=+i;j=+j;k=+k;l=+l;m=+m;n=+n;o=+o;var p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0;q=(j-f)*(n-h)-(k-h)*(m-f);r=(k-h)*(l-e)-(i-e)*(n-h);s=(i-e)*(m-f)-(j-f)*(l-e);if(+B(+(s*d+(q*b+r*c)))<1.1920928955078125e-07){s=-1.0;return +s}t=+g[a>>2];v=+g[a+4>>2];u=+g[a+8>>2];p=-(q*t+r*v+s*u-(s*h+(q*e+r*f)))/(s*d+(q*b+r*c));if(((p>1.1920928955078125e-06&p-1.1920928955078125e-06:0)?s*((m-(v+p*c))*(i-(t+p*b))-(j-(v+p*c))*(l-(t+p*b)))+(q*((j-(v+p*c))*(n-(u+p*d))-(k-(u+p*d))*(m-(v+p*c)))+r*((k-(u+p*d))*(l-(t+p*b))-(n-(u+p*d))*(i-(t+p*b))))>-1.1920928955078125e-06:0)?s*((f-(v+p*c))*(l-(t+p*b))-(m-(v+p*c))*(e-(t+p*b)))+(q*((m-(v+p*c))*(h-(u+p*d))-(n-(u+p*d))*(f-(v+p*c)))+r*((n-(u+p*d))*(e-(t+p*b))-(h-(u+p*d))*(l-(t+p*b))))>-1.1920928955078125e-06:0){v=p;return +v}v=-1.0;return +v}function uh(a,b,d,e,f){a=a|0;b=+b;d=+d;e=+e;f=f|0;var h=0,i=0,j=0,k=0,m=0.0,n=0.0;j=l;l=l+48|0;m=1.0/+C(+(b*b+d*d+e*e));g[f>>2]=m*b;g[f+4>>2]=m*d;g[f+8>>2]=m*e;g[f+12>>2]=0.0;h=c[a+120>>2]|0;k=c[a+124>>2]|0;i=(c[a>>2]|0)+(k>>1)|0;if(k&1)h=c[(c[i>>2]|0)+h>>2]|0;Kb[h&127](j,i,f);b=-+g[f>>2];d=-+g[f+4>>2];e=-+g[f+8>>2];h=c[a+120>>2]|0;k=c[a+124>>2]|0;i=(c[a+4>>2]|0)+(k>>1)|0;if(k&1)h=c[(c[i>>2]|0)+h>>2]|0;m=+g[a+24>>2]*b+ +g[a+28>>2]*d+ +g[a+32>>2]*e;n=+g[a+40>>2]*b+ +g[a+44>>2]*d+ +g[a+48>>2]*e;g[j+16>>2]=+g[a+8>>2]*b+ +g[a+12>>2]*d+ +g[a+16>>2]*e;g[j+16+4>>2]=m;g[j+16+8>>2]=n;g[j+16+12>>2]=0.0;Kb[h&127](j+32|0,i,j+16|0);n=+g[j+32>>2];b=+g[j+32+4>>2];d=+g[j+32+8>>2];e=+g[j+4>>2]-(n*+g[a+72>>2]+b*+g[a+76>>2]+d*+g[a+80>>2]+ +g[a+108>>2]);m=+g[j+8>>2]-(n*+g[a+88>>2]+b*+g[a+92>>2]+d*+g[a+96>>2]+ +g[a+112>>2]);g[f+16>>2]=+g[j>>2]-(n*+g[a+56>>2]+b*+g[a+60>>2]+d*+g[a+64>>2]+ +g[a+104>>2]);g[f+20>>2]=e;g[f+24>>2]=m;g[f+28>>2]=0.0;l=j;return}function vh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(a[b+165>>0]|0){if((c[b+92>>2]|0)>=(d|0))return;if((d|0)!=0?(c[6472]=(c[6472]|0)+1,f=ic((d<<4|3)+16|0)|0,(f|0)!=0):0){c[(f+4+15&-16)+-4>>2]=f;g=f+4+15&-16}else g=0;e=c[b+88>>2]|0;if((e|0)>0){f=0;do{i=g+(f<<4)|0;h=(c[b+96>>2]|0)+(f<<4)|0;c[i>>2]=c[h>>2];c[i+4>>2]=c[h+4>>2];c[i+8>>2]=c[h+8>>2];c[i+12>>2]=c[h+12>>2];f=f+1|0}while((f|0)!=(e|0))}e=c[b+96>>2]|0;if(e|0){if(a[b+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+96>>2]=0}a[b+100>>0]=1;c[b+96>>2]=g;c[b+92>>2]=d;return}if((c[b+112>>2]|0)>=(d|0))return;if((d|0)!=0?(c[6472]=(c[6472]|0)+1,e=ic((d<<2|3)+16|0)|0,(e|0)!=0):0){c[(e+4+15&-16)+-4>>2]=e;h=e+4+15&-16}else h=0;f=c[b+108>>2]|0;g=c[b+116>>2]|0;if((f|0)<=0)if(!g)e=b+120|0;else i=21;else{e=0;do{c[h+(e<<2)>>2]=c[g+(e<<2)>>2];e=e+1|0}while((e|0)!=(f|0));i=21}if((i|0)==21){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}c[b+116>>2]=0;e=b+120|0}a[e>>0]=1;c[b+116>>2]=h;c[b+112>>2]=d;return}function wh(a,b,d,e,f,g,h,i,j){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;if(!(c[i+44>>2]|0))return;b=c[i+20>>2]|0;if(!(c[i+64>>2]&256)){if((b|0)<=0)return;j=0;do{g=c[a+28>>2]|0;if((g|0)>0){b=0;do{f=c[(c[a+116>>2]|0)+(b<<2)>>2]|0;h=c[a+36>>2]|0;d=c[a+16>>2]|0;qg(d+((c[h+(f*152|0)+144>>2]|0)*244|0)|0,d+((c[h+(f*152|0)+148>>2]|0)*244|0)|0,h+(f*152|0)|0);b=b+1|0}while((b|0)!=(g|0));b=c[i+20>>2]|0}j=j+1|0}while((j|0)<(b|0));return}else{if((b|0)<=0)return;j=0;do{g=c[a+28>>2]|0;if((g|0)>0){b=0;do{f=c[(c[a+116>>2]|0)+(b<<2)>>2]|0;h=c[a+36>>2]|0;d=c[a+16>>2]|0;qg(d+((c[h+(f*152|0)+144>>2]|0)*244|0)|0,d+((c[h+(f*152|0)+148>>2]|0)*244|0)|0,h+(f*152|0)|0);b=b+1|0}while((b|0)!=(g|0));b=c[i+20>>2]|0}j=j+1|0}while((j|0)<(b|0));return}}function xh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!(a[d+164>>0]|0)){if((c[d+152>>2]|0)>=(e|0))return;if((e|0)!=0?(c[6472]=(c[6472]|0)+1,f=ic((e<<1)+19|0)|0,(f|0)!=0):0){c[(f+4+15&-16)+-4>>2]=f;i=f+4+15&-16}else i=0;g=c[d+148>>2]|0;h=c[d+156>>2]|0;if((g|0)<=0)if(!h)f=d+160|0;else j=22;else{f=0;do{b[i+(f<<1)>>1]=b[h+(f<<1)>>1]|0;f=f+1|0}while((f|0)!=(g|0));j=22}if((j|0)==22){if(a[d+160>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[d+156>>2]=0;f=d+160|0}a[f>>0]=1;c[d+156>>2]=i;c[d+152>>2]=e;return}else{if((c[d+132>>2]|0)>=(e|0))return;if((e|0)!=0?(c[6472]=(c[6472]|0)+1,g=ic((e<<2|3)+16|0)|0,(g|0)!=0):0){c[(g+4+15&-16)+-4>>2]=g;i=g+4+15&-16}else i=0;g=c[d+128>>2]|0;h=c[d+136>>2]|0;if((g|0)<=0)if(!h)f=d+140|0;else j=10;else{f=0;do{c[i+(f<<2)>>2]=c[h+(f<<2)>>2];f=f+1|0}while((f|0)!=(g|0));j=10}if((j|0)==10){if(a[d+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[d+136>>2]=0;f=d+140|0}a[f>>0]=1;c[d+136>>2]=i;c[d+132>>2]=e;return}}function yh(a,b,d){a=a|0;b=b|0;d=d|0;Zh(a,b,d)|0;c[b+52>>2]=c[a+300>>2];c[b+56>>2]=c[a+304>>2];c[b+60>>2]=c[a+308>>2];c[b+64>>2]=c[a+312>>2];c[b+68>>2]=c[a+316>>2];c[b+72>>2]=c[a+320>>2];c[b+76>>2]=c[a+324>>2];c[b+80>>2]=c[a+328>>2];c[b+84>>2]=c[a+332>>2];c[b+88>>2]=c[a+336>>2];c[b+92>>2]=c[a+340>>2];c[b+96>>2]=c[a+344>>2];c[b+100>>2]=c[a+348>>2];c[b+104>>2]=c[a+352>>2];c[b+108>>2]=c[a+356>>2];c[b+112>>2]=c[a+360>>2];c[b+116>>2]=c[a+364>>2];c[b+120>>2]=c[a+368>>2];c[b+124>>2]=c[a+372>>2];c[b+128>>2]=c[a+376>>2];c[b+132>>2]=c[a+380>>2];c[b+136>>2]=c[a+384>>2];c[b+140>>2]=c[a+388>>2];c[b+144>>2]=c[a+392>>2];c[b+148>>2]=c[a+396>>2];c[b+152>>2]=c[a+400>>2];c[b+156>>2]=c[a+404>>2];c[b+160>>2]=c[a+408>>2];c[b+164>>2]=c[a+412>>2];c[b+168>>2]=c[a+416>>2];c[b+172>>2]=c[a+420>>2];c[b+176>>2]=c[a+424>>2];c[b+180>>2]=c[a+444>>2];c[b+184>>2]=c[a+448>>2];c[b+188>>2]=c[a+452>>2];c[b+192>>2]=c[a+428>>2];c[b+196>>2]=c[a+432>>2];c[b+200>>2]=c[a+436>>2];c[b+204>>2]=c[a+440>>2];return 12907}function zh(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0;j=l;l=l+32|0;n=+g[a+56>>2];r=+g[a+72>>2]-n;m=+g[a+60>>2];p=+g[a+76>>2]-m;k=+g[a+64>>2];s=+g[a+80>>2]-k;o=+g[a+88>>2]-n;q=+g[a+92>>2]-m;h=+g[a+96>>2]-k;i=1.0/+C(+((r*q-p*o)*(r*q-p*o)+((p*h-s*q)*(p*h-s*q)+(s*o-r*h)*(s*o-r*h))));f=i*(p*h-s*q);h=i*(s*o-r*h);i=(r*q-p*o)*i;k=i*+g[b+8>>2]+(+g[b>>2]*f+ +g[b+4>>2]*h)-(f*n+h*m+i*k);if(!(k>=-d)|!(k<=d)){a=0;l=j;return a|0}e=0;while(1){Nb[c[(c[a>>2]|0)+104>>2]&127](a,e,j+16|0,j);n=+g[j+16>>2];s=+g[j>>2]-n;p=+g[j+16+4>>2];o=+g[j+4>>2]-p;m=+g[j+16+8>>2];r=+g[j+8>>2]-m;q=1.0/+C(+((h*s-f*o)*(h*s-f*o)+((i*o-h*r)*(i*o-h*r)+(f*r-i*s)*(f*r-i*s))));e=e+1|0;if((h*s-f*o)*q*+g[b+8>>2]+(+g[b>>2]*q*(i*o-h*r)+ +g[b+4>>2]*q*(f*r-i*s))-(m*(h*s-f*o)*q+(n*q*(i*o-h*r)+p*q*(f*r-i*s)))<-d){e=0;b=5;break}if((e|0)>=3){e=1;b=5;break}}if((b|0)==5){l=j;return e|0}return 0}function Ah(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0;c[6472]=(c[6472]|0)+1;h=ic(55)|0;if(!h)j=0;else{c[(h+4+15&-16)+-4>>2]=h;j=h+4+15&-16}c[j>>2]=d;c[j+4>>2]=e;c[j+8>>2]=f;c[j+12>>2]=-1;c[j+16>>2]=-1;c[j+20>>2]=-1;c[j+28>>2]=-1;g[j+32>>2]=0.0;f=j;h=c[b+4>>2]|0;c[j+24>>2]=h;if((h|0)!=(c[b+8>>2]|0)){i=h;e=b+12|0;e=c[e>>2]|0;e=e+(i<<2)|0;c[e>>2]=f;i=i+1|0;c[b+4>>2]=i;return j|0}i=h|0?h<<1:1;if((h|0)>=(i|0)){i=h;e=b+12|0;e=c[e>>2]|0;e=e+(i<<2)|0;c[e>>2]=f;i=i+1|0;c[b+4>>2]=i;return j|0}if(!i)d=0;else{c[6472]=(c[6472]|0)+1;h=ic((i<<2|3)+16|0)|0;if(!h)d=0;else{c[(h+4+15&-16)+-4>>2]=h;d=h+4+15&-16}h=c[b+4>>2]|0}if((h|0)>0){e=0;do{c[d+(e<<2)>>2]=c[(c[b+12>>2]|0)+(e<<2)>>2];e=e+1|0}while((e|0)!=(h|0))}e=c[b+12>>2]|0;if(e){if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);h=c[b+4>>2]|0}c[b+12>>2]=0}a[b+16>>0]=1;c[b+12>>2]=d;c[b+8>>2]=i;i=h;e=b+12|0;e=c[e>>2]|0;e=e+(i<<2)|0;c[e>>2]=f;i=i+1|0;c[b+4>>2]=i;return j|0}function Bh(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0,F=0.0;o=+gb[c[(c[a>>2]|0)+48>>2]&15](a);u=+g[a+72>>2];t=+g[a+56>>2];r=+g[a+76>>2];q=+g[a+60>>2];n=+g[a+80>>2];m=+g[a+64>>2];F=+g[b>>2];y=+B(+F);E=+g[b+4>>2];x=+B(+E);k=+g[b+8>>2];l=+B(+k);D=+g[b+16>>2];w=+B(+D);C=+g[b+20>>2];v=+B(+C);i=+g[b+24>>2];j=+B(+i);A=+g[b+32>>2];s=+B(+A);z=+g[b+36>>2];p=+B(+z);f=+g[b+40>>2];h=+B(+f);k=(u+t)*.5*F+(r+q)*.5*E+(n+m)*.5*k+ +g[b+48>>2];i=(u+t)*.5*D+(r+q)*.5*C+(n+m)*.5*i+ +g[b+52>>2];f=(u+t)*.5*A+(r+q)*.5*z+(n+m)*.5*f+ +g[b+56>>2];l=(o+(u-t)*.5)*y+(o+(r-q)*.5)*x+(o+(n-m)*.5)*l;j=(o+(u-t)*.5)*w+(o+(r-q)*.5)*v+(o+(n-m)*.5)*j;h=(o+(u-t)*.5)*s+(o+(r-q)*.5)*p+(o+(n-m)*.5)*h;g[d>>2]=k-l;g[d+4>>2]=i-j;g[d+8>>2]=f-h;g[d+12>>2]=0.0;g[e>>2]=l+k;g[e+4>>2]=j+i;g[e+8>>2]=h+f;g[e+12>>2]=0.0;return}function Ch(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0;f=l;l=l+16|0;y=c[a+52>>2]|0;z=c[a+28+(((y+2|0)%3|0)<<2)>>2]|0;c[f>>2]=z;c[f+4>>2]=z;c[f+8>>2]=z;g[f+12>>2]=0.0;g[f+(y<<2)>>2]=(c[j>>2]=z,+g[j>>2])+ +g[a+28+(y<<2)>>2];k=+gb[c[(c[a>>2]|0)+48>>2]&15](a);h=+gb[c[(c[a>>2]|0)+48>>2]&15](a);o=+gb[c[(c[a>>2]|0)+48>>2]&15](a);k=k+ +g[f>>2];g[f>>2]=k;h=h+ +g[f+4>>2];g[f+4>>2]=h;o=o+ +g[f+8>>2];v=+B(+(+g[b>>2]));u=+B(+(+g[b+4>>2]));w=+B(+(+g[b+8>>2]));r=+B(+(+g[b+16>>2]));q=+B(+(+g[b+20>>2]));s=+B(+(+g[b+24>>2]));m=+B(+(+g[b+32>>2]));i=+B(+(+g[b+36>>2]));n=+B(+(+g[b+40>>2]));x=+g[b+48>>2];t=+g[b+52>>2];p=+g[b+56>>2];g[d>>2]=x-(o*w+(v*k+u*h));g[d+4>>2]=t-(o*s+(r*k+q*h));g[d+8>>2]=p-(o*n+(m*k+i*h));g[d+12>>2]=0.0;g[e>>2]=x+(o*w+(v*k+u*h));g[e+4>>2]=t+(o*s+(r*k+q*h));g[e+8>>2]=p+(o*n+(m*k+i*h));g[e+12>>2]=0.0;l=f;return}function Dh(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;if(a[d+32>>0]&1){f=c[b+4>>2]|0;if(f|0)Zk(f,d,e);f=c[b>>2]|0;if(f|0){n=+g[d>>2];l=+g[f+128>>2];m=+g[d+4>>2];k=+g[d+8>>2];h=+g[e+4>>2];p=+g[e+8>>2];o=+g[e>>2];j=+g[f+180>>2]*(k*h-m*p)+ +g[f+184>>2]*(n*p-k*o)+(m*o-n*h)*+g[f+188>>2];i=(k*h-m*p)*+g[f+196>>2]+(n*p-k*o)*+g[f+200>>2]+(m*o-n*h)*+g[f+204>>2];h=(k*h-m*p)*+g[f+212>>2]+(n*p-k*o)*+g[f+216>>2]+(m*o-n*h)*+g[f+220>>2];g[f+244>>2]=n*l+ +g[f+244>>2];g[f+248>>2]=l*m+ +g[f+248>>2];g[f+252>>2]=l*k+ +g[f+252>>2];g[f+316>>2]=n*l+ +g[f+316>>2];g[f+320>>2]=l*m+ +g[f+320>>2];g[f+324>>2]=l*k+ +g[f+324>>2];g[f+260>>2]=j+ +g[f+260>>2];g[f+264>>2]=i+ +g[f+264>>2];g[f+268>>2]=h+ +g[f+268>>2];g[f+332>>2]=j+ +g[f+332>>2];g[f+336>>2]=i+ +g[f+336>>2];g[f+340>>2]=h+ +g[f+340>>2];c[f+308>>2]=(c[f+308>>2]|0)+1}}if(!(a[d+32>>0]&2))return;Pi(b,d+16|0,e);return}function Eh(a){a=a|0;var b=0,d=0,e=0,f=0;d=l;l=l+16|0;bj(14480);Ab[c[(c[a>>2]|0)+8>>2]&511](a);Ab[c[(c[a>>2]|0)+12>>2]&511](a);b=c[a+24>>2]|0;bj(14514);if(b|0){f=c[(c[b>>2]|0)+32>>2]|0;e=c[a+68>>2]|0;e=qb[c[(c[e>>2]|0)+36>>2]&127](e)|0;Nb[f&127](b,e,a+28|0,c[a+24>>2]|0)}a=c[2405]|0;f=(c[a+16>>2]|0)+-1|0;c[a+16>>2]=f;do if(!f){if(c[a+4>>2]|0){Za(d|0,0)|0;b=c[6471]|0;g[a+8>>2]=+g[a+8>>2]+ +(((c[d+4>>2]|0)-(c[b+4>>2]|0)+(((c[d>>2]|0)-(c[b>>2]|0)|0)*1e6|0)-(c[a+12>>2]|0)|0)>>>0)/1.0e3;b=c[2405]|0;if(c[a+16>>2]|0)break}else b=a;b=c[b+20>>2]|0;c[2405]=b}else b=a;while(0);a=b+16|0;f=(c[a>>2]|0)+-1|0;c[a>>2]=f;if(f|0){l=d;return}do if(c[b+4>>2]|0){Za(d|0,0)|0;e=c[6471]|0;f=b+8|0;g[f>>2]=+g[f>>2]+ +(((c[d+4>>2]|0)-(c[e+4>>2]|0)+(((c[d>>2]|0)-(c[e>>2]|0)|0)*1e6|0)-(c[b+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[a>>2]|0)){b=c[2405]|0;break}else{l=d;return}}while(0);c[2405]=c[b+20>>2];l=d;return}function Fh(b,d){b=b|0;d=d|0;var e=0;c[b>>2]=9032;a[b+40>>0]=1;c[b+36>>2]=0;c[b+28>>2]=0;c[b+32>>2]=0;a[b+60>>0]=1;c[b+56>>2]=0;c[b+48>>2]=0;c[b+52>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;c[b+12>>2]=-1;c[b+16>>2]=0;c[b+20>>2]=0;a[b+100>>0]=1;c[b+96>>2]=0;c[b+88>>2]=0;c[b+92>>2]=0;a[b+120>>0]=1;c[b+116>>2]=0;c[b+108>>2]=0;c[b+112>>2]=0;c[b+64>>2]=0;c[b+68>>2]=0;c[b+72>>2]=-1;c[b+76>>2]=0;c[b+80>>2]=0;a[b+193>>0]=0;a[b+194>>0]=1;a[b+192>>0]=((d|0)!=0^1)&1;g[b+140>>2]=0.0;c[b+144>>2]=0;c[b+164>>2]=0;c[b+148>>2]=1;c[b+152>>2]=0;c[b+156>>2]=10;c[b+160>>2]=1;c[b+168>>2]=0;c[b+172>>2]=0;g[b+176>>2]=0.0;if(d|0){e=d;d=b+136|0;c[d>>2]=e;d=b+188|0;c[d>>2]=0;d=b+180|0;c[d>>2]=0;d=b+184|0;c[d>>2]=0;b=b+124|0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}c[6472]=(c[6472]|0)+1;d=ic(95)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}si(d);e=b+136|0;c[e>>2]=d;e=b+188|0;c[e>>2]=0;e=b+180|0;c[e>>2]=0;e=b+184|0;c[e>>2]=0;e=b+124|0;c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;return}function Gh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0.0,k=0.0;i=c[b>>2]|0;if((i|0)==(c[a+80>>2]|0)){k=1.0;return +k}if(c[i+204>>2]&4|0){k=1.0;return +k}f=+g[b+8>>2];h=+g[b+12>>2];e=+g[b+16>>2];if(d){j=f;k=h}else{j=+g[i+4>>2]*f+ +g[i+8>>2]*h+ +g[i+12>>2]*e;k=f*+g[i+20>>2]+h*+g[i+24>>2]+e*+g[i+28>>2];e=f*+g[i+36>>2]+h*+g[i+40>>2]+e*+g[i+44>>2]}if(j*+g[a+84>>2]+k*+g[a+88>>2]+e*+g[a+92>>2]<+g[a+100>>2]){k=1.0;return +k}c[a+4>>2]=c[b+40>>2];c[a+76>>2]=i;if(d){c[a+44>>2]=c[b+8>>2];c[a+44+4>>2]=c[b+8+4>>2];c[a+44+8>>2]=c[b+8+8>>2];c[a+44+12>>2]=c[b+8+12>>2]}else{e=+g[b+8>>2];f=+g[b+12>>2];h=+g[b+16>>2];j=e*+g[i+20>>2]+f*+g[i+24>>2]+h*+g[i+28>>2];k=e*+g[i+36>>2]+f*+g[i+40>>2]+h*+g[i+44>>2];g[a+44>>2]=+g[i+4>>2]*e+ +g[i+8>>2]*f+ +g[i+12>>2]*h;g[a+48>>2]=j;g[a+52>>2]=k;g[a+56>>2]=0.0}c[a+60>>2]=c[b+24>>2];c[a+60+4>>2]=c[b+24+4>>2];c[a+60+8>>2]=c[b+24+8>>2];c[a+60+12>>2]=c[b+24+12>>2];k=+g[b+40>>2];return +k}function Hh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[b+16>>2]|0;if(d|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;d=c[b+40>>2]|0;if(d|0){if(a[b+44>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+40>>2]=0}a[b+44>>0]=1;c[b+40>>2]=0;c[b+32>>2]=0;c[b+36>>2]=0;d=c[b+60>>2]|0;if(d|0){if(a[b+64>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+60>>2]=0}a[b+64>>0]=1;c[b+60>>2]=0;c[b+52>>2]=0;c[b+56>>2]=0;if((c[b+12>>2]|0)>=2){zf(b);return}c[6472]=(c[6472]|0)+1;d=ic(43)|0;if(!d)f=0;else{c[(d+4+15&-16)+-4>>2]=d;f=d+4+15&-16}d=c[b+8>>2]|0;if((d|0)>0){e=0;do{g=f+(e*12|0)|0;h=(c[b+16>>2]|0)+(e*12|0)|0;c[g>>2]=c[h>>2];c[g+4>>2]=c[h+4>>2];c[g+8>>2]=c[h+8>>2];e=e+1|0}while((e|0)!=(d|0))}d=c[b+16>>2]|0;if(d|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=f;c[b+12>>2]=2;zf(b);return}function Ih(a,b,e){a=a|0;b=b|0;e=e|0;Zh(a,b,e)|0;c[b+52>>2]=c[a+52>>2];c[b+56>>2]=c[a+56>>2];c[b+60>>2]=c[a+60>>2];c[b+64>>2]=c[a+64>>2];c[b+68>>2]=c[a+68>>2];c[b+72>>2]=c[a+72>>2];c[b+76>>2]=c[a+76>>2];c[b+80>>2]=c[a+80>>2];c[b+84>>2]=c[a+84>>2];c[b+88>>2]=c[a+88>>2];c[b+92>>2]=c[a+92>>2];c[b+96>>2]=c[a+96>>2];c[b+100>>2]=c[a+100>>2];c[b+104>>2]=c[a+104>>2];c[b+108>>2]=c[a+108>>2];c[b+112>>2]=c[a+112>>2];c[b+116>>2]=c[a+116>>2];c[b+120>>2]=c[a+120>>2];c[b+124>>2]=c[a+124>>2];c[b+128>>2]=c[a+128>>2];c[b+132>>2]=c[a+132>>2];c[b+136>>2]=c[a+136>>2];c[b+140>>2]=c[a+140>>2];c[b+144>>2]=c[a+144>>2];c[b+148>>2]=c[a+148>>2];c[b+152>>2]=c[a+152>>2];c[b+156>>2]=c[a+156>>2];c[b+160>>2]=c[a+160>>2];c[b+164>>2]=c[a+164>>2];c[b+168>>2]=c[a+168>>2];c[b+172>>2]=c[a+172>>2];c[b+176>>2]=c[a+176>>2];c[b+180>>2]=c[a+188>>2];c[b+184>>2]=c[a+184>>2];c[b+188>>2]=c[a+196>>2];c[b+192>>2]=c[a+192>>2];c[b+196>>2]=d[a+180>>0];c[b+200>>2]=d[a+49>>0];return 12863}function Jh(){var b=0,d=0,e=0;b=js(288)|0;c[b+164>>2]=1065353216;c[b+168>>2]=1065353216;c[b+172>>2]=1065353216;g[b+176>>2]=0.0;c[b+180>>2]=0;g[b+184>>2]=999999984306749440.0;c[b+188>>2]=0;c[b+188+4>>2]=0;c[b+188+8>>2]=0;c[b+188+12>>2]=0;c[b+204>>2]=1;c[b+208>>2]=-1;c[b+212>>2]=-1;c[b+216>>2]=1;g[b+220>>2]=0.0;g[b+224>>2]=.5;g[b+228>>2]=0.0;g[b+232>>2]=0.0;c[b+240>>2]=0;g[b+244>>2]=1.0;c[b+248>>2]=0;c[b+248+4>>2]=0;c[b+248+8>>2]=0;c[b+248+12>>2]=0;c[b+4>>2]=1065353216;c[b+8>>2]=0;c[b+8+4>>2]=0;c[b+8+8>>2]=0;c[b+8+12>>2]=0;c[b+24>>2]=1065353216;c[b+28>>2]=0;c[b+28+4>>2]=0;c[b+28+8>>2]=0;c[b+28+12>>2]=0;c[b+44>>2]=1065353216;c[b+48>>2]=0;c[b+48+4>>2]=0;c[b+48+8>>2]=0;c[b+48+12>>2]=0;c[b+48+16>>2]=0;a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;c[b+272>>2]=0;c[b+236>>2]=4;c[b>>2]=5280;c[6472]=(c[6472]|0)+1;d=ic(95)|0;if(!d){e=0;si(e);d=b+284|0;c[d>>2]=e;return b|0}c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16;si(d);e=b+284|0;c[e>>2]=d;return b|0}function Kh(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0;h=l;l=l+96|0;g[h+4>>2]=1.0;c[h+8>>2]=0;b[h+12>>1]=1;b[h+14>>1]=-1;c[h+16>>2]=0;c[h>>2]=2920;c[h+20>>2]=c[d>>2];c[h+20+4>>2]=c[d+4>>2];c[h+20+8>>2]=c[d+8>>2];c[h+20+12>>2]=c[d+12>>2];c[h+36>>2]=c[e>>2];c[h+36+4>>2]=c[e+4>>2];c[h+36+8>>2]=c[e+8>>2];c[h+36+12>>2]=c[e+12>>2];a=c[a+4>>2]|0;Nb[c[(c[a>>2]|0)+32>>2]&127](a,d,e,h);d=c[h+8>>2]|0;if(!d){f=0;l=h;return f|0}if(!(c[d+236>>2]&2)){f=0;l=h;return f|0}if(c[d+204>>2]&4|0){f=0;l=h;return f|0}c[f>>2]=c[h+68>>2];c[f+4>>2]=c[h+68+4>>2];c[f+8>>2]=c[h+68+8>>2];c[f+12>>2]=c[h+68+12>>2];c[f+16>>2]=c[h+52>>2];c[f+16+4>>2]=c[h+52+4>>2];c[f+16+8>>2]=c[h+52+8>>2];c[f+16+12>>2]=c[h+52+12>>2];m=+g[f+16>>2];k=+g[f+20>>2];j=+g[f+24>>2];i=1.0/+C(+(m*m+k*k+j*j));g[f+16>>2]=m*i;g[f+20>>2]=k*i;g[f+24>>2]=j*i;c[f+32>>2]=c[h+4>>2];f=d;l=h;return f|0}function Lh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;Ab[c[(c[b>>2]|0)+32>>2]&511](b);e=ub[c[(c[b>>2]|0)+16>>2]&63](b,104,1)|0;d=c[e+8>>2]|0;f=d;g=f+104|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[d+88>>2]=c[a+248>>2];c[d+92>>2]=c[a+252>>2];c[d+96>>2]=c[a+256>>2];c[d+100>>2]=c[a+260>>2];c[d>>2]=c[a+92>>2];c[d+4>>2]=c[a+96>>2];c[d+8>>2]=c[a+100>>2];c[d+12>>2]=c[a+104>>2];c[d+16>>2]=c[a+108>>2];c[d+20>>2]=c[a+116>>2];c[d+24>>2]=c[a+120>>2];c[d+28>>2]=c[a+124>>2];c[d+32>>2]=c[a+128>>2];c[d+36>>2]=c[a+132>>2];c[d+40>>2]=c[a+140>>2];c[d+44>>2]=c[a+144>>2];c[d+48>>2]=c[a+148>>2];c[d+52>>2]=c[a+152>>2];c[d+56>>2]=c[a+168>>2];c[d+60>>2]=c[a+172>>2];c[d+64>>2]=c[a+112>>2];c[d+68>>2]=c[a+156>>2];c[d+72>>2]=c[a+160>>2];c[d+76>>2]=c[a+164>>2];c[d+80>>2]=c[a+136>>2];Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,12441,1145853764,d);Ti(a,b);cd(a,b);Ab[c[(c[b>>2]|0)+36>>2]&511](b);return}function Mh(a){a=a|0;var b=0.0,d=0,e=0,f=0.0,h=0.0,i=0.0,j=0.0;e=ct()|0;c[e+8>>2]=0;c[e+12>>2]=1065353216;c[e+16>>2]=1065353216;c[e+20>>2]=1065353216;g[e+24>>2]=0.0;g[e+44>>2]=.03999999910593033;c[e+52>>2]=0;c[e>>2]=8036;c[e+4>>2]=0;h=+g[a>>2];f=+g[a+4>>2];b=+g[a+8>>2];b=+g[a+((h>2]*.10000000149011612;if(b<.03999999910593033){j=+DF(e);i=+gb[c[(c[e>>2]|0)+48>>2]&15](e);h=+gb[c[(c[e>>2]|0)+48>>2]&15](e);j=j+ +g[e+28>>2];i=i+ +g[e+32>>2];h=h+ +g[e+36>>2];g[e+44>>2]=b;b=+gb[c[(c[e>>2]|0)+48>>2]&15](e);f=+gb[c[(c[e>>2]|0)+48>>2]&15](e);h=h-+gb[c[(c[e>>2]|0)+48>>2]&15](e);g[e+28>>2]=j-b;g[e+32>>2]=i-f;g[e+36>>2]=h;g[e+40>>2]=0.0;d=c[e>>2]|0}else d=8036;h=+gb[c[d+48>>2]&15](e);i=+gb[c[(c[e>>2]|0)+48>>2]&15](e);j=+gb[c[(c[e>>2]|0)+48>>2]&15](e);i=+g[a+4>>2]*+g[e+16>>2]-i;j=+g[a+8>>2]*+g[e+20>>2]-j;g[e+28>>2]=+g[a>>2]*+g[e+12>>2]-h;g[e+32>>2]=i;g[e+36>>2]=j;g[e+40>>2]=0.0;return e|0}function Nh(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0;e=l;l=l+32|0;d=c[b+388>>2]|0;switch(c[a+388>>2]&48&d&63){case 32:{if((a|0)==(b|0)&(d&64|0)==0){l=e;return}g[e+4>>2]=1.0;c[e+8+4>>2]=0;c[e+8+4+4>>2]=0;c[e+8+4+8>>2]=0;c[e>>2]=3684;c[e+8>>2]=c[a+456>>2];d=c[a+192>>2]|0;f=+gb[c[(c[d>>2]|0)+48>>2]&15](d);d=c[b+192>>2]|0;g[e+12>>2]=f+ +gb[c[(c[d>>2]|0)+48>>2]&15](d);c[e+16>>2]=c[(+g[a+316>>2]<+g[b+316>>2]?a+316|0:b+316|0)>>2];c[e+24>>2]=a;c[e+28>>2]=b;se(c[a+1048>>2]|0,c[b+1048>>2]|0,e);l=e;return}case 16:{if((a|0)==(b|0)){l=e;return}c[e>>2]=3720;d=c[a+192>>2]|0;f=+gb[c[(c[d>>2]|0)+48>>2]&15](d);d=c[b+192>>2]|0;g[e+12>>2]=f+ +gb[c[(c[d>>2]|0)+48>>2]&15](d);c[e+4>>2]=a;c[e+8>>2]=b;se(c[a+928>>2]|0,c[b+988>>2]|0,e);c[e+4>>2]=b;c[e+8>>2]=a;se(c[b+928>>2]|0,c[a+988>>2]|0,e);l=e;return}default:{l=e;return}}}function Oh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0.0;i=l;l=l+32|0;c[i+16>>2]=c[d>>2];c[i+16+4>>2]=c[d+4>>2];c[i+16+8>>2]=c[d+8>>2];c[i+16+12>>2]=c[d+12>>2];e=+g[i+16>>2];h=+g[i+16+4>>2];f=+g[i+16+8>>2];if(e*e+h*h+f*f<1.4210854715202004e-14){c[i+16>>2]=-1082130432;c[i+16+4>>2]=-1082130432;c[i+16+8>>2]=-1082130432;g[i+16+12>>2]=0.0;e=-1.0;h=-1.0;f=-1.0}j=1.0/+C(+(e*e+h*h+f*f));g[i+16>>2]=e*j;g[i+16+4>>2]=h*j;g[i+16+8>>2]=f*j;wd(i,b,i+16|0);switch(c[b+4>>2]|0){case 8:{e=+g[b+28>>2]*+g[b+12>>2];break}case 0:{e=+g[b+44>>2];break}case 1:{e=+g[b+44>>2];break}case 13:{e=+g[b+44>>2];break}case 11:{e=+g[b+44>>2];break}case 10:{e=+g[b+44>>2];break}case 4:case 5:{e=+g[b+44>>2];break}default:e=+gb[c[(c[b>>2]|0)+48>>2]&15](b)}h=e*+g[i+16+4>>2]+ +g[i+4>>2];j=e*+g[i+16+8>>2]+ +g[i+8>>2];g[a>>2]=e*+g[i+16>>2]+ +g[i>>2];g[a+4>>2]=h;g[a+8>>2]=j;g[a+12>>2]=0.0;l=i;return}function Ph(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0.0,i=0.0,j=0.0;c[a+4>>2]=35;c[a+8>>2]=0;c[a+12>>2]=1065353216;c[a+16>>2]=1065353216;c[a+20>>2]=1065353216;g[a+24>>2]=0.0;g[a+44>>2]=.03999999910593033;c[a>>2]=8332;c[a+52>>2]=1;h=+g[b>>2];f=+g[b+4>>2];d=+g[b+8>>2];d=+g[b+((h>2]*.10000000149011612;if(d<.03999999910593033){j=+DF(a);i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);h=+gb[c[(c[a>>2]|0)+48>>2]&15](a);j=j+ +g[a+28>>2];i=i+ +g[a+32>>2];h=h+ +g[a+36>>2];g[a+44>>2]=d;d=+gb[c[(c[a>>2]|0)+48>>2]&15](a);f=+gb[c[(c[a>>2]|0)+48>>2]&15](a);h=h-+gb[c[(c[a>>2]|0)+48>>2]&15](a);g[a+28>>2]=j-d;g[a+32>>2]=i-f;g[a+36>>2]=h;g[a+40>>2]=0.0;e=c[a>>2]|0}else e=8332;h=+gb[c[e+48>>2]&15](a);i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);j=+gb[c[(c[a>>2]|0)+48>>2]&15](a);i=+g[b+4>>2]*+g[a+16>>2]-i;j=+g[b+8>>2]*+g[a+20>>2]-j;g[a+28>>2]=+g[b>>2]*+g[a+12>>2]-h;g[a+32>>2]=i;g[a+36>>2]=j;g[a+40>>2]=0.0;c[a+4>>2]=13;return}function Qh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0.0,k=0,m=0,n=0,o=0.0;m=l;l=l+80|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;e=+g[d>>2];f=+g[d+4>>2];i=+g[d+8>>2];if(e*e+f*f+i*i<9.999999747378752e-05){k=1065353216;h=0;e=0.0;d=0}else{o=1.0/+C(+(e*e+f*f+i*i));k=(g[j>>2]=e*o,c[j>>2]|0);n=(g[j>>2]=f*o,c[j>>2]|0);h=(g[j>>2]=i*o,c[j>>2]|0);e=+g[d+12>>2];d=n}c[m+32>>2]=8016;n=m+32+4|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;g[m+32+20>>2]=-999999984306749440.0;c[m+32+24>>2]=k;c[m+32+28>>2]=d;c[m+32+32>>2]=h;g[m+32+36>>2]=e;c[m+16>>2]=1566444395;c[m+16+4>>2]=1566444395;c[m+16+8>>2]=1566444395;g[m+16+12>>2]=0.0;b=c[b+92>>2]|0;k=c[(c[b>>2]|0)+8>>2]|0;g[m>>2]=-999999984306749440.0;g[m+4>>2]=-999999984306749440.0;g[m+8>>2]=-999999984306749440.0;g[m+12>>2]=0.0;Nb[k&127](b,m+32|0,m,m+16|0);c[a>>2]=c[n>>2];c[a+4>>2]=c[n+4>>2];c[a+8>>2]=c[n+8>>2];c[a+12>>2]=c[n+12>>2];l=m;return}function Rh(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+48|0;h=m;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));if(!d)k=c[c[b+880>>2]>>2]|0;else k=d;d=c[b+732>>2]|0;if((d|0)==(c[b+736>>2]|0)?(j=d|0?d<<1:1,(d|0)<(j|0)):0){if(!j)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((j*52|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[b+732>>2]|0}if((d|0)>0){f=0;do{h=e+(f*52|0)|0;g=(c[b+740>>2]|0)+(f*52|0)|0;i=h+52|0;do{c[h>>2]=c[g>>2];h=h+4|0;g=g+4|0}while((h|0)<(i|0));f=f+1|0}while((f|0)!=(d|0))}d=c[b+740>>2]|0;if(d|0){if(a[b+744>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+740>>2]=0}a[b+744>>0]=1;c[b+740>>2]=e;c[b+736>>2]=j;d=c[b+732>>2]|0}h=c[b+740>>2]|0;c[h+(d*52|0)>>2]=0;c[h+(d*52|0)+4>>2]=k;h=h+(d*52|0)+8|0;g=m;i=h+44|0;do{c[h>>2]=c[g>>2];h=h+4|0;g=g+4|0}while((h|0)<(i|0));c[b+732>>2]=(c[b+732>>2]|0)+1;l=m;return}function Sh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;g=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=g;if(g|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];c[b+28>>2]=c[a+28>>2];c[b+32>>2]=c[a+32>>2];c[b+36>>2]=c[a+36>>2];c[b+40>>2]=c[a+40>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];c[b+20>>2]=c[a+20>>2];c[b+24>>2]=c[a+24>>2];c[b+44>>2]=c[a+44>>2];f=c[a+96>>2]|0;c[b+60>>2]=f;if(!f){c[b+52>>2]=0;c[b+56>>2]=0;return 17487}c[b+52>>2]=sb[c[(c[d>>2]|0)+28>>2]&31](d,c[a+104>>2]|0)|0;c[b+56>>2]=0;g=ub[c[(c[d>>2]|0)+16>>2]&63](d,16,f)|0;if((f|0)>0){e=c[a+104>>2]|0;b=0;a=c[g+8>>2]|0;while(1){c[a>>2]=c[e+(b<<4)>>2];c[a+4>>2]=c[e+(b<<4)+4>>2];c[a+8>>2]=c[e+(b<<4)+8>>2];c[a+12>>2]=c[e+(b<<4)+12>>2];b=b+1|0;if((b|0)==(f|0))break;else a=a+16|0}}else e=c[a+104>>2]|0;Rb[c[(c[d>>2]|0)+20>>2]&31](d,g,19486,1497453121,e);return 17487}function Th(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0;l=+g[b+60>>2]*.5;h=c[b+68>>2]|0;f=+g[d>>2];j=+g[d+4>>2];k=+g[d+8>>2];k=+C(+(f*f+j*j+k*k));i=c[b+64>>2]|0;do if(!(+g[d+(h<<2)>>2]>k*+g[b+52>>2])){j=+g[d+(i<<2)>>2];e=c[b+72>>2]|0;f=+g[d+(e<<2)>>2];k=+C(+(j*j+f*f));if(k>1.1920928955078125e-07){k=+g[b+56>>2]/k;g[a+(i<<2)>>2]=j*k;g[a+(h<<2)>>2]=-l;f=f*k;break}else{g[a+(i<<2)>>2]=0.0;g[a+(h<<2)>>2]=-l;f=0.0;break}}else{g[a+(i<<2)>>2]=0.0;g[a+(h<<2)>>2]=l;f=0.0;e=c[b+72>>2]|0}while(0);g[a+(e<<2)>>2]=f;if(!(+gb[c[(c[b>>2]|0)+48>>2]&15](b)!=0.0))return;j=+g[d>>2];k=+g[d+4>>2];l=+g[d+8>>2];m=j*j+k*k+l*l<1.4210854715202004e-14?-1.0:j;f=j*j+k*k+l*l<1.4210854715202004e-14?-1.0:k;l=j*j+k*k+l*l<1.4210854715202004e-14?-1.0:l;k=1.0/+C(+(l*l+(m*m+f*f)));j=+gb[c[(c[b>>2]|0)+48>>2]&15](b);g[a>>2]=+g[a>>2]+j*k*m;g[a+4>>2]=j*k*f+ +g[a+4>>2];g[a+8>>2]=j*k*l+ +g[a+8>>2];return}function Uh(a,b,d){a=a|0;b=b|0;d=d|0;c[a+300>>2]=c[b>>2];c[a+300+4>>2]=c[b+4>>2];c[a+300+8>>2]=c[b+8>>2];c[a+300+12>>2]=c[b+12>>2];c[a+316>>2]=c[b+16>>2];c[a+316+4>>2]=c[b+16+4>>2];c[a+316+8>>2]=c[b+16+8>>2];c[a+316+12>>2]=c[b+16+12>>2];c[a+332>>2]=c[b+32>>2];c[a+332+4>>2]=c[b+32+4>>2];c[a+332+8>>2]=c[b+32+8>>2];c[a+332+12>>2]=c[b+32+12>>2];c[a+348>>2]=c[b+48>>2];c[a+348+4>>2]=c[b+48+4>>2];c[a+348+8>>2]=c[b+48+8>>2];c[a+348+12>>2]=c[b+48+12>>2];c[a+364>>2]=c[d>>2];c[a+364+4>>2]=c[d+4>>2];c[a+364+8>>2]=c[d+8>>2];c[a+364+12>>2]=c[d+12>>2];c[a+380>>2]=c[d+16>>2];c[a+380+4>>2]=c[d+16+4>>2];c[a+380+8>>2]=c[d+16+8>>2];c[a+380+12>>2]=c[d+16+12>>2];c[a+396>>2]=c[d+32>>2];c[a+396+4>>2]=c[d+32+4>>2];c[a+396+8>>2]=c[d+32+8>>2];c[a+396+12>>2]=c[d+32+12>>2];c[a+412>>2]=c[d+48>>2];c[a+412+4>>2]=c[d+48+4>>2];c[a+412+8>>2]=c[d+48+8>>2];c[a+412+12>>2]=c[d+48+12>>2];Ab[c[(c[a>>2]|0)+8>>2]&511](a);return}function Vh(b){b=b|0;var d=0;d=c[b>>2]|0;if(d|0)dn(b,d);d=c[b+4>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+4>>2]=0;c[b+8>>2]=-1;d=c[b+32>>2]|0;if(d|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;c[b+16>>2]=0;d=c[b+52>>2]|0;if(!d){a[b+56>>0]=1;c[b+52>>2]=0;c[b+44>>2]=0;c[b+48>>2]=0;a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}if(!(a[b+56>>0]|0)){a[b+56>>0]=1;c[b+52>>2]=0;c[b+44>>2]=0;c[b+48>>2]=0;a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);d=c[b+32>>2]|0;a[b+56>>0]=1;c[b+52>>2]=0;c[b+44>>2]=0;c[b+48>>2]=0;if(!d){a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}if(!((a[b+36>>0]|0)==0|(d|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0;a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}function Wh(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0,n=0.0;m=c[a+4>>2]|0;a=c[a+64>>2]|0;do if(!m)if(!a){e=0.0;n=0.0;j=0.0;l=0.0;h=0.0;k=0.0;i=0.0;f=0.0}else{e=+g[a>>2];n=+g[a+12>>2];j=+g[a+16>>2];l=+g[a+20>>2];h=+g[a+24>>2];k=+g[a+28>>2];i=+g[a+4>>2];f=+g[a+8>>2]}else{e=+g[m>>2];if(!a){n=+g[m+12>>2];j=+g[m+16>>2];l=+g[m+20>>2];h=+g[m+24>>2];k=+g[m+28>>2];i=+g[m+4>>2];f=+g[m+8>>2];break}k=+g[a>>2];e=e>2];j=+g[a+16>>2];j=k>j?k:j;k=+g[m+4>>2];i=+g[a+4>>2];i=k>2];l=+g[a+20>>2];l=k>l?k:l;k=+g[m+8>>2];f=+g[a+8>>2];f=k>2];h=+g[a+24>>2];if(k>h){n=0.0;h=k;k=0.0}else{n=0.0;k=0.0}}while(0);g[b>>2]=e;g[b+4>>2]=i;g[b+8>>2]=f;g[b+12>>2]=n;g[d>>2]=j;g[d+4>>2]=l;g[d+8>>2]=h;g[d+12>>2]=k;return}function Xh(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;c=l;l=l+48|0;lh(a+364|0,c+16|0);h=-+g[c+16>>2];e=-+g[c+16+4>>2];m=-+g[c+16+8>>2];k=+g[c+16+12>>2];f=+g[b>>2];n=+g[b+12>>2];j=+g[b+8>>2];i=+g[b+4>>2];lh(a+300|0,c);p=+g[c>>2];q=+g[c+12>>2];d=+g[c+8>>2];o=+g[c+4>>2];g[c+32>>2]=(k*n-f*h-i*e-j*m)*p+(k*f+n*h+j*e-i*m)*q+(f*m+(n*e+k*i)-j*h)*d-(n*m+k*j+i*h-f*e)*o;g[c+32+4>>2]=p*(n*m+k*j+i*h-f*e)+(q*(f*m+(n*e+k*i)-j*h)+(k*n-f*h-i*e-j*m)*o)-(k*f+n*h+j*e-i*m)*d;g[c+32+8>>2]=(n*m+k*j+i*h-f*e)*q+(k*n-f*h-i*e-j*m)*d+(k*f+n*h+j*e-i*m)*o-p*(f*m+(n*e+k*i)-j*h);g[c+32+12>>2]=(k*n-f*h-i*e-j*m)*q-(k*f+n*h+j*e-i*m)*p-(f*m+(n*e+k*i)-j*h)*o-(n*m+k*j+i*h-f*e)*d;Je(a,c+32|0);l=c;return}function Yh(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;i=l;l=l+32|0;h=Hs()|0;c[h+4>>2]=11;c[h+8>>2]=-1;c[h+12>>2]=-1;g[h+16>>2]=3402823466385288598117041.0e14;a[h+20>>0]=1;a[h+21>>0]=0;c[h+24>>2]=-1;c[h+28>>2]=b;c[h+32>>2]=d;g[h+36>>2]=0.0;g[h+40>>2]=.30000001192092896;c[h+44>>2]=0;c[h>>2]=4520;c[h+48>>2]=c[e+48>>2];c[h+48+4>>2]=c[e+48+4>>2];c[h+48+8>>2]=c[e+48+8>>2];c[h+48+12>>2]=c[e+48+12>>2];c[h+64>>2]=c[f+48>>2];c[h+64+4>>2]=c[f+48+4>>2];c[h+64+8>>2]=c[f+48+8>>2];c[h+64+12>>2]=c[f+48+12>>2];lh(e,i+16|0);lh(f,i);o=-+g[i>>2];m=-+g[i+4>>2];j=-+g[i+8>>2];r=+g[i+12>>2];q=+g[i+16+12>>2];p=+g[i+16>>2];n=+g[i+16+4>>2];k=+g[i+16+8>>2];g[h+80>>2]=q*o+r*p+n*j-k*m;g[h+84>>2]=k*o+(q*m+r*n)-p*j;g[h+88>>2]=p*m+(q*j+r*k)-n*o;g[h+92>>2]=r*q-p*o-n*m-k*j;l=i;return h|0}function Zh(a,b,e){a=a|0;b=b|0;e=e|0;var f=0,g=0;c[b>>2]=sb[c[(c[e>>2]|0)+28>>2]&31](e,c[a+28>>2]|0)|0;c[b+4>>2]=sb[c[(c[e>>2]|0)+28>>2]&31](e,c[a+32>>2]|0)|0;f=sb[c[(c[e>>2]|0)+40>>2]&31](e,a)|0;g=sb[c[(c[e>>2]|0)+28>>2]&31](e,f)|0;c[b+8>>2]=g;if(g|0)Gb[c[(c[e>>2]|0)+48>>2]&127](e,f);c[b+12>>2]=c[a+4>>2];c[b+24>>2]=d[a+21>>0];c[b+40>>2]=c[a+24>>2];c[b+44>>2]=c[a+16>>2];c[b+48>>2]=d[a+20>>0];c[b+20>>2]=c[a+12>>2];c[b+16>>2]=c[a+8>>2];c[b+28>>2]=c[a+36>>2];c[b+32>>2]=c[a+40>>2];c[b+36>>2]=0;f=c[a+28>>2]|0;if((c[f+488>>2]|0)>0){e=0;do{if((c[(c[f+496>>2]|0)+(e<<2)>>2]|0)==(a|0)){c[b+36>>2]=1;f=c[a+28>>2]|0}e=e+1|0}while((e|0)<(c[f+488>>2]|0))}f=c[a+32>>2]|0;if((c[f+488>>2]|0)>0)e=0;else return 12836;do{if((c[(c[f+496>>2]|0)+(e<<2)>>2]|0)==(a|0)){c[b+36>>2]=1;f=c[a+32>>2]|0}e=e+1|0}while((e|0)<(c[f+488>>2]|0));return 12836}function _h(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192)return Ya(b|0,d|0,e|0)|0;h=b|0;g=b+e|0;if((b&3)==(d&3)){while(b&3){if(!e)return h|0;a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0;e=e-1|0}e=g&-4|0;f=e-64|0;while((b|0)<=(f|0)){c[b>>2]=c[d>>2];c[b+4>>2]=c[d+4>>2];c[b+8>>2]=c[d+8>>2];c[b+12>>2]=c[d+12>>2];c[b+16>>2]=c[d+16>>2];c[b+20>>2]=c[d+20>>2];c[b+24>>2]=c[d+24>>2];c[b+28>>2]=c[d+28>>2];c[b+32>>2]=c[d+32>>2];c[b+36>>2]=c[d+36>>2];c[b+40>>2]=c[d+40>>2];c[b+44>>2]=c[d+44>>2];c[b+48>>2]=c[d+48>>2];c[b+52>>2]=c[d+52>>2];c[b+56>>2]=c[d+56>>2];c[b+60>>2]=c[d+60>>2];b=b+64|0;d=d+64|0}while((b|0)<(e|0)){c[b>>2]=c[d>>2];b=b+4|0;d=d+4|0}}else{e=g-4|0;while((b|0)<(e|0)){a[b>>0]=a[d>>0]|0;a[b+1>>0]=a[d+1>>0]|0;a[b+2>>0]=a[d+2>>0]|0;a[b+3>>0]=a[d+3>>0]|0;b=b+4|0;d=d+4|0}}while((b|0)<(g|0)){a[b>>0]=a[d>>0]|0;b=b+1|0;d=d+1|0}return h|0}function $h(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!e)e=c[b+188>>2]|0;i=c[d>>2]|0;f=c[b+268>>2]|0;a:do if((f|0)>0){h=c[b+276>>2]|0;g=0;while(1){if((c[h+(g<<2)>>2]|0)==(i|0))break;g=g+1|0;if((g|0)>=(f|0))break a}if((g|0)!=(f|0))return}while(0);if((f|0)==(c[b+272>>2]|0)?(j=f|0?f<<1:1,(f|0)<(j|0)):0){if(!j)g=0;else{c[6472]=(c[6472]|0)+1;f=ic((j<<2|3)+16|0)|0;if(!f)g=0;else{c[(f+4+15&-16)+-4>>2]=f;g=f+4+15&-16}f=c[b+268>>2]|0}if((f|0)>0){h=0;do{c[g+(h<<2)>>2]=c[(c[b+276>>2]|0)+(h<<2)>>2];h=h+1|0}while((h|0)!=(f|0))}h=c[b+276>>2]|0;if(h){if(a[b+280>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);f=c[b+268>>2]|0}c[b+276>>2]=0}a[b+280>>0]=1;c[b+276>>2]=g;c[b+272>>2]=j}c[(c[b+276>>2]|0)+(f<<2)>>2]=i;c[b+268>>2]=f+1;b=c[b+284>>2]|0;ub[c[(c[b>>2]|0)+8>>2]&63](b,e,d)|0;return}function ai(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(qb[c[(c[d>>2]|0)+16>>2]&127](d)|0)return;j=c[b+712>>2]|0;i=qb[c[(c[d>>2]|0)+36>>2]&127](d)|0;if(qb[c[(c[d>>2]|0)+8>>2]&127](d)|0?(f=qb[c[(c[d>>2]|0)+20>>2]&127](d)|0,h=qb[c[(c[d>>2]|0)+24>>2]&127](d)|0,(j|0)>0):0){e=c[b+720>>2]|0;g=0;a=i+(f<<2)|0;while(1){k=c[e+(g*104|0)+12>>2]|0;f=c[e+(g*104|0)+16>>2]|0;c[a>>2]=c[e+(g*104|0)+8>>2];c[a+4>>2]=k;c[a+8>>2]=f;g=g+1|0;if((g|0)==(j|0))break;else a=a+(h<<2)|0}}if(!(qb[c[(c[d>>2]|0)+12>>2]&127](d)|0))return;a=qb[c[(c[d>>2]|0)+28>>2]&127](d)|0;g=qb[c[(c[d>>2]|0)+32>>2]&127](d)|0;if((j|0)<=0)return;f=c[b+720>>2]|0;a=i+(a<<2)|0;e=0;while(1){b=c[f+(e*104|0)+76>>2]|0;k=c[f+(e*104|0)+80>>2]|0;c[a>>2]=c[f+(e*104|0)+72>>2];c[a+4>>2]=b;c[a+8>>2]=k;e=e+1|0;if((e|0)==(j|0))break;else a=a+(g<<2)|0}return}function bi(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;c[b>>2]=9544;d=c[b+56>>2]|0;if(d|0){if(a[b+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+56>>2]=0}a[b+60>>0]=1;c[b+56>>2]=0;c[b+48>>2]=0;c[b+52>>2]=0;e=c[b+28>>2]|0;if((e|0)>0){h=0;do{f=c[b+36>>2]|0;j=f+(h*36|0)+4|0;i=f+(h*36|0)+12|0;g=c[i>>2]|0;d=f+(h*36|0)+16|0;if(g|0){if(a[d>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}c[i>>2]=0}a[d>>0]=1;c[i>>2]=0;c[j>>2]=0;c[f+(h*36|0)+8>>2]=0;h=h+1|0}while((h|0)!=(e|0))}d=c[b+36>>2]|0;if(d|0){if(a[b+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+36>>2]=0}a[b+40>>0]=1;c[b+36>>2]=0;c[b+28>>2]=0;c[b+32>>2]=0;d=c[b+16>>2]|0;if(!d){a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}function ci(b){b=b|0;var d=0;c[b>>2]=8644;d=c[b+156>>2]|0;if(d|0){if(a[b+160>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+156>>2]=0}a[b+160>>0]=1;c[b+156>>2]=0;c[b+148>>2]=0;c[b+152>>2]=0;d=c[b+136>>2]|0;if(d|0){if(a[b+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+136>>2]=0}a[b+140>>0]=1;c[b+136>>2]=0;c[b+128>>2]=0;c[b+132>>2]=0;d=c[b+116>>2]|0;if(d|0){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+116>>2]=0}a[b+120>>0]=1;c[b+116>>2]=0;c[b+108>>2]=0;c[b+112>>2]=0;d=c[b+96>>2]|0;if(d|0){if(a[b+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+96>>2]=0}a[b+100>>0]=1;c[b+96>>2]=0;c[b+88>>2]=0;c[b+92>>2]=0;c[b>>2]=9560;d=c[b+32>>2]|0;if(!d){a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;b=b+28|0;c[b>>2]=0;return}if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0;a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;b=b+28|0;c[b>>2]=0;return}function di(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if((b|0)==0?1:(c[b+236>>2]|0)!=8){Ej(a,b);return}f=c[a+328>>2]|0;a:do if((f|0)>0){g=c[a+336>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0))break a}if((d|0)<(f|0)){c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+336>>2]|0)+(f+-1<<2)>>2]=b;c[a+328>>2]=f+-1}}while(0);d=c[b+188>>2]|0;if(d|0){g=c[a+68>>2]|0;g=qb[c[(c[g>>2]|0)+36>>2]&127](g)|0;Kb[c[(c[g>>2]|0)+40>>2]&127](g,d,c[a+24>>2]|0);g=c[a+68>>2]|0;Kb[c[(c[g>>2]|0)+12>>2]&127](g,d,c[a+24>>2]|0);c[b+188>>2]=0}f=c[a+8>>2]|0;if((f|0)<=0)return;g=c[a+16>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0)){h=17;break}}if((h|0)==17)return;if((d|0)>=(f|0))return;c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+16>>2]|0)+(f+-1<<2)>>2]=b;c[a+8>>2]=f+-1;return}function ei(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0;q=l;l=l+16|0;if((e|0)<=0){l=q;return}p=0;do{o=d+(p<<4)|0;n=+g[a+60>>2]*.5;i=c[a+68>>2]|0;h=+g[b+(p<<4)>>2];k=+g[b+(p<<4)+4>>2];m=+g[b+(p<<4)+8>>2];m=+C(+(h*h+k*k+m*m));j=c[a+64>>2]|0;do if(!(+g[b+(p<<4)+(i<<2)>>2]>m*+g[a+52>>2])){k=+g[b+(p<<4)+(j<<2)>>2];f=c[a+72>>2]|0;h=+g[b+(p<<4)+(f<<2)>>2];m=+C(+(k*k+h*h));if(m>1.1920928955078125e-07){m=+g[a+56>>2]/m;g[q+(j<<2)>>2]=k*m;g[q+(i<<2)>>2]=-n;h=h*m;break}else{g[q+(j<<2)>>2]=0.0;g[q+(i<<2)>>2]=-n;h=0.0;break}}else{g[q+(j<<2)>>2]=0.0;g[q+(i<<2)>>2]=n;h=0.0;f=c[a+72>>2]|0}while(0);g[q+(f<<2)>>2]=h;c[o>>2]=c[q>>2];c[o+4>>2]=c[q+4>>2];c[o+8>>2]=c[q+8>>2];c[o+12>>2]=c[q+12>>2];p=p+1|0}while((p|0)!=(e|0));l=q;return}function fi(b){b=b|0;var d=0;c[b>>2]=9204;d=c[b+160>>2]|0;if(d|0){if(a[b+164>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+160>>2]=0}a[b+164>>0]=1;c[b+160>>2]=0;c[b+152>>2]=0;c[b+156>>2]=0;d=c[b+136>>2]|0;if(d|0){if(a[b+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+136>>2]=0}a[b+140>>0]=1;c[b+136>>2]=0;c[b+128>>2]=0;c[b+132>>2]=0;d=c[b+116>>2]|0;if(d|0){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+116>>2]=0}a[b+120>>0]=1;c[b+116>>2]=0;c[b+108>>2]=0;c[b+112>>2]=0;d=c[b+96>>2]|0;if(d|0){if(a[b+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+96>>2]=0}a[b+100>>0]=1;c[b+96>>2]=0;c[b+88>>2]=0;c[b+92>>2]=0;d=c[b+76>>2]|0;if(!d){a[b+80>>0]=1;c[b+76>>2]=0;c[b+68>>2]=0;b=b+72|0;c[b>>2]=0;return}if(a[b+80>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+76>>2]=0;a[b+80>>0]=1;c[b+76>>2]=0;c[b+68>>2]=0;b=b+72|0;c[b>>2]=0;return}function gi(b){b=b|0;var d=0;c[b>>2]=5012;d=c[b+144>>2]|0;if(d|0){if(a[b+148>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+144>>2]=0}a[b+148>>0]=1;c[b+144>>2]=0;c[b+136>>2]=0;c[b+140>>2]=0;d=c[b+76>>2]|0;if(d|0){if(a[b+80>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+76>>2]=0}a[b+80>>0]=1;c[b+76>>2]=0;c[b+68>>2]=0;c[b+72>>2]=0;d=c[b+56>>2]|0;if(d|0){if(a[b+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+56>>2]=0}a[b+60>>0]=1;c[b+56>>2]=0;c[b+48>>2]=0;c[b+52>>2]=0;d=c[b+36>>2]|0;if(d|0){if(a[b+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+36>>2]=0}a[b+40>>0]=1;c[b+36>>2]=0;c[b+28>>2]=0;c[b+32>>2]=0;d=c[b+16>>2]|0;if(!d){a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}function hi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;o=(+g[a+32>>2]-+g[a+16>>2])*+g[a+108>>2]*.5;m=(+g[a+36>>2]-+g[a+20>>2])*+g[a+112>>2]*.5;k=(+g[a+40>>2]-+g[a+24>>2])*+g[a+116>>2]*.5;t=+B(+(+g[b>>2]));s=+B(+(+g[b+4>>2]));r=+B(+(+g[b+8>>2]));n=+B(+(+g[b+16>>2]));l=+B(+(+g[b+20>>2]));j=+B(+(+g[b+24>>2]));w=+B(+(+g[b+32>>2]));v=+B(+(+g[b+36>>2]));f=+B(+(+g[b+40>>2]));u=+g[b+48>>2];p=+g[b+52>>2];h=+g[b+56>>2];q=+gb[c[(c[a>>2]|0)+48>>2]&15](a);i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);f=o*w+m*v+k*f+ +gb[c[(c[a>>2]|0)+48>>2]&15](a);g[d>>2]=u-(o*t+m*s+k*r+q);g[d+4>>2]=p-(o*n+m*l+k*j+i);g[d+8>>2]=h-f;g[d+12>>2]=0.0;g[e>>2]=u+(o*t+m*s+k*r+q);g[e+4>>2]=p+(o*n+m*l+k*j+i);g[e+8>>2]=h+f;g[e+12>>2]=0.0;return}function ii(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;i=l;l=l+48|0;g=c[a+28>>2]|0;c[i+32>>2]=g;g=(c[a+20>>2]|0)-g|0;c[i+32+4>>2]=g;c[i+32+8>>2]=b;c[i+32+12>>2]=d;c[i>>2]=c[a+60>>2];c[i+4>>2]=i+32;c[i+8>>2]=2;b=aC(Ua(146,i|0)|0)|0;a:do if((g+d|0)!=(b|0)){e=i+32|0;f=2;g=g+d|0;while(1){if((b|0)<0)break;g=g-b|0;j=c[e+4>>2]|0;k=b>>>0>j>>>0;e=k?e+8|0:e;f=(k<<31>>31)+f|0;j=b-(k?j:0)|0;c[e>>2]=(c[e>>2]|0)+j;c[e+4>>2]=(c[e+4>>2]|0)-j;c[i+16>>2]=c[a+60>>2];c[i+16+4>>2]=e;c[i+16+8>>2]=f;b=aC(Ua(146,i+16|0)|0)|0;if((g|0)==(b|0)){h=3;break a}}c[a+16>>2]=0;c[a+28>>2]=0;c[a+20>>2]=0;c[a>>2]=c[a>>2]|32;if((f|0)==2)d=0;else d=d-(c[e+4>>2]|0)|0}else h=3;while(0);if((h|0)==3){k=c[a+44>>2]|0;c[a+16>>2]=k+(c[a+48>>2]|0);c[a+28>>2]=k;c[a+20>>2]=k}l=i;return d|0}function ji(b){b=b|0;var d=0;if((a[22712]|0)==0?Yy(22712)|0:0){if((a[22664]|0)==0?Yy(22664)|0:0){if((a[22672]|0)==0?Yy(22672)|0:0){c[5768]=1065353216;c[5769]=0;c[5770]=0;c[5771]=0;c[5772]=0;c[5773]=1065353216;c[5774]=0;c[5775]=0;c[5776]=0;c[5777]=0;c[5778]=1065353216;g[5779]=0.0}c[5752]=c[5768];c[5753]=c[5769];c[5754]=c[5770];c[5755]=c[5771];c[5756]=c[5772];c[5757]=c[5773];c[5758]=c[5774];c[5759]=c[5775];c[5760]=c[5776];c[5761]=c[5777];c[5762]=c[5778];c[5763]=c[5779];c[5764]=0;c[5765]=0;c[5766]=0;c[5767]=0}c[5804]=c[5752];c[5805]=c[5753];c[5806]=c[5754];c[5807]=c[5755];c[5808]=c[5756];c[5809]=c[5757];c[5810]=c[5758];c[5811]=c[5759];c[5812]=c[5760];c[5813]=c[5761];c[5814]=c[5762];c[5815]=c[5763];c[5816]=c[5764];c[5817]=c[5765];c[5818]=c[5766];c[5819]=c[5767]}d=c[b+8>>2]|0;if(!d){b=c[b>>2]|0;return ((b|0)==0?23216:b+60|0)|0}else return d+4|0;return 0}function ki(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=c[b>>2]|0;if((e|0)==(c[a+80>>2]|0)){f=1.0;return +f}if(c[e+204>>2]&4|0){f=1.0;return +f}if((+g[a+28>>2]-+g[a+12>>2])*+g[b+8>>2]+(+g[a+32>>2]-+g[a+16>>2])*+g[b+12>>2]+(+g[a+36>>2]-+g[a+20>>2])*+g[b+16>>2]>=-+g[a+84>>2]){f=1.0;return +f}c[a+4>>2]=c[b+40>>2];c[a+76>>2]=e;if(d){c[a+44>>2]=c[b+8>>2];c[a+44+4>>2]=c[b+8+4>>2];c[a+44+8>>2]=c[b+8+8>>2];c[a+44+12>>2]=c[b+8+12>>2]}else{k=+g[b+8>>2];j=+g[b+12>>2];i=+g[b+16>>2];h=k*+g[e+20>>2]+j*+g[e+24>>2]+i*+g[e+28>>2];f=k*+g[e+36>>2]+j*+g[e+40>>2]+i*+g[e+44>>2];g[a+44>>2]=+g[e+4>>2]*k+ +g[e+8>>2]*j+ +g[e+12>>2]*i;g[a+48>>2]=h;g[a+52>>2]=f;g[a+56>>2]=0.0}c[a+60>>2]=c[b+24>>2];c[a+60+4>>2]=c[b+24+4>>2];c[a+60+8>>2]=c[b+24+8>>2];c[a+60+12>>2]=c[b+24+12>>2];k=+g[b+40>>2];return +k}function li(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0;i=l;l=l+80|0;if((e|0)>0)f=0;else{l=i;return}do{g[d+(f<<4)+12>>2]=-999999984306749440.0;f=f+1|0}while((f|0)!=(e|0));h=i+32+4|0;f=0;do{j=b+(f<<4)|0;c[i+32>>2]=8016;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;g[i+32+20>>2]=-999999984306749440.0;c[i+32+24>>2]=c[j>>2];c[i+32+24+4>>2]=c[j+4>>2];c[i+32+24+8>>2]=c[j+8>>2];c[i+32+24+12>>2]=c[j+12>>2];c[i+16>>2]=1566444395;c[i+16+4>>2]=1566444395;c[i+16+8>>2]=1566444395;g[i+16+12>>2]=0.0;j=c[a+92>>2]|0;k=c[(c[j>>2]|0)+8>>2]|0;g[i>>2]=-999999984306749440.0;g[i+4>>2]=-999999984306749440.0;g[i+8>>2]=-999999984306749440.0;g[i+12>>2]=0.0;Nb[k&127](j,i+32|0,i,i+16|0);j=d+(f<<4)|0;c[j>>2]=c[h>>2];c[j+4>>2]=c[h+4>>2];c[j+8>>2]=c[h+8>>2];c[j+12>>2]=c[h+12>>2];f=f+1|0}while((f|0)<(e|0));l=i;return}function mi(b){b=b|0;var d=0,e=0,f=0,h=0;c[b+32>>2]=262144;h=c[b+4>>2]|0;if((h|0)<2383){if((c[b+8>>2]|0)<2383){c[6472]=(c[6472]|0)+1;d=ic(9551)|0;if(!d)f=0;else{c[(d+4+15&-16)+-4>>2]=d;f=d+4+15&-16}d=c[b+4>>2]|0;if((d|0)>0){e=0;do{c[f+(e<<2)>>2]=c[(c[b+12>>2]|0)+(e<<2)>>2];e=e+1|0}while((e|0)!=(d|0))}d=c[b+12>>2]|0;if(d|0){if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+12>>2]=0}a[b+16>>0]=1;c[b+12>>2]=f;c[b+8>>2]=2383;e=b+12|0}else e=b+12|0;d=h;do{c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)!=2383)}c[b+4>>2]=2383;e=0;do{h=(c[b+12>>2]|0)+(e<<2)|0;d=c[h>>2]|0;c[h>>2]=0;if(d|0)do{h=d;d=c[d+280>>2]|0;_H(h)}while((d|0)!=0);e=e+1|0}while((e|0)!=2383);g[b+20>>2]=.25;c[b+24>>2]=0;c[b+28>>2]=0;c[b+36>>2]=1;c[b+40>>2]=1;return}function ni(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=c[b+96>>2]|0;if((f|0)==(c[b+100>>2]|0)?(i=f|0?f<<1:1,(f|0)<(i|0)):0){if(!i)g=0;else{c[6472]=(c[6472]|0)+1;f=ic((i<<4|3)+16|0)|0;if(!f)g=0;else{c[(f+4+15&-16)+-4>>2]=f;g=f+4+15&-16}f=c[b+96>>2]|0}if((f|0)>0){h=0;do{j=g+(h<<4)|0;k=(c[b+104>>2]|0)+(h<<4)|0;c[j>>2]=c[k>>2];c[j+4>>2]=c[k+4>>2];c[j+8>>2]=c[k+8>>2];c[j+12>>2]=c[k+12>>2];h=h+1|0}while((h|0)!=(f|0))}f=c[b+104>>2]|0;if(f|0){if(a[b+108>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+104>>2]=0}a[b+108>>0]=1;c[b+104>>2]=g;c[b+100>>2]=i;f=c[b+96>>2]|0}k=(c[b+104>>2]|0)+(f<<4)|0;c[k>>2]=c[d>>2];c[k+4>>2]=c[d+4>>2];c[k+8>>2]=c[d+8>>2];c[k+12>>2]=c[d+12>>2];c[b+96>>2]=(c[b+96>>2]|0)+1;if(!e)return;jj(b);return}function oi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=c[d+4>>2]|0;f=c[b+24>>2]|0;if((f|0)<(i|0)){if((c[b+28>>2]|0)<(i|0)){if(!i){g=f;h=0}else{c[6472]=(c[6472]|0)+1;e=ic((i<<2|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}g=c[b+24>>2]|0;h=e}if((g|0)>0){e=0;do{c[h+(e<<2)>>2]=c[(c[b+32>>2]|0)+(e<<2)>>2];e=e+1|0}while((e|0)!=(g|0))}e=c[b+32>>2]|0;if(e|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=h;c[b+28>>2]=i;e=b+32|0}else e=b+32|0;do{c[(c[e>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)!=(i|0))}else e=b+32|0;c[b+24>>2]=i;e=c[e>>2]|0;if((i|0)<=0)return;f=0;do{c[e+(f<<2)>>2]=c[(c[d+12>>2]|0)+(f<<2)>>2];f=f+1|0}while((f|0)!=(i|0));return}function pi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=l;l=l+96|0;b=c[b>>2]|0;if((b|0)==(c[a+4>>2]|0)){l=d;return 1}e=c[a+12>>2]|0;if(!(sb[c[(c[e>>2]|0)+8>>2]&31](e,c[b+188>>2]|0)|0)){l=d;return 1}e=c[a+4>>2]|0;f=c[e+192>>2]|0;c[d+64>>2]=0;c[d+64+4>>2]=f;c[d+64+8>>2]=e;c[d+64+12>>2]=e+4;c[d+64+16>>2]=-1;c[d+64+20>>2]=-1;e=c[b+192>>2]|0;c[d+40>>2]=0;c[d+40+4>>2]=e;c[d+40+8>>2]=b;c[d+40+12>>2]=b+4;c[d+40+16>>2]=-1;c[d+40+20>>2]=-1;b=c[(c[a+8>>2]|0)+24>>2]|0;b=vb[c[(c[b>>2]|0)+8>>2]&31](b,d+64|0,d+40|0,0)|0;if(b|0){f=c[a+12>>2]|0;c[d+4>>2]=0;c[d+8>>2]=d+64;c[d+12>>2]=d+40;c[d>>2]=6168;c[d+32>>2]=f;Rb[c[(c[b>>2]|0)+8>>2]&31](b,d+64|0,d+40|0,(c[a+8>>2]|0)+28|0,d);Ab[c[c[b>>2]>>2]&511](b);f=c[(c[a+8>>2]|0)+24>>2]|0;Gb[c[(c[f>>2]|0)+60>>2]&127](f,b)}l=d;return 1}function qi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0,i=0,j=0,k=0;k=l;l=l+80|0;h=c[c[a>>2]>>2]|0;i=c[c[a+4>>2]>>2]|0;if(!(ub[c[(c[b>>2]|0)+24>>2]&63](b,h,i)|0)){l=k;return}f=c[h+192>>2]|0;c[k+56>>2]=0;c[k+56+4>>2]=f;c[k+56+8>>2]=h;c[k+56+12>>2]=h+4;c[k+56+16>>2]=-1;c[k+56+20>>2]=-1;f=c[i+192>>2]|0;c[k+32>>2]=0;c[k+32+4>>2]=f;c[k+32+8>>2]=i;c[k+32+12>>2]=i+4;c[k+32+16>>2]=-1;c[k+32+20>>2]=-1;f=c[a+8>>2]|0;if(!f){f=vb[c[(c[b>>2]|0)+8>>2]&31](b,k+56|0,k+32|0,0)|0;c[a+8>>2]=f;if(f|0)j=4}else j=4;if((j|0)==4){c[k>>2]=5796;c[k+4>>2]=0;c[k+8>>2]=k+56;c[k+12>>2]=k+32;if((c[d+8>>2]|0)!=1){e=+mb[c[(c[f>>2]|0)+12>>2]&15](f,h,i,d,k);if(+g[d+12>>2]>e)g[d+12>>2]=e}else Rb[c[(c[f>>2]|0)+8>>2]&31](f,k+56|0,k+32|0,d,k)}l=k;return}function ri(a,b,c,d,e,f,h,i,j,k,l){a=a|0;b=b|0;c=+c;d=+d;e=+e;f=+f;h=+h;i=+i;j=j|0;k=k|0;l=+l;var m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;x=+g[a>>2]*f+ +g[a+16>>2]*h+ +g[a+32>>2]*i;v=+g[a+4>>2]*f+ +g[a+20>>2]*h+ +g[a+36>>2]*i;t=+g[a+8>>2]*f+ +g[a+24>>2]*h+ +g[a+40>>2]*i;s=+g[b>>2]*f+ +g[b+16>>2]*h+ +g[b+32>>2]*i;q=+g[b+4>>2]*f+ +g[b+20>>2]*h+ +g[b+36>>2]*i;o=+g[b+8>>2]*f+ +g[b+24>>2]*h+ +g[b+40>>2]*i;w=+g[j+80>>2];u=+g[j+84>>2];p=+g[j+88>>2];r=+g[k+80>>2];m=+g[k+84>>2];n=+g[k+88>>2];p=x*(x<0.0?-w:w)+v*(v<0.0?-u:u)+t*(t<0.0?-p:p);n=s*(s<0.0?-r:r)+q*(q<0.0?-m:m)+o*(o<0.0?-n:n);o=+g[j+96>>2];m=+g[k+96>>2];m=(p>o?p:o)+(n>m?n:m);return !((c*f+d*h+e*i+ml)|0}function si(b){b=b|0;var d=0,e=0,f=0,g=0;c[b>>2]=8916;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+24>>2]=0;a[b+28>>0]=0;a[b+48>>0]=1;c[b+44>>2]=0;c[b+36>>2]=0;c[b+40>>2]=0;a[b+68>>0]=1;c[b+64>>2]=0;c[b+56>>2]=0;c[b+60>>2]=0;c[b+72>>2]=0;c[6472]=(c[6472]|0)+1;d=ic(51)|0;if(!d)f=0;else{c[(d+4+15&-16)+-4>>2]=d;f=d+4+15&-16}d=c[b+8>>2]|0;if((d|0)>0){e=0;do{g=c[b+16>>2]|0;c[f+(e<<4)>>2]=c[g+(e<<4)>>2];c[f+(e<<4)+4>>2]=c[g+(e<<4)+4>>2];c[f+(e<<4)+8>>2]=c[g+(e<<4)+8>>2];c[f+(e<<4)+12>>2]=c[g+(e<<4)+12>>2];e=e+1|0}while((e|0)!=(d|0))}d=c[b+16>>2]|0;if(!d){a[b+20>>0]=1;c[b+16>>2]=f;c[b+12>>2]=2;wf(b);return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;a[b+20>>0]=1;c[b+16>>2]=f;c[b+12>>2]=2;wf(b);return}function ti(a,b,d){a=a|0;b=b|0;d=d|0;do if(!((b|0)==32&(d|0)==32)){if((b|0)==32){if((d|0)<20){b=a+96|0;break}if((d+-21|0)>>>0<9){b=a+104|0;break}}else{if((b|0)<20&(d|0)==32){b=a+100|0;break}if((b+-21|0)>>>0<9&(d|0)==32){b=a+108|0;break}if((b|0)==8&(d|0)==8){b=a+60|0;break}if((b|0)==8&(d|0)==1){b=a+76|0;break}if((b|0)==1&(d|0)==8){b=a+80|0;break}}if(!(d|b)){b=a+72|0;break}if((b|0)<20&(d|0)==28){b=a+88|0;break}if((b|0)==28&(d|0)<20){b=a+84|0;break}if((b|0)<20){if((d|0)<20){b=a+32|0;break}if((d+-21|0)>>>0<9){b=a+36|0;break}}else{if((d|0)<20&(b+-21|0)>>>0<9){b=a+40|0;break}if((b|0)==31)if((d|0)==31){b=a+48|0;break}else{b=a+44|0;break}}if((d|0)==31){b=a+52|0;break}else{b=a+56|0;break}}else b=a+92|0;while(0);return c[b>>2]|0}function ui(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+488>>2]|0;a:do if((e|0)>0){g=c[b+496>>2]|0;f=0;while(1){if((c[g+(f<<2)>>2]|0)==(d|0))break;f=f+1|0;if((f|0)>=(e|0))break a}if((f|0)!=(e|0)){b=b+256|0;c[b>>2]=1;return}}while(0);if((e|0)==(c[b+492>>2]|0)?(h=e|0?e<<1:1,(e|0)<(h|0)):0){if(!h)f=0;else{c[6472]=(c[6472]|0)+1;e=ic((h<<2|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=c[b+488>>2]|0}if((e|0)>0){g=0;do{c[f+(g<<2)>>2]=c[(c[b+496>>2]|0)+(g<<2)>>2];g=g+1|0}while((g|0)!=(e|0))}g=c[b+496>>2]|0;if(g){if(a[b+500>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0);e=c[b+488>>2]|0}c[b+496>>2]=0}a[b+500>>0]=1;c[b+496>>2]=f;c[b+492>>2]=h}c[(c[b+496>>2]|0)+(e<<2)>>2]=d;c[b+488>>2]=e+1;b=b+256|0;c[b>>2]=1;return}function vi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0;if((e|0)>0)f=0;else return;do{g[d+(f<<4)+12>>2]=-999999984306749440.0;f=f+1|0}while((f|0)!=(e|0));r=0;do{i=+g[a+12>>2];n=+g[b+(r<<4)>>2]*i;j=+g[a+16>>2];p=+g[b+(r<<4)+4>>2]*j;k=+g[a+20>>2];o=+g[b+(r<<4)+8>>2]*k;f=c[a+96>>2]|0;if((f|0)>0){l=c[a+104>>2]|0;m=0;h=-3402823466385288598117041.0e14;q=-1;do{s=n*+g[l+(m<<4)>>2]+p*+g[l+(m<<4)+4>>2]+o*+g[l+(m<<4)+8>>2];t=s>h;q=t?m:q;h=t?s:h;m=m+1|0}while((m|0)!=(f|0));p=+g[l+(q<<4)+4>>2]*j;s=+g[l+(q<<4)+8>>2]*k;g[d+(r<<4)>>2]=+g[l+(q<<4)>>2]*i;g[d+(r<<4)+4>>2]=p;g[d+(r<<4)+8>>2]=s}else h=-999999984306749440.0;g[d+(r<<4)+12>>2]=h;r=r+1|0}while((r|0)!=(e|0));return}function wi(b){b=b|0;var d=0;d=js(616)|0;c[d+164>>2]=1065353216;c[d+168>>2]=1065353216;c[d+172>>2]=1065353216;g[d+176>>2]=0.0;c[d+180>>2]=0;g[d+184>>2]=999999984306749440.0;c[d+188>>2]=0;c[d+188+4>>2]=0;c[d+188+8>>2]=0;c[d+188+12>>2]=0;c[d+204>>2]=1;c[d+208>>2]=-1;c[d+212>>2]=-1;c[d+216>>2]=1;g[d+220>>2]=0.0;g[d+224>>2]=.5;g[d+228>>2]=0.0;g[d+232>>2]=0.0;c[d+236>>2]=1;c[d+240>>2]=0;g[d+244>>2]=1.0;c[d+248>>2]=0;c[d+248+4>>2]=0;c[d+248+8>>2]=0;c[d+248+12>>2]=0;c[d+4>>2]=1065353216;c[d+8>>2]=0;c[d+8+4>>2]=0;c[d+8+8>>2]=0;c[d+8+12>>2]=0;c[d+24>>2]=1065353216;c[d+28>>2]=0;c[d+28+4>>2]=0;c[d+28+8>>2]=0;c[d+28+12>>2]=0;c[d+44>>2]=1065353216;c[d+48>>2]=0;c[d+48+4>>2]=0;c[d+48+8>>2]=0;c[d+48+12>>2]=0;c[d+48+16>>2]=0;c[d>>2]=4252;a[d+500>>0]=1;c[d+496>>2]=0;c[d+488>>2]=0;c[d+492>>2]=0;xd(d,b);return d|0}function xi(a,b,d,e,f,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var m=0,n=0,o=0;o=l;l=l+16|0;bj(13004);Vb[c[(c[a>>2]|0)+32>>2]&1](a,b,d,e,f,h,i,j,k);n=c[a+184>>2]|0;m=c[j+20>>2]|0;m=(n|0)>(m|0)?n:m;if((m|0)>0){n=0;do{+pb[c[(c[a>>2]|0)+40>>2]&3](a,n,b,d,e,f,h,i,j,k);n=n+1|0}while((n|0)<(m|0))}m=c[2405]|0;a=(c[m+16>>2]|0)+-1|0;c[m+16>>2]=a;if(a|0){l=o;return 0.0}do if(c[m+4>>2]|0){Za(o|0,0)|0;a=c[6471]|0;g[m+8>>2]=+g[m+8>>2]+ +(((c[o+4>>2]|0)-(c[a+4>>2]|0)+(((c[o>>2]|0)-(c[a>>2]|0)|0)*1e6|0)-(c[m+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[m+16>>2]|0)){m=c[2405]|0;break}else{l=o;return 0.0}}while(0);c[2405]=c[m+20>>2];l=o;return 0.0}function yi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+232>>2]|0;a:do if((f|0)>0){g=c[a+240>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0))break a}if((d|0)<(f|0)){c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+240>>2]|0)+(f+-1<<2)>>2]=b;c[a+232>>2]=f+-1}}while(0);d=c[b+188>>2]|0;if(d|0){g=c[a+68>>2]|0;g=qb[c[(c[g>>2]|0)+36>>2]&127](g)|0;Kb[c[(c[g>>2]|0)+40>>2]&127](g,d,c[a+24>>2]|0);g=c[a+68>>2]|0;Kb[c[(c[g>>2]|0)+12>>2]&127](g,d,c[a+24>>2]|0);c[b+188>>2]=0}f=c[a+8>>2]|0;if((f|0)<=0)return;g=c[a+16>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0)){h=15;break}}if((h|0)==15)return;if((d|0)>=(f|0))return;c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+16>>2]|0)+(f+-1<<2)>>2]=b;c[a+8>>2]=f+-1;return}function zi(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+328>>2]|0;a:do if((f|0)>0){g=c[a+336>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0))break a}if((d|0)<(f|0)){c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+336>>2]|0)+(f+-1<<2)>>2]=b;c[a+328>>2]=f+-1}}while(0);d=c[b+188>>2]|0;if(d|0){g=c[a+68>>2]|0;g=qb[c[(c[g>>2]|0)+36>>2]&127](g)|0;Kb[c[(c[g>>2]|0)+40>>2]&127](g,d,c[a+24>>2]|0);g=c[a+68>>2]|0;Kb[c[(c[g>>2]|0)+12>>2]&127](g,d,c[a+24>>2]|0);c[b+188>>2]=0}f=c[a+8>>2]|0;if((f|0)<=0)return;g=c[a+16>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0)){h=15;break}}if((h|0)==15)return;if((d|0)>=(f|0))return;c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+16>>2]|0)+(f+-1<<2)>>2]=b;c[a+8>>2]=f+-1;return}function Ai(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[d>>2]|0;d=c[b+268>>2]|0;a:do if((d|0)>0){f=c[b+276>>2]|0;e=0;while(1){if((c[f+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(d|0))break a}if((e|0)!=(d|0))return}while(0);if((d|0)==(c[b+272>>2]|0)?(h=d|0?d<<1:1,(d|0)<(h|0)):0){if(!h)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((h<<2|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[b+268>>2]|0}if((d|0)>0){f=0;do{c[e+(f<<2)>>2]=c[(c[b+276>>2]|0)+(f<<2)>>2];f=f+1|0}while((f|0)!=(d|0))}f=c[b+276>>2]|0;if(f){if(a[b+280>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0);d=c[b+268>>2]|0}c[b+276>>2]=0}a[b+280>>0]=1;c[b+276>>2]=e;c[b+272>>2]=h}c[(c[b+276>>2]|0)+(d<<2)>>2]=g;c[b+268>>2]=d+1;return}function Bi(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;do if(!(GC(b,c[d+8>>2]|0)|0)){if(!(GC(b,c[d>>2]|0)|0)){h=c[b+8>>2]|0;Rb[c[(c[h>>2]|0)+24>>2]&31](h,d,e,f,g);break}if((c[d+16>>2]|0)!=(e|0)?(c[d+20>>2]|0)!=(e|0):0){c[d+32>>2]=f;if((c[d+44>>2]|0)==4)break;a[d+52>>0]=0;a[d+53>>0]=0;b=c[b+8>>2]|0;Tb[c[(c[b>>2]|0)+20>>2]&7](b,d,e,e,1,g);if(a[d+53>>0]|0)if(!(a[d+52>>0]|0)){f=3;h=11}else f=3;else{f=4;h=11}if((h|0)==11){c[d+20>>2]=e;c[d+40>>2]=(c[d+40>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1}c[d+44>>2]=f;break}if((f|0)==1)c[d+32>>2]=1}else Kr(d,e,f);while(0);return}function Ci(b){b=b|0;var d=0,e=0;d=c[b+92>>2]|0;if(d|0){if(a[b+96>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+92>>2]=0}a[b+96>>0]=1;c[b+92>>2]=0;c[b+84>>2]=0;c[b+88>>2]=0;d=c[b+64>>2]|0;if(d|0)do{c[b+64>>2]=c[d+8>>2];e=c[d>>2]|0;if(e|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);d=c[b+64>>2]|0}while((d|0)!=0);d=c[b+48>>2]|0;if(d|0)do{c[b+48>>2]=c[d+8>>2];e=c[d>>2]|0;if(e|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);d=c[b+48>>2]|0}while((d|0)!=0);d=c[b+32>>2]|0;if(!d)return;do{c[b+32>>2]=c[d+8>>2];e=c[d>>2]|0;if(e|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);d=c[b+32>>2]|0}while((d|0)!=0);return}function Di(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=c[d>>2]|0;i=sb[c[(c[i>>2]|0)+56>>2]&31](i,28)|0;j=(a[b+4>>0]|0)==0;h=c[b+8>>2]|0;g=c[b+12>>2]|0;b=c[d>>2]|0;c[i+4>>2]=b;c[i>>2]=5672;a[i+8>>0]=0;c[i+12>>2]=0;if(j){a[i+16>>0]=0;c[i+20>>2]=h;c[i+24>>2]=g;if(!(ub[c[(c[b>>2]|0)+24>>2]&63](b,c[e+8>>2]|0,c[f+8>>2]|0)|0))return i|0;j=c[i+4>>2]|0;c[i+12>>2]=ub[c[(c[j>>2]|0)+12>>2]&63](j,c[e+8>>2]|0,c[f+8>>2]|0)|0;a[i+8>>0]=1;return i|0}else{a[i+16>>0]=1;c[i+20>>2]=h;c[i+24>>2]=g;if(!(ub[c[(c[b>>2]|0)+24>>2]&63](b,c[f+8>>2]|0,c[e+8>>2]|0)|0))return i|0;j=c[i+4>>2]|0;c[i+12>>2]=ub[c[(c[j>>2]|0)+12>>2]&63](j,c[f+8>>2]|0,c[e+8>>2]|0)|0;a[i+8>>0]=1;return i|0}return 0}function Ei(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;if(GC(b,c[d+8>>2]|0)|0)al(d,e,f,g);else{i=a[d+52>>0]|0;j=a[d+53>>0]|0;k=c[b+12>>2]|0;a[d+52>>0]=0;a[d+53>>0]=0;Cn(b+16|0,d,e,f,g,h);a:do if((k|0)>1){l=b+24|0;do{if(a[d+54>>0]|0)break a;if(!(a[d+52>>0]|0)){if(a[d+53>>0]|0?(c[b+8>>2]&1|0)==0:0)break a}else{if((c[d+24>>2]|0)==1)break a;if(!(c[b+8>>2]&2))break a}a[d+52>>0]=0;a[d+53>>0]=0;Cn(l,d,e,f,g,h);l=l+8|0}while(l>>>0<(b+16+(k<<3)|0)>>>0)}while(0);a[d+52>>0]=i;a[d+53>>0]=j}return}function Fi(){var b=0;b=js(284)|0;c[b+164>>2]=1065353216;c[b+168>>2]=1065353216;c[b+172>>2]=1065353216;g[b+176>>2]=0.0;c[b+180>>2]=0;g[b+184>>2]=999999984306749440.0;c[b+188>>2]=0;c[b+188+4>>2]=0;c[b+188+8>>2]=0;c[b+188+12>>2]=0;c[b+204>>2]=1;c[b+208>>2]=-1;c[b+212>>2]=-1;c[b+216>>2]=1;g[b+220>>2]=0.0;g[b+224>>2]=.5;g[b+228>>2]=0.0;g[b+232>>2]=0.0;c[b+240>>2]=0;g[b+244>>2]=1.0;c[b+248>>2]=0;c[b+248+4>>2]=0;c[b+248+8>>2]=0;c[b+248+12>>2]=0;c[b+4>>2]=1065353216;c[b+8>>2]=0;c[b+8+4>>2]=0;c[b+8+8>>2]=0;c[b+8+12>>2]=0;c[b+24>>2]=1065353216;c[b+28>>2]=0;c[b+28+4>>2]=0;c[b+28+8>>2]=0;c[b+28+12>>2]=0;c[b+44>>2]=1065353216;c[b+48>>2]=0;c[b+48+4>>2]=0;c[b+48+8>>2]=0;c[b+48+12>>2]=0;c[b+48+16>>2]=0;c[b>>2]=5236;a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;c[b+272>>2]=0;c[b+236>>2]=4;return b|0}function Gi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=(c[b>>2]|0)+1794895138|0;f=uA(c[b+8>>2]|0,n)|0;l=uA(c[b+12>>2]|0,n)|0;m=uA(c[b+16>>2]|0,n)|0;a:do if((f>>>0>>2>>>0?l>>>0<(d-(f<<2)|0)>>>0&m>>>0<(d-(f<<2)|0)>>>0:0)?((m|l)&3|0)==0:0){k=0;while(1){i=f>>>1;j=k+i|0;g=uA(c[b+((j<<1)+(l>>>2)<<2)>>2]|0,n)|0;h=uA(c[b+((j<<1)+(l>>>2)+1<<2)>>2]|0,n)|0;if(!(h>>>0>>0&g>>>0<(d-h|0)>>>0)){f=0;break a}if(a[b+(h+g)>>0]|0){f=0;break a}g=Eo(e,b+h|0)|0;if(!g)break;if((f|0)==1){f=0;break a}else{k=(g|0)<0?k:j;f=(g|0)<0?i:f-i|0}}g=uA(c[b+((j<<1)+(m>>>2)<<2)>>2]|0,n)|0;f=uA(c[b+((j<<1)+(m>>>2)+1<<2)>>2]|0,n)|0;if(f>>>0>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function Hi(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0,m=0;f=l;l=l+48|0;if((c[b+136>>2]|0)<=0){l=f;return}e=0;do{m=c[b+144>>2]|0;c[f+32>>2]=(a[m+(e*284|0)+84>>0]|0)==0?1065353216:0;c[f+32+4>>2]=0;c[f+32+8>>2]=1065353216;g[f+32+12>>2]=0.0;k=m+(e*284|0)+140|0;c[f+16>>2]=c[k>>2];c[f+16+4>>2]=c[k+4>>2];c[f+16+8>>2]=c[k+8>>2];c[f+16+12>>2]=c[k+12>>2];k=c[b+120>>2]|0;h=c[(c[d>>2]|0)+8>>2]|0;j=+g[m+(e*284|0)+108+(k<<2)>>2]+ +g[f+16+4>>2];i=+g[m+(e*284|0)+124+(k<<2)>>2]+ +g[f+16+8>>2];g[f>>2]=+g[m+(e*284|0)+92+(k<<2)>>2]+ +g[f+16>>2];g[f+4>>2]=j;g[f+8>>2]=i;g[f+12>>2]=0.0;Nb[h&127](d,f+16|0,f,f+32|0);Nb[c[(c[d>>2]|0)+8>>2]&127](d,f+16|0,(c[b+144>>2]|0)+(e*284|0)+16|0,f+32|0);e=e+1|0}while((e|0)<(c[b+136>>2]|0));l=f;return}function Ii(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;switch(b|0){case 2:{if((e|0)<1){g[a+232>>2]=d;c[a+300>>2]=c[a+300>>2]|512;return}if((e|0)<3){g[a+264>>2]=d;c[a+300>>2]=c[a+300>>2]|32;return}if((e|0)==3){g[a+248>>2]=d;c[a+300>>2]=c[a+300>>2]|2048;return}if((e|0)>=6)return;g[a+280>>2]=d;c[a+300>>2]=c[a+300>>2]|128;return}case 3:{if((e|0)<1){g[a+212>>2]=d;c[a+300>>2]=c[a+300>>2]|1;return}if((e|0)!=3)return;g[a+228>>2]=d;c[a+300>>2]=c[a+300>>2]|4;return}case 4:{if((e|0)<1){g[a+244>>2]=d;c[a+300>>2]=c[a+300>>2]|256;return}if((e|0)<3){g[a+276>>2]=d;c[a+300>>2]=c[a+300>>2]|16;return}if((e|0)==3){g[a+260>>2]=d;c[a+300>>2]=c[a+300>>2]|1024;return}if((e|0)>=6)return;g[a+292>>2]=d;c[a+300>>2]=c[a+300>>2]|64;return}default:return}}function Ji(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0;e=l;l=l+96|0;c[e+32>>2]=1065353216;c[e+32+4>>2]=0;c[e+32+4+4>>2]=0;c[e+32+4+8>>2]=0;c[e+32+4+12>>2]=0;c[e+32+20>>2]=1065353216;c[e+32+24>>2]=0;c[e+32+24+4>>2]=0;c[e+32+24+8>>2]=0;c[e+32+24+12>>2]=0;c[e+32+40>>2]=1065353216;k=e+32+44|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,e+32|0,e+16|0,e);i=(+g[e>>2]-+g[e+16>>2])*.5;h=(+g[e+4>>2]-+g[e+16+4>>2])*.5;j=(+g[e+8>>2]-+g[e+16+8>>2])*.5;f=+gb[c[(c[a>>2]|0)+48>>2]&15](a);g[d>>2]=b*.0833333283662796*((h+f)*2.0*(h+f)*2.0+(j+f)*2.0*(j+f)*2.0);g[d+4>>2]=b*.0833333283662796*((i+f)*2.0*(i+f)*2.0+(j+f)*2.0*(j+f)*2.0);g[d+8>>2]=b*.0833333283662796*((i+f)*2.0*(i+f)*2.0+(h+f)*2.0*(h+f)*2.0);g[d+12>>2]=0.0;l=e;return}function Ki(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0;l=c[b+720>>2]|0;a:do if(h?(k=c[b+732>>2]|0,(k|0)>0):0){h=c[b+740>>2]|0;j=0;while(1){i=c[h+(j*52|0)+8>>2]|0;if((i|0)==(l+(d*104|0)|0)?(c[h+(j*52|0)+12>>2]|0)==(l+(e*104|0)|0):0){h=10;break}if((i|0)==(l+(e*104|0)|0)?(c[h+(j*52|0)+12>>2]|0)==(l+(d*104|0)|0):0){h=10;break}j=j+1|0;if((j|0)>=(k|0))break a}if((h|0)==10)return}while(0);Rh(b,f);f=(c[b+732>>2]|0)+-1|0;k=c[b+740>>2]|0;c[k+(f*52|0)+8>>2]=l+(d*104|0);c[k+(f*52|0)+12>>2]=l+(e*104|0);o=+g[l+(d*104|0)+8>>2]-+g[l+(e*104|0)+8>>2];n=+g[l+(d*104|0)+12>>2]-+g[l+(e*104|0)+12>>2];m=+g[l+(d*104|0)+16>>2]-+g[l+(e*104|0)+16>>2];g[k+(f*52|0)+16>>2]=+C(+(o*o+n*n+m*m));a[b+924>>0]=1;return}function Li(){var b=0;b=Bs()|0;c[b>>2]=1025;c[b+116>>2]=0;a[b+120>>0]=0;c[b+124>>2]=0;c[b+124+4>>2]=0;c[b+124+8>>2]=0;c[b+124+12>>2]=0;c[b+124+16>>2]=0;c[b+124+20>>2]=0;c[b+124+24>>2]=0;c[b+124+28>>2]=0;c[b+300>>2]=0;a[b+304>>0]=0;c[b+308>>2]=0;c[b+308+4>>2]=0;c[b+308+8>>2]=0;c[b+308+12>>2]=0;c[b+308+16>>2]=0;c[b+308+20>>2]=0;c[b+308+24>>2]=0;c[b+308+28>>2]=0;c[b+484>>2]=0;a[b+488>>0]=0;c[b+492>>2]=0;c[b+492+4>>2]=0;c[b+492+8>>2]=0;c[b+492+12>>2]=0;c[b+492+16>>2]=0;c[b+492+20>>2]=0;c[b+492+24>>2]=0;c[b+492+28>>2]=0;c[b+668>>2]=0;a[b+672>>0]=0;c[b+676>>2]=0;c[b+676+4>>2]=0;c[b+676+8>>2]=0;c[b+676+12>>2]=0;c[b+676+16>>2]=0;c[b+676+20>>2]=0;c[b+676+24>>2]=0;c[b+676+28>>2]=0;c[b+740>>2]=0;c[b+744>>2]=0;c[b+748>>2]=0;c[b+768>>2]=0;return b|0}function Mi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;if(!(a[b+84>>0]|0)){c[b+32>>2]=c[b+204>>2];g[b+272>>2]=0.0;o=-+g[b+56>>2];p=-+g[b+60>>2];g[b>>2]=-+g[b+52>>2];g[b+4>>2]=o;g[b+8>>2]=p;g[b+12>>2]=0.0;p=1.0;b=b+268|0;g[b>>2]=p;return}f=+g[b>>2];k=+g[b+4>>2];l=+g[b+8>>2];m=f*+g[b+52>>2]+k*+g[b+56>>2]+l*+g[b+60>>2];n=+g[b+16>>2]-+g[d+52>>2];p=+g[b+20>>2]-+g[d+56>>2];o=+g[b+24>>2]-+g[d+60>>2];h=+g[d+332>>2];i=+g[d+336>>2];j=+g[d+328>>2];if(!(m>=-.10000000149011612)){g[b+272>>2]=-1.0/m*(f*(h*o-p*i+ +g[d+312>>2])+k*(n*i-o*j+ +g[d+316>>2])+l*(p*j-n*h+ +g[d+320>>2]));p=-1.0/m;b=b+268|0;g[b>>2]=p;return}else{g[b+272>>2]=0.0;p=10.0;b=b+268|0;g[b>>2]=p;return}}function Ni(a,b,d,e,f,h,i,j,k,m){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0;n=l;l=l+16|0;bj(13067);+ob[c[(c[a>>2]|0)+44>>2]&3](a,b,d,e,f,h,i,j,k);+ob[c[(c[a>>2]|0)+48>>2]&3](a,b,d,e,f,h,i,j,k);+lb[c[(c[a>>2]|0)+36>>2]&1](a,b,d,j);m=c[2405]|0;a=(c[m+16>>2]|0)+-1|0;c[m+16>>2]=a;if(a|0){l=n;return 0.0}do if(c[m+4>>2]|0){Za(n|0,0)|0;a=c[6471]|0;g[m+8>>2]=+g[m+8>>2]+ +(((c[n+4>>2]|0)-(c[a+4>>2]|0)+(((c[n>>2]|0)-(c[a>>2]|0)|0)*1e6|0)-(c[m+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[m+16>>2]|0)){m=c[2405]|0;break}else{l=n;return 0.0}}while(0);c[2405]=c[m+20>>2];l=n;return 0.0}function Oi(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0;e=l;l=l+96|0;j=+g[c>>2];k=+g[c+4>>2];m=+g[c+8>>2];kq(e+80|0,j,k,m,+Sx(j,k,m,+g[b>>2],+g[b+4>>2],+g[b+8>>2]));m=+g[e+80>>2];k=+g[e+80+4>>2];j=+g[e+80+8>>2];Jp(e+64|0,+g[b>>2],+g[b+4>>2],+g[b+8>>2],m,k,j);Xo(e+48|0,+g[c>>2],+g[c+4>>2],+g[c+8>>2],+g[b>>2],+g[b+4>>2],+g[b+8>>2]);i=+g[e+48>>2];h=+g[e+48+4>>2];f=+g[e+48+8>>2];n=+TH(d);kq(e+16|0,+g[e+64>>2],+g[e+64+4>>2],+g[e+64+8>>2],n);Hp(e+32|0,m,k,j,+g[e+16>>2],+g[e+16+4>>2],+g[e+16+8>>2]);kq(e,i,h,f,+SH(d));Hp(a,+g[e+32>>2],+g[e+32+4>>2],+g[e+32+8>>2],+g[e>>2],+g[e+4>>2],+g[e+8>>2]);l=e;return}function Pi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0;e=c[a+4>>2]|0;if(e|0)Zk(e,b,d);e=c[a>>2]|0;if(!e)return;m=+g[b>>2];k=+g[e+128>>2];l=+g[b+4>>2];j=+g[b+8>>2];f=+g[d+4>>2];o=+g[d+8>>2];n=+g[d>>2];i=+g[e+180>>2]*(j*f-l*o)+ +g[e+184>>2]*(m*o-j*n)+(l*n-m*f)*+g[e+188>>2];h=(j*f-l*o)*+g[e+196>>2]+(m*o-j*n)*+g[e+200>>2]+(l*n-m*f)*+g[e+204>>2];f=(j*f-l*o)*+g[e+212>>2]+(m*o-j*n)*+g[e+216>>2]+(l*n-m*f)*+g[e+220>>2];g[e+276>>2]=m*k+ +g[e+276>>2];g[e+280>>2]=k*l+ +g[e+280>>2];g[e+284>>2]=k*j+ +g[e+284>>2];g[e+292>>2]=i+ +g[e+292>>2];g[e+296>>2]=h+ +g[e+296>>2];g[e+300>>2]=f+ +g[e+300>>2];c[e+312>>2]=(c[e+312>>2]|0)+1;return}function Qi(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=c[b+212>>2]|0;if((f|0)==(c[b+216>>2]|0)?(i=f|0?f<<1:1,(f|0)<(i|0)):0){if(!i)g=0;else{c[6472]=(c[6472]|0)+1;f=ic((i<<2|3)+16|0)|0;if(!f)g=0;else{c[(f+4+15&-16)+-4>>2]=f;g=f+4+15&-16}f=c[b+212>>2]|0}if((f|0)>0){h=0;do{c[g+(h<<2)>>2]=c[(c[b+220>>2]|0)+(h<<2)>>2];h=h+1|0}while((h|0)!=(f|0))}h=c[b+220>>2]|0;if(h){if(a[b+224>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);f=c[b+212>>2]|0}c[b+220>>2]=0}a[b+224>>0]=1;c[b+220>>2]=g;c[b+216>>2]=i}c[(c[b+220>>2]|0)+(f<<2)>>2]=d;c[b+212>>2]=f+1;if(!e)return;ui(c[d+28>>2]|0,d);ui(c[d+32>>2]|0,d);return}function Ri(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;v=+g[a+552>>2];u=+g[a+568>>2];t=+g[a+584>>2];s=+g[b>>2];r=+g[b+4>>2];q=+g[b+8>>2];o=+g[b+16>>2];n=+g[b+20>>2];m=+g[b+24>>2];k=+g[b+32>>2];i=+g[b+36>>2];f=+g[b+40>>2];j=+g[a+556>>2];h=+g[a+572>>2];e=+g[a+588>>2];x=+g[a+620>>2];w=+g[a+636>>2];d=+g[a+652>>2];p=x*+g[c>>2]+w*+g[c+4>>2]+d*+g[c+8>>2];l=x*+g[c+16>>2]+w*+g[c+20>>2]+d*+g[c+24>>2];d=x*+g[c+32>>2]+w*+g[c+36>>2]+d*+g[c+40>>2];d=+K(+((v*s+u*r+t*q)*p+(v*o+u*n+t*m)*l+(v*k+u*i+t*f)*d),+((s*j+r*h+q*e)*p+(o*j+n*h+m*e)*l+(k*j+i*h+f*e)*d));return +(d*+g[a+732>>2])}function Si(b){b=b|0;var d=0,e=0,f=0,h=0,i=0;i=l;l=l+16|0;bj(15163);d=c[b+8>>2]|0;if((d|0)>0){f=0;do{e=c[(c[b+16>>2]|0)+(f<<2)>>2]|0;if(!(a[b+76>>0]|0))switch(c[e+216>>2]|0){case 2:case 5:break;default:h=11}else h=11;if((h|0)==11){h=0;pf(b,e);d=c[b+8>>2]|0}f=f+1|0}while((f|0)<(d|0))}d=c[2405]|0;h=(c[d+16>>2]|0)+-1|0;c[d+16>>2]=h;if(h|0){l=i;return}do if(c[d+4>>2]|0){Za(i|0,0)|0;h=c[6471]|0;g[d+8>>2]=+g[d+8>>2]+ +(((c[i+4>>2]|0)-(c[h+4>>2]|0)+(((c[i>>2]|0)-(c[h>>2]|0)|0)*1e6|0)-(c[d+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[d+16>>2]|0)){d=c[2405]|0;break}else{l=i;return}}while(0);c[2405]=c[d+20>>2];l=i;return}function Ti(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=c[a+8>>2]|0;if((d|0)>0){f=0;do{e=c[(c[a+16>>2]|0)+(f<<2)>>2]|0;if(c[e+236>>2]&2){g=qb[c[(c[e>>2]|0)+16>>2]&127](e)|0;g=ub[c[(c[b>>2]|0)+16>>2]&63](b,g,1)|0;d=ub[c[(c[e>>2]|0)+20>>2]&63](e,c[g+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,g,d,1497645650,e);d=c[a+8>>2]|0}f=f+1|0}while((f|0)<(d|0))}if((c[a+212>>2]|0)<=0)return;d=0;do{g=c[(c[a+220>>2]|0)+(d<<2)>>2]|0;e=qb[c[(c[g>>2]|0)+36>>2]&127](g)|0;e=ub[c[(c[b>>2]|0)+16>>2]&63](b,e,1)|0;f=ub[c[(c[g>>2]|0)+40>>2]&63](g,c[e+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,f,1397641027,g);d=d+1|0}while((d|0)<(c[a+212>>2]|0));return}function Ui(a){a=a|0;var b=0.0,d=0,e=0,f=0,h=0;e=l;l=l+32|0;c[a+32>>2]=1566444395;c[a+36>>2]=1566444395;c[a+40>>2]=1566444395;g[a+44>>2]=0.0;c[a+48>>2]=-581039253;c[a+52>>2]=-581039253;c[a+56>>2]=-581039253;g[a+60>>2]=0.0;if((c[a+16>>2]|0)<=0){l=e;return}d=0;do{f=c[a+24>>2]|0;h=c[f+(d*80|0)+64>>2]|0;Nb[c[(c[h>>2]|0)+8>>2]&127](h,f+(d*80|0)|0,e+16|0,e);b=+g[e+16>>2];if(+g[a+32>>2]>b)g[a+32>>2]=b;b=+g[e>>2];if(+g[a+48>>2]>2]=b;b=+g[e+16+4>>2];if(+g[a+36>>2]>b)g[a+36>>2]=b;b=+g[e+4>>2];if(+g[a+52>>2]>2]=b;b=+g[e+16+8>>2];if(+g[a+40>>2]>b)g[a+40>>2]=b;b=+g[e+8>>2];if(+g[a+56>>2]>2]=b;d=d+1|0}while((d|0)<(c[a+16>>2]|0));l=e;return}function Vi(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=l;l=l+64|0;g=c[d>>2]|0;h=d+(c[g+-8>>2]|0)|0;g=c[g+-4>>2]|0;c[i>>2]=e;c[i+4>>2]=d;c[i+8>>2]=2776;e=GC(g,e)|0;d=i+12|0;f=d+40|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));b[i+12+40>>1]=0;a[i+12+42>>0]=0;a:do if(e){c[i+48>>2]=1;Tb[c[(c[g>>2]|0)+20>>2]&7](g,i,h,h,1,0);e=(c[i+24>>2]|0)==1?h:0}else{Rb[c[(c[g>>2]|0)+24>>2]&31](g,i,h,1,0);switch(c[i+36>>2]|0){case 0:{e=((c[i+40>>2]|0)==1?(c[i+28>>2]|0)==1:0)&(c[i+32>>2]|0)==1?c[i+20>>2]|0:0;break a}case 1:break;default:{e=0;break a}}if((c[i+24>>2]|0)!=1?!(((c[i+40>>2]|0)==0?(c[i+28>>2]|0)==1:0)&(c[i+32>>2]|0)==1):0){e=0;break}e=c[i+16>>2]|0}while(0);l=i;return e|0}function Wi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+12>>2]|0;if(!e)return;if(!(a[b+8>>0]|0))return;f=c[d+4>>2]|0;if((f|0)==(c[d+8>>2]|0)?(h=f|0?f<<1:1,(f|0)<(h|0)):0){if(!h){e=f;f=0}else{c[6472]=(c[6472]|0)+1;e=ic((h<<2|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=c[d+4>>2]|0}if((e|0)>0){g=0;do{c[f+(g<<2)>>2]=c[(c[d+12>>2]|0)+(g<<2)>>2];g=g+1|0}while((g|0)!=(e|0))}g=c[d+12>>2]|0;if(g){if(a[d+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0);e=c[d+4>>2]|0}c[d+12>>2]=0}a[d+16>>0]=1;c[d+12>>2]=f;c[d+8>>2]=h;f=e;e=c[b+12>>2]|0}c[(c[d+12>>2]|0)+(f<<2)>>2]=e;c[d+4>>2]=f+1;return}function Xi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+20>>2]|0;if(!e)return;if(!(a[b+16>>0]|0))return;f=c[d+4>>2]|0;if((f|0)==(c[d+8>>2]|0)?(h=f|0?f<<1:1,(f|0)<(h|0)):0){if(!h){e=f;f=0}else{c[6472]=(c[6472]|0)+1;e=ic((h<<2|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=c[d+4>>2]|0}if((e|0)>0){g=0;do{c[f+(g<<2)>>2]=c[(c[d+12>>2]|0)+(g<<2)>>2];g=g+1|0}while((g|0)!=(e|0))}g=c[d+12>>2]|0;if(g){if(a[d+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0);e=c[d+4>>2]|0}c[d+12>>2]=0}a[d+16>>0]=1;c[d+12>>2]=f;c[d+8>>2]=h;f=e;e=c[b+20>>2]|0}c[(c[d+12>>2]|0)+(f<<2)>>2]=e;c[d+4>>2]=f+1;return}function Yi(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0;e=l;l=l+96|0;i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);c[e+32>>2]=1065353216;c[e+32+4>>2]=0;c[e+32+4+4>>2]=0;c[e+32+4+8>>2]=0;c[e+32+4+12>>2]=0;c[e+32+20>>2]=1065353216;c[e+32+24>>2]=0;c[e+32+24+4>>2]=0;c[e+32+24+8>>2]=0;c[e+32+24+12>>2]=0;c[e+32+40>>2]=1065353216;j=e+32+44|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,e+32|0,e+16|0,e);h=(i+(+g[e>>2]-+g[e+16>>2])*.5)*2.0;f=(i+(+g[e+4>>2]-+g[e+16+4>>2])*.5)*2.0;i=(i+(+g[e+8>>2]-+g[e+16+8>>2])*.5)*2.0;g[d>>2]=b*.0833333283662796*(f*f+i*i);g[d+4>>2]=b*.0833333283662796*(h*h+i*i);g[d+8>>2]=b*.0833333283662796*(h*h+f*f);g[d+12>>2]=0.0;l=e;return}function Zi(b){b=b|0;var d=0;d=c[b+72>>2]|0;if(d|0){if(a[b+76>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+72>>2]=0}a[b+76>>0]=1;c[b+72>>2]=0;c[b+64>>2]=0;c[b+68>>2]=0;d=c[b+52>>2]|0;if(d|0){if(a[b+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+52>>2]=0}a[b+56>>0]=1;c[b+52>>2]=0;c[b+44>>2]=0;c[b+48>>2]=0;d=c[b+32>>2]|0;if(d|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;d=c[b+12>>2]|0;if(!d){a[b+16>>0]=1;c[b+12>>2]=0;c[b+4>>2]=0;b=b+8|0;c[b>>2]=0;return}if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+12>>2]=0;a[b+16>>0]=1;c[b+12>>2]=0;c[b+4>>2]=0;b=b+8|0;c[b>>2]=0;return}function _i(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0.0,i=0.0,j=0.0,k=0,l=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0;e=c[a+732>>2]|0;if((e|0)<=0)return;a=c[a+740>>2]|0;d=0;do{n=c[a+(d*52|0)+8>>2]|0;f=c[a+(d*52|0)+12>>2]|0;s=+g[n+40>>2];q=+g[n+44>>2];i=+g[n+48>>2];k=a+(d*52|0)+36|0;r=+g[k>>2];m=a+(d*52|0)+40|0;p=+g[m>>2];l=a+(d*52|0)+44|0;o=+g[l>>2];j=-(+g[a+(d*52|0)+32>>2]*((s-+g[f+40>>2])*r+(q-+g[f+44>>2])*p+(i-+g[f+48>>2])*o)*b);h=+g[n+88>>2]*j;g[n+40>>2]=s+r*h;g[n+44>>2]=q+p*h;g[n+48>>2]=o*h+i;j=+g[f+88>>2]*j;i=j*+g[m>>2];h=j*+g[l>>2];g[f+40>>2]=+g[f+40>>2]-+g[k>>2]*j;g[f+44>>2]=+g[f+44>>2]-i;g[f+48>>2]=+g[f+48>>2]-h;d=d+1|0}while((d|0)!=(e|0));return}function $i(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;i=+g[a+24>>2];j=+g[a+28>>2];k=+g[a+32>>2];h=i*+g[b>>2]+j*+g[b+4>>2]+k*+g[b+8>>2];f=+g[a+20>>2];if(h>f){g[a+20>>2]=h;c[a+4>>2]=c[b>>2];c[a+4+4>>2]=c[b+4>>2];c[a+4+8>>2]=c[b+8>>2];c[a+4+12>>2]=c[b+12>>2];f=h}h=i*+g[b+16>>2]+j*+g[b+20>>2]+k*+g[b+24>>2];if(h>f){g[a+20>>2]=h;c[a+4>>2]=c[b+16>>2];c[a+4+4>>2]=c[b+16+4>>2];c[a+4+8>>2]=c[b+16+8>>2];c[a+4+12>>2]=c[b+16+12>>2]}else h=f;f=i*+g[b+32>>2]+j*+g[b+36>>2]+k*+g[b+40>>2];if(!(f>h))return;g[a+20>>2]=f;c[a+4>>2]=c[b+32>>2];c[a+4+4>>2]=c[b+32+4>>2];c[a+4+8>>2]=c[b+32+8>>2];c[a+4+12>>2]=c[b+32+12>>2];return}function aj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=c[b+328>>2]|0;if((g|0)==(c[b+332>>2]|0)?(j=g|0?g<<1:1,(g|0)<(j|0)):0){if(!j)h=0;else{c[6472]=(c[6472]|0)+1;g=ic((j<<2|3)+16|0)|0;if(!g)h=0;else{c[(g+4+15&-16)+-4>>2]=g;h=g+4+15&-16}g=c[b+328>>2]|0}if((g|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[b+336>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(g|0))}i=c[b+336>>2]|0;if(i){if(a[b+340>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);g=c[b+328>>2]|0}c[b+336>>2]=0}a[b+340>>0]=1;c[b+336>>2]=h;c[b+332>>2]=j}c[(c[b+336>>2]|0)+(g<<2)>>2]=d;c[b+328>>2]=g+1;c[d+284>>2]=c[b+452>>2];Bg(b,d,e,f);return}function bj(a){a=a|0;var b=0,d=0,e=0,f=0;f=l;l=l+16|0;b=c[2405]|0;if((c[b>>2]|0)!=(a|0)){d=c[b+24>>2]|0;a:do if(!d)e=5;else while(1){if((c[d>>2]|0)==(a|0)){b=d;break a}d=c[d+28>>2]|0;if(!d){e=5;break}}while(0);if((e|0)==5){e=Vr(36)|0;c[e>>2]=a;c[e+4>>2]=0;c[e+4+4>>2]=0;c[e+4+8>>2]=0;c[e+4+12>>2]=0;c[e+20>>2]=b;c[e+24>>2]=0;c[e+28>>2]=0;c[e+32>>2]=0;or(e);c[e+28>>2]=c[b+24>>2];c[b+24>>2]=e;b=e}c[2405]=b}a=b+4|0;c[a>>2]=(c[a>>2]|0)+1;a=b+16|0;e=c[a>>2]|0;c[a>>2]=e+1;if(e|0){l=f;return}Za(f|0,0)|0;e=c[6471]|0;c[b+12>>2]=(c[f+4>>2]|0)-(c[e+4>>2]|0)+(((c[f>>2]|0)-(c[e>>2]|0)|0)*1e6|0);l=f;return}function cj(b){b=b|0;var d=0;d=Ms()|0;c[d+8>>2]=0;c[d>>2]=6484;a[d+28>>0]=1;c[d+24>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+32>>2]=1566444395;c[d+36>>2]=1566444395;c[d+40>>2]=1566444395;g[d+44>>2]=0.0;c[d+48>>2]=-581039253;c[d+52>>2]=-581039253;c[d+56>>2]=-581039253;g[d+60>>2]=0.0;c[d+64>>2]=0;c[d+68>>2]=1;g[d+72>>2]=0.0;c[d+76>>2]=1065353216;c[d+80>>2]=1065353216;c[d+84>>2]=1065353216;g[d+88>>2]=0.0;c[d+4>>2]=31;if(!b)return d|0;c[6472]=(c[6472]|0)+1;b=ic(79)|0;if(!b)b=0;else{c[(b+4+15&-16)+-4>>2]=b;b=b+4+15&-16}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;a[b+56>>0]=1;c[b+52>>2]=0;c[b+44>>2]=0;c[b+48>>2]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=-1;c[b+12>>2]=0;c[b+16>>2]=0;c[d+64>>2]=b;return d|0}function dj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+76>>2]|0;if(!e)return;f=c[d+4>>2]|0;if((f|0)==(c[d+8>>2]|0)?(h=f|0?f<<1:1,(f|0)<(h|0)):0){if(!h){e=f;f=0}else{c[6472]=(c[6472]|0)+1;e=ic((h<<2|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=c[d+4>>2]|0}if((e|0)>0){g=0;do{c[f+(g<<2)>>2]=c[(c[d+12>>2]|0)+(g<<2)>>2];g=g+1|0}while((g|0)!=(e|0))}g=c[d+12>>2]|0;if(g){if(a[d+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0);e=c[d+4>>2]|0}c[d+12>>2]=0}a[d+16>>0]=1;c[d+12>>2]=f;c[d+8>>2]=h;f=e;e=c[b+76>>2]|0}c[(c[d+12>>2]|0)+(f<<2)>>2]=e;c[d+4>>2]=f+1;return}function ej(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;while(1){k=c[a+12>>2]|0;j=c[k+(((b+d|0)/2|0)<<3)>>2]|0;e=b;f=d;while(1){while(1){h=e+1|0;if((c[k+(e<<3)>>2]|0)<(j|0))e=h;else{i=f;break}}while(1){g=k+(i<<3)|0;f=i+-1|0;if((j|0)<(c[g>>2]|0))i=f;else break}if((e|0)>(i|0))f=i;else{e=k+(e<<3)|0;l=c[e>>2]|0;k=c[e+4>>2]|0;m=c[g+4>>2]|0;c[e>>2]=c[g>>2];c[e+4>>2]=m;e=(c[a+12>>2]|0)+(i<<3)|0;c[e>>2]=l;c[e+4>>2]=k;e=h}if((e|0)>(f|0))break;k=c[a+12>>2]|0}if((f|0)>(b|0))ej(a,b,f);if((e|0)<(d|0))b=e;else break}return}function fj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0;i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);m=i+ +g[a+28>>2];k=i+ +g[a+32>>2];i=i+ +g[a+36>>2];u=+B(+(+g[b>>2]));t=+B(+(+g[b+4>>2]));s=+B(+(+g[b+8>>2]));q=+B(+(+g[b+16>>2]));p=+B(+(+g[b+20>>2]));o=+B(+(+g[b+24>>2]));l=+B(+(+g[b+32>>2]));j=+B(+(+g[b+36>>2]));h=+B(+(+g[b+40>>2]));r=+g[b+48>>2];n=+g[b+52>>2];f=+g[b+56>>2];g[d>>2]=r-(m*u+k*t+i*s);g[d+4>>2]=n-(m*q+k*p+i*o);g[d+8>>2]=f-(m*l+k*j+i*h);g[d+12>>2]=0.0;g[e>>2]=m*u+k*t+i*s+r;g[e+4>>2]=m*q+k*p+i*o+n;g[e+8>>2]=m*l+k*j+i*h+f;g[e+12>>2]=0.0;return}function gj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;i=+g[a+88>>2];j=+g[a+92>>2];k=+g[a+96>>2];h=i*+g[b>>2]+j*+g[b+4>>2]+k*+g[b+8>>2];f=+g[a+84>>2];if(h>f){g[a+84>>2]=h;c[a+4>>2]=c[b>>2];c[a+4+4>>2]=c[b+4>>2];c[a+4+8>>2]=c[b+8>>2];c[a+4+12>>2]=c[b+12>>2];f=h}h=i*+g[b+16>>2]+j*+g[b+20>>2]+k*+g[b+24>>2];if(h>f){g[a+84>>2]=h;c[a+4>>2]=c[b+16>>2];c[a+4+4>>2]=c[b+16+4>>2];c[a+4+8>>2]=c[b+16+8>>2];c[a+4+12>>2]=c[b+16+12>>2]}else h=f;f=i*+g[b+32>>2]+j*+g[b+36>>2]+k*+g[b+40>>2];if(!(f>h))return;g[a+84>>2]=f;c[a+4>>2]=c[b+32>>2];c[a+4+4>>2]=c[b+32+4>>2];c[a+4+8>>2]=c[b+32+8>>2];c[a+4+12>>2]=c[b+32+12>>2];return}function hj(a,c,d,e,f,h){a=a|0;c=c|0;d=+d;e=+e;f=+f;h=h|0;var i=0,j=0;d=(d-+g[a+8>>2])*+g[a+40>>2];e=(e-+g[a+12>>2])*+g[a+44>>2];f=(f-+g[a+16>>2])*+g[a+48>>2];do if(!(d<=0.0)){i=b[a+6>>1]|0;j=b[a+4>>1]|0;if(!(d>=+(i&65535))){i=j&(~~d&65535)&65535|h;break}else{i=j&i&65535|h;break}}else i=h;while(0);b[c>>1]=i;do if(!(e<=0.0)){j=b[a+6>>1]|0;i=b[a+4>>1]|0;if(!(e>=+(j&65535))){i=i&(~~e&65535)&65535|h;break}else{i=i&j&65535|h;break}}else i=h;while(0);b[c+2>>1]=i;if(f<=0.0){h=h&65535;c=c+4|0;b[c>>1]=h;return}j=b[a+6>>1]|0;i=b[a+4>>1]|0;if(!(f>=+(j&65535))){h=i&(~~f&65535)&65535|h;h=h&65535;c=c+4|0;b[c>>1]=h;return}else{h=i&j&65535|h;h=h&65535;c=c+4|0;b[c>>1]=h;return}}function ij(b){b=b|0;var d=0;c[b>>2]=8776;if(c[b+108>>2]|0){d=c[b+112>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+112>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+108>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+108>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}}d=c[b+88>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+84>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+80>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+60>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}if(!(a[b+100>>0]|0))return;d=c[b+92>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+92>>2]|0;if(!d)return;c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);return}function jj(b){b=b|0;var d=0,e=0,f=0,h=0.0;e=l;l=l+96|0;a[b+88>>0]=1;if((a[22776]|0)==0?Yy(22776)|0:0){c[6176]=1065353216;c[6177]=0;c[6178]=0;c[6179]=0;c[6180]=0;c[6181]=1065353216;c[6182]=0;c[6183]=0;c[6184]=0;c[6185]=0;c[6186]=1065353216;g[6187]=0.0;c[6188]=-1082130432;c[6189]=0;c[6190]=0;c[6191]=0;c[6192]=0;c[6193]=-1082130432;c[6194]=0;c[6195]=0;c[6196]=0;c[6197]=0;c[6198]=-1082130432;g[6199]=0.0}d=e;f=d+96|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));Nb[c[(c[b>>2]|0)+76>>2]&127](b,24704,e,6);h=+g[b+44>>2];g[b+72>>2]=+g[e>>2]+h;g[b+56>>2]=+g[e+48>>2]-h;g[b+76>>2]=+g[e+20>>2]+h;g[b+60>>2]=+g[e+68>>2]-h;g[b+80>>2]=+g[e+40>>2]+h;g[b+64>>2]=+g[e+88>>2]-h;l=e;return}function kj(a,b,d,e){a=a|0;b=b|0;d=+d;e=+e;var f=0,h=0.0,i=0.0,k=0.0,l=0,m=0.0,n=0.0,o=0.0;k=+E(+d);i=+F(+d);f=c[b+444>>2]|0;l=+B(+k)>1.1920928955078125e-07;d=(c[j>>2]=f,+g[j>>2]);if(l){m=+g[b+448>>2];m=+C(+((i*i/(k*k)+1.0)/(1.0/(m*m)+i*i/(k*k)/(d*d))));d=i*i;h=k*k;f=(g[j>>2]=m,c[j>>2]|0)}else{d=i*i;h=k*k}m=+C(+(h+0.0+d));n=(c[j>>2]=f,+g[j>>2])*.5;m=+F(+n)/m;n=+E(+n);o=n*e+k*m*0.0-i*m*-0.0;h=n*0.0-i*m*e-m*0.0*0.0;d=n*0.0+m*0.0*0.0-k*m*e;e=-(m*0.0*e)-k*m*0.0-i*m*-0.0;g[a>>2]=i*m*h+(n*o+e*-(m*0.0))-d*-(k*m);g[a+4>>2]=d*-(m*0.0)+(n*h+e*-(k*m))-i*m*o;g[a+8>>2]=o*-(k*m)+(i*m*e+n*d)-h*-(m*0.0);g[a+12>>2]=0.0;return}function lj(a,b,d){a=a|0;b=+b;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;f=c[a+732>>2]|0;if((f|0)<=0)return;a=c[a+740>>2]|0;e=0;do{d=+g[a+(e*52|0)+24>>2];if(d>0.0?(j=c[a+(e*52|0)+8>>2]|0,k=c[a+(e*52|0)+12>>2]|0,l=+g[j+8>>2],n=+g[k+8>>2]-l,m=+g[j+12>>2],p=+g[k+12>>2]-m,h=+g[j+16>>2],o=+g[k+16>>2]-h,i=+g[a+(e*52|0)+28>>2],i+(n*n+p*p+o*o)>1.1920928955078125e-07):0){d=(i-(n*n+p*p+o*o))/(d*(i+(n*n+p*p+o*o)))*b;q=d*+g[j+88>>2];g[j+8>>2]=l-n*q;g[j+12>>2]=m-p*q;g[j+16>>2]=h-o*q;d=d*+g[k+88>>2];g[k+8>>2]=+g[k+8>>2]+n*d;g[k+12>>2]=p*d+ +g[k+12>>2];g[k+16>>2]=o*d+ +g[k+16>>2]}e=e+1|0}while((e|0)!=(f|0));return}function mj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0;e=l;l=l+96|0;c[e+32>>2]=1065353216;c[e+32+4>>2]=0;c[e+32+4+4>>2]=0;c[e+32+4+8>>2]=0;c[e+32+4+12>>2]=0;c[e+32+20>>2]=1065353216;c[e+32+24>>2]=0;c[e+32+24+4>>2]=0;c[e+32+24+8>>2]=0;c[e+32+24+12>>2]=0;c[e+32+40>>2]=1065353216;n=e+32+44|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,e+32|0,e+16|0,e);k=+g[e>>2];m=+g[e+16>>2];i=+g[e+4>>2];j=+g[e+16+4>>2];f=+g[e+8>>2];h=+g[e+16+8>>2];g[d>>2]=+C(+((k-m)*(k-m)+(i-j)*(i-j)+(f-h)*(f-h)))*.5;g[b>>2]=(m+k)*.5;g[b+4>>2]=(j+i)*.5;g[b+8>>2]=(h+f)*.5;g[b+12>>2]=0.0;l=e;return}function nj(){var b=0,d=0;d=Ms()|0;c[d+8>>2]=0;c[d>>2]=6484;a[d+28>>0]=1;c[d+24>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+32>>2]=1566444395;c[d+36>>2]=1566444395;c[d+40>>2]=1566444395;g[d+44>>2]=0.0;c[d+48>>2]=-581039253;c[d+52>>2]=-581039253;c[d+56>>2]=-581039253;g[d+60>>2]=0.0;c[d+64>>2]=0;c[d+68>>2]=1;g[d+72>>2]=0.0;c[d+76>>2]=1065353216;c[d+80>>2]=1065353216;c[d+84>>2]=1065353216;g[d+88>>2]=0.0;c[d+4>>2]=31;c[6472]=(c[6472]|0)+1;b=ic(79)|0;if(!b)b=0;else{c[(b+4+15&-16)+-4>>2]=b;b=b+4+15&-16}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;a[b+56>>0]=1;c[b+52>>2]=0;c[b+44>>2]=0;c[b+48>>2]=0;c[b>>2]=0;c[b+4>>2]=0;c[b+8>>2]=-1;c[b+12>>2]=0;c[b+16>>2]=0;c[d+64>>2]=b;return d|0}function oj(a,d,f,h){a=a|0;d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0;i=c[a+108>>2]|0;if(i|0){Nb[c[(c[i>>2]|0)+28>>2]&127](i,d,f,h);return}i=b[a+56>>1]|0;if(!(i<<16>>16))return;k=1;m=1;do{j=c[a+68>>2]|0;if(b[j+(k<<2)>>1]&1){l=c[a+60>>2]|0;k=e[j+(k<<2)+2>>1]|0;if(!(+g[d>>2]>+g[l+(k<<6)+32>>2])?!(+g[f>>2]<+g[l+(k<<6)+16>>2]):0)j=1;else j=0;if(!(!(+g[d+8>>2]>+g[l+(k<<6)+40>>2])?!(+g[f+8>>2]<+g[l+(k<<6)+24>>2]):0))j=0;if(!(+g[d+4>>2]>+g[l+(k<<6)+36>>2])?!(+g[f+4>>2]<+g[l+(k<<6)+20>>2]|j^1):0){sb[c[(c[h>>2]|0)+8>>2]&31](h,l+(k<<6)|0)|0;i=b[a+56>>1]|0}}m=m+1<<16>>16;k=m&65535}while(k>>>0<((i&65535)<<1|1)>>>0);return}function pj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0;f=+g[b>>2];h=+g[b+16>>2];j=f>2];if((j+g[a+24>>2])return;k=f>h?b:b+16|0;if(+g[(+g[k>>2]>i?k:b+32|0)>>2]<+g[a+8>>2])return;i=+g[b+8>>2];f=+g[b+24>>2];j=i>2];if((j+g[a+32>>2])return;k=i>f?b+8|0:b+24|0;if(+g[(+g[k>>2]>h?k:b+40|0)>>2]<+g[a+16>>2])return;f=+g[b+4>>2];h=+g[b+20>>2];j=f>2];if((j+g[a+28>>2])return;k=f>h?b+4|0:b+20|0;if(+g[(+g[k>>2]>i?k:b+36|0)>>2]<+g[a+12>>2])return;k=c[a+4>>2]|0;Nb[c[(c[k>>2]|0)+8>>2]&127](k,b,d,e);return}function qj(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0;if(!(a[b+738>>0]|0)){c[d>>2]=5;c[d+4>>2]=1;e=+Ri(b,(c[b+28>>2]|0)+4|0,(c[b+32>>2]|0)+4|0);g[b+728>>2]=e;g[b+708>>2]=0.0;g[b+712>>2]=0.0;a[b+716>>0]=0;h=+g[b+692>>2];do if(!(h>=0.0))i=12;else{e=+bh(e-+g[b+688>>2],6.2831854820251465);if(!(e<-3.1415927410125732)){if(e>3.1415927410125732)e=e+-6.2831854820251465}else e=e+6.2831854820251465;if(e<-h){a[b+716>>0]=1;f=1.0;e=-(e+h)}else{if(!(e>h)){i=12;break}a[b+716>>0]=1;f=-1.0;e=h-e}g[b+708>>2]=e;g[b+712>>2]=f}while(0);if((i|0)==12?(a[b+737>>0]|0)==0:0)return;c[d>>2]=6;d=d+4|0}else{c[d>>2]=0;d=d+4|0}c[d>>2]=0;return}function rj(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0.0,j=0.0,k=0.0;h=l;l=l+16|0;g[b+32>>2]=f;c[b+8>>2]=c[d>>2];c[b+8+4>>2]=c[d+4>>2];c[b+8+8>>2]=c[d+8>>2];c[b+8+12>>2]=c[d+12>>2];i=+g[b+28>>2];k=+g[e+4>>2]-i*+g[d+4>>2];j=+g[e+8>>2]-i*+g[d+8>>2];g[h>>2]=+g[e>>2]-+g[d>>2]*i;g[h+4>>2]=k;g[h+8>>2]=j;g[h+12>>2]=0.0;f=+g[b+24>>2]+i+f;g[b+32>>2]=f;if(!(f<0.0)){b=b+4|0;b=c[b>>2]|0;e=c[b>>2]|0;e=e+16|0;e=c[e>>2]|0;Lb[e&15](b,d,h,f);l=h;return}a[b+36>>0]=1;b=b+4|0;b=c[b>>2]|0;e=c[b>>2]|0;e=e+16|0;e=c[e>>2]|0;Lb[e&15](b,d,h,f);l=h;return}function sj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0.0;f=l;l=l+16|0;c[a+4>>2]=c[b+24>>2];e=c[b>>2]|0;c[a+8>>2]=e;if(d){c[a+52>>2]=c[b+8>>2];c[a+52+4>>2]=c[b+8+4>>2];c[a+52+8>>2]=c[b+8+8>>2];c[a+52+12>>2]=c[b+8+12>>2];e=a+68|0;d=a+20|0;a=a+36|0;h=+g[b+24>>2];Gp(e,d,a,h);h=+g[b+24>>2];l=f;return +h}else{e=bI(KH(e)|0)|0;Pl(f,e,+g[b+8>>2],+g[b+12>>2],+g[b+16>>2]);c[a+52>>2]=c[f>>2];c[a+52+4>>2]=c[f+4>>2];c[a+52+8>>2]=c[f+8>>2];c[a+52+12>>2]=c[f+12>>2];e=a+68|0;d=a+20|0;a=a+36|0;h=+g[b+24>>2];Gp(e,d,a,h);h=+g[b+24>>2];l=f;return +h}return 0.0}function tj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=6420;d=c[b+8>>2]|0;e=c[d+8>>2]|0;if((e|0)>0){g=0;do{f=c[(c[d+16>>2]|0)+(g*12|0)+8>>2]|0;if(f|0){Ab[c[c[f>>2]>>2]&511](f);h=c[b+4>>2]|0;Gb[c[(c[h>>2]|0)+60>>2]&127](h,f)}g=g+1|0}while((g|0)!=(e|0));d=c[b+8>>2]|0}Hh(d);d=c[b+8>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+8>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+24>>2]|0;if(!d){a[b+28>>0]=1;c[b+24>>2]=0;c[b+16>>2]=0;h=b+20|0;c[h>>2]=0;return}if(a[b+28>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+24>>2]=0;a[b+28>>0]=1;c[b+24>>2]=0;c[b+16>>2]=0;h=b+20|0;c[h>>2]=0;return}function uj(b,d){b=b|0;d=d|0;c[b+204>>2]=c[d+48>>2];c[b+208>>2]=c[d+52>>2];c[b+212>>2]=c[d+56>>2];c[b+216>>2]=c[d+60>>2];c[b+220>>2]=c[d+64>>2];c[b+224>>2]=c[d+68>>2];c[b+156>>2]=c[d>>2];c[b+156+4>>2]=c[d+4>>2];c[b+156+8>>2]=c[d+8>>2];c[b+156+12>>2]=c[d+12>>2];c[b+172>>2]=c[d+16>>2];c[b+172+4>>2]=c[d+16+4>>2];c[b+172+8>>2]=c[d+16+8>>2];c[b+172+12>>2]=c[d+16+12>>2];c[b+188>>2]=c[d+32>>2];c[b+188+4>>2]=c[d+32+4>>2];c[b+188+8>>2]=c[d+32+8>>2];c[b+188+12>>2]=c[d+32+12>>2];c[b+228>>2]=c[d+72>>2];g[b+232>>2]=0.0;g[b+252>>2]=0.0;g[b+236>>2]=0.0;g[b+240>>2]=0.0;g[b+256>>2]=0.0;g[b+244>>2]=.10000000149011612;a[b+260>>0]=a[d+80>>0]&1;c[b+248>>2]=c[d+76>>2];return}function vj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0;f=l;l=l+16|0;c[b+4>>2]=d;c[b>>2]=4572;c[b+8>>2]=-1;c[b+12>>2]=-1;g[b+16>>2]=3402823466385288598117041.0e14;a[b+20>>0]=1;a[b+21>>0]=0;c[b+24>>2]=-1;c[b+28>>2]=e;if((a[22752]|0)==0?Yy(22752)|0:0){c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;dg(23416,0.0,0,0,f)}c[5905]=c[5905]|1;g[5940]=0.0;h=+g[5950]*0.0;i=+g[5951]*0.0;g[5945]=+g[5949]*0.0;g[5946]=h;g[5947]=i;g[5948]=0.0;c[5953]=0;c[5954]=0;c[5955]=0;c[5956]=0;i=+g[5942]*0.0;h=+g[5943]*0.0;g[5994]=+g[5941]*0.0;g[5995]=i;g[5996]=h;g[5997]=0.0;c[b+32>>2]=23416;g[b+36>>2]=0.0;g[b+40>>2]=.30000001192092896;c[b+44>>2]=0;l=f;return}function wj(a){a=a|0;var b=0;c[a>>2]=3212;b=c[a+92>>2]|0;Ab[c[c[b>>2]>>2]&511](b);b=c[a+92>>2]|0;if(b|0){c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0)}b=c[a+96>>2]|0;Ab[c[c[b>>2]>>2]&511](b);b=c[a+96>>2]|0;if(b|0){c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0)}b=c[a+100>>2]|0;Ab[c[c[b>>2]>>2]&511](b);b=c[a+100>>2]|0;if(b|0){c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0)}b=c[a+104>>2]|0;Ab[c[c[b>>2]>>2]&511](b);b=c[a+104>>2]|0;if(b|0){c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0)}b=c[a+108>>2]|0;Ab[c[c[b>>2]>>2]&511](b);b=c[a+108>>2]|0;if(!b){Ye(a);return}c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);Ye(a);return}function xj(b,d){b=b|0;d=d|0;var e=0,f=0;a:do if((d|0)!=0&(b&3|0)!=0){e=d;while(1){if(!(a[b>>0]|0))break a;b=b+1|0;d=e+-1|0;if((d|0)!=0&(b&3|0)!=0)e=d;else{e=d;d=(d|0)!=0;f=4;break}}}else{e=d;d=(d|0)!=0;f=4}while(0);b:do if((f|0)==4)if(d){if(a[b>>0]|0){c:do if(e>>>0>3)while(1){d=c[b>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0)break;b=b+4|0;e=e+-4|0;if(e>>>0<=3){f=10;break c}}else f=10;while(0);if((f|0)==10)if(!e){e=0;break}while(1){if(!(a[b>>0]|0))break b;b=b+1|0;e=e+-1|0;if(!e){e=0;break}}}}else e=0;while(0);return (e|0?b:0)|0}function yj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;if((c[d+60>>2]|0)==2){f=c[d+48>>2]|0;Sg(b+64|0,f)|0;g=c[b+68>>2]|0;if(g|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}c[b+68>>2]=f;f=1}else{f=c[d+48>>2]|0;Sg(b+4|0,f)|0;g=c[b+8>>2]|0;if(g|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}c[b+8>>2]=f;f=0}f=b+4+(f*60|0)+12|0;c[f>>2]=(c[f>>2]|0)+-1;f=c[d+52>>2]|0;if(!f)f=b+124+(c[d+60>>2]<<2)|0;else f=f+56|0;c[f>>2]=c[d+56>>2];f=c[d+56>>2]|0;if(f|0)c[f+52>>2]=c[d+52>>2];g=c[b+136>>2]|0;Kb[c[(c[g>>2]|0)+16>>2]&127](g,d,e);c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);a[b+194>>0]=1;return}function zj(a){a=a|0;var b=0.0,c=0.0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;n=+g[a+4>>2];h=+g[a+396>>2];m=+g[a+8>>2];e=+g[a+400>>2];l=+g[a+12>>2];c=+g[a+404>>2];k=+g[a+20>>2];j=+g[a+24>>2];i=+g[a+28>>2];f=+g[a+36>>2];d=+g[a+40>>2];b=+g[a+44>>2];g[a+264>>2]=n*h*n+m*e*m+l*c*l;g[a+268>>2]=n*h*k+m*e*j+l*c*i;g[a+272>>2]=n*h*f+m*e*d+l*c*b;g[a+276>>2]=0.0;g[a+280>>2]=h*k*n+e*j*m+c*i*l;g[a+284>>2]=h*k*k+e*j*j+c*i*i;g[a+288>>2]=h*k*f+e*j*d+c*i*b;g[a+292>>2]=0.0;g[a+296>>2]=h*f*n+e*d*m+c*b*l;g[a+300>>2]=h*f*k+e*d*j+c*b*i;g[a+304>>2]=h*f*f+e*d*d+c*b*b;g[a+308>>2]=0.0;return}function Aj(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;c[b>>2]=5824;e=c[b+8>>2]|0;d=c[b+16>>2]|0;if((e|0)>0){h=0;do{g=(c[d+(h<<2)>>2]|0)+188|0;f=c[g>>2]|0;if(f){e=c[b+68>>2]|0;e=qb[c[(c[e>>2]|0)+36>>2]&127](e)|0;Kb[c[(c[e>>2]|0)+40>>2]&127](e,f,c[b+24>>2]|0);e=c[b+68>>2]|0;Kb[c[(c[e>>2]|0)+12>>2]&127](e,f,c[b+24>>2]|0);c[g>>2]=0;e=c[b+8>>2]|0;d=c[b+16>>2]|0}h=h+1|0}while((h|0)<(e|0))}if(!d){a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}function Bj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0.0,j=0,k=0,l=0.0,m=0.0;k=c[b+52>>2]|0;j=c[k+32>>2]|0;b=c[j>>2]|0;k=c[k+24>>2]|0;if((k|0)<=1){k=b;k=k+8|0;c[a>>2]=c[k>>2];c[a+4>>2]=c[k+4>>2];c[a+8>>2]=c[k+8>>2];c[a+12>>2]=c[k+12>>2];return}l=+g[d>>2];m=+g[d+4>>2];i=+g[d+8>>2];f=l*+g[b+8>>2]+m*+g[b+12>>2]+i*+g[b+16>>2];d=1;h=0;while(1){b=c[j+(d<<2)>>2]|0;e=l*+g[b+8>>2]+m*+g[b+12>>2]+i*+g[b+16>>2];b=e>f;h=b?d:h;d=d+1|0;if((d|0)==(k|0))break;else f=b?e:f}k=c[j+(h<<2)>>2]|0;k=k+8|0;c[a>>2]=c[k>>2];c[a+4>>2]=c[k+4>>2];c[a+8>>2]=c[k+8>>2];c[a+12>>2]=c[k+12>>2];return}function Cj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0,i=0.0,j=0.0;c[a+248>>2]=c[b>>2];c[a+248+4>>2]=c[b+4>>2];c[a+248+8>>2]=c[b+8>>2];c[a+248+12>>2]=c[b+12>>2];d=c[a+232>>2]|0;if((d|0)<=0)return;h=0;do{f=c[(c[a+240>>2]|0)+(h<<2)>>2]|0;switch(c[f+216>>2]|0){case 2:case 5:break;default:if(!(c[f+504>>2]&1)){e=+g[f+344>>2];if(e!=0.0){j=1.0/e*+g[b+4>>2];i=1.0/e*+g[b+8>>2];g[f+364>>2]=1.0/e*+g[b>>2];g[f+368>>2]=j;g[f+372>>2]=i;g[f+376>>2]=0.0}c[f+380>>2]=c[b>>2];c[f+380+4>>2]=c[b+4>>2];c[f+380+8>>2]=c[b+8>>2];c[f+380+12>>2]=c[b+12>>2];d=c[a+232>>2]|0}}h=h+1|0}while((h|0)<(d|0));return}function Dj(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=l;l=l+96|0;g=c[b+192>>2]|0;c[f+64>>2]=0;c[f+64+4>>2]=g;c[f+64+8>>2]=b;c[f+64+12>>2]=b+4;c[f+64+16>>2]=-1;c[f+64+20>>2]=-1;b=c[d+192>>2]|0;c[f+40>>2]=0;c[f+40+4>>2]=b;c[f+40+8>>2]=d;c[f+40+12>>2]=d+4;c[f+40+16>>2]=-1;c[f+40+20>>2]=-1;b=c[a+24>>2]|0;b=vb[c[(c[b>>2]|0)+8>>2]&31](b,f+64|0,f+40|0,0)|0;if(!b){l=f;return}c[f+4>>2]=0;c[f+8>>2]=f+64;c[f+12>>2]=f+40;c[f>>2]=6168;c[f+32>>2]=e;Rb[c[(c[b>>2]|0)+8>>2]&31](b,f+64|0,f+40|0,a+28|0,f);Ab[c[c[b>>2]>>2]&511](b);g=c[a+24>>2]|0;Gb[c[(c[g>>2]|0)+60>>2]&127](g,b);l=f;return}function Ej(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;if(!((b|0)==0?1:(c[b+236>>2]&2|0)==0)){Gb[c[(c[a>>2]|0)+92>>2]&127](a,b);return}d=c[b+188>>2]|0;if(d|0){g=c[a+68>>2]|0;g=qb[c[(c[g>>2]|0)+36>>2]&127](g)|0;Kb[c[(c[g>>2]|0)+40>>2]&127](g,d,c[a+24>>2]|0);g=c[a+68>>2]|0;Kb[c[(c[g>>2]|0)+12>>2]&127](g,d,c[a+24>>2]|0);c[b+188>>2]=0}f=c[a+8>>2]|0;if((f|0)<=0)return;g=c[a+16>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0)){h=11;break}}if((h|0)==11)return;if((d|0)>=(f|0))return;c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+16>>2]|0)+(f+-1<<2)>>2]=b;c[a+8>>2]=f+-1;return}function Fj(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0,h=0.0,i=0.0,k=0.0;e=c[a+204>>2]|0;if(b==0.0){c[a+204>>2]=e|1;h=0.0}else{c[a+204>>2]=e&-2;h=1.0/b}g[a+344>>2]=h;k=+g[a+384>>2]*b;i=+g[a+388>>2]*b;g[a+364>>2]=+g[a+380>>2]*b;g[a+368>>2]=k;g[a+372>>2]=i;g[a+376>>2]=0.0;b=+g[d>>2];f=b!=0.0?(g[j>>2]=1.0/b,c[j>>2]|0):0;b=+g[d+4>>2];e=b!=0.0?(g[j>>2]=1.0/b,c[j>>2]|0):0;b=+g[d+8>>2];d=b!=0.0?(g[j>>2]=1.0/b,c[j>>2]|0):0;c[a+396>>2]=f;c[a+400>>2]=e;c[a+404>>2]=d;g[a+408>>2]=0.0;i=h*+g[a+352>>2];k=h*+g[a+356>>2];g[a+560>>2]=+g[a+348>>2]*h;g[a+564>>2]=i;g[a+568>>2]=k;g[a+572>>2]=0.0;return}function Gj(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0,h=0;f=l;l=l+256|0;e=c[b+212>>2]|0;if((e|0)>-1){a=e;l=f;return a|0}h=(c[b+236>>2]&2|0)==0;e=h?0:b;do if(!h){if(!(+g[e+344>>2]!=0.0)?(c[e+204>>2]&2|0)==0:0)break;h=c[a+8>>2]|0;Nk(f|0,0,244)|0;we(tf(a+4|0,f)|0,b,d);c[b+212>>2]=h;l=f;return h|0}while(0);e=c[a+188>>2]|0;if((e|0)>=0){h=e;l=f;return h|0}c[a+188>>2]=c[a+8>>2];Nk(f|0,0,244)|0;we(tf(a+4|0,f)|0,0,d);h=c[a+188>>2]|0;l=f;return h|0}function Hj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0,k=0.0,l=0.0;l=+g[b+60>>2]*.5;h=c[b+68>>2]|0;e=+g[d>>2];f=+g[d+4>>2];k=+g[d+8>>2];k=+C(+(e*e+f*f+k*k));j=c[b+64>>2]|0;if(+g[d+(h<<2)>>2]>k*+g[b+52>>2]){g[a+(j<<2)>>2]=0.0;g[a+(h<<2)>>2]=l;l=0.0;b=c[b+72>>2]|0;b=a+(b<<2)|0;g[b>>2]=l;return}k=+g[d+(j<<2)>>2];i=c[b+72>>2]|0;e=+g[d+(i<<2)>>2];f=+C(+(k*k+e*e));if(f>1.1920928955078125e-07){f=+g[b+56>>2]/f;g[a+(j<<2)>>2]=k*f;g[a+(h<<2)>>2]=-l;l=e*f;b=i;b=a+(b<<2)|0;g[b>>2]=l;return}else{g[a+(j<<2)>>2]=0.0;g[a+(h<<2)>>2]=-l;l=0.0;b=i;b=a+(b<<2)|0;g[b>>2]=l;return}}function Ij(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0;e=l;l=l+96|0;c[e+32>>2]=1065353216;c[e+32+4>>2]=0;c[e+32+4+4>>2]=0;c[e+32+4+8>>2]=0;c[e+32+4+12>>2]=0;c[e+32+20>>2]=1065353216;c[e+32+24>>2]=0;c[e+32+24+4>>2]=0;c[e+32+24+8>>2]=0;c[e+32+24+12>>2]=0;c[e+32+40>>2]=1065353216;j=e+32+44|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,e+32|0,e+16|0,e);h=(+g[e>>2]-+g[e+16>>2])*.5*2.0;f=(+g[e+4>>2]-+g[e+16+4>>2])*.5*2.0;i=(+g[e+8>>2]-+g[e+16+8>>2])*.5*2.0;g[d>>2]=b/12.0*(f*f+i*i);g[d+4>>2]=b/12.0*(h*h+i*i);g[d+8>>2]=b/12.0*(h*h+f*f);l=e;return}function Jj(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=c[b+280>>2]|0;if((e|0)==(c[b+284>>2]|0)?(h=e|0?e<<1:1,(e|0)<(h|0)):0){if(!h)f=0;else{c[6472]=(c[6472]|0)+1;e=ic((h<<2|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=c[b+280>>2]|0}if((e|0)>0){g=0;do{c[f+(g<<2)>>2]=c[(c[b+288>>2]|0)+(g<<2)>>2];g=g+1|0}while((g|0)!=(e|0))}g=c[b+288>>2]|0;if(g){if(a[b+292>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0);e=c[b+280>>2]|0}c[b+288>>2]=0}a[b+292>>0]=1;c[b+288>>2]=f;c[b+284>>2]=h}c[(c[b+288>>2]|0)+(e<<2)>>2]=d;c[b+280>>2]=e+1;return}function Kj(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=ws()|0;vj(e,3,b);c[e>>2]=4740;c[e+300>>2]=c[d>>2];c[e+300+4>>2]=c[d+4>>2];c[e+300+8>>2]=c[d+8>>2];c[e+300+12>>2]=c[d+12>>2];k=+g[d>>2];j=+g[d+4>>2];i=+g[d+8>>2];h=k*+g[b+20>>2]+j*+g[b+24>>2]+i*+g[b+28>>2]+ +g[b+56>>2];f=k*+g[b+36>>2]+j*+g[b+40>>2]+i*+g[b+44>>2]+ +g[b+60>>2];g[e+316>>2]=k*+g[b+4>>2]+j*+g[b+8>>2]+i*+g[b+12>>2]+ +g[b+52>>2];g[e+320>>2]=h;g[e+324>>2]=f;g[e+328>>2]=0.0;c[e+332>>2]=0;a[e+344>>0]=0;g[e+348>>2]=.30000001192092896;g[e+352>>2]=1.0;g[e+356>>2]=0.0;return e|0}function Lj(a,b,c){a=+a;b=+b;c=+c;var d=0.0,e=0.0,f=0;if(b>=c)return +a;if(a3.1415927410125732)d=d+-6.2831854820251465}else d=d+6.2831854820251465;e=+B(+d);d=+bh(c-a,6.2831854820251465);if(!(d<-3.1415927410125732)){if(d>3.1415927410125732)d=d+-6.2831854820251465}else d=d+6.2831854820251465;f=e<+B(+d);a=f?a:a+6.2831854820251465;return +a}if(!(a>c))return +a;d=+bh(a-c,6.2831854820251465);if(!(d<-3.1415927410125732)){if(d>3.1415927410125732)d=d+-6.2831854820251465}else d=d+6.2831854820251465;e=+B(+d);d=+bh(a-b,6.2831854820251465);if(!(d<-3.1415927410125732)){if(d>3.1415927410125732)d=d+-6.2831854820251465}else d=d+6.2831854820251465;f=+B(+d)>2]|0)+68>>2]&127](e,b,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];if(!(+gb[c[(c[b>>2]|0)+48>>2]&15](b)!=0.0)){l=e;return}i=+g[d>>2];h=+g[d+4>>2];f=+g[d+8>>2];k=i*i+h*h+f*f<1.4210854715202004e-14?-1.0:i;j=i*i+h*h+f*f<1.4210854715202004e-14?-1.0:h;f=i*i+h*h+f*f<1.4210854715202004e-14?-1.0:f;h=1.0/+C(+(f*f+(k*k+j*j)));i=+gb[c[(c[b>>2]|0)+48>>2]&15](b);g[a>>2]=+g[a>>2]+i*h*k;g[a+4>>2]=i*h*j+ +g[a+4>>2];g[a+8>>2]=i*h*f+ +g[a+8>>2];l=e;return}function Nj(a,b,d){a=a|0;b=+b;d=+d;var e=0.0,f=0.0,h=0.0;f=+g[a+692>>2];do if(f>0.0){h=+g[a+688>>2];e=+bh(b-h,6.2831854820251465);if(!(e<-3.1415927410125732)){if(e>3.1415927410125732)e=e+-6.2831854820251465}else e=e+6.2831854820251465;if(!(!(e<-f)&e<=f))if(e>0.0){b=+bh(f+h,6.2831854820251465);if(b<-3.1415927410125732){b=b+6.2831854820251465;break}if(!(b>3.1415927410125732))break;b=b+-6.2831854820251465;break}else{b=+bh(h-f,6.2831854820251465);if(b<-3.1415927410125732){b=b+6.2831854820251465;break}if(!(b>3.1415927410125732))break;b=b+-6.2831854820251465;break}}while(0);g[a+680>>2]=(b-+Ri(a,(c[a+28>>2]|0)+4|0,(c[a+32>>2]|0)+4|0))/d;return}function Oj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,j=0.0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0;k=c[b+96>>2]|0;if((k|0)<=0){c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}l=+g[b+12>>2];o=+g[d>>2]*l;m=+g[b+16>>2];p=+g[d+4>>2]*m;n=+g[b+20>>2];j=+g[d+8>>2]*n;d=c[b+104>>2]|0;f=0;h=-3402823466385288598117041.0e14;i=-1;while(1){e=o*+g[d+(f<<4)>>2]+p*+g[d+(f<<4)+4>>2]+j*+g[d+(f<<4)+8>>2];b=e>h;i=b?f:i;f=f+1|0;if((f|0)==(k|0))break;else h=b?e:h}o=+g[d+(i<<4)+4>>2]*m;p=+g[d+(i<<4)+8>>2]*n;g[a>>2]=+g[d+(i<<4)>>2]*l;g[a+4>>2]=o;g[a+8>>2]=p;g[a+12>>2]=0.0;return}function Pj(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do switch(b|0){case 2:{if((c|0)<1){d=+g[a+232>>2];break a}if((c|0)<3){d=+g[a+264>>2];break a}if((c|0)==3){d=+g[a+248>>2];break a}if((c|0)<6)d=+g[a+280>>2];else d=3402823466385288598117041.0e14;break}case 3:{if((c|0)<1){d=+g[a+212>>2];break a}if((c|0)==3)d=+g[a+228>>2];else d=3402823466385288598117041.0e14;break}case 4:{if((c|0)<1){d=+g[a+244>>2];break a}if((c|0)<3){d=+g[a+276>>2];break a}if((c|0)==3){d=+g[a+260>>2];break a}if((c|0)<6)d=+g[a+292>>2];else d=3402823466385288598117041.0e14;break}default:d=3402823466385288598117041.0e14}while(0);return +d}function Qj(){var b=0;b=es()|0;c[b>>2]=4952;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;a[b+40>>0]=1;c[b+36>>2]=0;c[b+28>>2]=0;c[b+32>>2]=0;a[b+60>>0]=1;c[b+56>>2]=0;c[b+48>>2]=0;c[b+52>>2]=0;a[b+80>>0]=1;c[b+76>>2]=0;c[b+68>>2]=0;c[b+72>>2]=0;a[b+100>>0]=1;c[b+96>>2]=0;c[b+88>>2]=0;c[b+92>>2]=0;a[b+120>>0]=1;c[b+116>>2]=0;c[b+108>>2]=0;c[b+112>>2]=0;a[b+140>>0]=1;c[b+136>>2]=0;c[b+128>>2]=0;c[b+132>>2]=0;a[b+160>>0]=1;c[b+156>>2]=0;c[b+148>>2]=0;c[b+152>>2]=0;a[b+180>>0]=1;c[b+176>>2]=0;c[b+168>>2]=0;c[b+172>>2]=0;c[b+192>>2]=0;return b|0}function Rj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;c[6203]=(c[6203]|0)+1;e=(c[b+12>>2]|0)>(c[d+12>>2]|0);f=c[(e?d:b)+12>>2]|0;e=c[(e?b:d)+12>>2]|0;b=((e<<16|f)+~((e<<16|f)<<15)>>10^(e<<16|f)+~((e<<16|f)<<15))*9|0;b=((b>>6^b)+~((b>>6^b)<<11)>>16^(b>>6^b)+~((b>>6^b)<<11))&(c[a+12>>2]|0)+-1;if((b|0)>=(c[a+36>>2]|0)){g=0;return g|0}b=c[(c[a+44>>2]|0)+(b<<2)>>2]|0;if((b|0)==-1){g=0;return g|0}d=c[a+16>>2]|0;while(1){if((c[(c[d+(b<<4)>>2]|0)+12>>2]|0)==(f|0)?(c[(c[d+(b<<4)+4>>2]|0)+12>>2]|0)==(e|0):0)break;b=c[(c[a+64>>2]|0)+(b<<2)>>2]|0;if((b|0)==-1){b=0;g=8;break}}if((g|0)==8)return b|0;g=d+(b<<4)|0;return g|0}function Sj(b){b=b|0;var d=0;c[b>>2]=4016;if(a[b+456>>0]|0?(d=c[b+452>>2]|0,Ab[c[c[d>>2]>>2]&511](d),d=c[b+452>>2]|0,d|0):0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+420>>2]|0;if(d|0){if(a[b+424>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+420>>2]=0}a[b+424>>0]=1;c[b+420>>2]=0;c[b+412>>2]=0;c[b+416>>2]=0;d=c[b+336>>2]|0;if(!d){a[b+340>>0]=1;c[b+336>>2]=0;c[b+328>>2]=0;d=b+332|0;c[d>>2]=0;Cg(b);return}if(a[b+340>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+336>>2]=0;a[b+340>>0]=1;c[b+336>>2]=0;c[b+328>>2]=0;d=b+332|0;c[d>>2]=0;Cg(b);return}function Tj(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0;d=l;l=l+64|0;c[d+48>>2]=0;c[d+48+4>>2]=0;c[d+48+8>>2]=0;c[d+48+12>>2]=0;i=+g[b>>2];f=+g[b+4>>2];m=+g[b+8>>2];j=+g[b+12>>2];h=i*(2.0/(i*i+f*f+m*m+j*j));e=f*(2.0/(i*i+f*f+m*m+j*j));k=m*(2.0/(i*i+f*f+m*m+j*j));g[d>>2]=1.0-(f*e+m*k);g[d+4>>2]=i*e-j*k;g[d+8>>2]=i*k+j*e;g[d+12>>2]=0.0;g[d+16>>2]=i*e+j*k;g[d+20>>2]=1.0-(i*h+m*k);g[d+24>>2]=f*k-j*h;g[d+28>>2]=0.0;g[d+32>>2]=i*k-j*e;g[d+36>>2]=f*k+j*h;g[d+40>>2]=1.0-(i*h+f*e);g[d+44>>2]=0.0;Bd(a,d);l=d;return}function Uj(a,b,d){a=a|0;b=+b;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;k=+g[a+28>>2];f=+g[a+32>>2];i=+g[a+36>>2];j=+gb[c[(c[a>>2]|0)+48>>2]&15](a);e=+gb[c[(c[a>>2]|0)+48>>2]&15](a);i=+gb[c[(c[a>>2]|0)+48>>2]&15](a)+i;switch(c[a+52>>2]|0){case 0:{k=b*.25*(e+f)*(e+f)+b/12.0*(j+k)*(j+k)*4.0;h=k;f=b*.5*(e+f)*(e+f);e=k;break}case 2:{h=b*.5*(j+k)*(j+k);f=b*.25*(j+k)*(j+k)+b/12.0*i*i*4.0;e=b*.25*(j+k)*(j+k)+b/12.0*i*i*4.0;break}default:{f=b*.25*(j+k)*(j+k)+b/12.0*(e+f)*(e+f)*4.0;h=f;e=b*.5*(j+k)*(j+k)}}g[d>>2]=f;g[d+4>>2]=e;g[d+8>>2]=h;g[d+12>>2]=0.0;return}function Vj(a,b){a=a|0;b=+b;var d=0,e=0,f=0;e=l;l=l+16|0;bj(12092);if((c[a+280>>2]|0)>0){d=0;do{f=c[(c[a+288>>2]|0)+(d<<2)>>2]|0;Hb[c[(c[f>>2]|0)+8>>2]&7](f,a,b);d=d+1|0}while((d|0)<(c[a+280>>2]|0))}d=c[2405]|0;f=(c[d+16>>2]|0)+-1|0;c[d+16>>2]=f;if(f|0){l=e;return}do if(c[d+4>>2]|0){Za(e|0,0)|0;f=c[6471]|0;g[d+8>>2]=+g[d+8>>2]+ +(((c[e+4>>2]|0)-(c[f+4>>2]|0)+(((c[e>>2]|0)-(c[f>>2]|0)|0)*1e6|0)-(c[d+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[d+16>>2]|0)){d=c[2405]|0;break}else{l=e;return}}while(0);c[2405]=c[d+20>>2];l=e;return} +function yd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0;h=l;l=l+240|0;if(!(c[b+16>>2]|0)){K=c[b+12>>2]|0;b=c[b+20>>2]|0;x=+g[d>>2];q=+g[d+4>>2];u=+g[d+8>>2];j=+g[d+16>>2];r=+g[d+20>>2];i=+g[d+24>>2];m=+g[d+32>>2];s=+g[d+36>>2];n=+g[d+40>>2];F=+g[d+48>>2];E=+g[d+52>>2];D=+g[d+56>>2];J=+g[e>>2];I=+g[e+16>>2];z=+g[e+32>>2];H=+g[e+4>>2];G=+g[e+20>>2];y=+g[e+36>>2];v=+g[e+8>>2];k=+g[e+24>>2];p=+g[e+40>>2];C=-+g[e+48>>2];B=-+g[e+52>>2];w=-+g[e+56>>2];d=c[(c[K>>2]|0)+64>>2]|0;A=-+g[b+48>>2];t=-+g[b+52>>2];o=-+g[b+56>>2];g[h+16>>2]=(x*J+j*I+m*z)*A+(x*H+j*G+m*y)*t+(x*v+j*k+m*p)*o;g[h+16+4>>2]=(q*J+r*I+s*z)*A+(q*H+r*G+s*y)*t+(q*v+r*k+s*p)*o;g[h+16+8>>2]=(u*J+i*I+n*z)*A+(u*H+i*G+n*y)*t+(u*v+i*k+n*p)*o;g[h+16+12>>2]=0.0;Kb[d&127](h+152|0,K,h+16|0);o=+g[h+152>>2];t=+g[h+152+4>>2];A=+g[h+152+8>>2];z=F*J+E*I+D*z+(J*C+I*B+z*w)+((x*J+j*I+m*z)*o+(q*J+r*I+s*z)*t+(u*J+i*I+n*z)*A);y=F*H+E*G+D*y+(H*C+G*B+y*w)+((x*H+j*G+m*y)*o+(q*H+r*G+s*y)*t+(u*H+i*G+n*y)*A);A=F*v+E*k+D*p+(v*C+k*B+p*w)+((x*v+j*k+m*p)*o+(q*v+r*k+s*p)*t+(u*v+i*k+n*p)*A);p=+g[b+48>>2];n=+g[b+52>>2];k=+g[b+56>>2];i=k*A+(p*z+n*y)-+g[b+64>>2];v=+g[e>>2];u=+g[e+4>>2];t=+g[e+8>>2];s=+g[e+16>>2];r=+g[e+20>>2];q=+g[e+24>>2];o=+g[e+32>>2];m=+g[e+36>>2];j=+g[e+40>>2];x=(z-p*i)*s+(y-n*i)*r+(A-k*i)*q+ +g[e+52>>2];w=(z-p*i)*o+(y-n*i)*m+(A-k*i)*j+ +g[e+56>>2];g[h+16>>2]=t*(A-k*i)+(v*(z-p*i)+u*(y-n*i))+ +g[e+48>>2];g[h+16+4>>2]=x;g[h+16+8>>2]=w;g[h+16+12>>2]=0.0;g[h>>2]=v*p+u*n+t*k;g[h+4>>2]=p*s+n*r+k*q;g[h+8>>2]=p*o+n*m+k*j;g[h+12>>2]=0.0;Lb[c[(c[f>>2]|0)+16>>2]&15](f,h,h+16|0,i);l=h;return}else{N=c[b+4>>2]|0;a[N+312>>0]=0;c[N>>2]=0;a[N+356>>0]=1;c[N+292>>2]=1566444395;c[N+296>>2]=1566444395;c[N+300>>2]=1566444395;g[N+304>>2]=0.0;c[N+336>>2]=0;c[N+336+4>>2]=0;c[N+336+8>>2]=0;c[N+336+12>>2]=0;a[N+336+16>>0]=0;a[N+332>>0]=a[N+332>>0]&-16;N=c[b+12>>2]|0;M=c[b+16>>2]|0;L=c[N+4>>2]|0;K=c[M+4>>2]|0;I=+gb[c[(c[N>>2]|0)+48>>2]&15](N);O=c[b+16>>2]|0;J=+gb[c[(c[O>>2]|0)+48>>2]&15](O);O=c[b+4>>2]|0;b=c[b+8>>2]|0;c[h+152>>2]=9400;c[h+152+4>>2]=0;c[h+152+8>>2]=1065353216;c[h+152+12>>2]=0;g[h+152+16>>2]=0.0;c[h+152+20>>2]=b;c[h+152+24>>2]=O;c[h+152+28>>2]=N;c[h+152+32>>2]=M;c[h+152+36>>2]=L;c[h+152+40>>2]=K;g[h+152+44>>2]=I;g[h+152+48>>2]=J;a[h+152+52>>0]=0;c[h+152+60>>2]=-1;c[h+152+72>>2]=1;c[h+152+76>>2]=1;g[h+16+128>>2]=999999984306749440.0;c[h+16>>2]=c[d>>2];c[h+16+4>>2]=c[d+4>>2];c[h+16+8>>2]=c[d+8>>2];c[h+16+12>>2]=c[d+12>>2];c[h+16+16>>2]=c[d+16>>2];c[h+16+16+4>>2]=c[d+16+4>>2];c[h+16+16+8>>2]=c[d+16+8>>2];c[h+16+16+12>>2]=c[d+16+12>>2];c[h+16+32>>2]=c[d+32>>2];c[h+16+32+4>>2]=c[d+32+4>>2];c[h+16+32+8>>2]=c[d+32+8>>2];c[h+16+32+12>>2]=c[d+32+12>>2];c[h+16+48>>2]=c[d+48>>2];c[h+16+48+4>>2]=c[d+48+4>>2];c[h+16+48+8>>2]=c[d+48+8>>2];c[h+16+48+12>>2]=c[d+48+12>>2];c[h+16+64>>2]=c[e>>2];c[h+16+64+4>>2]=c[e+4>>2];c[h+16+64+8>>2]=c[e+8>>2];c[h+16+64+12>>2]=c[e+12>>2];c[h+16+80>>2]=c[e+16>>2];c[h+16+80+4>>2]=c[e+16+4>>2];c[h+16+80+8>>2]=c[e+16+8>>2];c[h+16+80+12>>2]=c[e+16+12>>2];c[h+16+96>>2]=c[e+32>>2];c[h+16+96+4>>2]=c[e+32+4>>2];c[h+16+96+8>>2]=c[e+32+8>>2];c[h+16+96+12>>2]=c[e+32+12>>2];c[h+16+112>>2]=c[e+48>>2];c[h+16+112+4>>2]=c[e+48+4>>2];c[h+16+112+8>>2]=c[e+48+8>>2];c[h+16+112+12>>2]=c[e+48+12>>2];Bc(h+152|0,h+16|0,f,0,0);l=h;return}}function zd(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0;i=l;l=l+464|0;bj(15915);c[i+128>>2]=c[d>>2];c[i+128+4>>2]=c[d+4>>2];c[i+128+8>>2]=c[d+8>>2];c[i+128+12>>2]=c[d+12>>2];c[i+128+16>>2]=c[d+16>>2];c[i+128+16+4>>2]=c[d+16+4>>2];c[i+128+16+8>>2]=c[d+16+8>>2];c[i+128+16+12>>2]=c[d+16+12>>2];c[i+128+32>>2]=c[d+32>>2];c[i+128+32+4>>2]=c[d+32+4>>2];c[i+128+32+8>>2]=c[d+32+8>>2];c[i+128+32+12>>2]=c[d+32+12>>2];k=i+128+48|0;c[k>>2]=c[d+48>>2];c[k+4>>2]=c[d+48+4>>2];c[k+8>>2]=c[d+48+8>>2];c[k+12>>2]=c[d+48+12>>2];c[i+64>>2]=c[e>>2];c[i+64+4>>2]=c[e+4>>2];c[i+64+8>>2]=c[e+8>>2];c[i+64+12>>2]=c[e+12>>2];c[i+64+16>>2]=c[e+16>>2];c[i+64+16+4>>2]=c[e+16+4>>2];c[i+64+16+8>>2]=c[e+16+8>>2];c[i+64+16+12>>2]=c[e+16+12>>2];c[i+64+32>>2]=c[e+32>>2];c[i+64+32+4>>2]=c[e+32+4>>2];c[i+64+32+8>>2]=c[e+32+8>>2];c[i+64+32+12>>2]=c[e+32+12>>2];j=i+64+48|0;c[j>>2]=c[e+48>>2];c[j+4>>2]=c[e+48+4>>2];c[j+8>>2]=c[e+48+8>>2];c[j+12>>2]=c[e+48+12>>2];vf(i+128|0,i+64|0,i+256|0,i+192|0);t=+g[i+192>>2];m=t*+g[i+256+4>>2];r=t*+g[i+256+8>>2];g[i+16>>2]=+g[i+256>>2]*t;g[i+16+4>>2]=m;g[i+16+8>>2]=r;g[i+16+12>>2]=0.0;c[i+256>>2]=0;c[i+256+4>>2]=0;c[i+256+8>>2]=0;c[i+256+12>>2]=0;c[i+192+48>>2]=0;c[i+192+48+4>>2]=0;c[i+192+48+8>>2]=0;c[i+192+48+12>>2]=0;lh(i+128|0,i);r=+g[i>>2];m=+g[i+4>>2];t=+g[i+8>>2];q=+g[i+12>>2];o=r*(2.0/(r*r+m*m+t*t+q*q));n=m*(2.0/(r*r+m*m+t*t+q*q));p=t*(2.0/(r*r+m*m+t*t+q*q));g[i+192>>2]=1.0-(m*n+t*p);g[i+192+4>>2]=r*n-q*p;g[i+192+8>>2]=r*p+q*n;g[i+192+12>>2]=0.0;g[i+192+16>>2]=r*n+q*p;g[i+192+20>>2]=1.0-(r*o+t*p);g[i+192+24>>2]=m*p-q*o;g[i+192+28>>2]=0.0;g[i+192+32>>2]=r*p-q*n;g[i+192+36>>2]=m*p+q*o;g[i+192+40>>2]=1.0-(r*o+m*n);g[i+192+44>>2]=0.0;_g(b,i+192|0,i+256|0,i+16|0,i+48|0,i+32|0);c[i+256>>2]=6128;c[i+256+36>>2]=c[d>>2];c[i+256+36+4>>2]=c[d+4>>2];c[i+256+36+8>>2]=c[d+8>>2];c[i+256+36+12>>2]=c[d+12>>2];c[i+256+52>>2]=c[d+16>>2];c[i+256+52+4>>2]=c[d+16+4>>2];c[i+256+52+8>>2]=c[d+16+8>>2];c[i+256+52+12>>2]=c[d+16+12>>2];c[i+256+68>>2]=c[d+32>>2];c[i+256+68+4>>2]=c[d+32+4>>2];c[i+256+68+8>>2]=c[d+32+8>>2];c[i+256+68+12>>2]=c[d+32+12>>2];s=i+256+84|0;c[s>>2]=c[d+48>>2];c[s+4>>2]=c[d+48+4>>2];c[s+8>>2]=c[d+48+8>>2];c[s+12>>2]=c[d+48+12>>2];c[i+256+100>>2]=c[e>>2];c[i+256+100+4>>2]=c[e+4>>2];c[i+256+100+8>>2]=c[e+8>>2];c[i+256+100+12>>2]=c[e+12>>2];c[i+256+116>>2]=c[e+16>>2];c[i+256+116+4>>2]=c[e+16+4>>2];c[i+256+116+8>>2]=c[e+16+8>>2];c[i+256+116+12>>2]=c[e+16+12>>2];c[i+256+132>>2]=c[e+32>>2];c[i+256+132+4>>2]=c[e+32+4>>2];c[i+256+132+8>>2]=c[e+32+8>>2];c[i+256+132+12>>2]=c[e+32+12>>2];d=i+256+148|0;c[d>>2]=c[e+48>>2];c[d+4>>2]=c[e+48+4>>2];c[d+8>>2]=c[e+48+8>>2];c[d+12>>2]=c[e+48+12>>2];c[i+256+180>>2]=a;c[i+256+184>>2]=f;g[i+256+188>>2]=h;c[i+256+192>>2]=b;n=+g[d>>2]-+g[s>>2];m=+g[i+256+152>>2]-+g[i+256+88>>2];o=+g[i+256+156>>2]-+g[i+256+92>>2];h=1.0/+C(+(n*n+m*m+o*o));r=n*h==0.0?999999984306749440.0:1.0/(n*h);g[i+256+4>>2]=r;q=m*h==0.0?999999984306749440.0:1.0/(m*h);g[i+256+8>>2]=q;p=o*h==0.0?999999984306749440.0:1.0/(o*h);g[i+256+12>>2]=p;c[i+256+20>>2]=r<0.0&1;c[i+256+24>>2]=q<0.0&1;c[i+256+28>>2]=p<0.0&1;g[i+256+32>>2]=o*o*h+(n*n*h+m*m*h);b=c[a+68>>2]|0;Tb[c[(c[b>>2]|0)+24>>2]&7](b,k,j,i+256|0,i+48|0,i+32|0);b=c[2405]|0;a=(c[b+16>>2]|0)+-1|0;c[b+16>>2]=a;if(a|0){l=i;return}do if(c[b+4>>2]|0){Za(i+256|0,0)|0;s=c[6471]|0;g[b+8>>2]=+g[b+8>>2]+ +(((c[i+256+4>>2]|0)-(c[s+4>>2]|0)+(((c[i+256>>2]|0)-(c[s>>2]|0)|0)*1e6|0)-(c[b+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[b+16>>2]|0)){b=c[2405]|0;break}else{l=i;return}}while(0);c[2405]=c[b+20>>2];l=i;return}function Ad(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0;t=l;l=l+32|0;g=qb[c[(c[d>>2]|0)+28>>2]&127](d)|0;c[e+20>>2]=g;c[e>>2]=0;if(!g){s=d+4|0;f=e+4|0;s=c[s>>2]|0;c[f>>2]=s;f=d+8|0;f=c[f>>2]|0;s=e+8|0;c[s>>2]=f;s=d+12|0;s=c[s>>2]|0;f=e+12|0;c[f>>2]=s;f=d+16|0;f=c[f>>2]|0;d=e+16|0;c[d>>2]=f;l=t;return 19540}s=ub[c[(c[f>>2]|0)+16>>2]&63](f,32,g)|0;g=c[s+8>>2]|0;c[e>>2]=sb[c[(c[f>>2]|0)+28>>2]&31](f,g)|0;r=qb[c[(c[d>>2]|0)+28>>2]&127](d)|0;a:do if((r|0)>0){q=0;while(1){Wb[c[(c[d>>2]|0)+16>>2]&3](d,t+28|0,t+4|0,t+16|0,t+8|0,t+24|0,t+20|0,t,t+12|0,q);i=c[t>>2]|0;c[g+24>>2]=i;c[g+28>>2]=c[t+4>>2];j=g+12|0;m=g+16|0;p=g+4|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;c[g+16>>2]=0;c[g+20>>2]=0;switch(c[t+12>>2]|0){case 2:{if(i|0){k=ub[c[(c[f>>2]|0)+16>>2]&63](f,4,i*3|0)|0;i=c[k+8>>2]|0;c[g+8>>2]=sb[c[(c[f>>2]|0)+28>>2]&31](f,i)|0;if((c[t>>2]|0)>0){j=c[t+24>>2]|0;m=0;do{n=j+(O(c[t+20>>2]|0,m)|0)|0;o=m*3|0;c[i+(o<<2)>>2]=c[n>>2];c[i+(o+1<<2)>>2]=c[n+4>>2];c[i+(o+2<<2)>>2]=c[n+8>>2];m=m+1|0}while((m|0)<(c[t>>2]|0))}Rb[c[(c[f>>2]|0)+20>>2]&31](f,k,19421,1497453121,c[k+8>>2]|0)}break}case 3:{if(i|0){o=ub[c[(c[f>>2]|0)+16>>2]&63](f,8,i)|0;n=c[o+8>>2]|0;c[j>>2]=sb[c[(c[f>>2]|0)+28>>2]&31](f,n)|0;i=c[t>>2]|0;if((i|0)>0){j=c[t+24>>2]|0;k=c[t+20>>2]|0;m=0;do{u=j+(O(k,m)|0)|0;b[n+(m<<3)>>1]=b[u>>1]|0;b[n+(m<<3)+2>>1]=b[u+2>>1]|0;b[n+(m<<3)+4>>1]=b[u+4>>1]|0;m=m+1|0}while((m|0)!=(i|0))}Rb[c[(c[f>>2]|0)+20>>2]&31](f,o,19436,1497453121,c[o+8>>2]|0)}break}case 5:{if(i|0){k=ub[c[(c[f>>2]|0)+16>>2]&63](f,4,i)|0;j=c[k+8>>2]|0;c[m>>2]=sb[c[(c[f>>2]|0)+28>>2]&31](f,j)|0;if((c[t>>2]|0)>0){i=0;do{u=(c[t+24>>2]|0)+(O(c[t+20>>2]|0,i)|0)|0;a[j+(i<<2)>>0]=a[u>>0]|0;a[j+(i<<2)+1>>0]=a[u+1>>0]|0;a[j+(i<<2)+2>>0]=a[u+2>>0]|0;i=i+1|0}while((i|0)<(c[t>>2]|0))}Rb[c[(c[f>>2]|0)+20>>2]&31](f,k,19463,1497453121,c[k+8>>2]|0)}break}default:{}}switch(c[t+16>>2]|0){case 0:{i=c[t+4>>2]|0;if(i|0){n=ub[c[(c[f>>2]|0)+16>>2]&63](f,16,i)|0;i=c[n+8>>2]|0;c[g>>2]=sb[c[(c[f>>2]|0)+28>>2]&31](f,i)|0;j=c[t+4>>2]|0;if((j|0)>0){k=c[t+28>>2]|0;m=c[t+8>>2]|0;o=0;do{u=k+(O(m,o)|0)|0;c[i+(o<<4)>>2]=c[u>>2];c[i+(o<<4)+4>>2]=c[u+4>>2];c[i+(o<<4)+8>>2]=c[u+8>>2];o=o+1|0}while((o|0)!=(j|0))}Rb[c[(c[f>>2]|0)+20>>2]&31](f,n,19486,1497453121,c[n+8>>2]|0)}break}case 1:{i=c[t+4>>2]|0;if(i|0){o=ub[c[(c[f>>2]|0)+16>>2]&63](f,32,i)|0;n=c[o+8>>2]|0;c[p>>2]=sb[c[(c[f>>2]|0)+28>>2]&31](f,n)|0;i=c[t+4>>2]|0;if((i|0)>0){j=c[t+28>>2]|0;k=c[t+8>>2]|0;m=0;do{u=j+(O(k,m)|0)|0;h[n+(m<<5)>>3]=+h[u>>3];h[n+(m<<5)+8>>3]=+h[u+8>>3];h[n+(m<<5)+16>>3]=+h[u+16>>3];m=m+1|0}while((m|0)!=(i|0))}Rb[c[(c[f>>2]|0)+20>>2]&31](f,o,19505,1497453121,c[o+8>>2]|0)}break}default:{}}Gb[c[(c[d>>2]|0)+24>>2]&127](d,q);q=q+1|0;if((q|0)==(r|0)){g=f;break a}else g=g+32|0}}else g=f;while(0);Rb[c[(c[g>>2]|0)+20>>2]&31](f,s,19525,1497453121,c[s+8>>2]|0);f=d+4|0;u=e+4|0;f=c[f>>2]|0;c[u>>2]=f;u=d+8|0;u=c[u>>2]|0;f=e+8|0;c[f>>2]=u;f=d+12|0;f=c[f>>2]|0;u=e+12|0;c[u>>2]=f;d=d+16|0;d=c[d>>2]|0;u=e+16|0;c[u>>2]=d;l=t;return 19540}function Bd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0;i=c[a+192>>2]|0;n=+gb[c[(c[i>>2]|0)+48>>2]&15](i);i=c[a+712>>2]|0;if((i|0)>0){o=0;do{j=c[a+720>>2]|0;f=j+(o*104|0)+8|0;q=+g[f>>2];h=j+(o*104|0)+12|0;p=+g[h>>2];d=j+(o*104|0)+16|0;l=+g[d>>2];k=q*+g[b>>2]+p*+g[b+4>>2]+l*+g[b+8>>2]+ +g[b+48>>2];m=q*+g[b+16>>2]+p*+g[b+20>>2]+l*+g[b+24>>2]+ +g[b+52>>2];l=q*+g[b+32>>2]+p*+g[b+36>>2]+l*+g[b+40>>2]+ +g[b+56>>2];g[f>>2]=k;g[h>>2]=m;g[d>>2]=l;g[j+(o*104|0)+20>>2]=0.0;d=j+(o*104|0)+24|0;p=+g[d>>2];h=j+(o*104|0)+28|0;q=+g[h>>2];f=j+(o*104|0)+32|0;r=+g[f>>2];s=p*+g[b+16>>2]+q*+g[b+20>>2]+r*+g[b+24>>2]+ +g[b+52>>2];t=p*+g[b+32>>2]+q*+g[b+36>>2]+r*+g[b+40>>2]+ +g[b+56>>2];g[d>>2]=p*+g[b>>2]+q*+g[b+4>>2]+r*+g[b+8>>2]+ +g[b+48>>2];g[h>>2]=s;g[f>>2]=t;g[j+(o*104|0)+36>>2]=0.0;f=j+(o*104|0)+72|0;t=+g[f>>2];h=j+(o*104|0)+76|0;s=+g[h>>2];d=j+(o*104|0)+80|0;r=+g[d>>2];q=t*+g[b+16>>2]+s*+g[b+20>>2]+r*+g[b+24>>2];p=t*+g[b+32>>2]+s*+g[b+36>>2]+r*+g[b+40>>2];g[f>>2]=+g[b>>2]*t+ +g[b+4>>2]*s+ +g[b+8>>2]*r;g[h>>2]=q;g[d>>2]=p;g[j+(o*104|0)+84>>2]=0.0;j=c[j+(o*104|0)+96>>2]|0;d=Sg(a+928|0,j)|0;a:do if(d){f=c[a+936>>2]|0;if((f|0)<=-1){d=c[a+928>>2]|0;break}if(f){h=0;e=d;while(1){d=c[e+32>>2]|0;h=h+1|0;if(!d){d=e;break a}if((h|0)>=(f|0))break;else e=d}}}else d=0;while(0);g[j>>2]=k-n;g[j+4>>2]=m-n;g[j+8>>2]=l-n;g[j+12>>2]=0.0;g[j+16>>2]=n+k;g[j+20>>2]=n+m;g[j+24>>2]=n+l;g[j+28>>2]=0.0;af(a+928|0,d,j);o=o+1|0}while((o|0)!=(i|0))}lg(a);d=c[a+928>>2]|0;if(d){o=c[a+192>>2]|0;r=+gb[c[(c[o>>2]|0)+48>>2]&15](o);t=+g[d+4>>2]-r;s=+g[d+8>>2]-r;g[a+892>>2]=+g[d>>2]-r;g[a+896>>2]=t;g[a+900>>2]=s;g[a+904>>2]=0.0;s=r+ +g[d+20>>2];t=r+ +g[d+24>>2];g[a+908>>2]=r+ +g[d+16>>2];g[a+912>>2]=s;g[a+916>>2]=t;g[a+920>>2]=0.0;d=c[a+188>>2]|0;if(d|0){o=c[a+684>>2]|0;j=c[o+32>>2]|0;Rb[c[(c[j>>2]|0)+16>>2]&31](j,d,a+892|0,a+908|0,c[o+36>>2]|0)}}else{c[a+892>>2]=0;c[a+892+4>>2]=0;c[a+892+8>>2]=0;c[a+892+12>>2]=0;c[a+892+16>>2]=0;c[a+892+20>>2]=0;c[a+892+24>>2]=0;c[a+892+28>>2]=0}e=c[a+732>>2]|0;if((e|0)<=0){Lf(a);o=a+1148|0;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];o=a+1164|0;j=b+16|0;c[o>>2]=c[j>>2];c[o+4>>2]=c[j+4>>2];c[o+8>>2]=c[j+8>>2];c[o+12>>2]=c[j+12>>2];o=a+1180|0;j=b+32|0;c[o>>2]=c[j>>2];c[o+4>>2]=c[j+4>>2];c[o+8>>2]=c[j+8>>2];c[o+12>>2]=c[j+12>>2];a=a+1196|0;b=b+48|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}f=c[a+740>>2]|0;d=0;do{j=c[f+(d*52|0)+8>>2]|0;o=c[f+(d*52|0)+12>>2]|0;r=+g[j+8>>2]-+g[o+8>>2];s=+g[j+12>>2]-+g[o+12>>2];t=+g[j+16>>2]-+g[o+16>>2];t=+C(+(r*r+s*s+t*t));g[f+(d*52|0)+16>>2]=t;g[f+(d*52|0)+28>>2]=t*t;d=d+1|0}while((d|0)!=(e|0));d=0;do{g[f+(d*52|0)+24>>2]=(+g[(c[f+(d*52|0)+8>>2]|0)+88>>2]+ +g[(c[f+(d*52|0)+12>>2]|0)+88>>2])/+g[(c[f+(d*52|0)+4>>2]|0)+4>>2];d=d+1|0}while((d|0)!=(e|0));Lf(a);o=a+1148|0;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];o=a+1164|0;j=b+16|0;c[o>>2]=c[j>>2];c[o+4>>2]=c[j+4>>2];c[o+8>>2]=c[j+8>>2];c[o+12>>2]=c[j+12>>2];o=a+1180|0;j=b+32|0;c[o>>2]=c[j>>2];c[o+4>>2]=c[j+4>>2];c[o+8>>2]=c[j+8>>2];c[o+12>>2]=c[j+12>>2];a=a+1196|0;b=b+48|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Cd(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,B=0;x=l;l=l+64|0;if((h|0)>0){j=0;b=0;do{w=c[f+(j<<2)>>2]|0;b=(w|0)>(b|0)?w:b;j=j+1|0}while((j|0)<(h*3|0))}else b=0;t=b+1|0;k=O(t,t)|0;if(!k)j=0;else{c[6472]=(c[6472]|0)+1;j=ic(k+19|0)|0;if(!j)j=0;else{c[(j+4+15&-16)+-4>>2]=j;j=j+4+15&-16}Nk(j|0,0,k|0)|0}if((b|0)>-1){c[6472]=(c[6472]|0)+1;b=ic((t<<4|3)+16|0)|0;if(!b)m=0;else{c[(b+4+15&-16)+-4>>2]=b;m=b+4+15&-16}b=0;do{w=m+(b<<4)|0;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];c[w+12>>2]=c[x+12>>2];b=b+1|0}while((b|0)!=(t|0));b=0;k=0;while(1){v=c[e+(b+1<<2)>>2]|0;w=c[e+(b+2<<2)>>2]|0;c[m+(k<<4)>>2]=c[e+(b<<2)>>2];c[m+(k<<4)+4>>2]=v;c[m+(k<<4)+8>>2]=w;g[m+(k<<4)+12>>2]=0.0;b=b+3|0;if((b|0)>=(t*3|0)){w=m;v=m;break}else k=k+1|0}}else{w=0;v=0}c[6472]=(c[6472]|0)+1;b=ic(1271)|0;if(!b)u=0;else{c[(b+4+15&-16)+-4>>2]=b;u=b+4+15&-16}qc(u,d,t,v,0);if((h|0)>0){q=u+720|0;s=u+732|0;r=u+740|0;e=u+924|0;p=0;do{d=c[f+(p<<2)>>2]|0;n=c[f+(p+1<<2)>>2]|0;o=c[f+(p+2<<2)>>2]|0;m=O(d,t)|0;b=j+(m+o)|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[j+(d+(O(o,t)|0))>>0]=1;B=c[q>>2]|0;Rh(u,0);k=(c[s>>2]|0)+-1|0;b=c[r>>2]|0;c[b+(k*52|0)+8>>2]=B+(o*104|0);c[b+(k*52|0)+12>>2]=B+(d*104|0);A=+g[B+(o*104|0)+8>>2]-+g[B+(d*104|0)+8>>2];z=+g[B+(o*104|0)+12>>2]-+g[B+(d*104|0)+12>>2];y=+g[B+(o*104|0)+16>>2]-+g[B+(d*104|0)+16>>2];g[b+(k*52|0)+16>>2]=+C(+(A*A+z*z+y*y));a[e>>0]=1}k=O(n,t)|0;b=j+(k+d)|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[j+(n+m)>>0]=1;b=c[q>>2]|0;Rh(u,0);B=(c[s>>2]|0)+-1|0;m=c[r>>2]|0;c[m+(B*52|0)+8>>2]=b+(d*104|0);c[m+(B*52|0)+12>>2]=b+(n*104|0);y=+g[b+(d*104|0)+8>>2]-+g[b+(n*104|0)+8>>2];z=+g[b+(d*104|0)+12>>2]-+g[b+(n*104|0)+12>>2];A=+g[b+(d*104|0)+16>>2]-+g[b+(n*104|0)+16>>2];g[m+(B*52|0)+16>>2]=+C(+(y*y+z*z+A*A));a[e>>0]=1}b=j+((O(o,t)|0)+n)|0;if(!(a[b>>0]|0)){a[b>>0]=1;a[j+(o+k)>>0]=1;k=c[q>>2]|0;Rh(u,0);B=(c[s>>2]|0)+-1|0;m=c[r>>2]|0;c[m+(B*52|0)+8>>2]=k+(n*104|0);c[m+(B*52|0)+12>>2]=k+(o*104|0);y=+g[k+(n*104|0)+8>>2]-+g[k+(o*104|0)+8>>2];z=+g[k+(n*104|0)+12>>2]-+g[k+(o*104|0)+12>>2];A=+g[k+(n*104|0)+16>>2]-+g[k+(o*104|0)+16>>2];g[m+(B*52|0)+16>>2]=+C(+(y*y+z*z+A*A));a[e>>0]=1}Qf(u,d,n,o,0);p=p+3|0}while((p|0)<(h*3|0))}if(i){k=c[u+732>>2]|0;if((k|0)>0){n=u+740|0;d=0;b=243703;do{m=c[n>>2]|0;e=m+(d*52|0)|0;b=(O(b,1664525)|0)+1013904223|0;o=x;p=e;q=o+52|0;do{c[o>>2]=c[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));o=e;p=m+(((b>>>0)%(k>>>0)|0)*52|0)|0;q=o+52|0;do{c[o>>2]=c[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));o=m+(((b>>>0)%(k>>>0)|0)*52|0)|0;p=x;q=o+52|0;do{c[o>>2]=c[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));d=d+1|0}while((d|0)!=(k|0))}else b=243703;e=c[u+752>>2]|0;if((e|0)>0){n=u+760|0;d=0;do{k=c[n>>2]|0;m=k+(d*44|0)|0;b=(O(b,1664525)|0)+1013904223|0;k=k+(((b>>>0)%(e>>>0)|0)*44|0)|0;o=x;p=m;q=o+44|0;do{c[o>>2]=c[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));o=m;p=k;q=o+44|0;do{c[o>>2]=c[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));o=k;p=x;q=o+44|0;do{c[o>>2]=c[p>>2];o=o+4|0;p=p+4|0}while((o|0)<(q|0));d=d+1|0}while((d|0)!=(e|0))}}if(!((v|0)==0|(w|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[w+-4>>2]|0)}if(!j){l=x;return u|0}c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0);l=x;return u|0}function Dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0;if(a[b+165>>0]|0){f=c[b+88>>2]|0;a:do if((f|0)>0&e){h=c[b+96>>2]|0;j=+g[d>>2];k=+g[d+4>>2];l=+g[d+8>>2];m=+g[b+168>>2];e=0;while(1){s=+g[h+(e<<4)>>2]-j;r=+g[h+(e<<4)+4>>2]-k;q=+g[h+(e<<4)+8>>2]-l;if(s*s+r*r+q*q<=m)break;e=e+1|0;if((e|0)>=(f|0))break a}return e|0}while(0);p=(c[b+32>>2]|0)+12|0;c[p>>2]=(c[p>>2]|0)+1;if((f|0)==(c[b+92>>2]|0)?(i=f|0?f<<1:1,(f|0)<(i|0)):0){if(!i)h=0;else{c[6472]=(c[6472]|0)+1;e=ic((i<<4|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[b+88>>2]|0;h=e}if((f|0)>0){e=0;do{p=h+(e<<4)|0;o=(c[b+96>>2]|0)+(e<<4)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];e=e+1|0}while((e|0)!=(f|0))}e=c[b+96>>2]|0;if(e|0){if(a[b+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+96>>2]=0}a[b+100>>0]=1;c[b+96>>2]=h;c[b+92>>2]=i;e=c[b+88>>2]|0}else e=f;p=(c[b+96>>2]|0)+(e<<4)|0;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];d=c[b+88>>2]|0;c[b+88>>2]=d+1;c[(c[b+32>>2]|0)+16>>2]=c[b+96>>2];return d|0}h=c[b+108>>2]|0;b:do if((h|0)>0&e){e=c[b+116>>2]|0;j=+g[d>>2];k=+g[d+4>>2];l=+g[d+8>>2];m=+g[b+168>>2];i=0;while(1){q=+g[e+(i<<2)>>2]-j;r=+g[e+(i+1<<2)>>2]-k;s=+g[e+(i+2<<2)>>2]-l;f=i+3|0;if(q*q+r*r+s*s<=m)break;if((f|0)<(h|0))i=f;else break b}d=(i|0)/3|0;return d|0}while(0);e=c[b+112>>2]|0;if((h|0)==(e|0)){n=h|0?h<<1:1;if((h|0)<(n|0)){if(!n)i=0;else{c[6472]=(c[6472]|0)+1;e=ic((n<<2|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}h=c[b+108>>2]|0;i=e}f=c[b+116>>2]|0;if((h|0)<=0)if(!f)e=b+120|0;else p=34;else{e=0;do{c[i+(e<<2)>>2]=c[f+(e<<2)>>2];e=e+1|0}while((e|0)!=(h|0));p=34}if((p|0)==34){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+116>>2]=0;e=b+120|0}a[e>>0]=1;c[b+116>>2]=i;c[b+112>>2]=n;f=c[b+108>>2]|0;e=n}else{f=h;e=h}}else f=h;i=c[b+116>>2]|0;c[i+(f<<2)>>2]=c[d>>2];f=f+1|0;c[b+108>>2]=f;if((f|0)==(e|0)){f=e|0?e<<1:1;if((e|0)<(f|0)){if(!f)n=0;else{c[6472]=(c[6472]|0)+1;e=ic((f<<2|3)+16|0)|0;if(!e)h=0;else{c[(e+4+15&-16)+-4>>2]=e;h=e+4+15&-16}e=c[b+108>>2]|0;i=c[b+116>>2]|0;n=h}if((e|0)<=0)if(!i)e=b+120|0;else p=48;else{h=0;do{c[n+(h<<2)>>2]=c[i+(h<<2)>>2];h=h+1|0}while((h|0)!=(e|0));p=48}if((p|0)==48){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[b+116>>2]=0;e=b+120|0}a[e>>0]=1;c[b+116>>2]=n;c[b+112>>2]=f;o=n;h=c[b+108>>2]|0;e=n}else{o=i;h=e;f=e;e=i}}else{o=i;h=f;f=e;e=i}c[o+(h<<2)>>2]=c[d+4>>2];h=h+1|0;c[b+108>>2]=h;if((h|0)==(f|0)){i=f|0?f<<1:1;if((f|0)<(i|0)){if(!i){h=o;n=0}else{c[6472]=(c[6472]|0)+1;e=ic((i<<2|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[b+108>>2]|0;h=c[b+116>>2]|0;n=e}if((f|0)<=0)if(!h)e=b+120|0;else p=62;else{e=0;do{c[n+(e<<2)>>2]=c[h+(e<<2)>>2];e=e+1|0}while((e|0)!=(f|0));p=62}if((p|0)==62){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+116>>2]=0;e=b+120|0}a[e>>0]=1;c[b+116>>2]=n;c[b+112>>2]=i;i=n;f=c[b+108>>2]|0;e=n}else i=o}else{i=o;f=h}c[i+(f<<2)>>2]=c[d+8>>2];d=f+1|0;c[b+108>>2]=d;b=c[b+32>>2]|0;c[b+12>>2]=(c[b+12>>2]|0)+1;c[b+16>>2]=e;d=((d|0)/3|0)+-1|0;return d|0}function Ed(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0.0,i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0;v=l;l=l+64|0;j=c[a+28>>2]|0;k=c[a+32>>2]|0;e=c[b+8>>2]|0;g[e>>2]=1.0;f=c[b+24>>2]|0;g[e+(f+1<<2)>>2]=1.0;g[e+((f<<1)+2<<2)>>2]=1.0;t=+g[a+48>>2];u=+g[a+52>>2];d=+g[a+56>>2];i=+g[j+4>>2]*t+ +g[j+8>>2]*u+ +g[j+12>>2]*d;h=t*+g[j+20>>2]+u*+g[j+24>>2]+d*+g[j+28>>2];d=t*+g[j+36>>2]+u*+g[j+40>>2]+d*+g[j+44>>2];e=c[b+12>>2]|0;c[e>>2]=0;g[e+4>>2]=d;g[e+8>>2]=-h;g[e+12>>2]=0.0;g[e+(f<<2)>>2]=-d;c[e+(f<<2)+4>>2]=0;g[e+(f<<2)+8>>2]=i;g[e+(f<<2)+12>>2]=0.0;g[e+(f<<1<<2)>>2]=h;g[e+(f<<1<<2)+4>>2]=-i;c[e+(f<<1<<2)+8>>2]=0;g[e+(f<<1<<2)+12>>2]=0.0;e=c[b+16>>2]|0;if(e|0){g[e>>2]=-1.0;g[e+(f+1<<2)>>2]=-1.0;g[e+((f<<1)+2<<2)>>2]=-1.0}q=+g[a+64>>2];u=+g[a+68>>2];t=+g[a+72>>2];r=+g[k+4>>2]*q+ +g[k+8>>2]*u+ +g[k+12>>2]*t;s=q*+g[k+20>>2]+u*+g[k+24>>2]+t*+g[k+28>>2];t=q*+g[k+36>>2]+u*+g[k+40>>2]+t*+g[k+44>>2];e=c[b+20>>2]|0;c[e>>2]=0;g[e+4>>2]=-t;g[e+8>>2]=s;g[e+12>>2]=0.0;g[e+(f<<2)>>2]=t;c[e+(f<<2)+4>>2]=0;g[e+(f<<2)+8>>2]=-r;g[e+(f<<2)+12>>2]=0.0;g[e+(f<<1<<2)>>2]=-s;g[e+(f<<1<<2)+4>>2]=r;c[e+(f<<1<<2)+8>>2]=0;g[e+(f<<1<<2)+12>>2]=0.0;u=+g[b>>2]*+g[b+4>>2];s=u*(s+ +g[k+56>>2]-h-+g[j+56>>2]);t=u*(t+ +g[k+60>>2]-d-+g[j+60>>2]);w=c[b+28>>2]|0;g[w>>2]=u*(r+ +g[k+52>>2]-i-+g[j+52>>2]);g[w+(f<<2)>>2]=s;g[w+(f<<1<<2)>>2]=t;w=c[b+12>>2]|0;g[w+(f*3<<2)>>2]=1.0;g[w+((f<<2|1)<<2)>>2]=1.0;g[w+((f*5|0)+2<<2)>>2]=1.0;if(e|0){g[e+(f*3<<2)>>2]=-1.0;g[e+((f<<2|1)<<2)>>2]=-1.0;g[e+((f*5|0)+2<<2)>>2]=-1.0}i=+g[k+24>>2];y=+g[k+44>>2];m=+g[k+28>>2];n=+g[k+40>>2];x=+g[k+36>>2];h=+g[k+20>>2];t=+g[k+4>>2];s=+g[k+8>>2];p=+g[k+12>>2];d=1.0/((i*y-m*n)*t+s*(m*x-y*h)+(n*h-i*x)*p);E=+g[j+4>>2];D=+g[j+8>>2];F=+g[j+12>>2];B=+g[j+20>>2];A=+g[j+24>>2];z=+g[j+28>>2];o=+g[j+36>>2];q=+g[j+40>>2];r=+g[j+44>>2];g[v+16>>2]=F*(n*h-i*x)*d+(E*(i*y-m*n)*d+D*(m*x-y*h)*d);g[v+16+4>>2]=F*(x*s-n*t)*d+(E*(n*p-y*s)*d+D*(y*t-x*p)*d);g[v+16+8>>2]=F*(i*t-h*s)*d+(E*(m*s-i*p)*d+D*(h*p-m*t)*d);g[v+16+12>>2]=0.0;g[v+16+16>>2]=(i*y-m*n)*d*B+(m*x-y*h)*d*A+(n*h-i*x)*d*z;g[v+16+20>>2]=(n*p-y*s)*d*B+(y*t-x*p)*d*A+(x*s-n*t)*d*z;g[v+16+24>>2]=(m*s-i*p)*d*B+(h*p-m*t)*d*A+(i*t-h*s)*d*z;g[v+16+28>>2]=0.0;g[v+16+32>>2]=(i*y-m*n)*d*o+(m*x-y*h)*d*q+(n*h-i*x)*d*r;g[v+16+36>>2]=(n*p-y*s)*d*o+(y*t-x*p)*d*q+(x*s-n*t)*d*r;g[v+16+40>>2]=(m*s-i*p)*d*o+(h*p-m*t)*d*q+(i*t-h*s)*d*r;g[v+16+44>>2]=0.0;lh(v+16|0,v);r=+g[a+80>>2];d=+g[v>>2];s=+g[a+84>>2];h=+g[v+4>>2];t=+g[a+88>>2];i=+g[v+8>>2];q=+g[a+92>>2];m=+g[v+12>>2];if(!((r-d)*(r-d)+(s-h)*(s-h)+(t-i)*(t-i)+(q-m)*(q-m)<(r+d)*(r+d)+(s+h)*(s+h)+(t+i)*(t+i)+(q+m)*(q+m))){d=-d;h=-h;i=-i;m=-m}n=h*-t+(m*-r+d*q)-i*-s;o=i*-r+(m*-s+h*q)-d*-t;p=d*-s+(m*-t+i*q)-h*-r;d=m*q-d*-r-h*-s-i*-t;d=d<-1.0?-1.0:d;d=+H(+(d>1.0?1.0:d))*2.0;if(n*n+o*o+p*p<1.4210854715202004e-14){D=1.0;E=0.0;B=0.0;F=-d;D=D*F;E=E*F;F=B*F;w=c[b+24>>2]|0;b=c[b+28>>2]|0;D=u*D;a=w*3|0;a=b+(a<<2)|0;g[a>>2]=D;E=u*E;a=w<<2;a=b+(a<<2)|0;g[a>>2]=E;F=u*F;w=w*5|0;w=b+(w<<2)|0;g[w>>2]=F;l=v;return}B=1.0/+C(+(n*n+o*o+p*p));D=n*B;E=B*o;B=B*p;F=-d;D=D*F;E=E*F;F=B*F;w=c[b+24>>2]|0;b=c[b+28>>2]|0;D=u*D;a=w*3|0;a=b+(a<<2)|0;g[a>>2]=D;E=u*E;a=w<<2;a=b+(a<<2)|0;g[a>>2]=E;F=u*F;w=w*5|0;w=b+(w<<2)|0;g[w>>2]=F;l=v;return}function Fd(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0,j=0,k=0;j=l;l=l+16|0;if(!(a[b+1308>>0]|0)){l=j;return}g[b+928>>2]=0.0;g[b+992>>2]=0.0;g[b+1056>>2]=0.0;c[b+712>>2]=0;c[b+712+4>>2]=0;c[b+712+8>>2]=0;c[b+712+12>>2]=0;bd(b,(c[b+28>>2]|0)+4|0,(c[b+32>>2]|0)+4|0);Ab[c[(c[b>>2]|0)+44>>2]&511](b);e=+g[b+1284>>2];f=+g[b+1288>>2];h=+g[b+1292>>2];if(+g[b+696>>2]>=+g[b+680>>2]){k=(a[b+1300>>0]|0)==0;i=c[(k?b+1160|0:b+1096|0)>>2]|0;d=c[(k?b+1144|0:b+1080|0)>>2]|0;c[j>>2]=c[(k?b+1128|0:b+1064|0)>>2];c[j+4>>2]=d;c[j+8>>2]=i;g[j+12>>2]=0.0;sh(c[b+28>>2]|0,c[b+32>>2]|0,b+176|0,j,e,f,h,e,f,h)}if(+g[b+700>>2]>=+g[b+684>>2]){d=(a[b+1300>>0]|0)==0;k=c[(d?b+1164|0:b+1100|0)>>2]|0;i=c[(d?b+1148|0:b+1084|0)>>2]|0;c[j>>2]=c[(d?b+1132|0:b+1068|0)>>2];c[j+4>>2]=i;c[j+8>>2]=k;g[j+12>>2]=0.0;sh(c[b+28>>2]|0,c[b+32>>2]|0,b+260|0,j,e,f,h,e,f,h)}if(+g[b+704>>2]>=+g[b+688>>2]){d=(a[b+1300>>0]|0)==0;k=c[(d?b+1168|0:b+1104|0)>>2]|0;i=c[(d?b+1152|0:b+1088|0)>>2]|0;c[j>>2]=c[(d?b+1136|0:b+1072|0)>>2];c[j+4>>2]=i;c[j+8>>2]=k;g[j+12>>2]=0.0;sh(c[b+28>>2]|0,c[b+32>>2]|0,b+344|0,j,e,f,h,e,f,h)}e=+g[b+868>>2];f=+g[b+872>>2];h=+Lj(+g[b+1192>>2],e,f);g[b+920>>2]=h;do if(!(e>f)){if(e>h){c[b+924>>2]=1;g[b+916>>2]=h-e;if(h-e>3.1415927410125732){g[b+916>>2]=h-e+-6.2831854820251465;i=5;break}if(!(h-e<-3.1415927410125732)){i=5;break}g[b+916>>2]=h-e+6.2831854820251465;i=5;break}if(f>2]=2;g[b+916>>2]=h-f;if(h-f>3.1415927410125732){g[b+916>>2]=h-f+-6.2831854820251465;i=5;break}if(h-f<-3.1415927410125732){g[b+916>>2]=h-f+6.2831854820251465;i=5}else i=5}else{d=b+924|0;i=51}}else{d=b+924|0;i=51}while(0);if((i|0)==51?(c[d>>2]=0,a[b+912>>0]|0):0)i=5;if((i|0)==5){c[j>>2]=c[b+1208>>2];c[j+4>>2]=c[b+1208+4>>2];c[j+8>>2]=c[b+1208+8>>2];c[j+12>>2]=c[b+1208+12>>2];yg(c[b+28>>2]|0,c[b+32>>2]|0,b+428|0,j)}e=+g[b+932>>2];f=+g[b+936>>2];h=+Lj(+g[b+1196>>2],e,f);g[b+984>>2]=h;do if(!(e>f)){if(e>h){c[b+988>>2]=1;g[b+980>>2]=h-e;if(h-e>3.1415927410125732){g[b+980>>2]=h-e+-6.2831854820251465;i=20;break}if(!(h-e<-3.1415927410125732)){i=20;break}g[b+980>>2]=h-e+6.2831854820251465;i=20;break}if(f>2]=2;g[b+980>>2]=h-f;if(h-f>3.1415927410125732){g[b+980>>2]=h-f+-6.2831854820251465;i=20;break}if(h-f<-3.1415927410125732){g[b+980>>2]=h-f+6.2831854820251465;i=20}else i=20}else{d=b+988|0;i=18}}else{d=b+988|0;i=18}while(0);if((i|0)==18?(c[d>>2]=0,a[b+976>>0]|0):0)i=20;if((i|0)==20){c[j>>2]=c[b+1224>>2];c[j+4>>2]=c[b+1224+4>>2];c[j+8>>2]=c[b+1224+8>>2];c[j+12>>2]=c[b+1224+12>>2];yg(c[b+28>>2]|0,c[b+32>>2]|0,b+512|0,j)}e=+g[b+996>>2];f=+g[b+1e3>>2];h=+Lj(+g[b+1200>>2],e,f);g[b+1048>>2]=h;do if(!(e>f)){if(e>h){c[b+1052>>2]=1;g[b+1044>>2]=h-e;if(h-e>3.1415927410125732){g[b+1044>>2]=h-e+-6.2831854820251465;i=34;break}if(!(h-e<-3.1415927410125732)){i=34;break}g[b+1044>>2]=h-e+6.2831854820251465;i=34;break}if(f>2]=2;g[b+1044>>2]=h-f;if(h-f>3.1415927410125732){g[b+1044>>2]=h-f+-6.2831854820251465;i=34;break}if(h-f<-3.1415927410125732){g[b+1044>>2]=h-f+6.2831854820251465;i=34}else i=34}else{d=b+1052|0;i=33}}else{d=b+1052|0;i=33}while(0);if((i|0)==33?(c[d>>2]=0,a[b+1040>>0]|0):0)i=34;if((i|0)==34){c[j>>2]=c[b+1240>>2];c[j+4>>2]=c[b+1240+4>>2];c[j+8>>2]=c[b+1240+8>>2];c[j+12>>2]=c[b+1240+12>>2];yg(c[b+28>>2]|0,c[b+32>>2]|0,b+596|0,j)}l=j;return}function Gd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0;p=l;l=l+128|0;c[b+68>>2]=(c[b+68>>2]|0)+1;c[p>>2]=c[d>>2];c[p+4>>2]=c[d+4>>2];c[p+8>>2]=c[d+8>>2];c[p+12>>2]=c[d+12>>2];c[p+16>>2]=c[d+16>>2];c[p+16+4>>2]=c[d+16+4>>2];c[p+16+8>>2]=c[d+16+8>>2];c[p+16+12>>2]=c[d+16+12>>2];c[p+32>>2]=c[d+32>>2];c[p+32+4>>2]=c[d+32+4>>2];c[p+32+8>>2]=c[d+32+8>>2];c[p+32+12>>2]=c[d+32+12>>2];c[p+48>>2]=c[d+48>>2];c[p+48+4>>2]=c[d+48+4>>2];c[p+48+8>>2]=c[d+48+8>>2];c[p+48+12>>2]=c[d+48+12>>2];n=c[e+4>>2]|0;o=+gb[c[(c[e>>2]|0)+48>>2]&15](e);Nb[c[(c[e>>2]|0)+8>>2]&127](e,d,p+112|0,p+96|0);f=+g[p+112>>2];if(+g[b+32>>2]>f)g[b+32>>2]=f;f=+g[p+96>>2];if(+g[b+48>>2]>2]=f;f=+g[p+112+4>>2];if(+g[b+36>>2]>f)g[b+36>>2]=f;f=+g[p+96+4>>2];if(+g[b+52>>2]>2]=f;f=+g[p+112+8>>2];if(+g[b+40>>2]>f)g[b+40>>2]=f;f=+g[p+96+8>>2];if(+g[b+56>>2]>2]=f;k=c[b+64>>2]|0;if(!k){j=0;k=b+16|0}else{c[p+64>>2]=c[p+112>>2];c[p+64+4>>2]=c[p+112+4>>2];c[p+64+8>>2]=c[p+112+8>>2];c[p+64+12>>2]=c[p+112+12>>2];c[p+64+16>>2]=c[p+96>>2];c[p+64+16+4>>2]=c[p+96+4>>2];c[p+64+16+8>>2]=c[p+96+8>>2];c[p+64+16+12>>2]=c[p+96+12>>2];j=c[b+16>>2]|0;d=c[k+4>>2]|0;if(!d){c[6472]=(c[6472]|0)+1;d=ic(63)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}h=d;i=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0))}else c[k+4>>2]=0;c[d+32>>2]=0;c[d+36>>2]=j;c[d+40>>2]=0;c[d>>2]=c[p+64>>2];c[d+4>>2]=c[p+64+4>>2];c[d+8>>2]=c[p+64+8>>2];c[d+12>>2]=c[p+64+12>>2];c[d+16>>2]=c[p+64+16>>2];c[d+20>>2]=c[p+64+20>>2];c[d+24>>2]=c[p+64+24>>2];c[d+28>>2]=c[p+64+28>>2];af(k,c[k>>2]|0,d);c[k+12>>2]=(c[k+12>>2]|0)+1;j=d;k=b+16|0}d=c[k>>2]|0;if((d|0)==(c[b+20>>2]|0)?(m=d|0?d<<1:1,(d|0)<(m|0)):0){if(!m)h=0;else{c[6472]=(c[6472]|0)+1;d=ic((m*80|3)+16|0)|0;if(!d)h=0;else{c[(d+4+15&-16)+-4>>2]=d;h=d+4+15&-16}d=c[k>>2]|0}if((d|0)>0){i=0;do{q=h+(i*80|0)|0;r=c[b+24>>2]|0;s=r+(i*80|0)|0;c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];q=h+(i*80|0)+16|0;s=r+(i*80|0)+16|0;c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];q=h+(i*80|0)+32|0;s=r+(i*80|0)+32|0;c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];q=h+(i*80|0)+48|0;s=r+(i*80|0)+48|0;c[q>>2]=c[s>>2];c[q+4>>2]=c[s+4>>2];c[q+8>>2]=c[s+8>>2];c[q+12>>2]=c[s+12>>2];q=h+(i*80|0)+64|0;r=r+(i*80|0)+64|0;c[q>>2]=c[r>>2];c[q+4>>2]=c[r+4>>2];c[q+8>>2]=c[r+8>>2];c[q+12>>2]=c[r+12>>2];i=i+1|0}while((i|0)!=(d|0))}d=c[b+24>>2]|0;if(d|0){if(a[b+28>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+24>>2]=0}a[b+28>>0]=1;c[b+24>>2]=h;c[b+20>>2]=m;d=c[k>>2]|0}s=c[b+24>>2]|0;r=s+(d*80|0)|0;c[r>>2]=c[p>>2];c[r+4>>2]=c[p+4>>2];c[r+8>>2]=c[p+8>>2];c[r+12>>2]=c[p+12>>2];r=s+(d*80|0)+16|0;c[r>>2]=c[p+16>>2];c[r+4>>2]=c[p+16+4>>2];c[r+8>>2]=c[p+16+8>>2];c[r+12>>2]=c[p+16+12>>2];r=s+(d*80|0)+32|0;c[r>>2]=c[p+32>>2];c[r+4>>2]=c[p+32+4>>2];c[r+8>>2]=c[p+32+8>>2];c[r+12>>2]=c[p+32+12>>2];r=s+(d*80|0)+48|0;c[r>>2]=c[p+48>>2];c[r+4>>2]=c[p+48+4>>2];c[r+8>>2]=c[p+48+8>>2];c[r+12>>2]=c[p+48+12>>2];s=s+(d*80|0)+64|0;c[s>>2]=e;c[s+4>>2]=n;g[s+8>>2]=o;c[s+12>>2]=j;c[k>>2]=(c[k>>2]|0)+1;l=p;return}function Hd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0;m=l;l=l+384|0;f=c[d+36>>2]|0;d=c[e+36>>2]|0;e=c[b+24>>2]|0;if(((e|0)==(c[b+28>>2]|0)?c[e+1132>>2]|0:0)?(j=(O(c[d+380>>2]|0,c[e+1112>>2]|0)|0)+(c[f+380>>2]|0)|0,a[(c[e+1140>>2]|0)+j>>0]|0):0){c[5839]=(c[5839]|0)+1;l=m;return}c[m+328+4>>2]=35;c[m+328+8>>2]=0;c[m+328+12>>2]=1065353216;c[m+328+16>>2]=1065353216;c[m+328+20>>2]=1065353216;g[m+328+24>>2]=0.0;c[m+328>>2]=3580;c[m+328+52>>2]=f;g[m+328+44>>2]=0.0;c[m+272+4>>2]=35;c[m+272+8>>2]=0;c[m+272+12>>2]=1065353216;c[m+272+16>>2]=1065353216;c[m+272+20>>2]=1065353216;g[m+272+24>>2]=0.0;c[m+272>>2]=3580;c[m+272+52>>2]=d;g[m+272+44>>2]=0.0;if((a[22664]|0)==0?Yy(22664)|0:0){if((a[22672]|0)==0?Yy(22672)|0:0){c[5768]=1065353216;c[5769]=0;c[5770]=0;c[5771]=0;c[5772]=0;c[5773]=1065353216;c[5774]=0;c[5775]=0;c[5776]=0;c[5777]=0;c[5778]=1065353216;g[5779]=0.0}c[5752]=c[5768];c[5753]=c[5769];c[5754]=c[5770];c[5755]=c[5771];c[5756]=c[5772];c[5757]=c[5773];c[5758]=c[5774];c[5759]=c[5775];c[5760]=c[5776];c[5761]=c[5777];c[5762]=c[5778];c[5763]=c[5779];c[5764]=0;c[5765]=0;c[5766]=0;c[5767]=0}if((a[22664]|0)==0?Yy(22664)|0:0){if((a[22672]|0)==0?Yy(22672)|0:0){c[5768]=1065353216;c[5769]=0;c[5770]=0;c[5771]=0;c[5772]=0;c[5773]=1065353216;c[5774]=0;c[5775]=0;c[5776]=0;c[5777]=0;c[5778]=1065353216;g[5779]=0.0}c[5752]=c[5768];c[5753]=c[5769];c[5754]=c[5770];c[5755]=c[5771];c[5756]=c[5772];c[5757]=c[5773];c[5758]=c[5774];c[5759]=c[5775];c[5760]=c[5776];c[5761]=c[5777];c[5762]=c[5778];c[5763]=c[5779];c[5764]=0;c[5765]=0;c[5766]=0;c[5767]=0}o=+g[f+232>>2]-+g[d+232>>2];n=+g[f+236>>2]-+g[d+236>>2];g[m>>2]=+g[f+228>>2]-+g[d+228>>2];g[m+4>>2]=o;g[m+8>>2]=n;g[m+12>>2]=0.0;if(!(!(ud(m+328|0,23008,m+272|0,23008,m,m+216|0)|0)?!(wc(m+328|0,23008,m+272|0,23008,m,m+216|0,0)|0):0))h=19;if((h|0)==19?(c[m+4>>2]=0,c[m+4+4>>2]=0,c[m+4+8>>2]=0,c[m+4+12>>2]=0,c[m+4+16>>2]=0,c[m+4+20>>2]=0,a[m+152>>0]=0,c[m>>2]=3400,Vc(b,m+216|0,f,0,0,d,0,0,m)|0):0){c[6472]=(c[6472]|0)+1;d=ic(235)|0;if(!d)j=0;else{c[(d+4+15&-16)+-4>>2]=d;j=d+4+15&-16}e=j+4|0;d=j+152|0;Nk(e|0,0,212)|0;c[j>>2]=3400;f=m+4|0;h=e+100|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));e=j+104|0;c[e>>2]=c[m+104>>2];c[e+4>>2]=c[m+104+4>>2];c[e+8>>2]=c[m+104+8>>2];c[e+12>>2]=c[m+104+12>>2];e=j+120|0;c[e>>2]=c[m+120>>2];c[e+4>>2]=c[m+120+4>>2];c[e+8>>2]=c[m+120+8>>2];c[e+12>>2]=c[m+120+12>>2];e=j+136|0;c[e>>2]=c[m+136>>2];c[e+4>>2]=c[m+136+4>>2];c[e+8>>2]=c[m+136+8>>2];c[e+12>>2]=c[m+136+12>>2];a[d>>0]=a[m+152>>0]|0;e=j+156|0;f=m+156|0;h=e+60|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));h=c[b+24>>2]|0;i=j;d=c[h+852>>2]|0;if((d|0)==(c[h+856>>2]|0)?(k=d|0?d<<1:1,(d|0)<(k|0)):0){if(!k)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((k<<2|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[h+852>>2]|0}if((d|0)>0){f=0;do{c[e+(f<<2)>>2]=c[(c[h+860>>2]|0)+(f<<2)>>2];f=f+1|0}while((f|0)!=(d|0))}f=c[h+860>>2]|0;if(f){if(a[h+864>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0);d=c[h+852>>2]|0}c[h+860>>2]=0}a[h+864>>0]=1;c[h+860>>2]=e;c[h+856>>2]=k}c[(c[h+860>>2]|0)+(d<<2)>>2]=i;c[h+852>>2]=d+1;i=c[b+24>>2]|0;k=c[b+28>>2]|0;n=+g[i+348>>2];o=+g[k+348>>2];b=j+64|0;g[b>>2]=+g[b>>2]*(n>o?n:o);b=j+68|0;g[b>>2]=+g[b>>2]*(+g[i+360>>2]+ +g[k+360>>2])*.5}l=m;return}function Id(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;while(1){o=(b+d|0)/2|0;p=c[a+12>>2]|0;m=c[p+(o<<4)>>2]|0;n=c[p+(o<<4)+4>>2]|0;o=c[p+(o<<4)+8>>2]|0;e=b;f=d;while(1){a:do if(!m)while(1){j=c[p+(e<<4)>>2]|0;if(!j)g=-1;else g=c[j+12>>2]|0;k=c[p+(e<<4)+4>>2]|0;if(!k)h=-1;else h=c[k+12>>2]|0;if(!n)i=-1;else i=c[n+12>>2]|0;do if((g|0)<=-1){g=(h|0)>(i|0);if(g|(j|0)==0^1)if((j|0)==0&g)break;else break a;if((k|0)!=(n|0))break a;if((c[p+(e<<4)+8>>2]|0)>>>0<=o>>>0)break a}while(0);e=e+1|0}else{l=c[m+12>>2]|0;if(!n)while(1){i=c[p+(e<<4)>>2]|0;if(!i)g=-1;else g=c[i+12>>2]|0;j=c[p+(e<<4)+4>>2]|0;if(!j)h=-1;else h=c[j+12>>2]|0;do if((g|0)<=(l|0)){g=(h|0)>-1;if(g|(i|0)==(m|0)^1)if((i|0)==(m|0)&g)break;else break a;if(j|0)break a;if((c[p+(e<<4)+8>>2]|0)>>>0<=o>>>0)break a}while(0);e=e+1|0}k=c[n+12>>2]|0;while(1){i=c[p+(e<<4)>>2]|0;if(!i)g=-1;else g=c[i+12>>2]|0;j=c[p+(e<<4)+4>>2]|0;if(!j)h=-1;else h=c[j+12>>2]|0;do if((g|0)<=(l|0)){g=(h|0)>(k|0);if(g|(i|0)==(m|0)^1)if((i|0)==(m|0)&g)break;else break a;if((j|0)!=(n|0))break a;if((c[p+(e<<4)+8>>2]|0)>>>0<=o>>>0)break a}while(0);e=e+1|0}}while(0);b:do if(!m)while(1){j=c[p+(f<<4)>>2]|0;if(!j)g=-1;else g=c[j+12>>2]|0;if(!n)h=-1;else h=c[n+12>>2]|0;k=c[p+(f<<4)+4>>2]|0;if(!k)i=-1;else i=c[k+12>>2]|0;do if((g|0)>=-1){g=(h|0)>(i|0);if(g|(j|0)==0^1)if((j|0)==0&g)break;else break b;if((n|0)!=(k|0))break b;if(o>>>0<=(c[p+(f<<4)+8>>2]|0)>>>0)break b}while(0);f=f+-1|0}else{l=c[m+12>>2]|0;if(!n)while(1){i=c[p+(f<<4)>>2]|0;if(!i)g=-1;else g=c[i+12>>2]|0;j=c[p+(f<<4)+4>>2]|0;if(!j)h=-1;else h=c[j+12>>2]|0;do if((l|0)<=(g|0)){g=(h|0)<-1;if(g|(m|0)==(i|0)^1)if((m|0)==(i|0)&g)break;else break b;if(j|0)break b;if(o>>>0<=(c[p+(f<<4)+8>>2]|0)>>>0)break b}while(0);f=f+-1|0}k=c[n+12>>2]|0;while(1){i=c[p+(f<<4)>>2]|0;if(!i)g=-1;else g=c[i+12>>2]|0;j=c[p+(f<<4)+4>>2]|0;if(!j)h=-1;else h=c[j+12>>2]|0;do if((l|0)<=(g|0)){g=(k|0)>(h|0);if(g|(m|0)==(i|0)^1)if((m|0)==(i|0)&g)break;else break b;if((n|0)!=(j|0))break b;if(o>>>0<=(c[p+(f<<4)+8>>2]|0)>>>0)break b}while(0);f=f+-1|0}}while(0);if((e|0)<=(f|0)){h=p+(e<<4)|0;i=c[h>>2]|0;j=c[p+(e<<4)+4>>2]|0;k=c[p+(e<<4)+8>>2]|0;l=c[p+(e<<4)+12>>2]|0;p=p+(f<<4)|0;c[h>>2]=c[p>>2];c[h+4>>2]=c[p+4>>2];c[h+8>>2]=c[p+8>>2];c[h+12>>2]=c[p+12>>2];p=c[a+12>>2]|0;c[p+(f<<4)>>2]=i;c[p+(f<<4)+4>>2]=j;c[p+(f<<4)+8>>2]=k;c[p+(f<<4)+12>>2]=l;e=e+1|0;f=f+-1|0}if((e|0)>(f|0))break;p=c[a+12>>2]|0}if((f|0)>(b|0))Id(a,b,f);if((e|0)<(d|0))b=e;else break}return}function Jd(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0,E=0;D=l;l=l+272|0;z=+g[e+48>>2]-+g[d+48>>2];B=+g[e+52>>2]-+g[d+52>>2];A=+g[e+56>>2]-+g[d+56>>2];vf(d,e,D+256|0,D+208|0);v=+g[D+208>>2];t=+g[D+256>>2]*v;u=v*+g[D+256+4>>2];v=v*+g[D+256+8>>2];g[D+192>>2]=t;g[D+192+4>>2]=u;g[D+192+8>>2]=v;g[D+192+12>>2]=0.0;w=+g[h+48>>2]-+g[f+48>>2];y=+g[h+52>>2]-+g[f+52>>2];x=+g[h+56>>2]-+g[f+56>>2];vf(f,h,D+256|0,D+208|0);s=+g[D+208>>2];q=+g[D+256>>2]*s;r=s*+g[D+256+4>>2];s=s*+g[D+256+8>>2];g[D+176>>2]=q;g[D+176+4>>2]=r;g[D+176+8>>2]=s;g[D+176+12>>2]=0.0;e=c[b+12>>2]|0;p=+gb[c[(c[e>>2]|0)+16>>2]&15](e);e=c[b+16>>2]|0;if(!e)m=0.0;else m=+gb[c[(c[e>>2]|0)+16>>2]&15](e);s=p*+C(+(t*t+u*u+v*v))+m*+C(+(q*q+r*r+s*s));if(s+ +C(+((w-z)*(w-z)+(y-B)*(y-B)+(x-A)*(x-A)))==0.0){i=0;l=D;return i|0}c[D+208>>2]=9352;g[D+208+36>>2]=999999984306749440.0;a[D+208+40>>0]=0;yd(b,d,f,D+208|0);h=(a[D+208+40>>0]|0)==0;c[D+256>>2]=c[D+208+20>>2];c[D+256+4>>2]=c[D+208+20+4>>2];c[D+256+8>>2]=c[D+208+20+8>>2];c[D+256+12>>2]=c[D+208+20+12>>2];a:do if(!h?(o=c[D+208+4>>2]|0,k=c[D+208+8>>2]|0,n=c[D+208+12>>2]|0,v=(w-z)*(c[j>>2]=o,+g[j>>2]),v=v+(y-B)*(c[j>>2]=k,+g[j>>2]),!(s+(v+(x-A)*(c[j>>2]=n,+g[j>>2]))<=1.1920928955078125e-07)):0){m=+g[D+208+16>>2];p=+g[D+208+36>>2]+ +g[i+172>>2];b:do if(p>1.0000000474974513e-03){q=p;r=0.0;h=0;while(1){e=c[i+168>>2]|0;if(e|0){E=c[(c[e>>2]|0)+20>>2]|0;c[D+112>>2]=1065353216;c[D+112+4>>2]=1065353216;c[D+112+8>>2]=1065353216;g[D+112+12>>2]=0.0;Ib[E&7](e,D+256|0,.20000000298023224,D+112|0)}m=(w-z)*(c[j>>2]=o,+g[j>>2]);m=m+(y-B)*(c[j>>2]=k,+g[j>>2]);m=s+(m+(x-A)*(c[j>>2]=n,+g[j>>2]));if(m<=1.1920928955078125e-07){k=0;break a}p=r+q/m;if(!(!(p<=r)&(!(p<0.0)&!(p>1.0)))){k=0;break a}Ig(d,z,B,A,D+192|0,p,D+112|0);Ig(f,w,y,x,D+176|0,p,D+48|0);k=c[i+168>>2]|0;if(k|0){E=c[(c[k>>2]|0)+20>>2]|0;c[D>>2]=1065353216;c[D+4>>2]=0;c[D+8>>2]=0;g[D+12>>2]=0.0;Ib[E&7](k,D+112+48|0,.20000000298023224,D)}Bb[c[c[i>>2]>>2]&31](i,p);c[D>>2]=9352;g[D+36>>2]=999999984306749440.0;a[D+40>>0]=0;yd(b,D+112|0,D+48|0,D);if(!(a[D+40>>0]|0)){k=15;break}m=+g[D+36>>2];q=+g[i+172>>2];c[D+256>>2]=c[D+20>>2];c[D+256+4>>2]=c[D+20+4>>2];c[D+256+8>>2]=c[D+20+8>>2];c[D+256+12>>2]=c[D+20+12>>2];e=h+1|0;if((h|0)>63){k=16;break}n=c[D+12>>2]|0;k=c[D+8>>2]|0;o=c[D+4>>2]|0;q=m+q;if(!(q>1.0000000474974513e-03)){m=+g[D+16>>2];break b}else{r=p;h=e}}if((k|0)==15)Kb[c[(c[i>>2]|0)+8>>2]&127](i,-1,h);else if((k|0)==16)Kb[c[(c[i>>2]|0)+8>>2]&127](i,-2,e);k=0;break a}else p=0.0;while(0);g[i+164>>2]=p;c[i+132>>2]=o;c[i+136>>2]=k;c[i+140>>2]=n;g[i+144>>2]=m;c[i+148>>2]=c[D+256>>2];c[i+148+4>>2]=c[D+256+4>>2];c[i+148+8>>2]=c[D+256+8>>2];c[i+148+12>>2]=c[D+256+12>>2];k=1}else k=0;while(0);E=k;l=D;return E|0}function Kd(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=l;l=l+16|0;bj(11238);E=c[a+712>>2]|0;if((E|0)>=1){c[6472]=(c[6472]|0)+1;d=ic((E<<4|3)+16|0)|0;if(!d)h=0;else{c[(d+4+15&-16)+-4>>2]=d;h=d+4+15&-16}Nk(h|0,0,E<<4|0)|0;f=c[a+712>>2]|0;if((f|0)>0){c[6472]=(c[6472]|0)+1;d=ic((f<<2|3)+16|0)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}Nk(d|0,0,f<<2|0)|0;C=d;D=h;B=h;A=d}else{C=0;D=h;B=h;A=0}}else{C=0;D=0;B=0;A=0}z=c[a+1112>>2]|0;if(b){if((z|0)>0){h=c[a+1120>>2]|0;i=0;do{d=c[h+(i<<2)>>2]|0;f=c[d+312>>2]|0;if(f|0){g[d+276>>2]=1.0/+(f|0)*+g[d+276>>2];g[d+280>>2]=1.0/+(f|0)*+g[d+280>>2];g[d+284>>2]=1.0/+(f|0)*+g[d+284>>2];g[d+292>>2]=+g[d+292>>2]*(1.0/+(f|0));g[d+296>>2]=1.0/+(f|0)*+g[d+296>>2];g[d+300>>2]=1.0/+(f|0)*+g[d+300>>2]}i=i+1|0}while((i|0)!=(z|0));i=11}}else i=11;if((i|0)==11?(z|0)>0:0){k=c[a+1120>>2]|0;if(b){b=0;do{d=c[k+(b<<2)>>2]|0;if((c[d+312>>2]|0)>0?(w=+g[a+452>>2],q=+g[d+276>>2]*w,u=w*+g[d+280>>2],y=w*+g[d+284>>2],o=w*+g[d+292>>2],s=w*+g[d+296>>2],w=w*+g[d+300>>2],m=c[d+24>>2]|0,(m|0)>0):0){f=c[d+32>>2]|0;h=c[a+720>>2]|0;i=c[d+12>>2]|0;j=0;do{n=c[f+(j<<2)>>2]|0;x=+g[i+(j<<2)>>2];v=+g[n+8>>2]-+g[d+228>>2];t=+g[n+12>>2]-+g[d+232>>2];r=+g[n+16>>2]-+g[d+236>>2];G=B+(((n-h|0)/104|0)<<4)|0;g[G>>2]=+g[G>>2]+x*(q+(s*r-w*t));G=B+(((n-h|0)/104|0)<<4)+4|0;g[G>>2]=+g[G>>2]+x*(u+(w*v-o*r));G=B+(((n-h|0)/104|0)<<4)+8|0;g[G>>2]=x*(y+(o*t-s*v))+ +g[G>>2];n=A+(((n-h|0)/104|0)<<2)|0;g[n>>2]=x+ +g[n>>2];j=j+1|0}while((j|0)!=(m|0))}b=b+1|0}while((b|0)!=(z|0))}else{b=0;do{d=c[k+(b<<2)>>2]|0;if((c[d+308>>2]|0)>0?(v=+g[a+452>>2],p=+g[d+244>>2]*v,t=v*+g[d+248>>2],x=v*+g[d+252>>2],e=v*+g[d+260>>2],r=v*+g[d+264>>2],v=v*+g[d+268>>2],n=c[d+24>>2]|0,(n|0)>0):0){f=c[d+32>>2]|0;h=c[a+720>>2]|0;i=c[d+12>>2]|0;j=0;do{G=c[f+(j<<2)>>2]|0;y=+g[i+(j<<2)>>2];w=+g[G+8>>2]-+g[d+228>>2];u=+g[G+12>>2]-+g[d+232>>2];s=+g[G+16>>2]-+g[d+236>>2];m=B+(((G-h|0)/104|0)<<4)|0;g[m>>2]=+g[m>>2]+y*(p+(r*s-v*u));m=B+(((G-h|0)/104|0)<<4)+4|0;g[m>>2]=+g[m>>2]+y*(t+(v*w-e*s));m=B+(((G-h|0)/104|0)<<4)+8|0;g[m>>2]=y*(x+(e*u-r*w))+ +g[m>>2];G=A+(((G-h|0)/104|0)<<2)|0;g[G>>2]=y+ +g[G>>2];j=j+1|0}while((j|0)!=(n|0))}b=b+1|0}while((b|0)!=(z|0))}}if((E|0)>0){d=0;do{e=+g[A+(d<<2)>>2];if(e>0.0){G=c[a+720>>2]|0;x=1.0/e*+g[B+(d<<4)+4>>2];y=1.0/e*+g[B+(d<<4)+8>>2];z=G+(d*104|0)+8|0;g[z>>2]=1.0/e*+g[B+(d<<4)>>2]+ +g[z>>2];z=G+(d*104|0)+12|0;g[z>>2]=x+ +g[z>>2];G=G+(d*104|0)+16|0;g[G>>2]=y+ +g[G>>2]}d=d+1|0}while((d|0)!=(E|0))}if(!((A|0)==0|(C|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[C+-4>>2]|0)}if(!((B|0)==0|(D|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[D+-4>>2]|0)}d=c[2405]|0;G=(c[d+16>>2]|0)+-1|0;c[d+16>>2]=G;if(G|0){l=F;return}do if(c[d+4>>2]|0){Za(F|0,0)|0;G=c[6471]|0;g[d+8>>2]=+g[d+8>>2]+ +(((c[F+4>>2]|0)-(c[G+4>>2]|0)+(((c[F>>2]|0)-(c[G>>2]|0)|0)*1e6|0)-(c[d+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[d+16>>2]|0)){d=c[2405]|0;break}else{l=F;return}}while(0);c[2405]=c[d+20>>2];l=F;return}function Ld(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0,j=0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0;D=l;l=l+80|0;o=+g[e+4>>2];u=+g[e+20>>2];v=+g[e+36>>2];w=+g[e+8>>2];x=+g[e+24>>2];y=+g[e+40>>2];z=+g[e+12>>2];p=+g[e+28>>2];q=+g[e+44>>2];A=-+g[e+52>>2];B=-+g[e+56>>2];C=-+g[e+60>>2];k=c[b+720>>2]|0;r=+g[k+(d*104|0)+8>>2];s=+g[k+(d*104|0)+12>>2];t=+g[k+(d*104|0)+16>>2];a:do if(f){f=c[b+268>>2]|0;b:do if((f|0)>0){j=c[b+276>>2]|0;i=0;while(1){if((c[j+(i<<2)>>2]|0)==(e|0))break;i=i+1|0;if((i|0)>=(f|0))break b}if((i|0)!=(f|0)){f=k;break a}}while(0);if((f|0)==(c[b+272>>2]|0)?(m=f|0?f<<1:1,(f|0)<(m|0)):0){if(!m)i=0;else{c[6472]=(c[6472]|0)+1;f=ic((m<<2|3)+16|0)|0;if(!f)i=0;else{c[(f+4+15&-16)+-4>>2]=f;i=f+4+15&-16}f=c[b+268>>2]|0}if((f|0)>0){j=0;do{c[i+(j<<2)>>2]=c[(c[b+276>>2]|0)+(j<<2)>>2];j=j+1|0}while((j|0)!=(f|0))}j=c[b+276>>2]|0;if(j){if(a[b+280>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0);f=c[b+268>>2]|0}c[b+276>>2]=0}a[b+280>>0]=1;c[b+276>>2]=i;c[b+272>>2]=m}c[(c[b+276>>2]|0)+(f<<2)>>2]=e;c[b+268>>2]=f+1;f=c[b+720>>2]|0}else f=k;while(0);k=f+(d*104|0)|0;f=f+(d*104|0)+100|0;a[f>>0]=a[f>>0]|1;f=c[b+792>>2]|0;if((f|0)==(c[b+796>>2]|0)?(n=f|0?f<<1:1,(f|0)<(n|0)):0){if(!n)i=0;else{c[6472]=(c[6472]|0)+1;f=ic(n*96|19)|0;if(!f)i=0;else{c[(f+4+15&-16)+-4>>2]=f;i=f+4+15&-16}f=c[b+792>>2]|0}if((f|0)>0){j=0;do{d=i+(j*96|0)|0;m=c[b+800>>2]|0;E=m+(j*96|0)|0;c[d>>2]=c[E>>2];c[d+4>>2]=c[E+4>>2];c[d+8>>2]=c[E+8>>2];c[d+12>>2]=c[E+12>>2];c[d+16>>2]=c[E+16>>2];c[d+20>>2]=c[E+20>>2];c[d+24>>2]=c[E+24>>2];d=i+(j*96|0)+28|0;E=m+(j*96|0)+28|0;c[d>>2]=c[E>>2];c[d+4>>2]=c[E+4>>2];c[d+8>>2]=c[E+8>>2];c[d+12>>2]=c[E+12>>2];d=i+(j*96|0)+44|0;E=m+(j*96|0)+44|0;c[d>>2]=c[E>>2];c[d+4>>2]=c[E+4>>2];c[d+8>>2]=c[E+8>>2];c[d+12>>2]=c[E+12>>2];d=i+(j*96|0)+60|0;E=m+(j*96|0)+60|0;c[d>>2]=c[E>>2];c[d+4>>2]=c[E+4>>2];c[d+8>>2]=c[E+8>>2];c[d+12>>2]=c[E+12>>2];d=i+(j*96|0)+76|0;m=m+(j*96|0)+76|0;c[d>>2]=c[m>>2];c[d+4>>2]=c[m+4>>2];c[d+8>>2]=c[m+8>>2];c[d+12>>2]=c[m+12>>2];c[d+16>>2]=c[m+16>>2];j=j+1|0}while((j|0)!=(f|0))}f=c[b+800>>2]|0;if(f|0){if(a[b+804>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+800>>2]=0}a[b+804>>0]=1;c[b+800>>2]=i;c[b+796>>2]=n;f=c[b+792>>2]|0}E=c[b+800>>2]|0;c[E+(f*96|0)>>2]=k;g[E+(f*96|0)+4>>2]=o*A+u*B+v*C+(o*r+u*s+v*t);g[E+(f*96|0)+8>>2]=w*A+x*B+y*C+(w*r+x*s+y*t);g[E+(f*96|0)+12>>2]=z*A+p*B+q*C+(z*r+p*s+q*t);g[E+(f*96|0)+16>>2]=0.0;c[E+(f*96|0)+20>>2]=e;g[E+(f*96|0)+24>>2]=h;e=E+(f*96|0)+28|0;c[e>>2]=c[D+56>>2];c[e+4>>2]=c[D+56+4>>2];c[e+8>>2]=c[D+56+8>>2];c[e+12>>2]=c[D+56+12>>2];e=E+(f*96|0)+44|0;c[e>>2]=c[D+40>>2];c[e+4>>2]=c[D+40+4>>2];c[e+8>>2]=c[D+40+8>>2];c[e+12>>2]=c[D+40+12>>2];e=E+(f*96|0)+60|0;c[e>>2]=c[D+24>>2];c[e+4>>2]=c[D+24+4>>2];c[e+8>>2]=c[D+24+8>>2];c[e+12>>2]=c[D+24+12>>2];E=E+(f*96|0)+76|0;c[E>>2]=c[D>>2];c[E+4>>2]=c[D+4>>2];c[E+8>>2]=c[D+8>>2];c[E+12>>2]=c[D+12>>2];c[E+16>>2]=c[D+16>>2];c[b+792>>2]=(c[b+792>>2]|0)+1;l=D;return}function Md(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0,A=0.0,B=0.0,D=0.0,E=0.0,F=0,G=0;F=l;l=l+32|0;A=+g[b+48>>2]-+g[b+112>>2];h=+g[b+52>>2]-+g[b+116>>2];E=+g[b+56>>2]-+g[b+120>>2];B=A*+g[b+64>>2]+h*+g[b+80>>2]+E*+g[b+96>>2];D=A*+g[b+68>>2]+h*+g[b+84>>2]+E*+g[b+100>>2];E=A*+g[b+72>>2]+h*+g[b+88>>2]+E*+g[b+104>>2];e=c[a+8>>2]|0;z=c[a+4>>2]|0;h=+g[z+28>>2]*+g[z+12>>2];A=h+ +g[a+12>>2];p=+g[e+72>>2];q=+g[e+56>>2];r=+g[e+76>>2];s=+g[e+60>>2];t=+g[e+80>>2];u=+g[e+64>>2];v=+g[e+88>>2];w=+g[e+92>>2];x=+g[e+96>>2];j=(r-s)*(x-u)-(t-u)*(w-s);m=(t-u)*(v-q)-(p-q)*(x-u);o=(p-q)*(w-s)-(r-s)*(v-q);n=1.0/+C(+(o*o+(j*j+m*m)));i=(B-q)*n*j+(D-s)*n*m+n*o*(E-u);if(i<0.0){y=-i;k=-(n*j);i=-(n*m);j=-(n*o)}else{y=i;k=n*j;i=n*m;j=n*o}if(!(y0.0&(o>0.0&t>0.0))?!(x<=0.0&(o<=0.0&t<=0.0)):0){if((qb[c[(c[e>>2]|0)+100>>2]&127](e)|0)<=0){l=F;return}o=0.0;n=0.0;m=0.0;e=0;z=0;do{G=c[a+8>>2]|0;Nb[c[(c[G>>2]|0)+104>>2]&127](G,z,F+16|0,F);p=+g[F+16>>2];w=+g[F+16+4>>2];u=+g[F+16+8>>2];t=+g[F>>2]-p;x=+g[F+4>>2]-w;v=+g[F+8>>2]-u;do if((B-p)*t+(D-w)*x+(E-u)*v>0.0)if((B-p)*t+(D-w)*x+(E-u)*v>2]|0}while((z|0)<(qb[c[(c[G>>2]|0)+100>>2]&127](G)|0));if(!(e&1)){l=F;return}else{s=o;r=n;q=m;n=A*A}}else{s=B-y*k;r=E-y*j;q=D-y*i;n=A*A}o=B-s;p=D-q;m=E-r;if(!(o*o+p*p+m*m1.1920928955078125e-07){i=+C(+(o*o+p*p+m*m));h=h-i;k=o*(1.0/i);j=m*(1.0/i);i=p*(1.0/i)}h=-h;if(f){x=+g[b+64>>2];y=+g[b+68>>2];A=+g[b+72>>2];B=x*k+y*i+A*j;o=+g[b+80>>2];p=+g[b+84>>2];t=+g[b+88>>2];D=k*o+i*p+j*t;u=+g[b+96>>2];v=+g[b+100>>2];w=+g[b+104>>2];E=k*u+i*v+j*w;g[F+16>>2]=-B;g[F+16+4>>2]=-D;g[F+16+8>>2]=-E;g[F+16+12>>2]=0.0;D=s*o+q*p+r*t+ +g[b+116>>2]+D*h;E=s*u+q*v+r*w+ +g[b+120>>2]+E*h;g[F>>2]=s*x+q*y+r*A+ +g[b+112>>2]+B*h;g[F+4>>2]=D;g[F+8>>2]=E;g[F+12>>2]=0.0;Lb[c[(c[d>>2]|0)+16>>2]&15](d,F+16|0,F,h);l=F;return}else{G=c[(c[d>>2]|0)+16>>2]|0;y=+g[b+64>>2];A=+g[b+68>>2];B=+g[b+72>>2];u=+g[b+80>>2];v=+g[b+84>>2];D=+g[b+88>>2];w=+g[b+96>>2];x=+g[b+100>>2];E=+g[b+104>>2];g[F+16>>2]=y*k+A*i+B*j;g[F+16+4>>2]=k*u+i*v+j*D;g[F+16+8>>2]=k*w+i*x+j*E;g[F+16+12>>2]=0.0;D=s*u+q*v+r*D+ +g[b+116>>2];E=s*w+q*x+r*E+ +g[b+120>>2];g[F>>2]=s*y+q*A+r*B+ +g[b+112>>2];g[F+4>>2]=D;g[F+8>>2]=E;g[F+12>>2]=0.0;Lb[G&15](d,F+16|0,F,h);l=F;return}}function Nd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0;i=l;l=l+16|0;if((a[22752]|0)==0?Yy(22752)|0:0){c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;dg(23416,0.0,0,0,i)}c[5905]=c[5905]|1;g[5940]=0.0;j=+g[5950]*0.0;k=+g[5951]*0.0;g[5945]=+g[5949]*0.0;g[5946]=j;g[5947]=k;g[5948]=0.0;c[5953]=0;c[5954]=0;c[5955]=0;c[5956]=0;k=+g[5942]*0.0;j=+g[5943]*0.0;g[5994]=+g[5941]*0.0;g[5995]=k;g[5996]=j;g[5997]=0.0;c[b+4>>2]=6;c[b+8>>2]=-1;c[b+12>>2]=-1;g[b+16>>2]=3402823466385288598117041.0e14;a[b+20>>0]=1;a[b+21>>0]=0;c[b+24>>2]=-1;c[b+28>>2]=23416;c[b+32>>2]=d;g[b+36>>2]=0.0;g[b+40>>2]=.30000001192092896;c[b+44>>2]=0;c[b>>2]=4624;c[b+112>>2]=c[e>>2];c[b+112+4>>2]=c[e+4>>2];c[b+112+8>>2]=c[e+8>>2];c[b+112+12>>2]=c[e+12>>2];c[b+128>>2]=c[e+16>>2];c[b+128+4>>2]=c[e+16+4>>2];c[b+128+8>>2]=c[e+16+8>>2];c[b+128+12>>2]=c[e+16+12>>2];c[b+144>>2]=c[e+32>>2];c[b+144+4>>2]=c[e+32+4>>2];c[b+144+8>>2]=c[e+32+8>>2];c[b+144+12>>2]=c[e+32+12>>2];c[b+160>>2]=c[e+48>>2];c[b+160+4>>2]=c[e+48+4>>2];c[b+160+8>>2]=c[e+48+8>>2];c[b+160+12>>2]=c[e+48+12>>2];e=b+680|0;h=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));c[b+740>>2]=0;c[b+740+4>>2]=0;c[b+740+8>>2]=0;c[b+740+12>>2]=0;c[b+756>>2]=1045220557;c[b+760>>2]=1045220557;c[b+764>>2]=1045220557;c[b+768>>2]=0;c[b+768+4>>2]=0;c[b+768+8>>2]=0;c[b+768+12>>2]=0;c[b+768+16>>2]=0;g[b+728>>2]=.699999988079071;g[b+732>>2]=1.0;g[b+736>>2]=.5;a[b+788>>0]=0;g[b+792>>2]=0.0;g[b+808>>2]=0.0;a[b+789>>0]=0;g[b+796>>2]=0.0;g[b+812>>2]=0.0;a[b+790>>0]=0;g[b+800>>2]=0.0;g[b+816>>2]=0.0;g[b+928>>2]=0.0;g[b+876>>2]=0.0;g[b+880>>2]=.10000000149011612;g[b+884>>2]=300.0;g[b+868>>2]=1.0;g[b+872>>2]=-1.0;g[b+896>>2]=0.0;g[b+900>>2]=.20000000298023224;g[b+904>>2]=0.0;g[b+908>>2]=0.0;g[b+888>>2]=1.0;g[b+892>>2]=.5;c[b+924>>2]=0;g[b+916>>2]=0.0;a[b+912>>0]=0;g[b+992>>2]=0.0;g[b+940>>2]=0.0;g[b+944>>2]=.10000000149011612;g[b+948>>2]=300.0;g[b+932>>2]=1.0;g[b+936>>2]=-1.0;g[b+960>>2]=0.0;g[b+964>>2]=.20000000298023224;g[b+968>>2]=0.0;g[b+972>>2]=0.0;g[b+952>>2]=1.0;g[b+956>>2]=.5;c[b+988>>2]=0;g[b+980>>2]=0.0;a[b+976>>0]=0;g[b+1056>>2]=0.0;g[b+1004>>2]=0.0;g[b+1008>>2]=.10000000149011612;g[b+1012>>2]=300.0;g[b+996>>2]=1.0;g[b+1e3>>2]=-1.0;g[b+1024>>2]=0.0;g[b+1028>>2]=.20000000298023224;g[b+1032>>2]=0.0;g[b+1036>>2]=0.0;g[b+1016>>2]=1.0;g[b+1020>>2]=.5;c[b+1052>>2]=0;g[b+1044>>2]=0.0;a[b+1040>>0]=0;a[b+1300>>0]=f&1;a[b+1301>>0]=1;c[b+1304>>2]=0;a[b+1308>>0]=0;y=+g[b+112>>2];E=+g[d+4>>2];x=+g[b+128>>2];D=+g[d+8>>2];w=+g[b+144>>2];C=+g[d+12>>2];v=+g[b+116>>2];u=+g[b+132>>2];t=+g[b+148>>2];s=+g[b+120>>2];q=+g[b+136>>2];o=+g[b+152>>2];B=+g[d+20>>2];A=+g[d+24>>2];z=+g[d+28>>2];r=+g[d+36>>2];p=+g[d+40>>2];n=+g[d+44>>2];G=+g[b+160>>2];F=+g[b+164>>2];k=+g[b+168>>2];m=+g[d+52>>2]+(E*G+D*F+C*k);j=B*G+A*F+z*k+ +g[d+56>>2];k=r*G+p*F+n*k+ +g[d+60>>2];g[b+48>>2]=y*E+x*D+w*C;g[b+52>>2]=E*v+D*u+C*t;g[b+56>>2]=E*s+D*q+C*o;g[b+60>>2]=0.0;g[b+64>>2]=y*B+x*A+w*z;g[b+68>>2]=v*B+u*A+t*z;g[b+72>>2]=s*B+q*A+o*z;g[b+76>>2]=0.0;g[b+80>>2]=y*r+x*p+w*n;g[b+84>>2]=v*r+u*p+t*n;g[b+88>>2]=s*r+q*p+o*n;g[b+92>>2]=0.0;g[b+96>>2]=m;g[b+100>>2]=j;g[b+104>>2]=k;g[b+108>>2]=0.0;bd(b,(c[b+28>>2]|0)+4|0,(c[b+32>>2]|0)+4|0);l=i;return}function Od(b,d,e,f,h,i,j,k){b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;j=j|0;k=k|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+288|0;c[w+208>>2]=c[d>>2];c[w+208+4>>2]=c[d+4>>2];c[w+208+8>>2]=c[d+8>>2];c[w+208+12>>2]=c[d+12>>2];o=w+208+16|0;c[o>>2]=c[e>>2];c[o+4>>2]=c[e+4>>2];c[o+8>>2]=c[e+8>>2];c[o+12>>2]=c[e+12>>2];d=w+208+32|0;c[d>>2]=c[f>>2];c[d+4>>2]=c[f+4>>2];c[d+8>>2]=c[f+8>>2];c[d+12>>2]=c[f+12>>2];q=c[j>>2]|0;r=c[j+4>>2]|0;s=c[j+8>>2]|0;t=c[j+16>>2]|0;u=c[j+12>>2]|0;p=c[j+20>>2]|0;c[w+156>>2]=c[w+208>>2];c[w+156+4>>2]=c[w+208+4>>2];c[w+156+8>>2]=c[w+208+8>>2];c[w+156+12>>2]=c[w+208+12>>2];c[w+172>>2]=c[o>>2];c[w+172+4>>2]=c[o+4>>2];c[w+172+8>>2]=c[o+8>>2];c[w+172+12>>2]=c[o+12>>2];c[w+188>>2]=c[d>>2];c[w+188+4>>2]=c[d+4>>2];c[w+188+8>>2]=c[d+8>>2];c[w+188+12>>2]=c[d+12>>2];d=c[b+136>>2]|0;if((d|0)==(c[b+140>>2]|0)?(v=d|0?d<<1:1,(d|0)<(v|0)):0){if(!v)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((v*284|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[b+136>>2]|0}if((d|0)>0){j=0;do{f=c[b+144>>2]|0;m=e+(j*284|0)|0;n=f+(j*284|0)|0;o=m+92|0;do{c[m>>2]=c[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));m=e+(j*284|0)+92|0;n=f+(j*284|0)+92|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];m=e+(j*284|0)+108|0;n=f+(j*284|0)+108|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];m=e+(j*284|0)+124|0;n=f+(j*284|0)+124|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];m=e+(j*284|0)+140|0;n=f+(j*284|0)+140|0;c[m>>2]=c[n>>2];c[m+4>>2]=c[n+4>>2];c[m+8>>2]=c[n+8>>2];c[m+12>>2]=c[n+12>>2];m=e+(j*284|0)+156|0;n=f+(j*284|0)+156|0;o=m+128|0;do{c[m>>2]=c[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));j=j+1|0}while((j|0)!=(d|0))}d=c[b+144>>2]|0;if(d|0){if(a[b+148>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+144>>2]=0}a[b+148>>0]=1;c[b+144>>2]=e;c[b+140>>2]=v;d=c[b+136>>2]|0}e=c[b+144>>2]|0;m=e+(d*284|0)|0;n=w;o=m+92|0;do{c[m>>2]=c[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));m=e+(d*284|0)+92|0;c[m>>2]=c[w+92>>2];c[m+4>>2]=c[w+92+4>>2];c[m+8>>2]=c[w+92+8>>2];c[m+12>>2]=c[w+92+12>>2];m=e+(d*284|0)+108|0;c[m>>2]=c[w+108>>2];c[m+4>>2]=c[w+108+4>>2];c[m+8>>2]=c[w+108+8>>2];c[m+12>>2]=c[w+108+12>>2];m=e+(d*284|0)+124|0;c[m>>2]=c[w+124>>2];c[m+4>>2]=c[w+124+4>>2];c[m+8>>2]=c[w+124+8>>2];c[m+12>>2]=c[w+124+12>>2];m=e+(d*284|0)+140|0;c[m>>2]=c[w+140>>2];c[m+4>>2]=c[w+140+4>>2];c[m+8>>2]=c[w+140+8>>2];c[m+12>>2]=c[w+140+12>>2];d=e+(d*284|0)+156|0;m=d;n=w+156|0;o=m+48|0;do{c[m>>2]=c[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));g[d+48>>2]=h;c[d+52>>2]=u;g[d+56>>2]=i;c[d+60>>2]=q;c[d+64>>2]=r;c[d+68>>2]=s;c[d+72>>2]=t;g[d+76>>2]=0.0;g[d+80>>2]=0.0;g[d+84>>2]=0.0;g[d+88>>2]=.10000000149011612;c[d+92>>2]=p;g[d+96>>2]=0.0;g[d+100>>2]=0.0;a[d+104>>0]=k&1;m=d+105|0;n=w+256|0;o=m+23|0;do{a[m>>0]=a[n>>0]|0;m=m+1|0;n=n+1|0}while((m|0)<(o|0));k=c[b+136>>2]|0;c[b+136>>2]=k+1;k=(c[b+144>>2]|0)+(k*284|0)|0;Eg(c[b+116>>2]|0,k,0);le(c[b+116>>2]|0,c[b+144>>2]|0,(c[b+136>>2]|0)+-1|0,0);l=w;return k|0}function Pd(b,d,e,f,g,h){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0;if((h|0)<0){h=c[b+8>>2]|0;+pb[c[(c[h>>2]|0)+12>>2]&3](h,d,e,f,g,c[b+12>>2]|0,c[b+16>>2]|0,c[b+4>>2]|0,c[b+20>>2]|0,c[b+24>>2]|0);return}o=c[b+16>>2]|0;a:do if((o|0)>0){l=c[b+12>>2]|0;i=0;while(1){m=l+(i<<2)|0;k=c[m>>2]|0;j=c[(c[k+28>>2]|0)+208>>2]|0;if((j|0)<=-1)j=c[(c[k+32>>2]|0)+208>>2]|0;if((j|0)==(h|0))break a;i=i+1|0;if((i|0)>=(o|0)){m=0;break}}}else{i=0;m=0}while(0);if((i|0)<(o|0)){n=c[b+12>>2]|0;j=0;do{l=c[n+(i<<2)>>2]|0;k=c[(c[l+28>>2]|0)+208>>2]|0;if((k|0)<=-1)k=c[(c[l+32>>2]|0)+208>>2]|0;j=((k|0)==(h|0)&1)+j|0;i=i+1|0}while((i|0)!=(o|0));h=j}else h=0;i=c[b+4>>2]|0;if((c[i+72>>2]|0)<2){o=c[b+8>>2]|0;+pb[c[(c[o>>2]|0)+12>>2]&3](o,d,e,f,g,m,h,i,c[b+20>>2]|0,c[b+24>>2]|0);return}if((e|0)>0){j=c[b+32>>2]|0;i=c[b+36>>2]|0;o=0;do{n=d+(o<<2)|0;if((j|0)==(i|0)){l=i|0?i<<1:1;if((i|0)<(l|0)){if(!l)j=0;else{c[6472]=(c[6472]|0)+1;i=ic((l<<2|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[b+32>>2]|0}if((i|0)>0){k=0;do{c[j+(k<<2)>>2]=c[(c[b+40>>2]|0)+(k<<2)>>2];k=k+1|0}while((k|0)!=(i|0))}k=c[b+40>>2]|0;if(k){if(a[b+44>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);i=c[b+32>>2]|0}c[b+40>>2]=0}a[b+44>>0]=1;c[b+40>>2]=j;c[b+36>>2]=l;j=i;i=l}else j=i}c[(c[b+40>>2]|0)+(j<<2)>>2]=c[n>>2];j=j+1|0;c[b+32>>2]=j;o=o+1|0}while((o|0)!=(e|0))}if((g|0)>0){j=c[b+52>>2]|0;i=c[b+56>>2]|0;o=0;do{n=f+(o<<2)|0;if((j|0)==(i|0)){l=i|0?i<<1:1;if((i|0)<(l|0)){if(!l)j=0;else{c[6472]=(c[6472]|0)+1;i=ic((l<<2|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[b+52>>2]|0}if((i|0)>0){k=0;do{c[j+(k<<2)>>2]=c[(c[b+60>>2]|0)+(k<<2)>>2];k=k+1|0}while((k|0)!=(i|0))}k=c[b+60>>2]|0;if(k){if(a[b+64>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);i=c[b+52>>2]|0}c[b+60>>2]=0}a[b+64>>0]=1;c[b+60>>2]=j;c[b+56>>2]=l;j=i;i=l}else j=i}c[(c[b+60>>2]|0)+(j<<2)>>2]=c[n>>2];j=j+1|0;c[b+52>>2]=j;o=o+1|0}while((o|0)!=(g|0))}if((h|0)>0){i=c[b+72>>2]|0;j=c[b+76>>2]|0;o=0;do{n=m+(o<<2)|0;if((i|0)==(j|0)){l=j|0?j<<1:1;if((j|0)<(l|0)){if(!l){i=j;j=0}else{c[6472]=(c[6472]|0)+1;i=ic((l<<2|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[b+72>>2]|0}if((i|0)>0){k=0;do{c[j+(k<<2)>>2]=c[(c[b+80>>2]|0)+(k<<2)>>2];k=k+1|0}while((k|0)!=(i|0))}k=c[b+80>>2]|0;if(k){if(a[b+84>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);i=c[b+72>>2]|0}c[b+80>>2]=0}a[b+84>>0]=1;c[b+80>>2]=j;c[b+76>>2]=l;j=l}else i=j}c[(c[b+80>>2]|0)+(i<<2)>>2]=c[n>>2];i=i+1|0;c[b+72>>2]=i;o=o+1|0}while((o|0)!=(h|0))}else i=c[b+72>>2]|0;if(((c[b+52>>2]|0)+i|0)<=(c[(c[b+4>>2]|0)+72>>2]|0))return;Xg(b);return}function Qd(d,f,h,i){d=d|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0;w=l;l=l+80|0;v=c[d+48>>2]|0;c[w>>2]=7056;c[w+4>>2]=v;c[w+8>>2]=f;v=c[d+52>>2]|0;if(!(a[v+60>>0]|0)){f=c[v+56>>2]|0;if((f|0)>0){d=f;o=0;p=c[v+96>>2]|0;f=0;while(1){f=f+1|0;if(!(+g[h>>2]>+g[p+16>>2])?!(+g[i>>2]<+g[p>>2]):0)j=1;else j=0;if(!(!(+g[h+8>>2]>+g[p+24>>2])?!(+g[i+8>>2]<+g[p+8>>2]):0))j=0;if(!(+g[h+4>>2]>+g[p+20>>2])?!(+g[i+4>>2]<+g[p+4>>2]):0){k=c[p+32>>2]|0;if(j&(k|0)==-1){Kb[c[(c[w>>2]|0)+8>>2]&127](w,c[p+36>>2]|0,c[p+40>>2]|0);d=c[v+56>>2]|0;n=43}else{m=k;k=(k|0)==-1;n=42}}else{k=c[p+32>>2]|0;m=k;k=(k|0)==-1;j=0;n=42}if((n|0)==42){n=0;if(k|j)n=43;else{k=m+o|0;j=p+(m<<6)|0}}if((n|0)==43){k=o+1|0;j=p+64|0}if((k|0)<(d|0)){o=k;p=j}else break}}else f=0;if((c[6204]|0)>=(f|0)){l=w;return}c[6204]=f;l=w;return}z=+g[h>>2];D=+g[h+4>>2];H=+g[h+8>>2];G=+g[v+4>>2];z=z>2];D=D>2];H=H>2];E=+g[v+24>>2];A=+g[v+28>>2];F=+g[v+36>>2];B=+g[v+40>>2];x=+g[v+44>>2];s=~~(((I>1]=s;t=~~(((E>1]=t;b[w+66+4>>1]=u;H=+g[i>>2];D=+g[i+4>>2];z=+g[i+8>>2];H=H>1]=i;q=~~(((E>1]=q;b[w+60+4>>1]=r;switch(c[v+144>>2]|0){case 0:{o=c[v+56>>2]|0;if((o|0)>0){d=0;j=c[v+136>>2]|0;f=0;do{f=f+1|0;m=((i&65535)>=(e[j>>1]|0)?(s&65535)<=(e[j+6>>1]|0):0)&(u&65535)<=(e[j+10>>1]|0)&(r&65535)>=(e[j+4>>1]|0)&(t&65535)<=(e[j+8>>1]|0)&(q&65535)>=(e[j+2>>1]|0);n=j+12|0;k=c[n>>2]|0;if((k|0)>-1&m)Kb[c[(c[w>>2]|0)+8>>2]&127](w,k>>21,k&2097151);if((k|0)>-1|m){d=d+1|0;j=j+16|0}else{v=c[n>>2]|0;d=d-v|0;j=j+(0-v<<4)|0}}while((d|0)<(o|0))}else f=0;if((c[6204]|0)<(f|0))c[6204]=f;break}case 1:{if((c[v+152>>2]|0)>0){h=0;do{f=c[v+160>>2]|0;if(((i&65535)>=(e[f+(h<<5)>>1]|0)?(s&65535)<=(e[f+(h<<5)+6>>1]|0):0)&(u&65535)<=(e[f+(h<<5)+10>>1]|0)&(r&65535)>=(e[f+(h<<5)+4>>1]|0)&(t&65535)<=(e[f+(h<<5)+8>>1]|0)&(q&65535)>=(e[f+(h<<5)+2>>1]|0)){p=c[f+(h<<5)+12>>2]|0;o=c[f+(h<<5)+16>>2]|0;if((o|0)>0){d=p;j=(c[v+136>>2]|0)+(p<<4)|0;f=0;do{f=f+1|0;m=((i&65535)>=(e[j>>1]|0)?(s&65535)<=(e[j+6>>1]|0):0)&(u&65535)<=(e[j+10>>1]|0)&(r&65535)>=(e[j+4>>1]|0)&(t&65535)<=(e[j+8>>1]|0)&(q&65535)>=(e[j+2>>1]|0);n=j+12|0;k=c[n>>2]|0;if((k|0)>-1&m)Kb[c[(c[w>>2]|0)+8>>2]&127](w,k>>21,k&2097151);if((k|0)>-1|m){d=d+1|0;j=j+16|0}else{n=c[n>>2]|0;d=d-n|0;j=j+(0-n<<4)|0}}while((d|0)<(o+p|0))}else f=0;if((c[6204]|0)<(f|0))c[6204]=f}h=h+1|0}while((h|0)<(c[v+152>>2]|0))}break}case 2:{vk(c[v+136>>2]|0,w,w+66|0,w+60|0);break}default:{}}l=w;return}function Rd(d,e,f,h,i){d=d|0;e=e|0;f=+f;h=+h;i=+i;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;q=l;l=l+240|0;o=+g[d+96>>2]+h;p=+g[d+100>>2]+i;g[d+112>>2]=+g[d+92>>2]+f;g[d+116>>2]=o;g[d+120>>2]=p;g[d+124>>2]=0.0;c[q+168>>2]=1065353216;c[q+168+4>>2]=0;c[q+168+4+4>>2]=0;c[q+168+4+8>>2]=0;c[q+168+4+12>>2]=0;c[q+168+20>>2]=1065353216;c[q+168+24>>2]=0;c[q+168+24+4>>2]=0;c[q+168+24+8>>2]=0;c[q+168+24+12>>2]=0;c[q+168+40>>2]=1065353216;j=q+168+44|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;c[q+104>>2]=1065353216;c[q+104+4>>2]=0;c[q+104+4+4>>2]=0;c[q+104+4+8>>2]=0;c[q+104+4+12>>2]=0;c[q+104+20>>2]=1065353216;c[q+104+24>>2]=0;c[q+104+24+4>>2]=0;c[q+104+24+8>>2]=0;c[q+104+24+12>>2]=0;c[q+104+40>>2]=1065353216;j=q+104+44|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[j+16>>2]=0;p=1.0;j=10;while(1){if((j|0)<=0){j=14;break}j=j+-1|0;c[q+168+48>>2]=c[d+92>>2];c[q+168+48+4>>2]=c[d+92+4>>2];c[q+168+48+8>>2]=c[d+92+8>>2];c[q+168+48+12>>2]=c[d+92+12>>2];c[q+104+48>>2]=c[d+112>>2];c[q+104+48+4>>2]=c[d+112+4>>2];c[q+104+48+8>>2]=c[d+112+8>>2];c[q+104+48+12>>2]=c[d+112+12>>2];n=+g[d+92>>2]-+g[d+112>>2];o=+g[d+96>>2]-+g[d+116>>2];f=+g[d+100>>2]-+g[d+120>>2];r=c[d+8>>2]|0;g[q+4>>2]=1.0;b[q+8>>1]=1;b[q+10>>1]=-1;c[q+76>>2]=0;c[q+12>>2]=0;c[q+12+4>>2]=0;c[q+12+8>>2]=0;c[q+12+12>>2]=0;c[q+12+16>>2]=0;c[q+12+20>>2]=0;c[q+12+24>>2]=0;c[q+12+28>>2]=0;c[q>>2]=5132;c[q+80>>2]=r;g[q+84>>2]=n;g[q+88>>2]=o;g[q+92>>2]=f;g[q+96>>2]=0.0;g[q+100>>2]=0.0;r=c[(c[r+188>>2]|0)+4>>2]|0;b[q+8>>1]=r;b[q+10>>1]=r>>>16;r=c[d+12>>2]|0;f=+gb[c[(c[r>>2]|0)+48>>2]&15](r);r=c[d+12>>2]|0;Bb[c[(c[r>>2]|0)+44>>2]&31](r,f+ +g[d+56>>2]);if(!(a[d+170>>0]|0))zd(e,c[d+12>>2]|0,q+168|0,q+104|0,q,+g[e+56>>2]);else gd(c[d+8>>2]|0,c[d+12>>2]|0,q+168|0,q+104|0,q,+g[e+56>>2]);r=c[d+12>>2]|0;Bb[c[(c[r>>2]|0)+44>>2]&31](r,f);o=+g[q+4>>2];p=p-o;if(o<1.0){f=+g[d+112>>2];m=+g[d+92>>2];i=+g[d+116>>2];n=+g[d+96>>2];k=+g[d+120>>2];o=+g[d+100>>2];h=+C(+((f-m)*(f-m)+(i-n)*(i-n)+(k-o)*(k-o)));if(h>1.1920928955078125e-07){v=+g[q+44>>2];t=+g[q+48>>2];x=+g[q+52>>2];w=((f-m)*(1.0/h)*v+(i-n)*(1.0/h)*t+(k-o)*(1.0/h)*x)*2.0;u=(f-m)*(1.0/h)-v*w;s=(i-n)*(1.0/h)-t*w;w=(k-o)*(1.0/h)-x*w;k=1.0/+C(+(w*w+(u*u+s*s)));c[d+112>>2]=c[d+92>>2];c[d+112+4>>2]=c[d+92+4>>2];c[d+112+8>>2]=c[d+92+8>>2];c[d+112+12>>2]=c[d+92+12>>2];f=h*(k*u-v*(x*k*w+(v*k*u+t*k*s)))+ +g[d+112>>2];g[d+112>>2]=f;i=h*(k*s-t*(x*k*w+(v*k*u+t*k*s)))+ +g[d+116>>2];g[d+116>>2]=i;k=h*(k*w-x*(x*k*w+(v*k*u+t*k*s)))+ +g[d+120>>2];g[d+120>>2]=k;h=i}else h=i;i=f-m;h=h-n;f=k-o;if(!(i*i+h*h+f*f>1.1920928955078125e-07)){j=11;break}x=1.0/+C(+(i*i+h*h+f*f));if(+g[d+76>>2]*i*x+h*x*+g[d+80>>2]+f*x*+g[d+84>>2]<=0.0){j=11;break}}else{c[d+92>>2]=c[d+112>>2];c[d+92+4>>2]=c[d+112+4>>2];c[d+92+8>>2]=c[d+112+8>>2];c[d+92+12>>2]=c[d+112+12>>2]}if(!(p>.009999999776482582)){j=14;break}}if((j|0)==11){l=q;return}else if((j|0)==14){l=q;return}}function Sd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;c[b+24>>2]=d;g[b+28>>2]=0.0;c[b+32>>2]=0;c[b+36>>2]=1;g[b+40>>2]=1.0;a[b+44>>0]=1;c[b+48>>2]=0;a[b+52>>0]=0;a[b+53>>0]=1;a[b+54>>0]=1;g[b+56>>2]=.03999999910593033;a[b+60>>0]=0;g[b+64>>2]=0.0;c[b+68>>2]=e;c[b+72>>2]=0;a[b+76>>0]=1;c[b+80>>2]=0;c[b+84>>2]=0;c[b+88>>2]=0;g[b+92>>2]=.6000000238418579;g[b+96>>2]=1.0;g[b+100>>2]=.30000001192092896;g[b+104>>2]=.01666666753590107;g[b+108>>2]=0.0;g[b+116>>2]=20.0;c[b+112>>2]=10;g[b+124>>2]=.20000000298023224;g[b+128>>2]=.800000011920929;g[b+132>>2]=0.0;g[b+120>>2]=1.0;c[b+136>>2]=1;g[b+140>>2]=-.03999999910593033;g[b+144>>2]=.10000000149011612;g[b+148>>2]=0.0;g[b+152>>2]=.8500000238418579;c[b+156>>2]=260;c[b+160>>2]=2;c[b+164>>2]=128;g[b+168>>2]=100.0;g[b+172>>2]=1000000015047466219876688.0e6;c[b>>2]=4288;a[b+192>>0]=1;c[b+188>>2]=0;c[b+180>>2]=0;c[b+184>>2]=0;c[b+196>>2]=0;c[b+200>>2]=f;a[b+224>>0]=1;c[b+220>>2]=0;c[b+212>>2]=0;c[b+216>>2]=0;a[b+244>>0]=1;c[b+240>>2]=0;c[b+232>>2]=0;c[b+236>>2]=0;c[b+248>>2]=0;c[b+252>>2]=-1054867456;a[b+274>>0]=0;a[b+275>>0]=0;c[b+256>>2]=0;c[b+256+4>>2]=0;c[b+256+8>>2]=0;c[b+256+12>>2]=0;a[b+292>>0]=1;c[b+288>>2]=0;c[b+280>>2]=0;c[b+284>>2]=0;c[b+296>>2]=0;a[b+300>>0]=1;a[b+320>>0]=1;c[b+316>>2]=0;c[b+308>>2]=0;c[b+312>>2]=0;if(!f){c[6472]=(c[6472]|0)+1;f=ic(215)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}c[f>>2]=4952;a[f+20>>0]=1;c[f+16>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;a[f+40>>0]=1;c[f+36>>2]=0;c[f+28>>2]=0;c[f+32>>2]=0;a[f+60>>0]=1;c[f+56>>2]=0;c[f+48>>2]=0;c[f+52>>2]=0;a[f+80>>0]=1;c[f+76>>2]=0;c[f+68>>2]=0;c[f+72>>2]=0;a[f+100>>0]=1;c[f+96>>2]=0;c[f+88>>2]=0;c[f+92>>2]=0;a[f+120>>0]=1;c[f+116>>2]=0;c[f+108>>2]=0;c[f+112>>2]=0;a[f+140>>0]=1;c[f+136>>2]=0;c[f+128>>2]=0;c[f+132>>2]=0;a[f+160>>0]=1;c[f+156>>2]=0;c[f+148>>2]=0;c[f+152>>2]=0;a[f+180>>0]=1;c[f+176>>2]=0;c[f+168>>2]=0;c[f+172>>2]=0;c[f+192>>2]=0;c[b+200>>2]=f;f=1}else f=0;a[b+273>>0]=f;c[6472]=(c[6472]|0)+1;f=ic(87)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}c[f>>2]=5648;a[f+20>>0]=1;c[f+16>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;a[f+40>>0]=1;c[f+36>>2]=0;c[f+28>>2]=0;c[f+32>>2]=0;a[f+60>>0]=1;c[f+56>>2]=0;c[f+48>>2]=0;c[f+52>>2]=0;a[f+64>>0]=1;c[b+204>>2]=f;a[b+272>>0]=1;c[6472]=(c[6472]|0)+1;f=ic(107)|0;if(!f){e=0;h=c[b+200>>2]|0;c[e>>2]=4500;f=e+4|0;c[f>>2]=0;f=e+8|0;c[f>>2]=h;f=e+12|0;c[f>>2]=0;f=e+16|0;c[f>>2]=0;f=e+20|0;c[f>>2]=0;f=e+24|0;c[f>>2]=d;d=e+44|0;a[d>>0]=1;d=e+40|0;c[d>>2]=0;d=e+32|0;c[d>>2]=0;d=e+36|0;c[d>>2]=0;d=e+64|0;a[d>>0]=1;d=e+60|0;c[d>>2]=0;d=e+52|0;c[d>>2]=0;d=e+56|0;c[d>>2]=0;d=e+84|0;a[d>>0]=1;d=e+80|0;c[d>>2]=0;d=e+72|0;c[d>>2]=0;d=e+76|0;c[d>>2]=0;c[b+196>>2]=e;return}c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16;f=c[b+200>>2]|0;c[h>>2]=4500;e=h+4|0;c[e>>2]=0;e=h+8|0;c[e>>2]=f;e=h+12|0;c[e>>2]=0;e=h+16|0;c[e>>2]=0;e=h+20|0;c[e>>2]=0;e=h+24|0;c[e>>2]=d;d=h+44|0;a[d>>0]=1;d=h+40|0;c[d>>2]=0;d=h+32|0;c[d>>2]=0;d=h+36|0;c[d>>2]=0;d=h+64|0;a[d>>0]=1;d=h+60|0;c[d>>2]=0;d=h+52|0;c[d>>2]=0;d=h+56|0;c[d>>2]=0;d=h+84|0;a[d>>0]=1;d=h+80|0;c[d>>2]=0;d=h+72|0;c[d>>2]=0;d=h+76|0;c[d>>2]=0;c[b+196>>2]=h;return}function Td(a,d,f,h,i){a=a|0;d=d|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=l;l=l+16|0;c[d+16>>2]=c[f>>2];c[d+16+4>>2]=c[f+4>>2];c[d+16+8>>2]=c[f+8>>2];c[d+16+12>>2]=c[f+12>>2];c[d+32>>2]=c[h>>2];c[d+32+4>>2]=c[h+4>>2];c[d+32+8>>2]=c[h+8>>2];c[d+32+12>>2]=c[h+12>>2];u=c[a+60>>2]|0;F=c[d+12>>2]&65535;hj(a,I+6|0,+g[f>>2],+g[f+4>>2],+g[f+8>>2],0);hj(a,I,+g[h>>2],+g[h+4>>2],+g[h+8>>2],1);E=0;do{t=b[u+(F<<6)+48+(E<<1)>>1]|0;y=b[u+(F<<6)+54+(E<<1)>>1]|0;o=b[I+6+(E<<1)>>1]|0;p=a+68+(E<<2)|0;r=c[p>>2]|0;s=(o&65535)-(e[r+((t&65535)<<2)>>1]|0)|0;q=b[I+(E<<1)>>1]|0;H=(q&65535)-(e[r+((y&65535)<<2)>>1]|0)|0;b[r+((t&65535)<<2)>>1]=o;b[r+((y&65535)<<2)>>1]=q;if((s|0)<0)kh(a,E,t);a:do if((H|0)>0?(D=c[p>>2]|0,v=c[a+60>>2]|0,G=e[D+((y&65535)<<2)+2>>1]|0,w=b[D+((y&65535)<<2)+6>>1]|0,w<<16>>16):0){n=1<>1]|0;if((e[r>>1]|0)<(k&65535))break a;m=c[a+60>>2]|0;j=j&65535;if(!(k&1)){if(((((e[v+(G<<6)+54+(n<<1)>>1]|0)>=(e[m+(j<<6)+48+(n<<1)>>1]|0)?(e[m+(j<<6)+54+(n<<1)>>1]|0)>=(e[v+(G<<6)+48+(n<<1)>>1]|0):0)?(e[v+(G<<6)+54+((1<>1]|0)>=(e[m+(j<<6)+48+((1<>1]|0):0)?(e[m+(j<<6)+54+((1<>1]|0)>=(e[v+(G<<6)+48+((1<>1]|0):0)?(z=c[a+92>>2]|0,x=m+((e[r+2>>1]|0)<<6)|0,ub[c[(c[z>>2]|0)+8>>2]&63](z,x,m+(j<<6)|0)|0,z=c[a+96>>2]|0,z|0):0)ub[c[(c[z>>2]|0)+8>>2]&63](z,x,m+(j<<6)|0)|0;j=m+(j<<6)+48+(E<<1)|0}else j=m+(j<<6)+54+(E<<1)|0;b[j>>1]=(b[j>>1]|0)+-1<<16>>16;b[o>>1]=(b[o>>1]|0)+1<<16>>16;j=e[r>>1]|e[r+2>>1]<<16;m=e[q>>1]|e[q+2>>1]<<16;b[r>>1]=m;b[r+2>>1]=m>>>16;b[q>>1]=j;b[q+2>>1]=j>>>16;j=b[r+10>>1]|0}while(j<<16>>16!=0)}while(0);b:do if((s|0)>0?(A=c[p>>2]|0,B=b[A+((t&65535)<<2)+6>>1]|0,B<<16>>16):0){q=(c[a+60>>2]|0)+((e[A+((t&65535)<<2)+2>>1]|0)<<6)+48+(E<<1)|0;p=1<>1]|0;if((e[o>>1]|0)<(j&65535))break b;m=c[a+60>>2]|0;k=k&65535;if(!(j&1))j=m+(k<<6)+48+(E<<1)|0;else{j=e[o+2>>1]|0;if(((((e[m+(j<<6)+54+(p<<1)>>1]|0)>=(e[m+(k<<6)+48+(p<<1)>>1]|0)?(e[m+(k<<6)+54+(p<<1)>>1]|0)>=(e[m+(j<<6)+48+(p<<1)>>1]|0):0)?(e[m+(j<<6)+54+((1<>1]|0)>=(e[m+(k<<6)+48+((1<>1]|0):0)?(e[m+(k<<6)+54+((1<>1]|0)>=(e[m+(j<<6)+48+((1<>1]|0):0)?(C=c[a+92>>2]|0,vb[c[(c[C>>2]|0)+12>>2]&31](C,m+(j<<6)|0,m+(k<<6)|0,i)|0,C=c[a+96>>2]|0,C|0):0)vb[c[(c[C>>2]|0)+12>>2]&31](C,m+(j<<6)|0,m+(k<<6)|0,i)|0;j=m+(k<<6)+54+(E<<1)|0}b[j>>1]=(b[j>>1]|0)+-1<<16>>16;b[q>>1]=(b[q>>1]|0)+1<<16>>16;k=e[o>>1]|e[o+2>>1]<<16;t=e[n>>1]|e[n+2>>1]<<16;b[o>>1]=t;b[o+2>>1]=t>>>16;b[n>>1]=k;b[n+2>>1]=k>>>16;k=b[o+10>>1]|0}while(k<<16>>16!=0)}while(0);if((H|0)<0)gh(a,E,y,i);E=E+1|0}while((E|0)!=3);j=c[a+108>>2]|0;if(!j){l=I;return}Rb[c[(c[j>>2]|0)+16>>2]&31](j,c[d+60>>2]|0,f,h,i);l=I;return}function Ud(b,d,e){b=b|0;d=+d;e=+e;var f=0,h=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0;s=l;l=l+80|0;f=c[b+8>>2]|0;if(!f){f=c[b+4>>2]|0;if(!f){k=0.0;o=0.0;m=0.0;d=0.0;j=0.0;n=0.0}else{r=+g[f+336>>2];j=+g[b+172>>2];t=+g[f+340>>2];p=+g[b+168>>2];n=+g[b+164>>2];q=+g[f+332>>2];k=+g[f+316>>2];o=+g[f+320>>2];m=+g[f+324>>2];d=r*j-t*p;j=t*n-j*q;n=p*q-r*n}}else{t=+g[f+332>>2];j=+g[b+172>>2];p=+g[f+336>>2];q=+g[b+168>>2];n=+g[b+164>>2];r=+g[f+328>>2];k=+g[f+312>>2];o=+g[f+316>>2];m=+g[f+320>>2];d=t*j-p*q;j=p*n-j*r;n=q*r-t*n}p=k+d;r=o+j;q=m+n;f=c[b+20>>2]|0;if(!f){f=c[b+16>>2]|0;if(!f){k=0.0;n=0.0;m=0.0;d=0.0;j=0.0;o=0.0}else{t=+g[f+336>>2];j=+g[b+188>>2];w=+g[f+340>>2];v=+g[b+184>>2];o=+g[b+180>>2];u=+g[f+332>>2];k=+g[f+316>>2];n=+g[f+320>>2];m=+g[f+324>>2];d=t*j-w*v;j=w*o-j*u;o=v*u-t*o}}else{w=+g[f+332>>2];j=+g[b+188>>2];t=+g[f+336>>2];u=+g[b+184>>2];o=+g[b+180>>2];v=+g[f+328>>2];k=+g[f+312>>2];n=+g[f+316>>2];m=+g[f+320>>2];d=w*j-t*u;j=t*o-j*v;o=u*v-w*o}p=p-(k+d);n=r-(n+j);m=q-(m+o);d=+g[b+196>>2];j=+g[b+200>>2];k=+g[b+204>>2];a[s+36+32>>0]=1;c[s+36+16>>2]=0;c[s+36+16+4>>2]=0;c[s+36+16+8>>2]=0;c[s+36+16+12>>2]=0;c[s+36>>2]=c[b+72>>2];c[s+36+4>>2]=c[b+72+4>>2];c[s+36+8>>2]=c[b+72+8>>2];c[s+36+12>>2]=c[b+72+12>>2];if(d*p+n*j+m*k<0.0){u=+g[b+212>>2];v=+g[s+36>>2]+((d*p+n*j+m*k)*d+(p-(d*p+n*j+m*k)*d)*u);g[s+36>>2]=v;w=(d*p+n*j+m*k)*j+u*(n-(d*p+n*j+m*k)*j)+ +g[s+36+4>>2];g[s+36+4>>2]=w;k=(d*p+n*j+m*k)*k+u*(m-(d*p+n*j+m*k)*k)+ +g[s+36+8>>2];g[s+36+8>>2]=k;d=v;j=w;f=s+36+8|0;h=s+36|0;i=s+36+4|0}else{d=+g[s+36>>2];j=+g[s+36+4>>2];k=+g[s+36+8>>2];f=s+36+8|0;h=s+36|0;i=s+36+4|0}m=(+g[b+104>>2]*d+ +g[b+108>>2]*j+ +g[b+112>>2]*k)*e;n=(d*+g[b+120>>2]+j*+g[b+124>>2]+k*+g[b+128>>2])*e;d=(d*+g[b+136>>2]+j*+g[b+140>>2]+k*+g[b+144>>2])*e;g[h>>2]=m;g[i>>2]=n;g[f>>2]=d;g[s+36+12>>2]=0.0;f=c[b+4>>2]|0;if((f|0)!=(c[b+16>>2]|0)){f=s;h=s+36|0;i=f+36|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));w=-+g[s+4>>2];v=-+g[s+8>>2];g[s>>2]=-+g[s>>2];g[s+4>>2]=w;g[s+8>>2]=v;g[s+12>>2]=0.0;v=-+g[s+20>>2];w=-+g[s+24>>2];g[s+16>>2]=-+g[s+16>>2];g[s+20>>2]=v;g[s+24>>2]=w;g[s+28>>2]=0.0;Dh(b+4|0,s,b+164|0);Dh(b+16|0,s+36|0,b+180|0);l=s;return}if(!(m==m&n==n&(d==d&0.0==0.0))){l=s;return}w=+C(+(m*m+n*n+d*d));if(w<+g[f+368>>2]){l=s;return}h=c[s+36+32>>2]|0;w=+g[f+372>>2];g[s+12>>2]=0.0;g[s+28>>2]=0.0;c[s+32>>2]=h;g[s>>2]=-(m*w);g[s+4>>2]=-(n*w);g[s+8>>2]=-(d*w);g[s+16>>2]=w*-0.0;g[s+20>>2]=w*-0.0;g[s+24>>2]=w*-0.0;Dh(b+4|0,s,b+164|0);d=+g[(c[b+4>>2]|0)+372>>2];f=s;h=s+36|0;i=f+36|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));g[s>>2]=d*+g[s>>2];g[s+4>>2]=d*+g[s+4>>2];g[s+8>>2]=d*+g[s+8>>2];g[s+16>>2]=d*+g[s+16>>2];g[s+20>>2]=d*+g[s+20>>2];g[s+24>>2]=d*+g[s+24>>2];Dh(b+16|0,s,b+180|0);l=s;return}function Vd(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0.0,k=0,m=0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0;u=l;l=l+96|0;s=c[b+12>>2]|0;Nb[c[(c[s>>2]|0)+8>>2]&127](s,(c[b+8>>2]|0)+4|0,u+80|0,u+64|0);s=c[d+68>>2]|0;Rb[c[(c[s>>2]|0)+16>>2]&31](s,c[(c[b+8>>2]|0)+188>>2]|0,u+80|0,u+64|0,c[d+24>>2]|0);s=c[d+24>>2]|0;Nb[c[(c[s>>2]|0)+32>>2]&127](s,c[(c[b+8>>2]|0)+284>>2]|0,d+28|0,s);s=c[b+8>>2]|0;c[b+92>>2]=c[s+52>>2];c[b+92+4>>2]=c[s+52+4>>2];c[b+92+8>>2]=c[s+52+8>>2];c[b+92+12>>2]=c[s+52+12>>2];s=c[s+284>>2]|0;if((qb[c[(c[s>>2]|0)+36>>2]&127](s)|0)>0){s=0;h=0.0;d=0;do{e=c[b+132>>2]|0;if((e|0)<0){if((c[b+136>>2]|0)<0){f=c[b+140>>2]|0;if(f|0){if(a[b+144>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+140>>2]=0}a[b+144>>0]=1;c[b+140>>2]=0;c[b+136>>2]=0}do{c[(c[b+140>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=0)}c[b+132>>2]=0;e=c[(c[b+8>>2]|0)+284>>2]|0;e=c[(qb[c[(c[e>>2]|0)+28>>2]&127](e)|0)+12>>2]|0;r=c[c[e+(s<<4)>>2]>>2]|0;f=c[c[e+(s<<4)+4>>2]>>2]|0;if(!((r|0)!=0?(c[r+204>>2]&4|0)!=0:0))t=14;do if((t|0)==14){t=0;if(f|0?c[f+204>>2]&4|0:0)break;e=c[e+(s<<4)+8>>2]|0;if(e|0)Gb[c[(c[e>>2]|0)+16>>2]&127](e,b+128|0);q=c[b+132>>2]|0;if((q|0)>0){o=c[b+140>>2]|0;p=c[b+8>>2]|0;r=0;do{m=c[o+(r<<2)>>2]|0;n=(c[m+740>>2]|0)==(p|0)?-1.0:1.0;e=c[m+748>>2]|0;if((e|0)>0){k=0;do{j=+g[m+4+(k*184|0)+80>>2];if(j<0.0){i=m+4+(k*184|0)+64|0;if(j>2];f=m+4+(k*184|0)+72|0;h=n*+g[f>>2];g[b+152>>2]=n*+g[i>>2];g[b+156>>2]=v;g[b+160>>2]=h;g[b+164>>2]=0.0;e=c[m+748>>2]|0;h=j}else{d=m+4+(k*184|0)+68|0;f=m+4+(k*184|0)+72|0}w=j*n*+g[d>>2]*.20000000298023224;v=j*n*+g[f>>2]*.20000000298023224;g[b+92>>2]=j*n*+g[i>>2]*.20000000298023224+ +g[b+92>>2];g[b+96>>2]=w+ +g[b+96>>2];g[b+100>>2]=v+ +g[b+100>>2];d=1}k=k+1|0}while((k|0)<(e|0))}r=r+1|0}while((r|0)!=(q|0))}}while(0);s=s+1|0;r=c[(c[b+8>>2]|0)+284>>2]|0}while((s|0)<(qb[c[(c[r>>2]|0)+36>>2]&127](r)|0))}else d=0;t=c[b+8>>2]|0;c[u>>2]=c[t+4>>2];c[u+4>>2]=c[t+4+4>>2];c[u+8>>2]=c[t+4+8>>2];c[u+12>>2]=c[t+4+12>>2];c[u+16>>2]=c[t+20>>2];c[u+16+4>>2]=c[t+20+4>>2];c[u+16+8>>2]=c[t+20+8>>2];c[u+16+12>>2]=c[t+20+12>>2];c[u+32>>2]=c[t+36>>2];c[u+32+4>>2]=c[t+36+4>>2];c[u+32+8>>2]=c[t+36+8>>2];c[u+32+12>>2]=c[t+36+12>>2];c[u+48>>2]=c[b+92>>2];c[u+48+4>>2]=c[b+92+4>>2];c[u+48+8>>2]=c[b+92+8>>2];c[u+48+12>>2]=c[b+92+12>>2];c[t+260>>2]=(c[t+260>>2]|0)+1;c[t+4>>2]=c[u>>2];c[t+4+4>>2]=c[u+4>>2];c[t+4+8>>2]=c[u+8>>2];c[t+4+12>>2]=c[u+12>>2];c[t+20>>2]=c[u+16>>2];c[t+20+4>>2]=c[u+16+4>>2];c[t+20+8>>2]=c[u+16+8>>2];c[t+20+12>>2]=c[u+16+12>>2];c[t+36>>2]=c[u+32>>2];c[t+36+4>>2]=c[u+32+4>>2];c[t+36+8>>2]=c[u+32+8>>2];c[t+36+12>>2]=c[u+32+12>>2];c[t+52>>2]=c[u+48>>2];c[t+52+4>>2]=c[u+48+4>>2];c[t+52+8>>2]=c[u+48+8>>2];c[t+52+12>>2]=c[u+48+12>>2];l=u;return d|0}function Wd(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0.0,u=0.0;s=l;l=l+48|0;c[s+16>>2]=c[e>>2];c[s+16+4>>2]=c[e+4>>2];c[s+16+8>>2]=c[e+8>>2];c[s+16+12>>2]=c[e+12>>2];c[s+16+16>>2]=c[f>>2];c[s+16+16+4>>2]=c[f+4>>2];c[s+16+16+8>>2]=c[f+8>>2];c[s+16+16+12>>2]=c[f+12>>2];do if((c[d+60>>2]|0)==2){h=c[d+48>>2]|0;Sg(b+64|0,h)|0;i=c[b+68>>2]|0;if(i|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[b+68>>2]=h;c[b+76>>2]=(c[b+76>>2]|0)+-1;h=c[b+8>>2]|0;if(!h){c[6472]=(c[6472]|0)+1;h=ic(63)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}i=h;j=i+44|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0))}else c[b+8>>2]=0;c[h+32>>2]=0;c[h+36>>2]=d;c[h+40>>2]=0;c[h>>2]=c[s+16>>2];c[h+4>>2]=c[s+16+4>>2];c[h+8>>2]=c[s+16+8>>2];c[h+12>>2]=c[s+16+12>>2];c[h+16>>2]=c[s+16+16>>2];c[h+20>>2]=c[s+16+20>>2];c[h+24>>2]=c[s+16+24>>2];c[h+28>>2]=c[s+16+28>>2];af(b+4|0,c[b+4>>2]|0,h);c[b+16>>2]=(c[b+16>>2]|0)+1;c[d+48>>2]=h;j=1}else{c[b+168>>2]=(c[b+168>>2]|0)+1;r=c[d+48>>2]|0;if(((((+g[r>>2]<=+g[s+16+16>>2]?+g[r+16>>2]>=+g[s+16>>2]:0)?+g[r+4>>2]<=+g[s+16+20>>2]:0)?+g[r+20>>2]>=+g[s+16+4>>2]:0)?+g[r+8>>2]<=+g[s+16+24>>2]:0)?+g[r+24>>2]>=+g[s+16+8>>2]:0){m=+g[d+16>>2];t=+g[e>>2]-m;n=+g[d+20>>2];q=+g[e+4>>2]-n;o=+g[d+24>>2];p=+g[e+8>>2]-o;u=+g[b+140>>2];m=(+g[d+32>>2]-m)*.5*u;n=(+g[d+36>>2]-n)*.5*u;o=u*(+g[d+40>>2]-o)*.5;g[s>>2]=m;g[s+4>>2]=n;g[s+8>>2]=o;g[s+12>>2]=0.0;if(t<0.0)g[s>>2]=-m;if(q<0.0)g[s+4>>2]=-n;if(p<0.0)g[s+8>>2]=-o;if(Zg(b+4|0,r,s+16|0,s,.05000000074505806)|0){c[b+172>>2]=(c[b+172>>2]|0)+1;h=1}else h=0;j=h;break}h=Sg(b+4|0,r)|0;a:do if(h){j=c[b+12>>2]|0;if((j|0)<=-1){h=c[b+4>>2]|0;break}if(j){k=0;i=h;while(1){h=c[i+32>>2]|0;k=k+1|0;if(!h){h=i;break a}if((k|0)>=(j|0))break;else i=h}}}else h=0;while(0);c[r>>2]=c[s+16>>2];c[r+4>>2]=c[s+16+4>>2];c[r+8>>2]=c[s+16+8>>2];c[r+12>>2]=c[s+16+12>>2];c[r+16>>2]=c[s+16+16>>2];c[r+20>>2]=c[s+16+20>>2];c[r+24>>2]=c[s+16+24>>2];c[r+28>>2]=c[s+16+28>>2];af(b+4|0,h,r);c[b+172>>2]=(c[b+172>>2]|0)+1;j=1}while(0);h=c[d+52>>2]|0;if(!h)h=b+124+(c[d+60>>2]<<2)|0;else h=h+56|0;c[h>>2]=c[d+56>>2];h=c[d+56>>2]|0;if(h|0)c[h+52>>2]=c[d+52>>2];c[d+16>>2]=c[e>>2];c[d+16+4>>2]=c[e+4>>2];c[d+16+8>>2]=c[e+8>>2];c[d+16+12>>2]=c[e+12>>2];c[d+32>>2]=c[f>>2];c[d+32+4>>2]=c[f+4>>2];c[d+32+8>>2]=c[f+8>>2];c[d+32+12>>2]=c[f+12>>2];h=c[b+144>>2]|0;c[d+60>>2]=h;c[d+52>>2]=0;c[d+56>>2]=c[b+124+(h<<2)>>2];i=c[b+124+(h<<2)>>2]|0;if(i|0)c[i+52>>2]=d;c[b+124+(h<<2)>>2]=d;if(!j){l=s;return}a[b+194>>0]=1;if(a[b+193>>0]|0){l=s;return}c[s>>2]=9096;c[s+4>>2]=b;he(b+64|0,c[b+64>>2]|0,c[d+48>>2]|0,s);he(b+4|0,c[b+4>>2]|0,c[d+48>>2]|0,s);l=s;return}function Xd(b){b=b|0;var d=0.0,e=0,f=0,h=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0;q=l;l=l+80|0;if((qb[c[(c[b>>2]|0)+20>>2]&127](b)|0?(j=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0,(qb[c[(c[j>>2]|0)+48>>2]&127](j)|0)&8|0):0)?(f=c[b+24>>2]|0,f=qb[c[(c[f>>2]|0)+36>>2]&127](f)|0,c[q+64>>2]=1065353216,c[q+64+4>>2]=1065353216,c[q+64+8>>2]=0,g[q+64+12>>2]=0.0,(f|0)>0):0){i=0;do{h=c[b+24>>2]|0;h=sb[c[(c[h>>2]|0)+40>>2]&31](h,i)|0;e=c[h+748>>2]|0;if((e|0)>0){j=0;do{r=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Mb[c[(c[r>>2]|0)+32>>2]&0](r,h+4+(j*184|0)+32|0,h+4+(j*184|0)+64|0,+g[h+4+(j*184|0)+80>>2],c[h+4+(j*184|0)+148>>2]|0,q+64|0);j=j+1|0}while((j|0)!=(e|0))}i=i+1|0}while((i|0)!=(f|0))}if(!(qb[c[(c[b>>2]|0)+20>>2]&127](b)|0)){l=q;return}r=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;if(!((qb[c[(c[r>>2]|0)+48>>2]&127](r)|0)&3)){l=q;return}if((c[b+8>>2]|0)<=0){l=q;return}j=0;do{i=c[(c[b+16>>2]|0)+(j<<2)>>2]|0;if(!(c[i+204>>2]&32)){if(qb[c[(c[b>>2]|0)+20>>2]&127](b)|0?(r=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0,(qb[c[(c[r>>2]|0)+48>>2]&127](r)|0)&1|0):0){c[q+64>>2]=1065353216;c[q+64+4>>2]=1065353216;c[q+64+8>>2]=1065353216;g[q+64+12>>2]=0.0;switch(c[i+216>>2]|0){case 1:{e=1065353216;f=1065353216;h=1065353216;break}case 2:{e=0;f=1065353216;h=0;break}case 3:{e=1065353216;f=1065353216;h=0;break}case 4:{e=0;f=0;h=1065353216;break}case 5:{e=0;f=1065353216;h=1065353216;break}default:{e=0;f=0;h=1065353216}}c[q+64>>2]=h;c[q+64+4>>2]=f;c[q+64+8>>2]=e;g[q+64+12>>2]=0.0;Nb[c[(c[b>>2]|0)+28>>2]&127](b,i+4|0,c[i+192>>2]|0,q+64|0)}e=c[b+72>>2]|0;if(e|0?(qb[c[(c[e>>2]|0)+48>>2]&127](e)|0)&2|0:0){c[q+32>>2]=1065353216;c[q+32+4>>2]=0;c[q+32+8>>2]=0;g[q+32+12>>2]=0.0;r=c[i+192>>2]|0;Nb[c[(c[r>>2]|0)+8>>2]&127](r,i+4|0,q+64|0,q+48|0);g[q+64>>2]=+g[q+64>>2]+-.019999999552965164;g[q+64+4>>2]=+g[q+64+4>>2]+-.019999999552965164;g[q+64+8>>2]=+g[q+64+8>>2]+-.019999999552965164;g[q+48>>2]=+g[q+48>>2]+.019999999552965164;g[q+48+4>>2]=+g[q+48+4>>2]+.019999999552965164;g[q+48+8>>2]=+g[q+48+8>>2]+.019999999552965164;do if((a[b+44>>0]|0?(c[i+236>>2]|0)==2:0)?(c[i+204>>2]&3|0)==0:0){r=c[i+192>>2]|0;Nb[c[(c[r>>2]|0)+8>>2]&127](r,i+68|0,q+16|0,q);d=+g[q+16>>2]+-.019999999552965164;g[q+16>>2]=d;m=+g[q+16+4>>2]+-.019999999552965164;g[q+16+4>>2]=m;k=+g[q+16+8>>2]+-.019999999552965164;g[q+16+8>>2]=k;n=+g[q>>2]+.019999999552965164;g[q>>2]=n;p=+g[q+4>>2]+.019999999552965164;g[q+4>>2]=p;o=+g[q+8>>2]+.019999999552965164;g[q+8>>2]=o;if(d<+g[q+64>>2])g[q+64>>2]=d;if(m<+g[q+64+4>>2])g[q+64+4>>2]=m;if(k<+g[q+64+8>>2])g[q+64+8>>2]=k;d=+g[q+16+12>>2];if(d<+g[q+64+12>>2])g[q+64+12>>2]=d;if(+g[q+48>>2]>2]=n;if(+g[q+48+4>>2]>2]=p;if(+g[q+48+8>>2]>2]=o;d=+g[q+12>>2];if(!(+g[q+48+12>>2]>2]=d}while(0);r=c[b+72>>2]|0;Nb[c[(c[r>>2]|0)+52>>2]&127](r,q+64|0,q+48|0,q+32|0)}}j=j+1|0}while((j|0)<(c[b+8>>2]|0));l=q;return}function Yd(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0;c[b>>2]=5416;c[6472]=(c[6472]|0)+1;e=ic(379)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}g[e+308>>2]=9.999999747378752e-05;l=e+332|0;a[l>>0]=a[l>>0]&-16;c[b+24>>2]=e;l=(c[d+20>>2]|0)==0;c[6472]=(c[6472]|0)+1;k=ic(23)|0;e=(l?k+4|0:k+4|0)+15&-16;c[e+-4>>2]=k;c[e>>2]=l?9264:9312;c[b+28>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(43)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}k=c[b+24>>2]|0;l=c[b+28>>2]|0;a[e+4>>0]=0;c[e>>2]=6224;c[e+16>>2]=0;c[e+20>>2]=3;c[e+12>>2]=k;c[e+8>>2]=l;c[b+32>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(27)|0;l=e+4+15&-16;c[l+-4>>2]=e;a[l+4>>0]=0;c[(e+4+15&-16)>>2]=5448;c[b+36>>2]=l;c[6472]=(c[6472]|0)+1;l=ic(27)|0;e=l+4+15&-16;c[e+-4>>2]=l;a[e+4>>0]=0;c[(l+4+15&-16)>>2]=5468;c[b+40>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(27)|0;l=e+4+15&-16;c[l+-4>>2]=e;a[l+4>>0]=0;c[(e+4+15&-16)>>2]=5488;c[b+44>>2]=l;c[6472]=(c[6472]|0)+1;l=ic(27)|0;e=l+4+15&-16;c[e+-4>>2]=l;a[e+4>>0]=0;c[(l+4+15&-16)>>2]=5508;c[b+48>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(27)|0;l=e+4+15&-16;c[l+-4>>2]=e;a[l+4>>0]=0;c[(e+4+15&-16)>>2]=5528;c[b+52>>2]=l;c[6472]=(c[6472]|0)+1;l=ic(27)|0;e=l+4+15&-16;c[e+-4>>2]=l;a[e+4>>0]=0;c[(l+4+15&-16)>>2]=5548;c[b+56>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(27)|0;l=e+4+15&-16;c[l+-4>>2]=e;a[l+4>>0]=0;c[(e+4+15&-16)>>2]=5568;c[b+60>>2]=l;c[6472]=(c[6472]|0)+1;l=ic(27)|0;e=l+4+15&-16;c[e+-4>>2]=l;a[e+4>>0]=0;c[(l+4+15&-16)>>2]=5588;c[b+76>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(27)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[e>>2]=5588;c[b+80>>2]=e;a[e+4>>0]=1;c[6472]=(c[6472]|0)+1;l=ic(27)|0;e=l+4+15&-16;c[e+-4>>2]=l;a[e+4>>0]=0;c[(l+4+15&-16)>>2]=5608;c[b+72>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(35)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}a[e+4>>0]=0;c[e>>2]=5628;c[e+8>>2]=1;c[e+12>>2]=0;c[b+88>>2]=e;c[6472]=(c[6472]|0)+1;e=ic(35)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[e>>2]=5628;c[e+8>>2]=1;c[e+12>>2]=0;c[b+84>>2]=e;a[e+4>>0]=1;l=c[d+16>>2]|0;l=(l|0)>80?l:80;e=c[d>>2]|0;if(!e){a[b+12>>0]=1;c[6472]=(c[6472]|0)+1;e=ic(39)|0;if(!e)k=0;else{c[(e+4+15&-16)+-4>>2]=e;k=e+4+15&-16}e=c[d+8>>2]|0;c[k>>2]=772;f=k+4|0;c[f>>2]=e;c[6472]=(c[6472]|0)+1;e=ic((e*772|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[k+16>>2]=e;c[k+12>>2]=e;f=c[f>>2]|0;c[k+8>>2]=f;if(f+-1|0){h=c[k>>2]|0;i=f+-1|0;j=e;do{m=j;j=j+h|0;c[m>>2]=j;i=i+-1|0}while((i|0)!=0);e=e+(O(h,f+-1|0)|0)|0}c[e>>2]=0;c[b+8>>2]=k}else{a[b+12>>0]=0;c[b+8>>2]=e}e=c[d+4>>2]|0;if(e|0){a[b+20>>0]=0;c[b+16>>2]=e;return}a[b+20>>0]=1;c[6472]=(c[6472]|0)+1;e=ic(39)|0;if(!e)k=0;else{c[(e+4+15&-16)+-4>>2]=e;k=e+4+15&-16}e=c[d+12>>2]|0;c[k>>2]=l;f=k+4|0;c[f>>2]=e;e=O(e,l)|0;c[6472]=(c[6472]|0)+1;e=ic(e+19|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[k+16>>2]=e;c[k+12>>2]=e;f=c[f>>2]|0;c[k+8>>2]=f;if(f+-1|0){h=c[k>>2]|0;i=f+-1|0;j=e;do{m=j;j=j+h|0;c[m>>2]=j;i=i+-1|0}while((i|0)!=0);e=e+(O(h,f+-1|0)|0)|0}c[e>>2]=0;c[b+16>>2]=k;return}function Zd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,D=0,E=0.0,F=0.0,G=0,H=0;D=l;l=l+192|0;y=c[b+4>>2]|0;s=+g[y+752>>2];if(s>2]|0;x=(c[b+8>>2]|0)+8|0;A=c[x>>2]|0;k=+g[e>>2];n=+g[d>>2]*f+k;m=+g[e+4>>2];r=+g[d+4>>2]*f+m;j=+g[e+8>>2];o=+g[d+8>>2]*f+j;w=(c[b+12>>2]|0)+8|0;p=c[w>>2]|0;h=+g[p+52>>2];if((z|0)!=(A|0)){E=r-+g[p+56>>2];t=o-+g[p+60>>2];q=A;i=+g[A+52>>2];u=(n-h)*+g[p+4>>2]+E*+g[p+20>>2]+t*+g[p+36>>2];v=(n-h)*+g[p+8>>2]+E*+g[p+24>>2]+t*+g[p+40>>2];t=(n-h)*+g[p+12>>2]+E*+g[p+28>>2]+t*+g[p+44>>2]}else{F=n-+g[z+52>>2];E=r-+g[z+56>>2];t=o-+g[z+60>>2];q=p;i=h;u=F*+g[z+4>>2]+E*+g[z+20>>2]+t*+g[z+36>>2];v=F*+g[z+8>>2]+E*+g[z+24>>2]+t*+g[z+40>>2];t=F*+g[z+12>>2]+E*+g[z+28>>2]+t*+g[z+44>>2]}i=k-i;k=m-+g[q+56>>2];F=j-+g[q+60>>2];m=i*+g[q+4>>2]+k*+g[q+20>>2]+F*+g[q+36>>2];E=i*+g[q+8>>2]+k*+g[q+24>>2]+F*+g[q+40>>2];F=i*+g[q+12>>2]+k*+g[q+28>>2]+F*+g[q+44>>2];g[D>>2]=u;g[D+4>>2]=v;g[D+8>>2]=t;g[D+12>>2]=0.0;g[D+16>>2]=m;g[D+20>>2]=E;g[D+24>>2]=F;g[D+28>>2]=0.0;c[D+64>>2]=c[d>>2];c[D+64+4>>2]=c[d+4>>2];c[D+64+8>>2]=c[d+8>>2];c[D+64+12>>2]=c[d+12>>2];g[D+80>>2]=f;g[D+84>>2]=0.0;g[D+88>>2]=0.0;g[D+92>>2]=0.0;c[D+112>>2]=0;a[D+116>>0]=0;c[D+120>>2]=0;c[D+120+4>>2]=0;c[D+120+8>>2]=0;c[D+120+12>>2]=0;c[D+120+16>>2]=0;c[D+120+20>>2]=0;c[D+120+24>>2]=0;c[D+120+28>>2]=0;g[D+48>>2]=n;g[D+52>>2]=r;g[D+56>>2]=o;g[D+60>>2]=0.0;c[D+32>>2]=c[e>>2];c[D+32+4>>2]=c[e+4>>2];c[D+32+8>>2]=c[e+8>>2];c[D+32+12>>2]=c[e+12>>2];d=c[y+748>>2]|0;if((d|0)>0){e=0;p=-1;h=s*s;while(1){i=+g[y+4+(e*184|0)>>2]-u;k=+g[y+4+(e*184|0)+4>>2]-v;j=+g[y+4+(e*184|0)+8>>2]-t;q=i*i+k*k+j*j>2]|0;x=c[w>>2]|0;h=+g[e+224>>2]*+g[x+224>>2];h=h<-10.0?-10.0:h;g[D+84>>2]=h>10.0?10.0:h;g[D+92>>2]=+g[e+228>>2]*+g[x+228>>2];h=+g[e+232>>2]*+g[x+232>>2];h=h<-10.0?-10.0:h;g[D+88>>2]=h>10.0?10.0:h;h=+g[D+72>>2];x=+B(+h)>.7071067690849304;i=+g[D+68>>2];if(x){E=1.0/+C(+(h*h+i*i));F=+g[D+64>>2];j=E*i;k=F*-(E*h);m=0.0;n=-(E*h);o=(h*h+i*i)*E;h=-(E*i*F)}else{o=+g[D+64>>2];F=1.0/+C(+(o*o+i*i));j=0.0;k=(o*o+i*i)*F;m=-(i*F);n=F*o;o=-(F*o*h);h=h*-(i*F)}g[D+152>>2]=m;g[D+156>>2]=n;g[D+160>>2]=j;g[D+168>>2]=o;g[D+172>>2]=h;g[D+176>>2]=k;w=c[b+20>>2]|0;e=c[b+16>>2]|0;x=c[b+28>>2]|0;b=c[b+24>>2]|0;c[D+96>>2]=(z|0)!=(A|0)?w:e;c[D+100>>2]=(z|0)!=(A|0)?e:w;c[D+104>>2]=(z|0)!=(A|0)?x:b;c[D+108>>2]=(z|0)!=(A|0)?b:x;if((p|0)>-1){b=y+4+(p*184|0)+148|0;A=c[b>>2]|0;d=y+4+(p*184|0)+120|0;q=c[d>>2]|0;w=y+4+(p*184|0)+124|0;e=c[w>>2]|0;z=y+4+(p*184|0)+128|0;x=c[z>>2]|0;G=y+4+(p*184|0)+112|0;H=c[G>>2]|0;_h(y+4+(p*184|0)|0,D|0,184)|0;c[G>>2]=H;c[d>>2]=q;c[w>>2]=e;c[z>>2]=x;c[b>>2]=A}else _e(y,D)|0;l=D;return}function _d(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0;p=l;l=l+144|0;if((c[a+16>>2]|0)<=0){o=a+76|0;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];b=c[a>>2]|0;b=b+68|0;b=c[b>>2]|0;Ab[b&511](a);l=p;return}m=p+16+16|0;k=p+16+32|0;o=p+16+48|0;n=0;do{j=c[a+24>>2]|0;i=j+(n*80|0)|0;c[p+16>>2]=c[i>>2];c[p+16+4>>2]=c[i+4>>2];c[p+16+8>>2]=c[i+8>>2];c[p+16+12>>2]=c[i+12>>2];i=j+(n*80|0)+16|0;c[m>>2]=c[i>>2];c[m+4>>2]=c[i+4>>2];c[m+8>>2]=c[i+8>>2];c[m+12>>2]=c[i+12>>2];i=j+(n*80|0)+32|0;c[k>>2]=c[i>>2];c[k+4>>2]=c[i+4>>2];c[k+8>>2]=c[i+8>>2];c[k+12>>2]=c[i+12>>2];i=j+(n*80|0)+48|0;c[o>>2]=c[i>>2];c[o+4>>2]=c[i+4>>2];c[o+8>>2]=c[i+8>>2];c[o+12>>2]=c[i+12>>2];j=c[j+(n*80|0)+64>>2]|0;j=qb[c[(c[j>>2]|0)+28>>2]&127](j)|0;c[p>>2]=c[j>>2];c[p+4>>2]=c[j+4>>2];c[p+8>>2]=c[j+8>>2];q=+g[p+4>>2]*+g[b+4>>2]/+g[a+80>>2];r=+g[p+8>>2]*+g[b+8>>2]/+g[a+84>>2];g[p>>2]=+g[p>>2]*+g[b>>2]/+g[a+76>>2];g[p+4>>2]=q;g[p+8>>2]=r;g[p+12>>2]=0.0;j=c[(c[a+24>>2]|0)+(n*80|0)+64>>2]|0;Gb[c[(c[j>>2]|0)+24>>2]&127](j,p);r=+g[p+16+52>>2]*+g[b+4>>2]/+g[a+80>>2];q=+g[p+16+56>>2]*+g[b+8>>2]/+g[a+84>>2];g[p+16+48>>2]=+g[o>>2]*+g[b>>2]/+g[a+76>>2];g[p+16+52>>2]=r;g[p+16+56>>2]=q;g[p+16+60>>2]=0.0;j=c[a+24>>2]|0;i=j+(n*80|0)|0;c[i>>2]=c[p+16>>2];c[i+4>>2]=c[p+16+4>>2];c[i+8>>2]=c[p+16+8>>2];c[i+12>>2]=c[p+16+12>>2];i=j+(n*80|0)+16|0;c[i>>2]=c[m>>2];c[i+4>>2]=c[m+4>>2];c[i+8>>2]=c[m+8>>2];c[i+12>>2]=c[m+12>>2];i=j+(n*80|0)+32|0;c[i>>2]=c[k>>2];c[i+4>>2]=c[k+4>>2];c[i+8>>2]=c[k+8>>2];c[i+12>>2]=c[k+12>>2];j=j+(n*80|0)+48|0;c[j>>2]=c[o>>2];c[j+4>>2]=c[o+4>>2];c[j+8>>2]=c[o+8>>2];c[j+12>>2]=c[o+12>>2];if(c[a+64>>2]|0){i=c[(c[a+24>>2]|0)+(n*80|0)+64>>2]|0;Nb[c[(c[i>>2]|0)+8>>2]&127](i,p+16|0,p+128|0,p+112|0);c[p+80>>2]=c[p+128>>2];c[p+80+4>>2]=c[p+128+4>>2];c[p+80+8>>2]=c[p+128+8>>2];c[p+80+12>>2]=c[p+128+12>>2];c[p+80+16>>2]=c[p+112>>2];c[p+80+16+4>>2]=c[p+112+4>>2];c[p+80+16+8>>2]=c[p+112+8>>2];c[p+80+16+12>>2]=c[p+112+12>>2];i=c[a+64>>2]|0;j=c[(c[a+24>>2]|0)+(n*80|0)+76>>2]|0;d=Sg(i,j)|0;a:do if(d){f=c[i+8>>2]|0;if((f|0)<=-1){d=c[i>>2]|0;break}if(f){h=0;e=d;while(1){d=c[e+32>>2]|0;h=h+1|0;if(!d){d=e;break a}if((h|0)>=(f|0))break;else e=d}}}else d=0;while(0);c[j>>2]=c[p+80>>2];c[j+4>>2]=c[p+80+4>>2];c[j+8>>2]=c[p+80+8>>2];c[j+12>>2]=c[p+80+12>>2];c[j+16>>2]=c[p+80+16>>2];c[j+20>>2]=c[p+80+20>>2];c[j+24>>2]=c[p+80+24>>2];c[j+28>>2]=c[p+80+28>>2];af(i,d,j)}n=n+1|0}while((n|0)<(c[a+16>>2]|0));o=a+76|0;c[o>>2]=c[b>>2];c[o+4>>2]=c[b+4>>2];c[o+8>>2]=c[b+8>>2];c[o+12>>2]=c[b+12>>2];b=c[a>>2]|0;b=b+68|0;b=c[b>>2]|0;Ab[b&511](a);l=p;return}function $d(d,f,h,i,j,k){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0.0,m=0.0,n=0.0;c[d>>2]=8776;b[d+4>>1]=-2;b[d+6>>1]=-1;c[d+92>>2]=j;c[d+96>>2]=0;a[d+100>>0]=0;c[d+104>>2]=0;c[d+108>>2]=0;if(!j){c[6472]=(c[6472]|0)+1;j=ic(95)|0;if(!j)j=0;else{c[(j+4+15&-16)+-4>>2]=j;j=j+4+15&-16}si(j);c[d+92>>2]=j;a[d+100>>0]=1}if(!k){c[6472]=(c[6472]|0)+1;j=ic(43)|0;if(!j)j=0;else{c[(j+4+15&-16)+-4>>2]=j;j=j+4+15&-16}k=j+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;c[j>>2]=8840;a[j+20>>0]=1;c[j+16>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[d+112>>2]=j;c[6472]=(c[6472]|0)+1;j=ic(215)|0;if(!j)j=0;else{c[(j+4+15&-16)+-4>>2]=j;j=j+4+15&-16}Fh(j,c[d+112>>2]|0);c[d+108>>2]=j;a[j+193>>0]=1}c[d+8>>2]=c[f>>2];c[d+8+4>>2]=c[f+4>>2];c[d+8+8>>2]=c[f+8>>2];c[d+8+12>>2]=c[f+12>>2];c[d+24>>2]=c[h>>2];c[d+24+4>>2]=c[h+4>>2];c[d+24+8>>2]=c[h+8>>2];c[d+24+12>>2]=c[h+12>>2];n=+(e[d+6>>1]|0);m=n/(+g[d+28>>2]-+g[d+12>>2]);l=n/(+g[d+32>>2]-+g[d+16>>2]);g[d+40>>2]=n/(+g[d+24>>2]-+g[d+8>>2]);g[d+44>>2]=m;g[d+48>>2]=l;g[d+52>>2]=0.0;f=(i&65535)+1&65535;c[6472]=(c[6472]|0)+1;j=ic(f<<6|19)|0;if(!j)h=0;else{c[(j+4+15&-16)+-4>>2]=j;h=j+4+15&-16}if(f|0){k=h+(f<<6)|0;j=h;do{c[j>>2]=0;c[j+8>>2]=0;j=j+64|0}while((j|0)!=(k|0))}c[d+60>>2]=h;b[d+58>>1]=(i&65535)+1;b[d+56>>1]=0;b[d+64>>1]=1;if(f>>>0>1){j=1;k=1;do{b[h+(j<<6)+48>>1]=j+1;k=k+1<<16>>16;j=k&65535}while(j>>>0>>0)}b[h+(f+-1<<6)+48>>1]=0;c[6472]=(c[6472]|0)+1;j=ic((f<<3|3)+16|0)|0;if(!j)j=0;else{c[(j+4+15&-16)+-4>>2]=j;j=j+4+15&-16}c[d+80>>2]=j;c[d+68>>2]=j;c[6472]=(c[6472]|0)+1;j=ic((f<<3|3)+16|0)|0;if(!j)j=0;else{c[(j+4+15&-16)+-4>>2]=j;j=j+4+15&-16}c[d+84>>2]=j;c[d+72>>2]=j;c[6472]=(c[6472]|0)+1;j=ic((f<<3|3)+16|0)|0;if(!j){h=0;i=d+88|0;c[i>>2]=h;i=d+76|0;c[i>>2]=h;h=c[d+60>>2]|0;c[h>>2]=0;f=h+48|0;b[f>>1]=0;f=h+54|0;b[f>>1]=1;f=c[d+68>>2]|0;b[f>>1]=0;k=f+2|0;b[k>>1]=0;k=b[d+6>>1]|0;j=f+4|0;b[j>>1]=k;f=f+6|0;b[f>>1]=0;f=h+50|0;b[f>>1]=0;f=h+56|0;b[f>>1]=1;f=c[d+72>>2]|0;b[f>>1]=0;j=f+2|0;b[j>>1]=0;j=b[d+6>>1]|0;k=f+4|0;b[k>>1]=j;f=f+6|0;b[f>>1]=0;f=h+52|0;b[f>>1]=0;h=h+58|0;b[h>>1]=1;i=c[i>>2]|0;b[i>>1]=0;h=i+2|0;b[h>>1]=0;h=b[d+6>>1]|0;f=i+4|0;b[f>>1]=h;i=i+6|0;b[i>>1]=0;c[d>>2]=8712;return}c[(j+4+15&-16)+-4>>2]=j;h=j+4+15&-16;i=d+88|0;c[i>>2]=h;i=d+76|0;c[i>>2]=h;h=c[d+60>>2]|0;c[h>>2]=0;f=h+48|0;b[f>>1]=0;f=h+54|0;b[f>>1]=1;f=c[d+68>>2]|0;b[f>>1]=0;k=f+2|0;b[k>>1]=0;k=b[d+6>>1]|0;j=f+4|0;b[j>>1]=k;f=f+6|0;b[f>>1]=0;f=h+50|0;b[f>>1]=0;f=h+56|0;b[f>>1]=1;f=c[d+72>>2]|0;b[f>>1]=0;j=f+2|0;b[j>>1]=0;j=b[d+6>>1]|0;k=f+4|0;b[k>>1]=j;f=f+6|0;b[f>>1]=0;f=h+52|0;b[f>>1]=0;h=h+58|0;b[h>>1]=1;i=c[i>>2]|0;b[i>>1]=0;h=i+2|0;b[h>>1]=0;h=b[d+6>>1]|0;f=i+4|0;b[f>>1]=h;i=i+6|0;b[i>>1]=0;c[d>>2]=8712;return}function ae(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0,X=0.0,Y=0.0;W=l;l=l+240|0;f=(a[b+8>>0]|0)!=0;h=f?e:d;f=f?d:e;S=+g[h+116>>2]-+g[h+52>>2];T=+g[h+120>>2]-+g[h+56>>2];U=+g[h+124>>2]-+g[h+60>>2];V=+g[h+252>>2];if(S*S+T*T+U*U>2];p=+g[f+20>>2];q=+g[f+36>>2];r=+g[f+8>>2];s=+g[f+24>>2];t=+g[f+40>>2];u=+g[f+12>>2];v=+g[f+28>>2];w=+g[f+44>>2];j=-+g[f+52>>2];k=-+g[f+56>>2];m=-+g[f+60>>2];x=+g[h+4>>2];y=+g[h+20>>2];z=+g[h+36>>2];A=+g[h+8>>2];B=+g[h+24>>2];C=+g[h+40>>2];D=+g[h+12>>2];E=+g[h+28>>2];F=+g[h+44>>2];H=+g[h+52>>2];G=+g[h+56>>2];T=+g[h+60>>2];R=P*j+p*k+q*m+(P*H+p*G+q*T);V=r*j+s*k+t*m+(r*H+s*G+t*T);T=u*j+v*k+w*m+(u*H+v*G+w*T);G=+g[h+68>>2];H=+g[h+84>>2];I=+g[h+100>>2];J=+g[h+72>>2];K=+g[h+88>>2];L=+g[h+104>>2];M=+g[h+76>>2];N=+g[h+92>>2];O=+g[h+108>>2];n=+g[h+116>>2];o=+g[h+120>>2];S=+g[h+124>>2];Q=P*j+p*k+q*m+(P*n+p*o+q*S);U=r*j+s*k+t*m+(r*n+s*o+t*S);S=u*j+v*k+w*m+(u*n+v*o+w*S);f=c[f+192>>2]|0;if(((c[f+4>>2]|0)+-21|0)>>>0>=9){X=1.0;l=W;return +X}g[W+224>>2]=R;g[W+224+4>>2]=V;g[W+224+8>>2]=T;g[W+224+12>>2]=0.0;if(Q>2]=Q;i=Q}else i=R;if(U>2]=U;j=U}else j=V;if(S>2]=S;k=S}else k=T;g[W+208>>2]=R;g[W+208+4>>2]=V;g[W+208+8>>2]=T;g[W+208+12>>2]=0.0;if(R>2]=Q;m=Q}else m=R;if(V>2]=U;n=U}else n=V;if(T>2]=S;o=S}else o=T;Y=+g[h+248>>2];g[W+224>>2]=i-Y;g[W+224+4>>2]=j-Y;g[W+224+8>>2]=k-Y;g[W+208>>2]=Y+m;g[W+208+4>>2]=Y+n;g[W+208+8>>2]=Y+o;c[W>>2]=3812;g[W+4>>2]=P*x+p*y+q*z;g[W+8>>2]=P*A+p*B+q*C;g[W+12>>2]=P*D+p*E+q*F;g[W+16>>2]=0.0;g[W+20>>2]=r*x+s*y+t*z;g[W+24>>2]=r*A+s*B+t*C;g[W+28>>2]=r*D+s*E+t*F;g[W+32>>2]=0.0;g[W+36>>2]=u*x+v*y+w*z;g[W+40>>2]=u*A+v*B+w*C;g[W+44>>2]=u*D+v*E+w*F;g[W+48>>2]=0.0;g[W+52>>2]=R;g[W+56>>2]=V;g[W+60>>2]=T;g[W+64>>2]=0.0;g[W+68>>2]=P*G+p*H+q*I;g[W+72>>2]=P*J+p*K+q*L;g[W+76>>2]=P*M+p*N+q*O;g[W+80>>2]=0.0;g[W+84>>2]=r*G+s*H+t*I;g[W+88>>2]=r*J+s*K+t*L;g[W+92>>2]=r*M+s*N+t*O;g[W+96>>2]=0.0;g[W+100>>2]=u*G+v*H+w*I;g[W+104>>2]=u*J+v*K+w*L;g[W+108>>2]=u*M+v*N+w*O;g[W+112>>2]=0.0;g[W+116>>2]=Q;g[W+120>>2]=U;g[W+124>>2]=S;g[W+128>>2]=0.0;g[W+196>>2]=Y;c[W+200>>2]=c[h+244>>2];if(f|0?(Nb[c[(c[f>>2]|0)+64>>2]&127](f,W,W+224|0,W+208|0),X=+g[W+200>>2],X<+g[h+244>>2]):0){g[h+244>>2]=X;Y=X;l=W;return +Y}Y=1.0;l=W;return +Y}function be(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0,X=0.0,Y=0.0;W=l;l=l+240|0;f=(a[b+8>>0]|0)!=0;h=f?e:d;f=f?d:e;S=+g[h+116>>2]-+g[h+52>>2];T=+g[h+120>>2]-+g[h+56>>2];U=+g[h+124>>2]-+g[h+60>>2];V=+g[h+252>>2];if(S*S+T*T+U*U>2];p=+g[f+20>>2];q=+g[f+36>>2];r=+g[f+8>>2];s=+g[f+24>>2];t=+g[f+40>>2];u=+g[f+12>>2];v=+g[f+28>>2];w=+g[f+44>>2];j=-+g[f+52>>2];k=-+g[f+56>>2];m=-+g[f+60>>2];x=+g[h+4>>2];y=+g[h+20>>2];z=+g[h+36>>2];A=+g[h+8>>2];B=+g[h+24>>2];C=+g[h+40>>2];D=+g[h+12>>2];E=+g[h+28>>2];F=+g[h+44>>2];H=+g[h+52>>2];G=+g[h+56>>2];T=+g[h+60>>2];R=P*j+p*k+q*m+(P*H+p*G+q*T);V=r*j+s*k+t*m+(r*H+s*G+t*T);T=u*j+v*k+w*m+(u*H+v*G+w*T);G=+g[h+68>>2];H=+g[h+84>>2];I=+g[h+100>>2];J=+g[h+72>>2];K=+g[h+88>>2];L=+g[h+104>>2];M=+g[h+76>>2];N=+g[h+92>>2];O=+g[h+108>>2];n=+g[h+116>>2];o=+g[h+120>>2];S=+g[h+124>>2];Q=P*j+p*k+q*m+(P*n+p*o+q*S);U=r*j+s*k+t*m+(r*n+s*o+t*S);S=u*j+v*k+w*m+(u*n+v*o+w*S);f=c[f+192>>2]|0;if(((c[f+4>>2]|0)+-21|0)>>>0>=9){X=1.0;l=W;return +X}g[W+224>>2]=R;g[W+224+4>>2]=V;g[W+224+8>>2]=T;g[W+224+12>>2]=0.0;if(Q>2]=Q;i=Q}else i=R;if(U>2]=U;j=U}else j=V;if(S>2]=S;k=S}else k=T;g[W+208>>2]=R;g[W+208+4>>2]=V;g[W+208+8>>2]=T;g[W+208+12>>2]=0.0;if(R>2]=Q;m=Q}else m=R;if(V>2]=U;n=U}else n=V;if(T>2]=S;o=S}else o=T;Y=+g[h+248>>2];g[W+224>>2]=i-Y;g[W+224+4>>2]=j-Y;g[W+224+8>>2]=k-Y;g[W+208>>2]=Y+m;g[W+208+4>>2]=Y+n;g[W+208+8>>2]=Y+o;c[W>>2]=5728;g[W+4>>2]=P*x+p*y+q*z;g[W+8>>2]=P*A+p*B+q*C;g[W+12>>2]=P*D+p*E+q*F;g[W+16>>2]=0.0;g[W+20>>2]=r*x+s*y+t*z;g[W+24>>2]=r*A+s*B+t*C;g[W+28>>2]=r*D+s*E+t*F;g[W+32>>2]=0.0;g[W+36>>2]=u*x+v*y+w*z;g[W+40>>2]=u*A+v*B+w*C;g[W+44>>2]=u*D+v*E+w*F;g[W+48>>2]=0.0;g[W+52>>2]=R;g[W+56>>2]=V;g[W+60>>2]=T;g[W+64>>2]=0.0;g[W+68>>2]=P*G+p*H+q*I;g[W+72>>2]=P*J+p*K+q*L;g[W+76>>2]=P*M+p*N+q*O;g[W+80>>2]=0.0;g[W+84>>2]=r*G+s*H+t*I;g[W+88>>2]=r*J+s*K+t*L;g[W+92>>2]=r*M+s*N+t*O;g[W+96>>2]=0.0;g[W+100>>2]=u*G+v*H+w*I;g[W+104>>2]=u*J+v*K+w*L;g[W+108>>2]=u*M+v*N+w*O;g[W+112>>2]=0.0;g[W+116>>2]=Q;g[W+120>>2]=U;g[W+124>>2]=S;g[W+128>>2]=0.0;g[W+196>>2]=Y;c[W+200>>2]=c[h+244>>2];if(f|0?(Nb[c[(c[f>>2]|0)+64>>2]&127](f,W,W+224|0,W+208|0),X=+g[W+200>>2],X<+g[h+244>>2]):0){g[h+244>>2]=X;Y=X;l=W;return +Y}Y=1.0;l=W;return +Y}function ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;l=c[b>>2]|0;m=c[b+4>>2]|0;i=c[b+8>>2]|0;n=c[a+4>>2]|0;p=Ah(a,d,m,i)|0;c[p+12>>2]=c[b+12>>2];c[p+16>>2]=n+1;c[p+20>>2]=n+2;h=c[(c[a+12>>2]|0)+(c[b+12>>2]<<2)>>2]|0;e=c[h>>2]|0;f=c[h+4>>2]|0;do if(!((e|0)==(m|0)&(f|0)==(i|0))){if((e|0)==(i|0)?(f|0)==(m|0):0){e=h+12+8|0;break}g=c[h+8>>2]|0;if(!((f|0)==(m|0)&(g|0)==(i|0)))if(!((f|0)==(i|0)&(g|0)==(m|0)))if((g|0)!=(m|0)|(e|0)==(i|0)^1){if((g|0)==(i|0)?(e|0)==(m|0):0){e=h+12+4|0;break}e=9624}else{e=1;o=2}else e=h+12|0;else{e=0;o=2}}else{e=2;o=2}while(0);if((o|0)==2)e=h+12+(e<<2)|0;c[e>>2]=n;k=Ah(a,d,i,l)|0;c[k+12>>2]=c[b+12+4>>2];c[k+16>>2]=n+2;c[k+20>>2]=n;h=c[(c[a+12>>2]|0)+(c[b+12+4>>2]<<2)>>2]|0;e=c[h>>2]|0;f=c[h+4>>2]|0;do if(!((e|0)==(i|0)&(f|0)==(l|0))){if((e|0)==(l|0)?(f|0)==(i|0):0){e=h+12+8|0;break}g=c[h+8>>2]|0;if(!((f|0)==(i|0)&(g|0)==(l|0)))if(!((f|0)==(l|0)&(g|0)==(i|0)))if((g|0)!=(i|0)|(e|0)==(l|0)^1){if((g|0)==(l|0)?(e|0)==(i|0):0){e=h+12+4|0;break}e=9624}else{e=1;o=12}else e=h+12|0;else{e=0;o=12}}else{e=2;o=12}while(0);if((o|0)==12)e=h+12+(e<<2)|0;c[e>>2]=n+1;j=Ah(a,d,l,m)|0;c[j+12>>2]=c[b+12+8>>2];c[j+16>>2]=n;c[j+20>>2]=n+1;e=c[a+12>>2]|0;i=c[e+(c[b+12+8>>2]<<2)>>2]|0;f=c[i>>2]|0;g=c[i+4>>2]|0;do if(!((f|0)==(l|0)&(g|0)==(m|0))){if((f|0)==(m|0)?(g|0)==(l|0):0){f=i+12+8|0;break}h=c[i+8>>2]|0;if(!((g|0)==(l|0)&(h|0)==(m|0)))if(!((g|0)==(m|0)&(h|0)==(l|0)))if((h|0)!=(l|0)|(f|0)==(m|0)^1){if((h|0)==(m|0)?(f|0)==(l|0):0){f=i+12+4|0;break}f=9624}else{f=1;o=22}else f=i+12|0;else{f=0;o=22}}else{f=2;o=22}while(0);if((o|0)==22)f=i+12+(f<<2)|0;c[f>>2]=n+2;f=c[e+(c[p+12>>2]<<2)>>2]|0;if(!(((c[f>>2]|0)!=(d|0)?(c[f+4>>2]|0)!=(d|0):0)?(c[f+8>>2]|0)!=(d|0):0)){ge(e,p,f);c[(c[a+12>>2]|0)+(c[p+24>>2]<<2)>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0);c[(c[a+12>>2]|0)+(c[f+24>>2]<<2)>>2]=0;if(f|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}e=c[a+12>>2]|0}f=c[e+(c[k+12>>2]<<2)>>2]|0;if(!(((c[f>>2]|0)!=(d|0)?(c[f+4>>2]|0)!=(d|0):0)?(c[f+8>>2]|0)!=(d|0):0)){ge(e,k,f);c[(c[a+12>>2]|0)+(c[k+24>>2]<<2)>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);c[(c[a+12>>2]|0)+(c[f+24>>2]<<2)>>2]=0;if(f|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}e=c[a+12>>2]|0}f=c[e+(c[j+12>>2]<<2)>>2]|0;if(!(((c[f>>2]|0)!=(d|0)?(c[f+4>>2]|0)!=(d|0):0)?(c[f+8>>2]|0)!=(d|0):0)){ge(e,j,f);c[(c[a+12>>2]|0)+(c[j+24>>2]<<2)>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0);c[(c[a+12>>2]|0)+(c[f+24>>2]<<2)>>2]=0;if(f|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}e=c[a+12>>2]|0}c[e+(c[b+24>>2]<<2)>>2]=0;if(!b)return;c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function de(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,m=0;m=l;l=l+336|0;d=c[d+36>>2]|0;c[m+272+4>>2]=35;c[m+272+8>>2]=0;c[m+272+12>>2]=1065353216;c[m+272+16>>2]=1065353216;c[m+272+20>>2]=1065353216;g[m+272+24>>2]=0.0;c[m+272>>2]=3580;c[m+272+52>>2]=d;g[m+272+44>>2]=0.0;j=c[b+28>>2]|0;e=c[j+4>>2]|0;if(c[(c[j+8>>2]|0)+204>>2]&3|0?a[d+376>>0]|0:0){l=m;return}if((a[22664]|0)==0?Yy(22664)|0:0){if((a[22672]|0)==0?Yy(22672)|0:0){c[5768]=1065353216;c[5769]=0;c[5770]=0;c[5771]=0;c[5772]=0;c[5773]=1065353216;c[5774]=0;c[5775]=0;c[5776]=0;c[5777]=0;c[5778]=1065353216;g[5779]=0.0}c[5752]=c[5768];c[5753]=c[5769];c[5754]=c[5770];c[5755]=c[5771];c[5756]=c[5772];c[5757]=c[5773];c[5758]=c[5774];c[5759]=c[5775];c[5760]=c[5776];c[5761]=c[5777];c[5762]=c[5778];c[5763]=c[5779];c[5764]=0;c[5765]=0;c[5766]=0;c[5767]=0}f=c[(c[b+28>>2]|0)+12>>2]|0;c[m>>2]=1065353216;c[m+4>>2]=0;c[m+8>>2]=0;g[m+12>>2]=0.0;if(!(!(ud(m+272|0,23008,e,f,m,m+216|0)|0)?!(wc(m+272|0,23008,e,f,m,m+216|0,0)|0):0))h=12;if((h|0)==12?(c[m+4>>2]=0,c[m+4+4>>2]=0,c[m+4+8>>2]=0,c[m+4+12>>2]=0,c[m+4+16>>2]=0,c[m+4+20>>2]=0,a[m+152>>0]=0,c[m>>2]=3400,j=c[(c[b+28>>2]|0)+8>>2]|0,Vc(b,m+216|0,d,0,0,0,(c[j+236>>2]&2|0)==0?0:j,j,m)|0):0){c[6472]=(c[6472]|0)+1;d=ic(235)|0;if(!d)j=0;else{c[(d+4+15&-16)+-4>>2]=d;j=d+4+15&-16}e=j+4|0;d=j+152|0;Nk(e|0,0,212)|0;c[j>>2]=3400;f=m+4|0;h=e+100|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));e=j+104|0;c[e>>2]=c[m+104>>2];c[e+4>>2]=c[m+104+4>>2];c[e+8>>2]=c[m+104+8>>2];c[e+12>>2]=c[m+104+12>>2];e=j+120|0;c[e>>2]=c[m+120>>2];c[e+4>>2]=c[m+120+4>>2];c[e+8>>2]=c[m+120+8>>2];c[e+12>>2]=c[m+120+12>>2];e=j+136|0;c[e>>2]=c[m+136>>2];c[e+4>>2]=c[m+136+4>>2];c[e+8>>2]=c[m+136+8>>2];c[e+12>>2]=c[m+136+12>>2];a[d>>0]=a[m+152>>0]|0;e=j+156|0;f=m+156|0;h=e+60|0;do{c[e>>2]=c[f>>2];e=e+4|0;f=f+4|0}while((e|0)<(h|0));h=c[b+24>>2]|0;i=j;d=c[h+852>>2]|0;if((d|0)==(c[h+856>>2]|0)?(k=d|0?d<<1:1,(d|0)<(k|0)):0){if(!k)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((k<<2|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[h+852>>2]|0}if((d|0)>0){f=0;do{c[e+(f<<2)>>2]=c[(c[h+860>>2]|0)+(f<<2)>>2];f=f+1|0}while((f|0)!=(d|0))}f=c[h+860>>2]|0;if(f){if(a[h+864>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0);d=c[h+852>>2]|0}c[h+860>>2]=0}a[h+864>>0]=1;c[h+860>>2]=e;c[h+856>>2]=k}c[(c[h+860>>2]|0)+(d<<2)>>2]=i;c[h+852>>2]=d+1;d=c[b+24>>2]|0;if(!(c[(c[(c[b+28>>2]|0)+8>>2]|0)+204>>2]&3)){b=j+64|0;g[b>>2]=+g[d+340>>2]*+g[b>>2];d=d+352|0}else{b=j+64|0;g[b>>2]=+g[d+344>>2]*+g[b>>2];d=d+356|0}b=j+68|0;g[b>>2]=+g[d>>2]*+g[b>>2]}l=m;return}function ee(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0;q=l;l=l+16|0;p=c[b+92>>2]|0;if(!(qb[c[(c[p>>2]|0)+56>>2]&127](p)|0)){l=q;return}p=c[b+92>>2]|0;p=qb[c[(c[p>>2]|0)+28>>2]&127](p)|0;f=c[p+4>>2]|0;if((f|0)>1){Id(p,0,f+-1|0);j=c[p+4>>2]|0}else j=f;n=c[b+104>>2]|0;f=j-n|0;if((n|0)<0){if((c[p+8>>2]|0)<(f|0)){if(!f){h=j;i=0}else{c[6472]=(c[6472]|0)+1;g=ic((f<<4|3)+16|0)|0;if(!g)g=0;else{c[(g+4+15&-16)+-4>>2]=g;g=g+4+15&-16}h=c[p+4>>2]|0;i=g}if((h|0)>0){g=0;do{n=c[p+12>>2]|0;c[i+(g<<4)>>2]=c[n+(g<<4)>>2];c[i+(g<<4)+4>>2]=c[n+(g<<4)+4>>2];c[i+(g<<4)+8>>2]=c[n+(g<<4)+8>>2];c[i+(g<<4)+12>>2]=c[n+(g<<4)+12>>2];g=g+1|0}while((g|0)!=(h|0))}g=c[p+12>>2]|0;if(g|0){if(a[p+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}c[p+12>>2]=0}a[p+16>>0]=1;c[p+12>>2]=i;c[p+8>>2]=f;h=p+12|0}else h=p+12|0;g=j;do{n=(c[h>>2]|0)+(g<<4)|0;g=g+1|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0}while((g|0)!=(f|0))}c[p+4>>2]=f;c[b+104>>2]=0;if((f|0)>0){g=0;m=0;n=0;i=0;while(1){k=c[p+12>>2]|0;j=k+(m<<4)|0;r=n;n=c[j>>2]|0;k=k+(m<<4)+4|0;h=c[k>>2]|0;if(!((n|0)==(r|0)&(h|0)==(i|0))){r=n+54|0;i=n+48|0;if(!((((((e[r>>1]|0)>=(e[h+48>>1]|0)?(e[h+54>>1]|0)>=(e[i>>1]|0):0)?(e[r+2>>1]|0)>=(e[h+48+2>>1]|0):0)?(e[h+54+2>>1]|0)>=(e[i+2>>1]|0):0)?(e[r+4>>1]|0)>=(e[h+52>>1]|0):0)?(e[h+54+4>>1]|0)>=(e[n+52>>1]|0):0))o=30}else{h=i;o=30}if((o|0)==30){o=0;g=c[b+92>>2]|0;Kb[c[(c[g>>2]|0)+32>>2]&127](g,j,d);c[j>>2]=0;c[k>>2]=0;g=(c[b+104>>2]|0)+1|0;c[b+104>>2]=g;c[6200]=(c[6200]|0)+-1;f=c[p+4>>2]|0}m=m+1|0;if((m|0)>=(f|0))break;else i=h}if((f|0)>1){Id(p,0,f+-1|0);g=c[b+104>>2]|0;f=c[p+4>>2]|0}j=f-g|0;if((g|0)<0){if((c[p+8>>2]|0)<(j|0)){if(!j){h=f;i=0}else{c[6472]=(c[6472]|0)+1;g=ic((j<<4|3)+16|0)|0;if(!g)g=0;else{c[(g+4+15&-16)+-4>>2]=g;g=g+4+15&-16}h=c[p+4>>2]|0;i=g}if((h|0)>0){g=0;do{r=c[p+12>>2]|0;c[i+(g<<4)>>2]=c[r+(g<<4)>>2];c[i+(g<<4)+4>>2]=c[r+(g<<4)+4>>2];c[i+(g<<4)+8>>2]=c[r+(g<<4)+8>>2];c[i+(g<<4)+12>>2]=c[r+(g<<4)+12>>2];g=g+1|0}while((g|0)!=(h|0))}g=c[p+12>>2]|0;if(g|0){if(a[p+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}c[p+12>>2]=0}a[p+16>>0]=1;c[p+12>>2]=i;c[p+8>>2]=j;g=p+12|0}else g=p+12|0;do{r=(c[g>>2]|0)+(f<<4)|0;f=f+1|0;c[r>>2]=0;c[r+4>>2]=0;c[r+8>>2]=0;c[r+12>>2]=0}while((f|0)!=(j|0));f=j}else f=j}c[p+4>>2]=f;c[b+104>>2]=0;l=q;return}function fe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0;h=l;l=l+16|0;f=Ds()|0;if((a[22752]|0)==0?Yy(22752)|0:0){c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;dg(23416,0.0,0,0,h)}c[5905]=c[5905]|1;g[5940]=0.0;x=+g[5950]*0.0;D=+g[5951]*0.0;g[5945]=+g[5949]*0.0;g[5946]=x;g[5947]=D;g[5948]=0.0;c[5953]=0;c[5954]=0;c[5955]=0;c[5956]=0;D=+g[5942]*0.0;x=+g[5943]*0.0;g[5994]=+g[5941]*0.0;g[5995]=D;g[5996]=x;g[5997]=0.0;c[f+4>>2]=7;c[f+8>>2]=-1;c[f+12>>2]=-1;g[f+16>>2]=3402823466385288598117041.0e14;a[f+20>>0]=1;a[f+21>>0]=0;c[f+24>>2]=-1;c[f+28>>2]=23416;c[f+32>>2]=b;g[f+36>>2]=0.0;g[f+40>>2]=.30000001192092896;c[f+44>>2]=0;c[f>>2]=4792;a[f+48>>0]=0;c[f+116>>2]=c[d>>2];c[f+116+4>>2]=c[d+4>>2];c[f+116+8>>2]=c[d+8>>2];c[f+116+12>>2]=c[d+12>>2];c[f+132>>2]=c[d+16>>2];c[f+132+4>>2]=c[d+16+4>>2];c[f+132+8>>2]=c[d+16+8>>2];c[f+132+12>>2]=c[d+16+12>>2];c[f+148>>2]=c[d+32>>2];c[f+148+4>>2]=c[d+32+4>>2];c[f+148+8>>2]=c[d+32+8>>2];c[f+148+12>>2]=c[d+32+12>>2];c[f+164>>2]=c[d+48>>2];c[f+164+4>>2]=c[d+48+4>>2];c[f+164+8>>2]=c[d+48+8>>2];c[f+164+12>>2]=c[d+48+12>>2];a[f+180>>0]=e&1;x=+g[f+116>>2];D=+g[b+4>>2];w=+g[f+132>>2];C=+g[b+8>>2];v=+g[f+148>>2];B=+g[b+12>>2];u=+g[f+120>>2];t=+g[f+136>>2];s=+g[f+152>>2];r=+g[f+124>>2];p=+g[f+140>>2];n=+g[f+156>>2];A=+g[b+20>>2];z=+g[b+24>>2];y=+g[b+28>>2];q=+g[b+36>>2];o=+g[b+40>>2];m=+g[b+44>>2];F=+g[f+164>>2];E=+g[f+168>>2];i=+g[f+172>>2];k=+g[b+52>>2]+(D*F+C*E+B*i);j=A*F+z*E+y*i+ +g[b+56>>2];i=q*F+o*E+m*i+ +g[b+60>>2];g[f+52>>2]=x*D+w*C+v*B;g[f+56>>2]=D*u+C*t+B*s;g[f+60>>2]=D*r+C*p+B*n;g[f+64>>2]=0.0;g[f+68>>2]=x*A+w*z+v*y;g[f+72>>2]=u*A+t*z+s*y;g[f+76>>2]=r*A+p*z+n*y;g[f+80>>2]=0.0;g[f+84>>2]=x*q+w*o+v*m;g[f+88>>2]=u*q+t*o+s*m;g[f+92>>2]=r*q+p*o+n*m;g[f+96>>2]=0.0;g[f+100>>2]=k;g[f+104>>2]=j;g[f+108>>2]=i;g[f+112>>2]=0.0;g[f+184>>2]=1.0;g[f+188>>2]=-1.0;g[f+192>>2]=0.0;g[f+196>>2]=0.0;g[f+200>>2]=1.0;g[f+204>>2]=.699999988079071;g[f+208>>2]=0.0;g[f+212>>2]=0.0;g[f+216>>2]=1.0;g[f+220>>2]=.699999988079071;g[f+224>>2]=0.0;g[f+228>>2]=0.0;g[f+264>>2]=1.0;g[f+268>>2]=.699999988079071;g[f+272>>2]=1.0;g[f+276>>2]=0.0;g[f+280>>2]=1.0;g[f+284>>2]=.699999988079071;g[f+288>>2]=1.0;g[f+292>>2]=0.0;g[f+232>>2]=1.0;g[f+236>>2]=.699999988079071;g[f+240>>2]=1.0;g[f+244>>2]=0.0;g[f+248>>2]=1.0;g[f+252>>2]=.699999988079071;g[f+256>>2]=1.0;g[f+260>>2]=0.0;a[f+1096>>0]=0;g[f+1116>>2]=0.0;g[f+1120>>2]=0.0;g[f+1124>>2]=0.0;c[f+300>>2]=0;c[f+1100>>2]=0;c[f+1100+4>>2]=0;c[f+1100+8>>2]=0;a[f+1100+12>>0]=0;a[f+49>>0]=1;Tc(f,(c[f+28>>2]|0)+4|0,(c[f+32>>2]|0)+4|0);l=h;return f|0}function ge(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=0;do{k=m;m=m+1|0;l=(m|0)==3;j=c[b+((l?0:m)<<2)>>2]|0;k=c[b+(((k+2|0)%3|0)<<2)>>2]|0;e=c[d>>2]|0;f=c[d+4>>2]|0;if(!((e|0)==(k|0)&(f|0)==(j|0)))if(!((e|0)==(j|0)&(f|0)==(k|0))){g=c[d+8>>2]|0;if(!((f|0)==(k|0)&(g|0)==(j|0)))if(!((f|0)==(j|0)&(g|0)==(k|0)))if((g|0)!=(k|0)|(e|0)==(j|0)^1)e=(g|0)!=(j|0)|(e|0)==(k|0)^1?9624:d+12+4|0;else{e=1;n=3}else e=d+12|0;else{e=0;n=3}}else e=d+12+8|0;else{e=2;n=3}if((n|0)==3){n=0;e=d+12+(e<<2)|0}i=c[e>>2]|0;e=c[b>>2]|0;f=c[b+4>>2]|0;if(!((e|0)==(j|0)&(f|0)==(k|0)))if(!((e|0)==(k|0)&(f|0)==(j|0))){g=c[b+8>>2]|0;if(!((f|0)==(j|0)&(g|0)==(k|0)))if(!((f|0)==(k|0)&(g|0)==(j|0)))if((g|0)!=(j|0)|(e|0)==(k|0)^1)e=(g|0)!=(k|0)|(e|0)==(j|0)^1?9624:b+12+4|0;else{e=1;n=10}else e=b+12|0;else{e=0;n=10}}else e=b+12+8|0;else{e=2;n=10}if((n|0)==10){n=0;e=b+12+(e<<2)|0}h=c[a+(c[e>>2]<<2)>>2]|0;e=c[h>>2]|0;f=c[h+4>>2]|0;do if(!((e|0)==(k|0)&(f|0)==(j|0))){if((e|0)==(j|0)?(f|0)==(k|0):0){e=h+12+8|0;break}g=c[h+8>>2]|0;if(!((f|0)==(k|0)&(g|0)==(j|0)))if(!((f|0)==(j|0)&(g|0)==(k|0)))if((g|0)!=(k|0)|(e|0)==(j|0)^1){if((g|0)==(j|0)?(e|0)==(k|0):0){e=h+12+4|0;break}e=9624}else{e=1;n=17}else e=h+12|0;else{e=0;n=17}}else{e=2;n=17}while(0);if((n|0)==17){n=0;e=h+12+(e<<2)|0}c[e>>2]=i;e=c[b>>2]|0;f=c[b+4>>2]|0;if(!((e|0)==(j|0)&(f|0)==(k|0)))if(!((e|0)==(k|0)&(f|0)==(j|0))){g=c[b+8>>2]|0;if(!((f|0)==(j|0)&(g|0)==(k|0)))if(!((f|0)==(k|0)&(g|0)==(j|0)))if((g|0)!=(j|0)|(e|0)==(k|0)^1)e=(g|0)!=(k|0)|(e|0)==(j|0)^1?9624:b+12+4|0;else{e=1;n=27}else e=b+12|0;else{e=0;n=27}}else e=b+12+8|0;else{e=2;n=27}if((n|0)==27){n=0;e=b+12+(e<<2)|0}i=c[e>>2]|0;e=c[d>>2]|0;f=c[d+4>>2]|0;if(!((e|0)==(k|0)&(f|0)==(j|0)))if(!((e|0)==(j|0)&(f|0)==(k|0))){g=c[d+8>>2]|0;if(!((f|0)==(k|0)&(g|0)==(j|0)))if(!((f|0)==(j|0)&(g|0)==(k|0)))if((g|0)!=(k|0)|(e|0)==(j|0)^1)e=(g|0)!=(j|0)|(e|0)==(k|0)^1?9624:d+12+4|0;else{e=1;n=34}else e=d+12|0;else{e=0;n=34}}else e=d+12+8|0;else{e=2;n=34}if((n|0)==34){n=0;e=d+12+(e<<2)|0}h=c[a+(c[e>>2]<<2)>>2]|0;e=c[h>>2]|0;f=c[h+4>>2]|0;do if(!((e|0)==(j|0)&(f|0)==(k|0))){if((e|0)==(k|0)?(f|0)==(j|0):0){e=h+12+8|0;break}g=c[h+8>>2]|0;if(!((f|0)==(j|0)&(g|0)==(k|0)))if(!((f|0)==(k|0)&(g|0)==(j|0)))if((g|0)!=(j|0)|(e|0)==(k|0)^1){if((g|0)==(k|0)?(e|0)==(j|0):0){e=h+12+4|0;break}e=9624}else{e=1;n=41}else e=h+12|0;else{e=0;n=41}}else{e=2;n=41}while(0);if((n|0)==41){n=0;e=h+12+(e<<2)|0}c[e>>2]=i}while(!l);return}function he(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!((d|0)!=0&(e|0)!=0))return;if((c[b+24>>2]|0)<128?(c[b+28>>2]|0)<128:0){c[6472]=(c[6472]|0)+1;h=ic(1043)|0;if(!h)j=0;else{c[(h+4+15&-16)+-4>>2]=h;j=h+4+15&-16}h=c[b+24>>2]|0;if((h|0)>0){i=0;do{l=(c[b+32>>2]|0)+(i<<3)|0;m=c[l+4>>2]|0;n=j+(i<<3)|0;c[n>>2]=c[l>>2];c[n+4>>2]=m;i=i+1|0}while((i|0)!=(h|0))}h=c[b+32>>2]|0;if(h|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=j;c[b+28>>2]=128}c[b+24>>2]=128;l=c[b+32>>2]|0;c[l>>2]=d;c[l+4>>2]=e;l=1;j=124;while(1){h=l+-1|0;i=c[b+32>>2]|0;m=c[i+(h<<3)>>2]|0;n=c[i+(h<<3)+4>>2]|0;if((h|0)>(j|0)){e=c[b+24>>2]|0;if((e|0)<(e<<1|0)?(c[b+28>>2]|0)<(e<<1|0):0){if(e){c[6472]=(c[6472]|0)+1;i=ic((e<<4|3)+16|0)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}j=c[b+24>>2]|0;if((j|0)>0){d=0;do{p=(c[b+32>>2]|0)+(d<<3)|0;o=c[p+4>>2]|0;k=i+(d<<3)|0;c[k>>2]=c[p>>2];c[k+4>>2]=o;d=d+1|0}while((d|0)!=(j|0))}}else i=0;j=c[b+32>>2]|0;if(j|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=i;c[b+28>>2]=e<<1}c[b+24>>2]=e<<1;j=(e<<1)+-4|0}do if((m|0)==(n|0)){if(c[m+40>>2]|0){p=c[m+36>>2]|0;c[i+(h<<3)>>2]=p;c[i+(h<<3)+4>>2]=p;h=l+1|0;p=c[b+32>>2]|0;o=c[m+40>>2]|0;c[p+(l<<3)>>2]=o;c[p+(l<<3)+4>>2]=o;p=c[b+32>>2]|0;o=c[m+40>>2]|0;c[p+(h<<3)>>2]=c[m+36>>2];c[p+(h<<3)+4>>2]=o;h=l+2|0}}else if(((((+g[m>>2]<=+g[n+16>>2]?+g[m+16>>2]>=+g[n>>2]:0)?+g[m+4>>2]<=+g[n+20>>2]:0)?+g[m+20>>2]>=+g[n+4>>2]:0)?+g[m+8>>2]<=+g[n+24>>2]:0)?+g[m+24>>2]>=+g[n+8>>2]:0){k=(c[n+40>>2]|0)!=0;if(!(c[m+40>>2]|0))if(k){p=c[n+36>>2]|0;c[i+(h<<3)>>2]=m;c[i+(h<<3)+4>>2]=p;h=c[b+32>>2]|0;p=c[n+40>>2]|0;c[h+(l<<3)>>2]=m;c[h+(l<<3)+4>>2]=p;h=l+1|0;break}else{Kb[c[(c[f>>2]|0)+8>>2]&127](f,m,n);break}else{e=i+(h<<3)|0;d=c[m+36>>2]|0;if(k){p=c[n+36>>2]|0;c[e>>2]=d;c[i+(h<<3)+4>>2]=p;p=l+1|0;h=c[b+32>>2]|0;o=c[n+36>>2]|0;c[h+(l<<3)>>2]=c[m+40>>2];c[h+(l<<3)+4>>2]=o;h=l+2|0;o=c[b+32>>2]|0;k=c[n+40>>2]|0;c[o+(p<<3)>>2]=c[m+36>>2];c[o+(p<<3)+4>>2]=k;p=c[b+32>>2]|0;o=c[n+40>>2]|0;c[p+(h<<3)>>2]=c[m+40>>2];c[p+(h<<3)+4>>2]=o;h=l+3|0;break}else{c[e>>2]=d;c[i+(h<<3)+4>>2]=n;h=c[b+32>>2]|0;c[h+(l<<3)>>2]=c[m+40>>2];c[h+(l<<3)+4>>2]=n;h=l+1|0;break}}}while(0);if(!h)break;else l=h}return}function ie(b){b=b|0;var d=0,e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0.0,x=0;v=l;l=l+176|0;if(!(a[b+527>>0]|0)){l=v;return}g[b+36>>2]=0.0;g[b+520>>2]=0.0;g[b+516>>2]=0.0;c[b+576>>2]=0;c[b+576+4>>2]=0;c[b+576+8>>2]=0;c[b+576+12>>2]=0;if(!(a[b+524>>0]|0)){d=c[b+28>>2]|0;k=+g[b+348>>2];m=+g[b+352>>2];r=+g[b+356>>2];t=k*+g[d+20>>2]+m*+g[d+24>>2]+r*+g[d+28>>2]+ +g[d+56>>2];e=c[b+32>>2]|0;n=+g[b+412>>2];o=+g[b+416>>2];q=+g[b+420>>2];u=n*+g[e+20>>2]+o*+g[e+24>>2]+q*+g[e+28>>2]+ +g[e+56>>2];s=n*+g[e+36>>2]+o*+g[e+40>>2]+q*+g[e+44>>2]+ +g[e+60>>2];p=k*+g[d+4>>2]+m*+g[d+8>>2]+r*+g[d+12>>2]+ +g[d+52>>2];r=k*+g[d+36>>2]+m*+g[d+40>>2]+r*+g[d+44>>2]+ +g[d+60>>2];q=n*+g[e+4>>2]+o*+g[e+8>>2]+q*+g[e+12>>2]+ +g[e+52>>2];if((q-p)*(q-p)+(u-t)*(u-t)+(s-r)*(s-r)>1.1920928955078125e-07){j=1.0/+C(+((q-p)*(q-p)+(u-t)*(u-t)+(s-r)*(s-r)));g[v+128>>2]=(q-p)*j;g[v+128+4>>2]=(u-t)*j;g[v+128+8>>2]=(s-r)*j;c[v+128+12>>2]=0;i=(s-r)*j;f=(u-t)*j;j=(q-p)*j}else{c[v+128>>2]=1065353216;c[v+128+4>>2]=0;c[v+128+8>>2]=0;g[v+128+12>>2]=0.0;i=0.0;f=0.0;j=1.0}if(+B(+i)>.7071067690849304){w=i*i+f*f;o=1.0/+C(+w);n=-(o*i);f=o*f;h=f;k=j*n;m=0.0;o=w*o;f=-(f*j)}else{m=j*j+f*f;k=1.0/+C(+m);f=-(f*k);o=k*j;h=0.0;k=m*k;m=f;n=o;o=-(o*i);f=i*f}g[v+128+16>>2]=m;g[v+128+20>>2]=n;g[v+128+24>>2]=h;g[v+128+32>>2]=o;g[v+128+36>>2]=f;g[v+128+40>>2]=k;d=0;while(1){x=c[b+28>>2]|0;c[v+80>>2]=c[x+4>>2];c[v+80+4>>2]=c[x+20>>2];c[v+80+8>>2]=c[x+36>>2];g[v+80+12>>2]=0.0;c[v+80+16>>2]=c[x+8>>2];c[v+80+20>>2]=c[x+24>>2];c[v+80+24>>2]=c[x+40>>2];g[v+80+28>>2]=0.0;c[v+80+32>>2]=c[x+12>>2];c[v+80+36>>2]=c[x+28>>2];c[v+80+40>>2]=c[x+44>>2];g[v+80+44>>2]=0.0;c[v+32>>2]=c[e+4>>2];c[v+32+4>>2]=c[e+20>>2];c[v+32+8>>2]=c[e+36>>2];g[v+32+12>>2]=0.0;c[v+32+16>>2]=c[e+8>>2];c[v+32+20>>2]=c[e+24>>2];c[v+32+24>>2]=c[e+40>>2];g[v+32+28>>2]=0.0;c[v+32+32>>2]=c[e+12>>2];c[v+32+36>>2]=c[e+28>>2];c[v+32+40>>2]=c[e+44>>2];g[v+32+44>>2]=0.0;w=t-+g[x+56>>2];o=r-+g[x+60>>2];g[v+16>>2]=p-+g[x+52>>2];g[v+16+4>>2]=w;g[v+16+8>>2]=o;g[v+16+12>>2]=0.0;o=u-+g[e+56>>2];w=s-+g[e+60>>2];g[v>>2]=q-+g[e+52>>2];g[v+4>>2]=o;g[v+8>>2]=w;g[v+12>>2]=0.0;x=c[b+28>>2]|0;e=c[b+32>>2]|0;Ag(b+48+(d*84|0)|0,v+80|0,v+32|0,v+16|0,v,v+128+(d<<4)|0,x+396|0,+g[x+344>>2],e+396|0,+g[e+344>>2]);d=d+1|0;if((d|0)==3)break;e=c[b+32>>2]|0}d=b+32|0}else d=b+32|0;e=c[b+28>>2]|0;x=c[d>>2]|0;lc(b,e+4|0,x+4|0,e+264|0,x+264|0);l=v;return}function je(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=l;l=l+80|0;c[a+68>>2]=(c[a+68>>2]|0)+1;d=c[a+64>>2]|0;if(d|0){e=c[(c[a+24>>2]|0)+(b*80|0)+76>>2]|0;Sg(d,e)|0;f=c[d+4>>2]|0;if(f|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+4>>2]=e;c[d+12>>2]=(c[d+12>>2]|0)+-1}f=(c[a+16>>2]|0)+-1|0;e=c[a+24>>2]|0;c[g>>2]=c[e+(b*80|0)>>2];c[g+4>>2]=c[e+(b*80|0)+4>>2];c[g+8>>2]=c[e+(b*80|0)+8>>2];c[g+12>>2]=c[e+(b*80|0)+12>>2];c[g+16>>2]=c[e+(b*80|0)+16>>2];c[g+16+4>>2]=c[e+(b*80|0)+16+4>>2];c[g+16+8>>2]=c[e+(b*80|0)+16+8>>2];c[g+16+12>>2]=c[e+(b*80|0)+16+12>>2];c[g+32>>2]=c[e+(b*80|0)+32>>2];c[g+32+4>>2]=c[e+(b*80|0)+32+4>>2];c[g+32+8>>2]=c[e+(b*80|0)+32+8>>2];c[g+32+12>>2]=c[e+(b*80|0)+32+12>>2];c[g+48>>2]=c[e+(b*80|0)+48>>2];c[g+48+4>>2]=c[e+(b*80|0)+48+4>>2];c[g+48+8>>2]=c[e+(b*80|0)+48+8>>2];c[g+48+12>>2]=c[e+(b*80|0)+48+12>>2];c[g+64>>2]=c[e+(b*80|0)+64>>2];c[g+64+4>>2]=c[e+(b*80|0)+64+4>>2];c[g+64+8>>2]=c[e+(b*80|0)+64+8>>2];c[g+64+12>>2]=c[e+(b*80|0)+64+12>>2];c[e+(b*80|0)>>2]=c[e+(f*80|0)>>2];c[e+(b*80|0)+4>>2]=c[e+(f*80|0)+4>>2];c[e+(b*80|0)+8>>2]=c[e+(f*80|0)+8>>2];c[e+(b*80|0)+12>>2]=c[e+(f*80|0)+12>>2];c[e+(b*80|0)+16>>2]=c[e+(f*80|0)+16>>2];c[e+(b*80|0)+16+4>>2]=c[e+(f*80|0)+16+4>>2];c[e+(b*80|0)+16+8>>2]=c[e+(f*80|0)+16+8>>2];c[e+(b*80|0)+16+12>>2]=c[e+(f*80|0)+16+12>>2];c[e+(b*80|0)+32>>2]=c[e+(f*80|0)+32>>2];c[e+(b*80|0)+32+4>>2]=c[e+(f*80|0)+32+4>>2];c[e+(b*80|0)+32+8>>2]=c[e+(f*80|0)+32+8>>2];c[e+(b*80|0)+32+12>>2]=c[e+(f*80|0)+32+12>>2];c[e+(b*80|0)+48>>2]=c[e+(f*80|0)+48>>2];c[e+(b*80|0)+48+4>>2]=c[e+(f*80|0)+48+4>>2];c[e+(b*80|0)+48+8>>2]=c[e+(f*80|0)+48+8>>2];c[e+(b*80|0)+48+12>>2]=c[e+(f*80|0)+48+12>>2];c[e+(b*80|0)+64>>2]=c[e+(f*80|0)+64>>2];c[e+(b*80|0)+64+4>>2]=c[e+(f*80|0)+64+4>>2];c[e+(b*80|0)+64+8>>2]=c[e+(f*80|0)+64+8>>2];c[e+(b*80|0)+64+12>>2]=c[e+(f*80|0)+64+12>>2];e=c[a+24>>2]|0;c[e+(f*80|0)>>2]=c[g>>2];c[e+(f*80|0)+4>>2]=c[g+4>>2];c[e+(f*80|0)+8>>2]=c[g+8>>2];c[e+(f*80|0)+12>>2]=c[g+12>>2];c[e+(f*80|0)+16>>2]=c[g+16>>2];c[e+(f*80|0)+16+4>>2]=c[g+16+4>>2];c[e+(f*80|0)+16+8>>2]=c[g+16+8>>2];c[e+(f*80|0)+16+12>>2]=c[g+16+12>>2];c[e+(f*80|0)+32>>2]=c[g+32>>2];c[e+(f*80|0)+32+4>>2]=c[g+32+4>>2];c[e+(f*80|0)+32+8>>2]=c[g+32+8>>2];c[e+(f*80|0)+32+12>>2]=c[g+32+12>>2];c[e+(f*80|0)+48>>2]=c[g+48>>2];c[e+(f*80|0)+48+4>>2]=c[g+48+4>>2];c[e+(f*80|0)+48+8>>2]=c[g+48+8>>2];c[e+(f*80|0)+48+12>>2]=c[g+48+12>>2];c[e+(f*80|0)+64>>2]=c[g+64>>2];c[e+(f*80|0)+64+4>>2]=c[g+64+4>>2];c[e+(f*80|0)+64+8>>2]=c[g+64+8>>2];c[e+(f*80|0)+64+12>>2]=c[g+64+12>>2];if(!(c[a+64>>2]|0)){b=c[a+16>>2]|0;b=b+-1|0;c[a+16>>2]=b;l=g;return}c[(c[(c[a+24>>2]|0)+(b*80|0)+76>>2]|0)+36>>2]=b;b=c[a+16>>2]|0;b=b+-1|0;c[a+16>>2]=b;l=g;return}function ke(a,d,f,h,i,j,k,m,n){a=a|0;d=d|0;f=f|0;h=+h;i=+i;j=+j;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0.0,J=0,K=0,L=0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0;V=l;l=l+32|0;E=+g[f>>2];F=+g[f+4>>2];I=+g[f+8>>2];R=1.0/+C(+((h-E)*(h-E)+(i-F)*(i-F)+(j-I)*(j-I)));O=(h-E)*R==0.0?999999984306749440.0:1.0/((h-E)*R);P=(i-F)*R==0.0?999999984306749440.0:1.0/((i-F)*R);Q=(j-I)*R==0.0?999999984306749440.0:1.0/((j-I)*R);ea=(E>h?h:E)+ +g[k>>2];da=(F>i?i:F)+ +g[k+4>>2];ca=(I>j?j:I)+ +g[k+8>>2];aa=(E>2];Y=(F>2];t=(I>2];$=+g[a+4>>2];ea=ea<$?$:ea;X=+g[a+8>>2];da=da>2];ca=ca>2];Z=+g[a+24>>2];s=+g[a+28>>2];_=+g[a+36>>2];W=+g[a+40>>2];v=+g[a+44>>2];G=~~(((ba0){p=0;q=c[a+136>>2]|0;o=0;do{o=o+1|0;y=q+6|0;r=b[q>>1]|0;z=q+10|0;w=b[q+4>>1]|0;A=q+8|0;x=b[q+2>>1]|0;D=q+12|0;B=(c[D>>2]|0)>-1;do if(((K&65535)>=(r&65535)?(G&65535)<=(e[y>>1]|0):0)&(J&65535)<=(e[z>>1]|0)&(M&65535)>=(w&65535)&(H&65535)<=(e[A>>1]|0)&(L&65535)>=(x&65535)){aa=+g[a+36>>2];ca=+g[a+40>>2];ea=+g[a+44>>2];ba=+g[a+4>>2];da=+g[a+8>>2];u=+g[a+12>>2];g[V+12>>2]=0.0;v=+(e[y>>1]|0)/aa+ba;s=+(e[A>>1]|0)/ca+da;t=+(e[z>>1]|0)/ea+u;g[V+28>>2]=0.0;g[V>>2]=+(r&65535)/aa+ba-+g[m>>2];g[V+4>>2]=+(x&65535)/ca+da-+g[m+4>>2];g[V+8>>2]=+(w&65535)/ea+u-+g[m+8>>2];g[V+16>>2]=v-+g[k>>2];g[V+20>>2]=s-+g[k+4>>2];g[V+24>>2]=t-+g[k+8>>2];t=+g[f>>2];s=O*(+g[V+((O<0.0&1)<<4)>>2]-t);t=O*(+g[V+((O<0.0^1)<<4)>>2]-t);v=+g[f+4>>2];u=P*(+g[V+((P<0.0&1)<<4)+4>>2]-v);v=P*(+g[V+((P<0.0^1)<<4)+4>>2]-v);if(!(u>t|s>v)?(N=u>s?u:s,U=v>2],S=Q*(+g[V+((Q<0.0&1)<<4)+8>>2]-T),T=Q*(+g[V+((Q<0.0^1)<<4)+8>>2]-T),!(S>U|N>T)):0){r=(T0.0?(S>N?S:N)<(j-I)*(j-I)*R+((h-E)*(h-E)*R+(i-F)*(i-F)*R):0;if(!(B&r)){w=9;break}w=c[D>>2]|0;Kb[c[(c[d>>2]|0)+8>>2]&127](d,w>>21,w&2097151);w=10;break}r=0;w=9}else{r=0;w=9}while(0);if((w|0)==9){w=0;if(B|r)w=10;else{D=c[D>>2]|0;p=p-D|0;q=q+(0-D<<4)|0}}if((w|0)==10){p=p+1|0;q=q+16|0}}while((p|0)<(n|0))}else o=0;if((c[6204]|0)>=(o|0)){l=V;return}c[6204]=o;l=V;return}function le(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,G=0.0,H=0.0,I=0.0,J=0.0;Eg(a,b+(c*284|0)|0,d);m=+g[b+(c*284|0)+52>>2];h=+g[b+(c*284|0)+56>>2];q=+g[b+(c*284|0)+60>>2];J=+g[b+(c*284|0)+76>>2];x=+g[b+(c*284|0)+72>>2];z=+g[b+(c*284|0)+68>>2];w=1.0/+C(+((x*-m-z*-h)*(x*-m-z*-h)+((J*-h-x*-q)*(J*-h-x*-q)+(z*-q-J*-m)*(z*-q-J*-m))));v=(J*-h-x*-q)*w;u=w*(z*-q-J*-m);w=w*(x*-m-z*-h);e=+g[b+(c*284|0)+232>>2]*.5;k=+F(+e)/+C(+(m*m+h*h+q*q));e=+E(+e);l=2.0/(e*e+(k*-q*k*-q+(k*-m*k*-m+k*-h*k*-h)));H=1.0-(k*-h*k*-h*l+k*-q*k*-q*l);G=k*-m*k*-h*l-e*k*-q*l;I=k*-m*k*-q*l+e*k*-h*l;B=k*-m*k*-h*l+e*k*-q*l;A=1.0-(k*-m*k*-m*l+k*-q*k*-q*l);D=k*-h*k*-q*l-e*k*-m*l;j=k*-m*k*-q*l-e*k*-h*l;e=k*-h*k*-q*l+e*k*-m*l;l=1.0-(k*-m*k*-m*l+k*-h*k*-h*l);k=+g[b+(c*284|0)+236>>2]*-.5;y=+F(+k)/+C(+(J*J+(x*x+z*z)));k=+E(+k);r=2.0/(k*k+(J*y*J*y+(z*y*z*y+x*y*x*y)));n=1.0-(x*y*x*y*r+J*y*J*y*r);i=z*y*x*y*r-k*J*y*r;t=z*y*J*y*r+k*x*y*r;o=z*y*x*y*r+k*J*y*r;f=1.0-(z*y*z*y*r+J*y*J*y*r);s=x*y*J*y*r-k*z*y*r;p=z*y*J*y*r-k*x*y*r;k=x*y*J*y*r+k*z*y*r;r=1.0-(z*y*z*y*r+x*y*x*y*r);y=+g[b+(c*284|0)+68>>2];x=+g[b+(c*284|0)+72>>2];z=+g[b+(c*284|0)+76>>2];g[b+(c*284|0)+92>>2]=z*(H*t+G*s+I*r)+(y*(I*p+(G*o+H*n))+x*(I*k+(H*i+G*f)));g[b+(c*284|0)+96>>2]=w*(H*t+G*s+I*r)+(v*(I*p+(G*o+H*n))+u*(I*k+(H*i+G*f)));g[b+(c*284|0)+100>>2]=(H*t+G*s+I*r)*-q+((I*p+(G*o+H*n))*-m+(I*k+(H*i+G*f))*-h);g[b+(c*284|0)+104>>2]=0.0;g[b+(c*284|0)+108>>2]=z*(B*t+A*s+D*r)+(y*(D*p+(A*o+B*n))+x*(D*k+(B*i+A*f)));g[b+(c*284|0)+112>>2]=w*(B*t+A*s+D*r)+(v*(D*p+(A*o+B*n))+u*(D*k+(B*i+A*f)));g[b+(c*284|0)+116>>2]=(B*t+A*s+D*r)*-q+((D*p+(A*o+B*n))*-m+(D*k+(B*i+A*f))*-h);g[b+(c*284|0)+120>>2]=0.0;g[b+(c*284|0)+124>>2]=z*(j*t+e*s+l*r)+(y*(l*p+(e*o+j*n))+x*(l*k+(j*i+e*f)));g[b+(c*284|0)+128>>2]=w*(j*t+e*s+l*r)+(v*(l*p+(e*o+j*n))+u*(l*k+(j*i+e*f)));g[b+(c*284|0)+132>>2]=(j*t+e*s+l*r)*-q+((l*p+(e*o+j*n))*-m+(l*k+(j*i+e*f))*-h);g[b+(c*284|0)+136>>2]=0.0;h=+g[b+(c*284|0)+32>>2];f=h*+g[b+(c*284|0)+56>>2]+ +g[b+(c*284|0)+40>>2];e=h*+g[b+(c*284|0)+60>>2]+ +g[b+(c*284|0)+44>>2];g[b+(c*284|0)+140>>2]=+g[b+(c*284|0)+52>>2]*h+ +g[b+(c*284|0)+36>>2];g[b+(c*284|0)+144>>2]=f;g[b+(c*284|0)+148>>2]=e;g[b+(c*284|0)+152>>2]=0.0;return}function me(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=+i;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0.0;D=l;l=l+32|0;if(!d){l=D;return}q=c[b+44>>2]|0;if((q|0)<128){if((c[b+48>>2]|0)<128){c[6472]=(c[6472]|0)+1;n=ic(531)|0;if(!n)p=0;else{c[(n+4+15&-16)+-4>>2]=n;p=n+4+15&-16}n=c[b+44>>2]|0;if((n|0)>0){o=0;do{c[p+(o<<2)>>2]=c[(c[b+52>>2]|0)+(o<<2)>>2];o=o+1|0}while((o|0)!=(n|0))}n=c[b+52>>2]|0;if(n|0){if(a[b+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[n+-4>>2]|0)}c[b+52>>2]=0}a[b+56>>0]=1;c[b+52>>2]=p;c[b+48>>2]=128;o=b+52|0}else o=b+52|0;n=q;do{c[(c[o>>2]|0)+(n<<2)>>2]=0;n=n+1|0}while((n|0)!=128);y=b+48|0}else{y=b+48|0;o=b+52|0}c[b+44>>2]=128;c[c[o>>2]>>2]=d;x=1;n=126;while(1){p=x+-1|0;q=c[o>>2]|0;w=c[q+(p<<2)>>2]|0;s=+g[w+4>>2]-+g[k+4>>2];u=+g[w+8>>2]-+g[k+8>>2];g[D>>2]=+g[w>>2]-+g[k>>2];g[D+4>>2]=s;g[D+8>>2]=u;g[D+12>>2]=0.0;u=+g[w+20>>2]-+g[j+4>>2];s=+g[w+24>>2]-+g[j+8>>2];g[D+16>>2]=+g[w+16>>2]-+g[j>>2];g[D+20>>2]=u;g[D+24>>2]=s;g[D+28>>2]=0.0;v=c[h>>2]|0;s=+g[e>>2];u=+g[f>>2];r=(+g[D+(v<<4)>>2]-s)*u;s=u*(+g[D+(1-v<<4)>>2]-s);v=c[h+4>>2]|0;u=+g[e+4>>2];E=+g[f+4>>2];t=(+g[D+(v<<4)+4>>2]-u)*E;u=E*(+g[D+(1-v<<4)+4>>2]-u);do if((!(t>s|r>u)?(z=t>r?t:r,C=u>2]|0,B=+g[e+8>>2],E=+g[f+8>>2],A=(+g[D+(v<<4)+8>>2]-B)*E,B=E*(+g[D+(1-v<<4)+8>>2]-B),!(A>C|z>B)):0)?((B0.0?(A>z?A:z)>2]|0)){Gb[c[(c[m>>2]|0)+12>>2]&127](m,w);break}if((p|0)>(n|0)){v=c[b+44>>2]|0;if((v|0)<(v<<1|0)){if((c[y>>2]|0)<(v<<1|0)){if(v){c[6472]=(c[6472]|0)+1;n=ic((v<<3|3)+16|0)|0;if(!n)n=0;else{c[(n+4+15&-16)+-4>>2]=n;n=n+4+15&-16}q=c[b+44>>2]|0;if((q|0)>0){d=0;do{c[n+(d<<2)>>2]=c[(c[o>>2]|0)+(d<<2)>>2];d=d+1|0}while((d|0)!=(q|0))}}else n=0;q=c[o>>2]|0;if(q|0){if(a[b+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[q+-4>>2]|0)}c[o>>2]=0}a[b+56>>0]=1;c[o>>2]=n;c[y>>2]=v<<1;q=v}else{n=q;q=v}do{c[n+(q<<2)>>2]=0;q=q+1|0;n=c[o>>2]|0}while((q|0)!=(v<<1|0))}else n=q;c[b+44>>2]=v<<1;q=n;n=(v<<1)+-2|0}c[q+(p<<2)>>2]=c[w+36>>2];c[(c[o>>2]|0)+(x<<2)>>2]=c[w+40>>2];p=x+1|0}while(0);if(!p)break;else x=p}l=D;return}function ne(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0,A=0,B=0,C=0,D=0,E=0.0;D=l;l=l+32|0;q=+g[d>>2];i=(g[j>>2]=q,c[j>>2]|0);t=q<999999984306749440.0?i:1566444395;p=+g[d+4>>2];m=(g[j>>2]=p,c[j>>2]|0);u=p<999999984306749440.0?m:1566444395;E=+g[d+8>>2];o=(g[j>>2]=E,c[j>>2]|0);w=E<999999984306749440.0?o:1566444395;s=+g[d+12>>2];y=s<0.0?s:0.0;i=q>-999999984306749440.0?i:-581039253;m=p>-999999984306749440.0?m:-581039253;o=E>-999999984306749440.0?o:-581039253;s=s>0.0?s:0.0;E=+g[d+16>>2];B=E<(c[j>>2]=t,+g[j>>2]);h=(g[j>>2]=E,c[j>>2]|0);t=B?h:t;p=+g[d+20>>2];B=p<(c[j>>2]=u,+g[j>>2]);k=(g[j>>2]=p,c[j>>2]|0);u=B?k:u;q=+g[d+24>>2];B=q<(c[j>>2]=w,+g[j>>2]);n=(g[j>>2]=q,c[j>>2]|0);w=B?n:w;r=+g[d+28>>2];y=r>2]=i,+g[j>>2])>2]=m,+g[j>>2])>2]=o,+g[j>>2])>2];B=E<(c[j>>2]=t,+g[j>>2]);h=(g[j>>2]=E,c[j>>2]|0);B=B?h:t;q=+g[d+36>>2];A=q<(c[j>>2]=u,+g[j>>2]);i=(g[j>>2]=q,c[j>>2]|0);A=A?i:u;r=+g[d+40>>2];z=r<(c[j>>2]=w,+g[j>>2]);k=(g[j>>2]=r,c[j>>2]|0);z=z?k:w;p=+g[d+44>>2];y=p>2]=x,+g[j>>2])>2]=v,+g[j>>2])>2]=m,+g[j>>2])>2]|0;h=c[t+4>>2]|0;if((h|0)==(c[t+8>>2]|0)?(C=h|0?h<<1:1,(h|0)<(C|0)):0){if(!C)i=0;else{c[6472]=(c[6472]|0)+1;h=ic(C<<6|19)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=c[t+4>>2]|0}if((h|0)>0){k=0;do{m=i+(k<<6)|0;n=(c[t+12>>2]|0)+(k<<6)|0;o=m+64|0;do{c[m>>2]=c[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));k=k+1|0}while((k|0)!=(h|0))}h=c[t+12>>2]|0;if(h|0){if(a[t+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[t+12>>2]=0}a[t+16>>0]=1;c[t+12>>2]=i;c[t+8>>2]=C;h=c[t+4>>2]|0}C=c[t+12>>2]|0;c[C+(h<<6)>>2]=B;c[C+(h<<6)+4>>2]=A;c[C+(h<<6)+8>>2]=z;g[C+(h<<6)+12>>2]=y;c[C+(h<<6)+16>>2]=w;c[C+(h<<6)+20>>2]=v;c[C+(h<<6)+24>>2]=u;g[C+(h<<6)+28>>2]=p;c[C+(h<<6)+32>>2]=-1;c[C+(h<<6)+36>>2]=e;c[C+(h<<6)+40>>2]=f;f=C+(h<<6)+44|0;c[f>>2]=c[D>>2];c[f+4>>2]=c[D+4>>2];c[f+8>>2]=c[D+8>>2];c[f+12>>2]=c[D+12>>2];c[f+16>>2]=c[D+16>>2];c[t+4>>2]=(c[t+4>>2]|0)+1;l=D;return}function oe(b,d){b=b|0;d=+d;var e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0;s=l;l=l+32|0;e=c[b+136>>2]|0;if((e|0)>0){f=0;do{le(c[b+116>>2]|0,c[b+144>>2]|0,f,0);f=f+1|0;e=c[b+136>>2]|0}while((f|0)<(e|0))}r=c[b+116>>2]|0;m=+g[r+312>>2];n=+g[r+316>>2];h=+g[r+320>>2];h=+C(+(m*m+n*n+h*h))*3.5999999046325684;g[b+112>>2]=h;q=c[b+128>>2]|0;if(+g[r+4+(q<<2)>>2]*+g[r+312>>2]+ +g[r+20+(q<<2)>>2]*+g[r+316>>2]+ +g[r+36+(q<<2)>>2]*+g[r+320>>2]<0.0)g[b+112>>2]=-h;if((e|0)>0){e=0;do{+ef(b,(c[b+144>>2]|0)+(e*284|0)|0);e=e+1|0;f=c[b+136>>2]|0}while((e|0)<(f|0));i=1.0/+g[(c[b+116>>2]|0)+344>>2];if((f|0)>0){f=0;do{e=c[b+144>>2]|0;if(!(a[e+(f*284|0)+84>>0]|0))h=0.0;else{h=+g[e+(f*284|0)+272>>2];h=i*(+g[e+(f*284|0)+216>>2]*(+g[e+(f*284|0)+204>>2]-+g[e+(f*284|0)+32>>2])*+g[e+(f*284|0)+268>>2]-h*+g[(h<0.0?e+(f*284|0)+220|0:e+(f*284|0)+224|0)>>2]);h=h<0.0?0.0:h}g[e+(f*284|0)+276>>2]=h;f=f+1|0;e=c[b+136>>2]|0}while((f|0)<(e|0));if((e|0)>0){e=0;do{q=c[b+144>>2]|0;k=+g[q+(e*284|0)+276>>2];n=+g[q+(e*284|0)+248>>2];k=k>n?n:k;n=k*+g[q+(e*284|0)+4>>2]*d;m=k*+g[q+(e*284|0)+8>>2]*d;g[s+16>>2]=+g[q+(e*284|0)>>2]*k*d;g[s+16+4>>2]=n;g[s+16+8>>2]=m;g[s+16+12>>2]=0.0;r=c[b+116>>2]|0;m=+g[q+(e*284|0)+20>>2]-+g[r+56>>2];n=+g[q+(e*284|0)+24>>2]-+g[r+60>>2];g[s>>2]=+g[q+(e*284|0)+16>>2]-+g[r+52>>2];g[s+4>>2]=m;g[s+8>>2]=n;g[s+12>>2]=0.0;Zk(r,s+16|0,s);e=e+1|0}while((e|0)<(c[b+136>>2]|0))}}}Bb[c[(c[b>>2]|0)+20>>2]&31](b,d);o=c[b+136>>2]|0;if((o|0)<=0){l=s;return}p=c[b+144>>2]|0;q=c[b+116>>2]|0;r=0;do{k=+g[p+(r*284|0)+36>>2]-+g[q+52>>2];n=+g[p+(r*284|0)+40>>2]-+g[q+56>>2];m=+g[p+(r*284|0)+44>>2]-+g[q+60>>2];h=+g[q+332>>2];i=+g[q+336>>2];j=+g[q+328>>2];if(!(a[p+(r*284|0)+84>>0]|0)){e=p+(r*284|0)+240|0;j=+g[e>>2];f=p+(r*284|0)+236|0;h=j;i=+g[f>>2]}else{e=c[b+128>>2]|0;y=+g[q+4+(e<<2)>>2];w=+g[q+20+(e<<2)>>2];u=+g[q+36+(e<<2)>>2];x=+g[p+(r*284|0)>>2];v=+g[p+(r*284|0)+4>>2];t=+g[p+(r*284|0)+8>>2];j=((n*j-k*h+ +g[q+320>>2])*(u-t*(y*x+w*v+u*t))+((h*m-n*i+ +g[q+312>>2])*(y-x*(y*x+w*v+u*t))+(k*i-m*j+ +g[q+316>>2])*(w-v*(y*x+w*v+u*t))))*d/+g[p+(r*284|0)+212>>2];e=p+(r*284|0)+240|0;g[e>>2]=j;f=p+(r*284|0)+236|0;h=+g[f>>2];i=j}g[f>>2]=h+i;g[e>>2]=j*.9900000095367432;r=r+1|0}while((r|0)!=(o|0));l=s;return}function pe(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0;o=l;l=l+16|0;i=+g[d>>2];j=+g[d+4>>2];k=+g[d+8>>2];m=+g[e>>2];n=+g[e+4>>2];h=+g[e+8>>2];if(!(a[b+228>>0]|0)){z=+g[b+100>>2];w=+g[b+116>>2];C=+g[b+132>>2];y=+g[b+104>>2];u=+g[b+120>>2];B=+g[b+136>>2];x=+g[b+108>>2];s=+g[b+124>>2];A=+g[b+140>>2];F=-+g[b+148>>2];E=-+g[b+152>>2];D=-+g[b+156>>2];J=+g[b+164>>2];I=+g[b+168>>2];r=+g[b+172>>2];H=+g[b+180>>2];G=+g[b+184>>2];q=+g[b+188>>2];v=+g[b+196>>2];t=+g[b+200>>2];p=+g[b+204>>2];r=h*(C*J+B*I+A*r)+(m*(z*J+y*I+x*r)+n*(w*J+u*I+s*r))+(J*(z*F+w*E+C*D)+(y*F+u*E+B*D)*I+(x*F+s*E+A*D)*r+ +g[b+212>>2]);q=h*(C*H+B*G+A*q)+(m*(z*H+y*G+x*q)+n*(w*H+u*G+s*q))+((z*F+w*E+C*D)*H+(y*F+u*E+B*D)*G+(x*F+s*E+A*D)*q+ +g[b+216>>2]);p=(z*F+w*E+C*D)*v+(y*F+u*E+B*D)*t+(x*F+s*E+A*D)*p+ +g[b+220>>2]+(h*(C*v+B*t+A*p)+(m*(z*v+y*t+x*p)+n*(w*v+u*t+s*p)));g[o>>2]=r;g[o+4>>2]=q;g[o+8>>2]=p;f=(i*f+m-r)*+g[d>>2]+(j*f+n-q)*+g[d+4>>2]+(k*f+h-p)*+g[d+8>>2];e=o+12|0;g[e>>2]=0.0;b=b+32|0;b=c[b>>2]|0;e=c[b>>2]|0;e=e+16|0;e=c[e>>2]|0;Lb[e&15](b,d,o,f);l=o;return}else{z=+g[b+36>>2];C=+g[b+52>>2];w=+g[b+68>>2];A=+g[b+40>>2];E=+g[b+56>>2];x=+g[b+72>>2];B=+g[b+44>>2];G=+g[b+60>>2];y=+g[b+76>>2];t=-+g[b+84>>2];u=-+g[b+88>>2];v=-+g[b+92>>2];p=+g[b+164>>2];q=+g[b+168>>2];H=+g[b+172>>2];r=+g[b+180>>2];s=+g[b+184>>2];I=+g[b+188>>2];D=+g[b+196>>2];F=+g[b+200>>2];J=+g[b+204>>2];H=(k*f+h)*(w*p+x*q+y*H)+((i*f+m)*(z*p+A*q+B*H)+(j*f+n)*(C*p+E*q+G*H))+(p*(z*t+C*u+w*v)+(A*t+E*u+x*v)*q+(B*t+G*u+y*v)*H+ +g[b+212>>2]);I=(k*f+h)*(w*r+x*s+y*I)+((i*f+m)*(z*r+A*s+B*I)+(j*f+n)*(C*r+E*s+G*I))+((z*t+C*u+w*v)*r+(A*t+E*u+x*v)*s+(B*t+G*u+y*v)*I+ +g[b+216>>2]);J=(z*t+C*u+w*v)*D+(A*t+E*u+x*v)*F+(B*t+G*u+y*v)*J+ +g[b+220>>2]+((k*f+h)*(w*D+x*F+y*J)+((i*f+m)*(z*D+A*F+B*J)+(j*f+n)*(C*D+E*F+G*J)));g[o>>2]=H+i*(i*(H-m)+j*(I-n)+k*(J-h));g[o+4>>2]=I+j*(i*(H-m)+j*(I-n)+k*(J-h));g[o+8>>2]=J+k*(i*(H-m)+j*(I-n)+k*(J-h));J=i*(H-m)+j*(I-n)+k*(J-h);e=o+12|0;g[e>>2]=0.0;b=b+32|0;b=c[b>>2]|0;e=c[b>>2]|0;e=e+16|0;e=c[e>>2]|0;Lb[e&15](b,d,o,J);l=o;return}}function qe(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;o=c[b+452>>2]|0;Kb[c[(c[o>>2]|0)+16>>2]&127](o,b+324|0,0);o=c[b+452>>2]|0;qb[c[(c[o>>2]|0)+12>>2]&127](o)|0;Jc(b,d);bj(11828);o=c[b+328>>2]|0;if((o|0)>0){e=c[b+336>>2]|0;f=0;k=0;do{n=c[(c[e+(f<<2)>>2]|0)+384>>2]|0;k=(k|0)>(n|0)?k:n;f=f+1|0}while((f|0)!=(o|0));f=0;while(1){e=c[e+(f<<2)>>2]|0;if((c[e+852>>2]|0)>0){h=0;do{n=c[(c[e+860>>2]|0)+(h<<2)>>2]|0;Eb[c[(c[n>>2]|0)+8>>2]&15](n,+g[e+452>>2],k);h=h+1|0}while((h|0)<(c[e+852>>2]|0))}f=f+1|0;if((f|0)==(o|0))break;e=c[b+336>>2]|0}if((k|0)>0){i=0;do{j=0;do{f=c[(c[b+336>>2]|0)+(j<<2)>>2]|0;e=c[f+852>>2]|0;if((e|0)>0){h=0;do{n=c[(c[f+860>>2]|0)+(h<<2)>>2]|0;Cb[c[(c[n>>2]|0)+12>>2]&7](n,+g[f+452>>2],1.0);h=h+1|0}while((h|0)!=(e|0))}j=j+1|0}while((j|0)!=(o|0));i=i+1|0}while((i|0)!=(k|0));n=0}else n=0;do{m=c[(c[b+336>>2]|0)+(n<<2)>>2]|0;if((c[m+852>>2]|0)>0){h=0;do{e=c[(c[m+860>>2]|0)+(h<<2)>>2]|0;Bb[c[(c[e>>2]|0)+16>>2]&31](e,+g[m+452>>2]);e=c[m+860>>2]|0;f=c[e+(h<<2)>>2]|0;a:do if(a[f+152>>0]|0){if(!f)k=e;else{c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0);k=c[m+860>>2]|0}e=h+-1|0;f=c[m+852>>2]|0;if((f|0)>0){j=c[k+(h<<2)>>2]|0;h=0;while(1){i=k+(h<<2)|0;if((c[i>>2]|0)==(j|0))break;h=h+1|0;if((h|0)>=(f|0))break a}if((h|0)<(f|0)){c[i>>2]=c[k+(f+-1<<2)>>2];c[(c[m+860>>2]|0)+(f+-1<<2)>>2]=j;c[m+852>>2]=f+-1;f=f+-1|0}}}else{f=c[m+852>>2]|0;e=h}while(0);h=e+1|0}while((h|0)<(f|0))}n=n+1|0}while((n|0)!=(o|0))}e=c[b+452>>2]|0;Bb[c[(c[e>>2]|0)+28>>2]&31](e,+g[e+12>>2]*d);e=c[2405]|0;o=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=o;do if(!o){if(c[e+4>>2]|0){Za(p|0,0)|0;o=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[p+4>>2]|0)-(c[o+4>>2]|0)+(((c[p>>2]|0)-(c[o>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(c[e+16>>2]|0)break;e=c[2405]|0}c[2405]=c[e+20>>2]}while(0);if((c[b+328>>2]|0)<=0){b=c[b+452>>2]|0;o=c[b>>2]|0;o=o+32|0;o=c[o>>2]|0;Ab[o&511](b);l=p;return}e=0;do{o=c[(c[b+336>>2]|0)+(e<<2)>>2]|0;Nh(o,o);e=e+1|0}while((e|0)<(c[b+328>>2]|0));b=c[b+452>>2]|0;o=c[b>>2]|0;o=o+32|0;o=c[o>>2]|0;Ab[o&511](b);l=p;return}function re(b,d,e,f,h,i,k,l){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;l=l|0;var m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0;c[b+4>>2]=4;c[b+8>>2]=-1;c[b+12>>2]=-1;g[b+16>>2]=3402823466385288598117041.0e14;a[b+20>>0]=1;a[b+21>>0]=0;c[b+24>>2]=-1;c[b+28>>2]=d;c[b+32>>2]=e;g[b+36>>2]=0.0;g[b+40>>2]=.30000001192092896;c[b+44>>2]=0;c[b>>2]=4900;g[b+688>>2]=0.0;g[b+692>>2]=-1.0;g[b+696>>2]=.8999999761581421;g[b+700>>2]=.30000001192092896;g[b+704>>2]=1.0;g[b+708>>2]=0.0;g[b+712>>2]=0.0;a[b+716>>0]=0;a[b+736>>0]=0;a[b+737>>0]=0;a[b+738>>0]=0;a[b+739>>0]=1;a[b+740>>0]=l&1;c[b+748>>2]=0;c[b+600>>2]=c[f>>2];c[b+600+4>>2]=c[f+4>>2];c[b+600+8>>2]=c[f+8>>2];c[b+600+12>>2]=c[f+12>>2];o=+g[d+4>>2];p=+g[d+20>>2];m=+g[d+36>>2];q=+g[i>>2];r=+g[i+4>>2];n=+g[i+8>>2];do if(!(o*q+p*r+m*n>=.9999998807907104))if(!(o*q+p*r+m*n<=-.9999998807907104)){s=(g[j>>2]=m*r-p*n,c[j>>2]|0);f=(g[j>>2]=o*n-m*q,c[j>>2]|0);x=n*(o*n-m*q)-r*(p*q-o*r);y=q*(p*q-o*r)-n*(m*r-p*n);w=r*(m*r-p*n)-q*(o*n-m*q);e=(g[j>>2]=p*q-o*r,c[j>>2]|0);break}else{x=+g[d+12>>2];y=+g[d+28>>2];w=+g[d+44>>2];s=c[d+8>>2]|0;e=c[d+40>>2]|0;f=c[d+24>>2]|0;break}else{x=-+g[d+12>>2];y=-+g[d+28>>2];w=-+g[d+44>>2];s=c[d+8>>2]|0;e=c[d+40>>2]|0;f=c[d+24>>2]|0}while(0);g[b+552>>2]=x;c[b+556>>2]=s;c[b+560>>2]=c[i>>2];g[b+564>>2]=0.0;g[b+568>>2]=y;c[b+572>>2]=f;c[b+576>>2]=c[i+4>>2];g[b+580>>2]=0.0;g[b+584>>2]=w;c[b+588>>2]=e;c[b+592>>2]=c[i+8>>2];g[b+596>>2]=0.0;m=+g[i+4>>2];t=+g[k+8>>2];q=+g[i+8>>2];u=+g[k+4>>2];v=+g[k>>2];n=+g[i>>2];do if(t*q+(m*u+v*n)<-.9999998807907104)if(+B(+q)>.7071067690849304){n=1.0/+C(+(m*m+q*q));r=m*n;o=0.0;p=0.0;m=-(q*n);break}else{q=1.0/+C(+(m*m+n*n));r=0.0;o=-(m*q);p=0.0;m=n*q;break}else{z=+C(+((t*q+(m*u+v*n)+1.0)*2.0));r=(u*n-m*v)*(1.0/z);o=(m*t-q*u)*(1.0/z);p=z*.5;m=(q*v-t*n)*(1.0/z)}while(0);D=x*p+w*m-y*r;q=y*p+x*r-w*o;n=w*p+y*o-x*m;A=-(x*o)-y*m-w*r;x=-o;o=-m;w=-r;z=q*w+(p*D+A*x)-n*o;y=n*x+(p*q+A*o)-D*w;x=D*o+(A*w+p*n)-q*x;c[b+664>>2]=c[h>>2];c[b+664+4>>2]=c[h+4>>2];c[b+664+8>>2]=c[h+8>>2];c[b+664+12>>2]=c[h+12>>2];g[b+616>>2]=z;g[b+620>>2]=u*x-t*y;c[b+624>>2]=c[k>>2];g[b+628>>2]=0.0;g[b+632>>2]=y;g[b+636>>2]=t*z-v*x;c[b+640>>2]=c[k+4>>2];g[b+644>>2]=0.0;g[b+648>>2]=x;g[b+652>>2]=v*y-u*z;c[b+656>>2]=c[k+8>>2];g[b+660>>2]=0.0;g[b+732>>2]=l?-1.0:1.0;return}function se(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!((a|0)!=0&(b|0)!=0))return;c[6472]=(c[6472]|0)+1;e=ic(1043)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}c[e>>2]=a;c[e+4>>2]=b;k=e;f=e;h=e;r=1;b=128;n=e;i=128;e=124;while(1){o=r+-1|0;p=c[n+(o<<3)>>2]|0;q=c[n+(o<<3)+4>>2]|0;if((o|0)>(e|0)){j=i<<1;do if((i|0)<(j|0)&(b|0)<(j|0)){if(i){c[6472]=(c[6472]|0)+1;e=ic((i<<4|3)+16|0)|0;if(!e)a=0;else{c[(e+4+15&-16)+-4>>2]=e;a=e+4+15&-16}if((i|0)>0){e=0;do{h=n+(e<<3)|0;l=c[h+4>>2]|0;m=a+(e<<3)|0;c[m>>2]=c[h>>2];c[m+4>>2]=l;e=e+1|0}while((e|0)!=(i|0));e=a}else{e=a;s=12}}else{e=0;a=0;s=12}if((s|0)==12){s=0;if(!n){f=e;h=e;b=j;break}}if(!k){f=e;h=e;b=j}else{c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);f=e;h=e;b=j}}else{e=k;a=n}while(0);m=f;k=e;l=b;i=j;j=j+-4|0}else{m=f;l=b;a=n;j=e}do if((p|0)==(q|0))if(!(c[p+40>>2]|0))e=o;else{e=c[p+36>>2]|0;c[a+(o<<3)>>2]=e;c[a+(o<<3)+4>>2]=e;e=r+1|0;q=c[p+40>>2]|0;c[a+(r<<3)>>2]=q;c[a+(r<<3)+4>>2]=q;q=c[p+40>>2]|0;c[a+(e<<3)>>2]=c[p+36>>2];c[a+(e<<3)+4>>2]=q;e=r+2|0}else if(((((+g[p>>2]<=+g[q+16>>2]?+g[p+16>>2]>=+g[q>>2]:0)?+g[p+4>>2]<=+g[q+20>>2]:0)?+g[p+20>>2]>=+g[q+4>>2]:0)?+g[p+8>>2]<=+g[q+24>>2]:0)?+g[p+24>>2]>=+g[q+8>>2]:0){f=(c[q+40>>2]|0)!=0;if(!(c[p+40>>2]|0))if(f){e=c[q+36>>2]|0;c[a+(o<<3)>>2]=p;c[a+(o<<3)+4>>2]=e;e=c[q+40>>2]|0;c[a+(r<<3)>>2]=p;c[a+(r<<3)+4>>2]=e;e=r+1|0;break}else{Kb[c[(c[d>>2]|0)+8>>2]&127](d,p,q);e=o;break}else{b=a+(o<<3)|0;e=c[p+36>>2]|0;if(f){n=c[q+36>>2]|0;c[b>>2]=e;c[a+(o<<3)+4>>2]=n;o=r+1|0;e=c[q+36>>2]|0;c[a+(r<<3)>>2]=c[p+40>>2];c[a+(r<<3)+4>>2]=e;e=r+2|0;n=c[q+40>>2]|0;c[a+(o<<3)>>2]=c[p+36>>2];c[a+(o<<3)+4>>2]=n;q=c[q+40>>2]|0;c[a+(e<<3)>>2]=c[p+40>>2];c[a+(e<<3)+4>>2]=q;e=r+3|0;break}else{c[b>>2]=e;c[a+(o<<3)+4>>2]=q;c[a+(r<<3)>>2]=c[p+40>>2];c[a+(r<<3)+4>>2]=q;e=r+1|0;break}}}else e=o;while(0);if(!e)break;else{f=m;r=e;b=l;n=a;e=j}}if((a|0)==0|(m|0)==0)return;c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);return}function te(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0.0,I=0.0,J=0.0;d=l;l=l+96|0;k=+g[b>>2];m=+g[a+28>>2];x=+g[b+4>>2];y=+g[a+32>>2];z=+g[b+8>>2];A=+g[a+36>>2];B=+g[a+44>>2];D=+g[a+48>>2];E=+g[a+52>>2];F=+g[a+60>>2];n=+g[a+64>>2];o=+g[a+68>>2];p=+g[a+76>>2];q=+g[a+80>>2];r=+g[a+84>>2];g[d+80>>2]=k*m+x*y+z*A+p;g[d+80+4>>2]=k*B+x*D+z*E+q;g[d+80+8>>2]=k*F+x*n+z*o+r;g[d+80+12>>2]=0.0;s=+g[b+16>>2];t=+g[b+20>>2];u=+g[b+24>>2];g[d+64>>2]=s*m+t*y+u*A+p;g[d+64+4>>2]=s*B+t*D+u*E+q;g[d+64+8>>2]=s*F+t*n+u*o+r;g[d+64+12>>2]=0.0;v=+g[b+32>>2];w=+g[b+36>>2];f=+g[b+40>>2];g[d+48>>2]=v*m+w*y+f*A+p;g[d+48+4>>2]=v*B+w*D+f*E+q;g[d+48+8>>2]=v*F+w*n+f*o+r;g[d+48+12>>2]=0.0;h=(k*m+x*y+z*A+p+(s*m+t*y+u*A+p)+(v*m+w*y+f*A+p))*.3333333432674408;i=(k*B+x*D+z*E+q+(s*B+t*D+u*E+q)+(v*B+w*D+f*E+q))*.3333333432674408;j=(k*F+x*n+z*o+r+(s*F+t*n+u*o+r)+(v*F+w*n+f*o+r))*.3333333432674408;g[d+32>>2]=h;g[d+32+4>>2]=i;g[d+32+8>>2]=j;g[d+32+12>>2]=0.0;b=c[a+8>>2]|0;if(!((qb[c[(c[b>>2]|0)+48>>2]&127](b)|0)&16384)){e=c[a+8>>2]|0;G=c[e>>2]|0;G=G+8|0;G=c[G>>2]|0;b=a+12|0;Nb[G&127](e,d+80|0,d+64|0,b);e=c[a+8>>2]|0;G=c[e>>2]|0;G=G+8|0;G=c[G>>2]|0;Nb[G&127](e,d+64|0,d+48|0,b);a=c[a+8>>2]|0;e=c[a>>2]|0;e=e+8|0;e=c[e>>2]|0;Nb[e&127](a,d+48|0,d+80|0,b);l=d;return}J=+g[d+80>>2];I=s*B+t*D+u*E+q-(k*B+x*D+z*E+q);H=s*F+t*n+u*o+r-(k*F+x*n+z*o+r);B=v*B+w*D+f*E+q-(k*B+x*D+z*E+q);z=v*F+w*n+f*o+r-(k*F+x*n+z*o+r);D=H*(v*m+w*y+f*A+p-J)-(s*m+t*y+u*A+p-J)*z;F=(s*m+t*y+u*A+p-J)*B-I*(v*m+w*y+f*A+p-J);E=1.0/+C(+(F*F+((I*z-H*B)*(I*z-H*B)+D*D)));c[d+16>>2]=1065353216;c[d+16+4>>2]=1065353216;c[d+16+8>>2]=0;g[d+16+12>>2]=0.0;b=c[a+8>>2]|0;e=c[(c[b>>2]|0)+8>>2]|0;g[d>>2]=E*(I*z-H*B)+h;g[d+4>>2]=E*D+i;g[d+8>>2]=E*F+j;g[d+12>>2]=0.0;Nb[e&127](b,d+32|0,d,d+16|0);b=c[a+8>>2]|0;e=c[b>>2]|0;e=e+8|0;e=c[e>>2]|0;G=a+12|0;Nb[e&127](b,d+80|0,d+64|0,G);b=c[a+8>>2]|0;e=c[b>>2]|0;e=e+8|0;e=c[e>>2]|0;Nb[e&127](b,d+64|0,d+48|0,G);a=c[a+8>>2]|0;b=c[a>>2]|0;b=b+8|0;b=c[b>>2]|0;Nb[b&127](a,d+48|0,d+80|0,G);l=d;return}function ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0,i=0,j=0.0;a=l;l=l+144|0;switch(c[b+388>>2]&15){case 1:{c[a+112>>2]=3508;h=c[d+8>>2]|0;h=(c[h+236>>2]&2|0)==0?0:h;i=c[d+12>>2]|0;j=+g[i+48>>2];e=+g[i+52>>2];f=+g[i+56>>2];f=+C(+((j-j)*(j-j)+(e-e)*(e-e)+(f-f)*(f-f)));i=c[b+192>>2]|0;e=+gb[c[(c[i>>2]|0)+48>>2]&15](i);i=c[d+4>>2]|0;Nb[c[(c[i>>2]|0)+8>>2]&127](i,c[d+12>>2]|0,a+96|0,a+64|0);c[a>>2]=c[a+96>>2];c[a+4>>2]=c[a+96+4>>2];c[a+8>>2]=c[a+96+8>>2];c[a+12>>2]=c[a+96+12>>2];c[a+16>>2]=c[a+64>>2];c[a+16+4>>2]=c[a+64+4>>2];c[a+16+8>>2]=c[a+64+8>>2];c[a+16+12>>2]=c[a+64+12>>2];c[a+32>>2]=c[a>>2];c[a+32+4>>2]=c[a+4>>2];c[a+32+8>>2]=c[a+8>>2];c[a+32+12>>2]=c[a+12>>2];c[a+32+16>>2]=c[a+16>>2];c[a+32+20>>2]=c[a+20>>2];c[a+32+24>>2]=c[a+24>>2];c[a+32+28>>2]=c[a+28>>2];g[a+32>>2]=+g[a+32>>2]-e;g[a+32+4>>2]=+g[a+32+4>>2]-e;g[a+32+8>>2]=+g[a+32+8>>2]-e;g[a+32+16>>2]=e+ +g[a+32+16>>2];g[a+32+20>>2]=e+ +g[a+32+20>>2];g[a+32+24>>2]=e+ +g[a+32+24>>2];c[a+112+4>>2]=b;c[a+112+8>>2]=d;c[a+112+12>>2]=h;g[a+112+16>>2]=f+e;g[a+112+20>>2]=e;Ue(c[b+928>>2]|0,a+32|0,a+112|0);l=a;return}case 2:{g[a+4>>2]=1.0;c[a+8+4>>2]=0;c[a+8+4+4>>2]=0;c[a+8+4+8>>2]=0;c[a>>2]=3544;c[a+24>>2]=b;c[a+28>>2]=d;c[a+8>>2]=c[b+456>>2];i=c[d+4>>2]|0;j=+gb[c[(c[i>>2]|0)+48>>2]&15](i);i=c[b+192>>2]|0;j=j+ +gb[c[(c[i>>2]|0)+48>>2]&15](i);g[a+12>>2]=j;f=+g[(c[d+8>>2]|0)+224>>2];g[a+112>>2]=f;c[a+16>>2]=c[(+g[b+316>>2]>2];i=c[d+4>>2]|0;Nb[c[(c[i>>2]|0)+8>>2]&127](i,c[d+12>>2]|0,a+112|0,a+96|0);c[a+32>>2]=c[a+112>>2];c[a+32+4>>2]=c[a+112+4>>2];c[a+32+8>>2]=c[a+112+8>>2];c[a+32+12>>2]=c[a+112+12>>2];c[a+32+16>>2]=c[a+96>>2];c[a+32+16+4>>2]=c[a+96+4>>2];c[a+32+16+8>>2]=c[a+96+8>>2];c[a+32+16+12>>2]=c[a+96+12>>2];c[a+64>>2]=c[a+32>>2];c[a+64+4>>2]=c[a+32+4>>2];c[a+64+8>>2]=c[a+32+8>>2];c[a+64+12>>2]=c[a+32+12>>2];c[a+64+16>>2]=c[a+32+16>>2];c[a+64+20>>2]=c[a+32+20>>2];c[a+64+24>>2]=c[a+32+24>>2];c[a+64+28>>2]=c[a+32+28>>2];g[a+64>>2]=+g[a+64>>2]-j;g[a+64+4>>2]=+g[a+64+4>>2]-j;g[a+64+8>>2]=+g[a+64+8>>2]-j;g[a+64+16>>2]=j+ +g[a+64+16>>2];g[a+64+20>>2]=j+ +g[a+64+20>>2];g[a+64+24>>2]=j+ +g[a+64+24>>2];Ue(c[b+1048>>2]|0,a+64|0,a);l=a;return}default:{l=a;return}}}function ve(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;c[b+4>>2]=6;c[b+8>>2]=-1;c[b+12>>2]=-1;g[b+16>>2]=3402823466385288598117041.0e14;a[b+20>>0]=1;a[b+21>>0]=0;c[b+24>>2]=-1;c[b+28>>2]=d;c[b+32>>2]=e;g[b+36>>2]=0.0;g[b+40>>2]=.30000001192092896;c[b+44>>2]=0;c[b>>2]=4624;c[b+48>>2]=c[f>>2];c[b+48+4>>2]=c[f+4>>2];c[b+48+8>>2]=c[f+8>>2];c[b+48+12>>2]=c[f+12>>2];c[b+64>>2]=c[f+16>>2];c[b+64+4>>2]=c[f+16+4>>2];c[b+64+8>>2]=c[f+16+8>>2];c[b+64+12>>2]=c[f+16+12>>2];c[b+80>>2]=c[f+32>>2];c[b+80+4>>2]=c[f+32+4>>2];c[b+80+8>>2]=c[f+32+8>>2];c[b+80+12>>2]=c[f+32+12>>2];c[b+96>>2]=c[f+48>>2];c[b+96+4>>2]=c[f+48+4>>2];c[b+96+8>>2]=c[f+48+8>>2];c[b+96+12>>2]=c[f+48+12>>2];c[b+112>>2]=c[h>>2];c[b+112+4>>2]=c[h+4>>2];c[b+112+8>>2]=c[h+8>>2];c[b+112+12>>2]=c[h+12>>2];c[b+128>>2]=c[h+16>>2];c[b+128+4>>2]=c[h+16+4>>2];c[b+128+8>>2]=c[h+16+8>>2];c[b+128+12>>2]=c[h+16+12>>2];c[b+144>>2]=c[h+32>>2];c[b+144+4>>2]=c[h+32+4>>2];c[b+144+8>>2]=c[h+32+8>>2];c[b+144+12>>2]=c[h+32+12>>2];c[b+160>>2]=c[h+48>>2];c[b+160+4>>2]=c[h+48+4>>2];c[b+160+8>>2]=c[h+48+8>>2];c[b+160+12>>2]=c[h+48+12>>2];f=b+680|0;h=f+48|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));c[b+740>>2]=0;c[b+740+4>>2]=0;c[b+740+8>>2]=0;c[b+740+12>>2]=0;c[b+756>>2]=1045220557;c[b+760>>2]=1045220557;c[b+764>>2]=1045220557;c[b+768>>2]=0;c[b+768+4>>2]=0;c[b+768+8>>2]=0;c[b+768+12>>2]=0;c[b+768+16>>2]=0;g[b+728>>2]=.699999988079071;g[b+732>>2]=1.0;g[b+736>>2]=.5;a[b+788>>0]=0;g[b+792>>2]=0.0;g[b+808>>2]=0.0;a[b+789>>0]=0;g[b+796>>2]=0.0;g[b+812>>2]=0.0;a[b+790>>0]=0;g[b+800>>2]=0.0;g[b+816>>2]=0.0;g[b+928>>2]=0.0;g[b+876>>2]=0.0;g[b+880>>2]=.10000000149011612;g[b+884>>2]=300.0;g[b+868>>2]=1.0;g[b+872>>2]=-1.0;g[b+896>>2]=0.0;g[b+900>>2]=.20000000298023224;g[b+904>>2]=0.0;g[b+908>>2]=0.0;g[b+888>>2]=1.0;g[b+892>>2]=.5;c[b+924>>2]=0;g[b+916>>2]=0.0;a[b+912>>0]=0;g[b+992>>2]=0.0;g[b+940>>2]=0.0;g[b+944>>2]=.10000000149011612;g[b+948>>2]=300.0;g[b+932>>2]=1.0;g[b+936>>2]=-1.0;g[b+960>>2]=0.0;g[b+964>>2]=.20000000298023224;g[b+968>>2]=0.0;g[b+972>>2]=0.0;g[b+952>>2]=1.0;g[b+956>>2]=.5;c[b+988>>2]=0;g[b+980>>2]=0.0;a[b+976>>0]=0;g[b+1056>>2]=0.0;g[b+1004>>2]=0.0;g[b+1008>>2]=.10000000149011612;g[b+1012>>2]=300.0;g[b+996>>2]=1.0;g[b+1e3>>2]=-1.0;g[b+1024>>2]=0.0;g[b+1028>>2]=.20000000298023224;g[b+1032>>2]=0.0;g[b+1036>>2]=0.0;g[b+1016>>2]=1.0;g[b+1020>>2]=.5;c[b+1052>>2]=0;g[b+1044>>2]=0.0;a[b+1040>>0]=0;a[b+1300>>0]=i&1;a[b+1301>>0]=1;c[b+1304>>2]=0;a[b+1308>>0]=0;bd(b,(c[b+28>>2]|0)+4|0,(c[b+32>>2]|0)+4|0);return}function we(a,b,d){a=a|0;b=b|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0,m=0;if(!b)b=0;else b=(c[b+236>>2]&2|0)==0?0:b;c[a+64>>2]=0;c[a+64+4>>2]=0;c[a+64+8>>2]=0;c[a+64+12>>2]=0;c[a+64+16>>2]=0;c[a+64+20>>2]=0;c[a+64+24>>2]=0;c[a+64+28>>2]=0;c[a+144>>2]=0;c[a+144+4>>2]=0;c[a+144+8>>2]=0;c[a+144+12>>2]=0;c[a+144+16>>2]=0;c[a+144+20>>2]=0;c[a+144+24>>2]=0;c[a+144+28>>2]=0;if(!b){c[a>>2]=1065353216;c[a+4>>2]=0;c[a+4+4>>2]=0;c[a+4+8>>2]=0;c[a+4+12>>2]=0;c[a+20>>2]=1065353216;c[a+24>>2]=0;c[a+24+4>>2]=0;c[a+24+8>>2]=0;c[a+24+12>>2]=0;c[a+40>>2]=1065353216;c[a+44>>2]=0;c[a+44+4>>2]=0;c[a+44+8>>2]=0;c[a+44+12>>2]=0;c[a+44+16>>2]=0;c[a+240>>2]=0;c[a+128>>2]=0;c[a+128+4>>2]=0;c[a+128+8>>2]=0;c[a+128+12>>2]=0;c[a+96>>2]=1065353216;c[a+100>>2]=1065353216;c[a+104>>2]=1065353216;g[a+108>>2]=0.0;c[a+112>>2]=1065353216;c[a+116>>2]=1065353216;c[a+120>>2]=1065353216;g[a+124>>2]=0.0;b=a+176|0;e=b+60|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));a=a+236|0;g[a>>2]=0.0;return}else{e=b+4|0;c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];e=b+20|0;c[a+16>>2]=c[e>>2];c[a+16+4>>2]=c[e+4>>2];c[a+16+8>>2]=c[e+8>>2];c[a+16+12>>2]=c[e+12>>2];e=b+36|0;c[a+32>>2]=c[e>>2];c[a+32+4>>2]=c[e+4>>2];c[a+32+8>>2]=c[e+8>>2];c[a+32+12>>2]=c[e+12>>2];e=b+52|0;c[a+48>>2]=c[e>>2];c[a+48+4>>2]=c[e+4>>2];c[a+48+8>>2]=c[e+8>>2];c[a+48+12>>2]=c[e+12>>2];e=b+344|0;k=+g[e>>2];l=b+348|0;j=k*+g[b+352>>2];i=k*+g[b+356>>2];g[a+128>>2]=k*+g[l>>2];g[a+132>>2]=j;g[a+136>>2]=i;g[a+140>>2]=0.0;c[a+240>>2]=b;m=b+544|0;c[a+96>>2]=c[m>>2];c[a+96+4>>2]=c[m+4>>2];c[a+96+8>>2]=c[m+8>>2];c[a+96+12>>2]=c[m+12>>2];c[a+112>>2]=c[l>>2];c[a+112+4>>2]=c[l+4>>2];c[a+112+8>>2]=c[l+8>>2];c[a+112+12>>2]=c[l+12>>2];l=b+312|0;c[a+176>>2]=c[l>>2];c[a+176+4>>2]=c[l+4>>2];c[a+176+8>>2]=c[l+8>>2];c[a+176+12>>2]=c[l+12>>2];l=b+328|0;c[a+192>>2]=c[l>>2];c[a+192+4>>2]=c[l+4>>2];c[a+192+8>>2]=c[l+8>>2];c[a+192+12>>2]=c[l+12>>2];i=+g[e>>2];j=i*+g[b+416>>2]*d;k=i*+g[b+420>>2]*d;g[a+208>>2]=i*+g[b+412>>2]*d;g[a+212>>2]=j;g[a+216>>2]=k;g[a+220>>2]=0.0;k=+g[b+428>>2];j=+g[b+432>>2];i=+g[b+436>>2];h=(k*+g[b+268>>2]+j*+g[b+284>>2]+i*+g[b+300>>2])*d;f=(k*+g[b+272>>2]+j*+g[b+288>>2]+i*+g[b+304>>2])*d;g[a+224>>2]=(+g[b+264>>2]*k+ +g[b+280>>2]*j+ +g[b+296>>2]*i)*d;g[a+228>>2]=h;g[a+232>>2]=f;a=a+236|0;g[a>>2]=0.0;return}}function xe(a,e,f){a=a|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;c[e+16>>2]=c[a+20>>2];c[e+20>>2]=c[a+24>>2];c[e+24>>2]=c[a+28>>2];c[e+28>>2]=c[a+32>>2];c[e>>2]=c[a+4>>2];c[e+4>>2]=c[a+8>>2];c[e+8>>2]=c[a+12>>2];c[e+12>>2]=c[a+16>>2];c[e+32>>2]=c[a+36>>2];c[e+36>>2]=c[a+40>>2];c[e+40>>2]=c[a+44>>2];c[e+44>>2]=c[a+48>>2];c[e+48>>2]=c[a+56>>2];c[e+52>>2]=d[a+60>>0];k=c[a+88>>2]|0;c[e+56>>2]=k;if(k){k=sb[c[(c[f>>2]|0)+28>>2]&31](f,c[a+96>>2]|0)|0;c[e+64>>2]=k;if(k|0){h=c[a+88>>2]|0;k=ub[c[(c[f>>2]|0)+16>>2]&63](f,48,h)|0;if((h|0)>0){g=c[a+96>>2]|0;i=0;j=c[k+8>>2]|0;while(1){c[j+16>>2]=c[g+(i<<6)+16>>2];c[j+20>>2]=c[g+(i<<6)+20>>2];c[j+24>>2]=c[g+(i<<6)+24>>2];c[j+28>>2]=c[g+(i<<6)+28>>2];c[j>>2]=c[g+(i<<6)>>2];c[j+4>>2]=c[g+(i<<6)+4>>2];c[j+8>>2]=c[g+(i<<6)+8>>2];c[j+12>>2]=c[g+(i<<6)+12>>2];c[j+32>>2]=c[g+(i<<6)+32>>2];c[j+36>>2]=c[g+(i<<6)+36>>2];c[j+40>>2]=c[g+(i<<6)+40>>2];i=i+1|0;if((i|0)==(h|0))break;else j=j+48|0}}else g=c[a+96>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,k,18648,1497453121,g)}}else c[e+64>>2]=0;k=c[a+128>>2]|0;c[e+60>>2]=k;if(k){k=sb[c[(c[f>>2]|0)+28>>2]&31](f,c[a+136>>2]|0)|0;c[e+68>>2]=k;if(k|0){h=c[a+128>>2]|0;k=ub[c[(c[f>>2]|0)+16>>2]&63](f,16,h)|0;if((h|0)>0){g=c[a+136>>2]|0;i=0;j=c[k+8>>2]|0;while(1){c[j+12>>2]=c[g+(i<<4)+12>>2];b[j+6>>1]=b[g+(i<<4)+6>>1]|0;b[j+8>>1]=b[g+(i<<4)+8>>1]|0;b[j+10>>1]=b[g+(i<<4)+10>>1]|0;b[j>>1]=b[g+(i<<4)>>1]|0;b[j+2>>1]=b[g+(i<<4)+2>>1]|0;b[j+4>>1]=b[g+(i<<4)+4>>1]|0;i=i+1|0;if((i|0)==(h|0))break;else j=j+16|0}}else g=c[a+136>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,k,18671,1497453121,g)}}else c[e+68>>2]=0;c[e+76>>2]=c[a+144>>2];k=c[a+152>>2]|0;c[e+80>>2]=k;if(!k){c[e+72>>2]=0;return 18715}k=sb[c[(c[f>>2]|0)+28>>2]&31](f,c[a+160>>2]|0)|0;c[e+72>>2]=k;if(!k)return 18715;j=c[a+152>>2]|0;k=ub[c[(c[f>>2]|0)+16>>2]&63](f,20,j)|0;if((j|0)>0){g=c[a+160>>2]|0;h=0;i=c[k+8>>2]|0;while(1){b[i+14>>1]=b[g+(h<<5)+6>>1]|0;b[i+16>>1]=b[g+(h<<5)+8>>1]|0;b[i+18>>1]=b[g+(h<<5)+10>>1]|0;b[i+8>>1]=b[g+(h<<5)>>1]|0;b[i+10>>1]=b[g+(h<<5)+2>>1]|0;b[i+12>>1]=b[g+(h<<5)+4>>1]|0;c[i>>2]=c[g+(h<<5)+12>>2];c[i+4>>2]=c[g+(h<<5)+16>>2];h=h+1|0;if((h|0)==(j|0))break;else i=i+20|0}}else g=c[a+160>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,k,18694,1497453121,g);return 18715}function ye(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0;M=l;l=l+64|0;c[M+48>>2]=a;c[M+48+4>>2]=b;c[M+48+8>>2]=d;z=+g[a>>2];A=+g[b>>2];B=+g[a+4>>2];D=+g[b+4>>2];E=+g[a+8>>2];F=+g[b+8>>2];g[M>>2]=z-A;g[M+4>>2]=B-D;g[M+8>>2]=E-F;g[M+12>>2]=0.0;G=+g[d>>2];H=+g[d+4>>2];I=+g[d+8>>2];g[M+16>>2]=A-G;g[M+20>>2]=D-H;g[M+24>>2]=F-I;g[M+28>>2]=0.0;g[M+32>>2]=G-z;g[M+36>>2]=H-B;g[M+40>>2]=I-E;g[M+44>>2]=0.0;J=(B-D)*(F-I)-(E-F)*(D-H);K=(E-F)*(A-G)-(F-I)*(z-A);L=(D-H)*(z-A)-(B-D)*(A-G);if(L*L+(J*J+K*K)>0.0){o=B-D;p=E-F;q=z-A;v=z;w=B;x=E;k=0;y=-1.0;n=0;h=0;i=0}else{L=-1.0;l=M;return +L}while(1){if(v*(L*o-K*p)+w*(J*p-L*q)+(K*q-J*o)*x>0.0){u=c[5168+(k<<2)>>2]|0;N=c[M+48+(u<<2)>>2]|0;m=+g[N>>2];r=m-v;p=+g[N+4>>2];t=p-w;q=+g[N+8>>2];s=q-x;do if(r*r+t*t+s*s>0.0){o=-(v*r+w*t+x*s)/(r*r+t*t+s*s);if(o>=1.0){m=m*m+p*p+q*q;n=2;h=0;i=1065353216;break}if(!(o<=0.0)){i=(g[j>>2]=o,c[j>>2]|0);v=v+r*o;m=w+t*o;x=x+s*o;m=x*x+(v*v+m*m);n=3;h=(g[j>>2]=1.0-o,c[j>>2]|0);break}else{m=v*v+w*w+x*x;n=1;h=1065353216;i=0;break}}else m=-1.0;while(0);if(y<0.0|m>2]=(n&1|0?1<>2]=h;c[e+(u<<2)>>2]=i;g[e+(c[5168+(u<<2)>>2]<<2)>>2]=0.0}else m=y}else m=y;k=k+1|0;if((k|0)==3)break;N=c[M+48+(k<<2)>>2]|0;o=+g[M+(k<<4)+4>>2];p=+g[M+(k<<4)+8>>2];q=+g[M+(k<<4)>>2];v=+g[N>>2];w=+g[N+4>>2];x=+g[N+8>>2];y=m}if(!(m<0.0)){L=m;l=M;return +L}x=+C(+(L*L+(J*J+K*K)));y=(J*+g[a>>2]+K*+g[a+4>>2]+L*+g[a+8>>2])/(L*L+(J*J+K*K));c[f>>2]=7;v=+g[b>>2]-J*y;t=+g[b+4>>2]-K*y;w=+g[b+8>>2]-L*y;F=+C(+((t*(A-G)-v*(D-H))*(t*(A-G)-v*(D-H))+(((D-H)*w-t*(F-I))*((D-H)*w-t*(F-I))+(v*(F-I)-w*(A-G))*(v*(F-I)-w*(A-G)))))/x;g[e>>2]=F;A=+g[d>>2]-J*y;w=+g[d+4>>2]-K*y;D=+g[d+8>>2]-L*y;I=+C(+((w*(G-z)-A*(H-B))*(w*(G-z)-A*(H-B))+(((H-B)*D-w*(I-E))*((H-B)*D-w*(I-E))+(A*(I-E)-D*(G-z))*(A*(I-E)-D*(G-z)))))/x;g[e+4>>2]=I;g[e+8>>2]=1.0-(I+F);L=L*y*L*y+(J*y*J*y+K*y*K*y);l=M;return +L}function ze(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0,J=0;J=l;l=l+32|0;if(!a){l=J;return}F=+g[d>>2]-+g[b>>2];G=+g[d+4>>2]-+g[b+4>>2];A=+g[d+8>>2]-+g[b+8>>2];z=1.0/+C(+(F*F+G*G+A*A));w=F*z==0.0?999999984306749440.0:1.0/(F*z);x=G*z==0.0?999999984306749440.0:1.0/(G*z);y=A*z==0.0?999999984306749440.0:1.0/(A*z);c[6472]=(c[6472]|0)+1;d=ic(531)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}Nk(d+4|0,0,508)|0;c[d>>2]=a;k=d;o=d;q=d;v=1;r=128;u=d;n=128;m=126;while(1){p=v+-1|0;t=c[u+(p<<2)>>2]|0;c[J>>2]=c[t>>2];c[J+4>>2]=c[t+4>>2];c[J+8>>2]=c[t+8>>2];c[J+12>>2]=c[t+12>>2];c[J+16>>2]=c[t+16>>2];c[J+16+4>>2]=c[t+16+4>>2];c[J+16+8>>2]=c[t+16+8>>2];c[J+16+12>>2]=c[t+16+12>>2];h=+g[b>>2];f=w*(+g[J+((w<0.0&1)<<4)>>2]-h);h=w*(+g[J+((w<0.0^1)<<4)>>2]-h);j=+g[b+4>>2];i=x*(+g[J+((x<0.0&1)<<4)+4>>2]-j);j=x*(+g[J+((x<0.0^1)<<4)+4>>2]-j);do if((!(i>h|f>j)?(B=i>f?i:f,H=j>2],D=y*(+g[J+((y<0.0&1)<<4)+8>>2]-E),E=y*(+g[J+((y<0.0^1)<<4)+8>>2]-E),!(D>H|B>E)):0)?((E0.0?(D>B?D:B)>2]|0)){Gb[c[(c[e>>2]|0)+12>>2]&127](e,t);d=r;a=u;break}if((p|0)>(m|0)){s=n<<1;if((n|0)<(s|0)){do if((r|0)<(s|0)){if(n){c[6472]=(c[6472]|0)+1;d=ic((n<<3|3)+16|0)|0;if(!d)a=0;else{c[(d+4+15&-16)+-4>>2]=d;a=d+4+15&-16}if((n|0)>0){d=0;do{c[a+(d<<2)>>2]=c[u+(d<<2)>>2];d=d+1|0}while((d|0)!=(n|0));d=a}else{d=a;I=17}}else{d=0;a=0;I=17}if((I|0)==17){I=0;if(!u){o=d;m=d;k=d;d=s;break}}if(!k){o=d;m=d;k=d;d=s}else{c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);o=d;m=d;k=d;d=s}}else{m=q;d=r;a=u}while(0);Nk(a+(n<<2)|0,0,n<<2|0)|0;n=o}else{n=o;m=q;d=r;a=u}o=n;q=m;n=s;m=s+-2|0}else{d=r;a=u}c[a+(p<<2)>>2]=c[t+36>>2];c[a+(v<<2)>>2]=c[t+40>>2];p=v+1|0}else{d=r;a=u}while(0);if(!p)break;else{v=p;r=d;u=a}}if((a|0)==0|(o|0)==0){l=J;return}c[6473]=(c[6473]|0)+1;nd(c[o+-4>>2]|0);l=J;return}function Ae(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,l=0,m=0;if(a[b+1308>>0]|0){c[d>>2]=0;c[d+4>>2]=0;return}bd(b,(c[b+28>>2]|0)+4|0,(c[b+32>>2]|0)+4|0);c[d>>2]=0;c[d+4>>2]=6;if((c[b+856>>2]|0)==0?(a[b+788>>0]|0)==0:0){e=0;f=6}else{c[d>>2]=1;c[d+4>>2]=5;e=1;f=5}if(!((c[b+860>>2]|0)==0?(a[b+789>>0]|0)==0:0)){e=e+1|0;c[d>>2]=e;f=f+-1|0;c[d+4>>2]=f}if(!((c[b+864>>2]|0)==0?(a[b+790>>0]|0)==0:0)){e=e+1|0;c[d>>2]=e;f=f+-1|0;c[d+4>>2]=f}i=+g[b+868>>2];j=+g[b+872>>2];k=+Lj(+g[b+1192>>2],i,j);g[b+920>>2]=k;do if(!(i>j)){if(i>k){c[b+924>>2]=1;g[b+916>>2]=k-i;if(k-i>3.1415927410125732){g[b+916>>2]=k-i+-6.2831854820251465;l=7;break}if(!(k-i<-3.1415927410125732)){l=7;break}g[b+916>>2]=k-i+6.2831854820251465;l=7;break}if(j>2]=2;g[b+916>>2]=k-j;if(k-j>3.1415927410125732){g[b+916>>2]=k-j+-6.2831854820251465;l=7;break}if(k-j<-3.1415927410125732){g[b+916>>2]=k-j+6.2831854820251465;l=7}else l=7}else{h=b+924|0;l=54}}else{h=b+924|0;l=54}while(0);if((l|0)==54){c[h>>2]=0;if(a[b+912>>0]|0)l=7}if((l|0)==7){e=e+1|0;c[d>>2]=e;f=f+-1|0;c[d+4>>2]=f}i=+g[b+932>>2];j=+g[b+936>>2];k=+Lj(+g[b+1196>>2],i,j);g[b+984>>2]=k;do if(!(i>j)){if(i>k){c[b+988>>2]=1;g[b+980>>2]=k-i;if(k-i>3.1415927410125732){g[b+980>>2]=k-i+-6.2831854820251465;l=22;break}if(!(k-i<-3.1415927410125732)){l=22;break}g[b+980>>2]=k-i+6.2831854820251465;l=22;break}if(j>2]=2;g[b+980>>2]=k-j;if(k-j>3.1415927410125732){g[b+980>>2]=k-j+-6.2831854820251465;l=22;break}if(k-j<-3.1415927410125732){g[b+980>>2]=k-j+6.2831854820251465;l=22}else l=22}else{h=b+988|0;l=20}}else{h=b+988|0;l=20}while(0);if((l|0)==20){c[h>>2]=0;if(a[b+976>>0]|0)l=22}if((l|0)==22){e=e+1|0;c[d>>2]=e;f=f+-1|0;c[d+4>>2]=f}i=+g[b+996>>2];j=+g[b+1e3>>2];k=+Lj(+g[b+1200>>2],i,j);g[b+1048>>2]=k;do if(!(i>j)){if(i>k){c[b+1052>>2]=1;g[b+1044>>2]=k-i;if(k-i>3.1415927410125732){g[b+1044>>2]=k-i+-6.2831854820251465;break}if(!(k-i<-3.1415927410125732))break;g[b+1044>>2]=k-i+6.2831854820251465;break}if(j>2]=2;g[b+1044>>2]=k-j;if(k-j>3.1415927410125732){g[b+1044>>2]=k-j+-6.2831854820251465;break}if(k-j<-3.1415927410125732)g[b+1044>>2]=k-j+6.2831854820251465}else{m=b+1052|0;l=35}}else{m=b+1052|0;l=35}while(0);if((l|0)==35?(c[m>>2]=0,(a[b+1040>>0]|0)==0):0)return;c[d>>2]=e+1;c[d+4>>2]=f+-1;return}function Be(a){a=a|0;var b=0,d=0,e=0,f=0,h=0,i=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;d=l;l=l+144|0;g[a+36>>2]=0.0;c[d+128>>2]=0;c[d+128+4>>2]=0;c[d+128+8>>2]=0;c[d+128+12>>2]=0;b=0;do{e=d+128+(b<<2)|0;g[e>>2]=1.0;A=c[a+28>>2]|0;I=c[A+4>>2]|0;c[d+80>>2]=I;F=c[A+20>>2]|0;c[d+80+4>>2]=F;C=c[A+36>>2]|0;c[d+80+8>>2]=C;g[d+80+12>>2]=0.0;H=c[A+8>>2]|0;c[d+80+16>>2]=H;E=c[A+24>>2]|0;c[d+80+20>>2]=E;B=c[A+40>>2]|0;c[d+80+24>>2]=B;g[d+80+28>>2]=0.0;G=c[A+12>>2]|0;c[d+80+32>>2]=G;D=c[A+28>>2]|0;c[d+80+36>>2]=D;z=c[A+44>>2]|0;c[d+80+40>>2]=z;g[d+80+44>>2]=0.0;f=c[a+32>>2]|0;y=c[f+4>>2]|0;c[d+32>>2]=y;v=c[f+20>>2]|0;c[d+32+4>>2]=v;s=c[f+36>>2]|0;c[d+32+8>>2]=s;g[d+32+12>>2]=0.0;x=c[f+8>>2]|0;c[d+32+16>>2]=x;u=c[f+24>>2]|0;c[d+32+20>>2]=u;r=c[f+40>>2]|0;c[d+32+24>>2]=r;g[d+32+28>>2]=0.0;w=c[f+12>>2]|0;c[d+32+32>>2]=w;t=c[f+28>>2]|0;c[d+32+36>>2]=t;h=c[f+44>>2]|0;c[d+32+40>>2]=h;g[d+32+44>>2]=0.0;p=+g[a+300>>2];m=p*(c[j>>2]=I,+g[j>>2]);i=+g[a+304>>2];m=m+i*(c[j>>2]=H,+g[j>>2]);k=+g[a+308>>2];m=m+k*(c[j>>2]=G,+g[j>>2]);q=p*(c[j>>2]=F,+g[j>>2]);q=q+i*(c[j>>2]=E,+g[j>>2]);q=q+k*(c[j>>2]=D,+g[j>>2]);p=p*(c[j>>2]=C,+g[j>>2]);i=p+i*(c[j>>2]=B,+g[j>>2]);p=+g[A+52>>2];o=+g[A+56>>2];n=+g[A+60>>2];n=i+k*(c[j>>2]=z,+g[j>>2])+n-n;g[d+16>>2]=m+p-p;g[d+16+4>>2]=q+o-o;g[d+16+8>>2]=n;g[d+16+12>>2]=0.0;n=+g[a+316>>2];o=n*(c[j>>2]=y,+g[j>>2]);q=+g[a+320>>2];o=o+q*(c[j>>2]=x,+g[j>>2]);p=+g[a+324>>2];o=o+p*(c[j>>2]=w,+g[j>>2]);m=n*(c[j>>2]=v,+g[j>>2]);m=m+q*(c[j>>2]=u,+g[j>>2]);m=m+p*(c[j>>2]=t,+g[j>>2]);n=n*(c[j>>2]=s,+g[j>>2]);q=n+q*(c[j>>2]=r,+g[j>>2]);n=+g[f+52>>2];k=+g[f+56>>2];i=+g[f+60>>2];i=q+p*(c[j>>2]=h,+g[j>>2])+i-i;g[d>>2]=o+n-n;g[d+4>>2]=m+k-k;g[d+8>>2]=i;g[d+12>>2]=0.0;h=c[a+28>>2]|0;f=c[a+32>>2]|0;Ag(a+48+(b*84|0)|0,d+80|0,d+32|0,d+16|0,d,d+128|0,h+396|0,+g[h+344>>2],f+396|0,+g[f+344>>2]);g[e>>2]=0.0;b=b+1|0}while((b|0)!=3);l=d;return}function Ce(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0;y=+g[a+452>>2];t=+g[a+304>>2];r=+g[a+300>>2];if(t>0.0|r>0.0)f=(c[a+288>>2]|0)<4;else f=0;E=c[a+720>>2]|0;B=+g[E+(d*104|0)+88>>2];if(!(B>0.0))return;o=c[c[a+684>>2]>>2]|0;if(!f)return;D=+g[E+(d*104|0)+40>>2];m=D-+g[b>>2];z=+g[E+(d*104|0)+44>>2];n=z-+g[b+4>>2];A=+g[E+(d*104|0)+48>>2];l=A-+g[b+8>>2];k=+C(+(m*m+n*n+l*l));if(!(m*m+n*n+l*l>1.1920928955078125e-07))return;u=m*(1.0/k);w=n*(1.0/k);x=l*(1.0/k);q=+g[E+(d*104|0)+72>>2];s=+g[E+(d*104|0)+76>>2];v=+g[E+(d*104|0)+80>>2];switch(c[a+288>>2]|0){case 2:{p=m*q+n*s+l*v<0.0?-1.0:1.0;h=x*v*p+(u*q*p+w*s*p);i=+g[E+(d*104|0)+92>>2]*.5;e=(c[j>>2]=o,+g[j>>2]);n=h*r*.5*e*(m*m+n*n+l*l)*i;if(h>0.0&h<.9847999811172485){k=t*.5*e*k*i*+C(+(1.0-h*h));l=(x*(u*v*p-x*q*p)-w*(w*q*p-u*s*p))*k;m=(u*(w*q*p-u*s*p)-x*(x*s*p-w*v*p))*k;k=(w*(x*s*p-w*v*p)-u*(u*v*p-x*q*p))*k}else{l=0.0;m=0.0;k=0.0}e=y*B*-(x*n)*y*B*-(x*n)+(B*-(u*n)*y*B*-(u*n)*y+y*B*-(w*n)*y*B*-(w*n));if(e>0.0?e>=D*D+z*z+A*A:0){e=+C(+(D*D+z*z+A*A))/+C(+e)*.800000011920929;i=e*-(u*n);h=e*-(x*n);e=e*-(w*n)}else{i=-(u*n);h=-(x*n);e=-(w*n)}B=e+ +g[E+(d*104|0)+60>>2];D=h+ +g[E+(d*104|0)+64>>2];g[E+(d*104|0)+56>>2]=l+(i+ +g[E+(d*104|0)+56>>2]);g[E+(d*104|0)+60>>2]=m+B;g[E+(d*104|0)+64>>2]=k+D;return}case 1:case 3:case 0:{e=m*q+n*s+l*v<0.0?-1.0:1.0;if(!(l*v*e+(m*q*e+n*s*e)>0.0))return;p=-((c[j>>2]=o,+g[j>>2])*(m*m+n*n+l*l)*(l*v*e+(m*q*e+n*s*e))*+g[E+(d*104|0)+92>>2]*.5);i=u*r*p+(q*e*t*p+0.0);h=w*r*p+(s*e*t*p+0.0);e=x*r*p+(v*e*t*p+0.0);if(y*B*e*y*B*e+(y*B*i*y*B*i+y*B*h*y*B*h)>D*D+z*z+A*A){x=1.0/+C(+(e*e+(i*i+h*h)));g[E+(d*104|0)+56>>2]=+g[E+(d*104|0)+56>>2]-1.0/(y*B)*i*x*(A*e*x+(D*i*x+z*h*x));g[E+(d*104|0)+60>>2]=+g[E+(d*104|0)+60>>2]-1.0/(y*B)*h*x*(A*e*x+(D*i*x+z*h*x));g[E+(d*104|0)+64>>2]=+g[E+(d*104|0)+64>>2]-1.0/(y*B)*e*x*(A*e*x+(D*i*x+z*h*x));return}else{g[E+(d*104|0)+56>>2]=i+ +g[E+(d*104|0)+56>>2];g[E+(d*104|0)+60>>2]=h+ +g[E+(d*104|0)+60>>2];g[E+(d*104|0)+64>>2]=e+ +g[E+(d*104|0)+64>>2];return}}default:return}}function De(a,b,d,e,f,h,i,j){a=a|0;b=b|0;d=d|0;e=+e;f=+f;h=+h;i=i|0;j=j|0;var k=0,m=0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0.0,x=0,y=0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0;V=l;l=l+32|0;R=+g[d>>2];T=+g[d+4>>2];S=+g[d+8>>2];r=+g[i>>2];s=+g[i+4>>2];t=+g[i+8>>2];w=+g[j>>2];o=+g[j+4>>2];q=+g[j+8>>2];K=1.0/+C(+((e-R)*(e-R)+(f-T)*(f-T)+(h-S)*(h-S)));H=(e-R)*K==0.0?999999984306749440.0:1.0/((e-R)*K);I=(f-T)*K==0.0?999999984306749440.0:1.0/((f-T)*K);J=(h-S)*K==0.0?999999984306749440.0:1.0/((h-S)*K);B=(R>e?e:R)+r;G=(T>f?f:T)+s;E=(S>h?h:S)+t;A=(R>2]|0;a:do if((m|0)>0){x=0;y=c[a+96>>2]|0;k=0;while(1){k=k+1|0;c[V>>2]=c[y>>2];c[V+4>>2]=c[y+4>>2];c[V+8>>2]=c[y+8>>2];c[V+12>>2]=c[y+12>>2];v=y+16|0;c[V+16>>2]=c[v>>2];c[V+16+4>>2]=c[v+4>>2];c[V+16+8>>2]=c[v+8>>2];c[V+16+12>>2]=c[v+12>>2];g[V>>2]=+g[V>>2]-w;g[V+4>>2]=+g[V+4>>2]-o;g[V+8>>2]=+g[V+8>>2]-q;g[V+16>>2]=+g[V+16>>2]-r;g[V+20>>2]=+g[V+20>>2]-s;g[V+24>>2]=+g[V+24>>2]-t;if(!(B>+g[v>>2])?!(A<+g[y>>2]):0)n=1;else n=0;if(!(!(E>+g[y+24>>2])?!(D<+g[y+8>>2]):0))n=0;if(((!(G>+g[y+20>>2])?!(F<+g[y+4>>2]|n^1):0)?(M=+g[d>>2],L=H*(+g[V+((H<0.0&1)<<4)>>2]-M),M=H*(+g[V+((H<0.0^1)<<4)>>2]-M),O=+g[d+4>>2],N=I*(+g[V+((I<0.0&1)<<4)+4>>2]-O),O=I*(+g[V+((I<0.0^1)<<4)+4>>2]-O),!(N>M|L>O)):0)?(z=N>L?N:L,U=O>2],P=J*(+g[V+((J<0.0&1)<<4)+8>>2]-Q),Q=J*(+g[V+((J<0.0^1)<<4)+8>>2]-Q),!(P>U|z>Q)):0){p=(Q0.0?(P>z?P:z)<(h-S)*(h-S)*K+((e-R)*(e-R)*K+(f-T)*(f-T)*K):0;n=c[y+32>>2]|0;if(p&(n|0)==-1){Kb[c[(c[b>>2]|0)+8>>2]&127](b,c[y+36>>2]|0,c[y+40>>2]|0);m=c[a+56>>2]|0;v=17}else{u=n;n=(n|0)==-1;v=16}}else{n=c[y+32>>2]|0;u=n;n=(n|0)==-1;p=0;v=16}if((v|0)==16){v=0;if(n|p)v=17;else{p=u+x|0;n=y+(u<<6)|0}}if((v|0)==17){p=x+1|0;n=y+64|0}if((p|0)>=(m|0))break a;o=+g[j+4>>2];q=+g[j+8>>2];r=+g[i>>2];s=+g[i+4>>2];t=+g[i+8>>2];w=+g[j>>2];x=p;y=n}}else k=0;while(0);if((c[6204]|0)>=(k|0)){l=V;return}c[6204]=k;l=V;return}function Ee(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0;if(!(c[a+204>>2]&2)){c[a+68>>2]=c[b>>2];c[a+68+4>>2]=c[b+4>>2];c[a+68+8>>2]=c[b+8>>2];c[a+68+12>>2]=c[b+12>>2];c[a+84>>2]=c[b+16>>2];c[a+84+4>>2]=c[b+16+4>>2];c[a+84+8>>2]=c[b+16+8>>2];c[a+84+12>>2]=c[b+16+12>>2];c[a+100>>2]=c[b+32>>2];c[a+100+4>>2]=c[b+32+4>>2];c[a+100+8>>2]=c[b+32+8>>2];c[a+100+12>>2]=c[b+32+12>>2];c[a+116>>2]=c[b+48>>2];c[a+116+4>>2]=c[b+48+4>>2];c[a+116+8>>2]=c[b+48+8>>2];c[a+116+12>>2]=c[b+48+12>>2];e=b;f=a+20|0;h=b+16|0;i=a+36|0;j=b+32|0;k=a+52|0;b=b+48|0;d=a+4|0}else{c[a+68>>2]=c[a+4>>2];c[a+68+4>>2]=c[a+4+4>>2];c[a+68+8>>2]=c[a+4+8>>2];c[a+68+12>>2]=c[a+4+12>>2];c[a+84>>2]=c[a+20>>2];c[a+84+4>>2]=c[a+20+4>>2];c[a+84+8>>2]=c[a+20+8>>2];c[a+84+12>>2]=c[a+20+12>>2];c[a+100>>2]=c[a+36>>2];c[a+100+4>>2]=c[a+36+4>>2];c[a+100+8>>2]=c[a+36+8>>2];c[a+100+12>>2]=c[a+36+12>>2];c[a+116>>2]=c[a+52>>2];c[a+116+4>>2]=c[a+52+4>>2];c[a+116+8>>2]=c[a+52+8>>2];c[a+116+12>>2]=c[a+52+12>>2];e=b;f=a+20|0;h=b+16|0;i=a+36|0;j=b+32|0;k=a+52|0;b=b+48|0;d=a+4|0}c[a+132>>2]=c[a+312>>2];c[a+132+4>>2]=c[a+312+4>>2];c[a+132+8>>2]=c[a+312+8>>2];c[a+132+12>>2]=c[a+312+12>>2];c[a+148>>2]=c[a+328>>2];c[a+148+4>>2]=c[a+328+4>>2];c[a+148+8>>2]=c[a+328+8>>2];c[a+148+12>>2]=c[a+328+12>>2];c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[i>>2]=c[j>>2];c[i+4>>2]=c[j+4>>2];c[i+8>>2]=c[j+8>>2];c[i+12>>2]=c[j+12>>2];c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];w=+g[a+4>>2];q=+g[a+396>>2];v=+g[a+8>>2];o=+g[a+400>>2];u=+g[a+12>>2];m=+g[a+404>>2];t=+g[a+20>>2];s=+g[a+24>>2];r=+g[a+28>>2];p=+g[a+36>>2];n=+g[a+40>>2];l=+g[a+44>>2];g[a+264>>2]=w*w*q+v*v*o+u*u*m;g[a+268>>2]=w*q*t+v*o*s+u*m*r;g[a+272>>2]=w*q*p+v*o*n+u*m*l;g[a+276>>2]=0.0;g[a+280>>2]=w*q*t+v*o*s+u*m*r;g[a+284>>2]=t*q*t+s*o*s+r*m*r;g[a+288>>2]=q*t*p+o*s*n+m*r*l;g[a+292>>2]=0.0;g[a+296>>2]=w*q*p+v*o*n+u*m*l;g[a+300>>2]=t*q*p+s*o*n+r*m*l;g[a+304>>2]=p*q*p+n*o*n+l*m*l;g[a+308>>2]=0.0;return}function Fe(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0;h=l;l=l+160|0;e=c[a+4>>2]|0;f=c[e+12>>2]|0;D=+g[f>>2];C=+g[f+4>>2];B=+g[f+8>>2];A=+g[f+16>>2];z=+g[f+20>>2];y=+g[f+24>>2];r=+g[f+32>>2];p=+g[f+36>>2];n=+g[f+40>>2];e=c[(c[e+4>>2]|0)+24>>2]|0;x=+g[e+(d*80|0)>>2];w=+g[e+(d*80|0)+16>>2];v=+g[e+(d*80|0)+32>>2];u=+g[e+(d*80|0)+4>>2];t=+g[e+(d*80|0)+20>>2];s=+g[e+(d*80|0)+36>>2];q=+g[e+(d*80|0)+8>>2];o=+g[e+(d*80|0)+24>>2];m=+g[e+(d*80|0)+40>>2];F=+g[e+(d*80|0)+48>>2];E=+g[e+(d*80|0)+52>>2];i=+g[e+(d*80|0)+56>>2];k=+g[f+48>>2]+(D*F+C*E+B*i);j=+g[f+52>>2]+(A*F+z*E+y*i);i=+g[f+56>>2]+(r*F+p*E+n*i);g[h+88>>2]=D*x+C*w+B*v;g[h+88+4>>2]=D*u+C*t+B*s;g[h+88+8>>2]=D*q+C*o+B*m;g[h+88+12>>2]=0.0;g[h+88+16>>2]=A*x+z*w+y*v;g[h+88+20>>2]=A*u+z*t+y*s;g[h+88+24>>2]=A*q+z*o+y*m;g[h+88+28>>2]=0.0;g[h+88+32>>2]=r*x+p*w+n*v;g[h+88+36>>2]=r*u+p*t+n*s;g[h+88+40>>2]=r*q+p*o+n*m;g[h+88+44>>2]=0.0;g[h+88+48>>2]=k;g[h+88+52>>2]=j;g[h+88+56>>2]=i;g[h+88+60>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,h+88|0,h+72|0,h+56|0);f=c[a+8>>2]|0;e=c[f+4>>2]|0;Nb[c[(c[e>>2]|0)+8>>2]&127](e,c[f+12>>2]|0,h+40|0,h+24|0);if(!(+g[h+72>>2]>+g[h+24>>2])?!(+g[h+56>>2]<+g[h+40>>2]):0)e=1;else e=0;if(!(!(+g[h+72+8>>2]>+g[h+24+8>>2])?!(+g[h+56+8>>2]<+g[h+40+8>>2]):0))e=0;if(+g[h+72+4>>2]>+g[h+24+4>>2]){l=h;return}if(+g[h+56+4>>2]<+g[h+40+4>>2]|e^1){l=h;return}e=c[a+4>>2]|0;f=c[e+8>>2]|0;c[h>>2]=e;c[h+4>>2]=b;c[h+8>>2]=f;c[h+12>>2]=h+88;c[h+16>>2]=-1;c[h+20>>2]=d;if(!(c[(c[a+24>>2]|0)+(d<<2)>>2]|0)){f=c[a+12>>2]|0;f=vb[c[(c[f>>2]|0)+8>>2]&31](f,h,c[a+8>>2]|0,c[a+28>>2]|0)|0;c[(c[a+24>>2]|0)+(d<<2)>>2]=f;f=c[a+4>>2]|0}else f=e;b=c[a+20>>2]|0;e=c[b+8>>2]|0;if((c[e+8>>2]|0)==(c[f+8>>2]|0)){c[b+8>>2]=h;Kb[c[(c[b>>2]|0)+8>>2]&127](b,-1,d)}else{e=c[b+12>>2]|0;c[b+12>>2]=h;Kb[c[(c[b>>2]|0)+12>>2]&127](b,-1,d)}d=c[(c[a+24>>2]|0)+(d<<2)>>2]|0;Rb[c[(c[d>>2]|0)+8>>2]&31](d,h,c[a+8>>2]|0,c[a+16>>2]|0,c[a+20>>2]|0);d=c[a+20>>2]|0;c[((c[(c[d+8>>2]|0)+8>>2]|0)==(c[(c[a+4>>2]|0)+8>>2]|0)?d+8|0:d+12|0)>>2]=e;l=h;return}function Ge(){if(a[22784]|0)return;if(!(Yy(22784)|0))return;c[6205]=0;c[6206]=-2147483648;c[6207]=-1082130432;g[6208]=0.0;c[6209]=1060716128;c[6210]=-1090087446;c[6211]=-1092290076;g[6212]=0.0;c[6213]=-1098022214;c[6214]=-1084636126;c[6215]=-1092290076;g[6216]=0.0;c[6217]=-1083901670;c[6218]=-2147483648;c[6219]=-1092290177;g[6220]=0.0;c[6221]=-1098022214;c[6222]=1062847522;c[6223]=-1092290043;g[6224]=0.0;c[6225]=1060716128;c[6226]=1057396202;c[6227]=-1092290076;g[6228]=0.0;c[6229]=1049461434;c[6230]=-1084636126;c[6231]=1055193605;g[6232]=0.0;c[6233]=-1086767520;c[6234]=-1090087446;c[6235]=1055193572;g[6236]=0.0;c[6237]=-1086767520;c[6238]=1057396202;c[6239]=1055193572;g[6240]=0.0;c[6241]=1049461434;c[6242]=1062847522;c[6243]=1055193572;g[6244]=0.0;c[6245]=1063581978;c[6246]=0;c[6247]=1055193471;g[6248]=0.0;c[6249]=-2147483648;c[6250]=0;c[6251]=1065353216;g[6252]=0.0;c[6253]=1054458864;c[6254]=-1096927567;c[6255]=-1084636042;g[6256]=0.0;c[6257]=-1104782626;c[6258]=-1090519208;c[6259]=-1084636042;g[6260]=0.0;c[6261]=1049007812;c[6262]=-1085334679;c[6263]=-1090087228;g[6264]=0.0;c[6265]=1054458864;c[6266]=1050556081;c[6267]=-1084636042;g[6268]=0.0;c[6269]=1062847505;c[6270]=-2147483648;c[6271]=-1090087262;g[6272]=0.0;c[6273]=-1090087362;c[6274]=-2147483648;c[6275]=-1084636076;g[6276]=0.0;c[6277]=-1087361736;c[6278]=-1090519141;c[6279]=-1090087262;g[6280]=0.0;c[6281]=-1104782626;c[6282]=1056964440;c[6283]=-1084636042;g[6284]=0.0;c[6285]=-1087361736;c[6286]=1056964507;c[6287]=-1090087262;g[6288]=0.0;c[6289]=1049007812;c[6290]=1062148969;c[6291]=-1090087228;g[6292]=0.0;c[6293]=1064532105;c[6294]=1050556148;c[6295]=0;g[6296]=0.0;c[6297]=1064532105;c[6298]=-1096927500;c[6299]=0;g[6300]=0.0;c[6301]=1058437413;c[6302]=-1085334595;c[6303]=0;g[6304]=0.0;c[6305]=0;c[6306]=-1082130432;c[6307]=0;g[6308]=0.0;c[6309]=-1089046235;c[6310]=-1085334595;c[6311]=0;g[6312]=0.0;c[6313]=-1082951543;c[6314]=-1096927500;c[6315]=-2147483648;g[6316]=0.0;c[6317]=-1082951543;c[6318]=1050556148;c[6319]=-2147483648;g[6320]=0.0;c[6321]=-1089046235;c[6322]=1062149053;c[6323]=-2147483648;g[6324]=0.0;c[6325]=-2147483648;c[6326]=1065353216;c[6327]=-2147483648;g[6328]=0.0;c[6329]=1058437413;c[6330]=1062149053;c[6331]=-2147483648;g[6332]=0.0;c[6333]=1060121912;c[6334]=-1090519141;c[6335]=1057396386;g[6336]=0.0;c[6337]=-1098475836;c[6338]=-1085334679;c[6339]=1057396420;g[6340]=0.0;c[6341]=-1084636143;c[6342]=0;c[6343]=1057396386;g[6344]=0.0;c[6345]=-1098475836;c[6346]=1062148969;c[6347]=1057396420;g[6348]=0.0;c[6349]=1060121912;c[6350]=1056964507;c[6351]=1057396386;g[6352]=0.0;c[6353]=1057396286;c[6354]=0;c[6355]=1062847572;g[6356]=0.0;c[6357]=1042701022;c[6358]=-1090519208;c[6359]=1062847606;g[6360]=0.0;c[6361]=-1093024784;c[6362]=-1096927567;c[6363]=1062847606;g[6364]=0.0;c[6365]=-1093024784;c[6366]=1050556081;c[6367]=1062847606;g[6368]=0.0;c[6369]=1042701022;c[6370]=1056964440;c[6371]=1062847606;g[6372]=0.0;return}function He(a,b,d,e,f,h){a=a|0;b=b|0;d=+d;e=+e;f=+f;h=h|0;var i=0,j=0,k=0.0,l=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0.0,A=0.0,B=0,D=0.0;a:while(1){if((b|0)>0){j=0;i=-1;do{do if(c[h+(j<<2)>>2]|0){if((i|0)!=-1?!(+g[a+(j<<4)>>2]*d+ +g[a+(j<<4)+4>>2]*e+ +g[a+(j<<4)+8>>2]*f>+g[a+(i<<4)>>2]*d+ +g[a+(i<<4)+4>>2]*e+ +g[a+(i<<4)+8>>2]*f):0)break;i=j}while(0);j=j+1|0}while((j|0)!=(b|0))}else i=-1;j=h+(i<<2)|0;if((c[j>>2]|0)==3){B=37;break}l=+C(+((e-f*0.0)*(e-f*0.0)+(f*0.0-d)*(f*0.0-d)+(d*0.0-e*0.0)*(d*0.0-e*0.0)));k=+C(+((d-e*0.0)*(d-e*0.0)+((e*0.0-f)*(e*0.0-f)+(f*0.0-d*0.0)*(f*0.0-d*0.0))));if(l>k){z=(e-f*0.0)*(1.0/l);A=(d*0.0-e*0.0)*(1.0/l);x=(f*0.0-d)*(1.0/l)}else{z=(e*0.0-f)*(1.0/k);A=(d-e*0.0)*(1.0/k);x=(f*0.0-d*0.0)*(1.0/k)}u=x*f-A*e;v=A*d-z*f;w=z*e-x*d;s=(i|0)==-1;m=-1;y=0;while(1){t=+(y|0);r=+F(+(t*.01745329238474369));l=+E(+(t*.01745329238474369));k=(z*r+u*l)*.02500000037252903+d;o=(x*r+v*l)*.02500000037252903+e;l=(A*r+w*l)*.02500000037252903+f;if((b|0)>0){p=0;n=-1;do{do if(c[h+(p<<2)>>2]|0){if((n|0)!=-1?!(k*+g[a+(p<<4)>>2]+o*+g[a+(p<<4)+4>>2]+l*+g[a+(p<<4)+8>>2]>k*+g[a+(n<<4)>>2]+o*+g[a+(n<<4)+4>>2]+l*+g[a+(n<<4)+8>>2]):0)break;n=p}while(0);p=p+1|0}while((p|0)!=(b|0))}else n=-1;if((m|0)==(i|0)&(n|0)==(i|0))break a;b:do if(!((m|0)==-1|(m|0)==(n|0))?t+-40.0<=t:0){if((b|0)>0)r=t+-40.0;else{k=t+-40.0;while(1){if((m|0)==(i|0)&s){i=-1;B=32;break a}k=k+5.0;if(!(k<=t))break b;else m=-1}}while(1){l=r*.01745329238474369;D=+F(+l);l=+E(+l);k=(z*D+u*l)*.02500000037252903+d;o=(x*D+v*l)*.02500000037252903+e;l=(A*D+w*l)*.02500000037252903+f;q=0;p=-1;do{do if(c[h+(q<<2)>>2]|0){if((p|0)!=-1?!(k*+g[a+(q<<4)>>2]+o*+g[a+(q<<4)+4>>2]+l*+g[a+(q<<4)+8>>2]>k*+g[a+(p<<4)>>2]+o*+g[a+(p<<4)+4>>2]+l*+g[a+(p<<4)+8>>2]):0)break;p=q}while(0);q=q+1|0}while((q|0)!=(b|0));if((m|0)==(i|0)&(p|0)==(i|0)){B=32;break a}r=r+5.0;if(!(r<=t))break;else m=p}}while(0);y=y+45|0;if((y|0)>360)break;else m=n}c[j>>2]=0}if((B|0)==32)j=h+(i<<2)|0;else if((B|0)==37)return i|0;c[j>>2]=3;B=i;return B|0}function Ie(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0.0,l=0,m=0.0,n=0.0,o=0.0;i=c[a+192>>2]|0;k=+gb[c[(c[i>>2]|0)+48>>2]&15](i);i=c[a+712>>2]|0;if((i|0)>0){l=0;do{j=c[a+720>>2]|0;d=j+(l*104|0)+8|0;m=+g[b>>2]*+g[d>>2];g[d>>2]=m;d=j+(l*104|0)+12|0;o=+g[b+4>>2]*+g[d>>2];g[d>>2]=o;d=j+(l*104|0)+16|0;n=+g[b+8>>2]*+g[d>>2];g[d>>2]=n;d=j+(l*104|0)+24|0;g[d>>2]=+g[b>>2]*+g[d>>2];d=j+(l*104|0)+28|0;g[d>>2]=+g[b+4>>2]*+g[d>>2];d=j+(l*104|0)+32|0;g[d>>2]=+g[b+8>>2]*+g[d>>2];j=c[j+(l*104|0)+96>>2]|0;d=Sg(a+928|0,j)|0;a:do if(d){f=c[a+936>>2]|0;if((f|0)<=-1){d=c[a+928>>2]|0;break}if(f){h=0;e=d;while(1){d=c[e+32>>2]|0;h=h+1|0;if(!d){d=e;break a}if((h|0)>=(f|0))break;else e=d}}}else d=0;while(0);g[j>>2]=m-k;g[j+4>>2]=o-k;g[j+8>>2]=n-k;g[j+12>>2]=0.0;g[j+16>>2]=k+m;g[j+20>>2]=k+o;g[j+24>>2]=k+n;g[j+28>>2]=0.0;af(a+928|0,d,j);l=l+1|0}while((l|0)!=(i|0))}lg(a);d=c[a+928>>2]|0;if(d){l=c[a+192>>2]|0;m=+gb[c[(c[l>>2]|0)+48>>2]&15](l);o=+g[d+4>>2]-m;n=+g[d+8>>2]-m;g[a+892>>2]=+g[d>>2]-m;g[a+896>>2]=o;g[a+900>>2]=n;g[a+904>>2]=0.0;n=m+ +g[d+20>>2];o=m+ +g[d+24>>2];g[a+908>>2]=m+ +g[d+16>>2];g[a+912>>2]=n;g[a+916>>2]=o;g[a+920>>2]=0.0;d=c[a+188>>2]|0;if(d|0){l=c[a+684>>2]|0;b=c[l+32>>2]|0;Rb[c[(c[b>>2]|0)+16>>2]&31](b,d,a+892|0,a+908|0,c[l+36>>2]|0)}}else{c[a+892>>2]=0;c[a+892+4>>2]=0;c[a+892+8>>2]=0;c[a+892+12>>2]=0;c[a+892+16>>2]=0;c[a+892+20>>2]=0;c[a+892+24>>2]=0;c[a+892+28>>2]=0}e=c[a+732>>2]|0;if((e|0)<=0){Lf(a);return}f=c[a+740>>2]|0;d=0;do{b=c[f+(d*52|0)+8>>2]|0;l=c[f+(d*52|0)+12>>2]|0;m=+g[b+8>>2]-+g[l+8>>2];n=+g[b+12>>2]-+g[l+12>>2];o=+g[b+16>>2]-+g[l+16>>2];o=+C(+(m*m+n*n+o*o));g[f+(d*52|0)+16>>2]=o;g[f+(d*52|0)+28>>2]=o*o;d=d+1|0}while((d|0)!=(e|0));d=0;do{g[f+(d*52|0)+24>>2]=(+g[(c[f+(d*52|0)+8>>2]|0)+88>>2]+ +g[(c[f+(d*52|0)+12>>2]|0)+88>>2])/+g[(c[f+(d*52|0)+4>>2]|0)+4>>2];d=d+1|0}while((d|0)!=(e|0));Lf(a);return}function Je(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0;c[a+556>>2]=c[b>>2];c[a+556+4>>2]=c[b+4>>2];c[a+556+8>>2]=c[b+8>>2];c[a+556+12>>2]=c[b+12>>2];j=+g[a+568>>2];k=+g[a+560>>2];l=+g[a+564>>2];m=+g[a+556>>2];f=-m-k*0.0-l*0.0;e=(l+j*0.0-m*0.0)*-l+(j*(j+k*0.0-l*0.0)+f*-m)-(j*0.0+m*0.0-k)*-k;d=(j*0.0+m*0.0-k)*-m+(j*(l+j*0.0-m*0.0)+f*-k)-(j+k*0.0-l*0.0)*-l;f=(j+k*0.0-l*0.0)*-k+(f*-l+j*(j*0.0+m*0.0-k))-(l+j*0.0-m*0.0)*-m;if(f*0.0+(d*0.0+e)<-.9999998807907104){h=-0.0;i=0.0;d=1.0;e=0.0}else{s=+C(+((f*0.0+(d*0.0+e)+1.0)*2.0));h=(f*0.0-d*0.0)*(1.0/s);i=(d-e*0.0)*(1.0/s);d=(e*0.0-f)*(1.0/s);e=s*.5}n=1.0/+C(+(e*e+(h*h+d*d+i*i)));q=h*n;r=d*n;o=i*n;n=e*n;d=1.0/+C(+((n*j-m*-q-k*-r-l*-o)*(n*j-m*-q-k*-r-l*-o)+((j*-o+n*l+k*-q-m*-r)*(j*-o+n*l+k*-q-m*-r)+((m*n+j*-q+l*-r-k*-o)*(m*n+j*-q+l*-r-k*-o)+(m*-o+(j*-r+n*k)-l*-q)*(m*-o+(j*-r+n*k)-l*-q)))));h=(m*n+j*-q+l*-r-k*-o)*d;s=d*(m*-o+(j*-r+n*k)-l*-q);f=d*(j*-o+n*l+k*-q-m*-r);d=d*(n*j-m*-q-k*-r-l*-o);e=+g[a+444>>2];if(e>=.05000000074505806?(p=+g[a+448>>2],p>=.05000000074505806):0){j=n<-1.0?-1.0:n;j=+H(+(j>1.0?1.0:j))*2.0;if(j>1.1920928955078125e-07){i=1.0/+C(+(o*o+(q*q+r*r)));if(+B(+(r*i))>1.1920928955078125e-07){e=+C(+((o*i*o*i/(r*i*r*i)+1.0)/(1.0/(p*p)+o*i*o*i/(r*i*r*i)/(e*e))));k=q*i;l=r*i;i=o*i}else{k=q*i;l=r*i;i=o*i}}else{e=0.0;k=0.0;l=0.0;i=0.0}if(+B(+j)>1.1920928955078125e-07){if(!(j>e)){e=-e;if(!(j>2];if(l>=.05000000074505806){e=d<-1.0?-1.0:d;e=+H(+(e>1.0?1.0:e))*2.0;if(e>3.1415927410125732){e=-d<-1.0?-1.0:-d;i=-h;j=-s;k=-f;e=+H(+(e>1.0?1.0:e))*2.0}else{i=h;j=s;k=f}if(e>1.1920928955078125e-07){r=1.0/+C(+(i*i+j*j+k*k));i=i*r;j=j*r;k=k*r}if(+B(+e)>1.1920928955078125e-07){if(!(e>l))if(e<-l)d=-l;else d=e;else d=l;d=d*.5;e=+F(+d)/+C(+(k*k+(j*j+i*i)));h=i*e;f=k*e;e=j*e;d=+E(+d)}else e=s}else e=s;g[a+556>>2]=m*f+(n*h+q*d)-o*e;g[a+560>>2]=o*h+(n*e+m*d)-q*f;g[a+564>>2]=q*e+(n*f+o*d)-m*h;g[a+568>>2]=n*d-q*h-m*e-o*f;return}function Ke(a,b,d){a=a|0;b=b|0;d=d|0;var f=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0;r=l;l=l+80|0;o=c[a+4>>2]|0;Wb[c[(c[o>>2]|0)+16>>2]&3](o,r+28|0,r+24|0,r+20|0,r+16|0,r+12|0,r+8|0,r+4|0,r,b);o=(c[r+12>>2]|0)+(O(c[r+8>>2]|0,d)|0)|0;q=c[a+4>>2]|0;p=(c[r+20>>2]|0)==0;n=c[r+28>>2]|0;do if((c[r>>2]|0)==3){m=c[r+16>>2]|0;i=n+(O(m,e[o+4>>1]|0)|0)|0;if(p){j=+g[i+8>>2];k=+g[i>>2]*+g[q+4>>2];f=+g[i+4>>2]*+g[q+8>>2]}else{j=+h[i+16>>3];k=+h[i>>3]*+g[q+4>>2];f=+h[i+8>>3]*+g[q+8>>2]}j=j*+g[q+12>>2];g[r+32+32>>2]=k;g[r+32+36>>2]=f;g[r+32+40>>2]=j;g[r+32+44>>2]=0.0;i=n+(O(m,e[o+2>>1]|0)|0)|0;if(p){j=+g[i+8>>2];k=+g[i>>2]*+g[q+4>>2];f=+g[i+4>>2]*+g[q+8>>2]}else{j=+h[i+16>>3];k=+h[i>>3]*+g[q+4>>2];f=+h[i+8>>3]*+g[q+8>>2]}j=j*+g[q+12>>2];g[r+32+16>>2]=k;g[r+32+20>>2]=f;g[r+32+24>>2]=j;g[r+32+28>>2]=0.0;i=n+(O(m,e[o>>1]|0)|0)|0;if(p){j=+g[i+8>>2];k=+g[i>>2]*+g[q+4>>2];f=+g[i+4>>2]*+g[q+8>>2];break}else{j=+h[i+16>>3];k=+h[i>>3]*+g[q+4>>2];f=+h[i+8>>3]*+g[q+8>>2];break}}else{m=c[r+16>>2]|0;i=n+(O(m,c[o+8>>2]|0)|0)|0;if(p){j=+g[i+8>>2];k=+g[i>>2]*+g[q+4>>2];f=+g[i+4>>2]*+g[q+8>>2]}else{j=+h[i+16>>3];k=+h[i>>3]*+g[q+4>>2];f=+h[i+8>>3]*+g[q+8>>2]}j=j*+g[q+12>>2];g[r+32+32>>2]=k;g[r+32+36>>2]=f;g[r+32+40>>2]=j;g[r+32+44>>2]=0.0;i=n+(O(m,c[o+4>>2]|0)|0)|0;if(p){j=+g[i+8>>2];k=+g[i>>2]*+g[q+4>>2];f=+g[i+4>>2]*+g[q+8>>2]}else{j=+h[i+16>>3];k=+h[i>>3]*+g[q+4>>2];f=+h[i+8>>3]*+g[q+8>>2]}j=j*+g[q+12>>2];g[r+32+16>>2]=k;g[r+32+20>>2]=f;g[r+32+24>>2]=j;g[r+32+28>>2]=0.0;i=n+(O(m,c[o>>2]|0)|0)|0;if(p){j=+g[i+8>>2];k=+g[i>>2]*+g[q+4>>2];f=+g[i+4>>2]*+g[q+8>>2];break}else{j=+h[i+16>>3];k=+h[i>>3]*+g[q+4>>2];f=+h[i+8>>3]*+g[q+8>>2];break}}while(0);j=j*+g[q+12>>2];g[r+32>>2]=k;g[r+32+4>>2]=f;g[r+32+8>>2]=j;g[r+32+12>>2]=0.0;q=c[a+8>>2]|0;Nb[c[(c[q>>2]|0)+8>>2]&127](q,r+32|0,b,d);a=c[a+4>>2]|0;Gb[c[(c[a>>2]|0)+24>>2]&127](a,b);l=r;return}function Le(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0,B=0;j=l;l=l+192|0;h=c[(c[b+4>>2]|0)+740>>2]|0;i=c[(c[b+8>>2]|0)+8>>2]|0;z=+g[e>>2];n=+g[d>>2]*f+z;y=+g[e+4>>2];m=+g[d+4>>2]*f+y;o=+g[e+8>>2];k=+g[d+8>>2]*f+o;x=c[(c[b+12>>2]|0)+8>>2]|0;t=(h|0)!=(i|0)?x:h;x=(h|0)!=(i|0)?i:x;w=n-+g[t+52>>2];v=m-+g[t+56>>2];u=k-+g[t+60>>2];s=w*+g[t+8>>2]+v*+g[t+24>>2]+u*+g[t+40>>2];r=w*+g[t+12>>2]+v*+g[t+28>>2]+u*+g[t+44>>2];z=z-+g[x+52>>2];y=y-+g[x+56>>2];o=o-+g[x+60>>2];q=z*+g[x+4>>2]+y*+g[x+20>>2]+o*+g[x+36>>2];p=z*+g[x+8>>2]+y*+g[x+24>>2]+o*+g[x+40>>2];o=z*+g[x+12>>2]+y*+g[x+28>>2]+o*+g[x+44>>2];g[j>>2]=w*+g[t+4>>2]+v*+g[t+20>>2]+u*+g[t+36>>2];g[j+4>>2]=s;g[j+8>>2]=r;g[j+12>>2]=0.0;g[j+16>>2]=q;g[j+20>>2]=p;g[j+24>>2]=o;g[j+28>>2]=0.0;c[j+64>>2]=c[d>>2];c[j+64+4>>2]=c[d+4>>2];c[j+64+8>>2]=c[d+8>>2];c[j+64+12>>2]=c[d+12>>2];g[j+80>>2]=f;g[j+84>>2]=0.0;g[j+88>>2]=0.0;g[j+92>>2]=0.0;c[j+112>>2]=0;a[j+116>>0]=0;c[j+120>>2]=0;c[j+120+4>>2]=0;c[j+120+8>>2]=0;c[j+120+12>>2]=0;c[j+120+16>>2]=0;c[j+120+20>>2]=0;c[j+120+24>>2]=0;c[j+120+28>>2]=0;g[j+48>>2]=n;g[j+52>>2]=m;g[j+56>>2]=k;g[j+60>>2]=0.0;c[j+32>>2]=c[e>>2];c[j+32+4>>2]=c[e+4>>2];c[j+32+8>>2]=c[e+8>>2];c[j+32+12>>2]=c[e+12>>2];d=c[b+16>>2]|0;e=c[b+20>>2]|0;if((h|0)!=(i|0)){c[j+96>>2]=e;A=b+28|0;t=d;d=e;x=b+24|0;e=c[A>>2]|0;A=j+100|0;c[A>>2]=t;A=j+104|0;c[A>>2]=e;x=c[x>>2]|0;A=j+108|0;c[A>>2]=x;A=(h|0)!=(i|0)?b+12|0:b+8|0;A=c[A>>2]|0;i=(h|0)!=(i|0)?b+8|0:b+12|0;i=c[i>>2]|0;b=b+32|0;b=c[b>>2]|0;h=c[b>>2]|0;h=h+12|0;h=c[h>>2]|0;+nb[h&1](b,j,A,d,e,i,t,x);l=j;return}else{c[j+96>>2]=d;B=b+24|0;x=e;A=b+28|0;e=c[B>>2]|0;B=j+100|0;c[B>>2]=x;B=j+104|0;c[B>>2]=e;A=c[A>>2]|0;B=j+108|0;c[B>>2]=A;B=(h|0)!=(i|0)?b+12|0:b+8|0;B=c[B>>2]|0;t=(h|0)!=(i|0)?b+8|0:b+12|0;t=c[t>>2]|0;b=b+32|0;b=c[b>>2]|0;i=c[b>>2]|0;i=i+12|0;i=c[i>>2]|0;+nb[i&1](b,j,B,d,e,t,x,A);l=j;return}}function Me(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=l;l=l+48|0;c[b+8>>2]=0;g[b+12>>2]=0.0;c[b>>2]=7116;c[b+48>>2]=d;c[b+4>>2]=21;if(qb[c[(c[d>>2]|0)+40>>2]&127](d)|0)Kb[c[(c[d>>2]|0)+48>>2]&127](d,b+16|0,b+32|0);else{d=h+32+4|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;g[h+32>>2]=1.0;Kb[c[(c[b>>2]|0)+68>>2]&127](h+16|0,b,h+32|0);g[b+32>>2]=+g[h+16>>2]+ +g[b+12>>2];g[h+32>>2]=-1.0;Kb[c[(c[b>>2]|0)+68>>2]&127](h,b,h+32|0);c[h+16>>2]=c[h>>2];c[h+16+4>>2]=c[h+4>>2];c[h+16+8>>2]=c[h+8>>2];c[h+16+12>>2]=c[h+12>>2];g[b+16>>2]=+g[h+16>>2]-+g[b+12>>2];c[h+32>>2]=0;c[h+32+4>>2]=0;c[h+32+8>>2]=0;c[h+32+12>>2]=0;g[d>>2]=1.0;Kb[c[(c[b>>2]|0)+68>>2]&127](h+16|0,b,h+32|0);g[b+36>>2]=+g[h+16+4>>2]+ +g[b+12>>2];g[d>>2]=-1.0;Kb[c[(c[b>>2]|0)+68>>2]&127](h,b,h+32|0);c[h+16>>2]=c[h>>2];c[h+16+4>>2]=c[h+4>>2];c[h+16+8>>2]=c[h+8>>2];c[h+16+12>>2]=c[h+12>>2];g[b+20>>2]=+g[h+16+4>>2]-+g[b+12>>2];c[h+32>>2]=0;c[h+32+4>>2]=0;c[h+32+8>>2]=0;c[h+32+12>>2]=0;g[h+32+8>>2]=1.0;Kb[c[(c[b>>2]|0)+68>>2]&127](h+16|0,b,h+32|0);g[b+40>>2]=+g[h+16+8>>2]+ +g[b+12>>2];g[h+32+8>>2]=-1.0;Kb[c[(c[b>>2]|0)+68>>2]&127](h,b,h+32|0);c[h+16>>2]=c[h>>2];c[h+16+4>>2]=c[h+4>>2];c[h+16+8>>2]=c[h+8>>2];c[h+16+12>>2]=c[h+12>>2];g[b+24>>2]=+g[h+16+8>>2]-+g[b+12>>2]}c[b>>2]=6964;c[b+52>>2]=0;c[b+56>>2]=0;a[b+60>>0]=e&1;a[b+61>>0]=0;c[b+4>>2]=21;if(!f){l=h;return}c[6472]=(c[6472]|0)+1;f=ic(191)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}c[f+52>>2]=282;a[f+60>>0]=0;a[f+80>>0]=1;c[f+76>>2]=0;c[f+68>>2]=0;c[f+72>>2]=0;a[f+100>>0]=1;c[f+96>>2]=0;c[f+88>>2]=0;c[f+92>>2]=0;a[f+120>>0]=1;c[f+116>>2]=0;c[f+108>>2]=0;c[f+112>>2]=0;a[f+140>>0]=1;c[f+136>>2]=0;c[f+128>>2]=0;c[f+132>>2]=0;c[f+144>>2]=0;a[f+164>>0]=1;c[f+160>>2]=0;c[f+152>>2]=0;c[f+156>>2]=0;c[f+168>>2]=0;c[f+4>>2]=-8388609;c[f+8>>2]=-8388609;c[f+12>>2]=-8388609;g[f+16>>2]=0.0;c[f+20>>2]=2139095039;c[f+24>>2]=2139095039;c[f+28>>2]=2139095039;g[f+32>>2]=0.0;c[f>>2]=8172;c[b+52>>2]=f;Zc(f,c[b+48>>2]|0,(a[b+60>>0]|0)!=0,b+16|0,b+32|0);a[b+61>>0]=1;l=h;return}function Ne(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;if(!b)if(!e){if(f|0){c[f>>2]=(a>>>0)%(d>>>0);c[f+4>>2]=0}e=0;f=(a>>>0)/(d>>>0)>>>0;return (z=e,f)|0}else{if(!f){e=0;f=0;return (z=e,f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;e=0;f=0;return (z=e,f)|0}do if(d){if(e|0){h=(R(e|0)|0)-(R(b|0)|0)|0;if(h>>>0<=31){n=h+1|0;i=a>>>((h+1|0)>>>0)&h-31>>31|b<<31-h;m=b>>>((h+1|0)>>>0)&h-31>>31;g=0;h=a<<31-h;break}if(!f){e=0;f=0;return (z=e,f)|0}c[f>>2]=a|0;c[f+4>>2]=b|b&0;e=0;f=0;return (z=e,f)|0}if(d-1&d|0){h=(R(d|0)|0)+33-(R(b|0)|0)|0;n=h;i=32-h-1>>31&b>>>((h-32|0)>>>0)|(b<<32-h|a>>>(h>>>0))&h-32>>31;m=h-32>>31&b>>>(h>>>0);g=a<<64-h&32-h>>31;h=(b<<64-h|a>>>((h-32|0)>>>0))&32-h>>31|a<<32-h&h-33>>31;break}if(f|0){c[f>>2]=d-1&a;c[f+4>>2]=0}if((d|0)==1){e=b|b&0;f=a|0|0;return (z=e,f)|0}else{f=Qp(d|0)|0;e=b>>>(f>>>0)|0;f=b<<32-f|a>>>(f>>>0)|0;return (z=e,f)|0}}else{if(!e){if(f|0){c[f>>2]=(b>>>0)%(d>>>0);c[f+4>>2]=0}e=0;f=(b>>>0)/(d>>>0)>>>0;return (z=e,f)|0}if(!a){if(f|0){c[f>>2]=0;c[f+4>>2]=(b>>>0)%(e>>>0)}d=0;f=(b>>>0)/(e>>>0)>>>0;return (z=d,f)|0}if(!(e-1&e)){if(f|0){c[f>>2]=a|0;c[f+4>>2]=e-1&b|b&0}d=0;f=b>>>((Qp(e|0)|0)>>>0);return (z=d,f)|0}h=(R(e|0)|0)-(R(b|0)|0)|0;if(h>>>0<=30){n=h+1|0;i=b<<31-h|a>>>((h+1|0)>>>0);m=b>>>((h+1|0)>>>0);g=0;h=a<<31-h;break}if(!f){e=0;f=0;return (z=e,f)|0}c[f>>2]=a|0;c[f+4>>2]=b|b&0;e=0;f=0;return (z=e,f)|0}while(0);if(!n){j=h;b=m;a=0;h=0}else{k=cw(d|0|0,e|e&0|0,-1,-1)|0;l=z;j=h;b=m;a=n;h=0;do{p=j;j=g>>>31|j<<1;g=h|g<<1;p=i<<1|p>>>31|0;o=i>>>31|b<<1|0;Nv(k|0,l|0,p|0,o|0)|0;n=z;m=n>>31|((n|0)<0?-1:0)<<1;h=m&1;i=Nv(p|0,o|0,m&(d|0)|0,(((n|0)<0?-1:0)>>31|((n|0)<0?-1:0)<<1)&(e|e&0)|0)|0;b=z;a=a-1|0}while((a|0)!=0);a=0}if(f|0){c[f>>2]=i;c[f+4>>2]=b}o=(g|0)>>>31|j<<1|(0<<1|g>>>31)&0|a;p=(g<<1|0>>>31)&-2|h;return (z=o,p)|0}function Oe(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;f=c[b+748>>2]|0;if((f|0)<=0)return;do{k=f;f=f+-1|0;q=+g[b+4+(f*184|0)>>2];r=+g[b+4+(f*184|0)+4>>2];h=+g[b+4+(f*184|0)+8>>2];p=q*+g[d>>2]+r*+g[d+4>>2]+h*+g[d+8>>2]+ +g[d+48>>2];n=q*+g[d+16>>2]+r*+g[d+20>>2]+h*+g[d+24>>2]+ +g[d+52>>2];h=q*+g[d+32>>2]+r*+g[d+36>>2]+h*+g[d+40>>2]+ +g[d+56>>2];g[b+4+(f*184|0)+48>>2]=p;g[b+4+(f*184|0)+52>>2]=n;g[b+4+(f*184|0)+56>>2]=h;g[b+4+(f*184|0)+60>>2]=0.0;r=+g[b+4+(f*184|0)+16>>2];q=+g[b+4+(f*184|0)+20>>2];i=+g[b+4+(f*184|0)+24>>2];o=r*+g[e>>2]+q*+g[e+4>>2]+i*+g[e+8>>2]+ +g[e+48>>2];m=r*+g[e+16>>2]+q*+g[e+20>>2]+i*+g[e+24>>2]+ +g[e+52>>2];i=r*+g[e+32>>2]+q*+g[e+36>>2]+i*+g[e+40>>2]+ +g[e+56>>2];g[b+4+(f*184|0)+32>>2]=o;g[b+4+(f*184|0)+36>>2]=m;g[b+4+(f*184|0)+40>>2]=i;g[b+4+(f*184|0)+44>>2]=0.0;g[b+4+(f*184|0)+80>>2]=(p-o)*+g[b+4+(f*184|0)+64>>2]+(n-m)*+g[b+4+(f*184|0)+68>>2]+(h-i)*+g[b+4+(f*184|0)+72>>2];j=b+4+(f*184|0)+148|0;c[j>>2]=(c[j>>2]|0)+1}while((k|0)>1);f=c[b+748>>2]|0;if((f|0)<=0)return;e=f;j=f;while(1){k=j;j=j+-1|0;d=b+4+(j*184|0)|0;h=+g[b+4+(j*184|0)+80>>2];i=+g[b+752>>2];if(!(h<=i)){f=e+-1|0;if((f|0)==(j|0)){f=e;l=12}else{_h(d|0,b+4+(f*184|0)|0,184)|0;c[b+4+(f*184|0)+112>>2]=0;g[b+4+(f*184|0)+120>>2]=0.0;a[b+4+(f*184|0)+116>>0]=0;g[b+4+(f*184|0)+124>>2]=0.0;g[b+4+(f*184|0)+128>>2]=0.0;c[b+4+(f*184|0)+148>>2]=0;f=c[b+748>>2]|0;l=12}}else{p=+g[b+4+(j*184|0)+32>>2]-(+g[b+4+(j*184|0)+48>>2]-+g[b+4+(j*184|0)+64>>2]*h);q=+g[b+4+(j*184|0)+36>>2]-(+g[b+4+(j*184|0)+52>>2]-h*+g[b+4+(j*184|0)+68>>2]);r=+g[b+4+(j*184|0)+40>>2]-(+g[b+4+(j*184|0)+56>>2]-h*+g[b+4+(j*184|0)+72>>2]);if(p*p+q*q+r*r>i*i){f=e+-1|0;if((f|0)==(j|0)){f=e;l=12}else{_h(d|0,b+4+(f*184|0)|0,184)|0;c[b+4+(f*184|0)+112>>2]=0;g[b+4+(f*184|0)+120>>2]=0.0;a[b+4+(f*184|0)+116>>0]=0;g[b+4+(f*184|0)+124>>2]=0.0;g[b+4+(f*184|0)+128>>2]=0.0;c[b+4+(f*184|0)+148>>2]=0;f=c[b+748>>2]|0;l=12}}else f=e}if((l|0)==12){l=0;f=f+-1|0;c[b+748>>2]=f}if((k|0)<=1)break;else e=f}return}function Pe(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0;k=l;l=l+128|0;a=c[a+16>>2]|0;n=+g[a+892>>2];x=+g[a+896>>2];v=+g[a+900>>2];w=+g[a+908>>2];f=+g[a+912>>2];i=+g[a+916>>2];z=+g[b>>2];m=+g[b+4>>2];p=v*+g[b+8>>2];q=+g[b+16>>2];r=+g[b+20>>2];t=v*+g[b+24>>2];u=+g[b+32>>2];o=+g[b+36>>2];s=+g[b+40>>2];y=+g[b+48>>2];j=+g[b+52>>2];h=+g[b+56>>2];g[k>>2]=n*z+x*m+p+y;g[k+4>>2]=n*q+x*r+t+j;g[k+8>>2]=n*u+x*o+v*s+h;g[k+12>>2]=0.0;g[k+16>>2]=w*z+x*m+p+y;g[k+20>>2]=w*q+x*r+t+j;g[k+24>>2]=w*u+x*o+v*s+h;g[k+28>>2]=0.0;g[k+32>>2]=w*z+f*m+p+y;g[k+36>>2]=w*q+f*r+t+j;g[k+40>>2]=w*u+f*o+v*s+h;g[k+44>>2]=0.0;g[k+48>>2]=n*z+f*m+p+y;g[k+52>>2]=n*q+f*r+t+j;g[k+56>>2]=n*u+f*o+v*s+h;g[k+60>>2]=0.0;v=+g[b>>2];u=+g[b+4>>2];t=i*+g[b+8>>2];r=+g[b+16>>2];q=+g[b+20>>2];p=i*+g[b+24>>2];m=+g[b+32>>2];g[k+64>>2]=n*v+x*u+t+y;g[k+68>>2]=n*r+x*q+p+j;g[k+72>>2]=n*m+x*o+i*s+h;g[k+76>>2]=0.0;h=+g[b+36>>2];i=i*+g[b+40>>2];s=+g[b+48>>2];o=+g[b+52>>2];j=+g[b+56>>2];g[k+80>>2]=w*v+x*u+t+s;g[k+84>>2]=w*r+x*q+p+o;g[k+88>>2]=w*m+x*h+i+j;g[k+92>>2]=0.0;g[k+96>>2]=w*v+f*u+t+s;g[k+100>>2]=w*r+f*q+p+o;g[k+104>>2]=w*m+f*h+i+j;g[k+108>>2]=0.0;g[k+112>>2]=n*v+f*u+t+s;g[k+116>>2]=n*r+f*q+p+o;g[k+120>>2]=n*m+f*h+i+j;g[k+124>>2]=0.0;c[e>>2]=c[k>>2];c[e+4>>2]=c[k+4>>2];c[e+8>>2]=c[k+8>>2];c[e+12>>2]=c[k+12>>2];c[d>>2]=c[k>>2];c[d+4>>2]=c[k+4>>2];c[d+8>>2]=c[k+8>>2];c[d+12>>2]=c[k+12>>2];b=1;do{f=+g[k+(b<<4)>>2];if(f<+g[d>>2])g[d>>2]=f;h=+g[k+(b<<4)+4>>2];if(h<+g[d+4>>2])g[d+4>>2]=h;i=+g[k+(b<<4)+8>>2];if(i<+g[d+8>>2])g[d+8>>2]=i;j=+g[k+(b<<4)+12>>2];if(j<+g[d+12>>2])g[d+12>>2]=j;if(+g[e>>2]>2]=f;if(+g[e+4>>2]>2]=h;if(+g[e+8>>2]>2]=i;if(+g[e+12>>2]>2]=j;b=b+1|0}while((b|0)!=8);l=k;return}function Qe(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0;p=l;l=l+16|0;bj(12271);j=c[b+204>>2]|0;Kb[c[(c[j>>2]|0)+8>>2]&127](j,b,c[b+24>>2]|0);j=c[b+308>>2]|0;if((j|0)>0){k=c[b+316>>2]|0;m=0;do{e=c[k+(m<<2)>>2]|0;d=c[e+740>>2]|0;e=c[e+744>>2]|0;if((d|0?(e|0?(c[d+204>>2]&3|0)==0:0):0)?(c[e+204>>2]&3|0)==0:0){f=c[d+208>>2]|0;d=c[e+208>>2]|0;i=c[(c[b+204>>2]|0)+16>>2]|0;e=c[i+(f<<3)>>2]|0;if((e|0)!=(f|0)){h=i+(f<<3)|0;do{f=i+(e<<3)|0;c[h>>2]=c[f>>2];f=c[f>>2]|0;h=i+(f<<3)|0;e=c[h>>2]|0}while((f|0)!=(e|0))}e=c[i+(d<<3)>>2]|0;if((e|0)!=(d|0)){h=i+(d<<3)|0;do{d=i+(e<<3)|0;c[h>>2]=c[d>>2];d=c[d>>2]|0;h=i+(d<<3)|0;e=c[h>>2]|0}while((d|0)!=(e|0))}if((f|0)!=(d|0)){c[i+(f<<3)>>2]=d;h=i+(d<<3)+4|0;c[h>>2]=(c[h>>2]|0)+(c[i+(f<<3)+4>>2]|0)}}m=m+1|0}while((m|0)!=(j|0))}k=c[b+212>>2]|0;if((k|0)>0){j=c[b+220>>2]|0;m=0;do{d=c[j+(m<<2)>>2]|0;if((a[d+20>>0]|0?(o=c[d+28>>2]|0,(c[o+204>>2]&3|0)==0):0)?(n=c[d+32>>2]|0,(c[n+204>>2]&3|0)==0):0){f=c[o+208>>2]|0;d=c[n+208>>2]|0;i=c[(c[b+204>>2]|0)+16>>2]|0;e=c[i+(f<<3)>>2]|0;if((e|0)!=(f|0)){h=i+(f<<3)|0;do{f=i+(e<<3)|0;c[h>>2]=c[f>>2];f=c[f>>2]|0;h=i+(f<<3)|0;e=c[h>>2]|0}while((f|0)!=(e|0))}e=c[i+(d<<3)>>2]|0;if((e|0)!=(d|0)){h=i+(d<<3)|0;do{d=i+(e<<3)|0;c[h>>2]=c[d>>2];d=c[d>>2]|0;h=i+(d<<3)|0;e=c[h>>2]|0}while((d|0)!=(e|0))}if((f|0)!=(d|0)){c[i+(f<<3)>>2]=d;h=i+(d<<3)+4|0;c[h>>2]=(c[h>>2]|0)+(c[i+(f<<3)+4>>2]|0)}}m=m+1|0}while((m|0)!=(k|0))}d=c[b+204>>2]|0;Gb[c[(c[d>>2]|0)+12>>2]&127](d,b);d=c[2405]|0;b=(c[d+16>>2]|0)+-1|0;c[d+16>>2]=b;if(b|0){l=p;return}do if(c[d+4>>2]|0){Za(p|0,0)|0;b=c[6471]|0;g[d+8>>2]=+g[d+8>>2]+ +(((c[p+4>>2]|0)-(c[b+4>>2]|0)+(((c[p>>2]|0)-(c[b>>2]|0)|0)*1e6|0)-(c[d+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[d+16>>2]|0)){d=c[2405]|0;break}else{l=p;return}}while(0);c[2405]=c[d+20>>2];l=p;return}function Re(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0;j=l;l=l+64|0;k=(a[b+8>>0]|0)!=0;i=k?e:d;e=k?d:e;d=c[e+4>>2]|0;if(((c[d+4>>2]|0)+-21|0)>>>0>=9){l=j;return}if((c[(c[i+4>>2]|0)+4>>2]|0)>=20){l=j;return}m=+gb[c[(c[d>>2]|0)+48>>2]&15](d);c[h+4>>2]=c[b+76>>2];c[b+16>>2]=i;c[b+20>>2]=e;c[b+64>>2]=f;g[b+68>>2]=m;c[b+56>>2]=h;k=c[e+12>>2]|0;B=+g[k>>2];A=+g[k+16>>2];z=+g[k+32>>2];y=+g[k+4>>2];x=+g[k+20>>2];w=+g[k+36>>2];s=+g[k+8>>2];q=+g[k+24>>2];o=+g[k+40>>2];v=-+g[k+48>>2];u=-+g[k+52>>2];t=-+g[k+56>>2];k=c[i+12>>2]|0;K=+g[k>>2];J=+g[k+16>>2];I=+g[k+32>>2];H=+g[k+4>>2];G=+g[k+20>>2];F=+g[k+36>>2];E=+g[k+8>>2];D=+g[k+24>>2];C=+g[k+40>>2];r=+g[k+48>>2];p=+g[k+52>>2];n=+g[k+56>>2];g[j>>2]=B*K+A*J+z*I;g[j+4>>2]=B*H+A*G+z*F;g[j+8>>2]=B*E+A*D+z*C;g[j+12>>2]=0.0;g[j+16>>2]=y*K+x*J+w*I;g[j+20>>2]=y*H+x*G+w*F;g[j+24>>2]=y*E+x*D+w*C;g[j+28>>2]=0.0;g[j+32>>2]=s*K+q*J+o*I;g[j+36>>2]=s*H+q*G+o*F;g[j+40>>2]=s*E+q*D+o*C;g[j+44>>2]=0.0;g[j+48>>2]=B*v+A*u+z*t+(B*r+A*p+z*n);g[j+52>>2]=y*v+x*u+w*t+(y*r+x*p+w*n);g[j+56>>2]=s*v+q*u+o*t+(s*r+q*p+o*n);g[j+60>>2]=0.0;k=c[(c[b+16>>2]|0)+4>>2]|0;Nb[c[(c[k>>2]|0)+8>>2]&127](k,j,b+24|0,b+40|0);g[b+40>>2]=+g[b+40>>2]+m;g[b+44>>2]=+g[b+44>>2]+m;g[b+48>>2]=+g[b+48>>2]+m;g[b+24>>2]=+g[b+24>>2]-m;g[b+28>>2]=+g[b+28>>2]-m;g[b+32>>2]=+g[b+32>>2]-m;k=c[b+76>>2]|0;e=c[e+8>>2]|0;c[k+740>>2]=c[i+8>>2];c[k+744>>2]=e;Nb[c[(c[d>>2]|0)+64>>2]&127](d,b+12|0,b+24|0,b+40|0);e=c[h+4>>2]|0;do if(c[e+748>>2]|0){i=c[e+740>>2]|0;f=c[(c[h+8>>2]|0)+8>>2]|0;d=c[(c[h+12>>2]|0)+8>>2]|0;if((i|0)==(f|0)){Oe(e,i+4|0,d+4|0);break}else{Oe(e,d+4|0,f+4|0);break}}while(0);c[b+16>>2]=0;c[b+20>>2]=0;l=j;return}function Se(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0,p=0.0,q=0;o=l;l=l+128|0;h=+g[b>>2];i=+g[b+16>>2];p=h>2];if((p+g[a+28>>2]){l=o;return}m=h>i?b:b+16|0;if(+g[(+g[m>>2]>j?m:b+32|0)>>2]<+g[a+12>>2]){l=o;return}j=+g[b+8>>2];h=+g[b+24>>2];p=j>2];if((p+g[a+36>>2]){l=o;return}m=j>h?b+8|0:b+24|0;if(+g[(+g[m>>2]>i?m:b+40|0)>>2]<+g[a+20>>2]){l=o;return}h=+g[b+4>>2];i=+g[b+20>>2];p=h>2];if((p+g[a+32>>2]){l=o;return}m=h>i?b+4|0:b+20|0;if(+g[(+g[m>>2]>j?m:b+36|0)>>2]<+g[a+16>>2]){l=o;return}m=c[a+48>>2]|0;f=c[a+4>>2]|0;if((c[(c[f+4>>2]|0)+4>>2]|0)>=20){l=o;return}c[o+24+8>>2]=0;c[o+24+12>>2]=1065353216;c[o+24+16>>2]=1065353216;c[o+24+20>>2]=1065353216;g[o+24+24>>2]=0.0;c[o+24+52>>2]=0;c[o+24>>2]=3860;c[o+24+4>>2]=1;c[o+24+56>>2]=c[b>>2];c[o+24+56+4>>2]=c[b+4>>2];c[o+24+56+8>>2]=c[b+8>>2];c[o+24+56+12>>2]=c[b+12>>2];c[o+24+72>>2]=c[b+16>>2];c[o+24+72+4>>2]=c[b+16+4>>2];c[o+24+72+8>>2]=c[b+16+8>>2];c[o+24+72+12>>2]=c[b+16+12>>2];c[o+24+88>>2]=c[b+32>>2];c[o+24+88+4>>2]=c[b+32+4>>2];c[o+24+88+8>>2]=c[b+32+8>>2];c[o+24+88+12>>2]=c[b+32+12>>2];c[o+24+44>>2]=c[a+56>>2];q=c[a+8>>2]|0;b=c[q+8>>2]|0;k=c[q+12>>2]|0;c[o>>2]=q;c[o+4>>2]=o+24;c[o+8>>2]=b;c[o+12>>2]=k;c[o+16>>2]=d;c[o+20>>2]=e;k=vb[c[(c[m>>2]|0)+8>>2]&31](m,f,o,c[a+64>>2]|0)|0;b=c[a+44>>2]|0;f=c[b+8>>2]|0;if((c[f+8>>2]|0)==(c[(c[a+8>>2]|0)+8>>2]|0)){c[b+8>>2]=o;Kb[c[(c[b>>2]|0)+8>>2]&127](b,d,e)}else{f=c[b+12>>2]|0;c[b+12>>2]=o;Kb[c[(c[b>>2]|0)+12>>2]&127](b,d,e)}Rb[c[(c[k>>2]|0)+8>>2]&31](k,c[a+4>>2]|0,o,c[a+52>>2]|0,c[a+44>>2]|0);q=c[a+44>>2]|0;c[((c[(c[q+8>>2]|0)+8>>2]|0)==(c[(c[a+8>>2]|0)+8>>2]|0)?q+8|0:q+12|0)>>2]=f;Ab[c[c[k>>2]>>2]&511](k);Gb[c[(c[m>>2]|0)+60>>2]&127](m,k);c[o+24>>2]=7316;f=c[o+24+52>>2]|0;if(f|0?(Ab[c[c[f>>2]>>2]&511](f),n=c[o+24+52>>2]|0,n|0):0){c[6473]=(c[6473]|0)+1;nd(c[n+-4>>2]|0)}l=o;return}function Te(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0.0;x=a[h+16>>0]&-16;a[h+16>>0]=x;n=+g[e>>2];o=+g[d>>2];p=+g[e+4>>2];q=+g[d+4>>2];r=+g[e+8>>2];s=+g[d+8>>2];t=+g[f>>2];u=+g[f+4>>2];v=+g[f+8>>2];l=+g[b>>2];m=+g[b+4>>2];i=+g[b+8>>2];z=(n-o)*(l-o)+(p-q)*(m-q)+(r-s)*(i-s);y=(t-o)*(l-o)+(u-q)*(m-q)+(v-s)*(i-s);do if(z<=0.0&y<=0.0){c[h>>2]=c[d>>2];c[h+4>>2]=c[d+4>>2];c[h+8>>2]=c[d+8>>2];c[h+12>>2]=c[d+12>>2];a[h+16>>0]=x|1;j=0.0;k=0.0;i=1.0}else{w=(n-o)*(l-n)+(p-q)*(m-p)+(r-s)*(i-r);k=(t-o)*(l-n)+(u-q)*(m-p)+(v-s)*(i-r);if(!(!(w>=0.0)|!(k<=w))){c[h>>2]=c[e>>2];c[h+4>>2]=c[e+4>>2];c[h+8>>2]=c[e+8>>2];c[h+12>>2]=c[e+12>>2];a[h+16>>0]=x|2;j=0.0;k=1.0;i=0.0;break}if(w<=0.0&(z>=0.0?z*k-w*y<=0.0:0)){g[h>>2]=o+(n-o)*(z/(z-w));g[h+4>>2]=q+(p-q)*(z/(z-w));g[h+8>>2]=s+(r-s)*(z/(z-w));g[h+12>>2]=0.0;a[h+16>>0]=x|3;j=0.0;k=z/(z-w);i=1.0-z/(z-w);break}j=(n-o)*(l-t)+(p-q)*(m-u)+(r-s)*(i-v);i=(t-o)*(l-t)+(u-q)*(m-u)+(v-s)*(i-v);if(!(!(i>=0.0)|!(j<=i))){c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];a[h+16>>0]=x|4;j=1.0;k=0.0;i=0.0;break}if(i<=0.0&(y>=0.0?j*y-z*i<=0.0:0)){g[h>>2]=o+(t-o)*(y/(y-i));g[h+4>>2]=q+(u-q)*(y/(y-i));g[h+8>>2]=s+(v-s)*(y/(y-i));g[h+12>>2]=0.0;a[h+16>>0]=x|5;j=y/(y-i);k=0.0;i=1.0-y/(y-i);break}if((w*i-j*k<=0.0?k-w>=0.0:0)?j-i>=0.0:0){k=(k-w)/(k-w+(j-i));g[h>>2]=n+(t-n)*k;g[h+4>>2]=p+(u-p)*k;g[h+8>>2]=r+(v-r)*k;g[h+12>>2]=0.0;a[h+16>>0]=x|6;j=k;k=1.0-k;i=0.0;break}l=1.0/(z*k-w*y+(w*i-j*k+(j*y-z*i)));m=(j*y-z*i)*l;i=(z*k-w*y)*l;g[h>>2]=(t-o)*i+((n-o)*m+o);g[h+4>>2]=(u-q)*i+((p-q)*m+q);g[h+8>>2]=(v-s)*i+((r-s)*m+s);g[h+12>>2]=0.0;a[h+16>>0]=x|7;j=i;k=m;i=1.0-m-i}while(0);g[h+20>>2]=i;g[h+24>>2]=k;g[h+28>>2]=j;g[h+32>>2]=0.0;return}function Ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;if(!a)return;t=+g[b>>2];u=+g[b+4>>2];v=+g[b+8>>2];w=+g[b+16>>2];x=+g[b+20>>2];p=+g[b+24>>2];c[6472]=(c[6472]|0)+1;n=ic(275)|0;b=n+4+15&-16;c[b+-4>>2]=n;c[(n+4+15&-16)>>2]=a;m=b;j=b;h=b;e=64;o=1;a=n+4+15&-16;while(1){n=o+-1|0;l=c[a+(n<<2)>>2]|0;do if(((((+g[l>>2]<=w?+g[l+16>>2]>=t:0)?+g[l+4>>2]<=x:0)?+g[l+20>>2]>=u:0)?+g[l+8>>2]<=p:0)?+g[l+24>>2]>=v:0){if(!(c[l+40>>2]|0)){Gb[c[(c[d>>2]|0)+12>>2]&127](d,l);i=b;b=m;f=n;break}k=c[l+36>>2]|0;do if((n|0)==(e|0)?(s=e|0?e<<1:1,(o|0)<=(s|0)):0){if((s|0)!=0?(c[6472]=(c[6472]|0)+1,r=ic((s<<2|3)+16|0)|0,(r|0)!=0):0){c[(r+4+15&-16)+-4>>2]=r;f=r+4+15&-16}else f=0;if((o|0)>1){b=0;do{c[f+(b<<2)>>2]=c[a+(b<<2)>>2];b=b+1|0}while((b|0)!=(e|0));if(!m){i=f;j=f;h=f;b=f;e=s;m=f;break}}else if((a|0)==0|(m|0)==0){i=f;j=f;h=f;b=f;e=s;m=f;break}c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);i=f;j=f;h=f;b=f;e=s;m=f}else{i=b;b=m;m=a}while(0);c[m+(n<<2)>>2]=k;k=c[l+40>>2]|0;do if((o|0)==(e|0)){e=o|0?o<<1:1;if((o|0)<(e|0)){if((e|0)!=0?(c[6472]=(c[6472]|0)+1,q=ic((e<<2|3)+16|0)|0,(q|0)!=0):0){c[(q+4+15&-16)+-4>>2]=q;a=q+4+15&-16}else a=0;if((o|0)>0){b=0;do{c[a+(b<<2)>>2]=c[m+(b<<2)>>2];b=b+1|0}while((b|0)!=(o|0));if(!i){f=a;h=a;i=a;b=a;break}}else if((m|0)==0|(i|0)==0){f=a;h=a;i=a;b=a;break}c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);f=a;h=a;i=a;b=a}else{f=j;e=o;a=m}}else{f=j;a=m}while(0);c[a+(o<<2)>>2]=k;j=f;f=o+1|0}else{i=b;b=m;f=n}while(0);if((f|0)>0){m=b;b=i;o=f}else break}if((a|0)==0|(j|0)==0)return;c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0);return}function Ve(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0;f=l;l=l+256|0;bj(11883);c[f+32>>2]=4204;k=f+32+36|0;c[k>>2]=c[b>>2];c[k+4>>2]=c[b+4>>2];c[k+8>>2]=c[b+8>>2];c[k+12>>2]=c[b+12>>2];m=f+32+52|0;c[m>>2]=c[d>>2];c[m+4>>2]=c[d+4>>2];c[m+8>>2]=c[d+8>>2];c[m+12>>2]=c[d+12>>2];c[f+32+212>>2]=a;c[f+32+216>>2]=e;c[f+32+68>>2]=1065353216;c[f+32+72>>2]=0;c[f+32+72+4>>2]=0;c[f+32+72+8>>2]=0;c[f+32+72+12>>2]=0;c[f+32+88>>2]=1065353216;c[f+32+92>>2]=0;c[f+32+92+4>>2]=0;c[f+32+92+8>>2]=0;c[f+32+92+12>>2]=0;c[f+32+108>>2]=1065353216;c[f+32+112>>2]=0;c[f+32+116>>2]=c[k>>2];c[f+32+116+4>>2]=c[k+4>>2];c[f+32+116+8>>2]=c[k+8>>2];c[f+32+116+12>>2]=c[k+12>>2];c[f+32+132>>2]=1065353216;c[f+32+136>>2]=0;c[f+32+136+4>>2]=0;c[f+32+136+8>>2]=0;c[f+32+136+12>>2]=0;c[f+32+152>>2]=1065353216;c[f+32+156>>2]=0;c[f+32+156+4>>2]=0;c[f+32+156+8>>2]=0;c[f+32+156+12>>2]=0;c[f+32+172>>2]=1065353216;c[f+32+176>>2]=0;c[f+32+180>>2]=c[d>>2];c[f+32+180+4>>2]=c[d+4>>2];c[f+32+180+8>>2]=c[d+8>>2];c[f+32+180+12>>2]=c[d+12>>2];n=+g[d>>2]-+g[b>>2];j=+g[d+4>>2]-+g[b+4>>2];i=+g[d+8>>2]-+g[b+8>>2];h=1.0/+C(+(n*n+j*j+i*i));q=n*h==0.0?1000000015047466219876688.0e6:1.0/(n*h);g[f+32+4>>2]=q;p=j*h==0.0?1000000015047466219876688.0e6:1.0/(j*h);g[f+32+8>>2]=p;o=i*h==0.0?1000000015047466219876688.0e6:1.0/(i*h);g[f+32+12>>2]=o;c[f+32+20>>2]=q<0.0&1;c[f+32+24>>2]=p<0.0&1;c[f+32+28>>2]=o<0.0&1;g[f+32+32>>2]=n*h*(+g[m>>2]-+g[k>>2])+j*h*(+g[f+32+56>>2]-+g[f+32+40>>2])+i*h*(+g[f+32+60>>2]-+g[f+32+44>>2]);a=c[a+68>>2]|0;e=c[(c[a>>2]|0)+24>>2]|0;c[f+16>>2]=0;c[f+16+4>>2]=0;c[f+16+8>>2]=0;c[f+16+12>>2]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;Tb[e&7](a,b,d,f+32|0,f+16|0,f);b=c[2405]|0;a=(c[b+16>>2]|0)+-1|0;c[b+16>>2]=a;if(a|0){l=f;return}do if(c[b+4>>2]|0){Za(f+32|0,0)|0;m=c[6471]|0;g[b+8>>2]=+g[b+8>>2]+ +(((c[f+32+4>>2]|0)-(c[m+4>>2]|0)+(((c[f+32>>2]|0)-(c[m>>2]|0)|0)*1e6|0)-(c[b+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[b+16>>2]|0)){b=c[2405]|0;break}else{l=f;return}}while(0);c[2405]=c[b+20>>2];l=f;return}function We(b,d){b=b|0;d=+d;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0.0;s=l;l=l+16|0;bj(12376);e=c[b+232>>2]|0;if((e|0)>0){r=0;do{q=c[(c[b+240>>2]|0)+(r<<2)>>2]|0;if(!(c[q+204>>2]&3)){n=+g[q+444>>2];f=+D(+(1.0-n),+d);i=f*+g[q+312>>2];g[q+312>>2]=i;h=f*+g[q+316>>2];g[q+316>>2]=h;f=f*+g[q+320>>2];g[q+320>>2]=f;p=+g[q+448>>2];m=+D(+(1.0-p),+d);j=m*+g[q+328>>2];g[q+328>>2]=j;k=m*+g[q+332>>2];g[q+332>>2]=k;m=m*+g[q+336>>2];g[q+336>>2]=m;do if(a[q+452>>0]|0){if(m*m+(j*j+k*k)<+g[q+464>>2]?i*i+h*h+f*f<+g[q+460>>2]:0){t=+g[q+456>>2];g[q+328>>2]=j*t;g[q+332>>2]=t*k;g[q+336>>2]=t*m;g[q+312>>2]=t*i;g[q+316>>2]=t*h;g[q+320>>2]=t*f;i=t*i;h=t*h;f=t*f;o=j*t;k=t*k;m=t*m}else o=j;j=+C(+(i*i+h*h+f*f));do if(j.004999999888241291){i=i-i*(1.0/j)*.004999999888241291;g[q+312>>2]=i;h=h-h*(1.0/j)*.004999999888241291;g[q+316>>2]=h;f=f-f*(1.0/j)*.004999999888241291;g[q+320>>2]=f;break}else{c[q+312>>2]=0;c[q+312+4>>2]=0;c[q+312+8>>2]=0;c[q+312+12>>2]=0;i=0.0;h=0.0;f=0.0;break}while(0);j=+C(+(o*o+k*k+m*m));if(j.004999999888241291){g[q+328>>2]=o-o*(1.0/j)*.004999999888241291;g[q+332>>2]=k-k*(1.0/j)*.004999999888241291;g[q+336>>2]=m-m*(1.0/j)*.004999999888241291;break}else{c[q+328>>2]=0;c[q+328+4>>2]=0;c[q+328+8>>2]=0;c[q+328+12>>2]=0;break}}while(0);Ig(q+4|0,i,h,f,q+328|0,d,q+68|0);e=c[b+232>>2]|0}r=r+1|0}while((r|0)<(e|0))}e=c[2405]|0;b=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=b;if(b|0){l=s;return}do if(c[e+4>>2]|0){Za(s|0,0)|0;b=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[s+4>>2]|0)-(c[b+4>>2]|0)+(((c[s>>2]|0)-(c[b>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[e+16>>2]|0)){e=c[2405]|0;break}else{l=s;return}}while(0);c[2405]=c[e+20>>2];l=s;return}function Xe(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b>>2]|0;do if((e|0)>3)if(!(a[d>>0]&8)){c[b>>2]=e+-1;f=b+4+(e+-1<<4)|0;c[b+52>>2]=c[f>>2];c[b+52+4>>2]=c[f+4>>2];c[b+52+8>>2]=c[f+8>>2];c[b+52+12>>2]=c[f+12>>2];f=b+84+(e+-1<<4)|0;c[b+132>>2]=c[f>>2];c[b+132+4>>2]=c[f+4>>2];c[b+132+8>>2]=c[f+8>>2];c[b+132+12>>2]=c[f+12>>2];f=b+164+(e+-1<<4)|0;c[b+212>>2]=c[f>>2];c[b+212+4>>2]=c[f+4>>2];c[b+212+8>>2]=c[f+8>>2];c[b+212+12>>2]=c[f+12>>2];e=e+-1|0;f=6}else f=6;else{if((e|0)==3){e=3;f=6;break}if((e|0)>1){e=2;f=10;break}if((e|0)==1){e=1;break}else return}while(0);if((f|0)==6)if(!(a[d>>0]&4)){e=e+-1|0;c[b>>2]=e;c[b+36>>2]=c[b+4+(e<<4)>>2];c[b+36+4>>2]=c[b+4+(e<<4)+4>>2];c[b+36+8>>2]=c[b+4+(e<<4)+8>>2];c[b+36+12>>2]=c[b+4+(e<<4)+12>>2];c[b+116>>2]=c[b+84+(e<<4)>>2];c[b+116+4>>2]=c[b+84+(e<<4)+4>>2];c[b+116+8>>2]=c[b+84+(e<<4)+8>>2];c[b+116+12>>2]=c[b+84+(e<<4)+12>>2];c[b+196>>2]=c[b+164+(e<<4)>>2];c[b+196+4>>2]=c[b+164+(e<<4)+4>>2];c[b+196+8>>2]=c[b+164+(e<<4)+8>>2];c[b+196+12>>2]=c[b+164+(e<<4)+12>>2];f=10}else f=10;if((f|0)==10)if(!(a[d>>0]&2)){e=e+-1|0;c[b>>2]=e;c[b+20>>2]=c[b+4+(e<<4)>>2];c[b+20+4>>2]=c[b+4+(e<<4)+4>>2];c[b+20+8>>2]=c[b+4+(e<<4)+8>>2];c[b+20+12>>2]=c[b+4+(e<<4)+12>>2];c[b+100>>2]=c[b+84+(e<<4)>>2];c[b+100+4>>2]=c[b+84+(e<<4)+4>>2];c[b+100+8>>2]=c[b+84+(e<<4)+8>>2];c[b+100+12>>2]=c[b+84+(e<<4)+12>>2];c[b+180>>2]=c[b+164+(e<<4)>>2];c[b+180+4>>2]=c[b+164+(e<<4)+4>>2];c[b+180+8>>2]=c[b+164+(e<<4)+8>>2];c[b+180+12>>2]=c[b+164+(e<<4)+12>>2]}if(a[d>>0]&1)return;f=e+-1|0;c[b>>2]=f;c[b+4>>2]=c[b+4+(f<<4)>>2];c[b+4+4>>2]=c[b+4+(f<<4)+4>>2];c[b+4+8>>2]=c[b+4+(f<<4)+8>>2];c[b+4+12>>2]=c[b+4+(f<<4)+12>>2];c[b+84>>2]=c[b+84+(f<<4)>>2];c[b+84+4>>2]=c[b+84+(f<<4)+4>>2];c[b+84+8>>2]=c[b+84+(f<<4)+8>>2];c[b+84+12>>2]=c[b+84+(f<<4)+12>>2];c[b+164>>2]=c[b+164+(f<<4)>>2];c[b+164+4>>2]=c[b+164+(f<<4)+4>>2];c[b+164+8>>2]=c[b+164+(f<<4)+8>>2];c[b+164+12>>2]=c[b+164+(f<<4)+12>>2];return}function Ye(b){b=b|0;var d=0,e=0;c[b>>2]=5416;if(a[b+20>>0]|0){d=c[b+16>>2]|0;e=c[d+16>>2]|0;if(e){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);d=c[b+16>>2]|0}if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}}if(a[b+12>>0]|0){d=c[b+8>>2]|0;e=c[d+16>>2]|0;if(e){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);d=c[b+8>>2]|0}if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}}d=c[b+32>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+32>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+36>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+36>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+40>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+40>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+44>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+44>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+48>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+48>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+52>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+52>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+56>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+56>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+60>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+60>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+76>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+76>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+80>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+80>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+72>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+72>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+88>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+88>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+84>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+84>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+24>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}d=c[b+28>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+28>>2]|0;if(!d)return;c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);return}function Ze(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;a:do if(!(GC(b,c[d+8>>2]|0)|0)){if(!(GC(b,c[d>>2]|0)|0)){i=c[b+12>>2]|0;Un(b+16|0,d,e,f,g);if((i|0)<=1)break;h=c[b+8>>2]|0;if((h&2|0)==0?(c[d+36>>2]|0)!=1:0){if(!(h&1)){h=b+24|0;while(1){if(a[d+54>>0]|0)break a;if((c[d+36>>2]|0)==1)break a;Un(h,d,e,f,g);h=h+8|0;if(h>>>0>=(b+16+(i<<3)|0)>>>0)break a}}else h=b+24|0;while(1){if(a[d+54>>0]|0)break a;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==1:0)break a;Un(h,d,e,f,g);h=h+8|0;if(h>>>0>=(b+16+(i<<3)|0)>>>0)break a}}else h=b+24|0;while(1){if(a[d+54>>0]|0)break a;Un(h,d,e,f,g);h=h+8|0;if(h>>>0>=(b+16+(i<<3)|0)>>>0)break a}}if((c[d+16>>2]|0)!=(e|0)?(c[d+20>>2]|0)!=(e|0):0){c[d+32>>2]=f;if((c[d+44>>2]|0)==4)break;f=b+16+(c[b+12>>2]<<3)|0;k=0;h=0;j=b+16|0;b:while(1){if(j>>>0>=f>>>0){i=18;break}a[d+52>>0]=0;a[d+53>>0]=0;Cn(j,d,e,e,1,g);if(a[d+54>>0]|0){i=18;break}do if(a[d+53>>0]|0){if(!(a[d+52>>0]|0))if(!(c[b+8>>2]&1)){h=1;i=18;break b}else{i=k;h=1;break}if((c[d+24>>2]|0)==1){i=23;break b}if(!(c[b+8>>2]&2)){i=23;break b}else{i=1;h=1}}else i=k;while(0);k=i;j=j+8|0}do if((i|0)==18){if((!k?(c[d+20>>2]=e,c[d+40>>2]=(c[d+40>>2]|0)+1,(c[d+36>>2]|0)==1):0)?(c[d+24>>2]|0)==2:0){a[d+54>>0]=1;if(h){i=23;break}else{h=4;break}}if(h)i=23;else h=4}while(0);if((i|0)==23)h=3;c[d+44>>2]=h;break}if((f|0)==1)c[d+32>>2]=1}else Kr(d,e,f);while(0);return}function _e(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0;d=c[a+748>>2]|0;if((d|0)!=4){c[a+748>>2]=d+1;x=d;w=(x|0)>0;x=w?x:0;a=a+4+(x*184|0)|0;_h(a|0,b|0,184)|0;return x|0}y=+g[b+80>>2];v=+g[a+84>>2];u=v>2];s=t>2];w=+g[a+636>>2]<(r>31;y=+g[b>>2];if(d){e=+g[a+188>>2];f=+g[b+4>>2];h=+g[a+192>>2];m=+g[b+8>>2];l=+g[a+196>>2];p=+g[a+556>>2];q=+g[a+372>>2];r=+g[a+560>>2];o=+g[a+376>>2];s=+g[a+564>>2];k=+g[a+380>>2];i=((y-e)*(r-o)-(f-h)*(p-q))*((y-e)*(r-o)-(f-h)*(p-q))+(((f-h)*(s-k)-(m-l)*(r-o))*((f-h)*(s-k)-(m-l)*(r-o))+((m-l)*(p-q)-(y-e)*(s-k))*((m-l)*(p-q)-(y-e)*(s-k)));if((d|0)==1){v=+g[a+4>>2];j=+g[a+8>>2];n=+g[a+12>>2];t=e;u=h;e=s;h=0.0;x=7}else{t=e;u=h;x=6}}else{t=+g[a+188>>2];u=+g[a+192>>2];l=+g[a+196>>2];f=+g[b+4>>2];m=+g[b+8>>2];q=+g[a+372>>2];p=+g[a+556>>2];o=+g[a+376>>2];r=+g[a+560>>2];k=+g[a+380>>2];s=+g[a+564>>2];i=0.0;x=6}if((x|0)==6){e=+g[a+4>>2];j=+g[a+8>>2];C=f-j;n=+g[a+12>>2];z=m-n;v=p-q;A=r-o;h=s-k;h=((y-e)*A-C*v)*((y-e)*A-C*v)+((C*h-z*A)*(C*h-z*A)+(z*v-(y-e)*h)*(z*v-(y-e)*h));if((d|0)==2){s=e;r=t;p=u;e=0.0;x=8}else{v=e;e=s;x=7}}if((x|0)==7){C=y-v;D=f-j;z=m-n;A=p-t;s=r-u;e=e-l;e=(C*s-D*A)*(C*s-D*A)+((D*e-z*s)*(D*e-z*s)+(z*A-C*e)*(z*A-C*e));if(w)f=0.0;else{s=v;r=t;p=u;x=8}}if((x|0)==8){D=y-s;y=f-j;A=m-n;C=q-r;z=o-p;f=k-l;f=(D*z-y*C)*(D*z-y*C)+((y*f-A*z)*(y*f-A*z)+(A*C-D*f)*(A*C-D*f))}D=+B(+i);A=+B(+h);y=+B(+e);v=+B(+f);C=D>-999999984306749440.0?D:-999999984306749440.0;z=A>C?A:C;x=v>(y>z?y:z)?3:y>z?2:A>C?1:(D>-999999984306749440.0^1)<<31>>31;w=(x|0)>0;x=w?x:0;a=a+4+(x*184|0)|0;_h(a|0,b|0,184)|0;return x|0}function $e(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;c[b+16>>2]=c[a+4>>2];c[b+20>>2]=c[a+8>>2];c[b+24>>2]=c[a+12>>2];c[b+28>>2]=c[a+16>>2];c[b+32>>2]=c[a+20>>2];c[b+36>>2]=c[a+24>>2];c[b+40>>2]=c[a+28>>2];c[b+44>>2]=c[a+32>>2];c[b+48>>2]=c[a+36>>2];c[b+52>>2]=c[a+40>>2];c[b+56>>2]=c[a+44>>2];c[b+60>>2]=c[a+48>>2];c[b+64>>2]=c[a+52>>2];c[b+68>>2]=c[a+56>>2];c[b+72>>2]=c[a+60>>2];c[b+76>>2]=c[a+64>>2];c[b+80>>2]=c[a+68>>2];c[b+84>>2]=c[a+72>>2];c[b+88>>2]=c[a+76>>2];c[b+92>>2]=c[a+80>>2];c[b+96>>2]=c[a+84>>2];c[b+100>>2]=c[a+88>>2];c[b+104>>2]=c[a+92>>2];c[b+108>>2]=c[a+96>>2];c[b+112>>2]=c[a+100>>2];c[b+116>>2]=c[a+104>>2];c[b+120>>2]=c[a+108>>2];c[b+124>>2]=c[a+112>>2];c[b+128>>2]=c[a+116>>2];c[b+132>>2]=c[a+120>>2];c[b+136>>2]=c[a+124>>2];c[b+140>>2]=c[a+128>>2];c[b+144>>2]=c[a+132>>2];c[b+148>>2]=c[a+136>>2];c[b+152>>2]=c[a+140>>2];c[b+156>>2]=c[a+144>>2];c[b+160>>2]=c[a+148>>2];c[b+164>>2]=c[a+152>>2];c[b+168>>2]=c[a+156>>2];c[b+172>>2]=c[a+160>>2];c[b+176>>2]=c[a+164>>2];c[b+180>>2]=c[a+168>>2];c[b+184>>2]=c[a+172>>2];c[b+188>>2]=c[a+176>>2];c[b+224>>2]=c[a+180>>2];c[b+192>>2]=c[a+184>>2];c[b>>2]=0;c[b+4>>2]=sb[c[(c[d>>2]|0)+28>>2]&31](d,c[a+192>>2]|0)|0;c[b+8>>2]=0;c[b+228>>2]=c[a+204>>2];c[b+232>>2]=c[a+208>>2];c[b+236>>2]=c[a+212>>2];c[b+240>>2]=c[a+216>>2];c[b+196>>2]=c[a+220>>2];c[b+200>>2]=c[a+224>>2];c[b+204>>2]=c[a+232>>2];c[b+208>>2]=c[a+228>>2];c[b+244>>2]=c[a+236>>2];e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;f=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b+12>>2]=f;if(!f){d=a+244|0;d=c[d>>2]|0;f=b+212|0;c[f>>2]=d;f=a+248|0;f=c[f>>2]|0;d=b+216|0;c[d>>2]=f;d=a+252|0;d=c[d>>2]|0;f=b+220|0;c[f>>2]=d;a=a+256|0;a=c[a>>2]|0;f=b+248|0;c[f>>2]=a;return 13356}Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);d=a+244|0;d=c[d>>2]|0;f=b+212|0;c[f>>2]=d;f=a+248|0;f=c[f>>2]|0;d=b+216|0;c[d>>2]=f;d=a+252|0;d=c[d>>2]|0;f=b+220|0;c[f>>2]=d;a=a+256|0;a=c[a>>2]|0;f=b+248|0;c[f>>2]=a;return 13356}function af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0;if(!(c[a>>2]|0)){c[a>>2]=d;c[d+32>>2]=0;return}e=c[b+40>>2]|0;if(e){i=+g[d>>2]+ +g[d+16>>2];k=+g[d+4>>2]+ +g[d+20>>2];j=+g[d+8>>2]+ +g[d+24>>2];do{p=c[b+36>>2]|0;n=+B(+(i-(+g[p>>2]+ +g[p+16>>2])))+ +B(+(k-(+g[p+4>>2]+ +g[p+20>>2])))+ +B(+(j-(+g[p+8>>2]+ +g[p+24>>2])));b=c[b+36+((!(n<+B(+(i-(+g[e>>2]+ +g[e+16>>2])))+ +B(+(k-(+g[e+4>>2]+ +g[e+20>>2])))+ +B(+(j-(+g[e+8>>2]+ +g[e+24>>2]))))&1)<<2)>>2]|0;e=c[b+40>>2]|0}while((e|0)!=0)}o=b+32|0;p=c[o>>2]|0;e=c[a+4>>2]|0;if(!e){c[6472]=(c[6472]|0)+1;e=ic(63)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=e;h=f+44|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0))}else c[a+4>>2]=0;c[e+32>>2]=p;c[e+36>>2]=0;f=e+40|0;c[f>>2]=0;q=+g[d>>2];n=+g[b>>2];n=q>2]=n;q=+g[d+16>>2];k=+g[b+16>>2];k=q>k?q:k;g[e+16>>2]=k;q=+g[d+4>>2];m=+g[b+4>>2];m=q>2]=m;q=+g[d+20>>2];j=+g[b+20>>2];j=q>j?q:j;g[e+20>>2]=j;q=+g[d+8>>2];l=+g[b+8>>2];l=q>2]=l;q=+g[d+24>>2];i=+g[b+24>>2];i=q>i?q:i;g[e+24>>2]=i;if(!p){c[e+36>>2]=b;c[o>>2]=e;c[f>>2]=d;c[d+32>>2]=e;c[a>>2]=e;return}c[p+36+(((c[(c[o>>2]|0)+40>>2]|0)==(b|0)&1)<<2)>>2]=e;c[e+36>>2]=b;c[o>>2]=e;c[f>>2]=d;c[d+32>>2]=e;b=p;while(1){e=b+4|0;if(((((+g[b>>2]<=n?+g[e>>2]<=m:0)?+g[b+8>>2]<=l:0)?+g[b+16>>2]>=k:0)?+g[b+20>>2]>=j:0)?+g[b+24>>2]>=i:0){e=21;break}d=c[b+36>>2]|0;a=c[b+40>>2]|0;q=+g[d>>2];n=+g[a>>2];n=q>2]=n;q=+g[d+16>>2];k=+g[a+16>>2];k=q>k?q:k;g[b+16>>2]=k;q=+g[d+4>>2];m=+g[a+4>>2];m=q>2]=m;q=+g[d+20>>2];j=+g[a+20>>2];j=q>j?q:j;g[b+20>>2]=j;q=+g[d+8>>2];l=+g[a+8>>2];l=q>2]=l;q=+g[d+24>>2];i=+g[a+24>>2];i=q>i?q:i;g[b+24>>2]=i;b=c[b+32>>2]|0;if(!b){e=21;break}}if((e|0)==21)return}function bf(a,b,f){a=a|0;b=b|0;f=f|0;var i=0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;t=l;l=l+32|0;o=c[a+4>>2]|0;Wb[c[(c[o>>2]|0)+16>>2]&3](o,t+28|0,t+24|0,t+20|0,t+16|0,t+12|0,t+8|0,t+4|0,t,b);o=(c[t+12>>2]|0)+(O(c[t+8>>2]|0,f)|0)|0;r=c[a+4>>2]|0;n=c[t>>2]|0;switch(n|0){case 3:{i=e[o+4>>1]|0;break}case 2:{i=c[o+8>>2]|0;break}default:i=d[o+2>>0]|0}s=(c[t+20>>2]|0)==0;q=c[t+28>>2]|0;p=c[t+16>>2]|0;i=q+(O(p,i)|0)|0;if(s){k=+g[i+8>>2];m=+g[i>>2]*+g[r+4>>2];j=+g[i+4>>2]*+g[r+8>>2]}else{k=+h[i+16>>3];m=+h[i>>3]*+g[r+4>>2];j=+h[i+8>>3]*+g[r+8>>2]}k=k*+g[r+12>>2];g[a+44>>2]=m;g[a+48>>2]=j;g[a+52>>2]=k;g[a+56>>2]=0.0;switch(n|0){case 3:{i=e[o+2>>1]|0;break}case 2:{i=c[o+4>>2]|0;break}default:i=d[o+1>>0]|0}i=q+(O(p,i)|0)|0;if(s){k=+g[i+8>>2];m=+g[i>>2]*+g[r+4>>2];j=+g[i+4>>2]*+g[r+8>>2]}else{k=+h[i+16>>3];m=+h[i>>3]*+g[r+4>>2];j=+h[i+8>>3]*+g[r+8>>2]}k=k*+g[r+12>>2];g[a+28>>2]=m;g[a+32>>2]=j;g[a+36>>2]=k;g[a+40>>2]=0.0;switch(n|0){case 3:{i=e[o>>1]|0;break}case 2:{i=c[o>>2]|0;break}default:i=d[o>>0]|0}i=q+(O(p,i)|0)|0;if(s){u=+g[i+8>>2];j=+g[i>>2]*+g[r+4>>2];k=+g[i+4>>2]*+g[r+8>>2];m=+g[r+12>>2];m=u*m;r=a+12|0;g[r>>2]=j;r=a+16|0;g[r>>2]=k;r=a+20|0;g[r>>2]=m;r=a+24|0;g[r>>2]=0.0;r=a+8|0;r=c[r>>2]|0;q=c[r>>2]|0;q=q+8|0;q=c[q>>2]|0;s=a+12|0;Nb[q&127](r,s,b,f);a=c[a+4>>2]|0;f=c[a>>2]|0;f=f+24|0;f=c[f>>2]|0;Gb[f&127](a,b);l=t;return}else{j=+h[i+16>>3];k=+h[i>>3]*+g[r+4>>2];m=+h[i+8>>3]*+g[r+8>>2];u=+g[r+12>>2];u=j*u;r=a+12|0;g[r>>2]=k;r=a+16|0;g[r>>2]=m;r=a+20|0;g[r>>2]=u;r=a+24|0;g[r>>2]=0.0;r=a+8|0;r=c[r>>2]|0;q=c[r>>2]|0;q=q+8|0;q=c[q>>2]|0;s=a+12|0;Nb[q&127](r,s,b,f);a=c[a+4>>2]|0;f=c[a>>2]|0;f=f+24|0;f=c[f>>2]|0;Gb[f&127](a,b);l=t;return}}function cf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0;q=c[b+9288>>2]|0;if(!q){c[b>>2]=5;b=0;return b|0}i=c[q+48>>2]|0;if(i|0)c[i+44>>2]=c[q+44>>2];i=c[q+44>>2]|0;if(i|0)c[i+48>>2]=c[q+48>>2];if((c[b+9288>>2]|0)==(q|0))c[b+9288>>2]=c[q+48>>2];c[b+9292>>2]=(c[b+9292>>2]|0)+-1;c[q+44>>2]=0;c[q+48>>2]=c[b+9280>>2];i=c[b+9280>>2]|0;if(i|0)c[i+44>>2]=q;c[b+9280>>2]=q;c[b+9284>>2]=(c[b+9284>>2]|0)+1;a[q+55>>0]=0;c[q+20>>2]=d;c[q+24>>2]=e;c[q+28>>2]=f;l=+g[d+16>>2];k=+g[e+16>>2]-l;p=+g[d+20>>2];o=+g[e+20>>2]-p;n=+g[d+24>>2];m=+g[e+24>>2]-n;l=+g[f+16>>2]-l;p=+g[f+20>>2]-p;n=+g[f+24>>2]-n;g[q>>2]=o*n-m*p;g[q+4>>2]=m*l-k*n;g[q+8>>2]=k*p-o*l;g[q+12>>2]=0.0;j=+C(+((o*n-m*p)*(o*n-m*p)+(m*l-k*n)*(m*l-k*n)+(k*p-o*l)*(k*p-o*l)));if(j>9.999999747378752e-05){if((!(Ok(o*n-m*p,m*l-k*n,k*p-o*l,+g[d+16>>2],+g[d+20>>2],+g[d+24>>2],+g[e+16>>2],+g[e+20>>2],+g[e+24>>2],q+16|0)|0)?!(Ok(+g[q>>2],+g[q+4>>2],+g[q+8>>2],+g[e+16>>2],+g[e+20>>2],+g[e+24>>2],+g[f+16>>2],+g[f+20>>2],+g[f+24>>2],q+16|0)|0):0)?!(Ok(+g[q>>2],+g[q+4>>2],+g[q+8>>2],+g[f+16>>2],+g[f+20>>2],+g[f+24>>2],+g[d+16>>2],+g[d+20>>2],+g[d+24>>2],q+16|0)|0):0)g[q+16>>2]=(+g[d+16>>2]*+g[q>>2]+ +g[d+20>>2]*+g[q+4>>2]+ +g[d+24>>2]*+g[q+8>>2])/j;g[q>>2]=1.0/j*+g[q>>2];g[q+4>>2]=1.0/j*+g[q+4>>2];g[q+8>>2]=1.0/j*+g[q+8>>2];if(h){b=q;return b|0}if(!(+g[q+16>>2]>=-9.999999747378752e-06))i=3;else{b=q;return b|0}}else i=2;c[b>>2]=i;i=c[q+48>>2]|0;if(i|0)c[i+44>>2]=c[q+44>>2];i=c[q+44>>2]|0;if(i|0)c[i+48>>2]=c[q+48>>2];if((c[b+9280>>2]|0)==(q|0))c[b+9280>>2]=c[q+48>>2];c[b+9284>>2]=(c[b+9284>>2]|0)+-1;c[q+44>>2]=0;c[q+48>>2]=c[b+9288>>2];i=c[b+9288>>2]|0;if(i|0)c[i+44>>2]=q;c[b+9288>>2]=q;c[b+9292>>2]=(c[b+9292>>2]|0)+1;b=0;return b|0}function df(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;f=c[d+8>>2]|0;if((f|0)>0){h=c[d+16>>2]|0;j=0;e=0;do{i=c[h+(j<<2)>>2]|0;if(!(c[i+204>>2]&3)){c[i+208>>2]=e;e=e+1|0}c[i+212>>2]=-1;g[i+244>>2]=1.0;j=j+1|0}while((j|0)!=(f|0));j=e}else j=0;i=c[b+8>>2]|0;if((i|0)<(j|0)){if((c[b+12>>2]|0)<(j|0)){if(!j){f=i;h=0}else{c[6472]=(c[6472]|0)+1;e=ic((j<<3|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[b+8>>2]|0;h=e}if((f|0)>0){e=0;do{m=(c[b+16>>2]|0)+(e<<3)|0;k=c[m+4>>2]|0;l=h+(e<<3)|0;c[l>>2]=c[m>>2];c[l+4>>2]=k;e=e+1|0}while((e|0)!=(f|0))}e=c[b+16>>2]|0;if(e|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=h;c[b+12>>2]=j;f=b+16|0}else f=b+16|0;e=i;do{m=(c[f>>2]|0)+(e<<3)|0;c[m>>2]=0;c[m+4>>2]=0;e=e+1|0}while((e|0)!=(j|0))}c[b+8>>2]=j;if((j|0)>0){e=c[b+16>>2]|0;f=0;do{c[e+(f<<3)>>2]=f;c[e+(f<<3)+4>>2]=1;f=f+1|0}while((f|0)!=(j|0))}e=c[d+68>>2]|0;e=qb[c[(c[e>>2]|0)+36>>2]&127](e)|0;l=qb[c[(c[e>>2]|0)+36>>2]&127](e)|0;if(!l)return;d=qb[c[(c[e>>2]|0)+20>>2]&127](e)|0;if((l|0)<=0)return;k=0;do{e=c[c[d+(k<<4)>>2]>>2]|0;f=c[c[d+(k<<4)+4>>2]>>2]|0;if((e|0?(f|0?(c[e+204>>2]&7|0)==0:0):0)?(c[f+204>>2]&7|0)==0:0){h=c[e+208>>2]|0;e=c[f+208>>2]|0;j=c[b+16>>2]|0;f=c[j+(h<<3)>>2]|0;if((f|0)!=(h|0)){i=j+(h<<3)|0;do{h=j+(f<<3)|0;c[i>>2]=c[h>>2];h=c[h>>2]|0;i=j+(h<<3)|0;f=c[i>>2]|0}while((h|0)!=(f|0))}f=c[j+(e<<3)>>2]|0;if((f|0)!=(e|0)){i=j+(e<<3)|0;do{e=j+(f<<3)|0;c[i>>2]=c[e>>2];e=c[e>>2]|0;i=j+(e<<3)|0;f=c[i>>2]|0}while((e|0)!=(f|0))}if((h|0)!=(e|0)){c[j+(h<<3)>>2]=e;m=j+(e<<3)+4|0;c[m>>2]=(c[m>>2]|0)+(c[j+(h<<3)+4>>2]|0)}}k=k+1|0}while((k|0)!=(l|0));return}function ef(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0;r=l;l=l+64|0;Eg(c[b+116>>2]|0,d,0);e=+g[d+204>>2]+ +g[d+212>>2];p=e*+g[d+56>>2]+ +g[d+40>>2];q=e*+g[d+60>>2]+ +g[d+44>>2];g[d+16>>2]=+g[d+52>>2]*e+ +g[d+36>>2];g[d+20>>2]=p;g[d+24>>2]=q;g[d+28>>2]=0.0;g[r+32>>2]=-1.0;s=c[b+100>>2]|0;s=vb[c[(c[s>>2]|0)+8>>2]&31](s,d+36|0,d+16|0,r)|0;c[d+88>>2]=0;if(!s){c[d+32>>2]=c[d+204>>2];g[d+272>>2]=0.0;q=-+g[d+56>>2];p=-+g[d+60>>2];g[d>>2]=-+g[d+52>>2];g[d+4>>2]=q;g[d+8>>2]=p;g[d+12>>2]=0.0;p=1.0;q=-1.0;s=d+268|0;g[s>>2]=p;l=r;return +q}q=e*+g[r+32>>2];c[d>>2]=c[r+16>>2];c[d+4>>2]=c[r+16+4>>2];c[d+8>>2]=c[r+16+8>>2];c[d+12>>2]=c[r+16+12>>2];a[d+84>>0]=1;if((a[22760]|0)==0?Yy(22760)|0:0){c[r+40>>2]=0;c[r+40+4>>2]=0;c[r+40+8>>2]=0;c[r+40+12>>2]=0;dg(24036,0.0,0,0,r+40|0)}c[6060]=c[6060]|1;g[6095]=0.0;e=+g[6105]*0.0;f=+g[6106]*0.0;g[6100]=+g[6104]*0.0;g[6101]=e;g[6102]=f;g[6103]=0.0;c[6108]=0;c[6109]=0;c[6110]=0;c[6111]=0;f=+g[6097]*0.0;e=+g[6098]*0.0;g[6149]=+g[6096]*0.0;g[6150]=f;g[6151]=e;g[6152]=0.0;c[d+88>>2]=24036;e=q-+g[d+212>>2];g[d+32>>2]=e;f=+g[d+204>>2];h=+g[d+208>>2]*.009999999776482582;if(e>2]=f-h;e=f-h}if(e>f+h)g[d+32>>2]=f+h;c[d+16>>2]=c[r>>2];c[d+16+4>>2]=c[r+4>>2];c[d+16+8>>2]=c[r+8>>2];c[d+16+12>>2]=c[r+12>>2];m=+g[d>>2];n=+g[d+4>>2];o=+g[d+8>>2];p=m*+g[d+52>>2]+n*+g[d+56>>2]+o*+g[d+60>>2];b=c[b+116>>2]|0;i=+g[d+16>>2]-+g[b+52>>2];k=+g[d+20>>2]-+g[b+56>>2];j=+g[d+24>>2]-+g[b+60>>2];e=+g[b+332>>2];f=+g[b+336>>2];h=+g[b+328>>2];if(!(p>=-.10000000149011612)){g[d+272>>2]=-1.0/p*(m*(e*j-k*f+ +g[b+312>>2])+n*(i*f-j*h+ +g[b+316>>2])+o*(k*h-i*e+ +g[b+320>>2]));p=-1.0/p;s=d+268|0;g[s>>2]=p;l=r;return +q}else{g[d+272>>2]=0.0;p=10.0;s=d+268|0;g[s>>2]=p;l=r;return +q}return 0.0}function ff(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;c[6202]=(c[6202]|0)+1;g=c[d+24>>2]|0;if(!g){g=c[e+4>>2]|0;if(!((b[f+6>>1]&(g&65535))<<16>>16)){d=0;return d|0}if(!((b[f+4>>1]&(g>>>16&65535))<<16>>16)){d=0;return d|0}}else if(!(ub[c[(c[g>>2]|0)+8>>2]&63](g,e,f)|0)){d=0;return d|0}l=(c[e+12>>2]|0)>(c[f+12>>2]|0);m=l?f:e;h=c[m+12>>2]|0;l=l?e:f;e=c[l+12>>2]|0;k=((e<<16|h)+~((e<<16|h)<<15)>>10^(e<<16|h)+~((e<<16|h)<<15))*9|0;k=(k>>6^k)+~((k>>6^k)<<11)>>16^(k>>6^k)+~((k>>6^k)<<11);j=c[d+12>>2]|0;g=c[(c[d+44>>2]|0)+((k&j+-1)<<2)>>2]|0;a:do if((g|0)!=-1){f=c[d+16>>2]|0;while(1){if((c[(c[f+(g<<4)>>2]|0)+12>>2]|0)==(h|0)?(c[(c[f+(g<<4)+4>>2]|0)+12>>2]|0)==(e|0):0)break;g=c[(c[d+64>>2]|0)+(g<<2)>>2]|0;if((g|0)==-1)break a}g=f+(g<<4)|0;if(g|0){d=g;return d|0}}while(0);i=c[d+8>>2]|0;if((i|0)==(j|0)){g=j|0?j<<1:1;if((j|0)<(g|0)){if(!g){e=j;f=0}else{c[6472]=(c[6472]|0)+1;e=ic((g<<4|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=c[d+8>>2]|0}if((e|0)>0){h=0;do{n=c[d+16>>2]|0;c[f+(h<<4)>>2]=c[n+(h<<4)>>2];c[f+(h<<4)+4>>2]=c[n+(h<<4)+4>>2];c[f+(h<<4)+8>>2]=c[n+(h<<4)+8>>2];c[f+(h<<4)+12>>2]=c[n+(h<<4)+12>>2];h=h+1|0}while((h|0)!=(e|0))}h=c[d+16>>2]|0;if(h){if(a[d+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);e=c[d+8>>2]|0}c[d+16>>2]=0}a[d+20>>0]=1;c[d+16>>2]=f;c[d+12>>2]=g}else{e=j;g=j}}else{e=i;g=j}c[d+8>>2]=e+1;f=c[d+16>>2]|0;e=c[d+72>>2]|0;if(e){ub[c[(c[e>>2]|0)+8>>2]&63](e,m,l)|0;g=c[d+12>>2]|0}if((j|0)<(g|0)){wf(d);g=(c[d+12>>2]|0)+-1&k}else g=k&j+-1;n=(c[m+12>>2]|0)<(c[l+12>>2]|0);c[f+(i<<4)>>2]=n?m:l;c[f+(i<<4)+4>>2]=n?l:m;c[f+(i<<4)+8>>2]=0;c[f+(i<<4)+8+4>>2]=0;n=(c[d+44>>2]|0)+(g<<2)|0;c[(c[d+64>>2]|0)+(i<<2)>>2]=c[n>>2];c[n>>2]=i;n=f+(i<<4)|0;return n|0}function gf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;u=+g[b>>2];t=+g[b+4>>2];s=+g[b+8>>2];r=1.0/+C(+(u*u+t*t+s*s));y=+g[d>>2];x=+g[d+4>>2];w=+g[d+8>>2];v=1.0/+C(+(y*y+x*x+w*w));B=s*r*x*v-t*r*w*v;A=u*r*w*v-s*r*y*v;z=t*r*y*v-u*r*x*v;d=c[a+28>>2]|0;e=+g[d+4>>2];h=+g[d+20>>2];j=+g[d+36>>2];f=+g[d+8>>2];i=+g[d+24>>2];k=+g[d+40>>2];l=+g[d+12>>2];n=+g[d+28>>2];p=+g[d+44>>2];m=-+g[d+52>>2];o=-+g[d+56>>2];q=-+g[d+60>>2];g[a+48>>2]=z*j+(e*B+h*A);g[a+52>>2]=e*y*v+x*v*h+w*v*j;g[a+56>>2]=u*r*e+t*r*h+s*r*j;g[a+60>>2]=0.0;g[a+64>>2]=B*f+A*i+z*k;g[a+68>>2]=y*v*f+x*v*i+w*v*k;g[a+72>>2]=u*r*f+t*r*i+s*r*k;g[a+76>>2]=0.0;g[a+80>>2]=B*l+A*n+z*p;g[a+84>>2]=y*v*l+x*v*n+w*v*p;g[a+88>>2]=u*r*l+t*r*n+s*r*p;g[a+92>>2]=0.0;g[a+96>>2]=e*0.0+h*0.0+j*0.0+(e*m+h*o+j*q);g[a+100>>2]=f*0.0+i*0.0+k*0.0+(f*m+i*o+k*q);g[a+104>>2]=l*0.0+n*0.0+p*0.0+(l*m+n*o+p*q);g[a+108>>2]=0.0;d=c[a+32>>2]|0;q=+g[d+4>>2];p=+g[d+20>>2];o=+g[d+36>>2];n=+g[d+8>>2];m=+g[d+24>>2];l=+g[d+40>>2];k=+g[d+12>>2];i=+g[d+28>>2];f=+g[d+44>>2];j=-+g[d+52>>2];h=-+g[d+56>>2];e=-+g[d+60>>2];g[a+112>>2]=B*q+A*p+z*o;g[a+116>>2]=y*v*q+x*v*p+w*v*o;g[a+120>>2]=u*r*q+t*r*p+s*r*o;g[a+124>>2]=0.0;g[a+128>>2]=B*n+A*m+z*l;g[a+132>>2]=y*v*n+x*v*m+w*v*l;g[a+136>>2]=u*r*n+t*r*m+s*r*l;g[a+140>>2]=0.0;g[a+144>>2]=B*k+A*i+z*f;g[a+148>>2]=y*v*k+x*v*i+w*v*f;g[a+152>>2]=u*r*k+t*r*i+s*r*f;g[a+156>>2]=0.0;g[a+160>>2]=q*0.0+p*0.0+o*0.0+(q*j+p*h+o*e);g[a+164>>2]=n*0.0+m*0.0+l*0.0+(n*j+m*h+l*e);g[a+168>>2]=k*0.0+i*0.0+f*0.0+(k*j+i*h+f*e);g[a+172>>2]=0.0;bd(a,(c[a+28>>2]|0)+4|0,(c[a+32>>2]|0)+4|0);return}function hf(a,d,f){a=a|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;g=c[a+108>>2]|0;if(g|0)Kb[c[(c[g>>2]|0)+12>>2]&127](g,c[d+60>>2]|0,f);o=c[d+12>>2]|0;p=c[a+60>>2]|0;n=c[a+92>>2]|0;if(!(qb[c[(c[n>>2]|0)+56>>2]&127](n)|0)){n=c[a+92>>2]|0;Kb[c[(c[n>>2]|0)+16>>2]&127](n,p+((o&65535)<<6)|0,f)}n=e[a+56>>1]|0;g=c[a+60>>2]|0;b[g+54>>1]=(e[g+54>>1]|0)+65534;b[g+56>>1]=(e[g+56>>1]|0)+65534;b[g+58>>1]=(e[g+58>>1]|0)+65534;g=b[a+6>>1]|0;m=0;do{k=a+68+(m<<2)|0;l=c[k>>2]|0;f=e[p+((o&65535)<<6)+54+(m<<1)>>1]|0;b[l+(f<<2)>>1]=g;d=b[l+(f<<2)+6>>1]|0;if(!(d<<16>>16))d=l;else{j=(c[a+60>>2]|0)+((e[l+(f<<2)+2>>1]|0)<<6)+54+(m<<1)|0;h=l+(f<<2)|0;while(1){i=h;h=h+4|0;f=b[h>>1]|0;if((g&65535)<(f&65535))break;q=c[a+60>>2]|0;g=d&65535;g=(f&1)==0?q+(g<<6)+48+(m<<1)|0:q+(g<<6)+54+(m<<1)|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;b[j>>1]=(b[j>>1]|0)+1<<16>>16;g=e[i>>1]|e[i+2>>1]<<16;f=e[h>>1]|e[h+2>>1]<<16;b[i>>1]=f;b[i+2>>1]=f>>>16;b[h>>1]=g;b[h+2>>1]=g>>>16;d=b[i+10>>1]|0;if(!(d<<16>>16))break;else g=g&65535}g=b[a+6>>1]|0;d=c[k>>2]|0}f=e[p+((o&65535)<<6)+48+(m<<1)>>1]|0;b[l+(f<<2)>>1]=g;j=d+(f<<2)|0;h=b[j+6>>1]|0;if(h<<16>>16){k=(c[a+60>>2]|0)+((e[d+(f<<2)+2>>1]|0)<<6)+48+(m<<1)|0;i=b[j>>1]|0;d=j;while(1){f=d;d=d+4|0;g=b[d>>1]|0;if((i&65535)<(g&65535))break;j=c[a+60>>2]|0;q=h&65535;g=(g&1)==0?j+(q<<6)+48+(m<<1)|0:j+(q<<6)+54+(m<<1)|0;b[g>>1]=(b[g>>1]|0)+-1<<16>>16;b[k>>1]=(b[k>>1]|0)+1<<16>>16;g=e[f>>1]|e[f+2>>1]<<16;q=e[d>>1]|e[d+2>>1]<<16;b[f>>1]=q;b[f+2>>1]=q>>>16;b[d>>1]=g;b[d+2>>1]=g>>>16;h=b[f+10>>1]|0;if(!(h<<16>>16))break;else i=g&65535}g=b[a+6>>1]|0}b[l+((n<<1)+-1<<2)+2>>1]=0;b[l+((n<<1)+-1<<2)>>1]=g;m=m+1|0}while((m|0)!=3);b[(c[a+60>>2]|0)+((o&65535)<<6)+48>>1]=b[a+64>>1]|0;b[a+64>>1]=o;b[a+56>>1]=(b[a+56>>1]|0)+-1<<16>>16;return}function jf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0;w=l;l=l+32|0;q=c[a+12>>2]|0;r=+g[q+(((e+d|0)/2|0)*24|0)>>2];t=+g[q+(((e+d|0)/2|0)*24|0)+4>>2];u=+g[q+(((e+d|0)/2|0)*24|0)+8>>2];v=+g[q+(((e+d|0)/2|0)*24|0)+16>>2];s=c[q+(((e+d|0)/2|0)*24|0)+20>>2]|0;f=d;h=e;while(1){m=+g[b>>2];n=+g[b+4>>2];o=+g[b+8>>2];p=(r-m)*(r-m)+(t-n)*(t-n)+(u-o)*(u-o);a:while(1){i=+g[q+(f*24|0)+16>>2];do if(i!=v){if(!(i>2]-m;k=+g[q+(f*24|0)+4>>2]-n;j=+g[q+(f*24|0)+8>>2]-o;if(i*i+k*k+j*j!=p)if(i*i+k*k+j*j>2]|0)<(s|0))break;else break a}while(0);f=f+1|0}b:while(1){i=+g[q+(h*24|0)+16>>2];do if(v!=i){if(!(v>2]-m;k=+g[q+(h*24|0)+4>>2]-n;j=+g[q+(h*24|0)+8>>2]-o;if(p!=i*i+k*k+j*j)if(p>2]|0))break;else break b}while(0);h=h+-1|0}if((f|0)<=(h|0)){x=q+(f*24|0)|0;c[w>>2]=c[x>>2];c[w+4>>2]=c[x+4>>2];c[w+8>>2]=c[x+8>>2];c[w+12>>2]=c[x+12>>2];c[w+16>>2]=c[x+16>>2];c[w+20>>2]=c[x+20>>2];q=q+(h*24|0)|0;c[x>>2]=c[q>>2];c[x+4>>2]=c[q+4>>2];c[x+8>>2]=c[q+8>>2];c[x+12>>2]=c[q+12>>2];c[x+16>>2]=c[q+16>>2];c[x+20>>2]=c[q+20>>2];q=(c[a+12>>2]|0)+(h*24|0)|0;c[q>>2]=c[w>>2];c[q+4>>2]=c[w+4>>2];c[q+8>>2]=c[w+8>>2];c[q+12>>2]=c[w+12>>2];c[q+16>>2]=c[w+16>>2];c[q+20>>2]=c[w+20>>2];f=f+1|0;h=h+-1|0}if((f|0)>(h|0))break;q=c[a+12>>2]|0}if((h|0)>(d|0))jf(a,b,d,h);if((f|0)>=(e|0)){l=w;return}jf(a,b,f,e);l=w;return}function kf(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0.0,h=0,i=0,j=0,k=0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0;j=c[a+28>>2]|0;k=c[a+32>>2]|0;e=c[b+8>>2]|0;g[e>>2]=1.0;h=c[b+24>>2]|0;g[e+(h+1<<2)>>2]=1.0;g[e+((h<<1)+2<<2)>>2]=1.0;l=+g[a+300>>2];q=+g[a+304>>2];f=+g[a+308>>2];o=+g[j+4>>2]*l+ +g[j+8>>2]*q+ +g[j+12>>2]*f;m=l*+g[j+20>>2]+q*+g[j+24>>2]+f*+g[j+28>>2];f=l*+g[j+36>>2]+q*+g[j+40>>2]+f*+g[j+44>>2];e=c[b+12>>2]|0;c[e>>2]=0;g[e+4>>2]=f;g[e+8>>2]=-m;g[e+12>>2]=0.0;g[e+(h<<2)>>2]=-f;c[e+(h<<2)+4>>2]=0;g[e+(h<<2)+8>>2]=o;g[e+(h<<2)+12>>2]=0.0;g[e+(h<<1<<2)>>2]=m;g[e+(h<<1<<2)+4>>2]=-o;c[e+(h<<1<<2)+8>>2]=0;g[e+(h<<1<<2)+12>>2]=0.0;e=c[b+16>>2]|0;g[e>>2]=-1.0;g[e+(h+1<<2)>>2]=-1.0;g[e+((h<<1)+2<<2)>>2]=-1.0;q=+g[a+316>>2];l=+g[a+320>>2];d=+g[a+324>>2];p=+g[k+4>>2]*q+ +g[k+8>>2]*l+ +g[k+12>>2]*d;n=q*+g[k+20>>2]+l*+g[k+24>>2]+d*+g[k+28>>2];d=q*+g[k+36>>2]+l*+g[k+40>>2]+d*+g[k+44>>2];h=c[b+20>>2]|0;e=c[b+24>>2]|0;c[h>>2]=0;g[h+4>>2]=-d;g[h+8>>2]=n;g[h+12>>2]=0.0;g[h+(e<<2)>>2]=d;c[h+(e<<2)+4>>2]=0;g[h+(e<<2)+8>>2]=-p;g[h+(e<<2)+12>>2]=0.0;g[h+(e<<1<<2)>>2]=-n;g[h+(e<<1<<2)+4>>2]=p;c[h+(e<<1<<2)+8>>2]=0;g[h+(e<<1<<2)+12>>2]=0.0;h=c[a+332>>2]|0;l=+g[((h&1|0)==0?b+4|0:a+336|0)>>2]*+g[b>>2];i=c[b+28>>2]|0;g[i>>2]=l*(p+ +g[k+52>>2]-o-+g[j+52>>2]);g[i+(e<<2)>>2]=l*(n+ +g[k+56>>2]-m-+g[j+56>>2]);g[i+(e<<1<<2)>>2]=l*(d+ +g[k+60>>2]-f-+g[j+60>>2]);if(h&2|0){k=c[b+32>>2]|0;c[k>>2]=c[a+340>>2];c[k+(e<<2)>>2]=c[a+340>>2];c[k+(e<<1<<2)>>2]=c[a+340>>2]}f=+g[a+356>>2];if(f>0.0){g[c[b+36>>2]>>2]=-f;g[c[b+40>>2]>>2]=f;d=+g[a+356>>2]}else d=f;if(d>0.0){g[(c[b+36>>2]|0)+(e<<2)>>2]=-f;g[(c[b+40>>2]|0)+(e<<2)>>2]=f;d=+g[a+356>>2]}if(!(d>0.0)){j=a+352|0;j=c[j>>2]|0;k=b+52|0;c[k>>2]=j;return}g[(c[b+36>>2]|0)+(e<<1<<2)>>2]=-f;g[(c[b+40>>2]|0)+(e<<1<<2)>>2]=f;j=a+352|0;j=c[j>>2]|0;k=b+52|0;c[k>>2]=j;return}function lf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;c[6201]=(c[6201]|0)+1;j=(c[b+12>>2]|0)>(c[d+12>>2]|0);l=j?d:b;h=c[l+12>>2]|0;j=j?b:d;f=c[j+12>>2]|0;i=((f<<16|h)+~((f<<16|h)<<15)>>10^(f<<16|h)+~((f<<16|h)<<15))*9|0;i=((i>>6^i)+~((i>>6^i)<<11)>>16^(i>>6^i)+~((i>>6^i)<<11))&(c[a+12>>2]|0)+-1;b=c[(c[a+44>>2]|0)+(i<<2)>>2]|0;if((b|0)==-1){o=0;return o|0}g=c[a+16>>2]|0;d=b;while(1){if((c[(c[g+(d<<4)>>2]|0)+12>>2]|0)==(h|0)?(c[(c[g+(d<<4)+4>>2]|0)+12>>2]|0)==(f|0):0)break;b=c[(c[a+64>>2]|0)+(d<<2)>>2]|0;if((b|0)==-1){b=0;o=24;break}else d=b}if((o|0)==24)return b|0;b=g+(d<<4)|0;if(!b){o=0;return o|0}Kb[c[(c[a>>2]|0)+32>>2]&127](a,b,e);n=c[g+(d<<4)+12>>2]|0;m=b-(c[a+16>>2]|0)>>4;h=(c[a+44>>2]|0)+(i<<2)|0;b=c[h>>2]|0;d=c[a+64>>2]|0;if((b|0)!=(m|0)){g=b;while(1){f=d+(g<<2)|0;b=c[f>>2]|0;if((b|0)==(m|0))break;else g=b}b=c[d+(m<<2)>>2]|0;if((g|0)==-1)o=12;else c[f>>2]=b}else{b=c[d+(m<<2)>>2]|0;o=12}if((o|0)==12)c[h>>2]=b;k=(c[a+8>>2]|0)+-1|0;b=c[a+72>>2]|0;if(b|0)vb[c[(c[b>>2]|0)+12>>2]&31](b,l,j,e)|0;if((k|0)==(m|0)){c[a+8>>2]=(c[a+8>>2]|0)+-1;o=n;return o|0}h=c[a+16>>2]|0;i=c[(c[h+(k<<4)+4>>2]|0)+12>>2]<<16|c[(c[h+(k<<4)>>2]|0)+12>>2];i=(i+~(i<<15)>>10^i+~(i<<15))*9|0;i=((i>>6^i)+~((i>>6^i)<<11)>>16^(i>>6^i)+~((i>>6^i)<<11))&(c[a+12>>2]|0)+-1;j=(c[a+44>>2]|0)+(i<<2)|0;b=c[j>>2]|0;d=c[a+64>>2]|0;if((b|0)!=(k|0)){g=b;while(1){f=d+(g<<2)|0;b=c[f>>2]|0;if((b|0)==(k|0))break;else g=b}b=c[d+(k<<2)>>2]|0;if((g|0)==-1)o=22;else c[f>>2]=b}else{b=c[d+(k<<2)>>2]|0;o=22}if((o|0)==22)c[j>>2]=b;c[h+(m<<4)>>2]=c[h+(k<<4)>>2];c[h+(m<<4)+4>>2]=c[h+(k<<4)+4>>2];c[h+(m<<4)+8>>2]=c[h+(k<<4)+8>>2];c[h+(m<<4)+12>>2]=c[h+(k<<4)+12>>2];o=(c[a+44>>2]|0)+(i<<2)|0;c[(c[a+64>>2]|0)+(m<<2)>>2]=c[o>>2];c[o>>2]=m;c[a+8>>2]=(c[a+8>>2]|0)+-1;o=n;return o|0}function mf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0,B=0.0,C=0,D=0.0,E=0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0;j=(a[b+28>>0]|0)!=0;C=j?e:d;j=j?d:e;d=c[b+12>>2]|0;if((d|0)<=0){B=1.0;return +B}l=(c[C+192>>2]|0)+24|0;m=+g[C+4>>2];y=+g[C+8>>2];z=+g[C+12>>2];A=c[C+16>>2]|0;B=+g[C+20>>2];n=+g[C+24>>2];o=+g[C+28>>2];p=c[C+32>>2]|0;q=+g[C+36>>2];r=+g[C+40>>2];s=+g[C+44>>2];t=c[C+48>>2]|0;u=+g[C+52>>2];v=+g[C+56>>2];w=+g[C+60>>2];x=c[C+64>>2]|0;e=c[C+260>>2]|0;i=1.0;k=0;do{E=c[l>>2]|0;P=+g[E+(k*80|0)>>2];O=+g[E+(k*80|0)+16>>2];N=+g[E+(k*80|0)+32>>2];M=+g[E+(k*80|0)+4>>2];L=+g[E+(k*80|0)+20>>2];K=+g[E+(k*80|0)+36>>2];J=+g[E+(k*80|0)+8>>2];I=+g[E+(k*80|0)+24>>2];H=+g[E+(k*80|0)+40>>2];G=+g[E+(k*80|0)+48>>2];F=+g[E+(k*80|0)+52>>2];D=+g[E+(k*80|0)+56>>2];c[C+260>>2]=e+1;g[C+4>>2]=m*P+y*O+z*N;g[C+8>>2]=m*M+y*L+z*K;g[C+12>>2]=m*J+y*I+z*H;g[C+16>>2]=0.0;g[C+20>>2]=B*P+n*O+o*N;g[C+24>>2]=B*M+n*L+o*K;g[C+28>>2]=B*J+n*I+o*H;g[C+32>>2]=0.0;g[C+36>>2]=q*P+r*O+s*N;g[C+40>>2]=q*M+r*L+s*K;g[C+44>>2]=q*J+r*I+s*H;g[C+48>>2]=0.0;g[C+52>>2]=u+(m*G+y*F+z*D);g[C+56>>2]=v+(B*G+n*F+o*D);g[C+60>>2]=w+(q*G+r*F+s*D);g[C+64>>2]=0.0;E=c[(c[b+20>>2]|0)+(k<<2)>>2]|0;D=+mb[c[(c[E>>2]|0)+12>>2]&15](E,C,j,f,h);i=D>2]|0)+1|0;c[C+260>>2]=e;g[C+4>>2]=m;g[C+8>>2]=y;g[C+12>>2]=z;c[C+16>>2]=A;g[C+20>>2]=B;g[C+24>>2]=n;g[C+28>>2]=o;c[C+32>>2]=p;g[C+36>>2]=q;g[C+40>>2]=r;g[C+44>>2]=s;c[C+48>>2]=t;g[C+52>>2]=u;g[C+56>>2]=v;g[C+60>>2]=w;c[C+64>>2]=x;k=k+1|0}while((k|0)!=(d|0));return +i}function nf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=Ds()|0;c[i+4>>2]=7;c[i+8>>2]=-1;c[i+12>>2]=-1;g[i+16>>2]=3402823466385288598117041.0e14;a[i+20>>0]=1;a[i+21>>0]=0;c[i+24>>2]=-1;c[i+28>>2]=b;c[i+32>>2]=d;g[i+36>>2]=0.0;g[i+40>>2]=.30000001192092896;c[i+44>>2]=0;c[i>>2]=4792;a[i+48>>0]=0;c[i+52>>2]=c[e>>2];c[i+52+4>>2]=c[e+4>>2];c[i+52+8>>2]=c[e+8>>2];c[i+52+12>>2]=c[e+12>>2];c[i+68>>2]=c[e+16>>2];c[i+68+4>>2]=c[e+16+4>>2];c[i+68+8>>2]=c[e+16+8>>2];c[i+68+12>>2]=c[e+16+12>>2];c[i+84>>2]=c[e+32>>2];c[i+84+4>>2]=c[e+32+4>>2];c[i+84+8>>2]=c[e+32+8>>2];c[i+84+12>>2]=c[e+32+12>>2];c[i+100>>2]=c[e+48>>2];c[i+100+4>>2]=c[e+48+4>>2];c[i+100+8>>2]=c[e+48+8>>2];c[i+100+12>>2]=c[e+48+12>>2];c[i+116>>2]=c[f>>2];c[i+116+4>>2]=c[f+4>>2];c[i+116+8>>2]=c[f+8>>2];c[i+116+12>>2]=c[f+12>>2];c[i+132>>2]=c[f+16>>2];c[i+132+4>>2]=c[f+16+4>>2];c[i+132+8>>2]=c[f+16+8>>2];c[i+132+12>>2]=c[f+16+12>>2];c[i+148>>2]=c[f+32>>2];c[i+148+4>>2]=c[f+32+4>>2];c[i+148+8>>2]=c[f+32+8>>2];c[i+148+12>>2]=c[f+32+12>>2];c[i+164>>2]=c[f+48>>2];c[i+164+4>>2]=c[f+48+4>>2];c[i+164+8>>2]=c[f+48+8>>2];c[i+164+12>>2]=c[f+48+12>>2];a[i+180>>0]=h&1;g[i+184>>2]=1.0;g[i+188>>2]=-1.0;g[i+192>>2]=0.0;g[i+196>>2]=0.0;g[i+200>>2]=1.0;g[i+204>>2]=.699999988079071;g[i+208>>2]=0.0;g[i+212>>2]=0.0;g[i+216>>2]=1.0;g[i+220>>2]=.699999988079071;g[i+224>>2]=0.0;g[i+228>>2]=0.0;g[i+264>>2]=1.0;g[i+268>>2]=.699999988079071;g[i+272>>2]=1.0;g[i+276>>2]=0.0;g[i+280>>2]=1.0;g[i+284>>2]=.699999988079071;g[i+288>>2]=1.0;g[i+292>>2]=0.0;g[i+232>>2]=1.0;g[i+236>>2]=.699999988079071;g[i+240>>2]=1.0;g[i+244>>2]=0.0;g[i+248>>2]=1.0;g[i+252>>2]=.699999988079071;g[i+256>>2]=1.0;g[i+260>>2]=0.0;a[i+1096>>0]=0;g[i+1116>>2]=0.0;g[i+1120>>2]=0.0;g[i+1124>>2]=0.0;c[i+300>>2]=0;c[i+1100>>2]=0;c[i+1100+4>>2]=0;c[i+1100+8>>2]=0;a[i+1100+12>>0]=0;a[i+49>>0]=1;Tc(i,(c[i+28>>2]|0)+4|0,(c[i+32>>2]|0)+4|0);return i|0}function of(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+32|0;a[q+16>>0]=1;c[q+12>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;e=c[b+8>>2]|0;if((e|0)>0){g=0;h=0;f=0;i=0;o=0;do{m=c[b+16>>2]|0;n=m+(o<<4)|0;if((g|0)==(f|0)){k=f|0?f<<1:1;if((f|0)<(k|0)){if(k){c[6472]=(c[6472]|0)+1;e=ic((k<<4|3)+16|0)|0;if(!e){f=g;h=0}else{c[(e+4+15&-16)+-4>>2]=e;f=g;h=e+4+15&-16}}else h=0;if((f|0)>0){e=0;do{j=c[q+12>>2]|0;c[h+(e<<4)>>2]=c[j+(e<<4)>>2];c[h+(e<<4)+4>>2]=c[j+(e<<4)+4>>2];c[h+(e<<4)+8>>2]=c[j+(e<<4)+8>>2];c[h+(e<<4)+12>>2]=c[j+(e<<4)+12>>2];e=e+1|0}while((e|0)!=(f|0))}e=c[q+12>>2]|0;if(!e)g=f;else{c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);c[q+12>>2]=0}c[q+12>>2]=h;j=g;e=c[b+8>>2]|0;f=k;i=k}else j=f}else j=g;c[h+(j<<4)>>2]=c[n>>2];c[h+(j<<4)+4>>2]=c[m+(o<<4)+4>>2];c[h+(j<<4)+8>>2]=c[m+(o<<4)+8>>2];c[h+(j<<4)+12>>2]=c[m+(o<<4)+12>>2];g=j+1|0;o=o+1|0}while((o|0)<(e|0));c[q+4>>2]=g;a[q+16>>0]=1;c[q+8>>2]=i;if((j|0)>-1){e=c[q+12>>2]|0;f=0;while(1){vb[c[(c[b>>2]|0)+12>>2]&31](b,c[e+(f<<4)>>2]|0,c[e+(f<<4)+4>>2]|0,d)|0;if((f|0)<(j|0))f=f+1|0;else break}}}else g=0;if((c[b+56>>2]|0)>0){e=c[b+64>>2]|0;f=0;do{c[e+(f<<2)>>2]=-1;f=f+1|0}while((f|0)<(c[b+56>>2]|0))}if((g|0)<=1)if((g|0)<=0){e=c[q+12>>2]|0;if(!e){l=q;return}}else p=23;else{Id(q,0,g+-1|0);p=23}if((p|0)==23){e=c[q+12>>2]|0;f=0;do{ub[c[(c[b>>2]|0)+8>>2]&63](b,c[e+(f<<4)>>2]|0,c[e+(f<<4)+4>>2]|0)|0;f=f+1|0}while((f|0)<(g|0))}c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);c[q+12>>2]=0;l=q;return}function pf(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0;o=l;l=l+64|0;e=c[d+192>>2]|0;Nb[c[(c[e>>2]|0)+8>>2]&127](e,d+4|0,o+48|0,o+32|0);f=+g[o+48>>2]+-.019999999552965164;g[o+48>>2]=f;h=+g[o+48+4>>2]+-.019999999552965164;g[o+48+4>>2]=h;i=+g[o+48+8>>2]+-.019999999552965164;g[o+48+8>>2]=i;j=+g[o+32>>2]+.019999999552965164;g[o+32>>2]=j;k=+g[o+32+4>>2]+.019999999552965164;g[o+32+4>>2]=k;m=+g[o+32+8>>2]+.019999999552965164;g[o+32+8>>2]=m;if(((a[b+44>>0]|0)!=0?(c[d+236>>2]|0)==2:0)?(c[d+204>>2]&3|0)==0:0){e=c[d+192>>2]|0;Nb[c[(c[e>>2]|0)+8>>2]&127](e,d+68|0,o+16|0,o);h=+g[o+16>>2]+-.019999999552965164;g[o+16>>2]=h;i=+g[o+16+4>>2]+-.019999999552965164;g[o+16+4>>2]=i;j=+g[o+16+8>>2]+-.019999999552965164;g[o+16+8>>2]=j;k=+g[o>>2]+.019999999552965164;g[o>>2]=k;m=+g[o+4>>2]+.019999999552965164;g[o+4>>2]=m;n=+g[o+8>>2]+.019999999552965164;g[o+8>>2]=n;f=+g[o+48>>2];if(h>2]=h;f=h}h=+g[o+48+4>>2];if(i>2]=i;h=i}i=+g[o+48+8>>2];if(j>2]=j;i=j}j=+g[o+16+12>>2];if(j<+g[o+48+12>>2])g[o+48+12>>2]=j;j=+g[o+32>>2];if(j>2]=k;j=k}k=+g[o+32+4>>2];if(k>2]=m;k=m}m=+g[o+32+8>>2];if(m>2]=n;m=n}n=+g[o+12>>2];if(+g[o+32+12>>2]>2]=n}e=c[b+68>>2]|0;if((c[d+204>>2]&1|0)==0?(j=j-f,k=k-h,n=m-i,!(j*j+k*k+n*n<999999995904.0)):0){if((c[d+216>>2]&-2|0)!=4)c[d+216>>2]=5;if(!(a[15175]|0)){l=o;return}e=c[b+72>>2]|0;if(!e){l=o;return}a[15175]=0;Gb[c[(c[e>>2]|0)+36>>2]&127](e,15176);d=c[b+72>>2]|0;Gb[c[(c[d>>2]|0)+36>>2]&127](d,15225);d=c[b+72>>2]|0;Gb[c[(c[d>>2]|0)+36>>2]&127](d,15293);b=c[b+72>>2]|0;Gb[c[(c[b>>2]|0)+36>>2]&127](b,15358);l=o;return}Rb[c[(c[e>>2]|0)+16>>2]&31](e,c[d+188>>2]|0,o+48|0,o+32|0,c[b+24>>2]|0);l=o;return}function qf(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0.0,j=0.0,k=0,l=0,m=0.0;c[6175]=(c[6175]|0)+1;if(!(c[b+4>>2]&2))j=.019999999552965164;else{k=c[d+192>>2]|0;i=+hb[c[(c[k>>2]|0)+20>>2]&1](k,.019999999552965164);k=c[e+192>>2]|0;j=+hb[c[(c[k>>2]|0)+20>>2]&1](k,.019999999552965164);j=i>2];i=+g[e+184>>2];i=m>2]|0;h=c[f+8>>2]|0;if(!h){if(c[b+4>>2]&4|0){b=0;return b|0}c[6472]=(c[6472]|0)+1;f=ic(791)|0;if(!f)k=0;else{c[(f+4+15&-16)+-4>>2]=f;k=f+4+15&-16}}else{k=c[f+12>>2]|0;c[f+12>>2]=c[k>>2];c[f+8>>2]=h+-1}c[k>>2]=1025;c[k+116>>2]=0;a[k+120>>0]=0;f=k+124|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;c[k+300>>2]=0;a[k+304>>0]=0;f=k+308|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;c[k+484>>2]=0;a[k+488>>0]=0;f=k+492|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;c[k+668>>2]=0;a[k+672>>0]=0;f=k+676|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[f+20>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;c[k+740>>2]=d;c[k+744>>2]=e;c[k+748>>2]=0;g[k+752>>2]=j;g[k+756>>2]=i;e=k;f=c[b+12>>2]|0;c[k+768>>2]=f;if((f|0)==(c[b+16>>2]|0)?(l=f|0?f<<1:1,(f|0)<(l|0)):0){if(!l)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((l<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[b+12>>2]|0}if((f|0)>0){d=0;do{c[h+(d<<2)>>2]=c[(c[b+20>>2]|0)+(d<<2)>>2];d=d+1|0}while((d|0)!=(f|0))}d=c[b+20>>2]|0;if(d){if(a[b+24>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);f=c[b+12>>2]|0}c[b+20>>2]=0}a[b+24>>0]=1;c[b+20>>2]=h;c[b+16>>2]=l}c[(c[b+20>>2]|0)+(f<<2)>>2]=e;c[b+12>>2]=f+1;b=k;return b|0}function rf(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=js(460)|0;Sd(i,b,d,e);c[i>>2]=4016;a[i+340>>0]=1;c[i+336>>2]=0;c[i+328>>2]=0;c[i+332>>2]=0;g[i+352>>2]=1.2000000476837158;g[i+356>>2]=0.0;g[i+360>>2]=0.0;g[i+364>>2]=1.0e3;c[i+368>>2]=0;c[i+368+4>>2]=0;c[i+368+8>>2]=0;c[i+368+12>>2]=0;c[i+368+16>>2]=0;c[i+368+20>>2]=0;c[i+368+24>>2]=0;c[i+396>>2]=-1054867456;c[i+400>>2]=0;g[i+404>>2]=0.0;a[i+424>>0]=1;c[i+420>>2]=0;c[i+412>>2]=0;c[i+416>>2]=0;c[i+452>>2]=h;a[i+456>>0]=0;if(!h){c[6472]=(c[6472]|0)+1;f=ic(59)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}g[f+12>>2]=1.0;c[f+8>>2]=0;c[f+4>>2]=5;c[f>>2]=3140;a[f+36>>0]=1;c[f+32>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;a[f+16>>0]=1;c[i+452>>2]=f;a[i+456>>0]=1}c[i+344>>2]=4302;a[i+348>>0]=1;a[i+349>>0]=0;a[i+350>>0]=0;c[i+384>>2]=d;c[i+388>>2]=b;mi(i+408|0);e=c[i+412>>2]|0;if((e|0)>0)h=0;else{d=i+428|0;g[d>>2]=.25;d=i+432|0;c[d>>2]=0;d=i+436|0;c[d>>2]=0;d=i+444|0;c[d>>2]=1;d=i+448|0;c[d>>2]=1;g[i+352>>2]=1.2000000476837158;g[i+356>>2]=0.0;g[i+360>>2]=0.0;d=i+392|0;c[d>>2]=0;c[i+368>>2]=0;c[i+368+4>>2]=0;c[i+368+8>>2]=0;c[i+368+12>>2]=0;c[i+396>>2]=-1054867456;c[i+400>>2]=0;g[i+404>>2]=0.0;mi(i+408|0);return i|0}do{d=(c[i+420>>2]|0)+(h<<2)|0;f=c[d>>2]|0;c[d>>2]=0;if(f|0)do{d=f;f=c[f+280>>2]|0;_H(d)}while((f|0)!=0);h=h+1|0}while((h|0)!=(e|0));d=i+428|0;g[d>>2]=.25;d=i+432|0;c[d>>2]=0;d=i+436|0;c[d>>2]=0;d=i+444|0;c[d>>2]=1;d=i+448|0;c[d>>2]=1;g[i+352>>2]=1.2000000476837158;g[i+356>>2]=0.0;g[i+360>>2]=0.0;d=i+392|0;c[d>>2]=0;c[i+368>>2]=0;c[i+368+4>>2]=0;c[i+368+8>>2]=0;c[i+368+12>>2]=0;c[i+396>>2]=-1054867456;c[i+400>>2]=0;g[i+404>>2]=0.0;mi(i+408|0);return i|0} +function Cc(b,d,e,f,h,i,j){b=b|0;d=d|0;e=e|0;f=f|0;h=+h;i=+i;j=j|0;var k=0,m=0,n=0.0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0,ba=0;X=l;l=l+48|0;a[X+16+16>>0]=1;W=X+16+12|0;c[W>>2]=0;c[X+16+4>>2]=0;c[X+16+8>>2]=0;q=c[f+4>>2]|0;if((q|0)>0){c[6472]=(c[6472]|0)+1;k=ic((q<<4|3)+16|0)|0;if(!k)o=0;else{c[(k+4+15&-16)+-4>>2]=k;o=k+4+15&-16}k=c[X+16+4>>2]|0;if((k|0)>0){m=0;do{V=o+(m<<4)|0;U=(c[W>>2]|0)+(m<<4)|0;c[V>>2]=c[U>>2];c[V+4>>2]=c[U+4>>2];c[V+8>>2]=c[U+8>>2];c[V+12>>2]=c[U+12>>2];m=m+1|0}while((m|0)!=(k|0))}k=c[W>>2]|0;if(k|0){if(a[X+16+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0)}c[W>>2]=0}a[X+16+16>>0]=1;c[W>>2]=o;c[X+16+8>>2]=q}k=c[d+28>>2]|0;if((k|0)>0){U=c[d+36>>2]|0;n=+g[e>>2];r=+g[e+4>>2];C=+g[e+8>>2];D=+g[e+16>>2];E=+g[e+20>>2];F=+g[e+24>>2];G=+g[e+32>>2];w=+g[e+36>>2];p=+g[e+40>>2];s=+g[b>>2];t=+g[b+4>>2];x=+g[b+8>>2];V=-1;B=3402823466385288598117041.0e14;o=0;while(1){y=+g[U+(o*36|0)+20>>2];z=+g[U+(o*36|0)+24>>2];A=+g[U+(o*36|0)+28>>2];m=(y*n+z*r+A*C)*s+(y*D+z*E+A*F)*t+(y*G+z*w+A*p)*x=0){M=c[U+(V*36|0)+4>>2]|0;if((M|0)>0){N=U+(V*36|0)+12|0;o=U+(V*36|0)+20|0;O=U+(V*36|0)+24|0;P=U+(V*36|0)+28|0;s=C;t=D;z=E;y=F;x=G;L=0;K=f;f=X+16|0;while(1){J=c[N>>2]|0;k=c[J+(L<<2)>>2]|0;I=c[d+16>>2]|0;L=L+1|0;J=c[J+(((L|0)==(M|0)?0:L)<<2)>>2]|0;Z=+g[I+(k<<4)>>2];_=Z-+g[I+(J<<4)>>2];Y=+g[I+(k<<4)+4>>2];$=Y-+g[I+(J<<4)+4>>2];A=+g[I+(k<<4)+8>>2];C=A-+g[I+(J<<4)+8>>2];G=_*n+$*r+C*s;E=_*t+$*z+C*y;C=_*x+$*w+C*p;$=+g[o>>2];_=+g[O>>2];B=+g[P>>2];F=n*$+r*_+s*B;D=t*$+z*_+y*B;B=x*$+w*_+p*B;w=(Z*n+Y*r+A*s+ +g[e+48>>2])*-(E*B-C*D)+(Z*t+Y*z+A*y+ +g[e+52>>2])*-(C*F-G*B)+(Z*x+Y*w+A*p+ +g[e+56>>2])*-(G*D-E*F);J=K;I=f;k=c[J+4>>2]|0;if((k|0)>=2){q=c[J+12>>2]|0;p=+g[q+(k+-1<<4)>>2];r=+g[q+(k+-1<<4)+4>>2];s=+g[q+(k+-1<<4)+8>>2];n=p*-(E*B-C*D)+r*-(C*F-G*B)+s*-(G*D-E*F)-w;H=0;while(1){y=+g[q+(H<<4)>>2];z=+g[q+(H<<4)+4>>2];A=+g[q+(H<<4)+8>>2];v=c[q+(H<<4)+12>>2]|0;x=y*-(E*B-C*D)+z*-(C*F-G*B)+A*-(G*D-E*F)-w;do if(n<0.0)if(x<0.0){m=c[I+4>>2]|0;if((m|0)==(c[I+8>>2]|0)?(R=m|0?m<<1:1,(m|0)<(R|0)):0){if(!R)q=0;else{c[6472]=(c[6472]|0)+1;m=ic((R<<4|3)+16|0)|0;if(!m)q=0;else{c[(m+4+15&-16)+-4>>2]=m;q=m+4+15&-16}m=c[I+4>>2]|0}if((m|0)>0){u=0;do{aa=q+(u<<4)|0;ba=(c[I+12>>2]|0)+(u<<4)|0;c[aa>>2]=c[ba>>2];c[aa+4>>2]=c[ba+4>>2];c[aa+8>>2]=c[ba+8>>2];c[aa+12>>2]=c[ba+12>>2];u=u+1|0}while((u|0)!=(m|0))}m=c[I+12>>2]|0;if(m|0){if(a[I+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[I+12>>2]=0}a[I+16>>0]=1;c[I+12>>2]=q;c[I+8>>2]=R;m=c[I+4>>2]|0}u=c[I+12>>2]|0;g[u+(m<<4)>>2]=y;g[u+(m<<4)+4>>2]=z;g[u+(m<<4)+8>>2]=A;c[u+(m<<4)+12>>2]=v;u=78;break}else{n=n/(n-x);t=p+(y-p)*n;p=r+(z-r)*n;n=s+(A-s)*n;m=c[I+4>>2]|0;if((m|0)==(c[I+8>>2]|0)?(T=m|0?m<<1:1,(m|0)<(T|0)):0){if(!T)q=0;else{c[6472]=(c[6472]|0)+1;m=ic((T<<4|3)+16|0)|0;if(!m)q=0;else{c[(m+4+15&-16)+-4>>2]=m;q=m+4+15&-16}m=c[I+4>>2]|0}if((m|0)>0){u=0;do{ba=q+(u<<4)|0;aa=(c[I+12>>2]|0)+(u<<4)|0;c[ba>>2]=c[aa>>2];c[ba+4>>2]=c[aa+4>>2];c[ba+8>>2]=c[aa+8>>2];c[ba+12>>2]=c[aa+12>>2];u=u+1|0}while((u|0)!=(m|0))}m=c[I+12>>2]|0;if(m|0){if(a[I+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[I+12>>2]=0}a[I+16>>0]=1;c[I+12>>2]=q;c[I+8>>2]=T;m=c[I+4>>2]|0}u=c[I+12>>2]|0;g[u+(m<<4)>>2]=t;g[u+(m<<4)+4>>2]=p;g[u+(m<<4)+8>>2]=n;g[u+(m<<4)+12>>2]=0.0;u=78;break}else if(x<0.0){n=n/(n-x);t=p+(y-p)*n;p=r+(z-r)*n;n=s+(A-s)*n;m=c[I+4>>2]|0;if((m|0)==(c[I+8>>2]|0)?(S=m|0?m<<1:1,(m|0)<(S|0)):0){if(!S)q=0;else{c[6472]=(c[6472]|0)+1;m=ic((S<<4|3)+16|0)|0;if(!m)q=0;else{c[(m+4+15&-16)+-4>>2]=m;q=m+4+15&-16}m=c[I+4>>2]|0}if((m|0)>0){u=0;do{ba=q+(u<<4)|0;aa=(c[I+12>>2]|0)+(u<<4)|0;c[ba>>2]=c[aa>>2];c[ba+4>>2]=c[aa+4>>2];c[ba+8>>2]=c[aa+8>>2];c[ba+12>>2]=c[aa+12>>2];u=u+1|0}while((u|0)!=(m|0))}m=c[I+12>>2]|0;if(m|0){if(a[I+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[I+12>>2]=0}a[I+16>>0]=1;c[I+12>>2]=q;c[I+8>>2]=S;m=c[I+4>>2]|0}ba=c[I+12>>2]|0;g[ba+(m<<4)>>2]=t;g[ba+(m<<4)+4>>2]=p;g[ba+(m<<4)+8>>2]=n;g[ba+(m<<4)+12>>2]=0.0;m=(c[I+4>>2]|0)+1|0;c[I+4>>2]=m;if((m|0)==(c[I+8>>2]|0)?(Q=m|0?m<<1:1,(m|0)<(Q|0)):0){if(!Q)q=0;else{c[6472]=(c[6472]|0)+1;m=ic((Q<<4|3)+16|0)|0;if(!m)q=0;else{c[(m+4+15&-16)+-4>>2]=m;q=m+4+15&-16}m=c[I+4>>2]|0}if((m|0)>0){u=0;do{ba=q+(u<<4)|0;aa=(c[I+12>>2]|0)+(u<<4)|0;c[ba>>2]=c[aa>>2];c[ba+4>>2]=c[aa+4>>2];c[ba+8>>2]=c[aa+8>>2];c[ba+12>>2]=c[aa+12>>2];u=u+1|0}while((u|0)!=(m|0))}m=c[I+12>>2]|0;if(m|0){if(a[I+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[I+12>>2]=0}a[I+16>>0]=1;c[I+12>>2]=q;c[I+8>>2]=Q;m=c[I+4>>2]|0}u=c[I+12>>2]|0;g[u+(m<<4)>>2]=y;g[u+(m<<4)+4>>2]=z;g[u+(m<<4)+8>>2]=A;c[u+(m<<4)+12>>2]=v;u=78}while(0);if((u|0)==78){u=0;c[I+4>>2]=(c[I+4>>2]|0)+1}m=H+1|0;if((m|0)==(k|0))break;q=c[J+12>>2]|0;n=x;p=y;s=A;r=z;H=m}k=c[J+4>>2]|0}if((k|0)<0){if((c[J+8>>2]|0)<0){m=c[J+12>>2]|0;if(m|0){if(a[J+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[J+12>>2]=0}a[J+16>>0]=1;c[J+12>>2]=0;c[J+8>>2]=0}do{ba=(c[J+12>>2]|0)+(k<<4)|0;c[ba>>2]=c[X>>2];c[ba+4>>2]=c[X+4>>2];c[ba+8>>2]=c[X+8>>2];c[ba+12>>2]=c[X+12>>2];k=k+1|0}while((k|0)!=0)}c[J+4>>2]=0;n=+g[e>>2];r=+g[e+4>>2];s=+g[e+8>>2];t=+g[e+16>>2];z=+g[e+20>>2];y=+g[e+24>>2];x=+g[e+32>>2];w=+g[e+36>>2];p=+g[e+40>>2];if((L|0)>=(M|0)){A=t;m=O;k=P;u=e+56|0;v=e+48|0;q=e+52|0;break}else{ba=f;f=K;K=ba}}}else{s=C;A=D;z=E;y=F;x=G;o=U+(V*36|0)+20|0;m=U+(V*36|0)+24|0;k=U+(V*36|0)+28|0;u=e+56|0;v=e+48|0;q=e+52|0}Z=+g[o>>2];_=+g[m>>2];$=+g[k>>2];t=Z*n+_*r+$*s;s=Z*A+_*z+$*y;r=Z*x+_*w+$*p;p=+g[U+(V*36|0)+32>>2]-(t*+g[v>>2]+s*+g[q>>2]+r*+g[u>>2]);k=c[f+4>>2]|0;if((k|0)>0){o=0;do{m=c[f+12>>2]|0;n=p+(t*+g[m+(o<<4)>>2]+s*+g[m+(o<<4)+4>>2]+r*+g[m+(o<<4)+8>>2]);n=n<=h?h:n;if(n<=i){k=m+(o<<4)|0;c[X>>2]=c[k>>2];c[X+4>>2]=c[k+4>>2];c[X+8>>2]=c[k+8>>2];c[X+12>>2]=c[k+12>>2];Lb[c[(c[j>>2]|0)+16>>2]&15](j,b,X,n);k=c[f+4>>2]|0}o=o+1|0}while((o|0)<(k|0))}}}k=c[W>>2]|0;if(!k){l=X;return}if(a[X+16+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0)}c[W>>2]=0;l=X;return}function Dc(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0;G=l;l=l+64|0;if(!(a[b+356>>0]|0)){b=a[b+312>>0]|0;b=b<<24>>24!=0;l=G;return b|0}c[b+336>>2]=0;c[b+336+4>>2]=0;c[b+336+8>>2]=0;c[b+336+12>>2]=0;a[b+336+16>>0]=0;m=a[b+332>>0]|0;a[b+332>>0]=m&-16;a[b+356>>0]=0;switch(c[b>>2]|0){case 0:{a[b+312>>0]=0;b=0;b=b<<24>>24!=0;l=G;return b|0}case 1:{c[b+244>>2]=c[b+84>>2];c[b+244+4>>2]=c[b+84+4>>2];c[b+244+8>>2]=c[b+84+8>>2];c[b+244+12>>2]=c[b+84+12>>2];c[b+260>>2]=c[b+164>>2];c[b+260+4>>2]=c[b+164+4>>2];c[b+260+8>>2]=c[b+164+8>>2];c[b+260+12>>2]=c[b+164+12>>2];D=+g[b+248>>2]-+g[b+264>>2];E=+g[b+252>>2]-+g[b+268>>2];g[b+276>>2]=+g[b+244>>2]-+g[b+260>>2];g[b+280>>2]=D;g[b+284>>2]=E;g[b+288>>2]=0.0;a[b+352>>0]=0;a[b+332>>0]=m&-16;g[b+336>>2]=1.0;g[b+340>>2]=0.0;g[b+344>>2]=0.0;g[b+348>>2]=0.0;a[b+312>>0]=1;b=1;b=b<<24>>24!=0;l=G;return b|0}case 2:{e=+g[b+4>>2];f=+g[b+8>>2];h=+g[b+12>>2];i=+g[b+20>>2]-e;k=+g[b+24>>2]-f;j=+g[b+28>>2]-h;if((0.0-e)*i+(0.0-f)*k+(0.0-h)*j>0.0)if((0.0-e)*i+(0.0-f)*k+(0.0-h)*j>0]=m&-16|d;g[b+336>>2]=1.0-e;g[b+340>>2]=e;g[b+344>>2]=0.0;g[b+348>>2]=0.0;y=+g[b+84>>2];A=+g[b+88>>2];D=+g[b+92>>2];y=y+e*(+g[b+100>>2]-y);A=A+e*(+g[b+104>>2]-A);D=D+e*(+g[b+108>>2]-D);g[b+244>>2]=y;g[b+248>>2]=A;g[b+252>>2]=D;g[b+256>>2]=0.0;z=+g[b+164>>2];C=+g[b+168>>2];E=+g[b+172>>2];z=z+e*(+g[b+180>>2]-z);C=C+e*(+g[b+184>>2]-C);E=E+e*(+g[b+188>>2]-E);g[b+260>>2]=z;g[b+264>>2]=C;g[b+268>>2]=E;g[b+272>>2]=0.0;g[b+276>>2]=y-z;g[b+280>>2]=A-C;g[b+284>>2]=D-E;g[b+288>>2]=0.0;Xe(b,b+332|0);if((+g[b+336>>2]>=0.0?+g[b+340>>2]>=0.0:0)?+g[b+344>>2]>=0.0:0)d=+g[b+348>>2]>=0.0&1;else d=0;a[b+312>>0]=d;b=d;b=b<<24>>24!=0;l=G;return b|0}case 3:{c[G+16>>2]=0;c[G+16+4>>2]=0;c[G+16+8>>2]=0;c[G+16+12>>2]=0;Te(G+16|0,b+4|0,b+20|0,b+36|0,b+316|0);v=+g[b+336>>2];w=+g[b+340>>2];E=+g[b+344>>2];y=+g[b+84>>2]*v+ +g[b+100>>2]*w+ +g[b+116>>2]*E;A=v*+g[b+88>>2]+w*+g[b+104>>2]+E*+g[b+120>>2];D=v*+g[b+92>>2]+w*+g[b+108>>2]+E*+g[b+124>>2];g[b+244>>2]=y;g[b+248>>2]=A;g[b+252>>2]=D;g[b+256>>2]=0.0;z=+g[b+164>>2]*v+ +g[b+180>>2]*w+ +g[b+196>>2]*E;C=v*+g[b+168>>2]+w*+g[b+184>>2]+E*+g[b+200>>2];E=v*+g[b+172>>2]+w*+g[b+188>>2]+E*+g[b+204>>2];g[b+260>>2]=z;g[b+264>>2]=C;g[b+268>>2]=E;g[b+272>>2]=0.0;g[b+276>>2]=y-z;g[b+280>>2]=A-C;g[b+284>>2]=D-E;g[b+288>>2]=0.0;Xe(b,b+332|0);if((+g[b+336>>2]>=0.0?+g[b+340>>2]>=0.0:0)?+g[b+344>>2]>=0.0:0)d=+g[b+348>>2]>=0.0&1;else d=0;a[b+312>>0]=d;b=d;b=b<<24>>24!=0;l=G;return b|0}case 4:{c[G>>2]=0;c[G+4>>2]=0;c[G+8>>2]=0;c[G+12>>2]=0;B=G+16+16|0;a[B>>0]=0;c[b+316>>2]=0;c[b+316+4>>2]=0;c[b+316+8>>2]=0;c[b+316+12>>2]=0;a[b+332>>0]=m|15;I=+g[b+20>>2];R=+g[b+4>>2];O=+g[b+24>>2];H=+g[b+8>>2];K=+g[b+28>>2];S=+g[b+12>>2];N=+g[b+36>>2];P=+g[b+40>>2];L=+g[b+44>>2];J=+g[b+52>>2];Q=+g[b+56>>2];M=+g[b+60>>2];T=((O-H)*(L-S)-(K-S)*(P-H))*(J-R)+((K-S)*(N-R)-(I-R)*(L-S))*(Q-H)+((I-R)*(P-H)-(O-H)*(N-R))*(M-S);d=T*T<9.99999905104687e-09?-1:((0.0-R)*((O-H)*(L-S)-(K-S)*(P-H))+(0.0-H)*((K-S)*(N-R)-(I-R)*(L-S))+((I-R)*(P-H)-(O-H)*(N-R))*(0.0-S))*T<0.0&1;T=(K-S)*((N-R)*(Q-H)-(P-H)*(J-R))+((I-R)*((P-H)*(M-S)-(L-S)*(Q-H))+(O-H)*((L-S)*(J-R)-(N-R)*(M-S)));m=T*T<9.99999905104687e-09?-1:((0.0-S)*((N-R)*(Q-H)-(P-H)*(J-R))+((0.0-R)*((P-H)*(M-S)-(L-S)*(Q-H))+(0.0-H)*((L-S)*(J-R)-(N-R)*(M-S))))*T<0.0&1;T=(L-S)*((O-H)*(J-R)-(I-R)*(Q-H))+((N-R)*((K-S)*(Q-H)-(O-H)*(M-S))+(P-H)*((I-R)*(M-S)-(K-S)*(J-R)));q=T*T<9.99999905104687e-09?-1:((0.0-S)*((O-H)*(J-R)-(I-R)*(Q-H))+((0.0-R)*((K-S)*(Q-H)-(O-H)*(M-S))+(0.0-H)*((I-R)*(M-S)-(K-S)*(J-R))))*T<0.0&1;H=(S-K)*((P-O)*(J-I)-(N-I)*(Q-O))+((R-I)*((L-K)*(Q-O)-(P-O)*(M-K))+(H-O)*((N-I)*(M-K)-(L-K)*(J-I)));x=H*H<9.99999905104687e-09?-1:((0.0-K)*((P-O)*(J-I)-(N-I)*(Q-O))+((0.0-I)*((L-K)*(Q-O)-(P-O)*(M-K))+(0.0-O)*((N-I)*(M-K)-(L-K)*(J-I))))*H<0.0&1;do if((m|d|q|x|0)<0){a[b+352>>0]=1;d=b+312|0;F=40}else{if(!(m|d|q|x)){if(a[b+352>>0]|0){d=b+312|0;F=40;break}a[b+312>>0]=1;c[b+276>>2]=0;c[b+276+4>>2]=0;c[b+276+8>>2]=0;c[b+276+12>>2]=0;d=1;break}if((d|0)!=0?(Te(G,b+4|0,b+20|0,b+36|0,G+16|0),e=+g[G+16>>2],f=+g[G+16+4>>2],h=+g[G+16+8>>2],i=e-+g[G>>2],k=f-+g[G+4>>2],j=h-+g[G+8>>2],i*i+k*k+j*j<3402823466385288598117041.0e14):0){U=c[G+16+12>>2]|0;g[b+316>>2]=e;g[b+320>>2]=f;g[b+324>>2]=h;c[b+328>>2]=U;U=a[B>>0]|0;a[b+332>>0]=U&1|a[b+332>>0]&-16|U&2|U&4;U=c[G+16+24>>2]|0;d=c[G+16+28>>2]|0;c[b+336>>2]=c[G+16+20>>2];c[b+340>>2]=U;c[b+344>>2]=d;g[b+348>>2]=0.0;e=i*i+k*k+j*j}else e=3402823466385288598117041.0e14;if((m|0)!=0?(Te(G,b+4|0,b+36|0,b+52|0,G+16|0),n=+g[G+16>>2],o=+g[G+16+4>>2],p=+g[G+16+8>>2],r=n-+g[G>>2],t=o-+g[G+4>>2],s=p-+g[G+8>>2],r*r+t*t+s*s>2]|0;g[b+316>>2]=n;g[b+320>>2]=o;g[b+324>>2]=p;c[b+328>>2]=m;m=a[B>>0]|0;a[b+332>>0]=m<<1&8|(m&1|a[b+332>>0]&-16|m<<1&4);m=c[G+16+24>>2]|0;U=c[G+16+28>>2]|0;c[b+336>>2]=c[G+16+20>>2];g[b+340>>2]=0.0;c[b+344>>2]=m;c[b+348>>2]=U;e=r*r+t*t+s*s}if((q|0)!=0?(Te(G,b+4|0,b+52|0,b+20|0,G+16|0),u=+g[G+16>>2],v=+g[G+16+4>>2],w=+g[G+16+8>>2],y=u-+g[G>>2],A=v-+g[G+4>>2],z=w-+g[G+8>>2],y*y+A*A+z*z>2]|0;g[b+316>>2]=u;g[b+320>>2]=v;g[b+324>>2]=w;c[b+328>>2]=q;q=a[B>>0]|0;a[b+332>>0]=q<<2&8|(q&1|a[b+332>>0]&-16|(q&255)>>>1&2);q=c[G+16+28>>2]|0;U=c[G+16+24>>2]|0;c[b+336>>2]=c[G+16+20>>2];c[b+340>>2]=q;g[b+344>>2]=0.0;c[b+348>>2]=U;e=y*y+A*A+z*z}if(x|0?(Te(G,b+20|0,b+52|0,b+36|0,G+16|0),C=+g[G+16>>2],D=+g[G+16+4>>2],E=+g[G+16+8>>2],R=C-+g[G>>2],S=D-+g[G+4>>2],T=E-+g[G+8>>2],R*R+S*S+T*T>2]|0;g[b+316>>2]=C;g[b+320>>2]=D;g[b+324>>2]=E;c[b+328>>2]=x;x=a[B>>0]|0;a[b+332>>0]=x&4|a[b+332>>0]&-16|x<<1&2|x<<2&8;x=c[G+16+20>>2]|0;B=c[G+16+28>>2]|0;U=c[G+16+24>>2]|0;g[b+336>>2]=0.0;c[b+340>>2]=x;c[b+344>>2]=B;c[b+348>>2]=U}L=+g[b+336>>2];M=+g[b+340>>2];N=+g[b+344>>2];T=+g[b+348>>2];O=+g[b+84>>2]*L+ +g[b+100>>2]*M+ +g[b+116>>2]*N+ +g[b+132>>2]*T;Q=L*+g[b+88>>2]+M*+g[b+104>>2]+N*+g[b+120>>2]+T*+g[b+136>>2];S=L*+g[b+92>>2]+M*+g[b+108>>2]+N*+g[b+124>>2]+T*+g[b+140>>2];g[b+244>>2]=O;g[b+248>>2]=Q;g[b+252>>2]=S;g[b+256>>2]=0.0;P=+g[b+164>>2]*L+ +g[b+180>>2]*M+ +g[b+196>>2]*N+ +g[b+212>>2]*T;R=L*+g[b+168>>2]+M*+g[b+184>>2]+N*+g[b+200>>2]+T*+g[b+216>>2];T=L*+g[b+172>>2]+M*+g[b+188>>2]+N*+g[b+204>>2]+T*+g[b+220>>2];g[b+260>>2]=P;g[b+264>>2]=R;g[b+268>>2]=T;g[b+272>>2]=0.0;g[b+276>>2]=O-P;g[b+280>>2]=Q-R;g[b+284>>2]=S-T;g[b+288>>2]=0.0;Xe(b,b+332|0);if((+g[b+336>>2]>=0.0?+g[b+340>>2]>=0.0:0)?+g[b+344>>2]>=0.0:0)d=+g[b+348>>2]>=0.0&1;else d=0;a[b+312>>0]=d}while(0);if((F|0)==40){a[d>>0]=0;d=0}U=d;U=U<<24>>24!=0;l=G;return U|0}default:{a[b+312>>0]=0;U=0;U=U<<24>>24!=0;l=G;return U|0}}return 0}function Ec(b){b=b|0;var d=0.0,e=0.0,f=0,h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0.0,A=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0;v=l;l=l+176|0;if(!(a[b+738>>0]|0)){l=v;return}g[b+36>>2]=0.0;g[b+744>>2]=0.0;if(!(a[b+736>>0]|0)){f=c[b+28>>2]|0;k=+g[b+600>>2];m=+g[b+604>>2];r=+g[b+608>>2];t=k*+g[f+20>>2]+m*+g[f+24>>2]+r*+g[f+28>>2]+ +g[f+56>>2];h=c[b+32>>2]|0;n=+g[b+664>>2];o=+g[b+668>>2];p=+g[b+672>>2];u=n*+g[h+20>>2]+o*+g[h+24>>2]+p*+g[h+28>>2]+ +g[h+56>>2];s=n*+g[h+36>>2]+o*+g[h+40>>2]+p*+g[h+44>>2]+ +g[h+60>>2];q=k*+g[f+4>>2]+m*+g[f+8>>2]+r*+g[f+12>>2]+ +g[f+52>>2];r=k*+g[f+36>>2]+m*+g[f+40>>2]+r*+g[f+44>>2]+ +g[f+60>>2];p=n*+g[h+4>>2]+o*+g[h+8>>2]+p*+g[h+12>>2]+ +g[h+52>>2];if((p-q)*(p-q)+(u-t)*(u-t)+(s-r)*(s-r)>1.1920928955078125e-07){j=1.0/+C(+((p-q)*(p-q)+(u-t)*(u-t)+(s-r)*(s-r)));g[v+128>>2]=(p-q)*j;g[v+128+4>>2]=(u-t)*j;g[v+128+8>>2]=(s-r)*j;c[v+128+12>>2]=0;i=(s-r)*j;d=(u-t)*j;j=(p-q)*j}else{c[v+128>>2]=1065353216;c[v+128+4>>2]=0;c[v+128+8>>2]=0;g[v+128+12>>2]=0.0;i=0.0;d=0.0;j=1.0}if(+B(+i)>.7071067690849304){w=i*i+d*d;o=1.0/+C(+w);n=-(o*i);d=o*d;e=d;k=j*n;m=0.0;o=w*o;d=-(d*j)}else{m=j*j+d*d;k=1.0/+C(+m);d=-(d*k);o=k*j;e=0.0;k=m*k;m=d;n=o;o=-(o*i);d=i*d}g[v+128+16>>2]=m;g[v+128+20>>2]=n;g[v+128+24>>2]=e;g[v+128+32>>2]=o;g[v+128+36>>2]=d;g[v+128+40>>2]=k;f=0;while(1){x=c[b+28>>2]|0;c[v+80>>2]=c[x+4>>2];c[v+80+4>>2]=c[x+20>>2];c[v+80+8>>2]=c[x+36>>2];g[v+80+12>>2]=0.0;c[v+80+16>>2]=c[x+8>>2];c[v+80+20>>2]=c[x+24>>2];c[v+80+24>>2]=c[x+40>>2];g[v+80+28>>2]=0.0;c[v+80+32>>2]=c[x+12>>2];c[v+80+36>>2]=c[x+28>>2];c[v+80+40>>2]=c[x+44>>2];g[v+80+44>>2]=0.0;c[v+32>>2]=c[h+4>>2];c[v+32+4>>2]=c[h+20>>2];c[v+32+8>>2]=c[h+36>>2];g[v+32+12>>2]=0.0;c[v+32+16>>2]=c[h+8>>2];c[v+32+20>>2]=c[h+24>>2];c[v+32+24>>2]=c[h+40>>2];g[v+32+28>>2]=0.0;c[v+32+32>>2]=c[h+12>>2];c[v+32+36>>2]=c[h+28>>2];c[v+32+40>>2]=c[h+44>>2];g[v+32+44>>2]=0.0;w=t-+g[x+56>>2];o=r-+g[x+60>>2];g[v+16>>2]=q-+g[x+52>>2];g[v+16+4>>2]=w;g[v+16+8>>2]=o;g[v+16+12>>2]=0.0;o=u-+g[h+56>>2];w=s-+g[h+60>>2];g[v>>2]=p-+g[h+52>>2];g[v+4>>2]=o;g[v+8>>2]=w;g[v+12>>2]=0.0;x=c[b+28>>2]|0;h=c[b+32>>2]|0;Ag(b+48+(f*84|0)|0,v+80|0,v+32|0,v+16|0,v,v+128+(f<<4)|0,x+396|0,+g[x+344>>2],h+396|0,+g[h+344>>2]);f=f+1|0;if((f|0)==3)break;h=c[b+32>>2]|0}}d=+g[b+560>>2];e=+g[b+576>>2];i=+g[b+592>>2];if(+B(+i)>.7071067690849304){p=1.0/+C(+(i*i+e*e));j=0.0;k=e*p;m=-(i*p);n=(i*i+e*e)*p;o=-(d*e*p);p=d*-(i*p)}else{p=1.0/+C(+(d*d+e*e));j=-(e*p);k=0.0;m=d*p;n=-(i*d*p);o=i*-(e*p);p=(d*d+e*e)*p}h=c[b+28>>2]|0;J=+g[h+4>>2];I=+g[h+8>>2];s=+g[h+12>>2];R=j*J+m*I+k*s;H=+g[h+20>>2];G=+g[h+24>>2];u=+g[h+28>>2];T=j*H+m*G+k*u;q=+g[h+36>>2];A=+g[h+40>>2];E=+g[h+44>>2];W=j*q+m*A+k*E;D=n*J+o*I+p*s;M=n*H+o*G+p*u;N=n*q+o*A+p*E;f=c[b+32>>2]|0;z=+g[f+4>>2];y=+g[f+20>>2];j=+g[f+36>>2];o=+g[f+8>>2];p=+g[f+24>>2];t=+g[f+40>>2];P=+g[f+12>>2];S=+g[f+28>>2];V=+g[f+44>>2];c[b+300>>2]=0;c[b+300+4>>2]=0;c[b+300+8>>2]=0;c[b+300+12>>2]=0;g[b+316>>2]=R*J+T*H+W*q;g[b+320>>2]=R*I+T*G+W*A;g[b+324>>2]=R*s+T*u+W*E;g[b+328>>2]=0.0;g[b+332>>2]=z*-R+y*-T+j*-W;g[b+336>>2]=o*-R+p*-T+t*-W;g[b+340>>2]=P*-R+S*-T+V*-W;g[b+344>>2]=0.0;F=(R*J+T*H+W*q)*+g[h+396>>2];L=(R*I+T*G+W*A)*+g[h+400>>2];K=(R*s+T*u+W*E)*+g[h+404>>2];g[b+348>>2]=F;g[b+352>>2]=L;g[b+356>>2]=K;g[b+360>>2]=0.0;n=(z*-R+y*-T+j*-W)*+g[f+396>>2];w=(o*-R+p*-T+t*-W)*+g[f+400>>2];X=(P*-R+S*-T+V*-W)*+g[f+404>>2];g[b+364>>2]=n;g[b+368>>2]=w;g[b+372>>2]=X;g[b+376>>2]=0.0;g[b+380>>2]=(R*J+T*H+W*q)*F+(R*I+T*G+W*A)*L+(R*s+T*u+W*E)*K+((z*-R+y*-T+j*-W)*n+(o*-R+p*-T+t*-W)*w+(P*-R+S*-T+V*-W)*X);f=c[b+28>>2]|0;X=+g[f+4>>2];W=+g[f+20>>2];V=+g[f+36>>2];T=+g[f+8>>2];S=+g[f+24>>2];R=+g[f+40>>2];P=+g[f+12>>2];w=+g[f+28>>2];t=+g[f+44>>2];h=c[b+32>>2]|0;p=+g[h+4>>2];o=+g[h+20>>2];n=+g[h+36>>2];j=+g[h+8>>2];y=+g[h+24>>2];z=+g[h+40>>2];K=+g[h+12>>2];L=+g[h+28>>2];F=+g[h+44>>2];c[b+384>>2]=0;c[b+384+4>>2]=0;c[b+384+8>>2]=0;c[b+384+12>>2]=0;g[b+400>>2]=D*X+M*W+N*V;g[b+404>>2]=D*T+M*S+N*R;g[b+408>>2]=D*P+M*w+N*t;g[b+412>>2]=0.0;g[b+416>>2]=p*-D+o*-M+n*-N;g[b+420>>2]=j*-D+y*-M+z*-N;g[b+424>>2]=K*-D+L*-M+F*-N;g[b+428>>2]=0.0;U=(D*X+M*W+N*V)*+g[f+396>>2];Q=(D*T+M*S+N*R)*+g[f+400>>2];r=(D*P+M*w+N*t)*+g[f+404>>2];g[b+432>>2]=U;g[b+436>>2]=Q;g[b+440>>2]=r;g[b+444>>2]=0.0;k=(p*-D+o*-M+n*-N)*+g[h+396>>2];m=(j*-D+y*-M+z*-N)*+g[h+400>>2];O=(K*-D+L*-M+F*-N)*+g[h+404>>2];g[b+448>>2]=k;g[b+452>>2]=m;g[b+456>>2]=O;g[b+460>>2]=0.0;g[b+464>>2]=(D*X+M*W+N*V)*U+(D*T+M*S+N*R)*Q+(D*P+M*w+N*t)*r+((p*-D+o*-M+n*-N)*k+(j*-D+y*-M+z*-N)*m+(K*-D+L*-M+F*-N)*O);h=c[b+28>>2]|0;O=+g[h+4>>2];N=+g[h+20>>2];F=+g[h+36>>2];M=+g[h+8>>2];L=+g[h+24>>2];D=+g[h+40>>2];K=+g[h+12>>2];m=+g[h+28>>2];z=+g[h+44>>2];f=c[b+32>>2]|0;y=+g[f+4>>2];j=+g[f+20>>2];k=+g[f+36>>2];n=+g[f+8>>2];o=+g[f+24>>2];p=+g[f+40>>2];r=+g[f+12>>2];t=+g[f+28>>2];w=+g[f+44>>2];c[b+468>>2]=0;c[b+468+4>>2]=0;c[b+468+8>>2]=0;c[b+468+12>>2]=0;F=(J*d+I*e+s*i)*O+(H*d+G*e+u*i)*N+(q*d+A*e+E*i)*F;D=(J*d+I*e+s*i)*M+(H*d+G*e+u*i)*L+(q*d+A*e+E*i)*D;z=(J*d+I*e+s*i)*K+(H*d+G*e+u*i)*m+(q*d+A*e+E*i)*z;g[b+484>>2]=F;g[b+488>>2]=D;g[b+492>>2]=z;g[b+496>>2]=0.0;s=-(J*d+I*e+s*i);u=-(H*d+G*e+u*i);e=-(q*d+A*e+E*i);g[b+500>>2]=y*s+j*u+k*e;g[b+504>>2]=n*s+o*u+p*e;g[b+508>>2]=r*s+t*u+w*e;g[b+512>>2]=0.0;E=F*+g[h+396>>2];A=D*+g[h+400>>2];i=z*+g[h+404>>2];g[b+516>>2]=E;g[b+520>>2]=A;g[b+524>>2]=i;g[b+528>>2]=0.0;m=(y*s+j*u+k*e)*+g[f+396>>2];q=(n*s+o*u+p*e)*+g[f+400>>2];d=(r*s+t*u+w*e)*+g[f+404>>2];g[b+532>>2]=m;g[b+536>>2]=q;g[b+540>>2]=d;g[b+544>>2]=0.0;g[b+548>>2]=F*E+D*A+z*i+((y*s+j*u+k*e)*m+(n*s+o*u+p*e)*q+(r*s+t*u+w*e)*d);g[b+724>>2]=0.0;f=c[b+28>>2]|0;h=c[b+32>>2]|0;d=+Ri(b,f+4|0,h+4|0);g[b+728>>2]=d;g[b+708>>2]=0.0;g[b+712>>2]=0.0;a[b+716>>0]=0;e=+g[b+692>>2];do if(e>=0.0){d=+bh(d-+g[b+688>>2],6.2831854820251465);if(!(d<-3.1415927410125732)){if(d>3.1415927410125732)d=d+-6.2831854820251465}else d=d+6.2831854820251465;if(d<-e){a[b+716>>0]=1;g[b+708>>2]=-(d+e);g[b+712>>2]=1.0;break}if(d>e){a[b+716>>0]=1;g[b+708>>2]=e-d;g[b+712>>2]=-1.0}}while(0);T=+g[b+560>>2];U=+g[b+576>>2];X=+g[b+592>>2];V=T*+g[f+4>>2]+U*+g[f+8>>2]+X*+g[f+12>>2];W=T*+g[f+20>>2]+U*+g[f+24>>2]+X*+g[f+28>>2];X=T*+g[f+36>>2]+U*+g[f+40>>2]+X*+g[f+44>>2];g[b+720>>2]=1.0/(V*(V*+g[f+264>>2]+W*+g[f+280>>2]+X*+g[f+296>>2])+W*(V*+g[f+268>>2]+W*+g[f+284>>2]+X*+g[f+300>>2])+X*(V*+g[f+272>>2]+W*+g[f+288>>2]+X*+g[f+304>>2])+(V*(V*+g[h+264>>2]+W*+g[h+280>>2]+X*+g[h+296>>2])+W*(V*+g[h+268>>2]+W*+g[h+284>>2]+X*+g[h+300>>2])+X*(V*+g[h+272>>2]+W*+g[h+288>>2]+X*+g[h+304>>2])));l=v;return}function Fc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0;M=l;l=l+64|0;if(!(c[b+12>>2]|0)){l=M;return}f=(a[b+16>>0]|0)!=0;P=f?e:d;f=f?d:e;i=c[P+4>>2]|0;j=c[f+4>>2]|0;P=c[P+12>>2]|0;aa=+g[P>>2];$=+g[P+16>>2];_=+g[P+32>>2];Z=+g[P+4>>2];Y=+g[P+20>>2];A=+g[P+36>>2];k=+g[P+8>>2];G=+g[P+24>>2];u=+g[P+40>>2];T=+g[P+48>>2];S=+g[P+52>>2];R=+g[P+56>>2];O=c[f+12>>2]|0;X=+g[O>>2];W=+g[O+16>>2];D=+g[O+32>>2];V=+g[O+4>>2];U=+g[O+20>>2];H=+g[O+36>>2];t=+g[O+8>>2];r=+g[O+24>>2];p=+g[O+40>>2];Q=-+g[O+48>>2];I=-+g[O+52>>2];J=-+g[O+56>>2];K=+g[P>>2];L=+g[P+16>>2];z=+g[P+32>>2];x=+g[P+4>>2];w=+g[P+20>>2];v=+g[P+36>>2];s=+g[P+8>>2];q=+g[P+24>>2];o=+g[P+40>>2];P=c[(c[i>>2]|0)+64>>2]|0;n=-+g[j+48>>2];m=-+g[j+52>>2];y=-+g[j+56>>2];g[M+48>>2]=(aa*X+$*W+_*D)*n+(aa*V+$*U+_*H)*m+(aa*t+$*r+_*p)*y;g[M+48+4>>2]=(Z*X+Y*W+A*D)*n+(Z*V+Y*U+A*H)*m+(Z*t+Y*r+A*p)*y;g[M+48+8>>2]=(k*X+G*W+u*D)*n+(k*V+G*U+u*H)*m+(k*t+G*r+u*p)*y;g[M+48+12>>2]=0.0;Kb[P&127](M,i,M+48|0);y=+g[M>>2];u=+g[M+4>>2];G=+g[M+8>>2];k=+g[j+48>>2];m=+g[j+52>>2];n=+g[j+56>>2];A=n*(T*t+S*r+R*p+(t*Q+r*I+p*J)+((t*K+r*L+p*z)*y+(t*x+r*w+p*v)*u+(t*s+r*q+p*o)*G))+(k*(T*X+S*W+R*D+(X*Q+W*I+D*J)+((X*K+W*L+D*z)*y+(X*x+W*w+D*v)*u+(X*s+W*q+D*o)*G))+m*(T*V+S*U+R*H+(V*Q+U*I+H*J)+((V*K+U*L+H*z)*y+(V*x+U*w+H*v)*u+(V*s+U*q+H*o)*G)))-+g[j+64>>2];D=T*X+S*W+R*D+(X*Q+W*I+D*J)+((X*K+W*L+D*z)*y+(X*x+W*w+D*v)*u+(X*s+W*q+D*o)*G)-k*A;H=T*V+S*U+R*H+(V*Q+U*I+H*J)+((V*K+U*L+H*z)*y+(V*x+U*w+H*v)*u+(V*s+U*q+H*o)*G)-m*A;G=T*t+S*r+R*p+(t*Q+r*I+p*J)+((t*K+r*L+p*z)*y+(t*x+r*w+p*v)*u+(t*s+r*q+p*o)*G)-n*A;P=c[f+12>>2]|0;o=+g[P>>2];p=+g[P+4>>2];q=+g[P+8>>2];r=+g[P+16>>2];s=+g[P+20>>2];t=+g[P+24>>2];u=+g[P+32>>2];v=+g[P+36>>2];w=+g[P+40>>2];x=+g[P+48>>2];y=+g[P+52>>2];z=+g[P+56>>2];P=c[b+12>>2]|0;O=A<+g[P+752>>2];c[h+4>>2]=P;if(O){P=c[f+12>>2]|0;$=k*+g[P+16>>2]+m*+g[P+20>>2]+n*+g[P+24>>2];aa=k*+g[P+32>>2]+m*+g[P+36>>2]+n*+g[P+40>>2];g[M+48>>2]=+g[P>>2]*k+ +g[P+4>>2]*m+ +g[P+8>>2]*n;g[M+48+4>>2]=$;g[M+48+8>>2]=aa;g[M+48+12>>2]=0.0;g[M+32>>2]=q*G+(o*D+p*H)+x;g[M+32+4>>2]=D*r+H*s+G*t+y;g[M+32+8>>2]=D*u+H*v+G*w+z;g[M+32+12>>2]=0.0;Lb[c[(c[h>>2]|0)+16>>2]&15](h,M+48|0,M+32|0,A)}if((c[i+4>>2]|0)<7?(c[(c[h+4>>2]|0)+748>>2]|0)<(c[b+24>>2]|0):0){k=+g[j+56>>2];if(+B(+k)>.7071067690849304){n=+g[j+52>>2];aa=1.0/+C(+(k*k+n*n));m=0.0;n=n*aa;k=-(k*aa)}else{aa=+g[j+48>>2];m=+g[j+52>>2];k=1.0/+C(+(aa*aa+m*m));m=-(m*k);n=0.0;k=aa*k}I=.019999999552965164/+gb[c[(c[i>>2]|0)+16>>2]&15](i);I=(I>.39269909262657166?.39269909262657166:I)*.5;J=+F(+I)/+C(+(m*m+k*k+n*n));L=m*J;K=k*J;J=n*J;I=+E(+I);f=c[b+20>>2]|0;if((f|0)>0){i=0;do{r=+g[j+48>>2];aa=+g[j+52>>2];x=+g[j+56>>2];v=+(i|0)*(6.2831854820251465/+(f|0))*.5;$=+F(+v)/+C(+(r*r+aa*aa+x*x));v=+E(+v);w=J*-(aa*$)+(L*v+I*-(r*$))-K*-(x*$);t=L*-(x*$)+(K*v+I*-(aa*$))-J*-(r*$);da=K*-(r*$)+(J*v+I*-(x*$))-L*-(aa*$);z=I*v-L*-(r*$)-K*-(aa*$)-J*-(x*$);ia=x*$*t+(r*$*z+v*w)-aa*$*da;ha=r*$*da+(v*t+aa*$*z)-x*$*w;la=aa*$*w+(x*$*z+v*da)-r*$*t;da=v*z-r*$*w-aa*$*t-x*$*da;f=(a[b+16>>0]|0)!=0;ba=f?e:d;f=f?d:e;P=c[ba+4>>2]|0;O=c[f+4>>2]|0;ba=c[ba+12>>2]|0;$=+g[ba>>2];x=+g[ba+4>>2];t=+g[ba+8>>2];aa=+g[ba+16>>2];w=+g[ba+20>>2];r=+g[ba+24>>2];z=+g[ba+32>>2];v=+g[ba+36>>2];p=+g[ba+40>>2];V=+g[ba+48>>2];W=+g[ba+52>>2];X=+g[ba+56>>2];ba=c[f+12>>2]|0;R=+g[ba>>2];S=+g[ba+16>>2];A=+g[ba+32>>2];T=+g[ba+4>>2];U=+g[ba+20>>2];H=+g[ba+36>>2];s=+g[ba+8>>2];q=+g[ba+24>>2];o=+g[ba+40>>2];Y=-+g[ba+48>>2];Z=-+g[ba+52>>2];_=-+g[ba+56>>2];ga=ia*(2.0/(ia*ia+ha*ha+la*la+da*da));n=ha*(2.0/(ia*ia+ha*ha+la*la+da*da));ca=la*(2.0/(ia*ia+ha*ha+la*la+da*da));na=t*(ia*ca-da*n)+(x*(ia*n+da*ca)+$*(1.0-(ha*n+la*ca)));ka=t*(ha*ca+da*ga)+($*(ia*n-da*ca)+x*(1.0-(ia*ga+la*ca)));k=$*(ia*ca+da*n)+x*(ha*ca-da*ga)+t*(1.0-(ia*ga+ha*n));ma=r*(ia*ca-da*n)+(w*(ia*n+da*ca)+aa*(1.0-(ha*n+la*ca)));ja=r*(ha*ca+da*ga)+(aa*(ia*n-da*ca)+w*(1.0-(ia*ga+la*ca)));u=aa*(ia*ca+da*n)+w*(ha*ca-da*ga)+r*(1.0-(ia*ga+ha*n));oa=p*(ia*ca-da*n)+(v*(ia*n+da*ca)+z*(1.0-(ha*n+la*ca)));la=p*(ha*ca+da*ga)+(z*(ia*n-da*ca)+v*(1.0-(ia*ga+la*ca)));n=z*(ia*ca+da*n)+v*(ha*ca-da*ga)+p*(1.0-(ia*ga+ha*n));ha=+g[ba>>2];ga=+g[ba+16>>2];ia=+g[ba+32>>2];da=+g[ba+4>>2];ca=+g[ba+20>>2];ea=+g[ba+36>>2];m=+g[ba+8>>2];G=+g[ba+24>>2];D=+g[ba+40>>2];ba=c[(c[P>>2]|0)+64>>2]|0;fa=-+g[O+48>>2];Q=-+g[O+52>>2];y=-+g[O+56>>2];g[M+32>>2]=(ia*oa+(ha*na+ga*ma))*fa+(ea*oa+(da*na+ca*ma))*Q+(D*oa+(m*na+G*ma))*y;g[M+32+4>>2]=(ia*la+(ha*ka+ga*ja))*fa+(ea*la+(da*ka+ca*ja))*Q+(D*la+(m*ka+G*ja))*y;g[M+32+8>>2]=(ia*n+(ha*k+ga*u))*fa+(ea*n+(da*k+ca*u))*Q+(D*n+(m*k+G*u))*y;g[M+32+12>>2]=0.0;Kb[ba&127](M+48|0,P,M+32|0);y=+g[M+48>>2];u=+g[M+48+4>>2];G=+g[M+48+8>>2];k=+g[O+48>>2];m=+g[O+52>>2];n=+g[O+56>>2];D=n*(V*s+W*q+X*o+(s*Y+q*Z+o*_)+(($*s+aa*q+z*o)*y+(x*s+w*q+v*o)*u+(t*s+r*q+p*o)*G))+(k*(V*R+W*S+X*A+(R*Y+S*Z+A*_)+(($*R+aa*S+z*A)*y+(x*R+w*S+v*A)*u+(t*R+r*S+p*A)*G))+m*(V*T+W*U+X*H+(T*Y+U*Z+H*_)+(($*T+aa*U+z*H)*y+(x*T+w*U+v*H)*u+(t*T+r*U+p*H)*G)))-+g[O+64>>2];A=V*R+W*S+X*A+(R*Y+S*Z+A*_)+(($*R+aa*S+z*A)*y+(x*R+w*S+v*A)*u+(t*R+r*S+p*A)*G)-k*D;H=V*T+W*U+X*H+(T*Y+U*Z+H*_)+(($*T+aa*U+z*H)*y+(x*T+w*U+v*H)*u+(t*T+r*U+p*H)*G)-m*D;G=V*s+W*q+X*o+(s*Y+q*Z+o*_)+(($*s+aa*q+z*o)*y+(x*s+w*q+v*o)*u+(t*s+r*q+p*o)*G)-n*D;O=c[f+12>>2]|0;o=+g[O>>2];p=+g[O+4>>2];q=+g[O+8>>2];r=+g[O+16>>2];s=+g[O+20>>2];t=+g[O+24>>2];u=+g[O+32>>2];v=+g[O+36>>2];w=+g[O+40>>2];x=+g[O+48>>2];y=+g[O+52>>2];z=+g[O+56>>2];O=c[b+12>>2]|0;P=D<+g[O+752>>2];c[h+4>>2]=O;if(P){ba=c[f+12>>2]|0;na=k*+g[ba+16>>2]+m*+g[ba+20>>2]+n*+g[ba+24>>2];oa=k*+g[ba+32>>2]+m*+g[ba+36>>2]+n*+g[ba+40>>2];g[M+32>>2]=+g[ba>>2]*k+ +g[ba+4>>2]*m+ +g[ba+8>>2]*n;g[M+32+4>>2]=na;g[M+32+8>>2]=oa;g[M+32+12>>2]=0.0;g[M+16>>2]=q*G+(o*A+p*H)+x;g[M+16+4>>2]=A*r+H*s+G*t+y;g[M+16+8>>2]=A*u+H*v+G*w+z;g[M+16+12>>2]=0.0;Lb[c[(c[h>>2]|0)+16>>2]&15](h,M+32|0,M+16|0,D)}i=i+1|0;f=c[b+20>>2]|0}while((i|0)<(f|0))}}do if((a[b+8>>0]|0?c[(c[b+12>>2]|0)+748>>2]|0:0)?(N=c[h+4>>2]|0,c[N+748>>2]|0):0){i=c[N+740>>2]|0;j=c[(c[h+8>>2]|0)+8>>2]|0;f=c[(c[h+12>>2]|0)+8>>2]|0;if((i|0)==(j|0)){Oe(N,i+4|0,f+4|0);break}else{Oe(N,f+4|0,j+4|0);break}}while(0);l=M;return}function Gc(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0,j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0,E=0,F=0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0;H=l;l=l+192|0;bj(11202);d=c[b+1112>>2]|0;if((d|0)>0){G=0;do{F=c[(c[b+1120>>2]|0)+(G<<2)>>2]|0;E=c[F+24>>2]|0;if(E){i=H+144+4|0;j=i+44|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));g[H+144>>2]=9.999999747378752e-05;g[H+144+20>>2]=1.9999999494757503e-04;g[H+144+40>>2]=2.9999998514540493e-04;if((E|0)>0){d=c[F+32>>2]|0;i=c[F+12>>2]|0;f=0.0;h=0.0;e=0.0;j=0;do{D=c[d+(j<<2)>>2]|0;C=+g[i+(j<<2)>>2];f=f+ +g[D+8>>2]*C;e=e+C*+g[D+12>>2];h=h+C*+g[D+16>>2];j=j+1|0}while((j|0)!=(E|0))}else{f=0.0;h=0.0;e=0.0}r=+g[F+128>>2];t=f*r;s=e*r;r=h*r;g[F+228>>2]=t;g[F+232>>2]=s;g[F+236>>2]=r;g[F+240>>2]=0.0;if((E|0)>0){d=c[F+32>>2]|0;i=c[F+52>>2]|0;e=9.999999747378752e-05;f=+g[H+144+4>>2];h=+g[H+144+8>>2];k=+g[H+144+16>>2];m=1.9999999494757503e-04;n=+g[H+144+24>>2];o=0.0;p=0.0;q=2.9999998514540493e-04;j=0;do{D=c[d+(j<<2)>>2]|0;x=+g[D+8>>2]-t;y=+g[D+12>>2]-s;B=+g[D+16>>2]-r;z=+g[i+(j<<4)>>2];A=+g[i+(j<<4)+4>>2];C=+g[i+(j<<4)+8>>2];e=x*z+e;f=x*A+f;h=x*C+h;k=y*z+k;m=y*A+m;n=y*C+n;o=B*z+o;p=B*A+p;q=B*C+q;j=j+1|0}while((j|0)!=(E|0));g[H+144>>2]=e;g[H+144+4>>2]=f;g[H+144+8>>2]=h;g[H+144+16>>2]=k;g[H+144+20>>2]=m;g[H+144+24>>2]=n;g[H+144+32>>2]=o;g[H+144+36>>2]=p;g[H+144+40>>2]=q}if((a[22728]|0)==0?Yy(22728)|0:0){g[5824]=9.999999747378752e-05;c[5825]=16}Xc(H+144|0,H+96|0,H+48|0);c[F+108>>2]=c[F+228>>2];c[F+108+4>>2]=c[F+228+4>>2];c[F+108+8>>2]=c[F+228+8>>2];c[F+108+12>>2]=c[F+228+12>>2];c[F+60>>2]=c[H+96>>2];c[F+60+4>>2]=c[H+96+4>>2];c[F+60+8>>2]=c[H+96+8>>2];c[F+60+12>>2]=c[H+96+12>>2];c[F+76>>2]=c[H+96+16>>2];c[F+76+4>>2]=c[H+96+16+4>>2];c[F+76+8>>2]=c[H+96+16+8>>2];c[F+76+12>>2]=c[H+96+16+12>>2];c[F+92>>2]=c[H+96+32>>2];c[F+92+4>>2]=c[H+96+32+4>>2];c[F+92+8>>2]=c[H+96+32+8>>2];c[F+92+12>>2]=c[H+96+32+12>>2];m=+g[F+132>>2];K=+g[F+60>>2];n=+g[F+148>>2];J=+g[F+64>>2];o=+g[F+164>>2];y=+g[F+68>>2];p=+g[F+136>>2];q=+g[F+152>>2];r=+g[F+168>>2];s=+g[F+140>>2];t=+g[F+156>>2];u=+g[F+172>>2];I=+g[F+76>>2];e=+g[F+80>>2];x=+g[F+84>>2];k=+g[F+92>>2];h=+g[F+96>>2];f=+g[F+100>>2];w=(m*K+n*J+o*y)*K+(K*p+J*q+y*r)*J+(K*s+J*t+y*u)*y;v=(m*K+n*J+o*y)*I+(K*p+J*q+y*r)*e+(K*s+J*t+y*u)*x;C=(m*K+n*J+o*y)*k+(K*p+J*q+y*r)*h+(K*s+J*t+y*u)*f;B=(m*I+n*e+o*x)*K+(p*I+q*e+r*x)*J+(s*I+t*e+u*x)*y;A=(m*I+n*e+o*x)*I+(p*I+q*e+r*x)*e+(s*I+t*e+u*x)*x;z=(m*I+n*e+o*x)*k+(p*I+q*e+r*x)*h+(s*I+t*e+u*x)*f;y=K*(m*k+n*h+o*f)+(p*k+q*h+r*f)*J+(s*k+t*h+u*f)*y;x=I*(m*k+n*h+o*f)+(p*k+q*h+r*f)*e+(s*k+t*h+u*f)*x;u=(m*k+n*h+o*f)*k+(p*k+q*h+r*f)*h+(s*k+t*h+u*f)*f;g[F+180>>2]=w;g[F+184>>2]=v;g[F+188>>2]=C;g[F+192>>2]=0.0;g[F+196>>2]=B;g[F+200>>2]=A;g[F+204>>2]=z;g[F+208>>2]=0.0;g[F+212>>2]=y;g[F+216>>2]=x;g[F+220>>2]=u;g[F+224>>2]=0.0;c[F+316>>2]=0;c[F+316+4>>2]=0;c[F+316+8>>2]=0;c[F+316+12>>2]=0;c[F+316+16>>2]=0;c[F+316+20>>2]=0;c[F+316+24>>2]=0;c[F+316+28>>2]=0;if((E|0)>0){d=c[F+32>>2]|0;i=c[F+12>>2]|0;r=+g[F+228>>2];s=+g[F+232>>2];t=+g[F+236>>2];q=0.0;p=0.0;o=0.0;n=0.0;m=0.0;e=0.0;j=0;do{D=c[d+(j<<2)>>2]|0;M=+g[i+(j<<2)>>2];J=+g[D+40>>2]*M;L=M*+g[D+44>>2];M=M*+g[D+48>>2];q=J+q;g[F+316>>2]=q;p=L+p;g[F+320>>2]=p;o=M+o;g[F+324>>2]=o;I=+g[D+8>>2]-r;K=+g[D+12>>2]-s;N=+g[D+16>>2]-t;n=n+(M*K-L*N);g[F+332>>2]=n;m=J*N-M*I+m;g[F+336>>2]=m;e=L*I-J*K+e;g[F+340>>2]=e;j=j+1|0}while((j|0)!=(E|0));D=F+316|0;d=F+332|0}else{q=0.0;p=0.0;o=0.0;n=0.0;m=0.0;e=0.0;D=F+316|0;d=F+332|0}M=+g[F+128>>2];N=1.0-+g[F+356>>2];g[F+316>>2]=q*M*N;g[F+320>>2]=M*p*N;g[F+324>>2]=M*o*N;g[F+328>>2]=0.0;N=1.0-+g[F+360>>2];g[d>>2]=(w*n+v*m+C*e)*N;g[F+336>>2]=(n*B+m*A+e*z)*N;g[F+340>>2]=N*(n*y+m*x+e*u);g[F+344>>2]=0.0;i=F+244|0;j=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));e=+g[F+364>>2];a:do if(e>0.0?(c[F+24>>2]|0)>0:0){d=0;while(1){j=c[(c[F+32>>2]|0)+(d<<2)>>2]|0;i=c[F+52>>2]|0;I=+g[i+(d<<4)>>2];J=+g[i+(d<<4)+4>>2];K=+g[i+(d<<4)+8>>2];L=+g[j+8>>2];M=+g[j+12>>2];N=+g[j+16>>2];M=M+e*(I*+g[F+76>>2]+J*+g[F+80>>2]+K*+g[F+84>>2]+ +g[F+112>>2]-M);N=N+e*(I*k+J*h+K*f+ +g[F+116>>2]-N);g[j+8>>2]=L+e*(I*+g[F+60>>2]+J*+g[F+64>>2]+K*+g[F+68>>2]+ +g[F+108>>2]-L);g[j+12>>2]=M;g[j+16>>2]=N;g[j+20>>2]=0.0;d=d+1|0;if((d|0)>=(c[F+24>>2]|0))break a;k=+g[F+92>>2];h=+g[F+96>>2];f=+g[F+100>>2];e=+g[F+364>>2]}}while(0);if(a[F+377>>0]|0){d=c[F+32>>2]|0;j=c[d>>2]|0;e=+g[j+8>>2];q=+g[j+12>>2];r=+g[j+16>>2];f=+g[j+20>>2];if((E|0)>1){i=1;o=e;p=r;n=f;m=q;k=e;h=f;f=q;e=r;do{j=c[d+(i<<2)>>2]|0;K=+g[j+8>>2];o=K>2];m=L>2];p=M>2];n=N>2]=o;g[H+16+4>>2]=m;g[H+16+8>>2]=p;g[H+16+12>>2]=n;g[H+16+16>>2]=k;g[H+16+20>>2]=f;g[H+16+24>>2]=e;g[H+16+28>>2]=h;d=c[F+348>>2]|0;if(!d){d=c[b+1052>>2]|0;if(!d){c[6472]=(c[6472]|0)+1;d=ic(63)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}i=d;j=i+44|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0))}else c[b+1052>>2]=0;c[d+32>>2]=0;c[d+36>>2]=F;c[d+40>>2]=0;c[d>>2]=c[H+16>>2];c[d+4>>2]=c[H+16+4>>2];c[d+8>>2]=c[H+16+8>>2];c[d+12>>2]=c[H+16+12>>2];c[d+16>>2]=c[H+16+16>>2];c[d+20>>2]=c[H+16+20>>2];c[d+24>>2]=c[H+16+24>>2];c[d+28>>2]=c[H+16+28>>2];af(b+1048|0,c[b+1048>>2]|0,d);c[b+1060>>2]=(c[b+1060>>2]|0)+1;c[F+348>>2]=d}else{L=+g[b+452>>2];M=L*+g[F+320>>2]*3.0;N=L*+g[F+324>>2]*3.0;g[H>>2]=+g[D>>2]*L*3.0;g[H+4>>2]=M;g[H+8>>2]=N;g[H+12>>2]=0.0;Zg(b+1048|0,d,H+16|0,H,+g[b+464>>2])|0}}d=c[b+1112>>2]|0}G=G+1|0}while((G|0)<(d|0))}d=c[2405]|0;b=(c[d+16>>2]|0)+-1|0;c[d+16>>2]=b;if(b|0){l=H;return}do if(c[d+4>>2]|0){Za(H+144|0,0)|0;b=c[6471]|0;g[d+8>>2]=+g[d+8>>2]+ +(((c[H+144+4>>2]|0)-(c[b+4>>2]|0)+(((c[H+144>>2]|0)-(c[b>>2]|0)|0)*1e6|0)-(c[d+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[d+16>>2]|0)){d=c[2405]|0;break}else{l=H;return}}while(0);c[2405]=c[d+20>>2];l=H;return}function Hc(d,e,f,h){d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0;c[d+168>>2]=c[d+152>>2];c[e>>2]=9204;c[e+52>>2]=282;a[e+60>>0]=0;a[e+80>>0]=1;c[e+76>>2]=0;c[e+68>>2]=0;c[e+72>>2]=0;a[e+100>>0]=1;c[e+96>>2]=0;c[e+88>>2]=0;c[e+92>>2]=0;a[e+120>>0]=1;c[e+116>>2]=0;c[e+108>>2]=0;c[e+112>>2]=0;a[e+140>>0]=1;c[e+136>>2]=0;c[e+128>>2]=0;c[e+132>>2]=0;c[e+144>>2]=0;a[e+164>>0]=1;c[e+160>>2]=0;c[e+152>>2]=0;c[e+156>>2]=0;c[e+168>>2]=0;c[e+4>>2]=-8388609;c[e+8>>2]=-8388609;c[e+12>>2]=-8388609;g[e+16>>2]=0.0;c[e+20>>2]=2139095039;c[e+24>>2]=2139095039;c[e+28>>2]=2139095039;g[e+32>>2]=0.0;f=c[d+56>>2]|0;if(h){c[e+56>>2]=TA(f|0)|0;a[e+4>>0]=a[d+4+3>>0]|0;a[e+5>>0]=a[d+4+2>>0]|0;a[e+6>>0]=a[d+4+1>>0]|0;a[e+7>>0]=a[d+4>>0]|0;a[e+8>>0]=a[d+8+3>>0]|0;a[e+9>>0]=a[d+8+2>>0]|0;a[e+10>>0]=a[d+8+1>>0]|0;a[e+11>>0]=a[d+8>>0]|0;a[e+12>>0]=a[d+12+3>>0]|0;a[e+13>>0]=a[d+12+2>>0]|0;a[e+14>>0]=a[d+12+1>>0]|0;a[e+15>>0]=a[d+12>>0]|0;a[e+16>>0]=a[d+16+3>>0]|0;a[e+17>>0]=a[d+16+2>>0]|0;a[e+18>>0]=a[d+16+1>>0]|0;a[e+19>>0]=a[d+16>>0]|0;a[e+20>>0]=a[d+20+3>>0]|0;a[e+21>>0]=a[d+20+2>>0]|0;a[e+22>>0]=a[d+20+1>>0]|0;a[e+23>>0]=a[d+20>>0]|0;a[e+24>>0]=a[d+24+3>>0]|0;a[e+25>>0]=a[d+24+2>>0]|0;a[e+26>>0]=a[d+24+1>>0]|0;a[e+27>>0]=a[d+24>>0]|0;a[e+28>>0]=a[d+28+3>>0]|0;a[e+29>>0]=a[d+28+2>>0]|0;a[e+30>>0]=a[d+28+1>>0]|0;a[e+31>>0]=a[d+28>>0]|0;a[e+32>>0]=a[d+32+3>>0]|0;a[e+33>>0]=a[d+32+2>>0]|0;a[e+34>>0]=a[d+32+1>>0]|0;a[e+35>>0]=a[d+32>>0]|0;a[e+36>>0]=a[d+36+3>>0]|0;a[e+37>>0]=a[d+36+2>>0]|0;a[e+38>>0]=a[d+36+1>>0]|0;a[e+39>>0]=a[d+36>>0]|0;a[e+40>>0]=a[d+40+3>>0]|0;a[e+41>>0]=a[d+40+2>>0]|0;a[e+42>>0]=a[d+40+1>>0]|0;a[e+43>>0]=a[d+40>>0]|0;a[e+44>>0]=a[d+44+3>>0]|0;a[e+45>>0]=a[d+44+2>>0]|0;a[e+46>>0]=a[d+44+1>>0]|0;a[e+47>>0]=a[d+44>>0]|0;a[e+48>>0]=a[d+48+3>>0]|0;a[e+49>>0]=a[d+48+2>>0]|0;a[e+50>>0]=a[d+48+1>>0]|0;a[e+51>>0]=a[d+48>>0]|0;c[e+144>>2]=TA(c[d+144>>2]|0)|0;f=TA(c[d+168>>2]|0)|0}else{c[e+56>>2]=f;c[e+4>>2]=c[d+4>>2];c[e+4+4>>2]=c[d+4+4>>2];c[e+4+8>>2]=c[d+4+8>>2];c[e+4+12>>2]=c[d+4+12>>2];c[e+20>>2]=c[d+20>>2];c[e+20+4>>2]=c[d+20+4>>2];c[e+20+8>>2]=c[d+20+8>>2];c[e+20+12>>2]=c[d+20+12>>2];c[e+36>>2]=c[d+36>>2];c[e+36+4>>2]=c[d+36+4>>2];c[e+36+8>>2]=c[d+36+8>>2];c[e+36+12>>2]=c[d+36+12>>2];c[e+144>>2]=c[d+144>>2];f=c[d+168>>2]|0}c[e+168>>2]=f;a[e+60>>0]=a[d+60>>0]|0;k=c[d+56>>2]|0;if(!(a[d+60>>0]|0)){f=c[e+96>>2]|0;if(f|0){if(a[e+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[e+96>>2]=0}a[e+100>>0]=0;c[e+96>>2]=e+172;c[e+88>>2]=k;c[e+92>>2]=k;if(h)if((k|0)>0){i=c[d+96>>2]|0;f=e+172|0;j=0;do{l=i+(j<<6)|0;n=f+(j<<6)|0;a[n>>0]=a[l+3>>0]|0;a[n+1>>0]=a[l+2>>0]|0;a[n+2>>0]=a[l+1>>0]|0;a[n+3>>0]=a[l>>0]|0;n=i+(j<<6)+4|0;l=f+(j<<6)+4|0;a[l>>0]=a[n+3>>0]|0;a[l+1>>0]=a[n+2>>0]|0;a[l+2>>0]=a[n+1>>0]|0;a[l+3>>0]=a[n>>0]|0;l=i+(j<<6)+8|0;n=f+(j<<6)+8|0;a[n>>0]=a[l+3>>0]|0;a[n+1>>0]=a[l+2>>0]|0;a[n+2>>0]=a[l+1>>0]|0;a[n+3>>0]=a[l>>0]|0;n=i+(j<<6)+12|0;f=f+(j<<6)+12|0;a[f>>0]=a[n+3>>0]|0;a[f+1>>0]=a[n+2>>0]|0;a[f+2>>0]=a[n+1>>0]|0;a[f+3>>0]=a[n>>0]|0;f=c[d+96>>2]|0;n=f+(j<<6)+16|0;l=c[e+96>>2]|0;m=l+(j<<6)+16|0;a[m>>0]=a[n+3>>0]|0;a[m+1>>0]=a[n+2>>0]|0;a[m+2>>0]=a[n+1>>0]|0;a[m+3>>0]=a[n>>0]|0;m=f+(j<<6)+20|0;n=l+(j<<6)+20|0;a[n>>0]=a[m+3>>0]|0;a[n+1>>0]=a[m+2>>0]|0;a[n+2>>0]=a[m+1>>0]|0;a[n+3>>0]=a[m>>0]|0;n=f+(j<<6)+24|0;m=l+(j<<6)+24|0;a[m>>0]=a[n+3>>0]|0;a[m+1>>0]=a[n+2>>0]|0;a[m+2>>0]=a[n+1>>0]|0;a[m+3>>0]=a[n>>0]|0;f=f+(j<<6)+28|0;l=l+(j<<6)+28|0;a[l>>0]=a[f+3>>0]|0;a[l+1>>0]=a[f+2>>0]|0;a[l+2>>0]=a[f+1>>0]|0;a[l+3>>0]=a[f>>0]|0;i=c[d+96>>2]|0;l=TA(c[i+(j<<6)+32>>2]|0)|0;f=c[e+96>>2]|0;c[f+(j<<6)+32>>2]=l;c[f+(j<<6)+36>>2]=TA(c[i+(j<<6)+36>>2]|0)|0;c[f+(j<<6)+40>>2]=TA(c[i+(j<<6)+40>>2]|0)|0;j=j+1|0}while((j|0)!=(k|0))}else f=e+172|0;else if((k|0)>0){f=e+172|0;i=c[d+96>>2]|0;j=0;do{f=f+(j<<6)|0;n=i+(j<<6)|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];f=(c[e+96>>2]|0)+(j<<6)+16|0;n=(c[d+96>>2]|0)+(j<<6)+16|0;c[f>>2]=c[n>>2];c[f+4>>2]=c[n+4>>2];c[f+8>>2]=c[n+8>>2];c[f+12>>2]=c[n+12>>2];i=c[d+96>>2]|0;f=c[e+96>>2]|0;c[f+(j<<6)+32>>2]=c[i+(j<<6)+32>>2];c[f+(j<<6)+36>>2]=c[i+(j<<6)+36>>2];c[f+(j<<6)+40>>2]=c[i+(j<<6)+40>>2];j=j+1|0}while((j|0)!=(k|0))}else f=e+172|0;if(f|0){if(a[e+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[e+96>>2]=0}c[e+88>>2]=0;c[e+88+4>>2]=0;c[e+88+8>>2]=0;a[e+88+12>>0]=0;f=k<<6}else{f=c[e+136>>2]|0;if(f|0){if(a[e+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[e+136>>2]=0}a[e+140>>0]=0;c[e+136>>2]=e+172;c[e+128>>2]=k;c[e+132>>2]=k;if(h){if((k|0)>0){f=c[d+136>>2]|0;i=0;do{b[e+172+(i<<4)>>1]=HG(b[f+(i<<4)>>1]|0)|0;b[e+172+(i<<4)+2>>1]=HG(b[f+(i<<4)+2>>1]|0)|0;b[e+172+(i<<4)+4>>1]=HG(b[f+(i<<4)+4>>1]|0)|0;b[e+172+(i<<4)+6>>1]=HG(b[f+(i<<4)+6>>1]|0)|0;b[e+172+(i<<4)+8>>1]=HG(b[f+(i<<4)+8>>1]|0)|0;b[e+172+(i<<4)+10>>1]=HG(b[f+(i<<4)+10>>1]|0)|0;c[e+172+(i<<4)+12>>2]=TA(c[f+(i<<4)+12>>2]|0)|0;i=i+1|0}while((i|0)!=(k|0))}}else if((k|0)>0){f=c[d+136>>2]|0;i=0;do{b[e+172+(i<<4)>>1]=b[f+(i<<4)>>1]|0;b[e+172+(i<<4)+2>>1]=b[f+(i<<4)+2>>1]|0;b[e+172+(i<<4)+4>>1]=b[f+(i<<4)+4>>1]|0;b[e+172+(i<<4)+6>>1]=b[f+(i<<4)+6>>1]|0;b[e+172+(i<<4)+8>>1]=b[f+(i<<4)+8>>1]|0;b[e+172+(i<<4)+10>>1]=b[f+(i<<4)+10>>1]|0;c[e+172+(i<<4)+12>>2]=c[f+(i<<4)+12>>2];i=i+1|0}while((i|0)!=(k|0))}c[e+128>>2]=0;c[e+128+4>>2]=0;c[e+128+8>>2]=0;a[e+128+12>>0]=0;f=k<<4}k=e+172+f|0;f=c[d+168>>2]|0;i=c[e+160>>2]|0;if(i|0){if(a[e+164>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[e+160>>2]=0}a[e+164>>0]=0;c[e+160>>2]=k;c[e+152>>2]=f;c[e+156>>2]=f;j=c[d+168>>2]|0;if(h){if((j|0)<=0){c[e>>2]=0;c[e+152>>2]=0;c[e+152+4>>2]=0;c[e+152+8>>2]=0;a[e+152+12>>0]=0;return 1}f=c[d+160>>2]|0;i=0;do{b[k+(i<<5)>>1]=HG(b[f+(i<<5)>>1]|0)|0;b[k+(i<<5)+2>>1]=HG(b[f+(i<<5)+2>>1]|0)|0;b[k+(i<<5)+4>>1]=HG(b[f+(i<<5)+4>>1]|0)|0;b[k+(i<<5)+6>>1]=HG(b[f+(i<<5)+6>>1]|0)|0;b[k+(i<<5)+8>>1]=HG(b[f+(i<<5)+8>>1]|0)|0;b[k+(i<<5)+10>>1]=HG(b[f+(i<<5)+10>>1]|0)|0;c[k+(i<<5)+12>>2]=TA(c[f+(i<<5)+12>>2]|0)|0;c[k+(i<<5)+16>>2]=TA(c[f+(i<<5)+16>>2]|0)|0;i=i+1|0}while((i|0)!=(j|0));c[e>>2]=0;c[e+152>>2]=0;c[e+152+4>>2]=0;c[e+152+8>>2]=0;a[e+152+12>>0]=0;return 1}else{if((j|0)<=0){c[e>>2]=0;c[e+152>>2]=0;c[e+152+4>>2]=0;c[e+152+8>>2]=0;a[e+152+12>>0]=0;return 1}f=c[d+160>>2]|0;i=0;do{b[k+(i<<5)>>1]=b[f+(i<<5)>>1]|0;b[k+(i<<5)+2>>1]=b[f+(i<<5)+2>>1]|0;b[k+(i<<5)+4>>1]=b[f+(i<<5)+4>>1]|0;b[k+(i<<5)+6>>1]=b[f+(i<<5)+6>>1]|0;b[k+(i<<5)+8>>1]=b[f+(i<<5)+8>>1]|0;b[k+(i<<5)+10>>1]=b[f+(i<<5)+10>>1]|0;c[k+(i<<5)+12>>2]=c[f+(i<<5)+12>>2];c[k+(i<<5)+16>>2]=c[f+(i<<5)+16>>2];c[k+(i<<5)+20>>2]=0;c[k+(i<<5)+24>>2]=0;c[k+(i<<5)+28>>2]=0;i=i+1|0}while((i|0)<(c[d+168>>2]|0));c[e>>2]=0;c[e+152>>2]=0;c[e+152+4>>2]=0;c[e+152+8>>2]=0;a[e+152+12>>0]=0;return 1}return 0}function Ic(b,d,e,f,h,i,j,k,m,n){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0.0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0,B=0.0,C=0,D=0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0;C=l;l=l+4224|0;if(((c[e+4>>2]|0)+-17|0)>>>0<2)A=((c[f+4>>2]|0)+-17|0)>>>0<2;else A=0;b=0;do{Ge();v=+g[24820+(b<<4)>>2];w=+g[24820+(b<<4)+4>>2];x=+g[24820+(b<<4)+8>>2];z=+g[h+4>>2]*-v+ +g[h+20>>2]*-w+ +g[h+36>>2]*-x;y=+g[h+8>>2]*-v+ +g[h+24>>2]*-w+ +g[h+40>>2]*-x;g[C+1248+(b<<4)>>2]=+g[h>>2]*-v+ +g[h+16>>2]*-w+ +g[h+32>>2]*-x;g[C+1248+(b<<4)+4>>2]=z;g[C+1248+(b<<4)+8>>2]=y;g[C+1248+(b<<4)+12>>2]=0.0;y=v*+g[i+4>>2]+w*+g[i+20>>2]+x*+g[i+36>>2];z=v*+g[i+8>>2]+w*+g[i+24>>2]+x*+g[i+40>>2];g[C+256+(b<<4)>>2]=v*+g[i>>2]+w*+g[i+16>>2]+x*+g[i+32>>2];g[C+256+(b<<4)+4>>2]=y;g[C+256+(b<<4)+8>>2]=z;g[C+256+(b<<4)+12>>2]=0.0;b=b+1|0}while((b|0)!=42);b=qb[c[(c[e>>2]|0)+84>>2]&127](e)|0;if((b|0)>0){p=0;q=42;while(1){Kb[c[(c[e>>2]|0)+88>>2]&127](e,p,C+176|0);y=+g[C+176>>2];z=+g[C+176+4>>2];x=+g[C+176+8>>2];w=y*+g[h+16>>2]+z*+g[h+20>>2]+x*+g[h+24>>2];v=y*+g[h+32>>2]+z*+g[h+36>>2]+x*+g[h+40>>2];g[C+176>>2]=+g[h>>2]*y+ +g[h+4>>2]*z+ +g[h+8>>2]*x;g[C+176+4>>2]=w;g[C+176+8>>2]=v;g[C+176+12>>2]=0.0;Ge();r=24820+(q<<4)|0;c[r>>2]=c[C+176>>2];c[r+4>>2]=c[C+176+4>>2];c[r+8>>2]=c[C+176+8>>2];c[r+12>>2]=c[C+176+12>>2];v=+g[C+176>>2];w=+g[C+176+4>>2];x=+g[C+176+8>>2];z=+g[h+4>>2]*-v+ +g[h+20>>2]*-w+ +g[h+36>>2]*-x;y=+g[h+8>>2]*-v+ +g[h+24>>2]*-w+ +g[h+40>>2]*-x;g[C+1248+(q<<4)>>2]=+g[h>>2]*-v+ +g[h+16>>2]*-w+ +g[h+32>>2]*-x;g[C+1248+(q<<4)+4>>2]=z;g[C+1248+(q<<4)+8>>2]=y;g[C+1248+(q<<4)+12>>2]=0.0;y=v*+g[i+4>>2]+w*+g[i+20>>2]+x*+g[i+36>>2];z=v*+g[i+8>>2]+w*+g[i+24>>2]+x*+g[i+40>>2];g[C+256+(q<<4)>>2]=+g[i>>2]*v+ +g[i+16>>2]*w+ +g[i+32>>2]*x;g[C+256+(q<<4)+4>>2]=y;g[C+256+(q<<4)+8>>2]=z;g[C+256+(q<<4)+12>>2]=0.0;p=p+1|0;if((p|0)==(b|0))break;else q=q+1|0}q=b+42|0}else q=42;b=qb[c[(c[f>>2]|0)+84>>2]&127](f)|0;if((b|0)>0){p=0;r=q;while(1){Kb[c[(c[f>>2]|0)+88>>2]&127](f,p,C+176|0);y=+g[C+176>>2];z=+g[C+176+4>>2];x=+g[C+176+8>>2];w=y*+g[i+16>>2]+z*+g[i+20>>2]+x*+g[i+24>>2];v=y*+g[i+32>>2]+z*+g[i+36>>2]+x*+g[i+40>>2];g[C+176>>2]=+g[i>>2]*y+ +g[i+4>>2]*z+ +g[i+8>>2]*x;g[C+176+4>>2]=w;g[C+176+8>>2]=v;g[C+176+12>>2]=0.0;Ge();D=24820+(r<<4)|0;c[D>>2]=c[C+176>>2];c[D+4>>2]=c[C+176+4>>2];c[D+8>>2]=c[C+176+8>>2];c[D+12>>2]=c[C+176+12>>2];v=+g[C+176>>2];w=+g[C+176+4>>2];x=+g[C+176+8>>2];z=+g[h+4>>2]*-v+ +g[h+20>>2]*-w+ +g[h+36>>2]*-x;y=+g[h+8>>2]*-v+ +g[h+24>>2]*-w+ +g[h+40>>2]*-x;g[C+1248+(r<<4)>>2]=+g[h>>2]*-v+ +g[h+16>>2]*-w+ +g[h+32>>2]*-x;g[C+1248+(r<<4)+4>>2]=z;g[C+1248+(r<<4)+8>>2]=y;g[C+1248+(r<<4)+12>>2]=0.0;y=v*+g[i+4>>2]+w*+g[i+20>>2]+x*+g[i+36>>2];z=v*+g[i+8>>2]+w*+g[i+24>>2]+x*+g[i+40>>2];g[C+256+(r<<4)>>2]=+g[i>>2]*v+ +g[i+16>>2]*w+ +g[i+32>>2]*x;g[C+256+(r<<4)+4>>2]=y;g[C+256+(r<<4)+8>>2]=z;g[C+256+(r<<4)+12>>2]=0.0;p=p+1|0;if((p|0)==(b|0))break;else r=r+1|0}q=b+q|0}Nb[c[(c[e>>2]|0)+76>>2]&127](e,C+1248|0,C+3232|0,q);Nb[c[(c[f>>2]|0)+76>>2]&127](f,C+256|0,C+2240|0,q);if((q|0)>0){z=0.0;w=0.0;x=0.0;b=0;u=0.0;s=999999984306749440.0;while(1){Ge();o=+g[24820+(b<<4)>>2];t=+g[24820+(b<<4)+4>>2];y=+g[24820+(b<<4)+12>>2];v=A?0.0:+g[24820+(b<<4)+8>>2];if(o*o+t*t+v*v>.01?(F=+g[C+3232+(b<<4)>>2],E=+g[C+3232+(b<<4)+4>>2],B=+g[C+3232+(b<<4)+8>>2],I=+g[C+2240+(b<<4)>>2],H=+g[C+2240+(b<<4)+4>>2],G=+g[C+2240+(b<<4)+8>>2],B=o*(I*+g[i>>2]+H*+g[i+4>>2]+G*+g[i+8>>2]+ +g[i+48>>2]-(F*+g[h>>2]+E*+g[h+4>>2]+B*+g[h+8>>2]+ +g[h+48>>2]))+t*(I*+g[i+16>>2]+H*+g[i+20>>2]+G*+g[i+24>>2]+ +g[i+52>>2]-(F*+g[h+16>>2]+E*+g[h+20>>2]+B*+g[h+24>>2]+ +g[h+52>>2]))+v*((A?0.0:I*+g[i+32>>2]+H*+g[i+36>>2]+G*+g[i+40>>2]+ +g[i+56>>2])-(A?0.0:F*+g[h+32>>2]+E*+g[h+36>>2]+B*+g[h+40>>2]+ +g[h+56>>2])),B>2]|0){case 4:case 5:case 10:case 11:case 13:case 1:case 0:case 8:break;default:+gb[c[(c[e>>2]|0)+48>>2]&15](e)}switch(c[f+4>>2]|0){case 4:case 5:case 10:case 11:case 13:case 1:case 0:case 8:break;default:+gb[c[(c[f>>2]|0)+48>>2]&15](f)}if(s<0.0){D=0;l=C;return D|0}switch(c[e+4>>2]|0){case 8:{t=+g[e+28>>2]*+g[e+12>>2];break}case 0:{t=+g[e+44>>2];break}case 1:{t=+g[e+44>>2];break}case 13:{t=+g[e+44>>2];break}case 11:{t=+g[e+44>>2];break}case 10:{t=+g[e+44>>2];break}case 4:case 5:{t=+g[e+44>>2];break}default:t=+gb[c[(c[e>>2]|0)+48>>2]&15](e)}b=c[f+4>>2]|0;switch(b|0){case 8:{b=8;o=+g[f+28>>2]*+g[f+12>>2];break}case 0:{b=0;o=+g[f+44>>2];break}case 1:{b=1;o=+g[f+44>>2];break}case 13:{b=13;o=+g[f+44>>2];break}case 11:{b=11;o=+g[f+44>>2];break}case 10:{b=10;o=+g[f+44>>2];break}case 4:case 5:{o=+g[f+44>>2];break}default:{o=+gb[c[(c[f>>2]|0)+48>>2]&15](f);b=c[f+4>>2]|0}}o=s+(t+o+.5);c[C+176>>2]=9400;c[C+176+4>>2]=0;c[C+176+8>>2]=1065353216;c[C+176+12>>2]=0;g[C+176+16>>2]=0.0;c[C+176+20>>2]=0;c[C+176+24>>2]=d;c[C+176+28>>2]=e;c[C+176+32>>2]=f;c[C+176+36>>2]=c[e+4>>2];c[C+176+40>>2]=b;g[C+176+44>>2]=+gb[c[(c[e>>2]|0)+48>>2]&15](e);g[C+176+48>>2]=+gb[c[(c[f>>2]|0)+48>>2]&15](f);a[C+176+52>>0]=0;c[C+176+60>>2]=-1;c[C+176+72>>2]=1;c[C+176+76>>2]=1;G=x*o+ +g[h+48>>2];H=w*o+ +g[h+52>>2];I=v*o+ +g[h+56>>2];c[C+44>>2]=c[h>>2];c[C+44+4>>2]=c[h+4>>2];c[C+44+8>>2]=c[h+8>>2];c[C+44+12>>2]=c[h+12>>2];c[C+44+16>>2]=c[h+16>>2];c[C+44+16+4>>2]=c[h+16+4>>2];c[C+44+16+8>>2]=c[h+16+8>>2];c[C+44+16+12>>2]=c[h+16+12>>2];c[C+44+32>>2]=c[h+32>>2];c[C+44+32+4>>2]=c[h+32+4>>2];c[C+44+32+8>>2]=c[h+32+8>>2];c[C+44+32+12>>2]=c[h+32+12>>2];g[C+44+48>>2]=G;g[C+44+52>>2]=H;g[C+44+56>>2]=I;g[C+44+60>>2]=0.0;c[C+44+64>>2]=c[i>>2];c[C+44+64+4>>2]=c[i+4>>2];c[C+44+64+8>>2]=c[i+8>>2];c[C+44+64+12>>2]=c[i+12>>2];c[C+44+80>>2]=c[i+16>>2];c[C+44+80+4>>2]=c[i+16+4>>2];c[C+44+80+8>>2]=c[i+16+8>>2];c[C+44+80+12>>2]=c[i+16+12>>2];c[C+44+96>>2]=c[i+32>>2];c[C+44+96+4>>2]=c[i+32+4>>2];c[C+44+96+8>>2]=c[i+32+8>>2];c[C+44+96+12>>2]=c[i+32+12>>2];c[C+44+112>>2]=c[i+48>>2];c[C+44+112+4>>2]=c[i+48+4>>2];c[C+44+112+8>>2]=c[i+48+8>>2];c[C+44+112+12>>2]=c[i+48+12>>2];g[C+44+128>>2]=999999984306749440.0;c[C>>2]=9284;a[C+40>>0]=0;g[C+176+4>>2]=-x;g[C+176+8>>2]=-w;g[C+176+12>>2]=-v;g[C+176+16>>2]=0.0;Bc(C+176|0,C+44|0,C,n,0);o=o-+g[C+36>>2];b=a[C+40>>0]|0;if(b<<24>>24){H=+g[C+24>>2]-w*o;I=+g[C+28>>2]-v*o;g[k>>2]=+g[C+20>>2]-x*o;g[k+4>>2]=H;g[k+8>>2]=I;g[k+12>>2]=0.0;c[m>>2]=c[C+20>>2];c[m+4>>2]=c[C+20+4>>2];c[m+8>>2]=c[C+20+8>>2];c[m+12>>2]=c[C+20+12>>2];g[j>>2]=x;g[j+4>>2]=w;g[j+8>>2]=v;g[j+12>>2]=u}D=b<<24>>24!=0;l=C;return D|0}function Jc(d,e){d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0;B=l;l=l+464|0;bj(12063);f=c[d+84>>2]|0;if(f|0)Bb[f&31](d,e);Bb[c[(c[d>>2]|0)+140>>2]&31](d,e);g[d+28>>2]=e;c[d+32>>2]=0;c[d+48>>2]=qb[c[(c[d>>2]|0)+20>>2]&127](d)|0;bj(12106);bj(12131);f=c[d+316>>2]|0;if((c[d+308>>2]|0)>0){h=0;do{s=c[d+24>>2]|0;Gb[c[(c[s>>2]|0)+16>>2]&127](s,c[f+(h<<2)>>2]|0);h=h+1|0;f=c[d+316>>2]|0}while((h|0)<(c[d+308>>2]|0))}if(f|0){if(a[d+320>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+316>>2]=0}a[d+320>>0]=1;c[d+316>>2]=0;c[d+308>>2]=0;c[d+312>>2]=0;f=c[2405]|0;s=(c[f+16>>2]|0)+-1|0;c[f+16>>2]=s;do if(!s){if(c[f+4>>2]|0){Za(B+368|0,0)|0;s=c[6471]|0;g[f+8>>2]=+g[f+8>>2]+ +(((c[B+368+4>>2]|0)-(c[s+4>>2]|0)+(((c[B+368>>2]|0)-(c[s>>2]|0)|0)*1e6|0)-(c[f+12>>2]|0)|0)>>>0)/1.0e3;if(c[f+16>>2]|0)break;f=c[2405]|0}c[2405]=c[f+20>>2]}while(0);a:do if((c[d+232>>2]|0)>0){s=B+304+48|0;r=B+368+44|0;q=0;while(1){j=c[(c[d+240>>2]|0)+(q<<2)>>2]|0;g[j+244>>2]=1.0;b:do switch(c[j+216>>2]|0){case 2:case 5:break;default:if(((c[j+204>>2]&3|0)==0?(Ig(j+4|0,+g[j+312>>2],+g[j+316>>2],+g[j+320>>2],j+328|0,e,B+304|0),t=+g[s>>2],y=t-+g[j+52>>2],u=+g[B+304+52>>2],A=u-+g[j+56>>2],v=+g[B+304+56>>2],z=v-+g[j+60>>2],a[d+44>>0]|0):0)?(p=+g[j+252>>2],p*p!=0.0?p*p>2]|0)+4>>2]|0)<20?(c[5853]=(c[5853]|0)+1,i=c[d+68>>2]|0,i=qb[c[(c[i>>2]|0)+36>>2]&127](i)|0,m=c[d+24>>2]|0,g[B+368+4>>2]=1.0,b[B+368+8>>1]=1,b[B+368+10>>1]=-1,c[B+368+12>>2]=c[j+52>>2],c[B+368+12+4>>2]=c[j+52+4>>2],c[B+368+12+8>>2]=c[j+52+8>>2],c[B+368+12+12>>2]=c[j+52+12>>2],c[B+368+28>>2]=c[s>>2],c[B+368+28+4>>2]=c[s+4>>2],c[B+368+28+8>>2]=c[s+8>>2],c[B+368+28+12>>2]=c[s+12>>2],c[B+368+76>>2]=0,c[B+368>>2]=4476,c[B+368+80>>2]=j,c[B+368+88>>2]=i,c[B+368+92>>2]=m,m=c[j+248>>2]|0,c[B+248+8>>2]=0,c[B+248+12>>2]=1065353216,c[B+248+16>>2]=1065353216,c[B+248+20>>2]=1065353216,g[B+248+24>>2]=0.0,c[B+248>>2]=6864,c[B+248+4>>2]=8,c[B+248+28>>2]=m,c[B+248+44>>2]=m,c[B+368+84>>2]=c[d+56>>2],m=c[(c[j+188>>2]|0)+4>>2]|0,b[B+368+8>>1]=m,b[B+368+10>>1]=m>>>16,c[B+184+48>>2]=c[s>>2],c[B+184+48+4>>2]=c[s+4>>2],c[B+184+48+8>>2]=c[s+8>>2],c[B+184+48+12>>2]=c[s+12>>2],c[B+184>>2]=c[j+4>>2],c[B+184+4>>2]=c[j+4+4>>2],c[B+184+8>>2]=c[j+4+8>>2],c[B+184+12>>2]=c[j+4+12>>2],c[B+184+16>>2]=c[j+20>>2],c[B+184+16+4>>2]=c[j+20+4>>2],c[B+184+16+8>>2]=c[j+20+8>>2],c[B+184+16+12>>2]=c[j+20+12>>2],c[B+184+32>>2]=c[j+36>>2],c[B+184+32+4>>2]=c[j+36+4>>2],c[B+184+32+8>>2]=c[j+36+8>>2],c[B+184+32+12>>2]=c[j+36+12>>2],zd(d,B+248|0,j+4|0,B+184|0,B+368|0,0.0),w=+g[B+368+4>>2],w<1.0):0){n=w*(t-+g[j+52>>2]);o=w*(u-+g[j+56>>2]);p=w*(v-+g[j+60>>2]);k=-(o*+g[B+368+48>>2])-n*+g[r>>2]-p*+g[B+368+52>>2];m=c[d+24>>2]|0;m=ub[c[(c[m>>2]|0)+12>>2]&63](m,j,c[B+368+76>>2]|0)|0;f=c[d+308>>2]|0;if((f|0)==(c[d+312>>2]|0)?(x=f|0?f<<1:1,(f|0)<(x|0)):0){if(!x)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((x<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[d+308>>2]|0}if((f|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[d+316>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0))}i=c[d+316>>2]|0;if(i){if(a[d+320>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);f=c[d+308>>2]|0}c[d+316>>2]=0}a[d+320>>0]=1;c[d+316>>2]=h;c[d+312>>2]=x}c[(c[d+316>>2]|0)+(f<<2)>>2]=m;c[d+308>>2]=f+1;n=n+ +g[j+52>>2];o=o+ +g[j+56>>2];p=p+ +g[j+60>>2];i=c[B+368+76>>2]|0;N=+g[i+4>>2];M=+g[i+20>>2];L=+g[i+36>>2];K=+g[i+8>>2];J=+g[i+24>>2];I=+g[i+40>>2];H=+g[i+12>>2];F=+g[i+28>>2];D=+g[i+44>>2];G=-+g[i+52>>2];E=-+g[i+56>>2];C=-+g[i+60>>2];c[B>>2]=0;c[B+4>>2]=0;c[B+8>>2]=0;c[B+12>>2]=0;g[B+16>>2]=n*N+o*M+p*L+(N*G+M*E+L*C);g[B+20>>2]=n*K+o*J+p*I+(K*G+J*E+I*C);g[B+24>>2]=n*H+o*F+p*D+(H*G+F*E+D*C);g[B+28>>2]=0.0;c[B+64>>2]=c[r>>2];c[B+64+4>>2]=c[r+4>>2];c[B+64+8>>2]=c[r+8>>2];c[B+64+12>>2]=c[r+12>>2];g[B+80>>2]=k;g[B+84>>2]=0.0;g[B+88>>2]=0.0;g[B+92>>2]=0.0;c[B+112>>2]=0;a[B+116>>0]=0;c[B+120>>2]=0;c[B+120+4>>2]=0;c[B+120+8>>2]=0;c[B+120+12>>2]=0;c[B+120+16>>2]=0;c[B+120+20>>2]=0;c[B+120+24>>2]=0;c[B+120+28>>2]=0;i=_e(m,B)|0;g[m+4+(i*184|0)+92>>2]=0.0;k=+g[j+224>>2]*+g[(c[B+368+76>>2]|0)+224>>2];k=k<-10.0?-10.0:k;g[m+4+(i*184|0)+84>>2]=k>10.0?10.0:k;c[m+4+(i*184|0)+48>>2]=c[j+52>>2];c[m+4+(i*184|0)+48+4>>2]=c[j+52+4>>2];c[m+4+(i*184|0)+48+8>>2]=c[j+52+8>>2];c[m+4+(i*184|0)+48+12>>2]=c[j+52+12>>2];g[m+4+(i*184|0)+32>>2]=n;g[m+4+(i*184|0)+36>>2]=o;g[m+4+(i*184|0)+40>>2]=p;g[m+4+(i*184|0)+44>>2]=0.0}f=c[2405]|0;m=(c[f+16>>2]|0)+-1|0;c[f+16>>2]=m;if(!m){if(c[f+4>>2]|0){Za(B+368|0,0)|0;m=c[6471]|0;g[f+8>>2]=+g[f+8>>2]+ +(((c[B+368+4>>2]|0)-(c[m+4>>2]|0)+(((c[B+368>>2]|0)-(c[m>>2]|0)|0)*1e6|0)-(c[f+12>>2]|0)|0)>>>0)/1.0e3;if(c[f+16>>2]|0)break b;f=c[2405]|0}c[2405]=c[f+20>>2]}}}while(0);q=q+1|0;if((q|0)>=(c[d+232>>2]|0))break a}}while(0);f=c[2405]|0;x=(c[f+16>>2]|0)+-1|0;c[f+16>>2]=x;do if(!x){if(c[f+4>>2]|0){Za(B+368|0,0)|0;x=c[6471]|0;g[f+8>>2]=+g[f+8>>2]+ +(((c[B+368+4>>2]|0)-(c[x+4>>2]|0)+(((c[B+368>>2]|0)-(c[x>>2]|0)|0)*1e6|0)-(c[f+12>>2]|0)|0)>>>0)/1.0e3;if(c[f+16>>2]|0)break;f=c[2405]|0}c[2405]=c[f+20>>2]}while(0);Ab[c[(c[d>>2]|0)+44>>2]&511](d);Ab[c[(c[d>>2]|0)+148>>2]&511](d);g[d+104>>2]=e;Gb[c[(c[d>>2]|0)+152>>2]&127](d,d+92|0);Bb[c[(c[d>>2]|0)+144>>2]&31](d,e);bj(12092);if((c[d+280>>2]|0)>0){f=0;do{x=c[(c[d+288>>2]|0)+(f<<2)>>2]|0;Hb[c[(c[x>>2]|0)+8>>2]&7](x,d,e);f=f+1|0}while((f|0)<(c[d+280>>2]|0))}f=c[2405]|0;x=(c[f+16>>2]|0)+-1|0;c[f+16>>2]=x;do if(!x){if(c[f+4>>2]|0){Za(B+368|0,0)|0;x=c[6471]|0;g[f+8>>2]=+g[f+8>>2]+ +(((c[B+368+4>>2]|0)-(c[x+4>>2]|0)+(((c[B+368>>2]|0)-(c[x>>2]|0)|0)*1e6|0)-(c[f+12>>2]|0)|0)>>>0)/1.0e3;if(c[f+16>>2]|0)break;f=c[2405]|0}c[2405]=c[f+20>>2]}while(0);Bb[c[(c[d>>2]|0)+156>>2]&31](d,e);f=c[d+80>>2]|0;if(f|0)Bb[f&31](d,e);f=c[2405]|0;d=(c[f+16>>2]|0)+-1|0;c[f+16>>2]=d;if(d|0){l=B;return}do if(c[f+4>>2]|0){Za(B+368|0,0)|0;d=c[6471]|0;g[f+8>>2]=+g[f+8>>2]+ +(((c[B+368+4>>2]|0)-(c[d+4>>2]|0)+(((c[B+368>>2]|0)-(c[d>>2]|0)|0)*1e6|0)-(c[f+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[f+16>>2]|0)){f=c[2405]|0;break}else{l=B;return}}while(0);c[2405]=c[f+20>>2];l=B;return}function Kc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0,E=0,F=0,G=0.0,H=0.0;F=l;l=l+784|0;c[F+168+8>>2]=0;c[F+168+12>>2]=1065353216;c[F+168+16>>2]=1065353216;c[F+168+20>>2]=1065353216;g[F+168+24>>2]=0.0;c[F+168>>2]=6864;c[F+168+4>>2]=8;g[F+168+28>>2]=0.0;g[F+168+44>>2]=0.0;D=c[e+4>>2]|0;E=c[e+12>>2]|0;h=c[D+4>>2]|0;if((h|0)<20){c[F+600>>2]=3832;c[F+600+168>>2]=0;g[F+600+172>>2]=0.0;c[F+600+164>>2]=c[f+4>>2];g[F+240+308>>2]=9.999999747378752e-05;a[F+240+332>>0]=0;c[F+224>>2]=5156;c[F+224+4>>2]=F+240;c[F+224+8>>2]=F+168;c[F+224+12>>2]=D;c[F+152>>2]=9332;c[F+152+4>>2]=F+240;c[F+152+8>>2]=F+168;c[F+152+12>>2]=D;D=(c[f+16>>2]&8|0)==0?F+224|0:F+152|0;if((wb[c[(c[D>>2]|0)+8>>2]&3](D,b,d,E,E,F+600|0)|0?(i=F+600+132|0,j=+g[i>>2],k=+g[F+600+136>>2],m=+g[F+600+140>>2],j*j+k*k+m*m>9.999999747378752e-05):0)?(n=+g[F+600+164>>2],n<+g[f+4>>2]):0){B=1.0/+C(+(j*j+k*k+m*m));g[i>>2]=j*B;g[F+600+136>>2]=k*B;g[F+600+140>>2]=m*B;c[F+120>>2]=c[e+8>>2];c[F+120+4>>2]=0;c[F+120+8>>2]=c[i>>2];c[F+120+8+4>>2]=c[i+4>>2];c[F+120+8+8>>2]=c[i+8>>2];c[F+120+8+12>>2]=c[i+12>>2];g[F+120+24>>2]=n;+jb[c[(c[f>>2]|0)+12>>2]&15](f,F+120|0,1)}l=F;return}if((h+-21|0)>>>0>=9){if((h|0)!=31){l=F;return}h=c[D+64>>2]|0;e=c[e+8>>2]|0;c[F+600>>2]=5952;c[F+600+4>>2]=e;c[F+600+8>>2]=D;c[F+600+12>>2]=E;c[F+600+16>>2]=b;c[F+600+20>>2]=d;c[F+600+24>>2]=f;if(!h){h=c[D+16>>2]|0;if((h|0)>0){i=0;do{If(F+600|0,i);i=i+1|0}while((i|0)<(h|0))}}else{w=+g[E+48>>2];n=+g[b+48>>2]-w;y=+g[E+52>>2];o=+g[b+52>>2]-y;A=+g[E+56>>2];p=+g[b+56>>2]-A;q=+g[E>>2];r=+g[E+16>>2];s=+g[E+32>>2];t=+g[E+4>>2];u=+g[E+20>>2];v=+g[E+36>>2];x=+g[E+8>>2];z=+g[E+24>>2];B=+g[E+40>>2];g[F+240>>2]=n*q+o*r+p*s;g[F+240+4>>2]=n*t+o*u+p*v;g[F+240+8>>2]=n*x+o*z+p*B;g[F+240+12>>2]=0.0;w=+g[d+48>>2]-w;y=+g[d+52>>2]-y;A=+g[d+56>>2]-A;g[F+224>>2]=w*q+y*r+A*s;g[F+224+4>>2]=w*t+y*u+A*v;g[F+224+8>>2]=w*x+y*z+A*B;g[F+224+12>>2]=0.0;ze(c[h>>2]|0,F+240|0,F+224|0,F+600|0)}l=F;return}o=+g[E>>2];p=+g[E+16>>2];j=+g[E+32>>2];m=+g[E+4>>2];t=+g[E+20>>2];u=+g[E+36>>2];k=+g[E+8>>2];x=+g[E+24>>2];y=+g[E+40>>2];z=-+g[E+48>>2];A=-+g[E+52>>2];B=-+g[E+56>>2];q=+g[b+48>>2];r=+g[b+52>>2];n=+g[b+56>>2];g[F+152>>2]=o*z+p*A+j*B+(o*q+p*r+j*n);g[F+152+4>>2]=m*z+t*A+u*B+(m*q+t*r+u*n);g[F+152+8>>2]=k*z+x*A+y*B+(k*q+x*r+y*n);g[F+152+12>>2]=0.0;v=+g[d+48>>2];w=+g[d+52>>2];s=+g[d+56>>2];j=o*z+p*A+j*B+(o*v+p*w+j*s);m=m*z+t*A+u*B+(m*v+t*w+u*s);k=k*z+x*A+y*B+(k*v+x*w+y*s);g[F+120>>2]=j;g[F+120+4>>2]=m;g[F+120+8>>2]=k;g[F+120+12>>2]=0.0;switch(c[D+4>>2]|0){case 21:{h=c[e+8>>2]|0;e=c[f+16>>2]|0;c[F+4>>2]=c[F+152>>2];c[F+4+4>>2]=c[F+152+4>>2];c[F+4+8>>2]=c[F+152+8>>2];c[F+4+12>>2]=c[F+152+12>>2];c[F+20>>2]=c[F+120>>2];c[F+20+4>>2]=c[F+120+4>>2];c[F+20+8>>2]=c[F+120+8>>2];c[F+20+12>>2]=c[F+120+12>>2];c[F+36>>2]=e;g[F+40>>2]=1.0;c[F>>2]=5904;c[F+44>>2]=f;c[F+48>>2]=h;c[F+52>>2]=D;c[F+56>>2]=c[E>>2];c[F+56+4>>2]=c[E+4>>2];c[F+56+8>>2]=c[E+8>>2];c[F+56+12>>2]=c[E+12>>2];c[F+72>>2]=c[E+16>>2];c[F+72+4>>2]=c[E+16+4>>2];c[F+72+8>>2]=c[E+16+8>>2];c[F+72+12>>2]=c[E+16+12>>2];c[F+88>>2]=c[E+32>>2];c[F+88+4>>2]=c[E+32+4>>2];c[F+88+8>>2]=c[E+32+8>>2];c[F+88+12>>2]=c[E+32+12>>2];c[F+104>>2]=c[E+48>>2];c[F+104+4>>2]=c[E+48+4>>2];c[F+104+8>>2]=c[E+48+8>>2];c[F+104+12>>2]=c[E+48+12>>2];c[F+40>>2]=c[f+4>>2];h=c[D+48>>2]|0;c[F+224>>2]=7076;c[F+224+4>>2]=h;c[F+224+8>>2]=F;h=c[D+52>>2]|0;c[F+600>>2]=0;c[F+600+4>>2]=0;c[F+600+8>>2]=0;c[F+600+12>>2]=0;c[F+240>>2]=0;c[F+240+4>>2]=0;c[F+240+8>>2]=0;c[F+240+12>>2]=0;if(!(a[h+60>>0]|0))De(h,F+224|0,F+152|0,j,m,k,F+600|0,F+240|0);else ke(h,F+224|0,F+152|0,j,m,k,F+600|0,F+240|0,c[h+56>>2]|0);break}case 25:{e=c[e+8>>2]|0;d=c[f+16>>2]|0;c[F+600+4>>2]=c[F+152>>2];c[F+600+4+4>>2]=c[F+152+4>>2];c[F+600+4+8>>2]=c[F+152+8>>2];c[F+600+4+12>>2]=c[F+152+12>>2];c[F+600+20>>2]=c[F+120>>2];c[F+600+20+4>>2]=c[F+120+4>>2];c[F+600+20+8>>2]=c[F+120+8>>2];c[F+600+20+12>>2]=c[F+120+12>>2];c[F+600+36>>2]=d;g[F+600+40>>2]=1.0;c[F+600>>2]=5904;c[F+600+44>>2]=f;c[F+600+48>>2]=e;c[F+600+52>>2]=D;c[F+600+56>>2]=c[E>>2];c[F+600+56+4>>2]=c[E+4>>2];c[F+600+56+8>>2]=c[E+8>>2];c[F+600+56+12>>2]=c[E+12>>2];c[F+600+72>>2]=c[E+16>>2];c[F+600+72+4>>2]=c[E+16+4>>2];c[F+600+72+8>>2]=c[E+16+8>>2];c[F+600+72+12>>2]=c[E+16+12>>2];c[F+600+88>>2]=c[E+32>>2];c[F+600+88+4>>2]=c[E+32+4>>2];c[F+600+88+8>>2]=c[E+32+8>>2];c[F+600+88+12>>2]=c[E+32+12>>2];c[F+600+104>>2]=c[E+48>>2];c[F+600+104+4>>2]=c[E+48+4>>2];c[F+600+104+8>>2]=c[E+48+8>>2];c[F+600+104+12>>2]=c[E+48+12>>2];c[F+600+40>>2]=c[f+4>>2];Nb[c[(c[D>>2]|0)+144>>2]&127](D,F+600|0,F+152|0,F+120|0);break}default:{H=+g[E>>2];G=+g[E+16>>2];m=+g[E+32>>2];k=+g[E+4>>2];j=+g[E+8>>2];o=H*z+G*A+m*B+(H*q+G*r+m*n);p=k*z+t*A+u*B+(k*q+t*r+u*n);n=j*z+x*A+y*B+(j*q+x*r+y*n);m=H*z+G*A+m*B+(H*v+G*w+m*s);k=k*z+t*A+u*B+(k*v+t*w+u*s);j=j*z+x*A+y*B+(j*v+x*w+y*s);e=c[e+8>>2]|0;d=c[f+16>>2]|0;g[F+600+4>>2]=o;g[F+600+8>>2]=p;g[F+600+12>>2]=n;g[F+600+16>>2]=0.0;g[F+600+20>>2]=m;g[F+600+24>>2]=k;g[F+600+28>>2]=j;g[F+600+32>>2]=0.0;c[F+600+36>>2]=d;g[F+600+40>>2]=1.0;c[F+600>>2]=5928;c[F+600+44>>2]=f;c[F+600+48>>2]=e;c[F+600+52>>2]=D;c[F+600+56>>2]=c[E>>2];c[F+600+56+4>>2]=c[E+4>>2];c[F+600+56+8>>2]=c[E+8>>2];c[F+600+56+12>>2]=c[E+12>>2];c[F+600+72>>2]=c[E+16>>2];c[F+600+72+4>>2]=c[E+16+4>>2];c[F+600+72+8>>2]=c[E+16+8>>2];c[F+600+72+12>>2]=c[E+16+12>>2];c[F+600+88>>2]=c[E+32>>2];c[F+600+88+4>>2]=c[E+32+4>>2];c[F+600+88+8>>2]=c[E+32+8>>2];c[F+600+88+12>>2]=c[E+32+12>>2];c[F+600+104>>2]=c[E+48>>2];c[F+600+104+4>>2]=c[E+48+4>>2];c[F+600+104+8>>2]=c[E+48+8>>2];c[F+600+104+12>>2]=c[E+48+12>>2];c[F+600+40>>2]=c[f+4>>2];g[F+240>>2]=o;g[F+240+4>>2]=p;g[F+240+8>>2]=n;g[F+240+12>>2]=0.0;if(m>2]=m;if(k>2]=k;if(j>2]=j;g[F+224>>2]=o;g[F+224+4>>2]=p;g[F+224+8>>2]=n;g[F+224+12>>2]=0.0;if(o>2]=m;if(p>2]=k;if(n>2]=j;Nb[c[(c[D>>2]|0)+64>>2]&127](D,F+600|0,F+240|0,F+224|0)}}l=F;return}function Lc(b,d,e,f,h,i,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0.0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0;h=c[b+48>>2]|0;q=c[b+28>>2]|0;r=c[b+68>>2]|0;if(c[l+64>>2]&1|0){if((h|0)>0){i=c[b+136>>2]|0;m=c[b+192>>2]|0;p=0;do{o=i+(p<<2)|0;f=c[o>>2]|0;p=p+1|0;m=(O(m,1664525)|0)+1013904223|0;if(p>>>0<65537){e=m>>>16^m;if(p>>>0<257)if(p>>>0<17){e=(e>>>8^e)>>>4^(e>>>8^e);if(p>>>0<5)e=(p>>>0<3?(e>>>2^e)>>>1:0)^(e>>>2^e)}else e=e>>>8^e}else e=m;e=i+(((e>>>0)%(p>>>0)|0)<<2)|0;c[o>>2]=c[e>>2];c[e>>2]=f}while((p|0)!=(h|0));c[b+192>>2]=m}if((c[l+20>>2]|0)>(d|0)){if((q|0)>0){f=c[b+116>>2]|0;i=c[b+192>>2]|0;o=0;do{m=f+(o<<2)|0;h=c[m>>2]|0;o=o+1|0;i=(O(i,1664525)|0)+1013904223|0;if(o>>>0<65537){e=i>>>16^i;if(o>>>0<257)if(o>>>0<17){e=(e>>>8^e)>>>4^(e>>>8^e);if(o>>>0<5)e=(o>>>0<3?(e>>>2^e)>>>1:0)^(e>>>2^e)}else e=e>>>8^e}else e=i;p=f+(((e>>>0)%(o>>>0)|0)<<2)|0;c[m>>2]=c[p>>2];c[p>>2]=h}while((o|0)!=(q|0));c[b+192>>2]=i}if((r|0)>0){f=c[b+156>>2]|0;i=c[b+192>>2]|0;o=0;do{m=f+(o<<2)|0;h=c[m>>2]|0;o=o+1|0;i=(O(i,1664525)|0)+1013904223|0;if(o>>>0<65537){e=i>>>16^i;if(o>>>0<257)if(o>>>0<17){e=(e>>>8^e)>>>4^(e>>>8^e);if(o>>>0<5)e=(o>>>0<3?(e>>>2^e)>>>1:0)^(e>>>2^e)}else e=e>>>8^e}else e=i;q=f+(((e>>>0)%(o>>>0)|0)<<2)|0;c[m>>2]=c[q>>2];c[q>>2]=h}while((o|0)!=(r|0));c[b+192>>2]=i}}}e=c[b+48>>2]|0;if(!(c[l+64>>2]&256)){if((e|0)>0){i=0;do{f=c[(c[b+136>>2]|0)+(i<<2)>>2]|0;h=c[b+56>>2]|0;if((c[h+(f*152|0)+136>>2]|0)>(d|0)){e=c[b+16>>2]|0;pg(e+((c[h+(f*152|0)+144>>2]|0)*244|0)|0,e+((c[h+(f*152|0)+148>>2]|0)*244|0)|0,h+(f*152|0)|0);e=c[b+48>>2]|0}i=i+1|0}while((i|0)<(e|0))}if((c[l+20>>2]|0)<=(d|0))return 0.0;if((k|0)>0){h=0;do{f=j+(h<<2)|0;e=c[f>>2]|0;if(a[e+20>>0]|0){d=Gj(b,c[e+28>>2]|0,+g[l+12>>2])|0;t=Gj(b,c[(c[f>>2]|0)+32>>2]|0,+g[l+12>>2])|0;s=c[b+16>>2]|0;r=c[f>>2]|0;Lb[c[(c[r>>2]|0)+24>>2]&15](r,s+(d*244|0)|0,s+(t*244|0)|0,+g[l+12>>2])}h=h+1|0}while((h|0)!=(k|0))}e=c[b+28>>2]|0;if((e|0)>0){f=0;do{l=c[(c[b+116>>2]|0)+(f<<2)>>2]|0;k=c[b+36>>2]|0;j=c[b+16>>2]|0;xg(j+((c[k+(l*152|0)+144>>2]|0)*244|0)|0,j+((c[k+(l*152|0)+148>>2]|0)*244|0)|0,k+(l*152|0)|0);f=f+1|0}while((f|0)!=(e|0))}e=c[b+68>>2]|0;if((e|0)>0){i=0;do{f=c[(c[b+156>>2]|0)+(i<<2)>>2]|0;h=c[b+76>>2]|0;n=+g[(c[b+36>>2]|0)+((c[h+(f*152|0)+140>>2]|0)*152|0)+100>>2];if(n>0.0){n=n*+g[h+(f*152|0)+104>>2];g[h+(f*152|0)+120>>2]=-n;g[h+(f*152|0)+124>>2]=n;l=c[b+16>>2]|0;pg(l+((c[h+(f*152|0)+144>>2]|0)*244|0)|0,l+((c[h+(f*152|0)+148>>2]|0)*244|0)|0,h+(f*152|0)|0)}i=i+1|0}while((i|0)!=(e|0))}e=c[b+88>>2]|0;if((e|0)<=0)return 0.0;h=0;do{f=c[b+96>>2]|0;n=+g[(c[b+36>>2]|0)+((c[f+(h*152|0)+140>>2]|0)*152|0)+100>>2];if(n>0.0){u=+g[f+(h*152|0)+104>>2];n=n*u>u?u:n*u;g[f+(h*152|0)+120>>2]=-n;g[f+(h*152|0)+124>>2]=n;l=c[b+16>>2]|0;pg(l+((c[f+(h*152|0)+144>>2]|0)*244|0)|0,l+((c[f+(h*152|0)+148>>2]|0)*244|0)|0,f+(h*152|0)|0)}h=h+1|0}while((h|0)!=(e|0));return 0.0}if((e|0)>0){i=0;do{f=c[(c[b+136>>2]|0)+(i<<2)>>2]|0;h=c[b+56>>2]|0;if((c[h+(f*152|0)+136>>2]|0)>(d|0)){e=c[b+16>>2]|0;pg(e+((c[h+(f*152|0)+144>>2]|0)*244|0)|0,e+((c[h+(f*152|0)+148>>2]|0)*244|0)|0,h+(f*152|0)|0);e=c[b+48>>2]|0}i=i+1|0}while((i|0)<(e|0))}if((c[l+20>>2]|0)<=(d|0))return 0.0;if((k|0)>0){h=0;do{f=j+(h<<2)|0;e=c[f>>2]|0;if(a[e+20>>0]|0){q=Gj(b,c[e+28>>2]|0,+g[l+12>>2])|0;d=Gj(b,c[(c[f>>2]|0)+32>>2]|0,+g[l+12>>2])|0;r=c[b+16>>2]|0;p=c[f>>2]|0;Lb[c[(c[p>>2]|0)+24>>2]&15](p,r+(q*244|0)|0,r+(d*244|0)|0,+g[l+12>>2])}h=h+1|0}while((h|0)!=(k|0))}e=c[l+64>>2]|0;o=c[b+28>>2]|0;if(e&512|0){if((o|0)<=0)return 0.0;i=0;do{m=c[(c[b+116>>2]|0)+(i<<2)>>2]|0;f=c[b+36>>2]|0;h=c[b+16>>2]|0;xg(h+((c[f+(m*152|0)+144>>2]|0)*244|0)|0,h+((c[f+(m*152|0)+148>>2]|0)*244|0)|0,f+(m*152|0)|0);n=+g[f+(m*152|0)+100>>2];m=O(i,(e>>>4&1)+1|0)|0;f=c[(c[b+156>>2]|0)+(m<<2)>>2]|0;h=c[b+76>>2]|0;if(n>0.0){u=n*+g[h+(f*152|0)+104>>2];g[h+(f*152|0)+120>>2]=-u;g[h+(f*152|0)+124>>2]=u;k=c[b+16>>2]|0;pg(k+((c[h+(f*152|0)+144>>2]|0)*244|0)|0,k+((c[h+(f*152|0)+148>>2]|0)*244|0)|0,h+(f*152|0)|0)}if(c[l+64>>2]&16|0?(s=c[(c[b+156>>2]|0)+(m+1<<2)>>2]|0,t=c[b+76>>2]|0,n>0.0):0){u=n*+g[t+(s*152|0)+104>>2];g[t+(s*152|0)+120>>2]=-u;g[t+(s*152|0)+124>>2]=u;k=c[b+16>>2]|0;pg(k+((c[t+(s*152|0)+144>>2]|0)*244|0)|0,k+((c[t+(s*152|0)+148>>2]|0)*244|0)|0,t+(s*152|0)|0)}i=i+1|0}while((i|0)!=(o|0));return 0.0}if((o|0)>0){e=0;do{l=c[(c[b+116>>2]|0)+(e<<2)>>2]|0;k=c[b+36>>2]|0;j=c[b+16>>2]|0;xg(j+((c[k+(l*152|0)+144>>2]|0)*244|0)|0,j+((c[k+(l*152|0)+148>>2]|0)*244|0)|0,k+(l*152|0)|0);e=e+1|0}while((e|0)!=(o|0))}e=c[b+68>>2]|0;if((e|0)>0){i=0;do{f=c[(c[b+156>>2]|0)+(i<<2)>>2]|0;h=c[b+76>>2]|0;n=+g[(c[b+36>>2]|0)+((c[h+(f*152|0)+140>>2]|0)*152|0)+100>>2];if(n>0.0){u=n*+g[h+(f*152|0)+104>>2];g[h+(f*152|0)+120>>2]=-u;g[h+(f*152|0)+124>>2]=u;l=c[b+16>>2]|0;pg(l+((c[h+(f*152|0)+144>>2]|0)*244|0)|0,l+((c[h+(f*152|0)+148>>2]|0)*244|0)|0,h+(f*152|0)|0)}i=i+1|0}while((i|0)!=(e|0))}e=c[b+88>>2]|0;if((e|0)<=0)return 0.0;h=0;do{f=c[b+96>>2]|0;n=+g[(c[b+36>>2]|0)+((c[f+(h*152|0)+140>>2]|0)*152|0)+100>>2];if(n>0.0){u=+g[f+(h*152|0)+104>>2];u=n*u>u?u:n*u;g[f+(h*152|0)+120>>2]=-u;g[f+(h*152|0)+124>>2]=u;l=c[b+16>>2]|0;pg(l+((c[f+(h*152|0)+144>>2]|0)*244|0)|0,l+((c[f+(h*152|0)+148>>2]|0)*244|0)|0,f+(h*152|0)|0)}h=h+1|0}while((h|0)!=(e|0));return 0.0}function Mc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0,r=0.0,s=0,t=0.0;q=l;l=l+80|0;e=c[b+28>>2]|0;d=c[f+64>>2]|0;if((d&4|0)!=0&(e|0)>0){h=c[b+36>>2]|0;i=c[b+76>>2]|0;if(!(d&16)){d=0;do{m=c[h+(d*152|0)+132>>2]|0;c[m+120>>2]=c[h+(d*152|0)+100>>2];c[m+124>>2]=c[i+((c[h+(d*152|0)+140>>2]|0)*152|0)+100>>2];d=d+1|0}while((d|0)!=(e|0))}else{d=0;do{m=c[h+(d*152|0)+132>>2]|0;c[m+120>>2]=c[h+(d*152|0)+100>>2];k=c[h+(d*152|0)+140>>2]|0;c[m+124>>2]=c[i+(k*152|0)+100>>2];c[m+128>>2]=c[i+((k+1|0)*152|0)+100>>2];d=d+1|0}while((d|0)!=(e|0))}}e=c[b+48>>2]|0;if((e|0)>0){m=0;do{h=c[b+56>>2]|0;i=c[h+(m*152|0)+132>>2]|0;k=c[i+44>>2]|0;d=h+(m*152|0)+100|0;if(k|0){p=+g[d>>2];s=c[i+28>>2]|0;o=1.0/+g[f+12>>2];n=p*+g[h+(m*152|0)+20>>2]*+g[s+352>>2]*o;r=p*+g[h+(m*152|0)+24>>2]*+g[s+356>>2]*o;g[k>>2]=+g[k>>2]+ +g[h+(m*152|0)+16>>2]*p*+g[s+348>>2]*o;g[k+4>>2]=n+ +g[k+4>>2];g[k+8>>2]=r+ +g[k+8>>2];r=+g[d>>2];s=c[i+32>>2]|0;n=1.0/+g[f+12>>2];o=r*+g[h+(m*152|0)+52>>2]*+g[s+352>>2]*n;p=r*+g[h+(m*152|0)+56>>2]*+g[s+356>>2]*n;g[k+32>>2]=+g[k+32>>2]+ +g[h+(m*152|0)+48>>2]*r*+g[s+348>>2]*n;g[k+36>>2]=o+ +g[k+36>>2];g[k+40>>2]=p+ +g[k+40>>2];s=c[i+28>>2]|0;p=+g[d>>2];o=1.0/+g[f+12>>2];n=+g[h+(m*152|0)+4>>2]*+g[s+548>>2]*p*o;r=p*+g[h+(m*152|0)+8>>2]*+g[s+552>>2]*o;g[k+16>>2]=+g[k+16>>2]+ +g[h+(m*152|0)>>2]*+g[s+544>>2]*p*o;g[k+20>>2]=n+ +g[k+20>>2];g[k+24>>2]=r+ +g[k+24>>2];s=c[i+32>>2]|0;r=+g[d>>2];n=1.0/+g[f+12>>2];o=+g[h+(m*152|0)+36>>2]*+g[s+548>>2]*r*n;p=r*+g[h+(m*152|0)+40>>2]*+g[s+552>>2]*n;g[k+48>>2]=+g[k+48>>2]+ +g[h+(m*152|0)+32>>2]*+g[s+544>>2]*r*n;g[k+52>>2]=o+ +g[k+52>>2];g[k+56>>2]=p+ +g[k+56>>2]}s=c[d>>2]|0;c[i+36>>2]=s;r=+B(+(c[j>>2]=s,+g[j>>2]));if(r>=+g[i+16>>2])a[i+20>>0]=0;m=m+1|0}while((m|0)!=(e|0))}d=c[b+8>>2]|0;if((d|0)>0){e=c[b+16>>2]|0;k=0;do{h=e+(k*244|0)|0;i=c[e+(k*244|0)+240>>2]|0;if(i){if(!(c[f+44>>2]|0)){h=e+(k*244|0)+176|0;o=+g[e+(k*244|0)+64>>2]+ +g[h>>2];g[h>>2]=o;h=e+(k*244|0)+180|0;p=+g[e+(k*244|0)+68>>2]+ +g[h>>2];g[h>>2]=p;h=e+(k*244|0)+184|0;n=+g[e+(k*244|0)+72>>2]+ +g[h>>2];g[h>>2]=n;h=e+(k*244|0)+192|0;g[h>>2]=+g[e+(k*244|0)+80>>2]+ +g[h>>2];h=e+(k*244|0)+196|0;g[h>>2]=+g[e+(k*244|0)+84>>2]+ +g[h>>2];h=e+(k*244|0)+200|0;g[h>>2]=+g[e+(k*244|0)+88>>2]+ +g[h>>2];h=e;d=i}else{n=+g[f+12>>2];o=+g[f+52>>2];d=e+(k*244|0)+176|0;g[d>>2]=+g[e+(k*244|0)+64>>2]+ +g[d>>2];d=e+(k*244|0)+180|0;g[d>>2]=+g[e+(k*244|0)+68>>2]+ +g[d>>2];d=e+(k*244|0)+184|0;g[d>>2]=+g[e+(k*244|0)+72>>2]+ +g[d>>2];d=e+(k*244|0)+192|0;g[d>>2]=+g[e+(k*244|0)+80>>2]+ +g[d>>2];d=e+(k*244|0)+196|0;g[d>>2]=+g[e+(k*244|0)+84>>2]+ +g[d>>2];d=e+(k*244|0)+200|0;g[d>>2]=+g[e+(k*244|0)+88>>2]+ +g[d>>2];p=+g[e+(k*244|0)+144>>2];d=e+(k*244|0)+148|0;if(((((!(p!=0.0)?!(+g[d>>2]!=0.0):0)?!(+g[e+(k*244|0)+152>>2]!=0.0):0)?!(+g[e+(k*244|0)+160>>2]!=0.0):0)?!(+g[e+(k*244|0)+164>>2]!=0.0):0)?!(+g[e+(k*244|0)+168>>2]!=0.0):0)d=i;else{t=+g[e+(k*244|0)+164>>2]*o;r=+g[e+(k*244|0)+168>>2]*o;g[q>>2]=+g[e+(k*244|0)+160>>2]*o;g[q+4>>2]=t;g[q+8>>2]=r;g[q+12>>2]=0.0;Ig(h,p,+g[d>>2],+g[e+(k*244|0)+152>>2],q,n,q+16|0);c[h>>2]=c[q+16>>2];c[h+4>>2]=c[q+16+4>>2];c[h+8>>2]=c[q+16+8>>2];c[h+12>>2]=c[q+16+12>>2];d=e+(k*244|0)+16|0;c[d>>2]=c[q+16+16>>2];c[d+4>>2]=c[q+16+16+4>>2];c[d+8>>2]=c[q+16+16+8>>2];c[d+12>>2]=c[q+16+16+12>>2];d=e+(k*244|0)+32|0;c[d>>2]=c[q+16+32>>2];c[d+4>>2]=c[q+16+32+4>>2];c[d+8>>2]=c[q+16+32+8>>2];c[d+12>>2]=c[q+16+32+12>>2];d=e+(k*244|0)+48|0;c[d>>2]=c[q+16+48>>2];c[d+4>>2]=c[q+16+48+4>>2];c[d+8>>2]=c[q+16+48+8>>2];c[d+12>>2]=c[q+16+48+12>>2];d=c[b+16>>2]|0;e=d;d=c[d+(k*244|0)+240>>2]|0}h=e;o=+g[e+(k*244|0)+176>>2];p=+g[e+(k*244|0)+180>>2];n=+g[e+(k*244|0)+184>>2]}t=o+ +g[h+(k*244|0)+208>>2];r=p+ +g[h+(k*244|0)+212>>2];p=n+ +g[h+(k*244|0)+216>>2];m=d+260|0;c[m>>2]=(c[m>>2]|0)+1;g[d+312>>2]=t;g[d+316>>2]=r;g[d+320>>2]=p;g[d+324>>2]=0.0;m=c[b+16>>2]|0;s=c[m+(k*244|0)+240>>2]|0;p=+g[m+(k*244|0)+192>>2]+ +g[m+(k*244|0)+224>>2];r=+g[m+(k*244|0)+196>>2]+ +g[m+(k*244|0)+228>>2];t=+g[m+(k*244|0)+200>>2]+ +g[m+(k*244|0)+232>>2];c[s+260>>2]=(c[s+260>>2]|0)+1;g[s+328>>2]=p;g[s+332>>2]=r;g[s+336>>2]=t;g[s+340>>2]=0.0;if(c[f+44>>2]|0){m=c[b+16>>2]|0;s=c[m+(k*244|0)+240>>2]|0;i=m+(k*244|0)|0;c[s+260>>2]=(c[s+260>>2]|0)+1;c[s+4>>2]=c[i>>2];c[s+4+4>>2]=c[i+4>>2];c[s+4+8>>2]=c[i+8>>2];c[s+4+12>>2]=c[i+12>>2];i=m+(k*244|0)+16|0;c[s+20>>2]=c[i>>2];c[s+20+4>>2]=c[i+4>>2];c[s+20+8>>2]=c[i+8>>2];c[s+20+12>>2]=c[i+12>>2];i=m+(k*244|0)+32|0;c[s+36>>2]=c[i>>2];c[s+36+4>>2]=c[i+4>>2];c[s+36+8>>2]=c[i+8>>2];c[s+36+12>>2]=c[i+12>>2];m=m+(k*244|0)+48|0;c[s+52>>2]=c[m>>2];c[s+52+4>>2]=c[m+4>>2];c[s+52+8>>2]=c[m+8>>2];c[s+52+12>>2]=c[m+12>>2]}e=c[b+16>>2]|0;c[(c[e+(k*244|0)+240>>2]|0)+212>>2]=-1;d=c[b+8>>2]|0}k=k+1|0}while((k|0)<(d|0))}if((c[b+28>>2]|0)<0?(c[b+32>>2]|0)<0:0){d=c[b+36>>2]|0;if(d|0){if(a[b+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+36>>2]=0}a[b+40>>0]=1;c[b+36>>2]=0;c[b+32>>2]=0}c[b+28>>2]=0;if((c[b+48>>2]|0)<0?(c[b+52>>2]|0)<0:0){d=c[b+56>>2]|0;if(d|0){if(a[b+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+56>>2]=0}a[b+60>>0]=1;c[b+56>>2]=0;c[b+52>>2]=0}c[b+48>>2]=0;if((c[b+68>>2]|0)<0?(c[b+72>>2]|0)<0:0){d=c[b+76>>2]|0;if(d|0){if(a[b+80>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+76>>2]=0}a[b+80>>0]=1;c[b+76>>2]=0;c[b+72>>2]=0}c[b+68>>2]=0;if((c[b+88>>2]|0)<0?(c[b+92>>2]|0)<0:0){d=c[b+96>>2]|0;if(d|0){if(a[b+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+96>>2]=0}a[b+100>>0]=1;c[b+96>>2]=0;c[b+92>>2]=0}c[b+88>>2]=0;if((c[b+8>>2]|0)>=0){c[b+8>>2]=0;l=q;return 0.0}if((c[b+12>>2]|0)>=0){c[b+8>>2]=0;l=q;return 0.0}d=c[b+16>>2]|0;if(d|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=0;c[b+12>>2]=0;c[b+8>>2]=0;l=q;return 0.0}function Nc(b,e,f,g,h,i){b=b|0;e=+e;f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0;D=l;l=l+560|0;C=D+524|0;c[D>>2]=0;B=D+512+12|0;Hv(e)|0;if((z|0)<0){y=1;x=20080;e=-e}else{y=(h&2049|0)!=0&1;x=(h&2048|0)==0?((h&1|0)==0?20081:20086):20083}Hv(e)|0;A=z&2146435072;do if(A>>>0<2146435072|(A|0)==2146435072&0<0){p=+bH(e,D)*2.0;if(p!=0.0)c[D>>2]=(c[D>>2]|0)+-1;if((i|32|0)==97){o=(i&32|0)==0?x:x+9|0;n=y|2;do if(!(g>>>0>11|(12-g|0)==0)){j=12-g|0;e=8.0;do{j=j+-1|0;e=e*16.0}while((j|0)!=0);if((a[o>>0]|0)==45){e=-(e+(-p-e));break}else{e=p+e-e;break}}else e=p;while(0);k=c[D>>2]|0;j=(k|0)<0?0-k|0:k;j=Am(j,((j|0)<0)<<31>>31,B)|0;if((j|0)==(B|0)){a[D+512+11>>0]=48;j=D+512+11|0}a[j+-1>>0]=(k>>31&2)+43;m=j+-2|0;a[m>>0]=i+15;k=D+524|0;while(1){A=~~e;j=k+1|0;a[k>>0]=d[20115+A>>0]|i&32;e=(e-+(A|0))*16.0;if((j-C|0)==1?!((h&8|0)==0&((g|0)<1&e==0.0)):0){a[j>>0]=46;j=k+2|0}if(!(e!=0.0))break;else k=j}C=j-C|0;j=(g|0)!=0&(C+-2|0)<(g|0)?g+2|0:C;_m(b,32,f,B-m+n+j|0,h);jz(b,o,n);_m(b,48,f,B-m+n+j|0,h^65536);jz(b,D+524|0,C);_m(b,48,j-C|0,0,0);jz(b,m,B-m|0);_m(b,32,f,B-m+n+j|0,h^8192);j=B-m+n+j|0;break}k=(g|0)<0?6:g;if(p!=0.0){m=(c[D>>2]|0)+-28|0;c[D>>2]=m;e=p*268435456.0}else{m=c[D>>2]|0;e=p}A=(m|0)<0?D+8|0:D+8+288|0;n=A;do{v=~~e>>>0;c[n>>2]=v;n=n+4|0;e=(e-+(v>>>0))*1.0e9}while(e!=0.0);if((m|0)>0){j=A;do{g=(m|0)<29?m:29;m=n+-4|0;if(m>>>0>=j>>>0){o=0;do{u=Nt(c[m>>2]|0,0,g|0)|0;u=cw(u|0,z|0,o|0,0)|0;v=z;t=Rr(u|0,v|0,1e9,0)|0;c[m>>2]=t;o=AA(u|0,v|0,1e9,0)|0;m=m+-4|0}while(m>>>0>=j>>>0);if(o){j=j+-4|0;c[j>>2]=o}}while(1){if(n>>>0<=j>>>0)break;m=n+-4|0;if(!(c[m>>2]|0))n=m;else break}m=(c[D>>2]|0)-g|0;c[D>>2]=m}while((m|0)>0)}else j=A;if((m|0)<0){do{g=0-m|0;g=(g|0)<9?g:9;if(j>>>0>>0){o=0;m=j;do{v=c[m>>2]|0;c[m>>2]=(v>>>g)+o;o=O(v&(1<>>g)|0;m=m+4|0}while(m>>>0>>0);j=(c[j>>2]|0)==0?j+4|0:j;if(!o)m=n;else{c[n>>2]=o;m=n+4|0}}else{j=(c[j>>2]|0)==0?j+4|0:j;m=n}n=(i|32|0)==102?A:j;n=(m-n>>2|0)>(((k+25|0)/9|0)+1|0)?n+(((k+25|0)/9|0)+1<<2)|0:m;m=(c[D>>2]|0)+g|0;c[D>>2]=m}while((m|0)<0);s=n}else s=n;if(j>>>0>>0){m=(A-j>>2)*9|0;o=c[j>>2]|0;if(o>>>0<10)n=m;else{n=10;do{n=n*10|0;m=m+1|0}while(o>>>0>=n>>>0);n=m}}else n=0;g=k-((i|32|0)!=102?n:0)+(((k|0)!=0&(i|32|0)==103)<<31>>31)|0;if((g|0)<(((s-A>>2)*9|0)+-9|0)){m=A+4+(((g+9216|0)/9|0)+-1024<<2)|0;if((((g+9216|0)%9|0)+1|0)<9){o=10;g=((g+9216|0)%9|0)+1|0;do{o=o*10|0;g=g+1|0}while((g|0)!=9)}else o=10;q=c[m>>2]|0;r=(q>>>0)%(o>>>0)|0;g=(m+4|0)==(s|0);if(!(g&(r|0)==0)){p=(((q>>>0)/(o>>>0)|0)&1|0)==0?9007199254740992.0:9007199254740994.0;v=(o|0)/2|0;e=r>>>0>>0?.5:g&(r|0)==(v|0)?1.0:1.5;if(y){v=(a[x>>0]|0)==45;p=v?-p:p;e=v?-e:e}c[m>>2]=q-r;if(p+e!=p){v=q-r+o|0;c[m>>2]=v;if(v>>>0>999999999)while(1){n=m+-4|0;c[m>>2]=0;if(n>>>0>>0){j=j+-4|0;c[j>>2]=0}v=(c[n>>2]|0)+1|0;c[n>>2]=v;if(v>>>0>999999999)m=n;else{m=n;break}}n=(A-j>>2)*9|0;g=c[j>>2]|0;if(g>>>0>=10){o=10;do{o=o*10|0;n=n+1|0}while(g>>>0>=o>>>0)}}}u=m+4|0;v=j;j=s>>>0>u>>>0?u:s}else{v=j;j=s}u=j;while(1){if(u>>>0<=v>>>0){t=0;break}j=u+-4|0;if(!(c[j>>2]|0))u=j;else{t=1;break}}g=0-n|0;do if((i|32|0)==103){if((n|0)>-5?((((k|0)!=0^1)&1)+k|0)>(n|0):0){k=(((k|0)!=0^1)&1)+k+-1-n|0;o=i+-1|0}else{k=(((k|0)!=0^1)&1)+k+-1|0;o=i+-2|0}if(!(h&8)){if(t?(w=c[u+-4>>2]|0,(w|0)!=0):0)if(!((w>>>0)%10|0)){m=10;j=0;do{m=m*10|0;j=j+1|0}while(!((w>>>0)%(m>>>0)|0|0))}else j=0;else j=9;m=((u-A>>2)*9|0)+-9|0;if((o|32|0)==102){m=m-j|0;m=(m|0)>0?m:0;r=0;k=(k|0)<(m|0)?k:m;m=o;break}else{m=m+n-j|0;m=(m|0)>0?m:0;r=0;k=(k|0)<(m|0)?k:m;m=o;break}}else{r=h&8;m=o}}else{r=h&8;m=i}while(0);q=k|r;o=(m|32|0)==102;if(o){s=0;j=(n|0)>0?n:0}else{j=(n|0)<0?g:n;j=Am(j,((j|0)<0)<<31>>31,B)|0;if((B-j|0)<2)do{j=j+-1|0;a[j>>0]=48}while((B-j|0)<2);a[j+-1>>0]=(n>>31&2)+43;j=j+-2|0;a[j>>0]=m;s=j;j=B-j|0}j=y+1+k+((q|0)!=0&1)+j|0;_m(b,32,f,j,h);jz(b,x,y);_m(b,48,f,j,h^65536);if(o){o=v>>>0>A>>>0?A:v;n=o;do{m=Am(c[n>>2]|0,0,D+524+9|0)|0;if((n|0)==(o|0)){if((m|0)==(D+524+9|0)){a[D+524+8>>0]=48;m=D+524+8|0}}else if(m>>>0>(D+524|0)>>>0){Nk(D+524|0,48,m-C|0)|0;do m=m+-1|0;while(m>>>0>(D+524|0)>>>0)}jz(b,m,D+524+9-m|0);n=n+4|0}while(n>>>0<=A>>>0);if(q|0)jz(b,20131,1);if(n>>>0>>0&(k|0)>0)while(1){m=Am(c[n>>2]|0,0,D+524+9|0)|0;if(m>>>0>(D+524|0)>>>0){Nk(D+524|0,48,m-C|0)|0;do m=m+-1|0;while(m>>>0>(D+524|0)>>>0)}jz(b,m,(k|0)<9?k:9);n=n+4|0;m=k+-9|0;if(!(n>>>0>>0&(k|0)>9)){k=m;break}else k=m}_m(b,48,k+9|0,9,0)}else{q=t?u:v+4|0;if((k|0)>-1){g=(r|0)==0;o=v;do{m=Am(c[o>>2]|0,0,D+524+9|0)|0;if((m|0)==(D+524+9|0)){a[D+524+8>>0]=48;m=D+524+8|0}do if((o|0)==(v|0)){n=m+1|0;jz(b,m,1);if(g&(k|0)<1){m=n;break}jz(b,20131,1);m=n}else{if(m>>>0<=(D+524|0)>>>0)break;Nk(D+524|0,48,m+(0-C)|0)|0;do m=m+-1|0;while(m>>>0>(D+524|0)>>>0)}while(0);A=D+524+9-m|0;jz(b,m,(k|0)>(A|0)?A:k);k=k-A|0;o=o+4|0}while(o>>>0>>0&(k|0)>-1)}_m(b,48,k+18|0,18,0);jz(b,s,B-s|0)}_m(b,32,f,j,h^8192)}else{j=y+3|0;_m(b,32,f,j,h&-65537);jz(b,x,y);jz(b,e!=e|0.0!=0.0?(i&32|0?20107:20111):i&32|0?20099:20103,3);_m(b,32,f,j,h^8192)}while(0);l=D;return ((j|0)<(f|0)?f:j)|0}function Oc(d,e,f,g,i){d=d|0;e=e|0;f=f|0;g=g|0;i=i|0;var j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=l;l=l+64|0;c[y+16>>2]=e;x=y+24+40|0;q=e;e=0;j=0;n=0;a:while(1){do if((e|0)>-1)if((j|0)>(2147483647-e|0)){c[6614]=75;e=-1;break}else{e=j+e|0;break}while(0);j=a[q>>0]|0;if(!(j<<24>>24)){w=87;break}else k=q;b:while(1){switch(j<<24>>24){case 37:{j=k;w=9;break b}case 0:{j=k;break b}default:{}}v=k+1|0;c[y+16>>2]=v;j=a[v>>0]|0;k=v}c:do if((w|0)==9)while(1){w=0;if((a[j+1>>0]|0)!=37)break c;k=k+1|0;j=j+2|0;c[y+16>>2]=j;if((a[j>>0]|0)==37)w=9;else break}while(0);k=k-q|0;if(d|0)jz(d,q,k);if(k|0){q=j;j=k;continue}m=j+1|0;k=(a[m>>0]|0)+-48|0;if(k>>>0<10){v=(a[j+2>>0]|0)==36;s=v?k:-1;p=v?1:n;m=v?j+3|0:m}else{s=-1;p=n}c[y+16>>2]=m;j=a[m>>0]|0;d:do if(((j<<24>>24)+-32|0)>>>0<32){o=j;n=0;k=(j<<24>>24)+-32|0;while(1){j=1<>2]=m;j=a[m>>0]|0;k=(j<<24>>24)+-32|0;if(k>>>0>=32){o=n;break}else o=j}}else o=0;while(0);if(j<<24>>24==42){k=m+1|0;j=(a[k>>0]|0)+-48|0;if(j>>>0<10?(a[m+2>>0]|0)==36:0){c[i+(j<<2)>>2]=10;n=1;j=m+3|0;k=c[g+((a[k>>0]|0)+-48<<3)>>2]|0}else{if(p|0){e=-1;break}if(d|0){n=(c[f>>2]|0)+(4-1)&~(4-1);v=c[n>>2]|0;c[f>>2]=n+4;n=0;j=k;k=v}else{n=0;j=k;k=0}}c[y+16>>2]=j;u=(k|0)<0;m=j;r=u?o|8192:o;v=n;u=u?0-k|0:k}else{j=vp(y+16|0)|0;if((j|0)<0){e=-1;break}m=c[y+16>>2]|0;r=o;v=p;u=j}do if((a[m>>0]|0)==46){j=m+1|0;if((a[j>>0]|0)!=42){c[y+16>>2]=j;o=vp(y+16|0)|0;j=c[y+16>>2]|0;break}j=m+2|0;k=(a[j>>0]|0)+-48|0;if(k>>>0<10?(a[m+3>>0]|0)==36:0){c[i+(k<<2)>>2]=10;o=c[g+((a[j>>0]|0)+-48<<3)>>2]|0;j=m+4|0;c[y+16>>2]=j;break}if(v|0){e=-1;break a}if(d|0){t=(c[f>>2]|0)+(4-1)&~(4-1);k=c[t>>2]|0;c[f>>2]=t+4}else k=0;c[y+16>>2]=j;o=k}else{j=m;o=-1}while(0);p=0;while(1){if(((a[j>>0]|0)+-65|0)>>>0>57){e=-1;break a}t=j+1|0;c[y+16>>2]=t;k=a[(a[j>>0]|0)+-65+(19599+(p*58|0))>>0]|0;if(((k&255)+-1|0)>>>0<8){j=t;p=k&255}else break}if(!(k<<24>>24)){e=-1;break}m=(s|0)>-1;do if(k<<24>>24==19)if(m){e=-1;break a}else w=49;else{if(m){c[i+(s<<2)>>2]=k&255;s=g+(s<<3)|0;w=c[s+4>>2]|0;c[y>>2]=c[s>>2];c[y+4>>2]=w;w=49;break}if(!d){e=0;break a}Fg(y,k&255,f)}while(0);if((w|0)==49?(w=0,(d|0)==0):0){q=t;j=0;n=v;continue}n=a[j>>0]|0;n=(p|0)!=0&(n&15|0)==3?n&-33:n;k=r&-65537;s=(r&8192|0)==0?r:k;e:do switch(n|0){case 110:switch((p&255)<<24>>24){case 0:{c[c[y>>2]>>2]=e;q=t;j=0;n=v;continue a}case 1:{c[c[y>>2]>>2]=e;q=t;j=0;n=v;continue a}case 2:{q=c[y>>2]|0;c[q>>2]=e;c[q+4>>2]=((e|0)<0)<<31>>31;q=t;j=0;n=v;continue a}case 3:{b[c[y>>2]>>1]=e;q=t;j=0;n=v;continue a}case 4:{a[c[y>>2]>>0]=e;q=t;j=0;n=v;continue a}case 6:{c[c[y>>2]>>2]=e;q=t;j=0;n=v;continue a}case 7:{q=c[y>>2]|0;c[q>>2]=e;c[q+4>>2]=((e|0)<0)<<31>>31;q=t;j=0;n=v;continue a}default:{q=t;j=0;n=v;continue a}}case 112:{j=s|8;k=o>>>0>8?o:8;n=120;w=61;break}case 88:case 120:{j=s;k=o;w=61;break}case 111:{q=c[y>>2]|0;r=c[y+4>>2]|0;k=Qq(q,r,x)|0;p=k;j=s;k=(s&8|0)==0|(o|0)>(x-k|0)?o:x-k+1|0;m=0;o=20063;w=67;break}case 105:case 100:{j=c[y>>2]|0;k=c[y+4>>2]|0;if((k|0)<0){j=Nv(0,0,j|0,k|0)|0;k=z;c[y>>2]=j;c[y+4>>2]=k;m=1;n=20063;w=66;break e}else{m=(s&2049|0)!=0&1;n=(s&2048|0)==0?((s&1|0)==0?20063:20065):20064;w=66;break e}}case 117:{j=c[y>>2]|0;k=c[y+4>>2]|0;m=0;n=20063;w=66;break}case 99:{a[y+24+39>>0]=c[y>>2];q=y+24+39|0;p=k;n=1;m=0;k=20063;j=x;break}case 109:{j=mH(c[6614]|0)|0;w=71;break}case 115:{j=c[y>>2]|0;j=j|0?j:20073;w=71;break}case 67:{c[y+8>>2]=c[y>>2];c[y+8+4>>2]=0;c[y>>2]=y+8;j=y+8|0;o=-1;w=75;break}case 83:{j=c[y>>2]|0;if(!o){_m(d,32,u,0,s);j=0;w=84}else w=75;break}case 65:case 71:case 70:case 69:case 97:case 103:case 102:case 101:{q=t;j=Nc(d,+h[y>>3],u,o,s,n)|0;n=v;continue a}default:{p=s;n=o;m=0;k=20063;j=x}}while(0);f:do if((w|0)==61){q=c[y>>2]|0;r=c[y+4>>2]|0;p=Np(q,r,x,n&32)|0;o=(j&8|0)==0|(q|0)==0&(r|0)==0;m=o?0:2;o=o?20063:20063+(n>>4)|0;w=67}else if((w|0)==66){q=j;r=k;p=Am(j,k,x)|0;j=s;k=o;o=n;w=67}else if((w|0)==71){w=0;s=xj(j,o)|0;q=j;p=k;n=(s|0)==0?o:s-j|0;m=0;k=20063;j=(s|0)==0?j+o|0:s}else if((w|0)==75){w=0;m=0;k=0;p=j;while(1){n=c[p>>2]|0;if(!n)break;k=Vz(y+20|0,n)|0;if((k|0)<0|k>>>0>(o-m|0)>>>0)break;m=k+m|0;if(o>>>0>m>>>0)p=p+4|0;else break}if((k|0)<0){e=-1;break a}_m(d,32,u,m,s);if(!m){j=0;w=84}else{n=0;while(1){k=c[j>>2]|0;if(!k){j=m;w=84;break f}k=Vz(y+20|0,k)|0;n=k+n|0;if((n|0)>(m|0)){j=m;w=84;break f}jz(d,y+20|0,k);if(n>>>0>=m>>>0){j=m;w=84;break}else j=j+4|0}}}while(0);if((w|0)==67){w=0;n=(q|0)!=0|(r|0)!=0;s=(k|0)!=0|n;n=((n^1)&1)+(x-p)|0;q=s?p:x;p=(k|0)>-1?j&-65537:j;n=s?((k|0)>(n|0)?k:n):k;k=o;j=x}else if((w|0)==84){w=0;_m(d,32,u,j,s^8192);q=t;j=(u|0)>(j|0)?u:j;n=v;continue}s=j-q|0;r=(n|0)<(s|0)?s:n;n=r+m|0;j=(u|0)<(n|0)?n:u;_m(d,32,j,n,p);jz(d,k,m);_m(d,48,j,n,p^65536);_m(d,48,r,s,0);jz(d,q,s);_m(d,32,j,n,p^8192);q=t;n=v}g:do if((w|0)==87)if(!d)if(!n)e=0;else{e=1;while(1){j=c[i+(e<<2)>>2]|0;if(!j){j=0;break}Fg(g+(e<<3)|0,j,f);e=e+1|0;if((e|0)>=10){e=1;break g}}while(1){e=e+1|0;if(j|0){e=-1;break g}if((e|0)>=10){e=1;break g}j=c[i+(e<<2)>>2]|0}}while(0);l=y;return e|0}function Pc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0;u=l;l=l+672|0;c[u+448+8>>2]=0;c[u+448+12>>2]=1065353216;c[u+448+16>>2]=1065353216;c[u+448+20>>2]=1065353216;g[u+448+24>>2]=0.0;c[u+448>>2]=6864;c[u+448+4>>2]=8;g[u+448+28>>2]=0.0;g[u+448+44>>2]=0.0;g[u+384>>2]=1.0;m=u+384+4|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[m+12>>2]=0;g[u+384+20>>2]=1.0;n=u+384+24|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;g[u+384+40>>2]=1.0;g[u+384+44>>2]=0.0;c[u+384+48>>2]=c[a>>2];c[u+384+48+4>>2]=c[a+4>>2];c[u+384+48+8>>2]=c[a+8>>2];c[u+384+48+12>>2]=c[a+12>>2];a=e;k=a+36|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(k|0));c[u+504>>2]=b;c[u+504+4>>2]=u+448;I=+g[d>>2];H=+g[d+16>>2];G=+g[d+32>>2];F=+g[d+4>>2];E=+g[d+20>>2];D=+g[d+36>>2];s=+g[d+8>>2];q=+g[d+24>>2];o=+g[d+40>>2];g[u+504+8>>2]=I+H*0.0+G*0.0;g[u+504+12>>2]=F+E*0.0+D*0.0;g[u+504+16>>2]=s+q*0.0+o*0.0;g[u+504+20>>2]=0.0;g[u+504+24>>2]=I*0.0+H+G*0.0;g[u+504+28>>2]=F*0.0+E+D*0.0;g[u+504+32>>2]=s*0.0+q+o*0.0;g[u+504+36>>2]=0.0;g[u+504+40>>2]=I*0.0+H*0.0+G;g[u+504+44>>2]=F*0.0+E*0.0+D;g[u+504+48>>2]=s*0.0+q*0.0+o;g[u+504+52>>2]=0.0;o=+g[u+384+48>>2]-+g[d+48>>2];q=+g[u+384+52>>2]-+g[d+52>>2];s=+g[u+384+56>>2]-+g[d+56>>2];B=+g[u+384>>2];A=+g[u+384+16>>2];z=+g[u+384+32>>2];y=+g[m>>2];x=+g[u+384+20>>2];w=+g[u+384+36>>2];v=+g[u+384+8>>2];f=+g[n>>2];h=+g[u+384+40>>2];p=+g[d+8>>2];r=+g[d+24>>2];t=+g[d+40>>2];i=o*+g[d>>2]+q*+g[d+16>>2]+s*+g[d+32>>2];j=o*+g[d+4>>2]+q*+g[d+20>>2]+s*+g[d+36>>2];g[u+504+56>>2]=I*B+H*A+G*z;g[u+504+60>>2]=I*y+H*x+G*w;g[u+504+64>>2]=I*v+H*f+G*h;g[u+504+68>>2]=0.0;g[u+504+72>>2]=B*F+A*E+z*D;g[u+504+76>>2]=y*F+x*E+w*D;g[u+504+80>>2]=v*F+f*E+h*D;g[u+504+84>>2]=0.0;g[u+504+88>>2]=B*p+A*r+z*t;g[u+504+92>>2]=y*p+x*r+w*t;g[u+504+96>>2]=v*p+f*r+h*t;g[u+504+100>>2]=0.0;g[u+504+104>>2]=i;g[u+504+108>>2]=j;g[u+504+112>>2]=o*p+q*r+s*t;g[u+504+116>>2]=0.0;c[u+504+120>>2]=80;c[u+504+124>>2]=0;c[u+364>>2]=0;c[u+128>>2]=0;c[u+128+4>>2]=0;c[u+128+8>>2]=0;c[u+128+12>>2]=0;c[u+376>>2]=2;c[u+368>>2]=0;g[u+144>>2]=0.0;c[u+648>>2]=1065353216;c[u+648+4>>2]=1065353216;c[u+648+8>>2]=1065353216;g[u+648+12>>2]=0.0;switch(Ac(u,u+504|0,u+648|0)|0){case 0:{a=c[u+372>>2]|0;if(!(c[a+32>>2]|0)){j=0.0;i=0.0;f=0.0;r=0.0;q=0.0;h=0.0}else{n=0;j=0.0;i=0.0;f=0.0;r=0.0;q=0.0;h=0.0;do{t=+g[a+16+(n<<2)>>2];k=c[u+504+120>>2]|0;J=c[u+504+124>>2]|0;m=(c[u+504>>2]|0)+(J>>1)|0;if(J&1)k=c[(c[m>>2]|0)+k>>2]|0;Kb[k&127](u+648|0,m,c[a+(n<<2)>>2]|0);j=j+t*+g[u+648>>2];f=f+t*+g[u+648+4>>2];i=i+t*+g[u+648+8>>2];a=c[(c[u+372>>2]|0)+(n<<2)>>2]|0;o=-+g[a>>2];p=-+g[a+4>>2];s=-+g[a+8>>2];a=c[u+504+120>>2]|0;J=c[u+504+124>>2]|0;k=(c[u+504+4>>2]|0)+(J>>1)|0;if(J&1)a=c[(c[k>>2]|0)+a>>2]|0;H=+g[u+504+24>>2]*o+ +g[u+504+28>>2]*p+ +g[u+504+32>>2]*s;G=+g[u+504+40>>2]*o+ +g[u+504+44>>2]*p+ +g[u+504+48>>2]*s;g[u+632>>2]=+g[u+504+8>>2]*o+ +g[u+504+12>>2]*p+ +g[u+504+16>>2]*s;g[u+632+4>>2]=H;g[u+632+8>>2]=G;g[u+632+12>>2]=0.0;Kb[a&127](u+648|0,k,u+632|0);G=+g[u+648>>2];H=+g[u+648+4>>2];I=+g[u+648+8>>2];r=r+t*(G*+g[u+504+56>>2]+H*+g[u+504+60>>2]+I*+g[u+504+64>>2]+ +g[u+504+104>>2]);h=h+t*(G*+g[u+504+72>>2]+H*+g[u+504+76>>2]+I*+g[u+504+80>>2]+ +g[u+504+108>>2]);q=q+t*(G*+g[u+504+88>>2]+H*+g[u+504+92>>2]+I*+g[u+504+96>>2]+ +g[u+504+112>>2]);n=n+1|0;a=c[u+372>>2]|0}while(n>>>0<(c[a+32>>2]|0)>>>0)}s=j*+g[d>>2]+f*+g[d+4>>2]+i*+g[d+8>>2]+ +g[d+48>>2];t=j*+g[d+16>>2]+f*+g[d+20>>2]+i*+g[d+24>>2]+ +g[d+52>>2];o=j*+g[d+32>>2]+f*+g[d+36>>2]+i*+g[d+40>>2]+ +g[d+56>>2];g[e+4>>2]=s;g[e+8>>2]=t;g[e+12>>2]=o;g[e+16>>2]=0.0;j=r*+g[d>>2]+h*+g[d+4>>2]+q*+g[d+8>>2]+ +g[d+48>>2];p=r*+g[d+16>>2]+h*+g[d+20>>2]+q*+g[d+24>>2]+ +g[d+52>>2];i=r*+g[d+32>>2]+h*+g[d+36>>2]+q*+g[d+40>>2]+ +g[d+56>>2];g[e+20>>2]=j;g[e+24>>2]=p;g[e+28>>2]=i;g[e+32>>2]=0.0;switch(c[b+4>>2]|0){case 8:{f=+g[b+28>>2]*+g[b+12>>2];break}case 0:{f=+g[b+44>>2];break}case 1:{f=+g[b+44>>2];break}case 13:{f=+g[b+44>>2];break}case 11:{f=+g[b+44>>2];break}case 10:{f=+g[b+44>>2];break}case 4:case 5:{f=+g[b+44>>2];break}default:f=+gb[c[(c[b>>2]|0)+48>>2]&15](b)}switch(c[u+448+4>>2]|0){case 8:{h=+g[u+448+28>>2]*+g[u+448+12>>2];break}case 0:{h=+g[u+448+44>>2];break}case 1:{h=+g[u+448+44>>2];break}case 13:{h=+g[u+448+44>>2];break}case 11:{h=+g[u+448+44>>2];break}case 10:{h=+g[u+448+44>>2];break}case 4:case 5:{h=+g[u+448+44>>2];break}default:h=+gb[c[(c[u+448>>2]|0)+48>>2]&15](u+448|0)}I=f+h;H=+C(+((j-s)*(j-s)+(p-t)*(p-t)+(i-o)*(i-o)));g[e+36>>2]=(j-s)*(1.0/H);g[e+40>>2]=(p-t)*(1.0/H);g[e+44>>2]=(i-o)*(1.0/H);g[e+48>>2]=0.0;g[e+4>>2]=I*(j-s)*(1.0/H)+ +g[e+4>>2];g[e+8>>2]=I*(p-t)*(1.0/H)+ +g[e+8>>2];g[e+12>>2]=I*(i-o)*(1.0/H)+ +g[e+12>>2];I=H-I;l=u;return +I}case 1:{if(!(wc(b,d,u+448|0,u+384|0,u+128|0,e,1)|0)){I=3402823466385288598117041.0e14;l=u;return +I}h=+g[e+4>>2]-+g[e+20>>2];j=+g[e+8>>2]-+g[e+24>>2];i=+g[e+12>>2]-+g[e+28>>2];f=+C(+(h*h+j*j+i*i));if(f>=1.1920928955078125e-07){g[e+36>>2]=h*(1.0/f);g[e+40>>2]=j*(1.0/f);g[e+44>>2]=i*(1.0/f);g[e+48>>2]=0.0}I=-f;l=u;return +I}default:{I=3402823466385288598117041.0e14;l=u;return +I}}return 0.0}function Qc(a,b){a=a|0;b=+b;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;o=l;l=l+48|0;d=c[a+24>>2]|0;if((d|0)<=0){l=o;return}n=0;a:while(1){m=c[(c[a+32>>2]|0)+(n<<2)>>2]|0;switch(c[m+216>>2]|0){case 2:case 5:break;default:{Kd(m,0);d=c[m+732>>2]|0;if((d|0)>0){e=0;do{k=c[m+740>>2]|0;i=c[k+(e*52|0)+12>>2]|0;j=c[k+(e*52|0)+8>>2]|0;y=+g[i+24>>2]-+g[j+24>>2];x=+g[i+28>>2]-+g[j+28>>2];b=+g[i+32>>2]-+g[j+32>>2];g[k+(e*52|0)+36>>2]=y;g[k+(e*52|0)+40>>2]=x;g[k+(e*52|0)+44>>2]=b;g[k+(e*52|0)+48>>2]=0.0;g[k+(e*52|0)+32>>2]=1.0/(+g[k+(e*52|0)+24>>2]*(y*y+x*x+b*b));e=e+1|0}while((e|0)!=(d|0))}d=c[m+792>>2]|0;if((d|0)>0){b=+g[m+452>>2];f=0;do{k=c[m+800>>2]|0;e=k+(f*96|0)+20|0;h=c[e>>2]|0;B=+g[k+(f*96|0)+4>>2];A=+g[k+(f*96|0)+8>>2];y=+g[k+(f*96|0)+12>>2];z=+g[h+4>>2]*B+ +g[h+8>>2]*A+ +g[h+12>>2]*y;x=B*+g[h+20>>2]+A*+g[h+24>>2]+y*+g[h+28>>2];y=B*+g[h+36>>2]+A*+g[h+40>>2]+y*+g[h+44>>2];i=k+(f*96|0)+28|0;j=k+(f*96|0)|0;Df(o,b,+g[(c[j>>2]|0)+88>>2],+g[h+344>>2],h+264|0,z,x,y);c[i>>2]=c[o>>2];c[i+4>>2]=c[o+4>>2];c[i+8>>2]=c[o+8>>2];c[i+12>>2]=c[o+12>>2];i=k+(f*96|0)+44|0;c[i>>2]=c[o+16>>2];c[i+4>>2]=c[o+16+4>>2];c[i+8>>2]=c[o+16+8>>2];c[i+12>>2]=c[o+16+12>>2];i=k+(f*96|0)+60|0;c[i>>2]=c[o+32>>2];c[i+4>>2]=c[o+32+4>>2];c[i+8>>2]=c[o+32+8>>2];c[i+12>>2]=c[o+32+12>>2];g[k+(f*96|0)+76>>2]=z;g[k+(f*96|0)+80>>2]=x;g[k+(f*96|0)+84>>2]=y;g[k+(f*96|0)+88>>2]=0.0;b=+g[m+452>>2];g[k+(f*96|0)+92>>2]=b*+g[(c[j>>2]|0)+88>>2];e=c[e>>2]|0;if(!(c[e+204>>2]&3)){if((c[e+216>>2]&-2|0)!=4)c[e+216>>2]=1;g[e+220>>2]=0.0}f=f+1|0}while((f|0)!=(d|0))}d=c[m+372>>2]|0;if((d|0)>0){e=c[m+396>>2]|0;f=0;do{if((e|0)>0){d=0;do{Bb[((c[(c[m+404>>2]|0)+(d<<2)>>2]|0)==0?23:0)&31](m,1.0);d=d+1|0;e=c[m+396>>2]|0}while((d|0)<(e|0));d=c[m+372>>2]|0}f=f+1|0}while((f|0)<(d|0));d=c[m+712>>2]|0;if((d|0)>0){e=0;do{k=c[m+720>>2]|0;z=+g[m+452>>2];A=z*+g[k+(e*104|0)+44>>2]+ +g[k+(e*104|0)+28>>2];B=z*+g[k+(e*104|0)+48>>2]+ +g[k+(e*104|0)+32>>2];g[k+(e*104|0)+8>>2]=+g[k+(e*104|0)+40>>2]*z+ +g[k+(e*104|0)+24>>2];g[k+(e*104|0)+12>>2]=A;g[k+(e*104|0)+16>>2]=B;g[k+(e*104|0)+20>>2]=0.0;e=e+1|0}while((e|0)!=(d|0))}}d=c[m+376>>2]|0;if((d|0)>0){e=c[m+416>>2]|0;h=0;do{b=+(h|0)/+(d|0);if((e|0)>0){f=0;do{switch(c[(c[m+424>>2]|0)+(f<<2)>>2]|0){case 1:{d=2;break}case 0:{d=3;break}case 2:{d=4;break}case 3:{d=5;break}default:{w=35;break a}}Cb[d&7](m,1.0,b);f=f+1|0;e=c[m+416>>2]|0}while((f|0)<(e|0));d=c[m+376>>2]|0}h=h+1|0}while((h|0)<(d|0));b=+g[m+456>>2]*(1.0-+g[m+296>>2]);d=c[m+712>>2]|0;if((d|0)>0){e=0;do{k=c[m+720>>2]|0;A=b*(+g[k+(e*104|0)+12>>2]-+g[k+(e*104|0)+28>>2]);B=b*(+g[k+(e*104|0)+16>>2]-+g[k+(e*104|0)+32>>2]);g[k+(e*104|0)+40>>2]=b*(+g[k+(e*104|0)+8>>2]-+g[k+(e*104|0)+24>>2]);g[k+(e*104|0)+44>>2]=A;g[k+(e*104|0)+48>>2]=B;k=k+(e*104|0)+52|0;e=e+1|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}while((e|0)!=(d|0))}}d=c[m+380>>2]|0;if((d|0)>0){b=+g[m+292>>2]*+g[m+456>>2];e=c[m+712>>2]|0;if((e|0)>0){d=0;do{j=c[m+720>>2]|0;k=j+(d*104|0)+24|0;j=j+(d*104|0)+8|0;c[k>>2]=c[j>>2];c[k+4>>2]=c[j+4>>2];c[k+8>>2]=c[j+8>>2];c[k+12>>2]=c[j+12>>2];d=d+1|0}while((d|0)!=(e|0));d=c[m+380>>2]|0;if((d|0)>0)w=42}else w=42;if((w|0)==42){w=0;e=c[m+436>>2]|0;h=0;do{if((e|0)>0){f=0;do{switch(c[(c[m+444>>2]|0)+(f<<2)>>2]|0){case 1:{d=2;break}case 0:{d=3;break}case 2:{d=4;break}case 3:{d=5;break}default:{w=53;break a}}Cb[d&7](m,1.0,0.0);f=f+1|0;e=c[m+436>>2]|0}while((f|0)<(e|0));d=c[m+380>>2]|0}h=h+1|0}while((h|0)<(d|0))}d=c[m+712>>2]|0;if((d|0)>0){e=c[m+720>>2]|0;f=0;do{A=b*(+g[e+(f*104|0)+12>>2]-+g[e+(f*104|0)+28>>2]);B=b*(+g[e+(f*104|0)+16>>2]-+g[e+(f*104|0)+32>>2]);k=e+(f*104|0)+40|0;g[k>>2]=b*(+g[e+(f*104|0)+8>>2]-+g[e+(f*104|0)+24>>2])+ +g[k>>2];k=e+(f*104|0)+44|0;g[k>>2]=A+ +g[k>>2];k=e+(f*104|0)+48|0;g[k>>2]=B+ +g[k>>2];f=f+1|0}while((f|0)!=(d|0))}}f=c[m+1112>>2]|0;if((f|0)>0){h=c[m+1120>>2]|0;j=0;do{i=c[h+(j<<2)>>2]|0;if(+g[i+352>>2]>0.0?(s=c[i+24>>2]|0,(s|0)>0):0){d=c[i+32>>2]|0;k=0;do{e=c[d+(k<<2)>>2]|0;if(+g[e+88>>2]>0.0?(p=+g[e+24>>2]-+g[i+228>>2],r=+g[e+28>>2]-+g[i+232>>2],v=+g[e+32>>2]-+g[i+236>>2],u=+g[i+336>>2],B=+g[i+340>>2],q=+g[i+332>>2],t=+g[i+316>>2]+(u*v-r*B),v=+g[i+320>>2]+(p*B-v*q),u=r*q-p*u+ +g[i+324>>2],p=+g[e+40>>2],q=+g[e+44>>2],r=+g[e+48>>2],t*t+v*v+u*u<=p*p+q*q+r*r):0){B=+g[i+352>>2];g[e+40>>2]=p+(t-p)*B;g[e+44>>2]=(v-q)*B+q;g[e+48>>2]=(u-r)*B+r}k=k+1|0}while((k|0)!=(s|0))}j=j+1|0}while((j|0)!=(f|0))}Kd(m,1);d=c[a+24>>2]|0}}n=n+1|0;if((n|0)>=(d|0)){w=3;break}}if((w|0)==3){l=o;return}}function Rc(d,e){d=d|0;e=+e;var f=0,h=0.0,i=0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0,t=0.0,u=0;s=l;l=l+304|0;bj(12298);a:do if((c[d+232>>2]|0)>0){o=s+136+48|0;n=0;while(1){m=c[(c[d+240>>2]|0)+(n<<2)>>2]|0;g[m+244>>2]=1.0;b:do switch(c[m+216>>2]|0){case 2:case 5:break;default:if(!(c[m+204>>2]&3)){Ig(m+4|0,+g[m+312>>2],+g[m+316>>2],+g[m+320>>2],m+328|0,e,s+136|0);h=+g[o>>2]-+g[m+52>>2];k=+g[s+136+52>>2]-+g[m+56>>2];j=+g[s+136+56>>2]-+g[m+60>>2];if(a[d+44>>0]|0?(t=+g[m+252>>2],t*t!=0.0?t*t>2]|0)+4>>2]|0)<20){c[5853]=(c[5853]|0)+1;f=c[d+68>>2]|0;f=qb[c[(c[f>>2]|0)+36>>2]&127](f)|0;i=c[d+24>>2]|0;g[s+200+4>>2]=1.0;b[s+200+8>>1]=1;b[s+200+10>>1]=-1;c[s+200+12>>2]=c[m+52>>2];c[s+200+12+4>>2]=c[m+52+4>>2];c[s+200+12+8>>2]=c[m+52+8>>2];c[s+200+12+12>>2]=c[m+52+12>>2];c[s+200+28>>2]=c[o>>2];c[s+200+28+4>>2]=c[o+4>>2];c[s+200+28+8>>2]=c[o+8>>2];c[s+200+28+12>>2]=c[o+12>>2];c[s+200+76>>2]=0;c[s+200>>2]=4476;c[s+200+80>>2]=m;c[s+200+88>>2]=f;c[s+200+92>>2]=i;i=c[m+248>>2]|0;c[s+80+8>>2]=0;c[s+80+12>>2]=1065353216;c[s+80+16>>2]=1065353216;c[s+80+20>>2]=1065353216;g[s+80+24>>2]=0.0;c[s+80>>2]=6864;c[s+80+4>>2]=8;c[s+80+28>>2]=i;c[s+80+44>>2]=i;c[s+200+84>>2]=c[d+56>>2];i=c[(c[m+188>>2]|0)+4>>2]|0;b[s+200+8>>1]=i;b[s+200+10>>1]=i>>>16;c[s+16+48>>2]=c[o>>2];c[s+16+48+4>>2]=c[o+4>>2];c[s+16+48+8>>2]=c[o+8>>2];c[s+16+48+12>>2]=c[o+12>>2];c[s+16>>2]=c[m+4>>2];c[s+16+4>>2]=c[m+4+4>>2];c[s+16+8>>2]=c[m+4+8>>2];c[s+16+12>>2]=c[m+4+12>>2];c[s+16+16>>2]=c[m+20>>2];c[s+16+16+4>>2]=c[m+20+4>>2];c[s+16+16+8>>2]=c[m+20+8>>2];c[s+16+16+12>>2]=c[m+20+12>>2];c[s+16+32>>2]=c[m+36>>2];c[s+16+32+4>>2]=c[m+36+4>>2];c[s+16+32+8>>2]=c[m+36+8>>2];c[s+16+32+12>>2]=c[m+36+12>>2];zd(d,s+80|0,m+4|0,s+16|0,s+200|0,0.0);h=+g[s+200+4>>2];if(h<1.0){g[m+244>>2]=h;Ig(m+4|0,+g[m+312>>2],+g[m+316>>2],+g[m+320>>2],m+328|0,h*e,s+136|0);g[m+244>>2]=0.0;Ee(m,s+136|0);f=4}else f=0;if(!f)p=12}else p=12;if((p|0)==12){p=0;f=0}i=c[2405]|0;u=(c[i+16>>2]|0)+-1|0;c[i+16>>2]=u;do if(!u){if(c[i+4>>2]|0){Za(s+200|0,0)|0;u=c[6471]|0;g[i+8>>2]=+g[i+8>>2]+ +(((c[s+200+4>>2]|0)-(c[u+4>>2]|0)+(((c[s+200>>2]|0)-(c[u>>2]|0)|0)*1e6|0)-(c[i+12>>2]|0)|0)>>>0)/1.0e3;if(c[i+16>>2]|0)break;i=c[2405]|0}c[2405]=c[i+20>>2]}while(0);if(f|0)break b}Ee(m,s+136|0)}}while(0);n=n+1|0;if((n|0)>=(c[d+232>>2]|0))break a}}while(0);do if(a[d+275>>0]|0){bj(12338);if((c[d+308>>2]|0)>0){o=0;do{n=c[(c[d+316>>2]|0)+(o<<2)>>2]|0;m=c[n+740>>2]|0;m=(c[m+236>>2]&2|0)==0?0:m;p=c[n+744>>2]|0;p=(c[p+236>>2]&2|0)==0?0:p;f=c[n+748>>2]|0;if((f|0)>0)if(!m){i=0;do{h=+g[57]*+g[p+228>>2];if(h>0.0?(q=+g[n+4+(i*184|0)+120>>2],q!=0.0):0){k=h*+g[n+4+(i*184|0)+64>>2]*q;e=h*+g[n+4+(i*184|0)+68>>2]*q;t=h*+g[n+4+(i*184|0)+72>>2]*q;h=+g[n+4+(i*184|0)+36>>2]-+g[p+56>>2];j=+g[n+4+(i*184|0)+40>>2]-+g[p+60>>2];g[s+16>>2]=+g[n+4+(i*184|0)+32>>2]-+g[p+52>>2];g[s+16+4>>2]=h;g[s+16+8>>2]=j;g[s+16+12>>2]=0.0;g[s>>2]=k;g[s+4>>2]=e;g[s+8>>2]=t;g[s+12>>2]=0.0;Zk(p,s,s+16|0);f=c[n+748>>2]|0}i=i+1|0}while((i|0)<(f|0))}else{i=0;do{h=+g[m+228>>2]*+g[p+228>>2];if(h>0.0?(r=+g[n+4+(i*184|0)+120>>2],r!=0.0):0){k=h*+g[n+4+(i*184|0)+64>>2]*r;e=h*+g[n+4+(i*184|0)+68>>2]*r;t=h*+g[n+4+(i*184|0)+72>>2]*r;g[s+200>>2]=-k;g[s+200+4>>2]=-e;g[s+200+8>>2]=-t;g[s+200+12>>2]=0.0;j=+g[n+4+(i*184|0)+52>>2]-+g[m+56>>2];h=+g[n+4+(i*184|0)+56>>2]-+g[m+60>>2];g[s+80>>2]=+g[n+4+(i*184|0)+48>>2]-+g[m+52>>2];g[s+80+4>>2]=j;g[s+80+8>>2]=h;g[s+80+12>>2]=0.0;h=+g[n+4+(i*184|0)+36>>2]-+g[p+56>>2];j=+g[n+4+(i*184|0)+40>>2]-+g[p+60>>2];g[s+16>>2]=+g[n+4+(i*184|0)+32>>2]-+g[p+52>>2];g[s+16+4>>2]=h;g[s+16+8>>2]=j;g[s+16+12>>2]=0.0;Zk(m,s+200|0,s+80|0);g[s>>2]=k;g[s+4>>2]=e;g[s+8>>2]=t;g[s+12>>2]=0.0;Zk(p,s,s+16|0);f=c[n+748>>2]|0}i=i+1|0}while((i|0)<(f|0))}o=o+1|0}while((o|0)<(c[d+308>>2]|0))}f=c[2405]|0;u=(c[f+16>>2]|0)+-1|0;c[f+16>>2]=u;if(!u){if(c[f+4>>2]|0){Za(s+200|0,0)|0;u=c[6471]|0;g[f+8>>2]=+g[f+8>>2]+ +(((c[s+200+4>>2]|0)-(c[u+4>>2]|0)+(((c[s+200>>2]|0)-(c[u>>2]|0)|0)*1e6|0)-(c[f+12>>2]|0)|0)>>>0)/1.0e3;if(c[f+16>>2]|0)break;f=c[2405]|0}c[2405]=c[f+20>>2]}}while(0);f=c[2405]|0;u=(c[f+16>>2]|0)+-1|0;c[f+16>>2]=u;if(u|0){l=s;return}do if(c[f+4>>2]|0){Za(s+200|0,0)|0;u=c[6471]|0;g[f+8>>2]=+g[f+8>>2]+ +(((c[s+200+4>>2]|0)-(c[u+4>>2]|0)+(((c[s+200>>2]|0)-(c[u>>2]|0)|0)*1e6|0)-(c[f+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[f+16>>2]|0)){f=c[2405]|0;break}else{l=s;return}}while(0);c[2405]=c[f+20>>2];l=s;return}function Sc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0;if((d|0)<=1){x=0;return x|0}w=c[b+712>>2]|0;x=O(w,w)|0;x=XH(x>>>0>1073741823?-1:x<<2)|0;if((w|0)>0){j=0;do{k=O(j,w)|0;h=x+(j+k<<2)|0;i=0;do{f=x+((O(i,w)|0)+j<<2)|0;if((i|0)==(j|0)){c[f>>2]=0;c[h>>2]=0}else{c[f>>2]=2147483647;c[x+(i+k<<2)>>2]=2147483647}i=i+1|0}while((i|0)!=(w|0));j=j+1|0}while((j|0)!=(w|0))}f=c[b+732>>2]|0;if((f|0)>0){h=c[b+740>>2]|0;i=c[b+720>>2]|0;j=0;do{p=((c[h+(j*52|0)+8>>2]|0)-i|0)/104|0;t=((c[h+(j*52|0)+12>>2]|0)-i|0)/104|0;c[x+((O(t,w)|0)+p<<2)>>2]=1;c[x+((O(p,w)|0)+t<<2)>>2]=1;j=j+1|0}while((j|0)!=(f|0))}do if((d|0)!=2)if((w|0)>0){m=0;do{n=O(m,w)|0;k=0;do{l=k;k=k+1|0;if((k|0)<(w|0)){o=O(l,w)|0;h=x+(o+m<<2)|0;j=k;do{f=(c[h>>2]|0)+(c[x+(j+n<<2)>>2]|0)|0;i=x+(j+o<<2)|0;if((c[i>>2]|0)>>>0>f>>>0){c[x+((O(j,w)|0)+l<<2)>>2]=f;c[i>>2]=f}j=j+1|0}while((j|0)!=(w|0))}}while((k|0)!=(w|0));m=m+1|0}while((m|0)!=(w|0));q=82}else f=0;else{if((w|0)<0)$a();if((w|0)>0){c[6472]=(c[6472]|0)+1;f=ic((w*20|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=0;do{t=h+(f*20|0)|0;a[t+16>>0]=1;c[t+12>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+4>>2]=0;f=f+1|0}while((f|0)!=(w|0));t=h}else t=0;if((c[b+732>>2]|0)>0){n=0;do{m=c[b+740>>2]|0;p=c[b+720>>2]|0;o=((c[m+(n*52|0)+8>>2]|0)-p|0)/104|0;p=((c[m+(n*52|0)+12>>2]|0)-p|0)/104|0;m=t+(o*20|0)+4|0;f=c[m>>2]|0;a:do if((f|0)>0){i=c[t+(o*20|0)+12>>2]|0;h=0;while(1){if((c[i+(h<<2)>>2]|0)==(p|0))break;h=h+1|0;if((h|0)>=(f|0)){q=37;break a}}if((h|0)==(f|0))q=37}else q=37;while(0);if((q|0)==37){q=0;l=t+(o*20|0)+8|0;if((f|0)==(c[l>>2]|0)?(s=f|0?f<<1:1,(f|0)<(s|0)):0){if(!s)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((s<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[m>>2]|0}k=t+(o*20|0)+12|0;j=c[k>>2]|0;if((f|0)<=0)if(!j)i=t+(o*20|0)+16|0;else q=47;else{i=0;do{c[h+(i<<2)>>2]=c[j+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0));q=47}if((q|0)==47){q=0;i=t+(o*20|0)+16|0;if(a[i>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0)}c[k>>2]=0;f=c[m>>2]|0}a[i>>0]=1;c[k>>2]=h;c[l>>2]=s}c[(c[t+(o*20|0)+12>>2]|0)+(f<<2)>>2]=p;c[m>>2]=(c[m>>2]|0)+1}m=t+(p*20|0)+4|0;f=c[m>>2]|0;b:do if((f|0)>0){i=c[t+(p*20|0)+12>>2]|0;h=0;while(1){if((c[i+(h<<2)>>2]|0)==(o|0))break;h=h+1|0;if((h|0)>=(f|0)){q=57;break b}}if((h|0)==(f|0))q=57}else q=57;while(0);if((q|0)==57){q=0;l=t+(p*20|0)+8|0;if((f|0)==(c[l>>2]|0)?(r=f|0?f<<1:1,(f|0)<(r|0)):0){if(!r)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((r<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[m>>2]|0}k=t+(p*20|0)+12|0;j=c[k>>2]|0;if((f|0)<=0)if(!j)i=t+(p*20|0)+16|0;else q=67;else{i=0;do{c[h+(i<<2)>>2]=c[j+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0));q=67}if((q|0)==67){q=0;i=t+(p*20|0)+16|0;if(a[i>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0)}c[k>>2]=0;f=c[m>>2]|0}a[i>>0]=1;c[k>>2]=h;c[l>>2]=r}c[(c[t+(p*20|0)+12>>2]|0)+(f<<2)>>2]=o;c[m>>2]=(c[m>>2]|0)+1}n=n+1|0}while((n|0)<(c[b+732>>2]|0))}if((w|0)<=0){if(!t){f=0;break}}else{p=0;do{q=t+(p*20|0)+4|0;f=c[q>>2]|0;if((f|0)>0){r=O(p,w)|0;o=c[t+(p*20|0)+12>>2]|0;n=0;do{l=c[o+(n<<2)>>2]|0;m=t+(l*20|0)+4|0;h=c[m>>2]|0;if((h|0)>0){k=x+((O(l,w)|0)+p<<2)|0;j=c[t+(l*20|0)+12>>2]|0;i=0;do{f=c[j+(i<<2)>>2]|0;if((p|0)!=(f|0)?(v=O(f,w)|0,u=(c[x+(v+l<<2)>>2]|0)+(c[k>>2]|0)|0,v=x+(v+p<<2)|0,(c[v>>2]|0)>>>0>u>>>0):0){c[x+(f+r<<2)>>2]=u;c[v>>2]=u;h=c[m>>2]|0}i=i+1|0}while((i|0)<(h|0));f=c[q>>2]|0}n=n+1|0}while((n|0)<(f|0))}p=p+1|0}while((p|0)!=(w|0));i=0;do{k=t+(i*20|0)+4|0;j=t+(i*20|0)+12|0;h=c[j>>2]|0;f=t+(i*20|0)+16|0;if(h|0){if(a[f>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[j>>2]=0}a[f>>0]=1;c[j>>2]=0;c[k>>2]=0;c[t+(i*20|0)+8>>2]=0;i=i+1|0}while((i|0)!=(w|0))}c[6473]=(c[6473]|0)+1;nd(c[t+-4>>2]|0);q=82}while(0);if((q|0)==82)if((w|0)>0){k=0;f=0;do{i=k;k=k+1|0;if((k|0)<(w|0)){j=O(i,w)|0;h=k;do{if((c[x+(h+j<<2)>>2]|0)==(d|0)){t=c[b+720>>2]|0;Rh(b,e);v=(c[b+732>>2]|0)+-1|0;u=c[b+740>>2]|0;c[u+(v*52|0)+8>>2]=t+(h*104|0);c[u+(v*52|0)+12>>2]=t+(i*104|0);A=+g[t+(h*104|0)+8>>2]-+g[t+(i*104|0)+8>>2];z=+g[t+(h*104|0)+12>>2]-+g[t+(i*104|0)+12>>2];y=+g[t+(h*104|0)+16>>2]-+g[t+(i*104|0)+16>>2];g[u+(v*52|0)+16>>2]=+C(+(A*A+z*z+y*y));a[b+924>>0]=1;v=(c[b+740>>2]|0)+(v*52|0)+20|0;a[v>>0]=a[v>>0]|1;f=f+1|0}h=h+1|0}while((h|0)!=(w|0))}}while((k|0)!=(w|0))}else f=0;YH(x);x=f;return x|0}function Tc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0;if((a[b+180>>0]|0)==0?(a[b+48>>0]|0)!=0:0){s=+g[b+116>>2];v=+g[e>>2];y=+g[b+132>>2];x=+g[e+4>>2];A=+g[b+148>>2];z=+g[e+8>>2];q=+g[b+120>>2];D=+g[b+136>>2];E=+g[b+152>>2];o=+g[b+124>>2];I=+g[b+140>>2];p=+g[b+156>>2];w=+g[e+16>>2];m=+g[e+20>>2];n=+g[e+24>>2];H=+g[e+32>>2];r=+g[e+36>>2];B=+g[e+40>>2];h=+g[b+164>>2];f=+g[b+168>>2];G=+g[b+172>>2];F=+g[e+48>>2]+(v*h+x*f+z*G);C=w*h+m*f+n*G+ +g[e+52>>2];G=H*h+r*f+B*G+ +g[e+56>>2];g[b+824>>2]=s*v+y*x+A*z;g[b+828>>2]=v*q+x*D+z*E;g[b+832>>2]=v*o+x*I+z*p;g[b+836>>2]=0.0;g[b+840>>2]=s*w+y*m+A*n;g[b+844>>2]=q*w+D*m+E*n;g[b+848>>2]=o*w+I*m+p*n;g[b+852>>2]=0.0;g[b+856>>2]=s*H+y*r+A*B;g[b+860>>2]=q*H+D*r+E*B;g[b+864>>2]=o*H+I*r+p*B;g[b+868>>2]=0.0;g[b+872>>2]=F;g[b+876>>2]=C;g[b+880>>2]=G;g[b+884>>2]=0.0;G=+g[b+52>>2];C=+g[d>>2];F=+g[b+68>>2];B=+g[d+4>>2];p=+g[b+84>>2];r=+g[d+8>>2];I=+g[b+56>>2];H=+g[b+72>>2];o=+g[b+88>>2];E=+g[b+60>>2];D=+g[b+76>>2];q=+g[b+92>>2];A=+g[d+16>>2];y=+g[d+20>>2];s=+g[d+24>>2];n=+g[d+32>>2];m=+g[d+36>>2];w=+g[d+40>>2];z=+g[b+100>>2];x=+g[b+104>>2];v=+g[b+108>>2];f=n*z+m*x;h=E*n+D*m+q*w;i=C*I+B*H+r*o;k=G*C+F*B+p*r;l=I*n+H*m+o*w;m=G*n+F*m+p*w;n=E*A+D*y+q*s;o=I*A+H*y+o*s;p=G*A+F*y+p*s;q=C*E+B*D+r*q;r=C*z+B*x+r*v;s=A*z+y*x+s*v;t=b+856|0;u=b+840|0;v=w*v}else{s=+g[b+52>>2];v=+g[d>>2];G=+g[b+68>>2];H=+g[d+4>>2];E=+g[b+84>>2];F=+g[d+8>>2];q=+g[b+56>>2];B=+g[b+72>>2];A=+g[b+88>>2];o=+g[b+60>>2];w=+g[b+76>>2];p=+g[b+92>>2];I=+g[d+16>>2];m=+g[d+20>>2];n=+g[d+24>>2];x=+g[d+32>>2];r=+g[d+36>>2];D=+g[d+40>>2];h=+g[b+100>>2];f=+g[b+104>>2];y=+g[b+108>>2];z=+g[d+48>>2]+(v*h+H*f+F*y);C=I*h+m*f+n*y+ +g[d+52>>2];y=x*h+r*f+D*y+ +g[d+56>>2];g[b+824>>2]=s*v+G*H+E*F;g[b+828>>2]=v*q+H*B+F*A;g[b+832>>2]=v*o+H*w+F*p;g[b+836>>2]=0.0;g[b+840>>2]=s*I+G*m+E*n;g[b+844>>2]=q*I+B*m+A*n;g[b+848>>2]=o*I+w*m+p*n;g[b+852>>2]=0.0;g[b+856>>2]=s*x+G*r+E*D;g[b+860>>2]=q*x+B*r+A*D;g[b+864>>2]=o*x+w*r+p*D;g[b+868>>2]=0.0;g[b+872>>2]=z;g[b+876>>2]=C;g[b+880>>2]=y;g[b+884>>2]=0.0;y=+g[b+116>>2];C=+g[e>>2];z=+g[b+132>>2];D=+g[e+4>>2];p=+g[b+148>>2];r=+g[e+8>>2];w=+g[b+120>>2];x=+g[b+136>>2];o=+g[b+152>>2];A=+g[b+124>>2];B=+g[b+140>>2];q=+g[b+156>>2];E=+g[e+16>>2];G=+g[e+20>>2];s=+g[e+24>>2];n=+g[e+32>>2];m=+g[e+36>>2];I=+g[e+40>>2];F=+g[b+164>>2];H=+g[b+168>>2];v=+g[b+172>>2];f=n*F+m*H;h=A*n+B*m+q*I;i=C*w+D*x+r*o;k=y*C+z*D+p*r;l=w*n+x*m+o*I;m=y*n+z*m+p*I;n=A*E+B*G+q*s;o=w*E+x*G+o*s;p=y*E+z*G+p*s;q=C*A+D*B+r*q;r=C*F+D*H+r*v;s=E*F+G*H+s*v;t=b+856|0;u=b+840|0;v=I*v;d=e}H=+g[d+48>>2]+r;I=s+ +g[d+52>>2];f=f+v+ +g[d+56>>2];g[b+888>>2]=k;g[b+892>>2]=i;g[b+896>>2]=q;g[b+900>>2]=0.0;g[b+904>>2]=p;g[b+908>>2]=o;g[b+912>>2]=n;g[b+916>>2]=0.0;g[b+920>>2]=m;g[b+924>>2]=l;g[b+928>>2]=h;g[b+932>>2]=0.0;g[b+936>>2]=H;g[b+940>>2]=I;g[b+944>>2]=f;g[b+948>>2]=0.0;c[b+968>>2]=c[b+872>>2];c[b+968+4>>2]=c[b+872+4>>2];c[b+968+8>>2]=c[b+872+8>>2];c[b+968+12>>2]=c[b+872+12>>2];c[b+984>>2]=c[b+936>>2];c[b+984+4>>2]=c[b+936+4>>2];c[b+984+8>>2]=c[b+936+8>>2];c[b+984+12>>2]=c[b+936+12>>2];d=c[b+824>>2]|0;e=c[u>>2]|0;u=c[t>>2]|0;c[b+952>>2]=d;c[b+956>>2]=e;c[b+960>>2]=u;g[b+964>>2]=0.0;i=(c[j>>2]=d,+g[j>>2]);f=(c[j>>2]=e,+g[j>>2]);h=(c[j>>2]=u,+g[j>>2]);if((a[b+180>>0]|0)==0?(a[b+48>>0]|0)==0:0){F=+g[b+968>>2];H=+g[b+972>>2];I=+g[b+976>>2];z=F;A=H;B=I;F=F-+g[b+984>>2];I=I-+g[b+992>>2];H=H-+g[b+988>>2];u=b+1016|0;g[u>>2]=F;u=b+1020|0;g[u>>2]=H;u=b+1024|0;g[u>>2]=I;u=b+1028|0;g[u>>2]=0.0;G=i*F;C=f*H;C=G+C;G=h*I;G=C+G;C=i*G;D=f*G;E=h*G;C=z+C;D=A+D;E=B+E;u=b+1e3|0;g[u>>2]=C;u=b+1004|0;g[u>>2]=D;u=b+1008|0;g[u>>2]=E;u=b+1012|0;g[u>>2]=0.0;u=b+1032|0;g[u>>2]=G;u=b+828|0;t=b+844|0;e=b+860|0;G=+g[u>>2];E=+g[t>>2];D=+g[e>>2];G=G*F;E=E*H;E=G+E;D=D*I;D=E+D;e=b+1036|0;g[e>>2]=D;e=b+832|0;t=b+848|0;u=b+864|0;D=+g[e>>2];E=+g[t>>2];G=+g[u>>2];F=D*F;H=E*H;H=F+H;I=G*I;I=H+I;b=b+1040|0;g[b>>2]=I;return}F=+g[b+968>>2];H=+g[b+972>>2];I=+g[b+976>>2];z=F;A=H;B=I;F=+g[b+984>>2]-F;I=+g[b+992>>2]-I;H=+g[b+988>>2]-H;u=b+1016|0;g[u>>2]=F;u=b+1020|0;g[u>>2]=H;u=b+1024|0;g[u>>2]=I;u=b+1028|0;g[u>>2]=0.0;G=i*F;C=f*H;C=G+C;G=h*I;G=C+G;C=i*G;D=f*G;E=h*G;C=z+C;D=A+D;E=B+E;u=b+1e3|0;g[u>>2]=C;u=b+1004|0;g[u>>2]=D;u=b+1008|0;g[u>>2]=E;u=b+1012|0;g[u>>2]=0.0;u=b+1032|0;g[u>>2]=G;u=b+828|0;t=b+844|0;e=b+860|0;G=+g[u>>2];E=+g[t>>2];D=+g[e>>2];G=G*F;E=E*H;E=G+E;D=D*I;D=E+D;e=b+1036|0;g[e>>2]=D;e=b+832|0;t=b+848|0;u=b+864|0;D=+g[e>>2];E=+g[t>>2];G=+g[u>>2];F=D*F;H=E*H;H=F+H;I=G*I;I=H+I;b=b+1040|0;g[b>>2]=I;return}function Uc(b,d,e){b=b|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0,m=0.0,n=0.0,o=0,p=0.0,q=0,r=0,s=0;s=l;l=l+112|0;q=c[b+716>>2]|0;if((q|0)==(c[b+712>>2]|0)){a:do if(q){j=c[b+720>>2]|0;if((q|0)>0){h=j;i=0;while(1){f=c[h+(i*104|0)+96>>2]|0;if(f|0)c[f+36>>2]=i;f=i+1|0;if((f|0)==(q|0))break a;h=c[b+720>>2]|0;i=f}}}else j=0;while(0);f=c[b+732>>2]|0;if((f|0)>0){h=0;do{o=(c[b+740>>2]|0)+(h*52|0)+8|0;c[o>>2]=((c[o>>2]|0)-j|0)/104|0;o=(c[b+740>>2]|0)+(h*52|0)+12|0;c[o>>2]=((c[o>>2]|0)-j|0)/104|0;h=h+1|0}while((h|0)!=(f|0))}f=c[b+752>>2]|0;if((f|0)>0){i=0;do{h=(c[b+760>>2]|0)+(i*44|0)+8|0;c[h>>2]=((c[h>>2]|0)-j|0)/104|0;h=(c[b+760>>2]|0)+(i*44|0)+12|0;c[h>>2]=((c[h>>2]|0)-j|0)/104|0;h=(c[b+760>>2]|0)+(i*44|0)+16|0;c[h>>2]=((c[h>>2]|0)-j|0)/104|0;h=c[(c[b+760>>2]|0)+(i*44|0)+40>>2]|0;if(h|0)c[h+36>>2]=i;i=i+1|0}while((i|0)!=(f|0))}f=c[b+792>>2]|0;if((f|0)>0){h=c[b+800>>2]|0;i=0;do{o=h+(i*96|0)|0;c[o>>2]=((c[o>>2]|0)-j|0)/104|0;i=i+1|0}while((i|0)!=(f|0))}i=c[b+692>>2]|0;if((i|0)>0){f=c[b+700>>2]|0;k=0;do{if((c[f+(k*60|0)+24>>2]|0)>0){h=0;do{f=f+(k*60|0)+28+(h<<2)|0;c[f>>2]=((c[f>>2]|0)-j|0)/104|0;h=h+1|0;f=c[b+700>>2]|0}while((h|0)<(c[f+(k*60|0)+24>>2]|0))}k=k+1|0}while((k|0)!=(i|0))}if((q|0)<(q<<1|1|0)){c[6472]=(c[6472]|0)+1;f=ic(((q<<1|1)*104|3)+16|0)|0;if(!f)i=0;else{c[(f+4+15&-16)+-4>>2]=f;i=f+4+15&-16}f=c[b+712>>2]|0;if((f|0)>0){h=0;do{k=i+(h*104|0)|0;j=(c[b+720>>2]|0)+(h*104|0)|0;o=k+104|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(o|0));h=h+1|0}while((h|0)!=(f|0))}f=c[b+720>>2]|0;if(f|0){if(a[b+724>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+720>>2]=0}a[b+724>>0]=1;c[b+720>>2]=i;c[b+716>>2]=q<<1|1;i=c[b+712>>2]|0}else i=q;b:do if(i){j=c[b+720>>2]|0;if((i|0)>0){k=j;f=0;while(1){h=c[k+(f*104|0)+96>>2]|0;if(h|0)c[h+36>>2]=k+(f*104|0);f=f+1|0;if((f|0)==(i|0)){k=j;break b}k=c[b+720>>2]|0}}else k=j}else k=0;while(0);f=c[b+732>>2]|0;if((f|0)>0){h=0;do{q=(c[b+740>>2]|0)+(h*52|0)+8|0;c[q>>2]=k+((c[q>>2]|0)*104|0);q=(c[b+740>>2]|0)+(h*52|0)+12|0;c[q>>2]=k+((c[q>>2]|0)*104|0);h=h+1|0}while((h|0)!=(f|0))}f=c[b+752>>2]|0;if((f|0)>0){j=0;do{h=(c[b+760>>2]|0)+(j*44|0)+8|0;c[h>>2]=k+((c[h>>2]|0)*104|0);h=(c[b+760>>2]|0)+(j*44|0)+12|0;c[h>>2]=k+((c[h>>2]|0)*104|0);h=(c[b+760>>2]|0)+(j*44|0)+16|0;c[h>>2]=k+((c[h>>2]|0)*104|0);h=c[b+760>>2]|0;i=c[h+(j*44|0)+40>>2]|0;if(i|0)c[i+36>>2]=h+(j*44|0);j=j+1|0}while((j|0)!=(f|0))}f=c[b+792>>2]|0;if((f|0)>0){h=c[b+800>>2]|0;i=0;do{c[h+(i*96|0)>>2]=k+((c[h+(i*96|0)>>2]|0)*104|0);i=i+1|0}while((i|0)!=(f|0))}i=c[b+692>>2]|0;if((i|0)>0){f=c[b+700>>2]|0;j=0;do{if((c[f+(j*60|0)+24>>2]|0)>0){h=0;do{f=f+(j*60|0)+28+(h<<2)|0;c[f>>2]=k+((c[f>>2]|0)*104|0);h=h+1|0;f=c[b+700>>2]|0}while((h|0)<(c[f+(j*60|0)+24>>2]|0))}j=j+1|0}while((j|0)!=(i|0))}}k=c[b+192>>2]|0;p=+gb[c[(c[k>>2]|0)+48>>2]&15](k);k=s;o=k+100|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(o|0));f=c[b+712>>2]|0;if((f|0)==(c[b+716>>2]|0)?(r=f|0?f<<1:1,(f|0)<(r|0)):0){if(!r)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((r*104|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[b+712>>2]|0}if((f|0)>0){i=0;do{k=h+(i*104|0)|0;j=(c[b+720>>2]|0)+(i*104|0)|0;o=k+104|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(o|0));i=i+1|0}while((i|0)!=(f|0))}f=c[b+720>>2]|0;if(f|0){if(a[b+724>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+720>>2]=0}a[b+724>>0]=1;c[b+720>>2]=h;c[b+716>>2]=r;f=c[b+712>>2]|0}k=c[b+720>>2]|0;c[k+(f*104|0)>>2]=0;k=k+(f*104|0)+4|0;j=s;o=k+100|0;do{c[k>>2]=c[j>>2];k=k+4|0;j=j+4|0}while((k|0)<(o|0));h=c[b+712>>2]|0;c[b+712>>2]=h+1;i=c[b+720>>2]|0;k=i+(h*104|0)|0;o=k+104|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(o|0));c[i+(h*104|0)+8>>2]=c[d>>2];c[i+(h*104|0)+8+4>>2]=c[d+4>>2];c[i+(h*104|0)+8+8>>2]=c[d+8>>2];c[i+(h*104|0)+8+12>>2]=c[d+12>>2];yp(i+(h*104|0)+24|0,d|0,16)|0;g[i+(h*104|0)+88>>2]=e>0.0?1.0/e:0.0;c[i+(h*104|0)+4>>2]=c[c[b+880>>2]>>2];e=+g[i+(h*104|0)+8>>2];m=+g[i+(h*104|0)+12>>2];n=+g[i+(h*104|0)+16>>2];f=c[b+932>>2]|0;if(f|0){c[b+932>>2]=0;d=f;r=d+32|0;c[r>>2]=0;r=d+36|0;c[r>>2]=i+(h*104|0);r=d+40|0;c[r>>2]=0;g[d>>2]=e-p;r=d+4|0;g[r>>2]=m-p;r=d+8|0;g[r>>2]=n-p;r=d+12|0;g[r>>2]=0.0;r=d+16|0;g[r>>2]=p+e;r=d+20|0;g[r>>2]=p+m;r=d+24|0;g[r>>2]=p+n;r=d+28|0;g[r>>2]=0.0;r=c[b+928>>2]|0;af(b+928|0,r,d);b=b+940|0;r=c[b>>2]|0;r=r+1|0;c[b>>2]=r;b=i+(h*104|0)+96|0;c[b>>2]=d;l=s;return}c[6472]=(c[6472]|0)+1;f=ic(63)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}k=f;o=k+44|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(o|0));d=f;r=d+32|0;c[r>>2]=0;r=d+36|0;c[r>>2]=i+(h*104|0);r=d+40|0;c[r>>2]=0;g[d>>2]=e-p;r=d+4|0;g[r>>2]=m-p;r=d+8|0;g[r>>2]=n-p;r=d+12|0;g[r>>2]=0.0;r=d+16|0;g[r>>2]=p+e;r=d+20|0;g[r>>2]=p+m;r=d+24|0;g[r>>2]=p+n;r=d+28|0;g[r>>2]=0.0;r=c[b+928>>2]|0;af(b+928|0,r,d);b=b+940|0;r=c[b>>2]|0;r=r+1|0;c[b>>2]=r;b=i+(h*104|0)+96|0;c[b>>2]=d;l=s;return}function Vc(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0;I=l;l=l+32|0;c[I+16>>2]=i;c[I+16+4>>2]=j;c[I+16+8>>2]=k;c[I>>2]=e;c[I+4>>2]=f;c[I+8>>2]=h;if(!(+g[d+52>>2]<+g[b+12>>2])){m=0;l=I;return m|0}x=+g[d+36>>2];z=+g[d+40>>2];y=+g[d+44>>2];h=c[d+48>>2]|0;w=1.0/+C(+(x*x+z*z+y*y));k=ji(I)|0;A=+g[d+4>>2]-+g[k+48>>2];F=+g[d+8>>2]-+g[k+52>>2];D=+g[d+12>>2]-+g[k+56>>2];k=ji(I+16|0)|0;B=+g[d+20>>2]-+g[k+48>>2];G=+g[d+24>>2]-+g[k+52>>2];E=+g[d+28>>2]-+g[k+56>>2];if(!f)if(!e){p=0.0;s=0.0;q=0.0;n=0.0;o=0.0;r=0.0}else{r=+g[e+336>>2];o=+g[e+340>>2];v=+g[e+332>>2];p=+g[e+316>>2];s=+g[e+320>>2];q=+g[e+324>>2];n=D*r-F*o;o=A*o-D*v;r=F*v-A*r}else{r=+g[f+332>>2];o=+g[f+336>>2];v=+g[f+328>>2];p=+g[f+312>>2];s=+g[f+316>>2];q=+g[f+320>>2];n=D*r-F*o;o=A*o-D*v;r=F*v-A*r}v=p+n;u=s+o;r=q+r;if(!j)if(!i){s=0.0;t=0.0;n=0.0;o=0.0;p=0.0;q=0.0}else{q=+g[i+336>>2];p=+g[i+340>>2];J=+g[i+332>>2];s=+g[i+316>>2];t=+g[i+320>>2];n=+g[i+324>>2];o=E*q-G*p;p=B*p-E*J;q=G*J-B*q}else{q=+g[j+332>>2];p=+g[j+336>>2];J=+g[j+328>>2];s=+g[j+312>>2];t=+g[j+316>>2];n=+g[j+320>>2];o=E*q-G*p;p=B*p-E*J;q=G*J-B*q}s=v-(s+o);u=u-(t+p);t=r-(n+q);v=y*w*t+(z*w*u+x*w*s);J=+g[d+52>>2]-+g[b+12>>2];c[m+4>>2]=c[I>>2];c[m+4+4>>2]=c[I+4>>2];c[m+4+8>>2]=c[I+8>>2];c[m+16>>2]=c[I+16>>2];c[m+16+4>>2]=c[I+16+4>>2];c[m+16+8>>2]=c[I+16+8>>2];d=ji(I)|0;r=A*+g[d+4>>2]+F*+g[d+20>>2]+D*+g[d+36>>2];q=A*+g[d+8>>2]+F*+g[d+24>>2]+D*+g[d+40>>2];g[m+28>>2]=A*+g[d>>2]+F*+g[d+16>>2]+D*+g[d+32>>2];g[m+32>>2]=r;g[m+36>>2]=q;g[m+40>>2]=0.0;d=ji(I+16|0)|0;q=B*+g[d+4>>2]+G*+g[d+20>>2]+E*+g[d+36>>2];r=B*+g[d+8>>2]+G*+g[d+24>>2]+E*+g[d+40>>2];g[m+44>>2]=B*+g[d>>2]+G*+g[d+16>>2]+E*+g[d+32>>2];g[m+48>>2]=q;g[m+52>>2]=r;g[m+56>>2]=0.0;g[m+164>>2]=A;g[m+168>>2]=F;g[m+172>>2]=D;g[m+176>>2]=0.0;g[m+180>>2]=B;g[m+184>>2]=G;g[m+188>>2]=E;g[m+192>>2]=0.0;g[m+60>>2]=1.0;g[m+64>>2]=1.0;c[m+156>>2]=0;c[m+160>>2]=0;g[m+68>>2]=1.0;g[m+72>>2]=x*w*J;g[m+76>>2]=z*w*J;g[m+80>>2]=y*w*J;g[m+84>>2]=0.0;g[m+196>>2]=x*w;g[m+200>>2]=z*w;g[m+204>>2]=y*w;c[m+208>>2]=h;a[m+152>>0]=0;J=+g[b+16>>2];g[m+212>>2]=(t-y*w*v)*(t-y*w*v)+((s-x*w*v)*(s-x*w*v)+(u-z*w*v)*(u-z*w*v))>2]|0;if(!h){h=c[I>>2]|0;if(!h)o=0.0;else{h=h+128|0;H=14}}else{h=h+344|0;H=14}if((H|0)==14)o=+g[h>>2];if((a[22704]|0)==0?Yy(22704)|0:0){h=23168;k=h+48|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0))}h=c[I+4>>2]|0;if(!h){e=c[I>>2]|0;e=(e|0)==0?23168:e+180|0}else e=h+264|0;h=c[I+16+4>>2]|0;if(!h){h=c[I+16>>2]|0;if(!h)n=0.0;else{h=h+128|0;H=25}}else{h=h+344|0;H=25}if((H|0)==25)n=+g[h>>2];if((a[22704]|0)==0?Yy(22704)|0:0){h=23168;k=h+48|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(k|0))}h=c[I+16+4>>2]|0;if(!h){h=c[I+16>>2]|0;h=(h|0)==0?23168:h+180|0}else h=h+264|0;W=+g[m+172>>2];O=+g[m+168>>2];N=+g[m+164>>2];V=+g[e>>2];U=+g[e+16>>2];T=+g[e+32>>2];S=+g[e+4>>2];R=+g[e+20>>2];Q=+g[e+36>>2];P=+g[e+8>>2];M=+g[e+24>>2];L=+g[e+40>>2];B=+g[m+188>>2];v=+g[m+184>>2];w=+g[m+180>>2];K=+g[h>>2];p=+g[h+16>>2];q=+g[h+32>>2];r=+g[h+4>>2];s=+g[h+20>>2];t=+g[h+36>>2];u=+g[h+8>>2];J=+g[h+24>>2];x=+g[h+40>>2];E=o-((V*0.0+U*-W+O*T)*0.0+W*(S*0.0+R*-W+O*Q)+(P*0.0+M*-W+O*L)*-O)+(n-((K*0.0+p*-B+v*q)*0.0+B*(r*0.0+s*-B+v*t)+(u*0.0+J*-B+v*x)*-v));G=0.0-((V*0.0+U*-W+O*T)*-W+(S*0.0+R*-W+O*Q)*0.0+N*(P*0.0+M*-W+O*L))+(0.0-((K*0.0+p*-B+v*q)*-B+(r*0.0+s*-B+v*t)*0.0+w*(u*0.0+J*-B+v*x)));y=0.0-(O*(V*0.0+U*-W+O*T)+(S*0.0+R*-W+O*Q)*-N+(P*0.0+M*-W+O*L)*0.0)+(0.0-(v*(K*0.0+p*-B+v*q)+(r*0.0+s*-B+v*t)*-w+(u*0.0+J*-B+v*x)*0.0));F=0.0-((W*V+U*0.0+T*-N)*0.0+W*(W*S+R*0.0+Q*-N)+(W*P+M*0.0+L*-N)*-O)+(0.0-((B*K+p*0.0+q*-w)*0.0+B*(B*r+s*0.0+t*-w)+(B*u+J*0.0+x*-w)*-v));D=o-((W*V+U*0.0+T*-N)*-W+(W*S+R*0.0+Q*-N)*0.0+N*(W*P+M*0.0+L*-N))+(n-((B*K+p*0.0+q*-w)*-B+(B*r+s*0.0+t*-w)*0.0+w*(B*u+J*0.0+x*-w)));z=0.0-(O*(W*V+U*0.0+T*-N)+(W*S+R*0.0+Q*-N)*-N+(W*P+M*0.0+L*-N)*0.0)+(0.0-(v*(B*K+p*0.0+q*-w)+(B*r+s*0.0+t*-w)*-w+(B*u+J*0.0+x*-w)*0.0));A=0.0-((V*-O+N*U+T*0.0)*0.0+W*(S*-O+N*R+Q*0.0)+(P*-O+N*M+L*0.0)*-O)+(0.0-((K*-v+w*p+q*0.0)*0.0+B*(r*-v+w*s+t*0.0)+(u*-v+w*J+x*0.0)*-v));B=0.0-((V*-O+N*U+T*0.0)*-W+(S*-O+N*R+Q*0.0)*0.0+N*(P*-O+N*M+L*0.0))+(0.0-((K*-v+w*p+q*0.0)*-B+(r*-v+w*s+t*0.0)*0.0+w*(u*-v+w*J+x*0.0)));x=o-(O*(V*-O+N*U+T*0.0)+(S*-O+N*R+Q*0.0)*-N+(P*-O+N*M+L*0.0)*0.0)+(n-(v*(K*-v+w*p+q*0.0)+(r*-v+w*s+t*0.0)*-w+(u*-v+w*J+x*0.0)*0.0));J=1.0/(y*(B*F-D*A)+(E*(D*x-z*B)+G*(z*A-x*F)));g[m+104>>2]=(D*x-z*B)*J;g[m+108>>2]=(B*y-x*G)*J;g[m+112>>2]=(z*G-D*y)*J;g[m+116>>2]=0.0;g[m+120>>2]=(z*A-x*F)*J;g[m+124>>2]=(x*E-A*y)*J;g[m+128>>2]=(F*y-z*E)*J;g[m+132>>2]=0.0;g[m+136>>2]=(B*F-D*A)*J;g[m+140>>2]=(A*G-B*E)*J;g[m+144>>2]=(D*E-F*G)*J;g[m+148>>2]=0.0;m=1;l=I;return m|0}function Wc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0;s=l;l=l+224|0;r=(a[b+28>>0]|0)!=0;q=r?e:d;r=r?d:e;p=c[q+4>>2]|0;if((c[p+68>>2]|0)!=(c[b+40>>2]|0)){i=c[b+12>>2]|0;if((i|0)>0){k=0;do{j=c[(c[b+20>>2]|0)+(k<<2)>>2]|0;if(j|0){Ab[c[c[j>>2]>>2]&511](j);n=c[b+4>>2]|0;Gb[c[(c[n>>2]|0)+60>>2]&127](n,c[(c[b+20>>2]|0)+(k<<2)>>2]|0)}k=k+1|0}while((k|0)!=(i|0))}Vg(b,d,e)}n=c[p+64>>2]|0;i=c[b+4>>2]|0;j=c[b+20>>2]|0;m=c[b+32>>2]|0;c[s+192>>2]=6384;c[s+192+4>>2]=q;c[s+192+8>>2]=r;c[s+192+12>>2]=i;c[s+192+16>>2]=f;c[s+192+20>>2]=h;c[s+192+24>>2]=j;c[s+192+28>>2]=m;a[s+128+16>>0]=1;m=s+128+12|0;c[m>>2]=0;c[s+128+4>>2]=0;c[s+128+8>>2]=0;i=c[b+12>>2]|0;if((i|0)>0){d=0;while(1){j=c[j+(d<<2)>>2]|0;if(j){Gb[c[(c[j>>2]|0)+16>>2]&127](j,s+128|0);i=c[s+128+4>>2]|0;if((i|0)>0){f=0;do{k=c[(c[m>>2]|0)+(f<<2)>>2]|0;if(c[k+748>>2]|0){c[h+4>>2]=k;i=c[k+740>>2]|0;j=c[(c[h+8>>2]|0)+8>>2]|0;e=c[(c[h+12>>2]|0)+8>>2]|0;if((i|0)==(j|0))Oe(k,i+4|0,e+4|0);else Oe(k,e+4|0,j+4|0);c[h+4>>2]=0;i=c[s+128+4>>2]|0}f=f+1|0}while((f|0)<(i|0))}if((i|0)<0){if((c[s+128+8>>2]|0)<0){j=c[m>>2]|0;if(j|0){if(a[s+128+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0)}c[m>>2]=0}a[s+128+16>>0]=1;c[m>>2]=0;c[s+128+8>>2]=0}do{c[(c[m>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)!=0)}c[s+128+4>>2]=0;i=c[b+12>>2]|0}d=d+1|0;if((d|0)>=(i|0))break;j=c[b+20>>2]|0}i=c[m>>2]|0;if(i|0){if(a[s+128+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[m>>2]=0}}if(!n){j=c[b+12>>2]|0;if((j|0)>0){i=0;do{Fe(s+192|0,c[(c[p+24>>2]|0)+(i*80|0)+64>>2]|0,i);i=i+1|0}while((i|0)<(j|0));o=38}}else{o=c[q+12>>2]|0;H=+g[o>>2];G=+g[o+16>>2];F=+g[o+32>>2];E=+g[o+4>>2];D=+g[o+20>>2];C=+g[o+36>>2];y=+g[o+8>>2];w=+g[o+24>>2];u=+g[o+40>>2];B=-+g[o+48>>2];A=-+g[o+52>>2];z=-+g[o+56>>2];o=c[r+12>>2]|0;Q=+g[o>>2];P=+g[o+16>>2];O=+g[o+32>>2];N=+g[o+4>>2];M=+g[o+20>>2];L=+g[o+36>>2];K=+g[o+8>>2];J=+g[o+24>>2];I=+g[o+40>>2];x=+g[o+48>>2];v=+g[o+52>>2];t=+g[o+56>>2];g[s+48>>2]=H*Q+G*P+F*O;g[s+48+4>>2]=H*N+G*M+F*L;g[s+48+8>>2]=H*K+G*J+F*I;g[s+48+12>>2]=0.0;g[s+48+16>>2]=E*Q+D*P+C*O;g[s+48+20>>2]=E*N+D*M+C*L;g[s+48+24>>2]=E*K+D*J+C*I;g[s+48+28>>2]=0.0;g[s+48+32>>2]=y*Q+w*P+u*O;g[s+48+36>>2]=y*N+w*M+u*L;g[s+48+40>>2]=y*K+w*J+u*I;g[s+48+44>>2]=0.0;g[s+48+48>>2]=H*B+G*A+F*z+(H*x+G*v+F*t);g[s+48+52>>2]=E*B+D*A+C*z+(E*x+D*v+C*t);g[s+48+56>>2]=y*B+w*A+u*z+(y*x+w*v+u*t);g[s+48+60>>2]=0.0;o=c[r+4>>2]|0;Nb[c[(c[o>>2]|0)+8>>2]&127](o,s+48|0,s+128|0,s+112|0);c[s+16>>2]=c[s+128>>2];c[s+16+4>>2]=c[s+128+4>>2];c[s+16+8>>2]=c[s+128+8>>2];c[s+16+12>>2]=c[s+128+12>>2];c[s+16+16>>2]=c[s+112>>2];c[s+16+16+4>>2]=c[s+112+4>>2];c[s+16+16+8>>2]=c[s+112+8>>2];c[s+16+16+12>>2]=c[s+112+12>>2];Ue(c[n>>2]|0,s+16|0,s+192|0);o=38}if((o|0)==38)j=c[b+12>>2]|0;if((j|0)<=0){l=s;return}d=0;do{do if(c[(c[b+20>>2]|0)+(d<<2)>>2]|0){n=c[p+24>>2]|0;o=c[n+(d*80|0)+64>>2]|0;h=c[q+12>>2]|0;w=+g[h>>2];x=+g[h+4>>2];y=+g[h+8>>2];z=+g[h+16>>2];A=+g[h+20>>2];B=+g[h+24>>2];I=+g[h+32>>2];K=+g[h+36>>2];M=+g[h+40>>2];C=+g[n+(d*80|0)>>2];D=+g[n+(d*80|0)+16>>2];E=+g[n+(d*80|0)+32>>2];F=+g[n+(d*80|0)+4>>2];G=+g[n+(d*80|0)+20>>2];H=+g[n+(d*80|0)+36>>2];J=+g[n+(d*80|0)+8>>2];L=+g[n+(d*80|0)+24>>2];N=+g[n+(d*80|0)+40>>2];u=+g[n+(d*80|0)+48>>2];v=+g[n+(d*80|0)+52>>2];Q=+g[n+(d*80|0)+56>>2];O=+g[h+48>>2]+(w*u+x*v+y*Q);P=+g[h+52>>2]+(z*u+A*v+B*Q);Q=+g[h+56>>2]+(I*u+K*v+M*Q);g[s+128>>2]=w*C+x*D+y*E;g[s+128+4>>2]=w*F+x*G+y*H;g[s+128+8>>2]=w*J+x*L+y*N;g[s+128+12>>2]=0.0;g[s+128+16>>2]=z*C+A*D+B*E;g[s+128+20>>2]=z*F+A*G+B*H;g[s+128+24>>2]=z*J+A*L+B*N;g[s+128+28>>2]=0.0;g[s+128+32>>2]=I*C+K*D+M*E;g[s+128+36>>2]=I*F+K*G+M*H;g[s+128+40>>2]=I*J+K*L+M*N;g[s+128+44>>2]=0.0;g[s+128+48>>2]=O;g[s+128+52>>2]=P;g[s+128+56>>2]=Q;g[s+128+60>>2]=0.0;Nb[c[(c[o>>2]|0)+8>>2]&127](o,s+128|0,s+112|0,s+48|0);o=c[r+4>>2]|0;Nb[c[(c[o>>2]|0)+8>>2]&127](o,c[r+12>>2]|0,s+16|0,s);if(!(+g[s+112>>2]>+g[s>>2])?!(+g[s+48>>2]<+g[s+16>>2]):0)i=1;else i=0;if(!(!(+g[s+112+8>>2]>+g[s+8>>2])?!(+g[s+48+8>>2]<+g[s+16+8>>2]):0))i=0;if(!(+g[s+112+4>>2]>+g[s+4>>2])?!(+g[s+48+4>>2]<+g[s+16+4>>2]|i^1):0)break;o=c[(c[b+20>>2]|0)+(d<<2)>>2]|0;Ab[c[c[o>>2]>>2]&511](o);o=c[b+4>>2]|0;Gb[c[(c[o>>2]|0)+60>>2]&127](o,c[(c[b+20>>2]|0)+(d<<2)>>2]|0);c[(c[b+20>>2]|0)+(d<<2)>>2]=0}while(0);d=d+1|0}while((d|0)<(j|0));l=s;return}function Xc(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0;c[b>>2]=c[a>>2];c[b+4>>2]=c[a+4>>2];c[b+8>>2]=c[a+8>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];c[b+16+4>>2]=c[a+16+4>>2];c[b+16+8>>2]=c[a+16+8>>2];c[b+16+12>>2]=c[a+16+12>>2];c[b+32>>2]=c[a+32>>2];c[b+32+4>>2]=c[a+32+4>>2];c[b+32+8>>2]=c[a+32+8>>2];c[b+32+12>>2]=c[a+32+12>>2];r=+g[a+20>>2];m=+g[a+40>>2];p=+g[a+24>>2];n=+g[a+36>>2];o=+g[a+32>>2];s=+g[a+16>>2];t=+g[a>>2];u=+g[a+4>>2];q=+g[a+8>>2];v=1.0/((r*m-p*n)*t+u*(p*o-m*s)+(n*s-r*o)*q);g[d>>2]=(r*m-p*n)*v;g[d+4>>2]=(n*q-m*u)*v;g[d+8>>2]=(p*u-r*q)*v;g[d+12>>2]=0.0;g[d+16>>2]=(p*o-m*s)*v;g[d+20>>2]=(m*t-o*q)*v;g[d+24>>2]=(s*q-p*t)*v;g[d+28>>2]=0.0;g[d+32>>2]=(n*s-r*o)*v;g[d+36>>2]=(o*u-n*t)*v;g[d+40>>2]=(r*t-s*u)*v;g[d+44>>2]=0.0;a:do if(!(c[5825]|0)){e=b;f=b+40|0;h=b+24|0;i=b+8|0;j=b+36|0;k=b+20|0;l=b+4|0}else{F=(r*m-p*n)*v;G=(p*o-m*s)*v;H=(n*s-r*o)*v;I=(n*q-m*u)*v;E=(m*t-o*q)*v;A=(o*u-n*t)*v;C=(p*u-r*q)*v;z=(s*q-p*t)*v;n=(r*t-s*u)*v;e=0;while(1){p=+B(+F);o=+B(+G);N=+B(+H);W=+B(+I);O=+B(+E);M=+B(+A);Q=+B(+C);P=+B(+z);x=+B(+n);R=p+o+N>W+O+M?p+o+N:W+O+M;O=p+W+Q>o+O+P?p+W+Q:o+O+P;o=+g[b>>2];W=+B(+o);p=+g[b+16>>2];T=+B(+p);q=+g[b+32>>2];K=+B(+q);r=+g[b+4>>2];V=+B(+r);s=+g[b+20>>2];S=+B(+s);t=+g[b+36>>2];J=+B(+t);u=+g[b+8>>2];U=+B(+u);v=+g[b+24>>2];L=+B(+v);w=+g[b+40>>2];y=+B(+w);m=W+T+K>V+S+J?W+T+K:V+S+J;m=m>U+L+y?m:U+L+y;L=W+V+U>T+S+L?W+V+U:T+S+L;x=(R>Q+P+x?R:Q+P+x)*(O>N+M+x?O:N+M+x);y=m*(L>K+J+y?L:K+J+y);if(+B(+x)<1.1920928955078125e-07){e=b;f=b+40|0;h=b+24|0;i=b+8|0;j=b+36|0;k=b+20|0;l=b+4|0;break a}if(+B(+y)<1.1920928955078125e-07){e=b;f=b+40|0;h=b+24|0;i=b+8|0;j=b+36|0;k=b+20|0;l=b+4|0;break a}W=+D(+(x/y),.25);O=(o*(W+-2.0)+F*(1.0/W))*.5;Q=(r*(W+-2.0)+1.0/W*G)*.5;S=(u*(W+-2.0)+1.0/W*H)*.5;P=(p*(W+-2.0)+1.0/W*I)*.5;R=(s*(W+-2.0)+1.0/W*E)*.5;T=(v*(W+-2.0)+1.0/W*A)*.5;U=(q*(W+-2.0)+1.0/W*C)*.5;V=(t*(W+-2.0)+1.0/W*z)*.5;W=(w*(W+-2.0)+1.0/W*n)*.5;g[b>>2]=o+O;g[b+4>>2]=r+Q;g[b+8>>2]=u+S;g[b+12>>2]=0.0;g[b+16>>2]=p+P;g[b+20>>2]=s+R;g[b+24>>2]=v+T;g[b+28>>2]=0.0;g[b+32>>2]=q+U;g[b+36>>2]=t+V;g[b+40>>2]=w+W;g[b+44>>2]=0.0;N=1.0/(((w+W)*(s+R)-(v+T)*(t+V))*(o+O)+(r+Q)*((v+T)*(q+U)-(w+W)*(p+P))+((t+V)*(p+P)-(s+R)*(q+U))*(u+S));F=((w+W)*(s+R)-(v+T)*(t+V))*N;I=((t+V)*(u+S)-(w+W)*(r+Q))*N;C=((v+T)*(r+Q)-(s+R)*(u+S))*N;G=((v+T)*(q+U)-(w+W)*(p+P))*N;E=((w+W)*(o+O)-(q+U)*(u+S))*N;z=((p+P)*(u+S)-(v+T)*(o+O))*N;H=((t+V)*(p+P)-(s+R)*(q+U))*N;A=((q+U)*(r+Q)-(t+V)*(o+O))*N;n=((s+R)*(o+O)-(p+P)*(r+Q))*N;g[d>>2]=F;g[d+4>>2]=I;g[d+8>>2]=C;g[d+12>>2]=0.0;g[d+16>>2]=G;g[d+20>>2]=E;g[d+24>>2]=z;g[d+28>>2]=0.0;g[d+32>>2]=H;g[d+36>>2]=A;g[d+40>>2]=n;g[d+44>>2]=0.0;U=+B(+O)+ +B(+P)+ +B(+U);V=+B(+Q)+ +B(+R)+ +B(+V);W=+B(+S)+ +B(+T)+ +B(+W);V=U>V?U:V;if((V>W?V:W)<=m*+g[5824])break;e=e+1|0;if(e>>>0>=(c[5825]|0)>>>0){e=b;f=b+40|0;h=b+24|0;i=b+8|0;j=b+36|0;k=b+20|0;l=b+4|0;break a}}M=+g[b>>2];O=+g[b+16>>2];Q=+g[b+32>>2];H=+g[b+4>>2];J=+g[b+20>>2];L=+g[b+36>>2];A=+g[b+8>>2];E=+g[b+24>>2];G=+g[b+40>>2];N=+g[a>>2];P=+g[a+16>>2];R=+g[a+32>>2];I=+g[a+4>>2];K=+g[a+20>>2];T=+g[a+36>>2];C=+g[a+8>>2];F=+g[a+24>>2];W=+g[a+40>>2];S=H*N+J*P+L*R+(M*I+O*K+Q*T);U=A*N+E*P+G*R+(M*C+O*F+Q*W);V=A*I+E*K+G*T+(H*C+J*F+L*W);W=A*C+E*F+G*W+(A*C+E*F+G*W);T=H*I+J*K+L*T+(H*I+J*K+L*T);R=M*N+O*P+Q*R+(M*N+O*P+Q*R);S=S*.5;U=U*.5;V=V*.5;R=R*.5;g[d>>2]=R;g[d+4>>2]=S;g[d+8>>2]=U;g[d+12>>2]=0.0;g[d+16>>2]=S;T=T*.5;g[d+20>>2]=T;g[d+24>>2]=V;g[d+28>>2]=0.0;g[d+32>>2]=U;g[d+36>>2]=V;W=W*.5;g[d+40>>2]=W;g[d+44>>2]=0.0;return}while(0);M=+g[e>>2];O=+g[b+16>>2];Q=+g[b+32>>2];H=+g[l>>2];J=+g[k>>2];L=+g[j>>2];A=+g[i>>2];E=+g[h>>2];G=+g[f>>2];N=+g[a>>2];P=+g[a+16>>2];R=+g[a+32>>2];I=+g[a+4>>2];K=+g[a+20>>2];T=+g[a+36>>2];C=+g[a+8>>2];F=+g[a+24>>2];W=+g[a+40>>2];S=H*N+J*P+L*R+(M*I+O*K+Q*T);U=A*N+E*P+G*R+(M*C+O*F+Q*W);V=A*I+E*K+G*T+(H*C+J*F+L*W);W=A*C+E*F+G*W+(A*C+E*F+G*W);T=H*I+J*K+L*T+(H*I+J*K+L*T);R=M*N+O*P+Q*R+(M*N+O*P+Q*R);S=S*.5;U=U*.5;V=V*.5;R=R*.5;g[d>>2]=R;g[d+4>>2]=S;g[d+8>>2]=U;g[d+12>>2]=0.0;g[d+16>>2]=S;T=T*.5;g[d+20>>2]=T;g[d+24>>2]=V;g[d+28>>2]=0.0;g[d+32>>2]=U;g[d+36>>2]=V;W=W*.5;g[d+40>>2]=W;g[d+44>>2]=0.0;return}function Yc(a,b,f,i){a=a|0;b=b|0;f=f|0;i=i|0;var j=0.0,k=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0,s=0,t=0,u=0;o=l;l=l+80|0;f=qb[c[(c[a>>2]|0)+28>>2]&127](a)|0;j=+g[a+4>>2];k=+g[a+8>>2];m=+g[a+12>>2];if((f|0)<=0){l=o;return}n=0;do{Wb[c[(c[a>>2]|0)+16>>2]&3](a,o+76|0,o+52|0,o+64|0,o+56|0,o+72|0,o+68|0,o+48|0,o+60|0,n);a:do switch(c[o+64>>2]|0){case 0:{switch(c[o+60>>2]|0){case 2:{if((c[o+48>>2]|0)>0)i=0;else break a;do{r=(c[o+72>>2]|0)+(O(c[o+68>>2]|0,i)|0)|0;t=c[o+76>>2]|0;s=c[o+56>>2]|0;u=t+(O(s,c[r>>2]|0)|0)|0;q=k*+g[u+4>>2];p=m*+g[u+8>>2];g[o>>2]=j*+g[u>>2];g[o+4>>2]=q;g[o+8>>2]=p;g[o+12>>2]=0.0;u=t+(O(s,c[r+4>>2]|0)|0)|0;p=k*+g[u+4>>2];q=m*+g[u+8>>2];g[o+16>>2]=j*+g[u>>2];g[o+20>>2]=p;g[o+24>>2]=q;g[o+28>>2]=0.0;r=t+(O(s,c[r+8>>2]|0)|0)|0;q=k*+g[r+4>>2];p=m*+g[r+8>>2];g[o+32>>2]=j*+g[r>>2];g[o+36>>2]=q;g[o+40>>2]=p;g[o+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,o,n,i);i=i+1|0}while((i|0)<(c[o+48>>2]|0));break}case 3:{if((c[o+48>>2]|0)>0)i=0;else break a;do{t=(c[o+72>>2]|0)+(O(c[o+68>>2]|0,i)|0)|0;s=c[o+76>>2]|0;u=c[o+56>>2]|0;r=s+(O(e[t>>1]|0,u)|0)|0;p=k*+g[r+4>>2];q=m*+g[r+8>>2];g[o>>2]=j*+g[r>>2];g[o+4>>2]=p;g[o+8>>2]=q;g[o+12>>2]=0.0;r=s+(O(e[t+2>>1]|0,u)|0)|0;q=k*+g[r+4>>2];p=m*+g[r+8>>2];g[o+16>>2]=j*+g[r>>2];g[o+20>>2]=q;g[o+24>>2]=p;g[o+28>>2]=0.0;u=s+(O(e[t+4>>1]|0,u)|0)|0;p=k*+g[u+4>>2];q=m*+g[u+8>>2];g[o+32>>2]=j*+g[u>>2];g[o+36>>2]=p;g[o+40>>2]=q;g[o+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,o,n,i);i=i+1|0}while((i|0)<(c[o+48>>2]|0));break}case 5:{if((c[o+48>>2]|0)>0)i=0;else break a;do{t=(c[o+72>>2]|0)+(O(c[o+68>>2]|0,i)|0)|0;s=c[o+76>>2]|0;u=c[o+56>>2]|0;r=s+(O(d[t>>0]|0,u)|0)|0;p=k*+g[r+4>>2];q=m*+g[r+8>>2];g[o>>2]=j*+g[r>>2];g[o+4>>2]=p;g[o+8>>2]=q;g[o+12>>2]=0.0;r=s+(O(d[t+1>>0]|0,u)|0)|0;q=k*+g[r+4>>2];p=m*+g[r+8>>2];g[o+16>>2]=j*+g[r>>2];g[o+20>>2]=q;g[o+24>>2]=p;g[o+28>>2]=0.0;u=s+(O(d[t+2>>0]|0,u)|0)|0;p=k*+g[u+4>>2];q=m*+g[u+8>>2];g[o+32>>2]=j*+g[u>>2];g[o+36>>2]=p;g[o+40>>2]=q;g[o+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,o,n,i);i=i+1|0}while((i|0)<(c[o+48>>2]|0));break}default:break a}break}case 1:{switch(c[o+60>>2]|0){case 2:{if((c[o+48>>2]|0)>0)i=0;else break a;do{u=(c[o+72>>2]|0)+(O(c[o+68>>2]|0,i)|0)|0;s=c[o+76>>2]|0;t=c[o+56>>2]|0;r=s+(O(t,c[u>>2]|0)|0)|0;p=k*+h[r+8>>3];q=m*+h[r+16>>3];g[o>>2]=j*+h[r>>3];g[o+4>>2]=p;g[o+8>>2]=q;g[o+12>>2]=0.0;r=s+(O(t,c[u+4>>2]|0)|0)|0;q=k*+h[r+8>>3];p=m*+h[r+16>>3];g[o+16>>2]=j*+h[r>>3];g[o+20>>2]=q;g[o+24>>2]=p;g[o+28>>2]=0.0;u=s+(O(t,c[u+8>>2]|0)|0)|0;p=k*+h[u+8>>3];q=m*+h[u+16>>3];g[o+32>>2]=j*+h[u>>3];g[o+36>>2]=p;g[o+40>>2]=q;g[o+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,o,n,i);i=i+1|0}while((i|0)<(c[o+48>>2]|0));break}case 3:{if((c[o+48>>2]|0)>0)i=0;else break a;do{t=(c[o+72>>2]|0)+(O(c[o+68>>2]|0,i)|0)|0;s=c[o+76>>2]|0;u=c[o+56>>2]|0;r=s+(O(e[t>>1]|0,u)|0)|0;p=k*+h[r+8>>3];q=m*+h[r+16>>3];g[o>>2]=j*+h[r>>3];g[o+4>>2]=p;g[o+8>>2]=q;g[o+12>>2]=0.0;r=s+(O(e[t+2>>1]|0,u)|0)|0;q=k*+h[r+8>>3];p=m*+h[r+16>>3];g[o+16>>2]=j*+h[r>>3];g[o+20>>2]=q;g[o+24>>2]=p;g[o+28>>2]=0.0;u=s+(O(e[t+4>>1]|0,u)|0)|0;p=k*+h[u+8>>3];q=m*+h[u+16>>3];g[o+32>>2]=j*+h[u>>3];g[o+36>>2]=p;g[o+40>>2]=q;g[o+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,o,n,i);i=i+1|0}while((i|0)<(c[o+48>>2]|0));break}case 5:{if((c[o+48>>2]|0)>0)i=0;else break a;do{t=(c[o+72>>2]|0)+(O(c[o+68>>2]|0,i)|0)|0;s=c[o+76>>2]|0;u=c[o+56>>2]|0;r=s+(O(d[t>>0]|0,u)|0)|0;p=k*+h[r+8>>3];q=m*+h[r+16>>3];g[o>>2]=j*+h[r>>3];g[o+4>>2]=p;g[o+8>>2]=q;g[o+12>>2]=0.0;r=s+(O(d[t+1>>0]|0,u)|0)|0;q=k*+h[r+8>>3];p=m*+h[r+16>>3];g[o+16>>2]=j*+h[r>>3];g[o+20>>2]=q;g[o+24>>2]=p;g[o+28>>2]=0.0;u=s+(O(d[t+2>>0]|0,u)|0)|0;p=k*+h[u+8>>3];q=m*+h[u+16>>3];g[o+32>>2]=j*+h[u>>3];g[o+36>>2]=p;g[o+40>>2]=q;g[o+44>>2]=0.0;Nb[c[(c[b>>2]|0)+8>>2]&127](b,o,n,i);i=i+1|0}while((i|0)<(c[o+48>>2]|0));break}default:break a}break}default:{}}while(0);Gb[c[(c[a>>2]|0)+24>>2]&127](a,n);n=n+1|0}while((n|0)!=(f|0));l=o;return}function Zc(d,e,f,h,i){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0.0,k=0.0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0;A=l;l=l+128|0;a[d+60>>0]=f&1;if(f){r=+g[h>>2]+-1.0;u=+g[h+4>>2]+-1.0;t=+g[h+8>>2]+-1.0;g[d+4>>2]=r;g[d+8>>2]=u;g[d+12>>2]=t;g[d+16>>2]=0.0;w=+g[i>>2]+1.0;z=+g[i+4>>2]+1.0;y=+g[i+8>>2]+1.0;g[d+20>>2]=w;g[d+24>>2]=z;g[d+28>>2]=y;g[d+32>>2]=0.0;g[d+36>>2]=65533.0/(w-r);g[d+40>>2]=65533.0/(z-u);g[d+44>>2]=65533.0/(y-t);g[d+48>>2]=0.0;a[d+60>>0]=1;j=r+ +(~~((r-r)*(65533.0/(w-r)))&65535&-2&65535)/(65533.0/(w-r))+-1.0;k=u+ +(~~((u-u)*(65533.0/(z-u)))&65535&-2&65535)/(65533.0/(z-u))+-1.0;p=t+ +(~~((t-t)*(65533.0/(y-t)))&65535&-2&65535)/(65533.0/(y-t))+-1.0;if(j>2]=j;x=j}else x=r;if(k>2]=k;v=k}else v=u;if(p>2]=p;s=p}else s=t;p=x+ +((~~((w-x)*(65533.0/(w-r))+1.0)&65535|1)&65535)/(65533.0/(w-r))+1.0;k=v+ +((~~((z-v)*(65533.0/(z-u))+1.0)&65535|1)&65535)/(65533.0/(z-u))+1.0;j=s+ +((~~((y-s)*(65533.0/(y-t))+1.0)&65535|1)&65535)/(65533.0/(y-t))+1.0;if(w>2]=p;else p=w;if(z>2]=k;else k=z;if(y>2]=j;else j=y;g[d+36>>2]=65533.0/(p-x);g[d+40>>2]=65533.0/(k-v);g[d+44>>2]=65533.0/(j-s);g[d+48>>2]=0.0;c[A+96>>2]=8212;c[A+96+4>>2]=d+104;c[A+96+8>>2]=d;Nb[c[(c[e>>2]|0)+8>>2]&127](e,A+96|0,d+4|0,d+20|0);f=c[d+108>>2]|0;c[A+80>>2]=0;c[A+80+4>>2]=0;c[A+80+8>>2]=0;c[A+80+12>>2]=0;m=c[d+128>>2]|0;if((m|0)<(f<<1|0)){if((c[d+132>>2]|0)<(f<<1|0)){if(!f){i=m;e=0}else{c[6472]=(c[6472]|0)+1;h=ic(f<<5|19)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}i=c[d+128>>2]|0;e=h}if((i|0)>0){h=0;do{q=e+(h<<4)|0;o=(c[d+136>>2]|0)+(h<<4)|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];h=h+1|0}while((h|0)!=(i|0))}h=c[d+136>>2]|0;if(h|0){if(a[d+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[d+136>>2]=0}a[d+140>>0]=1;c[d+136>>2]=e;c[d+132>>2]=f<<1;i=d+136|0}else i=d+136|0;h=m;do{q=(c[i>>2]|0)+(h<<4)|0;c[q>>2]=c[A+80>>2];c[q+4>>2]=c[A+80+4>>2];c[q+8>>2]=c[A+80+8>>2];c[q+12>>2]=c[A+80+12>>2];h=h+1|0}while((h|0)!=(f<<1|0))}c[d+128>>2]=f<<1}else{c[A+96>>2]=8232;c[A+96+4>>2]=d+64;c[A+80>>2]=-581039253;c[A+80+4>>2]=-581039253;c[A+80+8>>2]=-581039253;g[A+80+12>>2]=0.0;c[A+64>>2]=1566444395;c[A+64+4>>2]=1566444395;c[A+64+8>>2]=1566444395;g[A+64+12>>2]=0.0;Nb[c[(c[e>>2]|0)+8>>2]&127](e,A+96|0,A+80|0,A+64|0);f=c[d+68>>2]|0;m=A;o=m+64|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));q=c[d+88>>2]|0;if((q|0)<(f<<1|0)){if((c[d+92>>2]|0)<(f<<1|0)){if(!f){i=q;e=0}else{c[6472]=(c[6472]|0)+1;h=ic(f<<7|19)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}i=c[d+88>>2]|0;e=h}if((i|0)>0){h=0;do{m=e+(h<<6)|0;n=(c[d+96>>2]|0)+(h<<6)|0;o=m+64|0;do{c[m>>2]=c[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));h=h+1|0}while((h|0)!=(i|0))}h=c[d+96>>2]|0;if(h|0){if(a[d+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[d+96>>2]=0}a[d+100>>0]=1;c[d+96>>2]=e;c[d+92>>2]=f<<1;i=d+96|0}else i=d+96|0;h=q;do{m=(c[i>>2]|0)+(h<<6)|0;n=A;o=m+64|0;do{c[m>>2]=c[n>>2];m=m+4|0;n=n+4|0}while((m|0)<(o|0));h=h+1|0}while((h|0)!=(f<<1|0))}c[d+88>>2]=f<<1}c[d+56>>2]=0;rc(d,0,f);if(a[d+60>>0]|0?(c[d+152>>2]|0)==0:0){if(!(c[d+156>>2]|0)){c[6472]=(c[6472]|0)+1;f=ic(51)|0;if(!f)e=0;else{c[(f+4+15&-16)+-4>>2]=f;e=f+4+15&-16}f=c[d+152>>2]|0;if((f|0)>0){h=0;do{q=e+(h<<5)|0;o=(c[d+160>>2]|0)+(h<<5)|0;c[q>>2]=c[o>>2];c[q+4>>2]=c[o+4>>2];c[q+8>>2]=c[o+8>>2];c[q+12>>2]=c[o+12>>2];c[q+16>>2]=c[o+16>>2];c[q+20>>2]=c[o+20>>2];c[q+24>>2]=c[o+24>>2];c[q+28>>2]=c[o+28>>2];h=h+1|0}while((h|0)!=(f|0))}f=c[d+160>>2]|0;if(f|0){if(a[d+164>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+160>>2]=0}a[d+164>>0]=1;c[d+160>>2]=e;c[d+156>>2]=1;i=(c[d+152>>2]|0)+1|0;f=e;h=d+160|0}else{i=1;f=c[d+160>>2]|0;h=d+160|0}c[d+152>>2]=i;c[f>>2]=c[A+96>>2];c[f+4>>2]=c[A+96+4>>2];c[f+8>>2]=c[A+96+8>>2];c[f+12>>2]=c[A+96+12>>2];c[f+16>>2]=c[A+96+16>>2];c[f+20>>2]=c[A+96+20>>2];c[f+24>>2]=c[A+96+24>>2];c[f+28>>2]=c[A+96+28>>2];q=c[h>>2]|0;o=c[d+136>>2]|0;b[q>>1]=b[o>>1]|0;b[q+2>>1]=b[o+2>>1]|0;b[q+4>>1]=b[o+4>>1]|0;b[q+6>>1]=b[o+6>>1]|0;b[q+8>>1]=b[o+8>>1]|0;b[q+10>>1]=b[o+10>>1]|0;c[q+12>>2]=0;o=c[o+12>>2]|0;c[q+16>>2]=(o|0)>-1?1:0-o|0}c[d+168>>2]=c[d+152>>2];f=c[d+116>>2]|0;if(f|0){if(a[d+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+116>>2]=0}a[d+120>>0]=1;c[d+116>>2]=0;c[d+108>>2]=0;c[d+112>>2]=0;f=c[d+76>>2]|0;if(!f){a[d+80>>0]=1;c[d+76>>2]=0;c[d+68>>2]=0;d=d+72|0;c[d>>2]=0;l=A;return}if(a[d+80>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+76>>2]=0;a[d+80>>0]=1;c[d+76>>2]=0;c[d+68>>2]=0;d=d+72|0;c[d>>2]=0;l=A;return}function _c(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0,ca=0.0,da=0.0,ea=0.0,fa=0,ga=0.0;fa=l;l=l+32|0;K=c[b+4>>2]|0;a[K+312>>0]=0;c[K>>2]=0;a[K+356>>0]=1;c[K+292>>2]=1566444395;c[K+296>>2]=1566444395;c[K+300>>2]=1566444395;g[K+304>>2]=0.0;c[K+336>>2]=0;c[K+336+4>>2]=0;c[K+336+8>>2]=0;c[K+336+12>>2]=0;a[K+336+16>>0]=0;a[K+332>>0]=a[K+332>>0]&-16;k=+g[d+48>>2];p=+g[d+52>>2];q=+g[d+56>>2];r=+g[f+48>>2];s=+g[f+52>>2];t=+g[f+56>>2];L=+g[d>>2];R=+g[d+4>>2];S=+g[d+8>>2];T=+g[d+16>>2];M=+g[d+20>>2];N=+g[d+24>>2];O=+g[d+32>>2];P=+g[d+36>>2];Q=+g[d+40>>2];U=+g[f>>2];_=+g[f+4>>2];$=+g[f+8>>2];aa=+g[f+16>>2];V=+g[f+20>>2];W=+g[f+24>>2];X=+g[f+32>>2];Y=+g[f+36>>2];Z=+g[f+40>>2];ca=+g[e+48>>2]-k-(+g[h+48>>2]-r);ea=+g[e+52>>2]-p-(+g[h+52>>2]-s);da=+g[e+56>>2]-q-(+g[h+56>>2]-t);K=c[b+8>>2]|0;A=c[(c[K>>2]|0)+64>>2]|0;g[fa>>2]=L*-ca+T*-ea+O*-da;g[fa+4>>2]=R*-ca+M*-ea+P*-da;g[fa+8>>2]=S*-ca+N*-ea+Q*-da;g[fa+12>>2]=0.0;Kb[A&127](fa+16|0,K,fa);I=+g[fa+16>>2];J=+g[fa+16+4>>2];H=+g[fa+16+8>>2];v=I*+g[d>>2]+J*+g[d+4>>2]+H*+g[d+8>>2]+ +g[d+48>>2];x=I*+g[d+16>>2]+J*+g[d+20>>2]+H*+g[d+24>>2]+ +g[d+52>>2];H=I*+g[d+32>>2]+J*+g[d+36>>2]+H*+g[d+40>>2]+ +g[d+56>>2];K=c[b+12>>2]|0;A=c[(c[K>>2]|0)+64>>2]|0;J=ca*+g[f+4>>2]+ea*+g[f+20>>2]+da*+g[f+36>>2];I=ca*+g[f+8>>2]+ea*+g[f+24>>2]+da*+g[f+40>>2];g[fa>>2]=ca*+g[f>>2]+ea*+g[f+16>>2]+da*+g[f+32>>2];g[fa+4>>2]=J;g[fa+8>>2]=I;g[fa+12>>2]=0.0;Kb[A&127](fa+16|0,K,fa);I=+g[fa+16>>2];J=+g[fa+16+4>>2];w=+g[fa+16+8>>2];v=v-(I*+g[f>>2]+J*+g[f+4>>2]+w*+g[f+8>>2]+ +g[f+48>>2]);x=x-(I*+g[f+16>>2]+J*+g[f+20>>2]+w*+g[f+24>>2]+ +g[f+52>>2]);w=H-(I*+g[f+32>>2]+J*+g[f+36>>2]+w*+g[f+40>>2]+ +g[f+56>>2]);a:do if(v*v+x*x+w*w>9.999999747378752e-05){m=0.0;n=0.0;o=0.0;J=k;k=0.0;K=32;j=0;u=0;B=x;while(1){if(!K)break a;K=K+-1|0;A=c[b+8>>2]|0;z=c[(c[A>>2]|0)+64>>2]|0;G=-v;ga=-B;x=-w;g[fa>>2]=L*G+T*ga+O*x;g[fa+4>>2]=R*G+M*ga+P*x;g[fa+8>>2]=S*G+N*ga+Q*x;g[fa+12>>2]=0.0;Kb[z&127](fa+16|0,A,fa);x=+g[fa+16>>2];ga=+g[fa+16+4>>2];G=+g[fa+16+8>>2];E=J+(L*x+R*ga+S*G);I=p+(T*x+M*ga+N*G);G=q+(O*x+P*ga+Q*G);A=c[b+12>>2]|0;z=c[(c[A>>2]|0)+64>>2]|0;g[fa>>2]=U*v+aa*B+X*w;g[fa+4>>2]=_*v+V*B+Y*w;g[fa+8>>2]=$*v+W*B+Z*w;g[fa+12>>2]=0.0;Kb[z&127](fa+16|0,A,fa);ga=+g[fa+16>>2];x=+g[fa+16+4>>2];F=+g[fa+16+8>>2];D=r+(U*ga+_*x+$*F);H=s+(aa*ga+V*x+W*F);F=t+(X*ga+Y*x+Z*F);x=v*(E-D)+B*(I-H)+w*(G-F);if(k>1.0){j=0;ba=24;break}if(x>0.0){m=ca*v+ea*B+da*w;if(m>=-1.4210854715202004e-14){j=0;ba=24;break}k=k-x/m;o=v;n=B;m=w;x=(1.0-k)*+g[d+48>>2]+k*+g[e+48>>2];p=(1.0-k)*+g[d+52>>2]+k*+g[e+52>>2];q=(1.0-k)*+g[d+56>>2]+k*+g[e+56>>2];r=(1.0-k)*+g[f+48>>2]+k*+g[h+48>>2];s=(1.0-k)*+g[f+52>>2]+k*+g[h+52>>2];t=(1.0-k)*+g[f+56>>2]+k*+g[h+56>>2];j=u}else x=J;z=c[b+4>>2]|0;A=c[z>>2]|0;if((A|0)>0){v=+g[z+308>>2];u=0;y=0;do{B=E-D-+g[z+4+(y<<4)>>2];J=I-H-+g[z+4+(y<<4)+4>>2];ga=G-F-+g[z+4+(y<<4)+8>>2];u=u|B*B+J*J+ga*ga<=v;y=y+1|0}while((y|0)!=(A|0))}else u=0;if((+g[z+304>>2]==0.0?G-F==+g[z+300>>2]:0)?I-H==+g[z+296>>2]:0){if(!(E-D==+g[z+292>>2]|u))ba=16}else if(!u)ba=16;if((ba|0)==16){ba=0;g[z+292>>2]=E-D;g[z+296>>2]=I-H;g[z+300>>2]=G-F;g[z+304>>2]=0.0;a[z+356>>0]=1;g[z+4+(A<<4)>>2]=E-D;g[z+4+(A<<4)+4>>2]=I-H;g[z+4+(A<<4)+8>>2]=G-F;g[z+4+(A<<4)+12>>2]=0.0;A=c[z>>2]|0;g[z+84+(A<<4)>>2]=E;g[z+84+(A<<4)+4>>2]=I;g[z+84+(A<<4)+8>>2]=G;g[z+84+(A<<4)+12>>2]=0.0;A=c[z>>2]|0;g[z+164+(A<<4)>>2]=D;g[z+164+(A<<4)+4>>2]=H;g[z+164+(A<<4)+8>>2]=F;g[z+164+(A<<4)+12>>2]=0.0;c[z>>2]=(c[z>>2]|0)+1;z=c[b+4>>2]|0}A=Dc(z)|0;v=+g[z+276>>2];B=+g[z+280>>2];w=+g[z+284>>2];if(!A)break a;if(!(v*v+B*B+w*w>9.999999747378752e-05))break a;else{J=x;u=c[z+288>>2]|0}}if((ba|0)==24){l=fa;return j|0}}else{o=0.0;n=0.0;m=0.0;k=0.0;j=0}while(0);g[i+164>>2]=k;k=o*o+n*n+m*m;if(!(k>=1.4210854715202004e-14)){c[i+132>>2]=0;c[i+132+4>>2]=0;c[i+132+8>>2]=0;c[i+132+12>>2]=0;k=0.0;m=0.0;n=0.0}else{aa=1.0/+C(+k);k=o*aa;ga=n*aa;n=m*aa;g[i+132>>2]=k;g[i+136>>2]=ga;g[i+140>>2]=n;c[i+144>>2]=j;m=ga}if(ca*k+ea*m+da*n>=-+g[i+172>>2]){b=0;l=fa;return b|0}b=c[b+4>>2]|0;Dc(b)|0;yp(i+148|0,b+260|0,16)|0;b=1;l=fa;return b|0}function $c(b,d,e,f,h,i,k,l,m,n,o){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;l=l|0;m=+m;n=+n;o=+o;var p=0,q=0,r=0.0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0.0,P=0.0,Q=0.0,R=0.0;N=c[b+68>>2]|0;if((N|0)==(c[b+72>>2]|0)?(t=N|0?N<<1:1,(N|0)<(t|0)):0){if(!t){q=N;s=0}else{c[6472]=(c[6472]|0)+1;p=ic((t*152|3)+16|0)|0;if(!p)p=0;else{c[(p+4+15&-16)+-4>>2]=p;p=p+4+15&-16}q=c[b+68>>2]|0;s=p}if((q|0)>0){p=0;do{_h(s+(p*152|0)|0,(c[b+76>>2]|0)+(p*152|0)|0,152)|0;p=p+1|0}while((p|0)!=(q|0))}p=c[b+76>>2]|0;if(p|0){if(a[b+80>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}c[b+76>>2]=0}a[b+80>>0]=1;c[b+76>>2]=s;c[b+72>>2]=t;p=c[b+68>>2]|0}else p=N;c[b+68>>2]=p+1;M=c[b+76>>2]|0;c[M+(N*152|0)+140>>2]=h;s=c[b+16>>2]|0;p=c[s+(e*244|0)+240>>2]|0;t=c[s+(f*244|0)+240>>2]|0;c[M+(N*152|0)+144>>2]=e;c[M+(N*152|0)+148>>2]=f;q=c[i+84>>2]|0;c[M+(N*152|0)+104>>2]=q;c[M+(N*152|0)+132>>2]=0;g[M+(N*152|0)+100>>2]=0.0;g[M+(N*152|0)+96>>2]=0.0;F=(c[j>>2]=q,+g[j>>2]);if(p|0){c[M+(N*152|0)+16>>2]=c[d>>2];c[M+(N*152|0)+16+4>>2]=c[d+4>>2];c[M+(N*152|0)+16+8>>2]=c[d+8>>2];c[M+(N*152|0)+16+12>>2]=c[d+12>>2];L=+g[k+4>>2];D=+g[M+(N*152|0)+24>>2];I=+g[k+8>>2];J=+g[M+(N*152|0)+20>>2];E=+g[M+(N*152|0)+16>>2];K=+g[k>>2];g[M+(N*152|0)>>2]=L*D-I*J;g[M+(N*152|0)+4>>2]=I*E-D*K;g[M+(N*152|0)+8>>2]=J*K-L*E;g[M+(N*152|0)+12>>2]=0.0;v=((L*D-I*J)*+g[p+264>>2]+(I*E-D*K)*+g[p+268>>2]+(J*K-L*E)*+g[p+272>>2])*+g[p+544>>2];r=((L*D-I*J)*+g[p+280>>2]+(I*E-D*K)*+g[p+284>>2]+(J*K-L*E)*+g[p+288>>2])*+g[p+548>>2];u=((L*D-I*J)*+g[p+296>>2]+(I*E-D*K)*+g[p+300>>2]+(J*K-L*E)*+g[p+304>>2])*+g[p+552>>2];g[M+(N*152|0)+64>>2]=v;g[M+(N*152|0)+68>>2]=r;g[M+(N*152|0)+72>>2]=u;g[M+(N*152|0)+76>>2]=0.0;z=E;A=J;B=D;C=L*D-I*J;D=I*E-D*K;E=J*K-L*E}else{c[M+(N*152|0)+64>>2]=0;c[M+(N*152|0)+64+4>>2]=0;c[M+(N*152|0)+64+8>>2]=0;c[M+(N*152|0)+64+12>>2]=0;c[M+(N*152|0)>>2]=0;c[M+(N*152|0)+4>>2]=0;c[M+(N*152|0)+8>>2]=0;c[M+(N*152|0)+12>>2]=0;c[M+(N*152|0)+16>>2]=0;c[M+(N*152|0)+20>>2]=0;c[M+(N*152|0)+24>>2]=0;c[M+(N*152|0)+28>>2]=0;r=0.0;u=0.0;v=0.0;z=0.0;A=0.0;B=0.0;C=0.0;D=0.0;E=0.0}if(t|0){L=-+g[d>>2];P=-+g[d+4>>2];K=-+g[d+8>>2];g[M+(N*152|0)+48>>2]=L;g[M+(N*152|0)+52>>2]=P;g[M+(N*152|0)+56>>2]=K;g[M+(N*152|0)+60>>2]=0.0;O=+g[l+4>>2];R=+g[l+8>>2];Q=+g[l>>2];g[M+(N*152|0)+32>>2]=O*K-R*P;g[M+(N*152|0)+36>>2]=R*L-Q*K;g[M+(N*152|0)+40>>2]=Q*P-O*L;g[M+(N*152|0)+44>>2]=0.0;w=((O*K-R*P)*+g[t+264>>2]+(R*L-Q*K)*+g[t+268>>2]+(Q*P-O*L)*+g[t+272>>2])*+g[t+544>>2];x=((O*K-R*P)*+g[t+280>>2]+(R*L-Q*K)*+g[t+284>>2]+(Q*P-O*L)*+g[t+288>>2])*+g[t+548>>2];y=((O*K-R*P)*+g[t+296>>2]+(R*L-Q*K)*+g[t+300>>2]+(Q*P-O*L)*+g[t+304>>2])*+g[t+552>>2];g[M+(N*152|0)+80>>2]=w;g[M+(N*152|0)+84>>2]=x;g[M+(N*152|0)+88>>2]=y;g[M+(N*152|0)+92>>2]=0.0;G=L;H=P;I=K;J=O*K-R*P;K=R*L-Q*K;L=Q*P-O*L}else{c[M+(N*152|0)+80>>2]=0;c[M+(N*152|0)+80+4>>2]=0;c[M+(N*152|0)+80+8>>2]=0;c[M+(N*152|0)+80+12>>2]=0;c[M+(N*152|0)+32>>2]=0;c[M+(N*152|0)+32+4>>2]=0;c[M+(N*152|0)+32+8>>2]=0;c[M+(N*152|0)+32+12>>2]=0;c[M+(N*152|0)+32+16>>2]=0;c[M+(N*152|0)+32+20>>2]=0;c[M+(N*152|0)+32+24>>2]=0;c[M+(N*152|0)+32+28>>2]=0;w=0.0;x=0.0;y=0.0;G=0.0;H=0.0;I=0.0;J=0.0;K=0.0;L=0.0}if(p|0){P=+g[k+8>>2];Q=+g[k+4>>2];R=+g[k>>2];u=+g[p+344>>2]+((r*P-u*Q)*+g[d>>2]+(u*R-P*v)*+g[d+4>>2]+(Q*v-r*R)*+g[d+8>>2])}else u=0.0;if(t|0){Q=-w;r=-x;y=-y;O=+g[l+8>>2];P=+g[l+4>>2];R=+g[l>>2];r=+g[t+344>>2]+((O*r-P*y)*+g[d>>2]+(R*y-O*Q)*+g[d+4>>2]+(P*Q-R*r)*+g[d+8>>2])}else r=0.0;x=m/(u+r);g[M+(N*152|0)+108>>2]=x;if(p|0){u=(+g[s+(e*244|0)+176>>2]+ +g[s+(e*244|0)+208>>2])*z+(+g[s+(e*244|0)+180>>2]+ +g[s+(e*244|0)+212>>2])*A+(+g[s+(e*244|0)+184>>2]+ +g[s+(e*244|0)+216>>2])*B;v=+g[s+(e*244|0)+192>>2];w=+g[s+(e*244|0)+196>>2];r=+g[s+(e*244|0)+200>>2]}else{u=z*0.0+A*0.0+B*0.0;v=0.0;w=0.0;r=0.0}r=u+(v*C+w*D+r*E);if(t|0){Q=(+g[s+(f*244|0)+176>>2]+ +g[s+(f*244|0)+208>>2])*G+(+g[s+(f*244|0)+180>>2]+ +g[s+(f*244|0)+212>>2])*H+(+g[s+(f*244|0)+184>>2]+ +g[s+(f*244|0)+216>>2])*I;O=+g[s+(f*244|0)+192>>2];P=+g[s+(f*244|0)+196>>2];R=+g[s+(f*244|0)+200>>2];O=O*J;P=P*K;P=O+P;R=R*L;R=P+R;R=Q+R;R=r+R;R=n-R;R=x*R;f=M+(N*152|0)+112|0;g[f>>2]=R;f=M+(N*152|0)+116|0;g[f>>2]=o;R=-F;f=M+(N*152|0)+120|0;g[f>>2]=R;f=M+(N*152|0)+124|0;c[f>>2]=q;return}else{Q=G*0.0+H*0.0+I*0.0;O=0.0;P=0.0;R=0.0;O=O*J;P=P*K;P=O+P;R=R*L;R=P+R;R=Q+R;R=r+R;R=n-R;R=x*R;f=M+(N*152|0)+112|0;g[f>>2]=R;f=M+(N*152|0)+116|0;g[f>>2]=o;R=-F;f=M+(N*152|0)+120|0;g[f>>2]=R;f=M+(N*152|0)+124|0;c[f>>2]=q;return}}function ad(b,d,e,f,h,i,j,k,l,m,n){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,D=0,E=0.0,F=0,G=0,H=0;if((j|0)<2|(k|0)<2){n=0;return n|0}y=O(k,j)|0;c[6472]=(c[6472]|0)+1;b=ic(y>>>0>268435455?18:(y<<4|3)+16|0)|0;if(!b)x=0;else{c[(b+4+15&-16)+-4>>2]=b;x=b+4+15&-16}w=XH(y>>>0>1073741823?-1:y<<2)|0;if((k|0)>0?(j|0)>0:0){o=0;do{E=+(o|0)/+(k+-1|0);q=+g[e>>2];q=q+E*(+g[h>>2]-q);r=+g[e+4>>2];r=r+E*(+g[h+4>>2]-r);s=+g[e+8>>2];s=s+E*(+g[h+8>>2]-s);t=+g[f>>2];u=+g[f+4>>2];v=+g[f+8>>2];p=O(o,j)|0;t=t+E*(+g[i>>2]-t)-q;u=u+E*(+g[i+4>>2]-u)-r;v=v+E*(+g[i+8>>2]-v)-s;b=0;do{E=+(b|0)/+(j+-1|0);D=b+p|0;g[x+(D<<4)>>2]=q+t*E;g[x+(D<<4)+4>>2]=r+u*E;g[x+(D<<4)+8>>2]=s+v*E;g[x+(D<<4)+12>>2]=0.0;g[w+(D<<2)>>2]=1.0;b=b+1|0}while((b|0)!=(j|0));o=o+1|0}while((o|0)!=(k|0))}c[6472]=(c[6472]|0)+1;b=ic(1271)|0;if(!b)b=0;else{c[(b+4+15&-16)+-4>>2]=b;b=b+4+15&-16}qc(b,d,y,x,w);if(l&1|0){g[(c[b+720>>2]|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&2|0){g[(c[b+720>>2]|0)+((j+-1|0)*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&4|0){D=O(k+-1|0,j)|0;g[(c[b+720>>2]|0)+(D*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&8|0){D=j+-1+(O(k+-1|0,j)|0)|0;g[(c[b+720>>2]|0)+(D*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&16|0){g[(c[b+720>>2]|0)+(((j+-1|0)/2|0)*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&32|0){D=O((k+-1|0)/2|0,j)|0;g[(c[b+720>>2]|0)+(D*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&64|0){D=j+-1+(O((k+-1|0)/2|0,j)|0)|0;g[(c[b+720>>2]|0)+(D*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&128|0){D=(O(k+-1|0,j)|0)+((j+-1|0)/2|0)|0;g[(c[b+720>>2]|0)+(D*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&256|0){D=(O((k+-1|0)/2|0,j)|0)+((j+-1|0)/2|0)|0;g[(c[b+720>>2]|0)+(D*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(x|0){c[6473]=(c[6473]|0)+1;nd(c[x+-4>>2]|0)}YH(w);if((k|0)<=0){n=b;return n|0}B=b+720|0;D=b+732|0;A=b+740|0;y=b+924|0;d=j+-1|0;l=(j<<1)+-1|0;z=0;o=0;while(1){p=z;z=z+1|0;a:do if((j|0)>0){x=O(p,j)|0;w=O(z,j)|0;r=1.0/+(k+-1|0)*+(k+-1-p|0);q=1.0/+(k+-1|0)*+(k+-2-p|0);if((z|0)<(k|0)){h=0;i=o}else{p=0;while(1){e=p;p=p+1|0;if((p|0)<(j|0)){h=p+x|0;f=c[B>>2]|0;Rh(b,0);w=(c[D>>2]|0)+-1|0;i=c[A>>2]|0;c[i+(w*52|0)+8>>2]=f+((e+x|0)*104|0);c[i+(w*52|0)+12>>2]=f+(h*104|0);u=+g[f+((e+x|0)*104|0)+8>>2]-+g[f+(h*104|0)+8>>2];v=+g[f+((e+x|0)*104|0)+12>>2]-+g[f+(h*104|0)+12>>2];E=+g[f+((e+x|0)*104|0)+16>>2]-+g[f+(h*104|0)+16>>2];g[i+(w*52|0)+16>>2]=+C(+(u*u+v*v+E*E));a[y>>0]=1}if((p|0)==(j|0))break a}}while(1){p=h+1|0;e=h+x|0;f=h+w|0;if((h|0)==(j+-1|0))break;G=c[B>>2]|0;Rh(b,0);H=(c[D>>2]|0)+-1|0;F=c[A>>2]|0;c[F+(H*52|0)+8>>2]=G+(e*104|0);c[F+(H*52|0)+12>>2]=G+((p+x|0)*104|0);E=+g[G+(e*104|0)+8>>2]-+g[G+((p+x|0)*104|0)+8>>2];v=+g[G+(e*104|0)+12>>2]-+g[G+((p+x|0)*104|0)+12>>2];u=+g[G+(e*104|0)+16>>2]-+g[G+((p+x|0)*104|0)+16>>2];g[F+(H*52|0)+16>>2]=+C(+(E*E+v*v+u*u));a[y>>0]=1;H=c[B>>2]|0;Rh(b,0);F=(c[D>>2]|0)+-1|0;G=c[A>>2]|0;c[G+(F*52|0)+8>>2]=H+(e*104|0);c[G+(F*52|0)+12>>2]=H+(f*104|0);u=+g[H+(e*104|0)+8>>2]-+g[H+(f*104|0)+8>>2];v=+g[H+(e*104|0)+12>>2]-+g[H+(f*104|0)+12>>2];E=+g[H+(e*104|0)+16>>2]-+g[H+(f*104|0)+16>>2];g[G+(F*52|0)+16>>2]=+C(+(u*u+v*v+E*E));a[y>>0]=1;Qf(b,e,f,p+w|0,0);if(!n)Qf(b,p+w|0,p+x|0,e,0);else{E=1.0/+(j+-1|0)*+(h|0);g[n+(i<<2)>>2]=E;g[n+(i+1<<2)>>2]=r;g[n+(i+2<<2)>>2]=E;g[n+(i+3<<2)>>2]=q;v=1.0/+(j+-1|0)*+(p|0);g[n+(i+4<<2)>>2]=v;g[n+(i+5<<2)>>2]=q;Qf(b,p+w|0,p+x|0,e,0);g[n+(i+6<<2)>>2]=v;g[n+(i+7<<2)>>2]=q;g[n+(i+8<<2)>>2]=v;g[n+(i+9<<2)>>2]=r;g[n+(i+10<<2)>>2]=E;g[n+(i+11<<2)>>2]=r}if(m){F=c[B>>2]|0;Rh(b,0);H=(c[D>>2]|0)+-1|0;G=c[A>>2]|0;c[G+(H*52|0)+8>>2]=F+(e*104|0);c[G+(H*52|0)+12>>2]=F+((p+w|0)*104|0);u=+g[F+(e*104|0)+8>>2]-+g[F+((p+w|0)*104|0)+8>>2];v=+g[F+(e*104|0)+12>>2]-+g[F+((p+w|0)*104|0)+12>>2];E=+g[F+(e*104|0)+16>>2]-+g[F+((p+w|0)*104|0)+16>>2];g[G+(H*52|0)+16>>2]=+C(+(u*u+v*v+E*E));a[y>>0]=1}h=p;i=i+12|0}F=c[B>>2]|0;Rh(b,0);H=(c[D>>2]|0)+-1|0;G=c[A>>2]|0;c[G+(H*52|0)+8>>2]=F+(d*104|0);c[G+(H*52|0)+12>>2]=F+(l*104|0);u=+g[F+(d*104|0)+8>>2]-+g[F+(l*104|0)+8>>2];v=+g[F+(d*104|0)+12>>2]-+g[F+(l*104|0)+12>>2];E=+g[F+(d*104|0)+16>>2]-+g[F+(l*104|0)+16>>2];g[G+(H*52|0)+16>>2]=+C(+(u*u+v*v+E*E));a[y>>0]=1;o=(j*12|0)+-12+o|0}while(0);if((z|0)==(k|0))break;else{d=d+j|0;l=l+j|0}}return b|0}function bd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0;A=+g[b+48>>2];h=+g[d>>2];B=+g[b+64>>2];j=+g[d+4>>2];H=+g[b+80>>2];p=+g[d+8>>2];s=+g[b+52>>2];r=+g[b+68>>2];q=+g[b+84>>2];w=+g[b+56>>2];G=+g[b+72>>2];x=+g[b+88>>2];v=+g[d+16>>2];u=+g[d+20>>2];t=+g[d+24>>2];F=+g[d+32>>2];D=+g[d+36>>2];E=+g[d+40>>2];k=+g[b+96>>2];f=+g[b+100>>2];z=+g[b+104>>2];y=+g[d+48>>2]+(h*k+j*f+p*z);i=v*k+u*f+t*z+ +g[d+52>>2];z=F*k+D*f+E*z+ +g[d+56>>2];g[b+1064>>2]=A*h+B*j+H*p;g[b+1068>>2]=h*s+j*r+p*q;g[b+1072>>2]=h*w+j*G+p*x;g[b+1076>>2]=0.0;g[b+1080>>2]=A*v+B*u+H*t;g[b+1084>>2]=s*v+r*u+q*t;g[b+1088>>2]=w*v+G*u+x*t;g[b+1092>>2]=0.0;g[b+1096>>2]=A*F+B*D+H*E;g[b+1100>>2]=s*F+r*D+q*E;g[b+1104>>2]=w*F+G*D+x*E;g[b+1108>>2]=0.0;g[b+1112>>2]=y;g[b+1116>>2]=i;g[b+1120>>2]=z;g[b+1124>>2]=0.0;z=+g[b+112>>2];i=+g[e>>2];y=+g[b+128>>2];E=+g[e+4>>2];x=+g[b+144>>2];D=+g[e+8>>2];G=+g[b+116>>2];F=+g[b+132>>2];w=+g[b+148>>2];q=+g[b+120>>2];r=+g[b+136>>2];s=+g[b+152>>2];H=+g[e+16>>2];B=+g[e+20>>2];A=+g[e+24>>2];t=+g[e+32>>2];u=+g[e+36>>2];v=+g[e+40>>2];p=+g[b+160>>2];j=+g[b+164>>2];h=+g[b+168>>2];f=+g[e+48>>2]+(i*p+E*j+D*h);k=H*p+B*j+A*h+ +g[e+52>>2];h=t*p+u*j+v*h+ +g[e+56>>2];g[b+1128>>2]=z*i+y*E+x*D;g[b+1132>>2]=i*G+E*F+D*w;g[b+1136>>2]=i*q+E*r+D*s;g[b+1140>>2]=0.0;g[b+1144>>2]=z*H+y*B+x*A;g[b+1148>>2]=G*H+F*B+w*A;g[b+1152>>2]=q*H+r*B+s*A;g[b+1156>>2]=0.0;g[b+1160>>2]=z*t+y*u+x*v;g[b+1164>>2]=G*t+F*u+w*v;g[b+1168>>2]=q*t+r*u+s*v;g[b+1172>>2]=0.0;g[b+1176>>2]=f;g[b+1180>>2]=k;g[b+1184>>2]=h;g[b+1188>>2]=0.0;f=f-+g[b+1112>>2];k=k-+g[b+1116>>2];h=h-+g[b+1120>>2];w=+g[b+1084>>2];F=+g[b+1104>>2];G=+g[b+1088>>2];x=+g[b+1100>>2];y=+g[b+1096>>2];z=+g[b+1080>>2];A=+g[b+1064>>2];B=+g[b+1068>>2];H=+g[b+1072>>2];D=1.0/((w*F-G*x)*A+B*(G*y-F*z)+(x*z-w*y)*H);E=(x*z-w*y)*D;i=h*(G*B-w*H)*D+(f*(w*F-G*x)*D+k*(x*H-F*B)*D);j=h*(z*H-G*A)*D+(f*(G*y-F*z)*D+k*(F*A-y*H)*D);k=h*(w*A-z*B)*D+(f*E+k*(y*B-x*A)*D);g[b+1256>>2]=i;g[b+1260>>2]=j;g[b+1264>>2]=k;g[b+1268>>2]=0.0;g[b+840>>2]=i;f=+g[b+680>>2];h=+g[b+696>>2];do if(!(f>h)){if(f>i){c[b+856>>2]=2;f=i-f;break}if(h>2]=1;f=i-h;break}else{c[b+856>>2]=0;f=0.0;break}}else{c[b+856>>2]=0;f=0.0}while(0);g[b+824>>2]=f;g[b+844>>2]=j;f=+g[b+684>>2];h=+g[b+700>>2];do if(!(f>h)){if(f>j){c[b+860>>2]=2;f=j-f;break}if(h>2]=1;f=j-h;break}else{c[b+860>>2]=0;f=0.0;break}}else{c[b+860>>2]=0;f=0.0}while(0);g[b+828>>2]=f;g[b+848>>2]=k;f=+g[b+688>>2];h=+g[b+704>>2];do if(!(f>h)){if(f>k){c[b+864>>2]=2;f=k-f;break}if(h>2]=1;f=k-h;break}else{c[b+864>>2]=0;f=0.0;break}}else{c[b+864>>2]=0;f=0.0}while(0);g[b+832>>2]=f;n=+g[b+1128>>2];o=+g[b+1144>>2];p=+g[b+1160>>2];h=+g[b+1132>>2];i=+g[b+1148>>2];j=+g[b+1164>>2];k=(w*F-G*x)*D*h+(x*H-F*B)*D*i+(G*B-w*H)*D*j;m=h*(G*y-F*z)*D+(F*A-y*H)*D*i+(z*H-G*A)*D*j;l=p*(w*A-z*B)*D+(n*E+o*(y*B-x*A)*D);f=E*+g[b+1136>>2]+(y*B-x*A)*D*+g[b+1152>>2]+(w*A-z*B)*D*(q*t+r*u+s*v);do if(l<1.0)if(l>-1.0){g[b+1192>>2]=+K(+-(h*E+(y*B-x*A)*D*i+(w*A-z*B)*D*j),+f);f=l<-1.0?-1.0:l;g[b+1196>>2]=+I(+(f>1.0?1.0:f));f=+K(+-(p*(z*H-G*A)*D+(n*(G*y-F*z)*D+o*(F*A-y*H)*D)),+(p*(G*B-w*H)*D+(n*(w*F-G*x)*D+o*(x*H-F*B)*D)));break}else{g[b+1192>>2]=-+K(+k,+m);g[b+1196>>2]=-1.5707963705062866;f=0.0;break}else{g[b+1192>>2]=+K(+k,+m);g[b+1196>>2]=1.5707963705062866;f=0.0}while(0);g[b+1200>>2]=f;g[b+1236>>2]=0.0;x=F*(n*F-p*H)-G*(o*H-n*G);y=H*(o*H-n*G)-F*(p*G-o*F);z=G*(p*G-o*F)-H*(n*F-p*H);g[b+1220>>2]=0.0;B=o*(o*H-n*G)-p*(n*F-p*H);D=p*(p*G-o*F)-n*(o*H-n*G);E=n*(n*F-p*H)-o*(p*G-o*F);g[b+1252>>2]=0.0;A=1.0/+C(+(x*x+y*y+z*z));g[b+1208>>2]=x*A;g[b+1212>>2]=y*A;g[b+1216>>2]=z*A;A=1.0/+C(+((p*G-o*F)*(p*G-o*F)+(n*F-p*H)*(n*F-p*H)+(o*H-n*G)*(o*H-n*G)));g[b+1224>>2]=(p*G-o*F)*A;g[b+1228>>2]=(n*F-p*H)*A;g[b+1232>>2]=(o*H-n*G)*A;H=1.0/+C(+(B*B+D*D+E*E));g[b+1240>>2]=B*H;g[b+1244>>2]=D*H;g[b+1248>>2]=E*H;if(!(a[b+1301>>0]|0))return;G=+g[(c[b+28>>2]|0)+344>>2];H=+g[(c[b+32>>2]|0)+344>>2];a[b+1280>>0]=(G<1.1920928955078125e-07|H<1.1920928955078125e-07)&1;H=G+H>0.0?H/(G+H):.5;g[b+1272>>2]=H;g[b+1276>>2]=1.0-H;return}function cd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;x=l;l=l+80|0;e=c[b+8>>2]|0;if((e|0)>0){g=0;do{f=c[(c[b+16>>2]|0)+(g<<2)>>2]|0;if((c[f+236>>2]|0)==1){Gb[c[(c[f>>2]|0)+24>>2]&127](f,d);e=c[b+8>>2]|0}g=g+1|0}while((g|0)<(e|0))}a[x+16>>0]=1;c[x+12>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;a[x+36>>0]=1;c[x+32>>2]=0;c[x+24>>2]=0;c[x+28>>2]=0;a[x+56>>0]=1;c[x+52>>2]=0;c[x+44>>2]=0;c[x+48>>2]=0;a[x+76>>0]=1;c[x+72>>2]=0;c[x+64>>2]=0;c[x+68>>2]=0;if((e|0)<=0){Zi(x);l=x;return}i=0;j=0;g=0;f=0;r=0;while(1){q=c[(c[(c[b+16>>2]|0)+(r<<2)>>2]|0)+192>>2]|0;o=(q+~(q<<15)>>10^q+~(q<<15))*9|0;o=(o>>6^o)+~((o>>6^o)<<11)>>16^(o>>6^o)+~((o>>6^o)<<11);n=o&i+-1;m=n>>>0>>0;a:do if(m){h=c[g+(n<<2)>>2]|0;if((h|0)!=-1){k=c[x+72>>2]|0;while(1){if((q|0)==(c[k+(h<<3)>>2]|0)){p=13;break}j=c[f+(h<<2)>>2]|0;if((j|0)==-1)break;else h=j}if((p|0)==13?(p=0,(c[x+52>>2]|0)+(h<<2)|0):0)break;if(!m){p=20;break}}e=c[g+(n<<2)>>2]|0;if((e|0)!=-1){h=c[x+72>>2]|0;while(1){if((q|0)==(c[h+(e<<3)>>2]|0))break;e=c[f+(e<<2)>>2]|0;if((e|0)==-1){p=20;break a}}c[(c[x+52>>2]|0)+(e<<2)>>2]=q;e=i;p=78}else p=20}else p=20;while(0);if((p|0)==20){p=0;m=c[x+44>>2]|0;if((m|0)==(i|0)){e=i|0?i<<1:1;if((i|0)<(e|0)){if((e|0)!=0?(c[6472]=(c[6472]|0)+1,s=ic((e<<2|3)+16|0)|0,(s|0)!=0):0){c[(s+4+15&-16)+-4>>2]=s;g=s+4+15&-16}else g=0;if((i|0)>0){f=0;do{c[g+(f<<2)>>2]=c[(c[x+52>>2]|0)+(f<<2)>>2];f=f+1|0}while((f|0)!=(i|0))}f=c[x+52>>2]|0;if(f|0){if(a[x+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[x+52>>2]=0}a[x+56>>0]=1;c[x+52>>2]=g;c[x+48>>2]=e;f=i}else{e=i;f=i}}else{e=i;f=m}c[(c[x+52>>2]|0)+(f<<2)>>2]=q;c[x+44>>2]=f+1;f=c[x+64>>2]|0;if((f|0)==(c[x+68>>2]|0)?(w=f|0?f<<1:1,(f|0)<(w|0)):0){if((w|0)!=0?(c[6472]=(c[6472]|0)+1,u=ic((w<<3|3)+16|0)|0,(u|0)!=0):0){c[(u+4+15&-16)+-4>>2]=u;g=u+4+15&-16}else g=0;if((f|0)>0){e=0;do{h=(c[x+72>>2]|0)+(e<<3)|0;j=c[h+4>>2]|0;k=g+(e<<3)|0;c[k>>2]=c[h>>2];c[k+4>>2]=j;e=e+1|0}while((e|0)!=(f|0))}e=c[x+72>>2]|0;if(e|0){if(a[x+76>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[x+72>>2]=0}a[x+76>>0]=1;c[x+72>>2]=g;c[x+68>>2]=w;f=c[x+64>>2]|0;e=c[x+48>>2]|0}k=(c[x+72>>2]|0)+(f<<3)|0;c[k>>2]=q;c[k+4>>2]=0;c[x+64>>2]=f+1;if((i|0)<(e|0)){k=c[x+4>>2]|0;do if((k|0)<(e|0)){if((c[x+8>>2]|0)<(e|0)){if((e|0)!=0?(c[6472]=(c[6472]|0)+1,t=ic((e<<2|3)+16|0)|0,(t|0)!=0):0){c[(t+4+15&-16)+-4>>2]=t;f=t+4+15&-16}else f=0;g=c[x+12>>2]|0;if((k|0)>0){h=0;do{c[f+(h<<2)>>2]=c[g+(h<<2)>>2];h=h+1|0}while((h|0)!=(k|0));if(a[x+16>>0]|0)p=55}else if(!((g|0)==0|(a[x+16>>0]|0)==0))p=55;if((p|0)==55){p=0;c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}a[x+16>>0]=1;c[x+12>>2]=f;c[x+8>>2]=e}else f=c[x+12>>2]|0;j=e<<2;Nk(f+(k<<2)|0,0,j-(k<<2)|0)|0;c[x+4>>2]=e;i=c[x+24>>2]|0;if((i|0)<(e|0)){if((c[x+28>>2]|0)<(e|0)){if((e|0)!=0?(c[6472]=(c[6472]|0)+1,v=ic((j|3)+16|0)|0,(v|0)!=0):0){c[(v+4+15&-16)+-4>>2]=v;f=v+4+15&-16}else f=0;g=c[x+32>>2]|0;if((i|0)>0){h=0;do{c[f+(h<<2)>>2]=c[g+(h<<2)>>2];h=h+1|0}while((h|0)!=(i|0));if(a[x+36>>0]|0)p=67}else if(!((g|0)==0|(a[x+36>>0]|0)==0))p=67;if((p|0)==67){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}a[x+36>>0]=1;c[x+32>>2]=f;c[x+28>>2]=e}else f=c[x+32>>2]|0;Nk(f+(i<<2)|0,0,j-(i<<2)|0)|0}c[x+24>>2]=e;if((e|0)>0){Nk(c[x+12>>2]|0,-1,j|0)|0;Nk(c[x+32>>2]|0,-1,j|0)|0}if((k|0)<=0){e=c[x+48>>2]|0;break}f=c[x+72>>2]|0;g=c[x+12>>2]|0;h=c[x+32>>2]|0;e=c[x+48>>2]|0;i=0;do{p=c[f+(i<<3)>>2]|0;p=(p+~(p<<15)>>10^p+~(p<<15))*9|0;p=g+((((p>>6^p)+~((p>>6^p)<<11)>>16^(p>>6^p)+~((p>>6^p)<<11))&e+-1)<<2)|0;c[h+(i<<2)>>2]=c[p>>2];c[p>>2]=i;i=i+1|0}while((i|0)!=(k|0))}while(0);f=e;e=o&e+-1}else{f=e;e=n}g=c[x+12>>2]|0;e=g+(e<<2)|0;p=c[x+32>>2]|0;c[p+(m<<2)>>2]=c[e>>2];c[e>>2]=m;e=f;f=p;p=78}if((p|0)==78){p=0;Gb[c[(c[q>>2]|0)+60>>2]&127](q,d);i=e;e=c[b+8>>2]|0}h=r+1|0;if((h|0)>=(e|0))break;j=c[x+4>>2]|0;r=h}Zi(x);l=x;return}function dd(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;r=l;l=l+32|0;Xf(b+4|0,((O(c[b+152>>2]|0,c[b+16>>2]|0)|0)/100|0)+1|0);if(c[b+164>>2]|0){p=((O(c[b+148>>2]|0,c[b+76>>2]|0)|0)/100|0)+1|0;Xf(b+64|0,p);p=(c[b+164>>2]|0)-p|0;c[b+164>>2]=(p|0)>0?p:0}e=((c[b+144>>2]|0)+1|0)%2|0;c[b+144>>2]=e;e=c[b+124+(e<<2)>>2]|0;if(e|0){do{j=e+56|0;m=e;e=c[j>>2]|0;i=c[m+52>>2]|0;if(!i)i=b+124+(c[m+60>>2]<<2)|0;else i=i+56|0;c[i>>2]=e;i=c[j>>2]|0;if(i|0)c[i+52>>2]=c[m+52>>2];c[m+52>>2]=0;c[j>>2]=c[b+132>>2];i=c[b+132>>2]|0;if(i|0)c[i+52>>2]=m;c[b+132>>2]=m;i=c[m+48>>2]|0;Sg(b+4|0,i)|0;j=c[b+8>>2]|0;if(j|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0)}c[b+8>>2]=i;c[b+16>>2]=(c[b+16>>2]|0)+-1;c[r>>2]=c[m+16>>2];c[r+4>>2]=c[m+16+4>>2];c[r+8>>2]=c[m+16+8>>2];c[r+12>>2]=c[m+16+12>>2];c[r+16>>2]=c[m+32>>2];c[r+16+4>>2]=c[m+32+4>>2];c[r+16+8>>2]=c[m+32+8>>2];c[r+16+12>>2]=c[m+32+12>>2];i=c[b+68>>2]|0;if(!i){c[6472]=(c[6472]|0)+1;i=ic(63)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}j=i;k=j+44|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0))}else c[b+68>>2]=0;c[i+32>>2]=0;c[i+36>>2]=m;c[i+40>>2]=0;c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[i+16>>2]=c[r+16>>2];c[i+20>>2]=c[r+20>>2];c[i+24>>2]=c[r+24>>2];c[i+28>>2]=c[r+28>>2];af(b+64|0,c[b+64>>2]|0,i);j=(c[b+76>>2]|0)+1|0;c[b+76>>2]=j;c[m+48>>2]=i;c[m+60>>2]=2}while((e|0)!=0);c[b+164>>2]=j;a[b+194>>0]=1}c[r>>2]=9096;c[r+4>>2]=b;if(a[b+193>>0]|0?(he(b+4|0,c[b+4>>2]|0,c[b+64>>2]|0,r),a[b+193>>0]|0):0){p=c[b+4>>2]|0;he(b+4|0,p,p,r)}if(a[b+194>>0]|0?(n=c[b+136>>2]|0,n=qb[c[(c[n>>2]|0)+28>>2]&127](n)|0,f=c[n+4>>2]|0,(f|0)>0):0){e=(O(c[b+156>>2]|0,f)|0)/100|0;p=c[b+160>>2]|0;e=(p|0)>(e|0)?p:e;e=(f|0)<(e|0)?f:e;if((e|0)>0){i=0;do{k=((c[b+184>>2]|0)+i|0)%(f|0)|0;o=c[n+12>>2]|0;j=c[o+(k<<4)>>2]|0;k=c[o+(k<<4)+4>>2]|0;o=c[j+48>>2]|0;p=c[k+48>>2]|0;if(!(((((+g[o>>2]<=+g[p+16>>2]?+g[o+16>>2]>=+g[p>>2]:0)?+g[o+4>>2]<=+g[p+20>>2]:0)?+g[o+20>>2]>=+g[p+4>>2]:0)?+g[o+8>>2]<=+g[p+24>>2]:0)?+g[o+24>>2]>=+g[p+8>>2]:0)){f=c[b+136>>2]|0;vb[c[(c[f>>2]|0)+12>>2]&31](f,j,k,d)|0;f=c[n+4>>2]|0;i=i+-1|0;e=e+-1|0}i=i+1|0}while((i|0)<(e|0));if((f|0)>0)q=37;else e=0}else q=37;if((q|0)==37)e=((c[b+184>>2]|0)+e|0)%(f|0)|0;c[b+184>>2]=e}c[b+180>>2]=(c[b+180>>2]|0)+1;c[b+160>>2]=1;a[b+194>>0]=0;f=c[b+168>>2]|0;e=c[b+172>>2]|0;if(!f)h=0.0;else h=+(e>>>0)/+(f>>>0);g[b+176>>2]=h;c[b+172>>2]=e>>>1;c[b+168>>2]=f>>>1;p=c[b+136>>2]|0;if(!(qb[c[(c[p>>2]|0)+56>>2]&127](p)|0)){l=r;return}p=c[b+136>>2]|0;p=qb[c[(c[p>>2]|0)+28>>2]&127](p)|0;e=c[p+4>>2]|0;if((e|0)>1){Id(p,0,e+-1|0);e=c[p+4>>2]|0}if((e|0)>0){n=0;m=0;o=0;i=0;while(1){k=c[p+12>>2]|0;j=k+(n<<4)|0;s=o;o=c[j>>2]|0;k=k+(n<<4)+4|0;f=c[k>>2]|0;if(!((o|0)==(s|0)&(f|0)==(i|0))){i=c[o+48>>2]|0;s=c[f+48>>2]|0;if(((((+g[i>>2]<=+g[s+16>>2]?+g[i+16>>2]>=+g[s>>2]:0)?+g[i+4>>2]<=+g[s+20>>2]:0)?+g[i+20>>2]>=+g[s+4>>2]:0)?+g[i+8>>2]<=+g[s+24>>2]:0)?+g[i+24>>2]>=+g[s+8>>2]:0)i=m;else q=53}else{f=i;q=53}if((q|0)==53){q=0;e=c[b+136>>2]|0;Kb[c[(c[e>>2]|0)+32>>2]&127](e,j,d);c[j>>2]=0;c[k>>2]=0;e=c[p+4>>2]|0;i=m+1|0}n=n+1|0;if((n|0)>=(e|0))break;else{m=i;i=f}}if((e|0)>1){Id(p,0,e+-1|0);e=c[p+4>>2]|0}k=e-i|0;if((i|0)<0){if((c[p+8>>2]|0)<(k|0)){if(!k){i=e;j=0}else{c[6472]=(c[6472]|0)+1;f=ic((k<<4|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}i=c[p+4>>2]|0;j=f}if((i|0)>0){f=0;do{s=c[p+12>>2]|0;c[j+(f<<4)>>2]=c[s+(f<<4)>>2];c[j+(f<<4)+4>>2]=c[s+(f<<4)+4>>2];c[j+(f<<4)+8>>2]=c[s+(f<<4)+8>>2];c[j+(f<<4)+12>>2]=c[s+(f<<4)+12>>2];f=f+1|0}while((f|0)!=(i|0))}f=c[p+12>>2]|0;if(f|0){if(a[p+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[p+12>>2]=0}a[p+16>>0]=1;c[p+12>>2]=j;c[p+8>>2]=k}do{s=(c[p+12>>2]|0)+(e<<4)|0;e=e+1|0;c[s>>2]=0;c[s+4>>2]=0;c[s+8>>2]=0;c[s+12>>2]=0}while((e|0)!=(k|0));e=k}else e=k}c[p+4>>2]=e;l=r;return}function ed(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0;q=c[b+28>>2]|0;j=c[b+32>>2]|0;lc(b,q+4|0,j+4|0,q+264|0,j+264|0);r=c[d+8>>2]|0;g[r>>2]=1.0;o=c[d+24>>2]|0;g[r+(o+1<<2)>>2]=1.0;g[r+((o<<1)+2<<2)>>2]=1.0;n=+g[b+348>>2];u=+g[b+352>>2];k=+g[b+356>>2];s=+g[q+4>>2]*n+ +g[q+8>>2]*u+ +g[q+12>>2]*k;m=n*+g[q+20>>2]+u*+g[q+24>>2]+k*+g[q+28>>2];k=n*+g[q+36>>2]+u*+g[q+40>>2]+k*+g[q+44>>2];r=c[d+12>>2]|0;c[r>>2]=0;g[r+4>>2]=k;g[r+8>>2]=-m;g[r+12>>2]=0.0;g[r+(o<<2)>>2]=-k;c[r+(o<<2)+4>>2]=0;g[r+(o<<2)+8>>2]=s;g[r+(o<<2)+12>>2]=0.0;g[r+(o<<1<<2)>>2]=m;g[r+(o<<1<<2)+4>>2]=-s;c[r+(o<<1<<2)+8>>2]=0;g[r+(o<<1<<2)+12>>2]=0.0;r=c[d+16>>2]|0;g[r>>2]=-1.0;g[r+(o+1<<2)>>2]=-1.0;g[r+((o<<1)+2<<2)>>2]=-1.0;u=+g[b+412>>2];n=+g[b+416>>2];f=+g[b+420>>2];t=+g[j+4>>2]*u+ +g[j+8>>2]*n+ +g[j+12>>2]*f;l=u*+g[j+20>>2]+n*+g[j+24>>2]+f*+g[j+28>>2];f=u*+g[j+36>>2]+n*+g[j+40>>2]+f*+g[j+44>>2];o=c[d+20>>2]|0;r=c[d+24>>2]|0;c[o>>2]=0;g[o+4>>2]=-f;g[o+8>>2]=l;g[o+12>>2]=0.0;g[o+(r<<2)>>2]=f;c[o+(r<<2)+4>>2]=0;g[o+(r<<2)+8>>2]=-t;g[o+(r<<2)+12>>2]=0.0;g[o+(r<<1<<2)>>2]=-l;g[o+(r<<1<<2)+4>>2]=t;c[o+(r<<1<<2)+8>>2]=0;g[o+(r<<1<<2)+12>>2]=0.0;p=c[b+592>>2]|0;n=+g[((p&2|0)==0?d+4|0:b+600|0)>>2]*+g[d>>2];i=c[d+28>>2]|0;h=c[d+36>>2]|0;e=c[d+40>>2]|0;g[i>>2]=n*(t+ +g[j+52>>2]-s-+g[q+52>>2]);g[h>>2]=-3402823466385288598117041.0e14;g[e>>2]=3402823466385288598117041.0e14;if(!(p&1)){g[i+(r<<2)>>2]=n*(l+ +g[j+56>>2]-m-+g[q+56>>2]);g[h+(r<<2)>>2]=-3402823466385288598117041.0e14;g[e+(r<<2)>>2]=3402823466385288598117041.0e14;g[i+(r<<1<<2)>>2]=n*(f+ +g[j+60>>2]-k-+g[q+60>>2]);g[h+(r<<1<<2)>>2]=-3402823466385288598117041.0e14;g[e+(r<<1<<2)>>2]=3402823466385288598117041.0e14}else{v=c[d+32>>2]|0;c[v>>2]=c[b+596>>2];g[i+(r<<2)>>2]=n*(l+ +g[j+56>>2]-m-+g[q+56>>2]);g[h+(r<<2)>>2]=-3402823466385288598117041.0e14;g[e+(r<<2)>>2]=3402823466385288598117041.0e14;c[v+(r<<2)>>2]=c[b+596>>2];g[i+(r<<1<<2)>>2]=n*(f+ +g[j+60>>2]-k-+g[q+60>>2]);g[h+(r<<1<<2)>>2]=-3402823466385288598117041.0e14;g[e+(r<<1<<2)>>2]=3402823466385288598117041.0e14;c[v+(r<<1<<2)>>2]=c[b+596>>2]}do if(!(a[b+526>>0]|0))j=r*3|0;else{j=c[d+12>>2]|0;u=+g[b+456>>2];if(+g[b+444>>2]>2]>2];y=+g[q+8>>2];x=+g[q+12>>2];D=+g[b+304>>2];C=+g[b+320>>2];B=+g[b+336>>2];l=+g[b+308>>2];n=+g[b+324>>2];t=+g[b+340>>2];w=+g[q+20>>2];f=+g[q+24>>2];k=+g[q+28>>2];m=+g[q+36>>2];s=+g[q+40>>2];u=+g[q+44>>2];g[j+(r*3<<2)>>2]=z*D+y*C+x*B;g[j+((r*3|0)+1<<2)>>2]=D*w+C*f+B*k;g[j+((r*3|0)+2<<2)>>2]=D*m+C*s+B*u;g[j+(r<<2<<2)>>2]=z*l+y*n+x*t;g[j+((r<<2|1)<<2)>>2]=l*w+n*f+t*k;g[j+((r<<2|2)<<2)>>2]=l*m+n*s+t*u;g[o+(r*3<<2)>>2]=-(z*D+y*C+x*B);g[o+((r*3|0)+1<<2)>>2]=-(D*w+C*f+B*k);g[o+((r*3|0)+2<<2)>>2]=-(D*m+C*s+B*u);g[o+(r<<2<<2)>>2]=-(z*l+y*n+x*t);g[o+((r<<2|1)<<2)>>2]=-(l*w+n*f+t*k);g[o+((r<<2|2)<<2)>>2]=-(l*m+n*s+t*u);A=+g[d>>2]*+g[b+436>>2];i=c[d+28>>2]|0;g[i+(r*3<<2)>>2]=A*((z*D+y*C+x*B)*+g[b+460>>2]+(D*w+C*f+B*k)*+g[b+464>>2]+(D*m+C*s+B*u)*+g[b+468>>2]);g[i+(r<<2<<2)>>2]=A*((z*l+y*n+x*t)*+g[b+460>>2]+(l*w+n*f+t*k)*+g[b+464>>2]+(l*m+n*s+t*u)*+g[b+468>>2]);h=c[d+36>>2]|0;g[h+(r*3<<2)>>2]=-3402823466385288598117041.0e14;e=c[d+40>>2]|0;g[e+(r*3<<2)>>2]=3402823466385288598117041.0e14;g[h+(r<<2<<2)>>2]=-3402823466385288598117041.0e14;g[e+(r<<2<<2)>>2]=3402823466385288598117041.0e14;j=(c[d+24>>2]|0)+(r<<2)|0;break}D=+g[b+436>>2];B=D*+g[b+460>>2]*D;C=D*D*+g[b+464>>2];D=D*D*+g[b+468>>2];g[j+(r*3<<2)>>2]=B;g[j+((r*3|0)+1<<2)>>2]=C;g[j+((r*3|0)+2<<2)>>2]=D;g[o+(r*3<<2)>>2]=-B;g[o+((r*3|0)+1<<2)>>2]=-C;g[o+((r*3|0)+2<<2)>>2]=-D;g[i+(r*3<<2)>>2]=+g[d>>2]*+g[b+432>>2]*+g[b+504>>2];if(p&4|0)c[(c[d+32>>2]|0)+(r*3<<2)>>2]=c[b+604>>2];g[h+(r*3<<2)>>2]=0.0;g[e+(r*3<<2)>>2]=3402823466385288598117041.0e14;j=r<<2}while(0);if(!(a[b+525>>0]|0))return;D=+g[b+436>>2];B=D*+g[b+476>>2]*D;C=D*D*+g[b+480>>2];D=D*D*+g[b+484>>2];p=c[d+12>>2]|0;r=c[d+20>>2]|0;g[p+(j<<2)>>2]=B;q=j+1|0;g[p+(q<<2)>>2]=C;v=j+2|0;g[p+(v<<2)>>2]=D;g[r+(j<<2)>>2]=-B;g[r+(q<<2)>>2]=-C;g[r+(v<<2)>>2]=-D;g[i+(j<<2)>>2]=+g[d>>2]*+g[b+432>>2]*+g[b+508>>2];if(c[b+592>>2]&4|0)c[(c[d+32>>2]|0)+(j<<2)>>2]=c[b+604>>2];do if(+g[b+452>>2]>0.0){h=h+(j<<2)|0;e=c[d+40>>2]|0;if(+g[b+508>>2]>0.0){g[h>>2]=0.0;f=3402823466385288598117041.0e14;break}else{g[h>>2]=-3402823466385288598117041.0e14;f=0.0;break}}else{g[h+(j<<2)>>2]=-3402823466385288598117041.0e14;f=3402823466385288598117041.0e14}while(0);g[e+(j<<2)>>2]=f;return}function fd(b,d,e,f,h,i,j,k,l,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,D=0;if((j|0)<2|(k|0)<2){m=0;return m|0}r=O(k,j)|0;c[6472]=(c[6472]|0)+1;b=ic(r>>>0>268435455?18:(r<<4|3)+16|0)|0;if(!b)q=0;else{c[(b+4+15&-16)+-4>>2]=b;q=b+4+15&-16}p=XH(r>>>0>1073741823?-1:r<<2)|0;if((k|0)>0?(j|0)>0:0){n=0;do{A=+(n|0)/+(k+-1|0);u=+g[e>>2];u=u+A*(+g[h>>2]-u);v=+g[e+4>>2];v=v+A*(+g[h+4>>2]-v);w=+g[e+8>>2];w=w+A*(+g[h+8>>2]-w);x=+g[f>>2];y=+g[f+4>>2];z=+g[f+8>>2];o=O(n,j)|0;x=x+A*(+g[i>>2]-x)-u;y=y+A*(+g[i+4>>2]-y)-v;z=z+A*(+g[i+8>>2]-z)-w;b=0;do{A=+(b|0)/+(j+-1|0);t=b+o|0;g[q+(t<<4)>>2]=u+x*A;g[q+(t<<4)+4>>2]=v+y*A;g[q+(t<<4)+8>>2]=w+z*A;g[q+(t<<4)+12>>2]=0.0;g[p+(t<<2)>>2]=1.0;b=b+1|0}while((b|0)!=(j|0));n=n+1|0}while((n|0)!=(k|0))}c[6472]=(c[6472]|0)+1;b=ic(1271)|0;if(!b)b=0;else{c[(b+4+15&-16)+-4>>2]=b;b=b+4+15&-16}qc(b,d,r,q,p);if(l&1|0){g[(c[b+720>>2]|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&2|0){g[(c[b+720>>2]|0)+((j+-1|0)*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&4|0){t=O(k+-1|0,j)|0;g[(c[b+720>>2]|0)+(t*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(l&8|0){t=j+-1+(O(k+-1|0,j)|0)|0;g[(c[b+720>>2]|0)+(t*104|0)+88>>2]=0.0;a[b+924>>0]=1}if(q|0){c[6473]=(c[6473]|0)+1;nd(c[q+-4>>2]|0)}YH(p);if((k|0)<=0){m=b;return m|0}s=b+720|0;t=b+732|0;l=b+740|0;d=b+924|0;p=0;while(1){a:do if((j|0)>0){r=O(p,j)|0;n=p+1|0;q=O(n,j)|0;if((n|0)<(k|0))h=0;else{o=0;while(1){e=o;o=o+1|0;if((o|0)<(j|0)){i=o+r|0;h=c[s>>2]|0;Rh(b,0);q=(c[t>>2]|0)+-1|0;p=c[l>>2]|0;c[p+(q*52|0)+8>>2]=h+((e+r|0)*104|0);c[p+(q*52|0)+12>>2]=h+(i*104|0);y=+g[h+((e+r|0)*104|0)+8>>2]-+g[h+(i*104|0)+8>>2];z=+g[h+((e+r|0)*104|0)+12>>2]-+g[h+(i*104|0)+12>>2];A=+g[h+((e+r|0)*104|0)+16>>2]-+g[h+(i*104|0)+16>>2];g[p+(q*52|0)+16>>2]=+C(+(y*y+z*z+A*A));a[d>>0]=1}if((o|0)==(j|0))break a}}do{o=h+r|0;i=h;h=h+1|0;do if((h|0)<(j|0)){e=h+r|0;B=c[s>>2]|0;Rh(b,0);D=(c[t>>2]|0)+-1|0;f=c[l>>2]|0;c[f+(D*52|0)+8>>2]=B+(o*104|0);c[f+(D*52|0)+12>>2]=B+(e*104|0);A=+g[B+(o*104|0)+8>>2]-+g[B+(e*104|0)+8>>2];z=+g[B+(o*104|0)+12>>2]-+g[B+(e*104|0)+12>>2];y=+g[B+(o*104|0)+16>>2]-+g[B+(e*104|0)+16>>2];g[f+(D*52|0)+16>>2]=+C(+(A*A+z*z+y*y));a[d>>0]=1;D=c[s>>2]|0;Rh(b,0);f=(c[t>>2]|0)+-1|0;B=c[l>>2]|0;c[B+(f*52|0)+8>>2]=D+(o*104|0);c[B+(f*52|0)+12>>2]=D+((i+q|0)*104|0);y=+g[D+(o*104|0)+8>>2]-+g[D+((i+q|0)*104|0)+8>>2];z=+g[D+(o*104|0)+12>>2]-+g[D+((i+q|0)*104|0)+12>>2];A=+g[D+(o*104|0)+16>>2]-+g[D+((i+q|0)*104|0)+16>>2];g[B+(f*52|0)+16>>2]=+C(+(y*y+z*z+A*A));a[d>>0]=1;if(!(i+p&1)){Qf(b,i+q|0,o,e,0);Qf(b,i+q|0,e,h+q|0,0);if(!m)break;f=c[s>>2]|0;Rh(b,0);D=(c[t>>2]|0)+-1|0;B=c[l>>2]|0;c[B+(D*52|0)+8>>2]=f+(e*104|0);c[B+(D*52|0)+12>>2]=f+((i+q|0)*104|0);y=+g[f+(e*104|0)+8>>2]-+g[f+((i+q|0)*104|0)+8>>2];z=+g[f+(e*104|0)+12>>2]-+g[f+((i+q|0)*104|0)+12>>2];A=+g[f+(e*104|0)+16>>2]-+g[f+((i+q|0)*104|0)+16>>2];g[B+(D*52|0)+16>>2]=+C(+(y*y+z*z+A*A));a[d>>0]=1;break}else{f=h+q|0;Qf(b,o,e,f,0);Qf(b,o,f,i+q|0,0);if(!m)break;i=c[s>>2]|0;Rh(b,0);D=(c[t>>2]|0)+-1|0;B=c[l>>2]|0;c[B+(D*52|0)+8>>2]=i+(o*104|0);c[B+(D*52|0)+12>>2]=i+(f*104|0);y=+g[i+(o*104|0)+8>>2]-+g[i+(f*104|0)+8>>2];z=+g[i+(o*104|0)+12>>2]-+g[i+(f*104|0)+12>>2];A=+g[i+(o*104|0)+16>>2]-+g[i+(f*104|0)+16>>2];g[B+(D*52|0)+16>>2]=+C(+(y*y+z*z+A*A));a[d>>0]=1;break}}else{f=c[s>>2]|0;Rh(b,0);D=(c[t>>2]|0)+-1|0;B=c[l>>2]|0;c[B+(D*52|0)+8>>2]=f+(o*104|0);c[B+(D*52|0)+12>>2]=f+((i+q|0)*104|0);y=+g[f+(o*104|0)+8>>2]-+g[f+((i+q|0)*104|0)+8>>2];z=+g[f+(o*104|0)+12>>2]-+g[f+((i+q|0)*104|0)+12>>2];A=+g[f+(o*104|0)+16>>2]-+g[f+((i+q|0)*104|0)+16>>2];g[B+(D*52|0)+16>>2]=+C(+(y*y+z*z+A*A));a[d>>0]=1}while(0)}while((h|0)!=(j|0))}else n=p+1|0;while(0);if((n|0)==(k|0))break;else p=n}return b|0}function gd(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;var i=0.0,j=0.0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0;B=l;l=l+272|0;c[B+128>>2]=c[d>>2];c[B+128+4>>2]=c[d+4>>2];c[B+128+8>>2]=c[d+8>>2];c[B+128+12>>2]=c[d+12>>2];c[B+128+16>>2]=c[d+16>>2];c[B+128+16+4>>2]=c[d+16+4>>2];c[B+128+16+8>>2]=c[d+16+8>>2];c[B+128+16+12>>2]=c[d+16+12>>2];c[B+128+32>>2]=c[d+32>>2];c[B+128+32+4>>2]=c[d+32+4>>2];c[B+128+32+8>>2]=c[d+32+8>>2];c[B+128+32+12>>2]=c[d+32+12>>2];c[B+128+48>>2]=c[d+48>>2];c[B+128+48+4>>2]=c[d+48+4>>2];c[B+128+48+8>>2]=c[d+48+8>>2];c[B+128+48+12>>2]=c[d+48+12>>2];c[B+64>>2]=c[e>>2];c[B+64+4>>2]=c[e+4>>2];c[B+64+8>>2]=c[e+8>>2];c[B+64+12>>2]=c[e+12>>2];c[B+64+16>>2]=c[e+16>>2];c[B+64+16+4>>2]=c[e+16+4>>2];c[B+64+16+8>>2]=c[e+16+8>>2];c[B+64+16+12>>2]=c[e+16+12>>2];c[B+64+32>>2]=c[e+32>>2];c[B+64+32+4>>2]=c[e+32+4>>2];c[B+64+32+8>>2]=c[e+32+8>>2];c[B+64+32+12>>2]=c[e+32+12>>2];c[B+64+48>>2]=c[e+48>>2];c[B+64+48+4>>2]=c[e+48+4>>2];c[B+64+48+8>>2]=c[e+48+8>>2];c[B+64+48+12>>2]=c[e+48+12>>2];i=+g[B+64+52>>2]-+g[B+128+52>>2];G=+g[B+64+56>>2]-+g[B+128+56>>2];g[B+16>>2]=+g[B+64+48>>2]-+g[B+128+48>>2];g[B+16+4>>2]=i;g[B+16+8>>2]=G;g[B+16+12>>2]=0.0;vf(B+128|0,B+64|0,B+208|0,B+192|0);G=+g[B+192>>2];i=G*+g[B+208+4>>2];D=G*+g[B+208+8>>2];g[B>>2]=+g[B+208>>2]*G;g[B+4>>2]=i;g[B+8>>2]=D;g[B+12>>2]=0.0;c[B+208+48>>2]=0;c[B+208+48+4>>2]=0;c[B+208+48+8>>2]=0;c[B+208+48+12>>2]=0;lh(B+128|0,B+192|0);D=+g[B+192>>2];i=+g[B+192+4>>2];G=+g[B+192+8>>2];E=+g[B+192+12>>2];C=D*(2.0/(D*D+i*i+G*G+E*E));j=i*(2.0/(D*D+i*i+G*G+E*E));F=G*(2.0/(D*D+i*i+G*G+E*E));g[B+208>>2]=1.0-(i*j+G*F);g[B+208+4>>2]=D*j-E*F;g[B+208+8>>2]=D*F+E*j;g[B+208+12>>2]=0.0;g[B+208+16>>2]=D*j+E*F;g[B+208+20>>2]=1.0-(D*C+G*F);g[B+208+24>>2]=i*F-E*C;g[B+208+28>>2]=0.0;g[B+208+32>>2]=D*F-E*j;g[B+208+36>>2]=i*F+E*C;g[B+208+40>>2]=1.0-(D*C+i*j);g[B+208+44>>2]=0.0;_g(b,B+208|0,B+16|0,B,B+48|0,B+32|0);if((c[a+268>>2]|0)<=0){l=B;return}s=0;do{k=c[(c[a+276>>2]|0)+(s<<2)>>2]|0;if(sb[c[(c[f>>2]|0)+8>>2]&31](f,c[k+188>>2]|0)|0?(u=c[k+192>>2]|0,Nb[c[(c[u>>2]|0)+8>>2]&127](u,k+4|0,B+192|0,B+16|0),m=+g[B+192>>2]+ +g[B+48>>2],q=+g[B+192+4>>2]+ +g[B+48+4>>2],o=+g[B+192+8>>2]+ +g[B+48+8>>2],g[B+192>>2]=m,g[B+192+4>>2]=q,g[B+192+8>>2]=o,g[B+192+12>>2]=0.0,n=+g[B+16>>2]+ +g[B+32>>2],r=+g[B+16+4>>2]+ +g[B+32+4>>2],p=+g[B+16+8>>2]+ +g[B+32+8>>2],g[B+16>>2]=n,g[B+16+4>>2]=r,g[B+16+8>>2]=p,g[B+16+12>>2]=0.0,w=+g[d+48>>2]-(n+m)*.5,z=+g[d+52>>2]-(r+q)*.5,x=+g[d+56>>2]-(p+o)*.5,v=+g[e+48>>2]-(n+m)*.5,A=+g[e+52>>2]-(r+q)*.5,y=+g[e+56>>2]-(p+o)*.5,u=w<-((n-m)*.5)|(w>(n-m)*.5?8:0)|(z<-((r-q)*.5)?2:0)|(z>(r-q)*.5?16:0)|(x<-((p-o)*.5)?4:0)|(x>(p-o)*.5?32:0),t=v<-((n-m)*.5)|(v>(n-m)*.5?8:0)|(A<-((r-q)*.5)?2:0)|(A>(r-q)*.5?16:0)|(y<-((p-o)*.5)?4:0)|(y>(p-o)*.5?32:0),(u&t|0)==0):0){if(w<-((n-m)*.5))if(!((-w-(n-m)*.5)/(v-w)>=0.0)){i=1.0;j=0.0}else{i=1.0;j=(-w-(n-m)*.5)/(v-w)}else if(v<-((n-m)*.5)?(-w-(n-m)*.5)/(v-w)<1.0:0){i=(-w-(n-m)*.5)/(v-w);j=0.0}else{i=1.0;j=0.0}if(z<-((r-q)*.5)){if(j<=(-z-(r-q)*.5)/(A-z))j=(-z-(r-q)*.5)/(A-z)}else if(A<-((r-q)*.5)?(-z-(r-q)*.5)/(A-z)(n-m)*.5){if(j<=((n-m)*.5-w)/(v-w))j=((n-m)*.5-w)/(v-w)}else if(v>(n-m)*.5?((n-m)*.5-w)/(v-w)(r-q)*.5){if(j<=((r-q)*.5-z)/(A-z))j=((r-q)*.5-z)/(A-z)}else if(A>(r-q)*.5?((r-q)*.5-z)/(A-z)>2]|0;c[B+208>>2]=0;c[B+208+4>>2]=H;c[B+208+8>>2]=k;c[B+208+12>>2]=k+4;c[B+208+16>>2]=-1;c[B+208+20>>2]=-1;oc(b,B+128|0,B+64|0,B+208|0,f,h)}}s=s+1|0}while((s|0)<(c[a+268>>2]|0));l=B;return}function hd(a){a=a|0;var b=0,d=0,e=0.0,f=0.0,h=0.0,i=0,j=0.0,k=0.0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0;n=l;l=l+16|0;b=c[a+372>>2]|0;a:do switch(c[b+32>>2]|0){case 1:{i=b;d=1;b=0;while(1){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;g[n+(b<<2)>>2]=1.0;o=i+32|0;g[i+16+(d<<2)>>2]=0.0;d=(c[a+364>>2]|0)+-1|0;c[a+364>>2]=d;c[i+(c[o>>2]<<2)>>2]=c[a+348+(d<<2)>>2];d=c[o>>2]|0;c[o>>2]=d+1;e=+g[n>>2];f=+g[n+4>>2];h=+g[n+8>>2];uh(a,e,f,h,c[i+(d<<2)>>2]|0);if(hd(a)|0)break;i=c[a+372>>2]|0;o=(c[i+32>>2]|0)+-1|0;c[i+32>>2]=o;o=c[i+(o<<2)>>2]|0;i=c[a+364>>2]|0;c[a+364>>2]=i+1;c[a+348+(i<<2)>>2]=o;i=c[a+372>>2]|0;g[i+16+(c[i+32>>2]<<2)>>2]=0.0;o=(c[a+364>>2]|0)+-1|0;c[a+364>>2]=o;c[i+(c[i+32>>2]<<2)>>2]=c[a+348+(o<<2)>>2];o=c[i+32>>2]|0;c[i+32>>2]=o+1;uh(a,-e,-f,-h,c[i+(o<<2)>>2]|0);if(hd(a)|0)break;o=c[a+372>>2]|0;i=(c[o+32>>2]|0)+-1|0;c[o+32>>2]=i;i=c[o+(i<<2)>>2]|0;o=c[a+364>>2]|0;c[a+364>>2]=o+1;c[a+348+(o<<2)>>2]=i;b=b+1|0;if(b>>>0>=3)break a;d=c[a+372>>2]|0;i=d;d=c[d+32>>2]|0}o=1;l=n;return o|0}case 2:{o=c[b+4>>2]|0;b=c[b>>2]|0;j=+g[o+16>>2]-+g[b+16>>2];m=+g[o+20>>2]-+g[b+20>>2];k=+g[o+24>>2]-+g[b+24>>2];b=0;while(1){c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;g[n+(b<<2)>>2]=1.0;e=+g[n+8>>2];f=+g[n+4>>2];h=+g[n>>2];if((m*e-k*f)*(m*e-k*f)+(k*h-j*e)*(k*h-j*e)+(j*f-m*h)*(j*f-m*h)>0.0){i=c[a+372>>2]|0;g[i+16+(c[i+32>>2]<<2)>>2]=0.0;o=(c[a+364>>2]|0)+-1|0;c[a+364>>2]=o;c[i+(c[i+32>>2]<<2)>>2]=c[a+348+(o<<2)>>2];o=c[i+32>>2]|0;c[i+32>>2]=o+1;uh(a,m*e-k*f,k*h-j*e,j*f-m*h,c[i+(o<<2)>>2]|0);if(hd(a)|0)break;i=c[a+372>>2]|0;o=(c[i+32>>2]|0)+-1|0;c[i+32>>2]=o;o=c[i+(o<<2)>>2]|0;i=c[a+364>>2]|0;c[a+364>>2]=i+1;c[a+348+(i<<2)>>2]=o;i=c[a+372>>2]|0;g[i+16+(c[i+32>>2]<<2)>>2]=0.0;o=(c[a+364>>2]|0)+-1|0;c[a+364>>2]=o;c[i+(c[i+32>>2]<<2)>>2]=c[a+348+(o<<2)>>2];o=c[i+32>>2]|0;c[i+32>>2]=o+1;uh(a,-(m*e-k*f),-(k*h-j*e),-(j*f-m*h),c[i+(o<<2)>>2]|0);if(hd(a)|0)break;o=c[a+372>>2]|0;i=(c[o+32>>2]|0)+-1|0;c[o+32>>2]=i;i=c[o+(i<<2)>>2]|0;o=c[a+364>>2]|0;c[a+364>>2]=o+1;c[a+348+(o<<2)>>2]=i}b=b+1|0;if(b>>>0>=3)break a}o=1;l=n;return o|0}case 3:{o=c[b+4>>2]|0;i=c[b>>2]|0;e=+g[i+16>>2];f=+g[o+16>>2]-e;k=+g[i+20>>2];m=+g[o+20>>2]-k;h=+g[i+24>>2];j=+g[o+24>>2]-h;o=c[b+8>>2]|0;e=+g[o+16>>2]-e;k=+g[o+20>>2]-k;h=+g[o+24>>2]-h;if((m*h-j*k)*(m*h-j*k)+(j*e-f*h)*(j*e-f*h)+(f*k-m*e)*(f*k-m*e)>0.0){g[b+28>>2]=0.0;o=(c[a+364>>2]|0)+-1|0;c[a+364>>2]=o;c[b+12>>2]=c[a+348+(o<<2)>>2];o=c[b+32>>2]|0;c[b+32>>2]=o+1;uh(a,m*h-j*k,j*e-f*h,f*k-m*e,c[b+(o<<2)>>2]|0);if(hd(a)|0){o=1;l=n;return o|0}i=c[a+372>>2]|0;o=(c[i+32>>2]|0)+-1|0;c[i+32>>2]=o;o=c[i+(o<<2)>>2]|0;i=c[a+364>>2]|0;c[a+364>>2]=i+1;c[a+348+(i<<2)>>2]=o;i=c[a+372>>2]|0;g[i+16+(c[i+32>>2]<<2)>>2]=0.0;o=(c[a+364>>2]|0)+-1|0;c[a+364>>2]=o;c[i+(c[i+32>>2]<<2)>>2]=c[a+348+(o<<2)>>2];o=c[i+32>>2]|0;c[i+32>>2]=o+1;uh(a,-(m*h-j*k),-(j*e-f*h),-(f*k-m*e),c[i+(o<<2)>>2]|0);if(hd(a)|0){o=1;l=n;return o|0}else{o=c[a+372>>2]|0;i=(c[o+32>>2]|0)+-1|0;c[o+32>>2]=i;i=c[o+(i<<2)>>2]|0;o=c[a+364>>2]|0;c[a+364>>2]=o+1;c[a+348+(o<<2)>>2]=i;break a}}break}case 4:{o=c[b>>2]|0;a=c[b+12>>2]|0;m=+g[a+16>>2];r=+g[o+16>>2]-m;p=+g[a+20>>2];e=+g[o+20>>2]-p;h=+g[a+24>>2];j=+g[o+24>>2]-h;o=c[b+4>>2]|0;f=+g[o+16>>2]-m;k=+g[o+20>>2]-p;q=+g[o+24>>2]-h;o=c[b+8>>2]|0;m=+g[o+16>>2]-m;p=+g[o+20>>2]-p;h=+g[o+24>>2]-h;if(!((0.0!=0.0?1:r*k*h+(e*q*m+j*f*p-r*q*p-e*f*h)-j*k*m!=r*k*h+(e*q*m+j*f*p-r*q*p-e*f*h)-j*k*m)|r*k*h+(e*q*m+j*f*p-r*q*p-e*f*h)-j*k*m==0.0)){o=1;l=n;return o|0}break}default:{}}while(0);o=0;l=n;return o|0}function id(d,e){d=d|0;e=e|0;var f=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0;q=l;l=l+64|0;g[d+20>>2]=+h[e+32>>3];g[d+24>>2]=+h[e+40>>3];g[d+28>>2]=+h[e+48>>3];g[d+32>>2]=+h[e+56>>3];g[d+4>>2]=+h[e>>3];g[d+8>>2]=+h[e+8>>3];g[d+12>>2]=+h[e+16>>3];g[d+16>>2]=+h[e+24>>3];g[d+36>>2]=+h[e+64>>3];g[d+40>>2]=+h[e+72>>3];g[d+44>>2]=+h[e+80>>3];g[d+48>>2]=+h[e+88>>3];c[d+56>>2]=c[e+96>>2];a[d+60>>0]=(c[e+100>>2]|0)!=0&1;p=c[e+104>>2]|0;k=q;n=k+64|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));o=c[d+88>>2]|0;if((o|0)<(p|0)){if((c[d+92>>2]|0)<(p|0)){if(!p){i=o;j=0}else{c[6472]=(c[6472]|0)+1;f=ic(p<<6|19)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}i=c[d+88>>2]|0;j=f}if((i|0)>0){f=0;do{k=j+(f<<6)|0;m=(c[d+96>>2]|0)+(f<<6)|0;n=k+64|0;do{c[k>>2]=c[m>>2];k=k+4|0;m=m+4|0}while((k|0)<(n|0));f=f+1|0}while((f|0)!=(i|0))}f=c[d+96>>2]|0;if(f|0){if(a[d+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+96>>2]=0}a[d+100>>0]=1;c[d+96>>2]=j;c[d+92>>2]=p;i=d+96|0}else i=d+96|0;f=o;do{k=(c[i>>2]|0)+(f<<6)|0;m=q;n=k+64|0;do{c[k>>2]=c[m>>2];k=k+4|0;m=m+4|0}while((k|0)<(n|0));f=f+1|0}while((f|0)!=(p|0))}c[d+88>>2]=p;if((p|0)>0){f=c[d+96>>2]|0;i=0;j=c[e+112>>2]|0;while(1){g[f+(i<<6)+16>>2]=+h[j+32>>3];g[f+(i<<6)+20>>2]=+h[j+40>>3];g[f+(i<<6)+24>>2]=+h[j+48>>3];g[f+(i<<6)+28>>2]=+h[j+56>>3];g[f+(i<<6)>>2]=+h[j>>3];g[f+(i<<6)+4>>2]=+h[j+8>>3];g[f+(i<<6)+8>>2]=+h[j+16>>3];g[f+(i<<6)+12>>2]=+h[j+24>>3];c[f+(i<<6)+32>>2]=c[j+64>>2];c[f+(i<<6)+36>>2]=c[j+68>>2];c[f+(i<<6)+40>>2]=c[j+72>>2];i=i+1|0;if((i|0)==(p|0))break;else j=j+80|0}}m=c[e+108>>2]|0;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;k=c[d+128>>2]|0;if((k|0)<(m|0)){if((c[d+132>>2]|0)<(m|0)){if(!m){i=k;j=0}else{c[6472]=(c[6472]|0)+1;f=ic((m<<4|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}i=c[d+128>>2]|0;j=f}if((i|0)>0){f=0;do{p=j+(f<<4)|0;o=(c[d+136>>2]|0)+(f<<4)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];f=f+1|0}while((f|0)!=(i|0))}f=c[d+136>>2]|0;if(f|0){if(a[d+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+136>>2]=0}a[d+140>>0]=1;c[d+136>>2]=j;c[d+132>>2]=m;i=d+136|0}else i=d+136|0;f=k;do{p=(c[i>>2]|0)+(f<<4)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];f=f+1|0}while((f|0)!=(m|0))}c[d+128>>2]=m;if((m|0)>0){f=c[d+136>>2]|0;i=0;j=c[e+116>>2]|0;while(1){c[f+(i<<4)+12>>2]=c[j+12>>2];b[f+(i<<4)+6>>1]=b[j+6>>1]|0;b[f+(i<<4)+8>>1]=b[j+8>>1]|0;b[f+(i<<4)+10>>1]=b[j+10>>1]|0;b[f+(i<<4)>>1]=b[j>>1]|0;b[f+(i<<4)+2>>1]=b[j+2>>1]|0;b[f+(i<<4)+4>>1]=b[j+4>>1]|0;i=i+1|0;if((i|0)==(m|0))break;else j=j+16|0}}c[d+144>>2]=c[e+120>>2];m=c[e+124>>2]|0;k=c[d+152>>2]|0;if((k|0)<(m|0)){if((c[d+156>>2]|0)<(m|0)){if(!m){i=k;j=0}else{c[6472]=(c[6472]|0)+1;f=ic(m<<5|19)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}i=c[d+152>>2]|0;j=f}if((i|0)>0){f=0;do{p=j+(f<<5)|0;o=(c[d+160>>2]|0)+(f<<5)|0;c[p>>2]=c[o>>2];c[p+4>>2]=c[o+4>>2];c[p+8>>2]=c[o+8>>2];c[p+12>>2]=c[o+12>>2];c[p+16>>2]=c[o+16>>2];c[p+20>>2]=c[o+20>>2];c[p+24>>2]=c[o+24>>2];c[p+28>>2]=c[o+28>>2];f=f+1|0}while((f|0)!=(i|0))}f=c[d+160>>2]|0;if(f|0){if(a[d+164>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+160>>2]=0}a[d+164>>0]=1;c[d+160>>2]=j;c[d+156>>2]=m;i=d+160|0}else i=d+160|0;f=k;do{p=(c[i>>2]|0)+(f<<5)|0;c[p>>2]=c[q>>2];c[p+4>>2]=c[q+4>>2];c[p+8>>2]=c[q+8>>2];c[p+12>>2]=c[q+12>>2];c[p+16>>2]=c[q+16>>2];c[p+20>>2]=c[q+20>>2];c[p+24>>2]=c[q+24>>2];c[p+28>>2]=c[q+28>>2];f=f+1|0}while((f|0)!=(m|0))}c[d+152>>2]=m;if((m|0)<=0){l=q;return}i=c[d+160>>2]|0;j=0;f=c[e+128>>2]|0;while(1){b[i+(j<<5)+6>>1]=b[f+14>>1]|0;b[i+(j<<5)+8>>1]=b[f+16>>1]|0;b[i+(j<<5)+10>>1]=b[f+18>>1]|0;b[i+(j<<5)>>1]=b[f+8>>1]|0;b[i+(j<<5)+2>>1]=b[f+10>>1]|0;b[i+(j<<5)+4>>1]=b[f+12>>1]|0;c[i+(j<<5)+12>>2]=c[f>>2];c[i+(j<<5)+16>>2]=c[f+4>>2];j=j+1|0;if((j|0)==(m|0))break;else f=f+20|0}l=q;return}function jd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0,j=0,k=0.0,l=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0,Y=0,Z=0;Y=c[d+36>>2]|0;X=c[e+36>>2]|0;L=+g[Y+8>>2];N=+g[Y+12>>2];M=+g[Y+16>>2];e=c[X+8>>2]|0;U=+g[e+8>>2];V=+g[e+12>>2];W=+g[e+16>>2];f=c[X+12>>2]|0;Q=+g[f+8>>2];O=+g[f+12>>2];P=+g[f+16>>2];d=c[X+16>>2]|0;R=+g[d+8>>2];S=+g[d+12>>2];T=+g[d+16>>2];x=Q-L-(U-L);F=O-N-(V-N);z=P-M-(W-M);w=F*(T-M-(W-M))-z*(S-N-(V-N));E=z*(R-L-(U-L))-x*(T-M-(W-M));B=x*(S-N-(V-N))-F*(R-L-(U-L));do if(B*B+(w*w+E*E)>1.1920928955078125e-07?(I=1.0/+C(+(B*B+(w*w+E*E))),G=(W-M)*B*I+((U-L)*w*I+(V-N)*E*I),G*G<3402823466385288598117041.0e14):0){r=U-L-w*I*G;v=V-N-E*I*G;t=W-M-B*I*G;h=Q-L-w*I*G;u=O-N-E*I*G;s=P-M-B*I*G;if((B*(u*r-v*h)+(w*(v*s-t*u)+E*(t*h-s*r))>0.0?(y=R-L-w*I*G,D=S-N-E*I*G,A=T-M-B*I*G,B*(D*h-u*y)+(w*(u*A-s*D)+E*(s*y-A*h))>0.0):0)?B*(v*y-D*r)+(w*(D*t-A*v)+E*(A*r-t*y))>0.0:0){q=G*G;p=w*I*G;o=B*I*G;m=E*I*G;break}if(x*x+F*F+z*z>1.1920928955078125e-07?(H=-((U-L)*x+(V-N)*F+(W-M)*z)/(x*x+F*F+z*z),H=H<0.0?0.0:H>1.0?1.0:H,q=(W-M+z*H)*(W-M+z*H)+((U-L+x*H)*(U-L+x*H)+(V-N+F*H)*(V-N+F*H)),q<3402823466385288598117041.0e14):0){s=U-L+x*H;t=W-M+z*H;r=V-N+F*H}else{q=3402823466385288598117041.0e14;s=0.0;t=0.0;r=0.0}h=(R-L-(Q-L))*(R-L-(Q-L))+(S-N-(O-N))*(S-N-(O-N))+(T-M-(P-M))*(T-M-(P-M));if(h>1.1920928955078125e-07?(o=-((Q-L)*(R-L-(Q-L))+(O-N)*(S-N-(O-N))+(P-M)*(T-M-(P-M)))/h,o=o<0.0?0.0:o>1.0?1.0:o,p=Q-L+(R-L-(Q-L))*o,k=O-N+(S-N-(O-N))*o,o=P-M+(T-M-(P-M))*o,o*o+(p*p+k*k)1.1920928955078125e-07?(K=-((R-L)*(U-L-(R-L))+(S-N)*(V-N-(S-N))+(T-M)*(W-M-(T-M)))/h,K=K<0.0?0.0:K>1.0?1.0:K,J=R-L+(U-L-(R-L))*K,m=S-N+(V-N-(S-N))*K,K=T-M+(W-M-(T-M))*K,K*K+(J*J+m*m)>2];K=N-+g[Y+28>>2];u=M-+g[Y+32>>2];u=+g[b+12>>2]+ +C(+(J*J+K*K+u*u))*2.0;if(!(q>2];V=+g[e+88>>2];W=+g[f+88>>2];h=+g[d+88>>2];h=!(V<=0.0)&!(W<=0.0)&!(h<=0.0)?V*s*(1.0/(t+s+r))+W*r*(1.0/(t+s+r))+t*(1.0/(t+s+r))*h:0.0;if(!(k+h>0.0))return;W=1.0/-+C(+q);q=p*W;p=m*W;o=o*W;n=c[b+4>>2]|0;d=c[b+8>>2]|0;l=c[(+g[n+316>>2]>+g[d+316>>2]?n+316|0:d+316|0)>>2]|0;m=k/(k+h)*+g[n+332>>2];h=h/(k+h)*+g[d+332>>2];d=c[n+832>>2]|0;if((d|0)==(c[n+836>>2]|0)?(Z=d|0?d<<1:1,(d|0)<(Z|0)):0){if(!Z)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((Z*56|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[n+832>>2]|0}if((d|0)>0){f=0;do{b=e+(f*56|0)|0;i=(c[n+840>>2]|0)+(f*56|0)|0;j=b+56|0;do{c[b>>2]=c[i>>2];b=b+4|0;i=i+4|0}while((b|0)<(j|0));f=f+1|0}while((f|0)!=(d|0))}d=c[n+840>>2]|0;if(d|0){if(a[n+844>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[n+840>>2]=0}a[n+844>>0]=1;c[n+840>>2]=e;c[n+836>>2]=Z;d=c[n+832>>2]|0}Z=c[n+840>>2]|0;c[Z+(d*56|0)>>2]=Y;c[Z+(d*56|0)+4>>2]=X;g[Z+(d*56|0)+8>>2]=s*(1.0/(t+s+r));g[Z+(d*56|0)+12>>2]=r*(1.0/(t+s+r));g[Z+(d*56|0)+16>>2]=t*(1.0/(t+s+r));g[Z+(d*56|0)+20>>2]=0.0;g[Z+(d*56|0)+24>>2]=q;g[Z+(d*56|0)+28>>2]=p;g[Z+(d*56|0)+32>>2]=o;g[Z+(d*56|0)+36>>2]=0.0;g[Z+(d*56|0)+40>>2]=u;c[Z+(d*56|0)+44>>2]=l;g[Z+(d*56|0)+48>>2]=m;g[Z+(d*56|0)+52>>2]=h;c[n+832>>2]=(c[n+832>>2]|0)+1;return}function kd(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0;o=l;l=l+64|0;c[d+20>>2]=c[e+16>>2];c[d+24>>2]=c[e+20>>2];c[d+28>>2]=c[e+24>>2];c[d+32>>2]=c[e+28>>2];c[d+4>>2]=c[e>>2];c[d+8>>2]=c[e+4>>2];c[d+12>>2]=c[e+8>>2];c[d+16>>2]=c[e+12>>2];c[d+36>>2]=c[e+32>>2];c[d+40>>2]=c[e+36>>2];c[d+44>>2]=c[e+40>>2];c[d+48>>2]=c[e+44>>2];c[d+56>>2]=c[e+48>>2];a[d+60>>0]=(c[e+52>>2]|0)!=0&1;n=c[e+56>>2]|0;i=o;k=i+64|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));m=c[d+88>>2]|0;if((m|0)<(n|0)){if((c[d+92>>2]|0)<(n|0)){if(!n){g=m;h=0}else{c[6472]=(c[6472]|0)+1;f=ic(n<<6|19)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}g=c[d+88>>2]|0;h=f}if((g|0)>0){f=0;do{i=h+(f<<6)|0;j=(c[d+96>>2]|0)+(f<<6)|0;k=i+64|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));f=f+1|0}while((f|0)!=(g|0))}f=c[d+96>>2]|0;if(f|0){if(a[d+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+96>>2]=0}a[d+100>>0]=1;c[d+96>>2]=h;c[d+92>>2]=n;g=d+96|0}else g=d+96|0;f=m;do{i=(c[g>>2]|0)+(f<<6)|0;j=o;k=i+64|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));f=f+1|0}while((f|0)!=(n|0))}c[d+88>>2]=n;if((n|0)>0){f=c[d+96>>2]|0;g=0;h=c[e+64>>2]|0;while(1){c[f+(g<<6)+16>>2]=c[h+16>>2];c[f+(g<<6)+20>>2]=c[h+20>>2];c[f+(g<<6)+24>>2]=c[h+24>>2];c[f+(g<<6)+28>>2]=c[h+28>>2];c[f+(g<<6)>>2]=c[h>>2];c[f+(g<<6)+4>>2]=c[h+4>>2];c[f+(g<<6)+8>>2]=c[h+8>>2];c[f+(g<<6)+12>>2]=c[h+12>>2];c[f+(g<<6)+32>>2]=c[h+32>>2];c[f+(g<<6)+36>>2]=c[h+36>>2];c[f+(g<<6)+40>>2]=c[h+40>>2];g=g+1|0;if((g|0)==(n|0))break;else h=h+48|0}}j=c[e+60>>2]|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;i=c[d+128>>2]|0;if((i|0)<(j|0)){if((c[d+132>>2]|0)<(j|0)){if(!j){g=i;h=0}else{c[6472]=(c[6472]|0)+1;f=ic((j<<4|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}g=c[d+128>>2]|0;h=f}if((g|0)>0){f=0;do{n=h+(f<<4)|0;m=(c[d+136>>2]|0)+(f<<4)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];f=f+1|0}while((f|0)!=(g|0))}f=c[d+136>>2]|0;if(f|0){if(a[d+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+136>>2]=0}a[d+140>>0]=1;c[d+136>>2]=h;c[d+132>>2]=j;g=d+136|0}else g=d+136|0;f=i;do{n=(c[g>>2]|0)+(f<<4)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];f=f+1|0}while((f|0)!=(j|0))}c[d+128>>2]=j;if((j|0)>0){f=c[d+136>>2]|0;g=0;h=c[e+68>>2]|0;while(1){c[f+(g<<4)+12>>2]=c[h+12>>2];b[f+(g<<4)+6>>1]=b[h+6>>1]|0;b[f+(g<<4)+8>>1]=b[h+8>>1]|0;b[f+(g<<4)+10>>1]=b[h+10>>1]|0;b[f+(g<<4)>>1]=b[h>>1]|0;b[f+(g<<4)+2>>1]=b[h+2>>1]|0;b[f+(g<<4)+4>>1]=b[h+4>>1]|0;g=g+1|0;if((g|0)==(j|0))break;else h=h+16|0}}c[d+144>>2]=c[e+76>>2];j=c[e+80>>2]|0;i=c[d+152>>2]|0;if((i|0)<(j|0)){if((c[d+156>>2]|0)<(j|0)){if(!j){g=i;h=0}else{c[6472]=(c[6472]|0)+1;f=ic(j<<5|19)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}g=c[d+152>>2]|0;h=f}if((g|0)>0){f=0;do{n=h+(f<<5)|0;m=(c[d+160>>2]|0)+(f<<5)|0;c[n>>2]=c[m>>2];c[n+4>>2]=c[m+4>>2];c[n+8>>2]=c[m+8>>2];c[n+12>>2]=c[m+12>>2];c[n+16>>2]=c[m+16>>2];c[n+20>>2]=c[m+20>>2];c[n+24>>2]=c[m+24>>2];c[n+28>>2]=c[m+28>>2];f=f+1|0}while((f|0)!=(g|0))}f=c[d+160>>2]|0;if(f|0){if(a[d+164>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+160>>2]=0}a[d+164>>0]=1;c[d+160>>2]=h;c[d+156>>2]=j;g=d+160|0}else g=d+160|0;f=i;do{n=(c[g>>2]|0)+(f<<5)|0;c[n>>2]=c[o>>2];c[n+4>>2]=c[o+4>>2];c[n+8>>2]=c[o+8>>2];c[n+12>>2]=c[o+12>>2];c[n+16>>2]=c[o+16>>2];c[n+20>>2]=c[o+20>>2];c[n+24>>2]=c[o+24>>2];c[n+28>>2]=c[o+28>>2];f=f+1|0}while((f|0)!=(j|0))}c[d+152>>2]=j;if((j|0)<=0){l=o;return}g=c[d+160>>2]|0;h=0;f=c[e+72>>2]|0;while(1){b[g+(h<<5)+6>>1]=b[f+14>>1]|0;b[g+(h<<5)+8>>1]=b[f+16>>1]|0;b[g+(h<<5)+10>>1]=b[f+18>>1]|0;b[g+(h<<5)>>1]=b[f+8>>1]|0;b[g+(h<<5)+2>>1]=b[f+10>>1]|0;b[g+(h<<5)+4>>1]=b[f+12>>1]|0;c[g+(h<<5)+12>>2]=c[f>>2];c[g+(h<<5)+16>>2]=c[f+4>>2];h=h+1|0;if((h|0)==(j|0))break;else f=f+20|0}l=o;return}function ld(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;c[b>>2]=3324;d=c[b+192>>2]|0;if(d|0)Ab[c[(c[d>>2]|0)+4>>2]&511](d);a:do if((c[b+1112>>2]|0)>0)do{h=c[c[b+1120>>2]>>2]|0;d=c[h+348>>2]|0;if(d|0){Sg(b+1048|0,d)|0;e=c[b+1052>>2]|0;if(e|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+1052>>2]=d;c[b+1060>>2]=(c[b+1060>>2]|0)+-1}d=c[h+52>>2]|0;if(d|0){if(a[h+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[h+52>>2]=0}a[h+56>>0]=1;c[h+52>>2]=0;c[h+44>>2]=0;c[h+48>>2]=0;d=c[h+32>>2]|0;if(d|0){if(a[h+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[h+32>>2]=0}a[h+36>>0]=1;c[h+32>>2]=0;c[h+24>>2]=0;c[h+28>>2]=0;d=c[h+12>>2]|0;if(d|0){if(a[h+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[h+12>>2]=0}a[h+16>>0]=1;c[h+12>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);d=c[b+1112>>2]|0;if((d|0)<=0)break a;g=c[b+1120>>2]|0;e=0;do{f=g+(e<<2)|0;if((c[f>>2]|0)==(h|0)){i=28;break}e=e+1|0}while((e|0)<(d|0));if((i|0)==28){i=0;if((e|0)<(d|0)){c[f>>2]=c[g+(d+-1<<2)>>2];c[(c[b+1120>>2]|0)+(d+-1<<2)>>2]=h;c[b+1112>>2]=d+-1;d=d+-1|0}}}while((d|0)>0);while(0);d=c[b+872>>2]|0;if((d|0)>0){f=0;do{e=c[(c[b+880>>2]|0)+(f<<2)>>2]|0;if(e){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);d=c[b+872>>2]|0}f=f+1|0}while((f|0)<(d|0))}d=c[b+852>>2]|0;if((d|0)>0){f=0;do{e=c[(c[b+860>>2]|0)+(f<<2)>>2]|0;if(e){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0);d=c[b+852>>2]|0}f=f+1|0}while((f|0)<(d|0))}d=c[b+1244>>2]|0;if(d|0){if(a[b+1248>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+1244>>2]=0}a[b+1248>>0]=1;c[b+1244>>2]=0;c[b+1236>>2]=0;c[b+1240>>2]=0;d=c[b+1140>>2]|0;if(d|0){if(a[b+1144>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+1140>>2]=0}a[b+1144>>0]=1;c[b+1140>>2]=0;c[b+1132>>2]=0;c[b+1136>>2]=0;d=c[b+1120>>2]|0;if(d|0){if(a[b+1124>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+1120>>2]=0}a[b+1124>>0]=1;c[b+1120>>2]=0;c[b+1112>>2]=0;c[b+1116>>2]=0;Vh(b+1048|0);Vh(b+988|0);Vh(b+928|0);d=c[b+880>>2]|0;if(d|0){if(a[b+884>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+880>>2]=0}a[b+884>>0]=1;c[b+880>>2]=0;c[b+872>>2]=0;c[b+876>>2]=0;d=c[b+860>>2]|0;if(d|0){if(a[b+864>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+860>>2]=0}a[b+864>>0]=1;c[b+860>>2]=0;c[b+852>>2]=0;c[b+856>>2]=0;d=c[b+840>>2]|0;if(d|0){if(a[b+844>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+840>>2]=0}a[b+844>>0]=1;c[b+840>>2]=0;c[b+832>>2]=0;c[b+836>>2]=0;d=c[b+820>>2]|0;if(d|0){if(a[b+824>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+820>>2]=0}a[b+824>>0]=1;c[b+820>>2]=0;c[b+812>>2]=0;c[b+816>>2]=0;d=c[b+800>>2]|0;if(d|0){if(a[b+804>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+800>>2]=0}a[b+804>>0]=1;c[b+800>>2]=0;c[b+792>>2]=0;c[b+796>>2]=0;d=c[b+780>>2]|0;if(d|0){if(a[b+784>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+780>>2]=0}a[b+784>>0]=1;c[b+780>>2]=0;c[b+772>>2]=0;c[b+776>>2]=0;d=c[b+760>>2]|0;if(d|0){if(a[b+764>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+760>>2]=0}a[b+764>>0]=1;c[b+760>>2]=0;c[b+752>>2]=0;c[b+756>>2]=0;d=c[b+740>>2]|0;if(d|0){if(a[b+744>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+740>>2]=0}a[b+744>>0]=1;c[b+740>>2]=0;c[b+732>>2]=0;c[b+736>>2]=0;d=c[b+720>>2]|0;if(d|0){if(a[b+724>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+720>>2]=0}a[b+724>>0]=1;c[b+720>>2]=0;c[b+712>>2]=0;c[b+716>>2]=0;d=c[b+700>>2]|0;if(d|0){if(a[b+704>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+700>>2]=0}a[b+704>>0]=1;c[b+700>>2]=0;c[b+692>>2]=0;c[b+696>>2]=0;d=c[b+512>>2]|0;if(d|0){if(a[b+516>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+512>>2]=0}a[b+516>>0]=1;c[b+512>>2]=0;c[b+504>>2]=0;c[b+508>>2]=0;d=c[b+492>>2]|0;if(d|0){if(a[b+496>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+492>>2]=0}a[b+496>>0]=1;c[b+492>>2]=0;c[b+484>>2]=0;c[b+488>>2]=0;Yt(b+288|0);d=c[b+276>>2]|0;if(!d){a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;i=b+272|0;c[i>>2]=0;c[b>>2]=5200;return}if(a[b+280>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+276>>2]=0;a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;i=b+272|0;c[i>>2]=0;c[b>>2]=5200;return}function md(b,d,e,f,h,i,j,k,l,m,n,o,p){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0;B=O(c[l+24>>2]|0,m)|0;y=a[d+44>>0]|0;A=c[d+56>>2]|0;if(!(y<<24>>24!=0|(A|0)!=0)){B=0;return B|0}C=c[(o|0?l+12|0:l+8|0)>>2]|0;m=c[(o|0?l+20|0:l+16|0)>>2]|0;c[C+(B<<2)>>2]=c[n>>2];c[C+(B+1<<2)>>2]=c[n+4>>2];c[C+(B+2<<2)>>2]=c[n+8>>2];g[m+(B<<2)>>2]=-+g[n>>2];g[m+(B+1<<2)>>2]=-+g[n+4>>2];g[m+(B+2<<2)>>2]=-+g[n+8>>2];if(!o){q=+g[b+1176>>2];if(!(a[b+1301>>0]|0)){q=q-+g[e+48>>2];r=+g[b+1180>>2]-+g[e+52>>2];w=+g[b+1184>>2]-+g[e+56>>2];u=+g[n+8>>2];v=+g[n+4>>2];x=+g[n>>2];e=c[l+12>>2]|0;g[e+(B<<2)>>2]=r*u-w*v;g[e+(B+1<<2)>>2]=w*x-q*u;g[e+(B+2<<2)>>2]=q*v-r*x;x=+g[b+1176>>2]-+g[f+48>>2];r=+g[b+1180>>2]-+g[f+52>>2];v=+g[b+1184>>2]-+g[f+56>>2];q=+g[n+8>>2];u=+g[n+4>>2];w=+g[n>>2];e=c[l+20>>2]|0;g[e+(B<<2)>>2]=-(r*q-v*u);r=x*u-r*w;m=e;q=-(v*w-x*q)}else{I=q-+g[f+48>>2];H=+g[b+1180>>2]-+g[f+52>>2];F=+g[b+1184>>2]-+g[f+56>>2];r=+g[n>>2];G=+g[n+4>>2];E=+g[n+8>>2];K=+g[b+1112>>2]-+g[e+48>>2];u=+g[b+1116>>2]-+g[e+52>>2];q=+g[b+1120>>2]-+g[e+56>>2];w=+g[d+52>>2]-+g[d+48>>2];J=r*(r*K+G*u+E*q)+r*w-r*(I*r+H*G+F*E);D=G*(r*K+G*u+E*q)+G*w-G*(I*r+H*G+F*E);w=E*(r*K+G*u+E*q)+E*w-E*(I*r+H*G+F*E);x=+g[b+1272>>2];v=+g[b+1276>>2];t=E*(u-G*(r*K+G*u+E*q)+x*D)-G*(q-E*(r*K+G*u+E*q)+x*w);s=r*(q-E*(r*K+G*u+E*q)+x*w)-E*(K-r*(r*K+G*u+E*q)+x*J);q=G*(K-r*(r*K+G*u+E*q)+x*J)-r*(u-G*(r*K+G*u+E*q)+x*D);u=(H-G*(I*r+H*G+F*E)-v*D)*E-(F-E*(I*r+H*G+F*E)-v*w)*G;w=(F-E*(I*r+H*G+F*E)-v*w)*r-(I-r*(I*r+H*G+F*E)-v*J)*E;r=(I-r*(I*r+H*G+F*E)-v*J)*G-(H-G*(I*r+H*G+F*E)-v*D)*r;if(!((p|0)!=0|(a[b+1280>>0]|0)==0)){r=v*r;u=v*u;w=v*w;t=x*t;s=x*s;q=x*q}e=(c[l+12>>2]|0)+(B<<2)|0;g[e>>2]=t;g[e+4>>2]=s;g[e+8>>2]=q;e=c[l+20>>2]|0;g[e+(B<<2)>>2]=-u;m=e;q=-w}g[e+(B+1<<2)>>2]=q;g[m+(B+2<<2)>>2]=-r}if(A|0?+g[d>>2]==+g[d+4>>2]:0){m=c[l+28>>2]|0;g[m+(B<<2)>>2]=0.0;q=0.0;e=l+28|0}else z=12;do if((z|0)==12){e=c[l+28>>2]|0;g[e+(B<<2)>>2]=0.0;if(!(y<<24>>24)){if(A|0){m=e;q=0.0;e=l+28|0;break}else k=1;return k|0}c[(c[l+32>>2]|0)+(B<<2)>>2]=c[d+28>>2];if(A|0){m=e;q=+g[e+(B<<2)>>2];e=l+28|0;break}v=+g[d+8>>2];t=o|0?v:-v;q=+g[d+52>>2];r=+g[d>>2];s=+g[d+4>>2];u=+g[l>>2]*+g[d+32>>2];do if(!(r>s))if(!(r==s)){if(t/u<0.0)if(q>=r?r-t/u>q:0){q=(r-q)/(t/u);break}else{q=q0.0)if(q<=s?s-t/us?0.0:1.0;break}else q=0.0}else q=0.0;else q=1.0;while(0);g[e+(B<<2)>>2]=q*v+ +g[e+(B<<2)>>2];g[(c[l+36>>2]|0)+(B<<2)>>2]=-+g[d+12>>2];c[(c[l+40>>2]|0)+(B<<2)>>2]=c[d+12>>2];C=1;return C|0}while(0);K=+g[l>>2]*+g[d+32>>2]*+g[d+48>>2];g[m+(B<<2)>>2]=q+(o|0?-K:K);c[(c[l+32>>2]|0)+(B<<2)>>2]=c[d+36>>2];if(+g[d>>2]==+g[d+4>>2]){g[(c[l+36>>2]|0)+(B<<2)>>2]=-3402823466385288598117041.0e14;g[(c[l+40>>2]|0)+(B<<2)>>2]=3402823466385288598117041.0e14;C=1;return C|0}C=c[l+40>>2]|0;g[(c[l+36>>2]|0)+(B<<2)>>2]=(A|0)==1?0.0:-3402823466385288598117041.0e14;g[C+(B<<2)>>2]=(A|0)==1?3402823466385288598117041.0e14:0.0;v=+g[d+40>>2];if(!(v>0.0)){C=1;return C|0}if(o|0){K=+g[n>>2];u=+g[n+4>>2];q=+g[n+8>>2];r=u;s=K;t=q;u=+g[j>>2]*K+ +g[j+4>>2]*u;q=+g[j+8>>2]*q}else{K=+g[n>>2];u=+g[n+4>>2];q=+g[n+8>>2];r=u;s=K;t=q;u=+g[h>>2]*K+ +g[h+4>>2]*u;k=i;q=+g[h+8>>2]*q}q=u+q-(s*+g[k>>2]+r*+g[k+4>>2]+t*+g[k+8>>2]);if((A|0)==1){if(!(q<0.0)){C=1;return C|0}k=(c[e>>2]|0)+(B<<2)|0;if(!(+g[k>>2]<-(q*v))){C=1;return C|0}g[k>>2]=-(q*v);C=1;return C|0}else{if(!(q>0.0)){C=1;return C|0}k=(c[e>>2]|0)+(B<<2)|0;if(!(+g[k>>2]>-(q*v))){C=1;return C|0}g[k>>2]=-(q*v);C=1;return C|0}return 0}function nd(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!a)return;b=c[6478]|0;d=c[a+-4>>2]|0;k=a+-8+(d&-8)|0;do if(!(d&1)){e=c[a+-8>>2]|0;if(!(d&3))return;g=a+-8+(0-e)|0;h=e+(d&-8)|0;if(g>>>0>>0)return;if((g|0)==(c[6479]|0)){a=c[k+4>>2]|0;if((a&3|0)!=3){i=g;j=g;b=h;break}c[6476]=h;c[k+4>>2]=a&-2;c[g+4>>2]=h|1;c[g+h>>2]=h;return}if(e>>>0<256){a=c[g+8>>2]|0;b=c[g+12>>2]|0;if((b|0)==(a|0)){c[6474]=c[6474]&~(1<<(e>>>3));i=g;j=g;b=h;break}else{c[a+12>>2]=b;c[b+8>>2]=a;i=g;j=g;b=h;break}}f=c[g+24>>2]|0;a=c[g+12>>2]|0;do if((a|0)==(g|0)){a=c[g+16+4>>2]|0;if(!a){a=c[g+16>>2]|0;if(!a){a=0;break}else e=g+16|0}else e=g+16+4|0;while(1){d=a+20|0;b=c[d>>2]|0;if(b|0){a=b;e=d;continue}d=a+16|0;b=c[d>>2]|0;if(!b)break;else{a=b;e=d}}c[e>>2]=0}else{j=c[g+8>>2]|0;c[j+12>>2]=a;c[a+8>>2]=j}while(0);if(f){b=c[g+28>>2]|0;if((g|0)==(c[26200+(b<<2)>>2]|0)){c[26200+(b<<2)>>2]=a;if(!a){c[6475]=c[6475]&~(1<>2]|0)!=(g|0)&1)<<2)>>2]=a;if(!a){i=g;j=g;b=h;break}}c[a+24>>2]=f;b=c[g+16>>2]|0;if(b|0){c[a+16>>2]=b;c[b+24>>2]=a}b=c[g+16+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=g;j=g;b=h}else{i=g;j=g;b=h}}else{i=g;j=g;b=h}}else{i=a+-8|0;j=a+-8|0;b=d&-8}while(0);if(i>>>0>=k>>>0)return;d=c[k+4>>2]|0;if(!(d&1))return;if(!(d&2)){a=c[6479]|0;if((k|0)==(c[6480]|0)){k=(c[6477]|0)+b|0;c[6477]=k;c[6480]=j;c[j+4>>2]=k|1;if((j|0)!=(a|0))return;c[6479]=0;c[6476]=0;return}if((k|0)==(a|0)){k=(c[6476]|0)+b|0;c[6476]=k;c[6479]=i;c[j+4>>2]=k|1;c[i+k>>2]=k;return}f=(d&-8)+b|0;do if(d>>>0<256){b=c[k+8>>2]|0;a=c[k+12>>2]|0;if((a|0)==(b|0)){c[6474]=c[6474]&~(1<<(d>>>3));break}else{c[b+12>>2]=a;c[a+8>>2]=b;break}}else{g=c[k+24>>2]|0;a=c[k+12>>2]|0;do if((a|0)==(k|0)){a=c[k+16+4>>2]|0;if(!a){a=c[k+16>>2]|0;if(!a){b=0;break}else e=k+16|0}else e=k+16+4|0;while(1){d=a+20|0;b=c[d>>2]|0;if(b|0){a=b;e=d;continue}d=a+16|0;b=c[d>>2]|0;if(!b)break;else{a=b;e=d}}c[e>>2]=0;b=a}else{b=c[k+8>>2]|0;c[b+12>>2]=a;c[a+8>>2]=b;b=a}while(0);if(g|0){a=c[k+28>>2]|0;if((k|0)==(c[26200+(a<<2)>>2]|0)){c[26200+(a<<2)>>2]=b;if(!b){c[6475]=c[6475]&~(1<>2]|0)!=(k|0)&1)<<2)>>2]=b;if(!b)break}c[b+24>>2]=g;a=c[k+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[k+16+4>>2]|0;if(a|0){c[b+20>>2]=a;c[a+24>>2]=b}}}while(0);c[j+4>>2]=f|1;c[i+f>>2]=f;if((j|0)==(c[6479]|0)){c[6476]=f;return}}else{c[k+4>>2]=d&-2;c[j+4>>2]=b|1;c[i+b>>2]=b;f=b}d=f>>>3;if(f>>>0<256){a=c[6474]|0;if(!(a&1<>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=25936+(d<<1<<2);return}a=f>>>8;if(a)if(f>>>0>16777215)b=31;else{b=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);b=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(b+245760|0)>>>16&2)+(b<<((b+245760|0)>>>16&2)>>>15)|0;b=f>>>(b+7|0)&1|b<<1}else b=0;e=26200+(b<<2)|0;c[j+28>>2]=b;c[j+20>>2]=0;c[j+16>>2]=0;a=c[6475]|0;d=1<>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){a=73;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){a=72;break}else{b=b<<1;d=a}}if((a|0)==72){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((a|0)==73){i=d+8|0;k=c[i>>2]|0;c[k+12>>2]=j;c[i>>2]=j;c[j+8>>2]=k;c[j+12>>2]=d;c[j+24>>2]=0;break}}else{c[6475]=a|d;c[e>>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j}while(0);k=(c[6482]|0)+-1|0;c[6482]=k;if(!k)a=26352;else return;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[6482]=-1;return}function od(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0.0,m=0,n=0.0,o=0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0.0,w=0.0;u=l;l=l+288|0;q=c[b+4>>2]|0;a[q+312>>0]=0;c[q>>2]=0;a[q+356>>0]=1;c[q+292>>2]=1566444395;c[q+296>>2]=1566444395;c[q+300>>2]=1566444395;g[q+304>>2]=0.0;c[q+336>>2]=0;c[q+336+4>>2]=0;c[q+336+8>>2]=0;c[q+336+12>>2]=0;a[q+336+16>>0]=0;a[q+332>>0]=a[q+332>>0]&-16;r=+g[e+48>>2]-+g[d+48>>2]-(+g[h+48>>2]-+g[f+48>>2]);t=+g[e+52>>2]-+g[d+52>>2]-(+g[h+52>>2]-+g[f+52>>2]);s=+g[e+56>>2]-+g[d+56>>2]-(+g[h+56>>2]-+g[f+56>>2]);c[u+216>>2]=9352;g[u+216+36>>2]=999999984306749440.0;a[u+216+40>>0]=0;q=c[b+8>>2]|0;p=c[b+12>>2]|0;o=c[b+4>>2]|0;c[u+136>>2]=9400;c[u+136+4>>2]=0;c[u+136+8>>2]=1065353216;c[u+136+12>>2]=0;g[u+136+16>>2]=0.0;c[u+136+20>>2]=0;c[u+136+24>>2]=o;c[u+136+28>>2]=q;c[u+136+32>>2]=p;c[u+136+36>>2]=c[q+4>>2];c[u+136+40>>2]=c[p+4>>2];g[u+136+44>>2]=+gb[c[(c[q>>2]|0)+48>>2]&15](q);g[u+136+48>>2]=+gb[c[(c[p>>2]|0)+48>>2]&15](p);a[u+136+52>>0]=0;c[u+136+60>>2]=-1;c[u+136+72>>2]=1;c[u+136+76>>2]=1;g[u+128>>2]=999999984306749440.0;c[u>>2]=c[d>>2];c[u+4>>2]=c[d+4>>2];c[u+8>>2]=c[d+8>>2];c[u+12>>2]=c[d+12>>2];c[u+16>>2]=c[d+16>>2];c[u+16+4>>2]=c[d+16+4>>2];c[u+16+8>>2]=c[d+16+8>>2];c[u+16+12>>2]=c[d+16+12>>2];c[u+32>>2]=c[d+32>>2];c[u+32+4>>2]=c[d+32+4>>2];c[u+32+8>>2]=c[d+32+8>>2];c[u+32+12>>2]=c[d+32+12>>2];c[u+48>>2]=c[d+48>>2];c[u+48+4>>2]=c[d+48+4>>2];c[u+48+8>>2]=c[d+48+8>>2];c[u+48+12>>2]=c[d+48+12>>2];c[u+64>>2]=c[f>>2];c[u+64+4>>2]=c[f+4>>2];c[u+64+8>>2]=c[f+8>>2];c[u+64+12>>2]=c[f+12>>2];c[u+80>>2]=c[f+16>>2];c[u+80+4>>2]=c[f+16+4>>2];c[u+80+8>>2]=c[f+16+8>>2];c[u+80+12>>2]=c[f+16+12>>2];c[u+96>>2]=c[f+32>>2];c[u+96+4>>2]=c[f+32+4>>2];c[u+96+8>>2]=c[f+32+8>>2];c[u+96+12>>2]=c[f+32+12>>2];c[u+112>>2]=c[f+48>>2];c[u+112+4>>2]=c[f+48+4>>2];c[u+112+8>>2]=c[f+48+8>>2];c[u+112+12>>2]=c[f+48+12>>2];Bc(u+136|0,u,u+216|0,0,0);p=(a[u+216+40>>0]|0)==0;q=u+216+20|0;c[u+264>>2]=c[q>>2];c[u+264+4>>2]=c[q+4>>2];c[u+264+8>>2]=c[q+8>>2];c[u+264+12>>2]=c[q+12>>2];if(p){i=0;l=u;return i|0}n=+g[u+216+36>>2];k=+g[u+216+16>>2];b=c[u+216+12>>2]|0;m=c[u+216+8>>2]|0;o=c[u+216+4>>2]|0;do if(n>1.0000000474974513e-03){k=0.0;p=0;while(1){if((p|0)>31){b=0;p=13;break}w=r*(c[j>>2]=o,+g[j>>2]);w=t*(c[j>>2]=m,+g[j>>2])+w;v=k;k=k-n/(s*(c[j>>2]=b,+g[j>>2])+w);if(!(!(k<=v)&(!(k<0.0)&!(k>1.0)))){b=0;p=13;break}Bb[c[c[i>>2]>>2]&31](i,k);w=1.0-k;g[u+48>>2]=w*+g[d+48>>2]+k*+g[e+48>>2];g[u+52>>2]=w*+g[d+52>>2]+k*+g[e+52>>2];g[u+56>>2]=w*+g[d+56>>2]+k*+g[e+56>>2];g[u+112>>2]=w*+g[f+48>>2]+k*+g[h+48>>2];g[u+116>>2]=w*+g[f+52>>2]+k*+g[h+52>>2];g[u+120>>2]=w*+g[f+56>>2]+k*+g[h+56>>2];Bc(u+136|0,u,u+216|0,0,0);if(!(a[u+216+40>>0]|0)){b=0;p=13;break}n=+g[u+216+36>>2];if(n<0.0){p=8;break}c[u+264>>2]=c[q>>2];c[u+264+4>>2]=c[q+4>>2];c[u+264+8>>2]=c[q+8>>2];c[u+264+12>>2]=c[q+12>>2];b=c[u+216+12>>2]|0;m=c[u+216+8>>2]|0;o=c[u+216+4>>2]|0;if(!(n>1.0000000474974513e-03)){p=10;break}else p=p+1|0}if((p|0)==8){g[i+164>>2]=k;f=c[u+216+8>>2]|0;e=c[u+216+12>>2]|0;h=c[u+216+16>>2]|0;c[i+132>>2]=c[u+216+4>>2];c[i+136>>2]=f;c[i+140>>2]=e;c[i+144>>2]=h;c[i+148>>2]=c[q>>2];c[i+148+4>>2]=c[q+4>>2];c[i+148+8>>2]=c[q+8>>2];c[i+148+12>>2]=c[q+12>>2];i=1;l=u;return i|0}else if((p|0)==10){n=k;k=+g[u+216+16>>2];break}else if((p|0)==13){l=u;return b|0}}else n=0.0;while(0);w=r*(c[j>>2]=o,+g[j>>2]);w=t*(c[j>>2]=m,+g[j>>2])+w;if(s*(c[j>>2]=b,+g[j>>2])+w>=-+g[i+172>>2]){i=0;l=u;return i|0}g[i+164>>2]=n;c[i+132>>2]=o;c[i+136>>2]=m;c[i+140>>2]=b;g[i+144>>2]=k;c[i+148>>2]=c[u+264>>2];c[i+148+4>>2]=c[u+264+4>>2];c[i+148+8>>2]=c[u+264+8>>2];c[i+148+12>>2]=c[u+264+12>>2];i=1;l=u;return i|0}function pd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0;m=l;l=l+240|0;c[a+4>>2]=(c[a+4>>2]|0)+1;j=c[b+36>>2]|0;i=c[d+36>>2]|0;f=c[a+8>>2]|0;K=c[(c[f+4>>2]|0)+24>>2]|0;d=c[K+(j*80|0)+64>>2]|0;b=(c[(c[a+12>>2]|0)+4>>2]|0)+24|0;e=c[(c[b>>2]|0)+(i*80|0)+64>>2]|0;f=c[f+12>>2]|0;n=+g[f>>2];I=+g[f+4>>2];J=+g[f+8>>2];q=+g[f+16>>2];s=+g[f+20>>2];u=+g[f+24>>2];r=+g[f+32>>2];v=+g[f+36>>2];D=+g[f+40>>2];w=+g[K+(j*80|0)>>2];x=+g[K+(j*80|0)+16>>2];y=+g[K+(j*80|0)+32>>2];z=+g[K+(j*80|0)+4>>2];A=+g[K+(j*80|0)+20>>2];B=+g[K+(j*80|0)+36>>2];t=+g[K+(j*80|0)+8>>2];C=+g[K+(j*80|0)+24>>2];E=+g[K+(j*80|0)+40>>2];o=+g[K+(j*80|0)+48>>2];p=+g[K+(j*80|0)+52>>2];H=+g[K+(j*80|0)+56>>2];F=+g[f+48>>2]+(n*o+I*p+J*H);G=+g[f+52>>2]+(q*o+s*p+u*H);H=+g[f+56>>2]+(r*o+v*p+D*H);g[m+176>>2]=n*w+I*x+J*y;g[m+176+4>>2]=n*z+I*A+J*B;g[m+176+8>>2]=n*t+I*C+J*E;g[m+176+12>>2]=0.0;g[m+176+16>>2]=q*w+s*x+u*y;g[m+176+20>>2]=q*z+s*A+u*B;g[m+176+24>>2]=q*t+s*C+u*E;g[m+176+28>>2]=0.0;g[m+176+32>>2]=r*w+v*x+D*y;g[m+176+36>>2]=r*z+v*A+D*B;g[m+176+40>>2]=r*t+v*C+D*E;g[m+176+44>>2]=0.0;g[m+176+48>>2]=F;g[m+176+52>>2]=G;g[m+176+56>>2]=H;g[m+176+60>>2]=0.0;f=c[(c[a+12>>2]|0)+12>>2]|0;H=+g[f>>2];G=+g[f+4>>2];F=+g[f+8>>2];E=+g[f+16>>2];D=+g[f+20>>2];C=+g[f+24>>2];v=+g[f+32>>2];t=+g[f+36>>2];r=+g[f+40>>2];b=c[b>>2]|0;B=+g[b+(i*80|0)>>2];A=+g[b+(i*80|0)+16>>2];z=+g[b+(i*80|0)+32>>2];y=+g[b+(i*80|0)+4>>2];x=+g[b+(i*80|0)+20>>2];w=+g[b+(i*80|0)+36>>2];u=+g[b+(i*80|0)+8>>2];s=+g[b+(i*80|0)+24>>2];q=+g[b+(i*80|0)+40>>2];J=+g[b+(i*80|0)+48>>2];I=+g[b+(i*80|0)+52>>2];n=+g[b+(i*80|0)+56>>2];p=+g[f+48>>2]+(H*J+G*I+F*n);o=+g[f+52>>2]+(E*J+D*I+C*n);n=+g[f+56>>2]+(v*J+t*I+r*n);g[m+112>>2]=H*B+G*A+F*z;g[m+112+4>>2]=H*y+G*x+F*w;g[m+112+8>>2]=H*u+G*s+F*q;g[m+112+12>>2]=0.0;g[m+112+16>>2]=E*B+D*A+C*z;g[m+112+20>>2]=E*y+D*x+C*w;g[m+112+24>>2]=E*u+D*s+C*q;g[m+112+28>>2]=0.0;g[m+112+32>>2]=v*B+t*A+r*z;g[m+112+36>>2]=v*y+t*x+r*w;g[m+112+40>>2]=v*u+t*s+r*q;g[m+112+44>>2]=0.0;g[m+112+48>>2]=p;g[m+112+52>>2]=o;g[m+112+56>>2]=n;g[m+112+60>>2]=0.0;Nb[c[(c[d>>2]|0)+8>>2]&127](d,m+176|0,m+96|0,m+80|0);Nb[c[(c[e>>2]|0)+8>>2]&127](e,m+112|0,m+64|0,m+48|0);if(!(+g[m+96>>2]>+g[m+48>>2])?!(+g[m+80>>2]<+g[m+64>>2]):0)b=1;else b=0;if(!(!(+g[m+96+8>>2]>+g[m+48+8>>2])?!(+g[m+80+8>>2]<+g[m+64+8>>2]):0))b=0;if(+g[m+96+4>>2]>+g[m+48+4>>2]){l=m;return}if(+g[m+80+4>>2]<+g[m+64+4>>2]|b^1){l=m;return}f=c[a+8>>2]|0;b=c[f+8>>2]|0;c[m+24>>2]=f;c[m+24+4>>2]=d;c[m+24+8>>2]=b;c[m+24+12>>2]=m+176;c[m+24+16>>2]=-1;c[m+24+20>>2]=j;b=c[a+12>>2]|0;f=c[b+8>>2]|0;c[m>>2]=b;c[m+4>>2]=e;c[m+8>>2]=f;c[m+12>>2]=m+112;c[m+16>>2]=-1;c[m+20>>2]=i;f=c[a+28>>2]|0;c[6460]=(c[6460]|0)+1;b=((i<<16|j)+~((i<<16|j)<<15)>>10^(i<<16|j)+~((i<<16|j)<<15))*9|0;b=(c[f+12>>2]|0)+-1&((b>>6^b)+~((b>>6^b)<<11)>>16^(b>>6^b)+~((b>>6^b)<<11));a:do if((b|0)<(c[f+32>>2]|0)?(h=c[(c[f+40>>2]|0)+(b<<2)>>2]|0,(h|0)!=-1):0){e=c[f+16>>2]|0;b=h;while(1){d=e+(b*12|0)|0;if((c[d>>2]|0)==(j|0)?(c[e+(b*12|0)+4>>2]|0)==(i|0):0)break;b=c[(c[f+60>>2]|0)+(b<<2)>>2]|0;if((b|0)==-1){k=16;break a}}if(d)b=c[e+(b*12|0)+8>>2]|0;else k=16}else k=16;while(0);if((k|0)==16){b=c[a+16>>2]|0;b=vb[c[(c[b>>2]|0)+8>>2]&31](b,m+24|0,m,c[a+32>>2]|0)|0;K=c[a+28>>2]|0;c[(ub[c[(c[K>>2]|0)+12>>2]&63](K,j,i)|0)+8>>2]=b}K=c[a+24>>2]|0;h=c[K+8>>2]|0;k=c[K+12>>2]|0;c[K+8>>2]=m+24;c[K+12>>2]=m;Kb[c[(c[K>>2]|0)+8>>2]&127](K,-1,j);K=c[a+24>>2]|0;Kb[c[(c[K>>2]|0)+12>>2]&127](K,-1,i);Rb[c[(c[b>>2]|0)+8>>2]&31](b,m+24|0,m,c[a+20>>2]|0,c[a+24>>2]|0);K=c[a+24>>2]|0;c[K+8>>2]=h;c[K+12>>2]=k;l=m;return}function qd(a,d,f,h,i,j,k,m,n){a=a|0;d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;hj(a,v+6|0,+g[d>>2],+g[d+4>>2],+g[d+8>>2],0);hj(a,v,+g[f>>2],+g[f+4>>2],+g[f+8>>2],1);u=b[a+64>>1]|0;t=c[a+60>>2]|0;b[a+64>>1]=b[t+((u&65535)<<6)+48>>1]|0;p=(b[a+56>>1]|0)+1<<16>>16;b[a+56>>1]=p;c[t+((u&65535)<<6)+12>>2]=u&65535;c[t+((u&65535)<<6)>>2]=i;b[t+((u&65535)<<6)+4>>1]=j;b[t+((u&65535)<<6)+6>>1]=k;c[t+((u&65535)<<6)+8>>2]=n;r=(p&65535)<<1&65534;b[t+54>>1]=(e[t+54>>1]|0)+2;o=c[a+68>>2]|0;n=e[o+(r+-1<<2)>>1]|e[o+(r+-1<<2)+2>>1]<<16;b[o+((r|1)<<2)>>1]=n;b[o+((r|1)<<2)+2>>1]=n>>>16;o=c[a+68>>2]|0;b[o+(r+-1<<2)>>1]=b[v+6>>1]|0;b[o+(r+-1<<2)+2>>1]=u;b[o+(r<<2)>>1]=b[v>>1]|0;b[o+(r<<2)+2>>1]=u;b[t+((u&65535)<<6)+48>>1]=r+-1;b[t+((u&65535)<<6)+54>>1]=(p&65535)<<1;o=(c[a+60>>2]|0)+56|0;b[o>>1]=(e[o>>1]|0)+2;o=c[a+72>>2]|0;n=e[o+(r+-1<<2)>>1]|e[o+(r+-1<<2)+2>>1]<<16;b[o+((r|1)<<2)>>1]=n;b[o+((r|1)<<2)+2>>1]=n>>>16;o=c[a+72>>2]|0;b[o+(r+-1<<2)>>1]=b[v+6+2>>1]|0;b[o+(r+-1<<2)+2>>1]=u;b[o+(r<<2)>>1]=b[v+2>>1]|0;b[o+(r<<2)+2>>1]=u;b[t+((u&65535)<<6)+50>>1]=r+-1;b[t+((u&65535)<<6)+56>>1]=(p&65535)<<1;o=(c[a+60>>2]|0)+58|0;b[o>>1]=(e[o>>1]|0)+2;o=c[a+76>>2]|0;n=e[o+(r+-1<<2)>>1]|e[o+(r+-1<<2)+2>>1]<<16;b[o+((r|1)<<2)>>1]=n;b[o+((r|1)<<2)+2>>1]=n>>>16;o=c[a+76>>2]|0;b[o+(r+-1<<2)>>1]=b[v+6+4>>1]|0;b[o+(r+-1<<2)+2>>1]=u;b[o+(r<<2)>>1]=b[v+4>>1]|0;b[o+(r<<2)+2>>1]=u;b[t+((u&65535)<<6)+52>>1]=r+-1;b[t+((u&65535)<<6)+58>>1]=(p&65535)<<1;p=c[a+68>>2]|0;r=e[t+((u&65535)<<6)+48>>1]|0;o=c[a+60>>2]|0;n=b[p+(r<<2)+-4>>1]|0;if((e[p+(r<<2)>>1]|0)<(n&65535)){s=o+((e[p+(r<<2)+2>>1]|0)<<6)+48|0;q=p+(r<<2)|0;p=p+(r<<2)+-4|0;while(1){r=e[q+-2>>1]|0;n=(n&1)==0?o+(r<<6)+48|0:o+(r<<6)+54|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;b[s>>1]=(b[s>>1]|0)+-1<<16>>16;n=e[q>>1]|e[q+2>>1]<<16;r=e[p>>1]|e[p+2>>1]<<16;b[q>>1]=r;b[q+2>>1]=r>>>16;b[p>>1]=n;b[p+2>>1]=n>>>16;q=q+-4|0;p=p+-4|0;n=b[p>>1]|0;if((e[q>>1]|0)>=(n&65535))break;o=c[a+60>>2]|0}n=c[a+68>>2]|0}else n=p;o=e[t+((u&65535)<<6)+54>>1]|0;r=n+(o<<2)|0;p=b[r+-4>>1]|0;a:do if((e[r>>1]|0)<(p&65535)){q=c[a+60>>2]|0;s=q+((e[n+(o<<2)+2>>1]|0)<<6)+54|0;n=p;p=r;o=r+-4|0;while(1){r=e[p+-2>>1]|0;n=(n&1)==0?q+(r<<6)+48|0:q+(r<<6)+54|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;b[s>>1]=(b[s>>1]|0)+-1<<16>>16;n=e[p>>1]|e[p+2>>1]<<16;r=e[o>>1]|e[o+2>>1]<<16;b[p>>1]=r;b[p+2>>1]=r>>>16;b[o>>1]=n;b[o+2>>1]=n>>>16;p=p+-4|0;o=o+-4|0;n=b[o>>1]|0;if((e[p>>1]|0)>=(n&65535))break a;q=c[a+60>>2]|0}}while(0);p=c[a+72>>2]|0;r=e[t+((u&65535)<<6)+50>>1]|0;o=c[a+60>>2]|0;n=b[p+(r<<2)+-4>>1]|0;if((e[p+(r<<2)>>1]|0)<(n&65535)){s=o+((e[p+(r<<2)+2>>1]|0)<<6)+50|0;q=p+(r<<2)|0;p=p+(r<<2)+-4|0;while(1){r=e[q+-2>>1]|0;n=(n&1)==0?o+(r<<6)+50|0:o+(r<<6)+56|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;b[s>>1]=(b[s>>1]|0)+-1<<16>>16;n=e[q>>1]|e[q+2>>1]<<16;r=e[p>>1]|e[p+2>>1]<<16;b[q>>1]=r;b[q+2>>1]=r>>>16;b[p>>1]=n;b[p+2>>1]=n>>>16;q=q+-4|0;p=p+-4|0;n=b[p>>1]|0;if((e[q>>1]|0)>=(n&65535))break;o=c[a+60>>2]|0}n=c[a+72>>2]|0}else n=p;o=e[t+((u&65535)<<6)+56>>1]|0;r=n+(o<<2)|0;p=b[r+-4>>1]|0;b:do if((e[r>>1]|0)<(p&65535)){q=c[a+60>>2]|0;s=q+((e[n+(o<<2)+2>>1]|0)<<6)+56|0;n=p;p=r;o=r+-4|0;while(1){r=e[p+-2>>1]|0;n=(n&1)==0?q+(r<<6)+50|0:q+(r<<6)+56|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;b[s>>1]=(b[s>>1]|0)+-1<<16>>16;n=e[p>>1]|e[p+2>>1]<<16;r=e[o>>1]|e[o+2>>1]<<16;b[p>>1]=r;b[p+2>>1]=r>>>16;b[o>>1]=n;b[o+2>>1]=n>>>16;p=p+-4|0;o=o+-4|0;n=b[o>>1]|0;if((e[p>>1]|0)>=(n&65535))break b;q=c[a+60>>2]|0}}while(0);kh(a,2,b[t+((u&65535)<<6)+52>>1]|0);gh(a,2,b[t+((u&65535)<<6)+58>>1]|0,m);o=c[a+60>>2]|0;n=c[a+108>>2]|0;if(!n){i=o+((u&65535)<<6)|0;l=v;return i|0}c[o+((u&65535)<<6)+60>>2]=xb[c[(c[n>>2]|0)+8>>2]&3](n,d,f,h,i,j,k,m,0)|0;i=o+((u&65535)<<6)|0;l=v;return i|0}function rd(a,b,d,e,f,g,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;i=c[d+8>>2]|0;if(!i){a=0;return a|0}j=i;D=i;i=0;do{if((c[D+20>>2]|0)>(c[a+100>>2]|0)){y=c[D+12>>2]|0;w=c[y+88>>2]|0;A=w-(c[d+88>>2]|0)|0;x=c[y+92>>2]|0;B=x-(c[d+92>>2]|0)|0;y=c[y+96>>2]|0;C=y-(c[d+96>>2]|0)|0;k=rs(A|0,((A|0)<0)<<31>>31|0,c[g>>2]|0,c[g+4>>2]|0)|0;n=z;j=rs(B|0,((B|0)<0)<<31>>31|0,c[g+8>>2]|0,c[g+8+4>>2]|0)|0;n=cw(j|0,z|0,k|0,n|0)|0;k=z;j=rs(C|0,((C|0)<0)<<31>>31|0,c[g+16>>2]|0,c[g+16+4>>2]|0)|0;j=cw(n|0,k|0,j|0,z|0)|0;k=z;n=rs(c[f>>2]|0,c[f+4>>2]|0,A|0,((A|0)<0)<<31>>31|0)|0;v=z;l=rs(c[f+8>>2]|0,c[f+8+4>>2]|0,B|0,((B|0)<0)<<31>>31|0)|0;v=cw(l|0,z|0,n|0,v|0)|0;n=z;l=rs(c[f+16>>2]|0,c[f+16+4>>2]|0,C|0,((C|0)<0)<<31>>31|0)|0;l=cw(v|0,n|0,l|0,z|0)|0;n=z;if((k|0)>0|(k|0)==0&j>>>0>0){u=j;v=k;j=1}else{u=Nv(0,0,j|0,k|0)|0;u=(j|0)!=0|(k|0)!=0?u:0;v=(j|0)!=0|(k|0)!=0?z:0;j=((j|0)!=0|(k|0)!=0)<<31>>31}if(!((n|0)>0|(n|0)==0&l>>>0>0)){k=Nv(0,0,l|0,n|0)|0;m=(l|0)!=0|(n|0)!=0?0-j|0:j;k=(l|0)!=0|(n|0)!=0?k:0;j=(l|0)!=0|(n|0)!=0?z:0;if(!((m|0)==0&((k|0)==0&(j|0)==0))){n=j;o=8}}else{k=l;m=j;o=8}a:do if((o|0)==8){o=0;if(!i){c[h>>2]=u;c[h+4>>2]=v;c[h+8>>2]=k;c[h+8+4>>2]=n;c[h+16>>2]=m;i=D;break}j=c[h+16>>2]|0;if((m|0)==(j|0)){if(m|0){o=c[h+8>>2]|0;r=c[h+8+4>>2]|0;l=rs(o|0,0,u|0,0)|0;j=z;s=rs(r|0,0,u|0,0)|0;q=z;o=rs(o|0,0,v|0,0)|0;p=z;r=rs(r|0,0,v|0,0)|0;G=z;o=cw(s|0,0,o|0,0)|0;s=z;G=cw(q|0,0,r|0,G|0)|0;p=cw(G|0,z|0,p|0,0)|0;s=cw(p|0,z|0,s|0,0)|0;p=z;j=cw(0,o|0,l|0,j|0)|0;l=z;o=cw(s|0,p|0,(l>>>0>>0|(l|0)==(o|0)&j>>>0<0)&1|0,0)|0;p=z;s=c[h>>2]|0;G=c[h+4>>2]|0;r=rs(s|0,0,k|0,0)|0;q=z;E=rs(G|0,0,k|0,0)|0;H=z;s=rs(s|0,0,n|0,0)|0;t=z;G=rs(G|0,0,n|0,0)|0;F=z;s=cw(E|0,0,s|0,0)|0;E=z;F=cw(H|0,0,G|0,F|0)|0;t=cw(F|0,z|0,t|0,0)|0;E=cw(t|0,z|0,E|0,0)|0;t=z;q=cw(0,s|0,r|0,q|0)|0;r=z;s=cw(E|0,t|0,(r>>>0>>0|(r|0)==(s|0)&q>>>0<0)&1|0,0)|0;t=z;if(!(p>>>0>>0|(p|0)==(t|0)&o>>>0>>0))if(!(p>>>0>t>>>0|(p|0)==(t|0)&o>>>0>s>>>0))if(l>>>0>>0|(l|0)==(r|0)&j>>>0>>0)j=-1;else j=(l>>>0>r>>>0|(l|0)==(r|0)&j>>>0>q>>>0)&1;else j=1;else j=-1;j=O(j,m)|0;o=18}}else{j=m-j|0;o=18}do if((o|0)==18){o=0;if((j|0)>=0)if(!j)break;else break a;else{c[h>>2]=u;c[h+4>>2]=v;c[h+8>>2]=k;c[h+8+4>>2]=n;c[h+16>>2]=m;i=D;break a}}while(0);j=(c[i+4>>2]|0)==(D|0);if((c[i>>2]|0)==(D|0))if(j){H=c[e+8>>2]|0;E=O(H,B)|0;u=c[e+4>>2]|0;E=E-(O(u,C)|0)|0;G=c[e>>2]|0;H=(O(G,C)|0)-(O(A,H)|0)|0;G=(O(A,u)|0)-(O(G,B)|0)|0;u=c[i+12>>2]|0;j=c[(c[D+8>>2]|0)+12>>2]|0;B=c[j+88>>2]|0;A=(c[u+88>>2]|0)-B|0;v=c[j+92>>2]|0;C=(c[u+92>>2]|0)-v|0;j=c[j+96>>2]|0;u=(c[u+96>>2]|0)-j|0;F=(O(y-j|0,C)|0)-(O(x-v|0,u)|0)|0;j=(O(w-B|0,u)|0)-(O(y-j|0,A)|0)|0;C=(O(x-v|0,A)|0)-(O(w-B|0,C)|0)|0;E=rs(F|0,((F|0)<0)<<31>>31|0,E|0,((E|0)<0)<<31>>31|0)|0;F=z;H=rs(j|0,((j|0)<0)<<31>>31|0,H|0,((H|0)<0)<<31>>31|0)|0;j=z;G=rs(C|0,((C|0)<0)<<31>>31|0,G|0,((G|0)<0)<<31>>31|0)|0;G=cw(E|0,F|0,G|0,z|0)|0;j=cw(G|0,z|0,H|0,j|0)|0;H=z;j=(H|0)>0|(H|0)==0&j>>>0>0?2:1}else j=2;else j=j&1;i=(j|0)==2^b?i:D}while(0);j=c[d+8>>2]|0}D=c[D>>2]|0}while((D|0)!=(j|0));return i|0}function sd(d,e,f,h){d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0.0,v=0.0,w=0,x=0.0,y=0,z=0.0,A=0.0,B=0.0;k=+g[e>>2];m=(g[j>>2]=k,c[j>>2]|0);r=k<999999984306749440.0?m:1566444395;i=+g[e+4>>2];o=(g[j>>2]=i,c[j>>2]|0);t=i<999999984306749440.0?o:1566444395;z=+g[e+8>>2];q=(g[j>>2]=z,c[j>>2]|0);y=z<999999984306749440.0?q:1566444395;m=k>-999999984306749440.0?m:-581039253;o=i>-999999984306749440.0?o:-581039253;q=z>-999999984306749440.0?q:-581039253;z=+g[e+16>>2];w=z<(c[j>>2]=r,+g[j>>2]);l=(g[j>>2]=z,c[j>>2]|0);r=w?l:r;i=+g[e+20>>2];w=i<(c[j>>2]=t,+g[j>>2]);n=(g[j>>2]=i,c[j>>2]|0);t=w?n:t;k=+g[e+24>>2];w=k<(c[j>>2]=y,+g[j>>2]);p=(g[j>>2]=k,c[j>>2]|0);y=w?p:y;w=(c[j>>2]=m,+g[j>>2])>2]=o,+g[j>>2])>2]=q,+g[j>>2])>2];m=z<(c[j>>2]=r,+g[j>>2]);o=(g[j>>2]=z,c[j>>2]|0);r=m?o:r;k=+g[e+36>>2];m=k<(c[j>>2]=t,+g[j>>2]);p=(g[j>>2]=k,c[j>>2]|0);m=m?p:t;i=+g[e+40>>2];l=i<(c[j>>2]=y,+g[j>>2]);n=(g[j>>2]=i,c[j>>2]|0);l=l?n:y;o=(c[j>>2]=w,+g[j>>2])>2]=s,+g[j>>2])>2]=q,+g[j>>2])>2]=o,+g[j>>2]);k=(c[j>>2]=r,+g[j>>2]);if(i-k<2.0000000949949026e-03){o=(g[j>>2]=i+1.0000000474974513e-03,c[j>>2]|0);n=(g[j>>2]=k+-1.0000000474974513e-03,c[j>>2]|0)}else n=r;i=(c[j>>2]=p,+g[j>>2]);k=(c[j>>2]=m,+g[j>>2]);if(i-k<2.0000000949949026e-03){p=(g[j>>2]=i+1.0000000474974513e-03,c[j>>2]|0);m=(g[j>>2]=k+-1.0000000474974513e-03,c[j>>2]|0)}i=(c[j>>2]=q,+g[j>>2]);k=(c[j>>2]=l,+g[j>>2]);if(i-k<2.0000000949949026e-03){q=(g[j>>2]=i+1.0000000474974513e-03,c[j>>2]|0);l=(g[j>>2]=k+-1.0000000474974513e-03,c[j>>2]|0)}r=c[d+8>>2]|0;k=+g[r+4>>2];z=(c[j>>2]=n,+g[j>>2])-k;i=+g[r+8>>2];x=(c[j>>2]=m,+g[j>>2])-i;B=+g[r+12>>2];u=+g[r+36>>2];v=+g[r+40>>2];A=+g[r+44>>2];r=~~(((c[j>>2]=l,+g[j>>2])-B)*A)&65535&-2;k=(c[j>>2]=o,+g[j>>2])-k;i=(c[j>>2]=p,+g[j>>2])-i;q=~~(((c[j>>2]=q,+g[j>>2])-B)*A+1.0)&65535|1;p=c[d+4>>2]|0;l=c[p+4>>2]|0;if((l|0)!=(c[p+8>>2]|0)){d=l;y=p+12|0;y=c[y>>2]|0;w=y+(d<<4)|0;b[w>>1]=~~(z*u)&65535&-2;w=y+(d<<4)+2|0;b[w>>1]=~~(x*v)&65535&-2;w=y+(d<<4)+4|0;b[w>>1]=r;w=y+(d<<4)+6|0;b[w>>1]=~~(k*u+1.0)&65535|1;w=y+(d<<4)+8|0;b[w>>1]=~~(i*v+1.0)&65535|1;w=y+(d<<4)+10|0;b[w>>1]=q;d=y+(d<<4)+12|0;c[d>>2]=f<<21|h;h=c[p+4>>2]|0;h=h+1|0;c[p+4>>2]=h;return}o=l|0?l<<1:1;if((l|0)>=(o|0)){d=l;y=p+12|0;y=c[y>>2]|0;w=y+(d<<4)|0;b[w>>1]=~~(z*u)&65535&-2;w=y+(d<<4)+2|0;b[w>>1]=~~(x*v)&65535&-2;w=y+(d<<4)+4|0;b[w>>1]=r;w=y+(d<<4)+6|0;b[w>>1]=~~(k*u+1.0)&65535|1;w=y+(d<<4)+8|0;b[w>>1]=~~(i*v+1.0)&65535|1;w=y+(d<<4)+10|0;b[w>>1]=q;d=y+(d<<4)+12|0;c[d>>2]=f<<21|h;h=c[p+4>>2]|0;h=h+1|0;c[p+4>>2]=h;return}if(!o)m=0;else{c[6472]=(c[6472]|0)+1;l=ic((o<<4|3)+16|0)|0;if(!l)m=0;else{c[(l+4+15&-16)+-4>>2]=l;m=l+4+15&-16}l=c[p+4>>2]|0}if((l|0)>0){n=0;do{d=m+(n<<4)|0;y=(c[p+12>>2]|0)+(n<<4)|0;c[d>>2]=c[y>>2];c[d+4>>2]=c[y+4>>2];c[d+8>>2]=c[y+8>>2];c[d+12>>2]=c[y+12>>2];n=n+1|0}while((n|0)!=(l|0))}l=c[p+12>>2]|0;if(l|0){if(a[p+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[l+-4>>2]|0)}c[p+12>>2]=0}a[p+16>>0]=1;c[p+12>>2]=m;c[p+8>>2]=o;d=c[p+4>>2]|0;y=p+12|0;y=c[y>>2]|0;w=y+(d<<4)|0;b[w>>1]=~~(z*u)&65535&-2;w=y+(d<<4)+2|0;b[w>>1]=~~(x*v)&65535&-2;w=y+(d<<4)+4|0;b[w>>1]=r;w=y+(d<<4)+6|0;b[w>>1]=~~(k*u+1.0)&65535|1;w=y+(d<<4)+8|0;b[w>>1]=~~(i*v+1.0)&65535|1;w=y+(d<<4)+10|0;b[w>>1]=q;d=y+(d<<4)+12|0;c[d>>2]=f<<21|h;h=c[p+4>>2]|0;h=h+1|0;c[p+4>>2]=h;return}function td(a,b){a=a|0;b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0;H=l;l=l+96|0;d=c[a+216>>2]|0;if(+g[d+4>>2]==0.0){G=0;l=H;return G|0}G=c[b>>2]|0;if(!(sb[c[(c[d>>2]|0)+8>>2]&31](d,c[G+188>>2]|0)|0)){G=1;l=H;return G|0}b=c[G+192>>2]|0;F=c[a+216>>2]|0;if((c[b+4>>2]|0)!=32){c[H+32>>2]=0;c[H+32+4>>2]=b;c[H+32+8>>2]=G;c[H+32+12>>2]=G+4;c[H+32+16>>2]=-1;c[H+32+20>>2]=-1;Kc(a+68|0,a+132|0,H+32|0,F);G=1;l=H;return G|0}if((G|0)==0?1:(c[G+236>>2]|0)!=8){G=1;l=H;return G|0}if(c[G+752>>2]|0?(c[G+988>>2]|0)==0:0)Rg(G);B=+g[a+180>>2]-+g[a+116>>2];E=+g[a+184>>2]-+g[a+120>>2];D=+g[a+188>>2]-+g[a+124>>2];b=c[G+988>>2]|0;if(!b){i=c[G+752>>2]|0;if((i|0)>0){q=c[G+760>>2]|0;f=1.0;e=1.0;b=0;r=0;k=-1;n=1065353216;d=0;do{K=c[q+(r*44|0)+8>>2]|0;J=c[q+(r*44|0)+12>>2]|0;I=c[q+(r*44|0)+16>>2]|0;h=+th(a+116|0,B,E,D,+g[K+8>>2],+g[K+12>>2],+g[K+16>>2],+g[J+8>>2],+g[J+12>>2],+g[J+16>>2],+g[I+8>>2],+g[I+12>>2],+g[I+16>>2],f);if(h>0.0){e=h;f=h;b=b+1|0;k=r;n=(g[j>>2]=h,c[j>>2]|0);d=3}r=r+1|0}while((r|0)!=(i|0))}else{e=1.0;b=0;k=-1;n=1065353216;d=0}}else{c[H+32>>2]=3364;c[H+32+4>>2]=c[a+116>>2];c[H+32+4+4>>2]=c[a+116+4>>2];c[H+32+4+8>>2]=c[a+116+8>>2];c[H+32+4+12>>2]=c[a+116+12>>2];g[H+32+36>>2]=B;g[H+32+40>>2]=E;g[H+32+44>>2]=D;g[H+32+48>>2]=0.0;c[H+32+20>>2]=c[a+180>>2];c[H+32+20+4>>2]=c[a+180+4>>2];c[H+32+20+8>>2]=c[a+180+8>>2];c[H+32+20+12>>2]=c[a+180+12>>2];c[H+32+52>>2]=1065353216;c[H+32+56>>2]=0;c[H+32+60>>2]=0;ze(b,a+116|0,a+180|0,H+32|0);b=c[H+32+56>>2]|0;if(!b){e=1.0;i=0;k=-1;n=1065353216;d=0}else{n=c[H+32+52>>2]|0;e=(c[j>>2]=n,+g[j>>2]);i=1;k=(b-(c[G+760>>2]|0)|0)/44|0;d=3}b=i}q=c[G+772>>2]|0;if((q|0)>0){r=c[G+780>>2]|0;i=0;do{K=c[r+(i*104|0)+8>>2]|0;v=+g[K+8>>2];w=+g[K+12>>2];x=+g[K+16>>2];K=c[r+(i*104|0)+12>>2]|0;m=+g[K+8>>2];o=+g[K+12>>2];p=+g[K+16>>2];K=c[r+(i*104|0)+16>>2]|0;y=+g[K+8>>2];z=+g[K+12>>2];A=+g[K+16>>2];f=(c[j>>2]=n,+g[j>>2]);h=+th(a+116|0,B,E,D,v,w,x,m,o,p,y,z,A,f);if(h>0.0){f=h;e=h;b=b+1|0;k=i;n=(g[j>>2]=h,c[j>>2]|0);d=4}K=c[r+(i*104|0)+20>>2]|0;s=+g[K+8>>2];t=+g[K+12>>2];u=+g[K+16>>2];f=+th(a+116|0,B,E,D,v,w,x,m,o,p,s,t,u,f);if(f>0.0){h=f;e=f;b=b+1|0;k=i;n=(g[j>>2]=f,c[j>>2]|0);d=4}else h=(c[j>>2]=n,+g[j>>2]);f=+th(a+116|0,B,E,D,m,o,p,y,z,A,s,t,u,h);if(f>0.0){h=f;e=f;b=b+1|0;k=i;n=(g[j>>2]=f,c[j>>2]|0);d=4}else h=(c[j>>2]=n,+g[j>>2]);f=+th(a+116|0,B,E,D,v,w,x,y,z,A,s,t,u,h);if(f>0.0){e=f;b=b+1|0;k=i;n=(g[j>>2]=f,c[j>>2]|0);d=4}i=i+1|0}while((i|0)!=(q|0));s=e}else s=e;if(!b){K=1;l=H;return K|0}if(!(s<=+g[F+4>>2])){K=1;l=H;return K|0}c[H+32>>2]=0;c[H+32+4>>2]=k;m=+g[a+180>>2]-+g[a+116>>2];p=+g[a+184>>2]-+g[a+120>>2];o=+g[a+188>>2]-+g[a+124>>2];e=1.0/+C(+(m*m+p*p+o*o));if((d|0)==3){b=c[G+748+12>>2]|0;e=+g[b+(k*44|0)+20>>2];h=+g[b+(k*44|0)+24>>2];f=+g[b+(k*44|0)+28>>2];if(m*e+p*h+o*f>0.0){m=-e;h=-h;f=-f;e=0.0}else{m=e;e=+g[b+(k*44|0)+32>>2]}}else{m=-(m*e);h=-(p*e);f=-(o*e);e=0.0}c[H>>2]=G;c[H+4>>2]=H+32;g[H+8>>2]=m;g[H+12>>2]=h;g[H+16>>2]=f;g[H+20>>2]=e;g[H+24>>2]=s;+jb[c[(c[F>>2]|0)+12>>2]&15](F,H,1);K=1;l=H;return K|0}function ud(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0,k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0;v=l;l=l+544|0;j=h;k=j+36|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[v+384>>2]=a;c[v+384+4>>2]=d;o=+g[e>>2];F=+g[b>>2];n=+g[e+16>>2];i=+g[b+16>>2];m=+g[e+32>>2];G=+g[b+32>>2];w=+g[b+4>>2];H=+g[b+20>>2];x=+g[b+36>>2];t=+g[b+8>>2];r=+g[b+24>>2];p=+g[b+40>>2];E=+g[e+4>>2];D=+g[e+20>>2];B=+g[e+36>>2];A=+g[e+8>>2];z=+g[e+24>>2];y=+g[e+40>>2];g[v+384+8>>2]=o*F+n*i+m*G;g[v+384+12>>2]=o*w+n*H+m*x;g[v+384+16>>2]=o*t+n*r+m*p;g[v+384+20>>2]=0.0;g[v+384+24>>2]=F*E+i*D+G*B;g[v+384+28>>2]=w*E+H*D+x*B;g[v+384+32>>2]=t*E+r*D+p*B;g[v+384+36>>2]=0.0;g[v+384+40>>2]=F*A+i*z+G*y;g[v+384+44>>2]=w*A+H*z+x*y;g[v+384+48>>2]=t*A+r*z+p*y;g[v+384+52>>2]=0.0;p=+g[e+48>>2]-+g[b+48>>2];r=+g[e+52>>2]-+g[b+52>>2];t=+g[e+56>>2]-+g[b+56>>2];x=+g[b>>2];H=+g[e>>2];w=+g[b+16>>2];G=+g[e+16>>2];i=+g[b+32>>2];F=+g[e+32>>2];m=+g[b+4>>2];n=+g[b+20>>2];o=+g[b+36>>2];q=+g[b+8>>2];s=+g[b+24>>2];u=+g[b+40>>2];g[v+384+56>>2]=x*H+w*G+i*F;g[v+384+60>>2]=x*E+w*D+i*B;g[v+384+64>>2]=x*A+w*z+i*y;g[v+384+68>>2]=0.0;g[v+384+72>>2]=H*m+G*n+F*o;g[v+384+76>>2]=E*m+D*n+B*o;g[v+384+80>>2]=A*m+z*n+y*o;g[v+384+84>>2]=0.0;g[v+384+88>>2]=H*q+G*s+F*u;g[v+384+92>>2]=E*q+D*s+B*u;g[v+384+96>>2]=A*q+z*s+y*u;g[v+384+100>>2]=0.0;g[v+384+104>>2]=p*x+r*w+t*i;g[v+384+108>>2]=p*m+r*n+t*o;g[v+384+112>>2]=p*q+r*s+t*u;g[v+384+116>>2]=0.0;c[v+384+120>>2]=80;c[v+384+124>>2]=0;c[v+364>>2]=0;c[v+128>>2]=0;c[v+128+4>>2]=0;c[v+128+8>>2]=0;c[v+128+12>>2]=0;c[v+376>>2]=2;c[v+368>>2]=0;g[v+144>>2]=0.0;f=Ac(v,v+384|0,f)|0;if(f|0){c[h>>2]=(f|0)==1?1:2;b=0;l=v;return b|0}f=c[v+372>>2]|0;if(!(c[f+32>>2]|0)){q=0.0;p=0.0;o=0.0;n=0.0;m=0.0;i=0.0}else{e=0;q=0.0;p=0.0;o=0.0;n=0.0;m=0.0;i=0.0;do{u=+g[f+16+(e<<2)>>2];a=c[v+384+120>>2]|0;k=c[v+384+124>>2]|0;d=(c[v+384>>2]|0)+(k>>1)|0;if(k&1)a=c[(c[d>>2]|0)+a>>2]|0;Kb[a&127](v+528|0,d,c[f+(e<<2)>>2]|0);q=q+u*+g[v+528>>2];o=o+u*+g[v+528+4>>2];p=p+u*+g[v+528+8>>2];f=c[(c[v+372>>2]|0)+(e<<2)>>2]|0;r=-+g[f>>2];s=-+g[f+4>>2];t=-+g[f+8>>2];f=c[v+384+120>>2]|0;k=c[v+384+124>>2]|0;a=(c[v+384+4>>2]|0)+(k>>1)|0;if(k&1)f=c[(c[a>>2]|0)+f>>2]|0;G=+g[v+384+24>>2]*r+ +g[v+384+28>>2]*s+ +g[v+384+32>>2]*t;F=+g[v+384+40>>2]*r+ +g[v+384+44>>2]*s+ +g[v+384+48>>2]*t;g[v+512>>2]=+g[v+384+8>>2]*r+ +g[v+384+12>>2]*s+ +g[v+384+16>>2]*t;g[v+512+4>>2]=G;g[v+512+8>>2]=F;g[v+512+12>>2]=0.0;Kb[f&127](v+528|0,a,v+512|0);F=+g[v+528>>2];G=+g[v+528+4>>2];H=+g[v+528+8>>2];n=n+u*(F*+g[v+384+56>>2]+G*+g[v+384+60>>2]+H*+g[v+384+64>>2]+ +g[v+384+104>>2]);i=i+u*(F*+g[v+384+72>>2]+G*+g[v+384+76>>2]+H*+g[v+384+80>>2]+ +g[v+384+108>>2]);m=m+u*(F*+g[v+384+88>>2]+G*+g[v+384+92>>2]+H*+g[v+384+96>>2]+ +g[v+384+112>>2]);e=e+1|0;f=c[v+372>>2]|0}while(e>>>0<(c[f+32>>2]|0)>>>0)}E=q*+g[b+16>>2]+o*+g[b+20>>2]+p*+g[b+24>>2]+ +g[b+52>>2];F=q*+g[b+32>>2]+o*+g[b+36>>2]+p*+g[b+40>>2]+ +g[b+56>>2];g[h+4>>2]=q*+g[b>>2]+o*+g[b+4>>2]+p*+g[b+8>>2]+ +g[b+48>>2];g[h+8>>2]=E;g[h+12>>2]=F;g[h+16>>2]=0.0;F=n*+g[b+16>>2]+i*+g[b+20>>2]+m*+g[b+24>>2]+ +g[b+52>>2];E=n*+g[b+32>>2]+i*+g[b+36>>2]+m*+g[b+40>>2]+ +g[b+56>>2];g[h+20>>2]=n*+g[b>>2]+i*+g[b+4>>2]+m*+g[b+8>>2]+ +g[b+48>>2];g[h+24>>2]=F;g[h+28>>2]=E;g[h+32>>2]=0.0;E=q-n;F=o-i;H=p-m;g[h+48>>2]=0.0;G=+C(+(E*E+F*F+H*H));g[h+52>>2]=G;G=G>9.999999747378752e-05?1.0/G:1.0;g[h+36>>2]=G*E;g[h+40>>2]=G*F;g[h+44>>2]=G*H;b=1;l=v;return b|0}function vd(b,d,e,f,h,i){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;var k=0,l=0,m=0.0,n=0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0,C=0,D=0;D=c[b+88>>2]|0;if((D|0)==(c[b+92>>2]|0)?(o=D|0?D<<1:1,(D|0)<(o|0)):0){if(!o){l=D;n=0}else{c[6472]=(c[6472]|0)+1;k=ic((o*152|3)+16|0)|0;if(!k)k=0;else{c[(k+4+15&-16)+-4>>2]=k;k=k+4+15&-16}l=c[b+88>>2]|0;n=k}if((l|0)>0){k=0;do{_h(n+(k*152|0)|0,(c[b+96>>2]|0)+(k*152|0)|0,152)|0;k=k+1|0}while((k|0)!=(l|0))}k=c[b+96>>2]|0;if(k|0){if(a[b+100>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0)}c[b+96>>2]=0}a[b+100>>0]=1;c[b+96>>2]=n;c[b+92>>2]=o;k=c[b+88>>2]|0}else k=D;c[b+88>>2]=k+1;C=c[b+96>>2]|0;c[C+(D*152|0)+140>>2]=h;c[C+(D*152|0)+16>>2]=0;c[C+(D*152|0)+16+4>>2]=0;c[C+(D*152|0)+16+8>>2]=0;c[C+(D*152|0)+16+12>>2]=0;g[C+(D*152|0)+48>>2]=-0.0;g[C+(D*152|0)+52>>2]=-0.0;g[C+(D*152|0)+56>>2]=-0.0;g[C+(D*152|0)+60>>2]=0.0;b=c[b+16>>2]|0;o=c[b+(e*244|0)+240>>2]|0;B=c[b+(f*244|0)+240>>2]|0;c[C+(D*152|0)+144>>2]=e;c[C+(D*152|0)+148>>2]=f;h=c[i+88>>2]|0;c[C+(D*152|0)+104>>2]=h;c[C+(D*152|0)+132>>2]=0;g[C+(D*152|0)+100>>2]=0.0;g[C+(D*152|0)+96>>2]=0.0;x=-+g[d>>2];y=-+g[d+4>>2];z=-+g[d+8>>2];g[C+(D*152|0)>>2]=x;g[C+(D*152|0)+4>>2]=y;g[C+(D*152|0)+8>>2]=z;g[C+(D*152|0)+12>>2]=0.0;A=(c[j>>2]=h,+g[j>>2]);if(o|0){k=(g[j>>2]=(+g[o+264>>2]*x+ +g[o+268>>2]*y+ +g[o+272>>2]*z)*+g[o+544>>2],c[j>>2]|0);l=(g[j>>2]=(+g[o+280>>2]*x+ +g[o+284>>2]*y+ +g[o+288>>2]*z)*+g[o+548>>2],c[j>>2]|0);n=(g[j>>2]=(+g[o+296>>2]*x+ +g[o+300>>2]*y+ +g[o+304>>2]*z)*+g[o+552>>2],c[j>>2]|0)}else{k=0;l=0;n=0}c[C+(D*152|0)+64>>2]=k;c[C+(D*152|0)+68>>2]=l;c[C+(D*152|0)+72>>2]=n;g[C+(D*152|0)+76>>2]=0.0;u=+g[d>>2];v=+g[d+4>>2];w=+g[d+8>>2];d=c[d+12>>2]|0;g[C+(D*152|0)+32>>2]=u;g[C+(D*152|0)+36>>2]=v;g[C+(D*152|0)+40>>2]=w;c[C+(D*152|0)+44>>2]=d;if(B|0){k=(g[j>>2]=(u*+g[B+264>>2]+v*+g[B+268>>2]+w*+g[B+272>>2])*+g[B+544>>2],c[j>>2]|0);l=(g[j>>2]=(u*+g[B+280>>2]+v*+g[B+284>>2]+w*+g[B+288>>2])*+g[B+548>>2],c[j>>2]|0);n=(g[j>>2]=(u*+g[B+296>>2]+v*+g[B+300>>2]+w*+g[B+304>>2])*+g[B+552>>2],c[j>>2]|0)}else{k=0;l=0;n=0}c[C+(D*152|0)+80>>2]=k;c[C+(D*152|0)+84>>2]=l;c[C+(D*152|0)+88>>2]=n;g[C+(D*152|0)+92>>2]=0.0;if(o|0){m=+g[o+264>>2]*x+ +g[o+268>>2]*y+ +g[o+272>>2]*z;p=+g[o+280>>2]*x+ +g[o+284>>2]*y+ +g[o+288>>2]*z;q=+g[o+296>>2]*x+ +g[o+300>>2]*y+ +g[o+304>>2]*z}else{m=0.0;p=0.0;q=0.0}if(B|0){r=+g[B+264>>2]*u+ +g[B+268>>2]*v+ +g[B+272>>2]*w;s=u*+g[B+280>>2]+v*+g[B+284>>2]+w*+g[B+288>>2];t=u*+g[B+296>>2]+v*+g[B+300>>2]+w*+g[B+304>>2]}else{r=0.0;s=0.0;t=0.0}s=1.0/(m*x+p*y+q*z+0.0+(r*u+s*v+t*w));g[C+(D*152|0)+108>>2]=s;if(o|0){p=(+g[b+(e*244|0)+176>>2]+ +g[b+(e*244|0)+208>>2])*0.0+(+g[b+(e*244|0)+180>>2]+ +g[b+(e*244|0)+212>>2])*0.0+(+g[b+(e*244|0)+184>>2]+ +g[b+(e*244|0)+216>>2])*0.0;q=+g[b+(e*244|0)+192>>2];r=+g[b+(e*244|0)+196>>2];m=+g[b+(e*244|0)+200>>2]}else{p=0.0;q=0.0;r=0.0;m=0.0}m=p+(q*x+r*y+m*z);if(!B){y=-0.0;t=0.0;x=0.0;z=0.0;u=t*u;x=x*v;x=u+x;z=z*w;z=x+z;z=y+z;z=m+z;z=0.0-z;z=s*z;f=C+(D*152|0)+112|0;g[f>>2]=z;f=C+(D*152|0)+116|0;g[f>>2]=0.0;A=-A;f=C+(D*152|0)+120|0;g[f>>2]=A;f=C+(D*152|0)+124|0;c[f>>2]=h;return}y=(+g[b+(f*244|0)+176>>2]+ +g[b+(f*244|0)+208>>2])*-0.0+(+g[b+(f*244|0)+180>>2]+ +g[b+(f*244|0)+212>>2])*-0.0+(+g[b+(f*244|0)+184>>2]+ +g[b+(f*244|0)+216>>2])*-0.0;t=+g[b+(f*244|0)+192>>2];x=+g[b+(f*244|0)+196>>2];z=+g[b+(f*244|0)+200>>2];u=t*u;x=x*v;x=u+x;z=z*w;z=x+z;z=y+z;z=m+z;z=0.0-z;z=s*z;f=C+(D*152|0)+112|0;g[f>>2]=z;f=C+(D*152|0)+116|0;g[f>>2]=0.0;A=-A;f=C+(D*152|0)+120|0;g[f>>2]=A;f=C+(D*152|0)+124|0;c[f>>2]=h;return}function wd(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0.0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0;z=l;l=l+48|0;switch(c[b+4>>2]|0){case 8:{c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;l=z;return}case 0:{w=+g[b+28>>2];x=+g[b+28+4>>2];x=+g[d+4>>2]>=0.0?x:-x;y=+g[b+28+8>>2];y=+g[d+8>>2]>=0.0?y:-y;g[a>>2]=+g[d>>2]>=0.0?w:-w;g[a+4>>2]=x;g[a+8>>2]=y;g[a+12>>2]=0.0;l=z;return}case 1:{u=+g[d>>2];v=+g[d+4>>2];y=+g[d+8>>2];x=u*+g[b+56>>2]+v*+g[b+56+4>>2]+y*+g[b+56+8>>2];w=u*+g[b+56+16>>2]+v*+g[b+56+20>>2]+y*+g[b+56+24>>2];y=u*+g[b+56+32>>2]+v*+g[b+56+36>>2]+y*+g[b+56+40>>2];d=x>2]|0;p=c[b+56+(d<<4)+8>>2]|0;c[a>>2]=c[b+56+(d<<4)>>2];c[a+4>>2]=o;c[a+8>>2]=p;g[a+12>>2]=0.0;l=z;return}case 13:{c[z+32>>2]=c[b+28>>2];c[z+32+4>>2]=c[b+28+4>>2];c[z+32+8>>2]=c[b+28+8>>2];c[z+32+12>>2]=c[b+28+12>>2];c[z+16>>2]=c[d>>2];f=c[d+4>>2]|0;c[z+16+4>>2]=f;p=c[d+8>>2]|0;c[z+16+8>>2]=p;g[z+16+12>>2]=0.0;d=c[b+52>>2]|0;e=(c[j>>2]=p,+g[j>>2]);switch(d|0){case 2:{e=(c[j>>2]=f,+g[j>>2]);f=0;b=2;o=1;break}case 1:{f=0;b=1;o=2;break}default:{f=1;b=0;o=2}}n=+g[z+32+(f<<2)>>2];h=+g[z+32+(d<<2)>>2];i=+g[z+16+(f<<2)>>2];m=+C(+(i*i+e*e));k=+g[z+16+(b<<2)>>2];if(m!=0.0){g[z+(f<<2)>>2]=i*(n/m);g[z+(b<<2)>>2]=k<0.0?-h:h;e=n/m*e}else{g[z+(f<<2)>>2]=n;g[z+(b<<2)>>2]=k<0.0?-h:h;e=0.0}g[z+(o<<2)>>2]=e;c[a>>2]=c[z>>2];c[a+4>>2]=c[z+4>>2];c[a+8>>2]=c[z+8>>2];g[a+12>>2]=0.0;l=z;return}case 10:{e=+g[d>>2];h=+g[d+4>>2];i=+g[d+8>>2];o=c[b+52>>2]|0;v=+g[b+28+(o<<2)>>2];k=+g[b+28+(((o+2|0)%3|0)<<2)>>2];if(e*e+h*h+i*i<9.999999747378752e-05){y=1.0;x=0.0;w=0.0}else{w=1.0/+C(+(e*e+h*h+i*i));y=e*w;x=h*w;w=i*w}c[z+32>>2]=0;c[z+32+4>>2]=0;c[z+32+8>>2]=0;c[z+32+12>>2]=0;g[z+32+(o<<2)>>2]=v;r=k*y;t=k*x;u=k*w;s=+g[b+44>>2];n=y*s;q=x*s;s=w*s;h=r+ +g[z+32>>2]-n;i=t+ +g[z+32+4>>2]-q;k=u+ +g[z+32+8>>2]-s;e=w*k+(y*h+x*i);if(e>-999999984306749440.0){b=(g[j>>2]=h,c[j>>2]|0);f=(g[j>>2]=i,c[j>>2]|0);m=e;d=(g[j>>2]=k,c[j>>2]|0)}else{m=-999999984306749440.0;b=0;d=0;f=0}c[z+32>>2]=0;c[z+32+4>>2]=0;c[z+32+8>>2]=0;c[z+32+12>>2]=0;g[z+32+(o<<2)>>2]=-v;i=r+ +g[z+32>>2]-n;h=t+ +g[z+32+4>>2]-q;e=u+ +g[z+32+8>>2]-s;if(w*e+(y*i+x*h)>m){b=(g[j>>2]=i,c[j>>2]|0);f=(g[j>>2]=h,c[j>>2]|0);d=(g[j>>2]=e,c[j>>2]|0)}c[a>>2]=b;c[a+4>>2]=f;c[a+8>>2]=d;g[a+12>>2]=0.0;l=z;return}case 5:{p=c[b+92>>2]|0;o=c[b+96>>2]|0;q=+g[b+12>>2];r=+g[b+16>>2];n=+g[b+20>>2];k=+g[d>>2]*q;m=+g[d+4>>2]*r;i=+g[d+8>>2]*n;if((o|0)>0){b=0;h=-3402823466385288598117041.0e14;f=-1;while(1){e=k*+g[p+(b<<4)>>2]+m*+g[p+(b<<4)+4>>2]+i*+g[p+(b<<4)+8>>2];d=e>h;f=d?b:f;b=b+1|0;if((b|0)==(o|0))break;else h=d?e:h}}else f=-1;x=r*+g[p+(f<<4)+4>>2];y=n*+g[p+(f<<4)+8>>2];g[a>>2]=q*+g[p+(f<<4)>>2];g[a+4>>2]=x;g[a+8>>2]=y;g[a+12>>2]=0.0;l=z;return}case 4:{p=c[b+104>>2]|0;o=c[b+96>>2]|0;q=+g[b+12>>2];r=+g[b+16>>2];n=+g[b+20>>2];k=+g[d>>2]*q;m=+g[d+4>>2]*r;i=+g[d+8>>2]*n;if((o|0)>0){b=0;h=-3402823466385288598117041.0e14;f=-1;while(1){e=k*+g[p+(b<<4)>>2]+m*+g[p+(b<<4)+4>>2]+i*+g[p+(b<<4)+8>>2];d=e>h;f=d?b:f;b=b+1|0;if((b|0)==(o|0))break;else h=d?e:h}}else f=-1;x=r*+g[p+(f<<4)+4>>2];y=n*+g[p+(f<<4)+8>>2];g[a>>2]=q*+g[p+(f<<4)>>2];g[a+4>>2]=x;g[a+8>>2]=y;g[a+12>>2]=0.0;l=z;return}default:{Kb[c[(c[b>>2]|0)+68>>2]&127](a,b,d);l=z;return}}}function xd(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0;n=l;l=l+16|0;c[b+236>>2]=2;c[b+312>>2]=0;c[b+312+4>>2]=0;c[b+312+8>>2]=0;c[b+312+12>>2]=0;c[b+312+16>>2]=0;c[b+312+20>>2]=0;c[b+312+24>>2]=0;c[b+312+28>>2]=0;c[b+544>>2]=1065353216;c[b+548>>2]=1065353216;c[b+552>>2]=1065353216;g[b+556>>2]=0.0;c[b+348>>2]=1065353216;c[b+352>>2]=1065353216;c[b+356>>2]=1065353216;e=b+360|0;h=e+36|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));c[b+412>>2]=0;c[b+412+4>>2]=0;c[b+412+8>>2]=0;c[b+412+12>>2]=0;c[b+412+16>>2]=0;c[b+412+20>>2]=0;c[b+412+24>>2]=0;c[b+412+28>>2]=0;f=+g[d+92>>2];m=+g[d+96>>2];g[n+12>>2]=f;g[n+8>>2]=m;g[n+4>>2]=0.0;g[n>>2]=1.0;c[b+444>>2]=c[(f<0.0?n+4|0:f>1.0?n:n+12|0)>>2];g[n+4>>2]=0.0;g[n>>2]=1.0;c[b+448>>2]=c[(m<0.0?n+4|0:m>1.0?n:n+8|0)>>2];c[b+472>>2]=c[d+112>>2];c[b+476>>2]=c[d+116>>2];e=c[d+4>>2]|0;c[b+480>>2]=e;c[b+608>>2]=0;c[b+612>>2]=0;a[b+452>>0]=a[d+120>>0]|0;c[b+456>>2]=c[d+124>>2];c[b+460>>2]=c[d+128>>2];c[b+464>>2]=c[d+132>>2];c[b+468>>2]=c[d+136>>2];if(!e){c[b+4>>2]=c[d+8>>2];c[b+4+4>>2]=c[d+8+4>>2];c[b+4+8>>2]=c[d+8+8>>2];c[b+4+12>>2]=c[d+8+12>>2];c[b+20>>2]=c[d+24>>2];c[b+20+4>>2]=c[d+24+4>>2];c[b+20+8>>2]=c[d+24+8>>2];c[b+20+12>>2]=c[d+24+12>>2];c[b+36>>2]=c[d+40>>2];c[b+36+4>>2]=c[d+40+4>>2];c[b+36+8>>2]=c[d+40+8>>2];c[b+36+12>>2]=c[d+40+12>>2];c[b+52>>2]=c[d+56>>2];c[b+52+4>>2]=c[d+56+4>>2];c[b+52+8>>2]=c[d+56+8>>2];c[b+52+12>>2]=c[d+56+12>>2];e=b+20|0;h=b+36|0;i=b+52|0;k=b+4|0}else{Gb[c[(c[e>>2]|0)+8>>2]&127](e,b+4|0);e=b+20|0;h=b+36|0;i=b+52|0;k=b+4|0}c[b+68>>2]=c[k>>2];c[b+68+4>>2]=c[k+4>>2];c[b+68+8>>2]=c[k+8>>2];c[b+68+12>>2]=c[k+12>>2];c[b+84>>2]=c[e>>2];c[b+84+4>>2]=c[e+4>>2];c[b+84+8>>2]=c[e+8>>2];c[b+84+12>>2]=c[e+12>>2];c[b+100>>2]=c[h>>2];c[b+100+4>>2]=c[h+4>>2];c[b+100+8>>2]=c[h+8>>2];c[b+100+12>>2]=c[h+12>>2];c[b+116>>2]=c[i>>2];c[b+116+4>>2]=c[i+4>>2];c[b+116+8>>2]=c[i+8>>2];c[b+116+12>>2]=c[i+12>>2];c[b+132>>2]=0;c[b+132+4>>2]=0;c[b+132+8>>2]=0;c[b+132+12>>2]=0;c[b+132+16>>2]=0;c[b+132+20>>2]=0;c[b+132+24>>2]=0;c[b+132+28>>2]=0;c[b+224>>2]=c[d+100>>2];c[b+232>>2]=c[d+104>>2];c[b+228>>2]=c[d+108>>2];Gb[c[(c[b>>2]|0)+12>>2]&127](b,c[d+72>>2]|0);e=c[5852]|0;c[5852]=e+1;c[b+508>>2]=e;f=+g[d>>2];e=c[b+204>>2]|0;if(f==0.0){c[b+204>>2]=e|1;m=0.0}else{c[b+204>>2]=e&-2;m=1.0/f}g[b+344>>2]=m;p=f*+g[b+384>>2];o=f*+g[b+388>>2];g[b+364>>2]=f*+g[b+380>>2];g[b+368>>2]=p;g[b+372>>2]=o;g[b+376>>2]=0.0;f=+g[d+76>>2];h=f!=0.0?(g[j>>2]=1.0/f,c[j>>2]|0):0;f=+g[d+80>>2];e=f!=0.0?(g[j>>2]=1.0/f,c[j>>2]|0):0;f=+g[d+84>>2];d=f!=0.0?(g[j>>2]=1.0/f,c[j>>2]|0):0;c[b+396>>2]=h;c[b+400>>2]=e;c[b+404>>2]=d;g[b+408>>2]=0.0;r=m*+g[b+352>>2];x=m*+g[b+356>>2];g[b+560>>2]=m*+g[b+348>>2];g[b+564>>2]=r;g[b+568>>2]=x;g[b+572>>2]=0.0;x=+g[b+4>>2];r=(c[j>>2]=h,+g[j>>2]);w=+g[b+8>>2];f=(c[j>>2]=e,+g[j>>2]);v=+g[b+12>>2];o=(c[j>>2]=d,+g[j>>2]);u=+g[b+20>>2];t=+g[b+24>>2];s=+g[b+28>>2];q=+g[b+36>>2];p=+g[b+40>>2];m=+g[b+44>>2];g[b+264>>2]=x*x*r+w*w*f+v*v*o;g[b+268>>2]=x*r*u+w*f*t+v*o*s;g[b+272>>2]=x*r*q+w*f*p+v*o*m;g[b+276>>2]=0.0;g[b+280>>2]=x*r*u+w*f*t+v*o*s;g[b+284>>2]=u*r*u+t*f*t+s*o*s;g[b+288>>2]=r*u*q+f*t*p+o*s*m;g[b+292>>2]=0.0;g[b+296>>2]=x*r*q+w*f*p+v*o*m;g[b+300>>2]=u*r*q+t*f*p+s*o*m;g[b+304>>2]=q*r*q+p*f*p+m*o*m;g[b+308>>2]=0.0;c[b+504>>2]=0;c[b+512>>2]=0;c[b+512+4>>2]=0;c[b+512+8>>2]=0;c[b+512+12>>2]=0;c[b+512+16>>2]=0;c[b+512+20>>2]=0;c[b+512+24>>2]=0;c[b+512+28>>2]=0;m=+g[b+344>>2];o=m*+g[b+352>>2];p=m*+g[b+356>>2];g[b+560>>2]=+g[b+348>>2]*m;g[b+564>>2]=o;g[b+568>>2]=p;e=b+572|0;h=e+36|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(h|0));l=n;return} +function fc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;var h=0,i=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0;Q=l;l=l+448|0;if(!(a[b+527>>0]|0)){l=Q;return}P=c[b+28>>2]|0;J=+g[b+348>>2];I=+g[b+352>>2];B=+g[b+356>>2];k=+g[P+52>>2];z=J*+g[P+4>>2]+I*+g[P+8>>2]+B*+g[P+12>>2]+k;m=+g[P+56>>2];E=J*+g[P+20>>2]+I*+g[P+24>>2]+B*+g[P+28>>2]+m;n=+g[P+60>>2];B=J*+g[P+36>>2]+I*+g[P+40>>2]+B*+g[P+44>>2]+n;P=c[b+32>>2]|0;I=+g[b+412>>2];J=+g[b+416>>2];D=+g[b+420>>2];o=+g[P+52>>2];A=I*+g[P+4>>2]+J*+g[P+8>>2]+D*+g[P+12>>2]+o;p=+g[P+56>>2];F=I*+g[P+20>>2]+J*+g[P+24>>2]+D*+g[P+28>>2]+p;q=+g[P+60>>2];D=I*+g[P+36>>2]+J*+g[P+40>>2]+D*+g[P+44>>2]+q;if(!(a[b+524>>0]|0)){x=+g[d+192>>2]+ +g[d+80>>2];y=+g[d+196>>2]+ +g[d+84>>2];v=+g[d+200>>2]+ +g[d+88>>2];I=+g[e+192>>2]+ +g[e+80>>2];H=+g[e+196>>2]+ +g[e+84>>2];J=+g[e+200>>2]+ +g[e+88>>2];G=+g[d+176>>2]+ +g[d+64>>2]+((B-n)*y-(E-m)*v)-(+g[e+176>>2]+ +g[e+64>>2]+((D-q)*H-(F-p)*J));J=+g[d+180>>2]+ +g[d+68>>2]+((z-k)*v-(B-n)*x)-(+g[e+180>>2]+ +g[e+68>>2]+((A-o)*J-(D-q)*I));H=+g[d+184>>2]+ +g[d+72>>2]+((E-m)*x-(z-k)*y)-(+g[e+184>>2]+ +g[e+72>>2]+((F-p)*I-(A-o)*H));w=(c[d+240>>2]|0)==0;u=0;do{y=1.0/+g[b+48+(u*84|0)+80>>2];r=b+48+(u*84|0)|0;x=+g[r>>2];t=b+48+(u*84|0)+4|0;v=+g[t>>2];s=b+48+(u*84|0)+8|0;I=+g[s>>2];I=y*(((z-A)*x+(E-F)*v+(B-D)*I)*-.30000001192092896/f)-y*(G*x+J*v+H*I);g[b+36>>2]=+g[b+36>>2]+I;v=+g[s>>2];x=+g[t>>2];y=+g[r>>2];h=c[b+28>>2]|0;i=+g[h+344>>2];if(!w){T=((E-m)*v-(B-n)*x)*+g[h+296>>2]+((B-n)*y-(z-k)*v)*+g[h+300>>2]+((z-k)*x-(E-m)*y)*+g[h+304>>2];R=((E-m)*v-(B-n)*x)*+g[h+280>>2]+((B-n)*y-(z-k)*v)*+g[h+284>>2]+((z-k)*x-(E-m)*y)*+g[h+288>>2];S=((E-m)*v-(B-n)*x)*+g[h+264>>2]+((B-n)*y-(z-k)*v)*+g[h+268>>2]+((z-k)*x-(E-m)*y)*+g[h+272>>2];V=I*x*i*+g[d+116>>2];U=I*v*i*+g[d+120>>2];g[d+64>>2]=I*y*i*+g[d+112>>2]+ +g[d+64>>2];g[d+68>>2]=V+ +g[d+68>>2];g[d+72>>2]=U+ +g[d+72>>2];R=R*I*+g[d+100>>2];i=T*I*+g[d+104>>2];g[d+80>>2]=S*I*+g[d+96>>2]+ +g[d+80>>2];g[d+84>>2]=R+ +g[d+84>>2];g[d+88>>2]=i+ +g[d+88>>2]}h=c[b+32>>2]|0;i=+g[h+344>>2];if(c[e+240>>2]|0){V=((F-p)*v-(D-q)*x)*+g[h+296>>2]+((D-q)*y-(A-o)*v)*+g[h+300>>2]+((A-o)*x-(F-p)*y)*+g[h+304>>2];U=((F-p)*v-(D-q)*x)*+g[h+280>>2]+((D-q)*y-(A-o)*v)*+g[h+284>>2]+((A-o)*x-(F-p)*y)*+g[h+288>>2];T=((F-p)*v-(D-q)*x)*+g[h+264>>2]+((D-q)*y-(A-o)*v)*+g[h+268>>2]+((A-o)*x-(F-p)*y)*+g[h+272>>2];R=i*+g[t>>2]*-I*+g[e+116>>2];S=i*+g[s>>2]*-I*+g[e+120>>2];g[e+64>>2]=+g[e+112>>2]*i*+g[r>>2]*-I+ +g[e+64>>2];g[e+68>>2]=R+ +g[e+68>>2];g[e+72>>2]=S+ +g[e+72>>2];U=U*+g[e+100>>2]*-I;V=V*+g[e+104>>2]*-I;g[e+80>>2]=T*+g[e+96>>2]*-I+ +g[e+80>>2];g[e+84>>2]=U+ +g[e+84>>2];g[e+88>>2]=V+ +g[e+88>>2]}u=u+1|0}while((u|0)!=3)}do if(!(a[b+552>>0]|0)){i=+g[b+440>>2];if(!(i>1.1920928955078125e-07)){t=e+192|0;h=d+192|0;w=e+200|0;s=d+200|0;N=e+88|0;K=d+88|0;O=e+80|0;L=d+80|0;u=e+196|0;r=d+196|0;P=e+84|0;M=d+84|0;break}k=+g[e+192>>2]+ +g[e+80>>2]-(+g[d+192>>2]+ +g[d+80>>2]);m=+g[e+196>>2]+ +g[e+84>>2]-(+g[d+196>>2]+ +g[d+84>>2]);o=+g[e+200>>2]+ +g[e+88>>2]-(+g[d+200>>2]+ +g[d+88>>2]);if(k*k+m*m+o*o>1.1920928955078125e-07){E=1.0/+C(+(k*k+m*m+o*o));h=c[b+28>>2]|0;p=+g[h+264>>2];q=+g[h+280>>2];v=+g[h+296>>2];x=+g[h+268>>2];y=+g[h+284>>2];z=+g[h+300>>2];A=+g[h+272>>2];B=+g[h+288>>2];D=+g[h+304>>2];h=c[b+32>>2]|0;i=i*(1.0/(k*E*(p*k*E+m*E*q+o*E*v)+m*E*(k*E*x+m*E*y+o*E*z)+o*E*(k*E*A+m*E*B+o*E*D)+(k*E*(k*E*+g[h+264>>2]+m*E*+g[h+280>>2]+o*E*+g[h+296>>2])+m*E*(k*E*+g[h+268>>2]+m*E*+g[h+284>>2]+o*E*+g[h+300>>2])+o*E*(k*E*+g[h+272>>2]+m*E*+g[h+288>>2]+o*E*+g[h+304>>2]))));E=+C(+(o*i*o*i+(k*i*k*i+m*i*m*i)));n=1.0/E*k*i;k=1.0/E*m*i;i=1.0/E*o*i;if(c[d+240>>2]|0){V=E*0.0*+g[d+116>>2];U=E*0.0*+g[d+120>>2];g[d+64>>2]=E*0.0*+g[d+112>>2]+ +g[d+64>>2];g[d+68>>2]=V+ +g[d+68>>2];g[d+72>>2]=U+ +g[d+72>>2];U=(n*q+k*y+i*B)*E*+g[d+100>>2];V=(n*v+k*z+i*D)*E*+g[d+104>>2];g[d+80>>2]=(n*p+k*x+i*A)*E*+g[d+96>>2]+ +g[d+80>>2];g[d+84>>2]=U+ +g[d+84>>2];g[d+88>>2]=V+ +g[d+88>>2];h=c[b+32>>2]|0}if(c[e+240>>2]|0){V=n*+g[h+296>>2]+k*+g[h+300>>2]+i*+g[h+304>>2];U=n*+g[h+280>>2]+k*+g[h+284>>2]+i*+g[h+288>>2];T=n*+g[h+264>>2]+k*+g[h+268>>2]+i*+g[h+272>>2];R=E*-0.0*+g[e+116>>2];S=E*-0.0*+g[e+120>>2];g[e+64>>2]=E*-0.0*+g[e+112>>2]+ +g[e+64>>2];g[e+68>>2]=R+ +g[e+68>>2];g[e+72>>2]=S+ +g[e+72>>2];U=U*+g[e+100>>2]*-E;V=V*+g[e+104>>2]*-E;g[e+80>>2]=T*+g[e+96>>2]*-E+ +g[e+80>>2];g[e+84>>2]=U+ +g[e+84>>2];g[e+88>>2]=V+ +g[e+88>>2];t=e+192|0;h=d+192|0;w=e+200|0;s=d+200|0;N=e+88|0;K=d+88|0;O=e+80|0;L=d+80|0;u=e+196|0;r=d+196|0;P=e+84|0;M=d+84|0}else{t=e+192|0;h=d+192|0;w=e+200|0;s=d+200|0;N=e+88|0;K=d+88|0;O=e+80|0;L=d+80|0;u=e+196|0;r=d+196|0;P=e+84|0;M=d+84|0}}else{t=e+192|0;h=d+192|0;w=e+200|0;s=d+200|0;N=e+88|0;K=d+88|0;O=e+80|0;L=d+80|0;u=e+196|0;r=d+196|0;P=e+84|0;M=d+84|0}}else{O=c[b+28>>2]|0;c[Q+352>>2]=c[O+4>>2];c[Q+352+4>>2]=c[O+4+4>>2];c[Q+352+8>>2]=c[O+4+8>>2];c[Q+352+12>>2]=c[O+4+12>>2];c[Q+352+16>>2]=c[O+20>>2];c[Q+352+16+4>>2]=c[O+20+4>>2];c[Q+352+16+8>>2]=c[O+20+8>>2];c[Q+352+16+12>>2]=c[O+20+12>>2];c[Q+352+32>>2]=c[O+36>>2];c[Q+352+32+4>>2]=c[O+36+4>>2];c[Q+352+32+8>>2]=c[O+36+8>>2];c[Q+352+32+12>>2]=c[O+36+12>>2];c[Q+352+48>>2]=c[O+52>>2];c[Q+352+48+4>>2]=c[O+52+4>>2];c[Q+352+48+8>>2]=c[O+52+8>>2];c[Q+352+48+12>>2]=c[O+52+12>>2];O=c[b+32>>2]|0;c[Q+288>>2]=c[O+4>>2];c[Q+288+4>>2]=c[O+4+4>>2];c[Q+288+8>>2]=c[O+4+8>>2];c[Q+288+12>>2]=c[O+4+12>>2];c[Q+288+16>>2]=c[O+20>>2];c[Q+288+16+4>>2]=c[O+20+4>>2];c[Q+288+16+8>>2]=c[O+20+8>>2];c[Q+288+16+12>>2]=c[O+20+12>>2];c[Q+288+32>>2]=c[O+36>>2];c[Q+288+32+4>>2]=c[O+36+4>>2];c[Q+288+32+8>>2]=c[O+36+8>>2];c[Q+288+32+12>>2]=c[O+36+12>>2];c[Q+288+48>>2]=c[O+52>>2];c[Q+288+48+4>>2]=c[O+52+4>>2];c[Q+288+48+8>>2]=c[O+52+8>>2];c[Q+288+48+12>>2]=c[O+52+12>>2];T=+g[d+196>>2]+ +g[d+84>>2];v=+g[d+200>>2]+ +g[d+88>>2];g[Q+272>>2]=+g[d+192>>2]+ +g[d+80>>2];g[Q+272+4>>2]=T;g[Q+272+8>>2]=v;g[Q+272+12>>2]=0.0;v=+g[e+196>>2]+ +g[e+84>>2];T=+g[e+200>>2]+ +g[e+88>>2];g[Q+256>>2]=+g[e+192>>2]+ +g[e+80>>2];g[Q+256+4>>2]=v;g[Q+256+8>>2]=T;g[Q+256+12>>2]=0.0;c[Q+192>>2]=1065353216;O=Q+192+4|0;c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[O+12>>2]=0;c[Q+192+20>>2]=1065353216;P=Q+192+24|0;c[P>>2]=0;c[P+4>>2]=0;c[P+8>>2]=0;c[P+12>>2]=0;c[Q+192+40>>2]=1065353216;M=Q+192+44|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[M+12>>2]=0;c[M+16>>2]=0;Ig(Q+352|0,0.0,0.0,0.0,Q+272|0,f,Q+192|0);c[Q+128>>2]=1065353216;M=Q+128+4|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[M+12>>2]=0;c[Q+128+20>>2]=1065353216;N=Q+128+24|0;c[N>>2]=0;c[N+4>>2]=0;c[N+8>>2]=0;c[N+12>>2]=0;c[Q+128+40>>2]=1065353216;L=Q+128+44|0;c[L>>2]=0;c[L+4>>2]=0;c[L+8>>2]=0;c[L+12>>2]=0;c[L+16>>2]=0;Ig(Q+288|0,0.0,0.0,0.0,Q+256|0,f,Q+128|0);T=+g[b+556>>2];v=+g[b+560>>2];U=+g[b+564>>2];x=+g[b+568>>2];H=T*(2.0/(T*T+v*v+U*U+x*x));A=v*(2.0/(T*T+v*v+U*U+x*x));I=U*(2.0/(T*T+v*v+U*U+x*x));X=+g[b+364>>2];W=+g[b+368>>2];_=+g[b+372>>2];k=_*(T*I-x*A)+(W*(T*A+x*I)+X*(1.0-(v*A+U*I)));m=_*(v*I+x*H)+(X*(T*A-x*I)+W*(1.0-(T*H+U*I)));n=X*(T*I+x*A)+W*(v*I-x*H)+_*(1.0-(T*H+v*A));i=+g[b+380>>2];G=+g[b+384>>2];E=+g[b+388>>2];o=(T*I-x*A)*E+(G*(T*A+x*I)+i*(1.0-(v*A+U*I)));p=(v*I+x*H)*E+(i*(T*A-x*I)+G*(1.0-(T*H+U*I)));q=i*(T*I+x*A)+G*(v*I-x*H)+E*(1.0-(T*H+v*A));R=+g[b+396>>2];D=+g[b+400>>2];B=+g[b+404>>2];S=(1.0-(v*A+U*I))*R+(T*A+x*I)*D+(T*I-x*A)*B;U=(T*A-x*I)*R+(1.0-(T*H+U*I))*D+(v*I+x*H)*B;A=(T*I+x*A)*R+(v*I-x*H)*D+(1.0-(T*H+v*A))*B;v=+g[b+300>>2];H=+g[b+316>>2];T=+g[b+332>>2];x=+g[b+304>>2];I=+g[b+320>>2];V=+g[b+336>>2];F=+g[b+308>>2];J=+g[b+324>>2];y=+g[b+340>>2];z=-+g[b+348>>2];ba=-+g[b+352>>2];Z=-+g[b+356>>2];_=X*0.0+W*0.0+_*0.0+ +g[b+412>>2]+(n*(F*z+J*ba+y*Z)+(k*(v*z+H*ba+T*Z)+m*(x*z+I*ba+V*Z)));E=i*0.0+G*0.0+E*0.0+ +g[b+416>>2]+(q*(F*z+J*ba+y*Z)+(o*(v*z+H*ba+T*Z)+p*(x*z+I*ba+V*Z)));Z=R*0.0+D*0.0+B*0.0+ +g[b+420>>2]+(A*(F*z+J*ba+y*Z)+(S*(v*z+H*ba+T*Z)+U*(x*z+I*ba+V*Z)));ba=+g[Q+128>>2];z=+g[M>>2];B=+g[Q+128+8>>2];D=+g[Q+128+16>>2];R=+g[Q+128+20>>2];G=+g[N>>2];i=+g[Q+128+32>>2];W=+g[Q+128+36>>2];X=+g[Q+128+40>>2];Y=B*Z+(ba*_+z*E)+ +g[Q+128+48>>2];$=D*_+E*R+Z*G+ +g[Q+128+52>>2];aa=_*i+E*W+Z*X+ +g[Q+128+56>>2];g[Q+64>>2]=(k*v+m*x+n*F)*ba+(o*v+p*x+q*F)*z+(S*v+U*x+A*F)*B;g[Q+64+4>>2]=(k*H+m*I+n*J)*ba+(o*H+p*I+q*J)*z+(S*H+U*I+A*J)*B;g[Q+64+8>>2]=(k*T+m*V+n*y)*ba+(o*T+p*V+q*y)*z+(S*T+U*V+A*y)*B;g[Q+64+12>>2]=0.0;g[Q+64+16>>2]=(k*v+m*x+n*F)*D+(o*v+p*x+q*F)*R+(S*v+U*x+A*F)*G;g[Q+64+20>>2]=(k*H+m*I+n*J)*D+(o*H+p*I+q*J)*R+(S*H+U*I+A*J)*G;g[Q+64+24>>2]=(k*T+m*V+n*y)*D+(o*T+p*V+q*y)*R+(S*T+U*V+A*y)*G;g[Q+64+28>>2]=0.0;g[Q+64+32>>2]=(k*v+m*x+n*F)*i+(o*v+p*x+q*F)*W+(S*v+U*x+A*F)*X;g[Q+64+36>>2]=(k*H+m*I+n*J)*i+(o*H+p*I+q*J)*W+(S*H+U*I+A*J)*X;g[Q+64+40>>2]=(k*T+m*V+n*y)*i+(o*T+p*V+q*y)*W+(S*T+U*V+A*y)*X;g[Q+64+44>>2]=0.0;g[Q+64+48>>2]=Y;g[Q+64+52>>2]=$;g[Q+64+56>>2]=aa;g[Q+64+60>>2]=0.0;aa=(S*v+U*x+A*F)*-Z+((k*v+m*x+n*F)*-_+(o*v+p*x+q*F)*-E);$=(S*H+U*I+A*J)*-Z+((k*H+m*I+n*J)*-_+(o*H+p*I+q*J)*-E);E=(S*T+U*V+A*y)*-Z+((k*T+m*V+n*y)*-_+(o*T+p*V+q*y)*-E);_=+g[Q+192>>2];Z=+g[O>>2];Y=+g[Q+192+8>>2];X=+g[Q+192+16>>2];W=+g[Q+192+20>>2];i=+g[P>>2];G=+g[Q+192+32>>2];R=+g[Q+192+36>>2];D=+g[Q+192+40>>2];B=aa*_+$*Z+E*Y+ +g[Q+192+48>>2];z=aa*X+$*W+E*i+ +g[Q+192+52>>2];E=aa*G+$*R+E*D+ +g[Q+192+56>>2];g[Q>>2]=(k*v+m*x+n*F)*_+(k*H+m*I+n*J)*Z+(k*T+m*V+n*y)*Y;g[Q+4>>2]=(o*v+p*x+q*F)*_+(o*H+p*I+q*J)*Z+(o*T+p*V+q*y)*Y;g[Q+8>>2]=(S*v+U*x+A*F)*_+(S*H+U*I+A*J)*Z+(S*T+U*V+A*y)*Y;g[Q+12>>2]=0.0;g[Q+16>>2]=(k*v+m*x+n*F)*X+(k*H+m*I+n*J)*W+(k*T+m*V+n*y)*i;g[Q+20>>2]=(o*v+p*x+q*F)*X+(o*H+p*I+q*J)*W+(o*T+p*V+q*y)*i;g[Q+24>>2]=(S*v+U*x+A*F)*X+(S*H+U*I+A*J)*W+(S*T+U*V+A*y)*i;g[Q+28>>2]=0.0;g[Q+32>>2]=(k*v+m*x+n*F)*G+(k*H+m*I+n*J)*R+(k*T+m*V+n*y)*D;g[Q+36>>2]=(o*v+p*x+q*F)*G+(o*H+p*I+q*J)*R+(o*T+p*V+q*y)*D;g[Q+40>>2]=(S*v+U*x+A*F)*G+(S*H+U*I+A*J)*R+(S*T+U*V+A*y)*D;g[Q+44>>2]=0.0;g[Q+48>>2]=B;g[Q+52>>2]=z;g[Q+56>>2]=E;g[Q+60>>2]=0.0;vf(Q+352|0,Q+64|0,Q+424|0,Q+416|0);E=+g[Q+416>>2];z=1.0/f*+g[Q+424>>2]*E;B=1.0/f*E*+g[Q+424+4>>2];E=1.0/f*E*+g[Q+424+8>>2];vf(Q+288|0,Q,Q+424|0,Q+416|0);D=+g[Q+416>>2];z=z-+g[Q+272>>2];B=B-+g[Q+272+4>>2];E=E-+g[Q+272+8>>2];y=1.0/f*+g[Q+424>>2]*D-+g[Q+256>>2];A=1.0/f*D*+g[Q+424+4>>2]-+g[Q+256+4>>2];D=1.0/f*D*+g[Q+424+8>>2]-+g[Q+256+8>>2];if(z*z+B*B+E*E>1.1920928955078125e-07){q=1.0/+C(+(z*z+B*B+E*E));P=c[b+28>>2]|0;i=z*q;m=B*q;o=E*q;q=z*q*(+g[P+264>>2]*z*q+B*q*+g[P+280>>2]+E*q*+g[P+296>>2])+B*q*(z*q*+g[P+268>>2]+B*q*+g[P+284>>2]+E*q*+g[P+300>>2])+E*q*(z*q*+g[P+272>>2]+B*q*+g[P+288>>2]+E*q*+g[P+304>>2])}else{i=0.0;m=0.0;o=0.0;q=0.0}if(y*y+A*A+D*D>1.1920928955078125e-07){v=1.0/+C(+(y*y+A*A+D*D));P=c[b+32>>2]|0;k=y*v;n=A*v;p=D*v;v=y*v*(+g[P+264>>2]*y*v+A*v*+g[P+280>>2]+D*v*+g[P+296>>2])+A*v*(y*v*+g[P+268>>2]+A*v*+g[P+284>>2]+D*v*+g[P+300>>2])+D*v*(y*v*+g[P+272>>2]+A*v*+g[P+288>>2]+D*v*+g[P+304>>2])}else{k=0.0;n=0.0;p=0.0;v=0.0}x=q*i+v*k;k=q*m+v*n;i=q*o+v*p;if(x*x+k*k+i*i>1.1920928955078125e-07){o=1.0/+C(+(x*x+k*k+i*i));r=c[b+28>>2]|0;m=x*o*(+g[r+264>>2]*x*o+k*o*+g[r+280>>2]+i*o*+g[r+296>>2])+k*o*(x*o*+g[r+268>>2]+k*o*+g[r+284>>2]+i*o*+g[r+300>>2])+i*o*(x*o*+g[r+272>>2]+k*o*+g[r+288>>2]+i*o*+g[r+304>>2]);h=c[b+32>>2]|0;o=x*o*(x*o*+g[h+264>>2]+k*o*+g[h+280>>2]+i*o*+g[h+296>>2])+k*o*(x*o*+g[h+268>>2]+k*o*+g[h+284>>2]+i*o*+g[h+300>>2])+i*o*(x*o*+g[h+272>>2]+k*o*+g[h+288>>2]+i*o*+g[h+304>>2]);k=(z*m-y*o)*(1.0/((m+o)*(m+o)));v=(B*m-A*o)*(1.0/((m+o)*(m+o)));o=(E*m-D*o)*(1.0/((m+o)*(m+o)));i=+g[b+572>>2];if(!(i>=0.0))i=v;else{m=(a[b+553>>0]|0)==0?i:i/m;n=+g[b+576>>2];p=+g[b+580>>2];q=+g[b+584>>2];i=+C(+((k+n)*(k+n)+(v+p)*(v+p)+(o+q)*(o+q)));if(i>m){k=m*(k+n)*(1.0/i)-n;o=m*(o+q)*(1.0/i)-q;i=m*(v+p)*(1.0/i)-p}else i=v;g[b+576>>2]=k+n;g[b+580>>2]=i+p;g[b+584>>2]=o+q}n=+C(+(k*k+i*i+o*o));m=k*(1.0/n);k=i*(1.0/n);i=o*(1.0/n);if(c[d+240>>2]|0){ba=m*+g[r+296>>2]+k*+g[r+300>>2]+i*+g[r+304>>2];aa=m*+g[r+280>>2]+k*+g[r+284>>2]+i*+g[r+288>>2];$=m*+g[r+264>>2]+k*+g[r+268>>2]+i*+g[r+272>>2];Z=n*0.0*+g[d+116>>2];_=n*0.0*+g[d+120>>2];g[d+64>>2]=n*0.0*+g[d+112>>2]+ +g[d+64>>2];g[d+68>>2]=Z+ +g[d+68>>2];g[d+72>>2]=_+ +g[d+72>>2];aa=aa*n*+g[d+100>>2];ba=ba*n*+g[d+104>>2];g[d+80>>2]=$*n*+g[d+96>>2]+ +g[d+80>>2];g[d+84>>2]=aa+ +g[d+84>>2];g[d+88>>2]=ba+ +g[d+88>>2];h=c[b+32>>2]|0}if(c[e+240>>2]|0){ba=m*+g[h+296>>2]+k*+g[h+300>>2]+i*+g[h+304>>2];aa=m*+g[h+280>>2]+k*+g[h+284>>2]+i*+g[h+288>>2];$=m*+g[h+264>>2]+k*+g[h+268>>2]+i*+g[h+272>>2];Z=n*-0.0*+g[e+116>>2];_=n*-0.0*+g[e+120>>2];g[e+64>>2]=n*-0.0*+g[e+112>>2]+ +g[e+64>>2];g[e+68>>2]=Z+ +g[e+68>>2];g[e+72>>2]=_+ +g[e+72>>2];aa=aa*+g[e+100>>2]*-n;ba=ba*+g[e+104>>2]*-n;g[e+80>>2]=$*+g[e+96>>2]*-n+ +g[e+80>>2];g[e+84>>2]=aa+ +g[e+84>>2];g[e+88>>2]=ba+ +g[e+88>>2]}}t=e+192|0;h=d+192|0;w=e+200|0;s=d+200|0;N=e+88|0;K=d+88|0;O=e+80|0;L=d+80|0;u=e+196|0;r=d+196|0;P=e+84|0;M=d+84|0}while(0);z=+g[h>>2]+ +g[L>>2];y=+g[r>>2]+ +g[M>>2];x=+g[s>>2]+ +g[K>>2];v=+g[t>>2]+ +g[O>>2];q=+g[u>>2]+ +g[P>>2];p=+g[w>>2]+ +g[N>>2];if(a[b+526>>0]|0){k=+g[b+528>>2];i=k*+g[b+504>>2]*+g[b+432>>2]/f;m=+g[b+460>>2];n=+g[b+464>>2];o=+g[b+468>>2];if((v-z)*m+(q-y)*n+(p-x)*o>0.0)i=i+k*((v-z)*m+(q-y)*n+(p-x)*o)*+g[b+436>>2];aa=+g[b+516>>2];_=aa+i*+g[b+492>>2];g[Q+424>>2]=_;g[Q+416>>2]=0.0;h=c[(_>0.0?Q+424|0:Q+416|0)>>2]|0;c[b+516>>2]=h;aa=(c[j>>2]=h,+g[j>>2])-aa;_=+g[b+536>>2];$=+g[b+540>>2];i=+g[b+544>>2];k=aa*m-_*(aa*m*_+aa*n*$+aa*o*i);ba=aa*n-$*(aa*m*_+aa*n*$+aa*o*i);n=aa*o-i*(aa*m*_+aa*n*$+aa*o*i);i=+C(+(n*n+(k*k+ba*ba)));k=1.0/i*k;m=1.0/i*ba;n=1.0/i*n;h=c[b+28>>2]|0;if(c[d+240>>2]|0){ba=k*+g[h+296>>2]+m*+g[h+300>>2]+n*+g[h+304>>2];aa=k*+g[h+280>>2]+m*+g[h+284>>2]+n*+g[h+288>>2];$=k*+g[h+264>>2]+m*+g[h+268>>2]+n*+g[h+272>>2];Z=i*0.0*+g[d+116>>2];_=i*0.0*+g[d+120>>2];g[d+64>>2]=i*0.0*+g[d+112>>2]+ +g[d+64>>2];g[d+68>>2]=Z+ +g[d+68>>2];g[d+72>>2]=_+ +g[d+72>>2];aa=aa*i*+g[d+100>>2];ba=ba*i*+g[d+104>>2];g[L>>2]=$*i*+g[d+96>>2]+ +g[L>>2];g[M>>2]=aa+ +g[M>>2];g[K>>2]=ba+ +g[K>>2]}h=c[b+32>>2]|0;if(c[e+240>>2]|0){ba=k*+g[h+296>>2]+m*+g[h+300>>2]+n*+g[h+304>>2];aa=k*+g[h+280>>2]+m*+g[h+284>>2]+n*+g[h+288>>2];$=k*+g[h+264>>2]+m*+g[h+268>>2]+n*+g[h+272>>2];Z=i*-0.0*+g[e+116>>2];_=i*-0.0*+g[e+120>>2];g[e+64>>2]=i*-0.0*+g[e+112>>2]+ +g[e+64>>2];g[e+68>>2]=Z+ +g[e+68>>2];g[e+72>>2]=_+ +g[e+72>>2];aa=aa*+g[e+100>>2]*-i;ba=ba*+g[e+104>>2]*-i;g[O>>2]=$*+g[e+96>>2]*-i+ +g[O>>2];g[P>>2]=aa+ +g[P>>2];g[N>>2]=ba+ +g[N>>2]}}if(!(a[b+525>>0]|0)){l=Q;return}o=+g[b+532>>2];n=o*+g[b+508>>2]*+g[b+432>>2]/f;m=+g[b+476>>2];k=+g[b+480>>2];i=+g[b+484>>2];if((v-z)*m+(q-y)*k+(p-x)*i>0.0)n=n+o*((v-z)*m+(q-y)*k+(p-x)*i)*+g[b+436>>2];ba=+g[b+520>>2];n=ba+n*+g[b+496>>2];g[Q+424>>2]=n;g[Q+416>>2]=0.0;h=c[(n>0.0?Q+424|0:Q+416|0)>>2]|0;c[b+520>>2]=h;n=(c[j>>2]=h,+g[j>>2])-ba;h=c[b+28>>2]|0;if(c[d+240>>2]|0){ba=m*+g[h+296>>2]+k*+g[h+300>>2]+i*+g[h+304>>2];aa=m*+g[h+280>>2]+k*+g[h+284>>2]+i*+g[h+288>>2];i=m*+g[h+264>>2]+k*+g[h+268>>2]+i*+g[h+272>>2];m=n*0.0*+g[d+116>>2];k=n*0.0*+g[d+120>>2];g[d+64>>2]=n*0.0*+g[d+112>>2]+ +g[d+64>>2];g[d+68>>2]=m+ +g[d+68>>2];g[d+72>>2]=k+ +g[d+72>>2];k=aa*n*+g[d+100>>2];m=ba*n*+g[d+104>>2];g[L>>2]=i*n*+g[d+96>>2]+ +g[L>>2];g[M>>2]=k+ +g[M>>2];g[K>>2]=m+ +g[K>>2];m=+g[b+476>>2];k=+g[b+480>>2];i=+g[b+484>>2]}h=c[b+32>>2]|0;if(!(c[e+240>>2]|0)){l=Q;return}ba=m*+g[h+296>>2]+k*+g[h+300>>2]+i*+g[h+304>>2];aa=m*+g[h+280>>2]+k*+g[h+284>>2]+i*+g[h+288>>2];$=m*+g[h+264>>2]+k*+g[h+268>>2]+i*+g[h+272>>2];Z=n*-0.0*+g[e+116>>2];_=n*-0.0*+g[e+120>>2];g[e+64>>2]=n*-0.0*+g[e+112>>2]+ +g[e+64>>2];g[e+68>>2]=Z+ +g[e+68>>2];g[e+72>>2]=_+ +g[e+72>>2];aa=aa*+g[e+100>>2]*-n;ba=ba*+g[e+104>>2]*-n;g[O>>2]=$*+g[e+96>>2]*-n+ +g[O>>2];g[P>>2]=aa+ +g[P>>2];g[N>>2]=ba+ +g[N>>2];l=Q;return}function gc(b,d){b=b|0;d=+d;var e=0,f=0,h=0,i=0.0,k=0.0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0.0,z=0.0,A=0.0,D=0.0,E=0.0,F=0,G=0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0.0,O=0,P=0,Q=0.0,R=0,S=0.0,T=0.0,U=0.0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0;V=l;l=l+240|0;e=c[b+24>>2]|0;if((e|0)<=0){l=V;return}R=V+128+76|0;P=V+80+16|0;O=V+80+32|0;G=0;do{F=c[(c[b+32>>2]|0)+(G<<2)>>2]|0;switch(c[F+216>>2]|0){case 2:case 5:break;default:{if(a[F+924>>0]|0){a[F+924>>0]=0;f=c[F+732>>2]|0;if((f|0)>0){h=c[F+740>>2]|0;e=0;do{n=c[h+(e*52|0)+8>>2]|0;x=c[h+(e*52|0)+12>>2]|0;A=+g[n+8>>2]-+g[x+8>>2];D=+g[n+12>>2]-+g[x+12>>2];E=+g[n+16>>2]-+g[x+16>>2];E=+C(+(A*A+D*D+E*E));g[h+(e*52|0)+16>>2]=E;g[h+(e*52|0)+28>>2]=E*E;e=e+1|0}while((e|0)!=(f|0));e=0;do{g[h+(e*52|0)+24>>2]=(+g[(c[h+(e*52|0)+8>>2]|0)+88>>2]+ +g[(c[h+(e*52|0)+12>>2]|0)+88>>2])/+g[(c[h+(e*52|0)+4>>2]|0)+4>>2];e=e+1|0}while((e|0)!=(f|0))}Lf(F);tm(F+988|0);if(c[F+388>>2]&16|0)Rg(F)}m=+g[F+368>>2]*d;g[F+452>>2]=m;g[F+456>>2]=1.0/m;g[F+460>>2]=m*3.0;e=c[F+192>>2]|0;m=+gb[c[(c[e>>2]|0)+48>>2]&15](e);g[F+464>>2]=m;g[F+468>>2]=m*.25;e=c[F+684>>2]|0;m=+g[F+452>>2];i=+g[e+40>>2]*m;k=m*+g[e+44>>2];m=m*+g[e+48>>2];e=c[F+712>>2]|0;if((e|0)>0){f=c[F+720>>2]|0;h=0;do{if(+g[f+(h*104|0)+88>>2]>0.0){x=f+(h*104|0)+40|0;g[x>>2]=i+ +g[x>>2];x=f+(h*104|0)+44|0;g[x>>2]=k+ +g[x>>2];x=f+(h*104|0)+48|0;g[x>>2]=m+ +g[x>>2]}h=h+1|0}while((h|0)!=(e|0))}bj(11217);p=+g[F+308>>2];q=+g[F+312>>2];n=+g[F+304>>2]>0.0?1:+g[F+300>>2]>0.0;x=c[F+712>>2]|0;if(p!=0.0|q>0.0){if((x|0)>0){e=c[F+720>>2]|0;k=+g[e+8>>2];m=+g[e+12>>2];o=+g[e+16>>2];e=c[F+752>>2]|0;if((e|0)>0){f=c[F+760>>2]|0;h=0;i=0.0;do{W=c[f+(h*44|0)+8>>2]|0;X=c[f+(h*44|0)+12>>2]|0;D=+g[X+8>>2]-k;w=+g[X+12>>2]-m;z=+g[X+16>>2]-o;X=c[f+(h*44|0)+16>>2]|0;A=+g[X+8>>2]-k;y=+g[X+12>>2]-m;E=+g[X+16>>2]-o;i=i+((+g[W+16>>2]-o)*(D*y-w*A)+((+g[W+8>>2]-k)*(w*E-z*y)+(+g[W+12>>2]-m)*(z*A-D*E)));h=h+1|0}while((h|0)!=(e|0))}else i=0.0;i=i/6.0}else i=0.0;k=p*(1.0/+B(+i));i=q*(+g[F+476>>2]-i)}else{i=0.0;k=0.0}a:do if((x|0)>0){if(n){f=0;while(1){e=c[F+720>>2]|0;if(+g[e+(f*104|0)+88>>2]>0.0){Ce(F,F+1212|0,f);if(p!=0.0){A=k*+g[e+(f*104|0)+92>>2];D=A*+g[e+(f*104|0)+76>>2];E=A*+g[e+(f*104|0)+80>>2];X=e+(f*104|0)+56|0;g[X>>2]=+g[e+(f*104|0)+72>>2]*A+ +g[X>>2];X=e+(f*104|0)+60|0;g[X>>2]=D+ +g[X>>2];X=e+(f*104|0)+64|0;g[X>>2]=E+ +g[X>>2]}if(q>0.0){A=i*+g[e+(f*104|0)+92>>2];D=A*+g[e+(f*104|0)+76>>2];E=A*+g[e+(f*104|0)+80>>2];X=e+(f*104|0)+56|0;g[X>>2]=+g[e+(f*104|0)+72>>2]*A+ +g[X>>2];X=e+(f*104|0)+60|0;g[X>>2]=D+ +g[X>>2];X=e+(f*104|0)+64|0;g[X>>2]=E+ +g[X>>2]}}f=f+1|0;if((f|0)==(x|0))break a}}e=c[F+720>>2]|0;f=0;do{if(+g[e+(f*104|0)+88>>2]>0.0){if(p!=0.0){A=k*+g[e+(f*104|0)+92>>2];D=A*+g[e+(f*104|0)+76>>2];E=A*+g[e+(f*104|0)+80>>2];X=e+(f*104|0)+56|0;g[X>>2]=+g[e+(f*104|0)+72>>2]*A+ +g[X>>2];X=e+(f*104|0)+60|0;g[X>>2]=D+ +g[X>>2];X=e+(f*104|0)+64|0;g[X>>2]=E+ +g[X>>2]}if(q>0.0){A=i*+g[e+(f*104|0)+92>>2];D=A*+g[e+(f*104|0)+76>>2];E=A*+g[e+(f*104|0)+80>>2];X=e+(f*104|0)+56|0;g[X>>2]=+g[e+(f*104|0)+72>>2]*A+ +g[X>>2];X=e+(f*104|0)+60|0;g[X>>2]=D+ +g[X>>2];X=e+(f*104|0)+64|0;g[X>>2]=E+ +g[X>>2]}}f=f+1|0}while((f|0)!=(x|0))}while(0);n=c[F+752>>2]|0;if((n|0)>0){x=0;do{v=+g[F+452>>2];q=+g[F+304>>2];p=+g[F+300>>2];b:do if((q>0.0|p>0.0?(K=c[F+288>>2]|0,(K|0)>3):0)?(L=c[F+760>>2]|0,M=c[L+(x*44|0)+8>>2]|0,W=c[L+(x*44|0)+12>>2]|0,N=+g[M+40>>2],H=+g[M+44>>2],I=+g[M+48>>2],X=c[L+(x*44|0)+16>>2]|0,J=c[c[F+684>>2]>>2]|0,S=(N+ +g[W+40>>2]+ +g[X+40>>2])*.3333333432674408-+g[F+1212>>2],U=(H+ +g[W+44>>2]+ +g[X+44>>2])*.3333333432674408-+g[F+1216>>2],T=(I+ +g[W+48>>2]+ +g[X+48>>2])*.3333333432674408-+g[F+1220>>2],Q=+C(+(S*S+U*U+T*T)),S*S+U*U+T*T>1.1920928955078125e-07):0){t=S*(1.0/Q);w=U*(1.0/Q);y=T*(1.0/Q);r=+g[L+(x*44|0)+20>>2];s=+g[L+(x*44|0)+24>>2];u=+g[L+(x*44|0)+28>>2];switch(K|0){case 5:break;case 4:case 6:{i=S*r+U*s+T*u<0.0?-1.0:1.0;if(!(T*u*i+(S*r*i+U*s*i)>0.0))break b;k=-((c[j>>2]=J,+g[j>>2])*(S*S+U*U+T*T)*(T*u*i+(S*r*i+U*s*i))*+g[L+(x*44|0)+36>>2]);t=(t*p*k+(r*i*q*k+0.0))*.3333333432674408;r=(w*p*k+(s*i*q*k+0.0))*.3333333432674408;p=(y*p*k+(u*i*q*k+0.0))*.3333333432674408;h=M;k=N;m=H;o=I;e=0;while(1){i=v*+g[h+88>>2];f=h+56|0;if(p*i*p*i+(t*i*t*i+r*i*r*i)>k*k+m*m+o*o){D=1.0/+C(+(p*p+(t*t+r*r)));E=o*p*D+(k*t*D+m*r*D);g[f>>2]=+g[f>>2]-1.0/i*t*D*E;X=h+60|0;g[X>>2]=+g[X>>2]-1.0/i*r*D*E;X=h+64|0;g[X>>2]=+g[X>>2]-1.0/i*p*D*E}else{g[f>>2]=t+ +g[f>>2];X=h+60|0;g[X>>2]=r+ +g[X>>2];X=h+64|0;g[X>>2]=p+ +g[X>>2]}e=e+1|0;if((e|0)==3)break b;X=c[L+(x*44|0)+8+(e<<2)>>2]|0;h=X;k=+g[X+40>>2];m=+g[X+44>>2];o=+g[X+48>>2]}}default:break b}o=S*r+U*s+T*u<0.0?-1.0:1.0;k=y*u*o+(t*r*o+w*s*o);m=+g[L+(x*44|0)+36>>2]*.5;i=(c[j>>2]=J,+g[j>>2]);p=k*(S*S+U*U+T*T)*p*.5*i*m;if(k>0.0&k<.9847999811172485){A=Q*q*.5*i*m*+C(+(1.0-k*k));D=(y*(t*u*o-y*r*o)-w*(w*r*o-t*s*o))*A*.3333333432674408;E=(w*(y*s*o-w*u*o)-t*(t*u*o-y*r*o))*A*.3333333432674408;A=(t*(w*r*o-t*s*o)-y*(y*s*o-w*u*o))*A*.3333333432674408}else{D=0.0;E=0.0;A=0.0}f=M;i=t*p*-.3333333432674408;z=w*p*-.3333333432674408;o=y*p*-.3333333432674408;m=y*p*-.3333333432674408;v=w*p*-.3333333432674408;u=t*p*-.3333333432674408;e=0;while(1){k=+g[f+88>>2];if(k>0.0){r=+g[F+452>>2];s=i*k*r;t=z*k*r;r=o*k*r;k=+g[f+40>>2];p=+g[f+44>>2];q=+g[f+48>>2];if(r*r+(s*s+t*t)>0.0?r*r+(s*s+t*t)>=k*k+p*p+q*q:0){p=+C(+(k*k+p*p+q*q))/+C(+(r*r+(s*s+t*t)))*.800000011920929;i=i*p;k=z*p;o=o*p;p=i;q=k;m=o}else{p=u;q=v;k=z}h=f+56|0;W=f+60|0;y=q+ +g[W>>2];X=f+64|0;z=m+ +g[X>>2];g[h>>2]=D+(p+ +g[h>>2]);g[W>>2]=A+y;g[X>>2]=E+z}else{p=u;k=z;q=v}e=e+1|0;if((e|0)==3)break b;f=c[L+(x*44|0)+8+(e<<2)>>2]|0;z=k;v=q;u=p}}while(0);x=x+1|0}while((x|0)!=(n|0))}e=c[2405]|0;X=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=X;do if(!X){if(c[e+4>>2]|0){Za(V+128|0,0)|0;X=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[V+128+4>>2]|0)-(c[X+4>>2]|0)+(((c[V+128>>2]|0)-(c[X>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(c[e+16>>2]|0)break;e=c[2405]|0}c[2405]=c[e+20>>2]}while(0);e=c[F+712>>2]|0;if((e|0)>0){f=0;do{W=c[F+720>>2]|0;X=W+(f*104|0)+24|0;x=W+(f*104|0)+8|0;c[X>>2]=c[x>>2];c[X+4>>2]=c[x+4>>2];c[X+8>>2]=c[x+8>>2];c[X+12>>2]=c[x+12>>2];X=W+(f*104|0)+56|0;D=+g[W+(f*104|0)+88>>2];E=+g[F+452>>2];z=+g[X>>2]*D*E;A=D*+g[W+(f*104|0)+60>>2]*E;D=E*D*+g[W+(f*104|0)+64>>2];E=+g[(c[F+684>>2]|0)+12>>2]/E;z=z>E?E:z;A=A>E?E:A;D=D>E?E:D;n=W+(f*104|0)+40|0;z=(z<-E?-E:z)+ +g[n>>2];g[n>>2]=z;n=W+(f*104|0)+44|0;A=(A<-E?-E:A)+ +g[n>>2];g[n>>2]=A;n=W+(f*104|0)+48|0;D=(D<-E?-E:D)+ +g[n>>2];g[n>>2]=D;E=+g[F+452>>2];g[x>>2]=z*E+ +g[x>>2];x=W+(f*104|0)+12|0;g[x>>2]=E*A+ +g[x>>2];W=W+(f*104|0)+16|0;g[W>>2]=D*E+ +g[W>>2];c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[X+12>>2]=0;f=f+1|0}while((f|0)!=(e|0))}Gc(F);e=c[F+928>>2]|0;if(e){X=c[F+192>>2]|0;A=+gb[c[(c[X>>2]|0)+48>>2]&15](X);E=+g[e+4>>2]-A;D=+g[e+8>>2]-A;g[F+892>>2]=+g[e>>2]-A;g[F+896>>2]=E;g[F+900>>2]=D;g[F+904>>2]=0.0;D=A+ +g[e+20>>2];E=A+ +g[e+24>>2];g[F+908>>2]=A+ +g[e+16>>2];g[F+912>>2]=D;g[F+916>>2]=E;g[F+920>>2]=0.0;e=c[F+188>>2]|0;if(e|0){X=c[F+684>>2]|0;W=c[X+32>>2]|0;Rb[c[(c[W>>2]|0)+16>>2]&31](W,e,F+892|0,F+908|0,c[X+36>>2]|0)}}else{c[F+892>>2]=0;c[F+892+4>>2]=0;c[F+892+8>>2]=0;c[F+892+12>>2]=0;c[F+892+16>>2]=0;c[F+892+20>>2]=0;c[F+892+24>>2]=0;c[F+892+28>>2]=0}e=c[F+712>>2]|0;if((e|0)>0){f=0;do{W=c[F+720>>2]|0;D=+g[F+464>>2];z=+g[W+(f*104|0)+8>>2];E=+g[W+(f*104|0)+12>>2];A=+g[W+(f*104|0)+16>>2];g[V>>2]=z-D;g[V+4>>2]=E-D;g[V+8>>2]=A-D;g[V+12>>2]=0.0;g[V+16>>2]=D+z;g[V+20>>2]=D+E;g[V+24>>2]=D+A;g[V+28>>2]=0.0;X=c[W+(f*104|0)+96>>2]|0;A=+g[F+460>>2];D=A*+g[W+(f*104|0)+44>>2];E=A*+g[W+(f*104|0)+48>>2];g[V+128>>2]=+g[W+(f*104|0)+40>>2]*A;g[V+128+4>>2]=D;g[V+128+8>>2]=E;g[V+128+12>>2]=0.0;Zg(F+928|0,X,V,V+128|0,+g[F+468>>2])|0;f=f+1|0}while((f|0)!=(e|0))}if(c[F+988>>2]|0?(c[F+752>>2]|0)>0:0){e=0;do{X=c[F+760>>2]|0;n=c[X+(e*44|0)+8>>2]|0;x=c[X+(e*44|0)+12>>2]|0;W=c[X+(e*44|0)+16>>2]|0;z=(+g[n+40>>2]+ +g[x+40>>2]+ +g[W+40>>2])*.3333333432674408;A=(+g[n+44>>2]+ +g[x+44>>2]+ +g[W+44>>2])*.3333333432674408;D=(+g[n+48>>2]+ +g[x+48>>2]+ +g[W+48>>2])*.3333333432674408;u=+g[F+464>>2];r=+g[n+8>>2];t=+g[n+12>>2];w=+g[n+16>>2];E=+g[n+20>>2];y=+g[x+8>>2];k=y>2];m=v>2];o=s>2];p=q>2];s=+g[W+12>>2];v=+g[W+16>>2];y=+g[W+20>>2];g[V>>2]=(q>2]=(s>2]=(v>2]=y>2]=u+(r>2]=u+(t>2]=u+(w>2]=E>2]|0;E=+g[F+460>>2];g[V+128>>2]=z*E;g[V+128+4>>2]=A*E;g[V+128+8>>2]=D*E;g[V+128+12>>2]=0.0;Zg(F+988|0,X,V,V+128|0,+g[F+468>>2])|0;e=e+1|0}while((e|0)<(c[F+752>>2]|0))}do if(a[F+473>>0]|0){x=c[F+712>>2]|0;if((x|0)>0){e=c[F+720>>2]|0;f=c[F+512>>2]|0;k=0.0;m=0.0;i=0.0;h=0;do{E=+g[f+(h<<2)>>2];i=i+ +g[e+(h*104|0)+8>>2]*E;k=k+E*+g[e+(h*104|0)+12>>2];m=m+E*+g[e+(h*104|0)+16>>2];h=h+1|0}while((h|0)!=(x|0))}else{i=0.0;k=0.0;m=0.0}g[F+520>>2]=i;g[F+524>>2]=k;g[F+528>>2]=m;g[F+532>>2]=0.0;h=V+128+4|0;n=h+44|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(n|0));g[V+128>>2]=1.1920928955078125e-07;g[V+128+20>>2]=2.384185791015625e-07;g[V+128+40>>2]=3.5762786865234375e-07;if((x|0)>0){e=c[F+512>>2]|0;f=c[F+720>>2]|0;h=c[F+492>>2]|0;o=1.1920928955078125e-07;p=+g[V+128+4>>2];q=+g[V+128+8>>2];r=+g[V+128+16>>2];s=2.384185791015625e-07;t=+g[V+128+24>>2];u=0.0;v=0.0;w=3.5762786865234375e-07;n=0;do{D=+g[e+(n<<2)>>2];Y=(+g[f+(n*104|0)+8>>2]-i)*D;y=(+g[f+(n*104|0)+12>>2]-k)*D;D=D*(+g[f+(n*104|0)+16>>2]-m);z=+g[h+(n<<4)>>2];A=+g[h+(n<<4)+4>>2];E=+g[h+(n<<4)+8>>2];o=Y*z+o;p=Y*A+p;q=Y*E+q;r=y*z+r;s=y*A+s;t=y*E+t;u=D*z+u;v=D*A+v;w=D*E+w;n=n+1|0}while((n|0)!=(x|0));g[V+128>>2]=o;g[V+128+4>>2]=p;g[V+128+8>>2]=q;g[V+128+16>>2]=r;g[V+128+20>>2]=s;g[V+128+24>>2]=t;g[V+128+32>>2]=u;g[V+128+36>>2]=v;g[V+128+40>>2]=w}if((a[22728]|0)==0?Yy(22728)|0:0){g[5824]=9.999999747378752e-05;c[5825]=16}Xc(V+128|0,V+80|0,V+32|0);c[F+536>>2]=c[V+80>>2];c[F+536+4>>2]=c[V+80+4>>2];c[F+536+8>>2]=c[V+80+8>>2];c[F+536+12>>2]=c[V+80+12>>2];c[F+552>>2]=c[P>>2];c[F+552+4>>2]=c[P+4>>2];c[F+552+8>>2]=c[P+8>>2];c[F+552+12>>2]=c[P+12>>2];c[F+568>>2]=c[O>>2];c[F+568+4>>2]=c[O+4>>2];c[F+568+8>>2]=c[O+8>>2];c[F+568+12>>2]=c[O+12>>2];ba=+g[V+80>>2];Z=+g[P>>2];z=+g[O>>2];aa=+g[V+80+4>>2];v=+g[V+80+20>>2];D=+g[V+80+36>>2];$=+g[V+80+8>>2];w=+g[V+80+24>>2];Y=+g[V+80+40>>2];s=+g[F+632>>2];t=+g[F+636>>2];u=+g[F+640>>2];ha=+g[F+648>>2];ga=+g[F+652>>2];r=+g[F+656>>2];A=+g[F+664>>2];E=+g[F+668>>2];i=+g[F+672>>2];fa=+g[V+128>>2];ea=+g[V+128+16>>2];q=+g[V+128+32>>2];o=(ba*s+aa*t+$*u)*fa+(Z*s+v*t+w*u)*ea+(z*s+D*t+Y*u)*q;da=+g[V+128+4>>2];ca=+g[V+128+20>>2];p=+g[V+128+36>>2];m=(ba*s+aa*t+$*u)*da+(Z*s+v*t+w*u)*ca+(z*s+D*t+Y*u)*p;_=+g[V+128+8>>2];y=+g[V+128+24>>2];k=+g[V+128+40>>2];u=(ba*s+aa*t+$*u)*_+(Z*s+v*t+w*u)*y+(z*s+D*t+Y*u)*k;t=(ba*ha+aa*ga+$*r)*fa+(Z*ha+v*ga+w*r)*ea+(z*ha+D*ga+Y*r)*q;s=(ba*ha+aa*ga+$*r)*da+(Z*ha+v*ga+w*r)*ca+(z*ha+D*ga+Y*r)*p;r=(ba*ha+aa*ga+$*r)*_+(Z*ha+v*ga+w*r)*y+(z*ha+D*ga+Y*r)*k;q=fa*(ba*A+aa*E+$*i)+ea*(Z*A+v*E+w*i)+(z*A+D*E+Y*i)*q;p=(ba*A+aa*E+$*i)*da+(Z*A+v*E+w*i)*ca+(z*A+D*E+Y*i)*p;k=(ba*A+aa*E+$*i)*_+(Z*A+v*E+w*i)*y+(z*A+D*E+Y*i)*k;g[F+584>>2]=o;g[F+588>>2]=m;g[F+592>>2]=u;g[F+596>>2]=0.0;g[F+600>>2]=t;g[F+604>>2]=s;g[F+608>>2]=r;g[F+612>>2]=0.0;g[F+616>>2]=q;g[F+620>>2]=p;g[F+624>>2]=k;g[F+628>>2]=0.0;i=+g[F+364>>2];if(i>1.0){ha=1.0/(u*(p*t-s*q)+(o*(s*k-r*p)+m*(r*q-k*t)))<1.0?1.0:i<1.0/(u*(p*t-s*q)+(o*(s*k-r*p)+m*(r*q-k*t)))?i:1.0/(u*(p*t-s*q)+(o*(s*k-r*p)+m*(r*q-k*t)));g[F+584>>2]=o*ha;g[F+588>>2]=m*ha;g[F+592>>2]=u*ha;g[F+596>>2]=0.0;g[F+600>>2]=t*ha;g[F+604>>2]=s*ha;g[F+608>>2]=r*ha;g[F+612>>2]=0.0;g[F+616>>2]=q*ha;g[F+620>>2]=p*ha;g[F+624>>2]=ha*k;g[F+628>>2]=0.0}if(a[F+473>>0]|0){if(!(+g[F+320>>2]>0.0))break;i=+g[F+536>>2];p=+g[F+540>>2];q=+g[F+544>>2];r=+g[F+552>>2];s=+g[F+556>>2];t=+g[F+560>>2];k=+g[F+568>>2];m=+g[F+572>>2];o=+g[F+576>>2];e=c[F+712>>2]|0;if((e|0)<=0)break;h=0;do{f=c[F+720>>2]|0;if(+g[f+(h*104|0)+88>>2]>0.0){x=c[F+492>>2]|0;ca=+g[x+(h<<4)>>2];da=+g[x+(h<<4)+4>>2];ea=+g[x+(h<<4)+8>>2];ba=+g[F+320>>2];x=f+(h*104|0)+8|0;fa=+g[x>>2];W=f+(h*104|0)+12|0;ga=+g[W>>2];X=f+(h*104|0)+16|0;ha=+g[X>>2];ga=ga+ba*(r*ca+s*da+t*ea+ +g[F+524>>2]-ga);ha=ha+ba*(k*ca+m*da+o*ea+ +g[F+528>>2]-ha);g[x>>2]=fa+ba*(+g[F+520>>2]+(i*ca+p*da+q*ea)-fa);g[W>>2]=ga;g[X>>2]=ha;g[f+(h*104|0)+20>>2]=0.0}h=h+1|0}while((h|0)!=(e|0))}}while(0);h=V+128|0;n=h+104|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(n|0));e=c[F+812>>2]|0;if((e|0)<0){if((c[F+816>>2]|0)<0){f=c[F+820>>2]|0;if(f|0){if(a[F+824>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[F+820>>2]=0}a[F+824>>0]=1;c[F+820>>2]=0;c[F+816>>2]=0}do{X=c[F+820>>2]|0;W=X+(e*104|0)|0;c[W>>2]=c[V+128>>2];c[W+4>>2]=c[V+128+4>>2];c[W+8>>2]=c[V+128+8>>2];c[W+12>>2]=c[V+128+12>>2];c[W+16>>2]=c[V+128+16>>2];c[W+20>>2]=c[V+128+20>>2];c[W+24>>2]=c[V+128+24>>2];W=X+(e*104|0)+28|0;c[W>>2]=c[V+128+28>>2];c[W+4>>2]=c[V+128+28+4>>2];c[W+8>>2]=c[V+128+28+8>>2];c[W+12>>2]=c[V+128+28+12>>2];W=X+(e*104|0)+44|0;c[W>>2]=c[V+128+44>>2];c[W+4>>2]=c[V+128+44+4>>2];c[W+8>>2]=c[V+128+44+8>>2];c[W+12>>2]=c[V+128+44+12>>2];W=X+(e*104|0)+60|0;c[W>>2]=c[V+128+60>>2];c[W+4>>2]=c[V+128+60+4>>2];c[W+8>>2]=c[V+128+60+8>>2];c[W+12>>2]=c[V+128+60+12>>2];X=X+(e*104|0)+76|0;c[X>>2]=c[R>>2];c[X+4>>2]=c[R+4>>2];c[X+8>>2]=c[R+8>>2];c[X+12>>2]=c[R+12>>2];c[X+16>>2]=c[R+16>>2];c[X+20>>2]=c[R+20>>2];c[X+24>>2]=c[R+24>>2];e=e+1|0}while((e|0)!=0)}c[F+812>>2]=0;h=V+128|0;n=h+56|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(n|0));e=c[F+832>>2]|0;if((e|0)<0){if((c[F+836>>2]|0)<0){f=c[F+840>>2]|0;if(f|0){if(a[F+844>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[F+840>>2]=0}a[F+844>>0]=1;c[F+840>>2]=0;c[F+836>>2]=0}do{h=(c[F+840>>2]|0)+(e*56|0)|0;f=V+128|0;n=h+56|0;do{c[h>>2]=c[f>>2];h=h+4|0;f=f+4|0}while((h|0)<(n|0));e=e+1|0}while((e|0)!=0)}c[F+832>>2]=0;Xf(F+928|0,1);Xf(F+988|0,1);Xf(F+1048|0,1);e=c[b+24>>2]|0}}G=G+1|0}while((G|0)<(e|0));l=V;return}function hc(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;V=c[e>>2]|0;fa=c[f>>2]|0;if(V|0)g=c[V+12>>2]|0;else g=b;h=c[g+88>>2]|0;i=c[g+92>>2]|0;m=c[g+96>>2]|0;if(!fa)g=d;else g=c[fa+12>>2]|0;s=c[g+88>>2]|0;n=c[g+92>>2]|0;t=c[g+96>>2]|0;W=c[b+88>>2]|0;da=(c[d+88>>2]|0)-W|0;v=c[b+92>>2]|0;ea=(c[d+92>>2]|0)-v|0;b=c[b+96>>2]|0;ca=(c[d+96>>2]|0)-b|0;ba=c[(V|0?V:fa)+12>>2]|0;X=(c[ba+88>>2]|0)-W|0;U=(c[ba+92>>2]|0)-v|0;ba=(c[ba+96>>2]|0)-b|0;aa=(O(U,ca)|0)-(O(ba,ea)|0)|0;ba=(O(ba,da)|0)-(O(X,ca)|0)|0;U=(O(X,ea)|0)-(O(U,da)|0)|0;W=rs(aa|0,((aa|0)<0)<<31>>31|0,W|0,((W|0)<0)<<31>>31|0)|0;X=z;v=rs(ba|0,((ba|0)<0)<<31>>31|0,v|0,((v|0)<0)<<31>>31|0)|0;u=z;b=rs(U|0,((U|0)<0)<<31>>31|0,b|0,((b|0)<0)<<31>>31|0)|0;b=cw(W|0,X|0,b|0,z|0)|0;u=cw(b|0,z|0,v|0,u|0)|0;v=z;b=rs(U|0,((U|0)<0)<<31>>31|0,ea|0,((ea|0)<0)<<31>>31|0)|0;X=z;W=rs(ba|0,((ba|0)<0)<<31>>31|0,ca|0,((ca|0)<0)<<31>>31|0)|0;W=Nv(b|0,X|0,W|0,z|0)|0;X=z;b=rs(aa|0,((aa|0)<0)<<31>>31|0,ca|0,((ca|0)<0)<<31>>31|0)|0;Z=z;Y=rs(U|0,((U|0)<0)<<31>>31|0,da|0,((da|0)<0)<<31>>31|0)|0;Y=Nv(b|0,Z|0,Y|0,z|0)|0;Z=z;b=rs(ba|0,((ba|0)<0)<<31>>31|0,da|0,((da|0)<0)<<31>>31|0)|0;$=z;_=rs(aa|0,((aa|0)<0)<<31>>31|0,ea|0,((ea|0)<0)<<31>>31|0)|0;_=Nv(b|0,$|0,_|0,z|0)|0;$=z;b=rs(W|0,X|0,h|0,((h|0)<0)<<31>>31|0)|0;T=z;g=rs(Y|0,Z|0,i|0,((i|0)<0)<<31>>31|0)|0;T=cw(g|0,z|0,b|0,T|0)|0;b=z;g=rs(_|0,$|0,m|0,((m|0)<0)<<31>>31|0)|0;g=cw(T|0,b|0,g|0,z|0)|0;b=z;if((V|0)!=0?(c[V+12>>2]|0)!=0:0){p=V;q=h;o=i;while(1){p=c[(c[p+8>>2]|0)+4>>2]|0;k=p+12|0;i=c[k>>2]|0;d=c[i+88>>2]|0;S=rs(d|0,((d|0)<0)<<31>>31|0,aa|0,((aa|0)<0)<<31>>31|0)|0;R=z;h=c[i+92>>2]|0;T=rs(h|0,((h|0)<0)<<31>>31|0,ba|0,((ba|0)<0)<<31>>31|0)|0;R=cw(T|0,z|0,S|0,R|0)|0;S=z;i=c[i+96>>2]|0;T=rs(i|0,((i|0)<0)<<31>>31|0,U|0,((U|0)<0)<<31>>31|0)|0;T=cw(R|0,S|0,T|0,z|0)|0;S=z;if((S|0)<(v|0)|(S|0)==(v|0)&T>>>0>>0){d=q;i=o;h=m;break}if((c[p+20>>2]|0)==(c[a+100>>2]|0)){d=q;i=o;h=m;break}l=rs(d|0,((d|0)<0)<<31>>31|0,W|0,X|0)|0;T=z;j=rs(h|0,((h|0)<0)<<31>>31|0,Y|0,Z|0)|0;T=cw(j|0,z|0,l|0,T|0)|0;l=z;j=rs(i|0,((i|0)<0)<<31>>31|0,_|0,$|0)|0;j=cw(T|0,l|0,j|0,z|0)|0;l=z;if(!((l|0)>(b|0)|(l|0)==(b|0)&j>>>0>g>>>0)){d=q;i=o;h=m;break}c[e>>2]=p;T=c[k>>2]|0;d=c[T+88>>2]|0;i=c[T+92>>2]|0;h=c[T+96>>2]|0;if(!T){g=j;b=l;break}else{b=l;g=j;q=d;o=i;m=h}}p=c[f>>2]|0;T=d;m=h}else{p=fa;T=h}h=rs(W|0,X|0,s|0,((s|0)<0)<<31>>31|0)|0;S=z;d=rs(Y|0,Z|0,n|0,((n|0)<0)<<31>>31|0)|0;S=cw(d|0,z|0,h|0,S|0)|0;h=z;d=rs(_|0,$|0,t|0,((t|0)<0)<<31>>31|0)|0;d=cw(S|0,h|0,d|0,z|0)|0;h=z;a:do if(p)if(!(c[p+12>>2]|0)){k=s;o=t}else{r=p;q=s;o=t;while(1){p=c[c[r+8>>2]>>2]|0;l=c[p+12>>2]|0;j=c[l+88>>2]|0;R=rs(j|0,((j|0)<0)<<31>>31|0,aa|0,((aa|0)<0)<<31>>31|0)|0;Q=z;k=c[l+92>>2]|0;S=rs(k|0,((k|0)<0)<<31>>31|0,ba|0,((ba|0)<0)<<31>>31|0)|0;Q=cw(S|0,z|0,R|0,Q|0)|0;R=z;l=c[l+96>>2]|0;S=rs(l|0,((l|0)<0)<<31>>31|0,U|0,((U|0)<0)<<31>>31|0)|0;S=cw(Q|0,R|0,S|0,z|0)|0;R=z;if((R|0)<(v|0)|(R|0)==(v|0)&S>>>0>>0){p=r;k=q;break a}if((c[p+20>>2]|0)==(c[a+100>>2]|0)){p=r;k=q;break a}S=rs(j|0,((j|0)<0)<<31>>31|0,W|0,X|0)|0;R=z;j=rs(k|0,((k|0)<0)<<31>>31|0,Y|0,Z|0)|0;R=cw(j|0,z|0,S|0,R|0)|0;S=z;j=rs(l|0,((l|0)<0)<<31>>31|0,_|0,$|0)|0;j=cw(R|0,S|0,j|0,z|0)|0;l=z;if(!((l|0)>(h|0)|(l|0)==(h|0)&j>>>0>d>>>0)){p=r;k=q;break a}c[f>>2]=p;S=c[p+12>>2]|0;k=c[S+88>>2]|0;n=c[S+92>>2]|0;o=c[S+96>>2]|0;if(!S){d=j;h=l;break}else{r=p;h=l;d=j;q=k}}}else{p=0;k=s;o=t}while(0);j=Nv(d|0,h|0,g|0,b|0)|0;b=z;if((b|0)>0|(b|0)==0&j>>>0>0){R=Nv(0,0,U|0,((U|0)<0)<<31>>31|0)|0;S=z;l=p;d=j;h=b;t=T;v=i;x=m;N=k;P=n;Q=o;while(1){r=(O(P-v|0,ea)|0)+(O(N-t|0,da)|0)+(O(Q-x|0,ca)|0)|0;g=c[e>>2]|0;if(!g){w=r;D=((r|0)<0)<<31>>31;E=h;q=d;u=r;I=t;H=v;G=x}else{q=r;s=((r|0)<0)<<31>>31;u=r;J=t;K=v;L=x;b:while(1){if(!(c[g+12>>2]|0)){t=J;r=K;g=L;break}I=c[(c[g>>2]|0)+8>>2]|0;if((c[I+20>>2]|0)<=(c[a+100>>2]|0)){t=J;r=K;g=L;break}M=c[I+12>>2]|0;t=c[M+88>>2]|0;H=t-J|0;r=c[M+92>>2]|0;G=r-K|0;M=c[M+96>>2]|0;l=M-L|0;w=rs(H|0,((H|0)<0)<<31>>31|0,W|0,X|0)|0;F=z;v=rs(G|0,((G|0)<0)<<31>>31|0,Y|0,Z|0)|0;F=cw(v|0,z|0,w|0,F|0)|0;w=z;v=rs(l|0,((l|0)<0)<<31>>31|0,_|0,$|0)|0;v=cw(F|0,w|0,v|0,z|0)|0;w=z;l=(O(G,ea)|0)+(O(H,da)|0)+(O(l,ca)|0)|0;do if((v|0)==0&(w|0)==0){if((l|0)>=0){t=J;r=K;g=L;break b}}else{if((w|0)>=0){t=J;r=K;g=L;break b}if((l|0)>0){y=1;A=l;x=((l|0)<0)<<31>>31}else{A=Nv(0,0,l|0,((l|0)<0)<<31>>31|0)|0;y=((l|0)!=0)<<31>>31;A=l|0?A:0;x=l|0?z:0}H=0-y|0;D=Nv(0,0,v|0,w|0)|0;E=z;if((u|0)>0){F=q;G=s;l=1}else{l=(u|0)!=0;F=Nv(0,0,q|0,s|0)|0;F=l?F:0;G=l?z:0;l=l<<31>>31}if((h|0)>0|(h|0)==0&d>>>0>0){v=d;w=h}else{C=(d|0)!=0|(h|0)!=0;v=Nv(0,0,d|0,h|0)|0;v=C?v:0;w=C?z:0;l=C?0-l|0:l}if((l|0)==(H|0)){if(!y)break;l=rs(v|0,0,A|0,0)|0;y=z;ja=rs(w|0,0,A|0,0)|0;ia=z;B=rs(v|0,0,x|0,0)|0;C=z;ha=rs(w|0,0,x|0,0)|0;A=z;B=cw(ja|0,0,B|0,0)|0;v=z;A=cw(ia|0,0,ha|0,A|0)|0;C=cw(A|0,z|0,C|0,0)|0;v=cw(C|0,z|0,v|0,0)|0;C=z;y=cw(0,B|0,l|0,y|0)|0;A=z;B=cw(v|0,C|0,(A>>>0>>0|(A|0)==(B|0)&y>>>0<0)&1|0,0)|0;C=z;v=rs(F|0,0,D|0,0)|0;l=z;ha=rs(G|0,0,D|0,0)|0;D=z;w=rs(F|0,0,E|0,0)|0;x=z;E=rs(G|0,0,E|0,0)|0;F=z;w=cw(ha|0,0,w|0,0)|0;G=z;F=cw(D|0,0,E|0,F|0)|0;x=cw(F|0,z|0,x|0,0)|0;G=cw(x|0,z|0,G|0,0)|0;x=z;l=cw(0,w|0,v|0,l|0)|0;v=z;w=cw(G|0,x|0,(v>>>0>>0|(v|0)==(w|0)&l>>>0<0)&1|0,0)|0;x=z;do if(C>>>0>>0|(C|0)==(x|0)&B>>>0>>0)l=-1;else{if(C>>>0>x>>>0|(C|0)==(x|0)&B>>>0>w>>>0){l=1;break}if(A>>>0>>0|(A|0)==(v|0)&y>>>0>>0){l=-1;break}l=(A>>>0>v>>>0|(A|0)==(v|0)&y>>>0>l>>>0)&1}while(0);l=O(l,H)|0}else l=H-l|0;if((l|0)<=-1){t=J;r=K;g=L;break b}}while(0);ja=N-t|0;ia=P-r|0;l=Q-M|0;h=rs(ja|0,((ja|0)<0)<<31>>31|0,W|0,X|0)|0;ha=z;d=rs(ia|0,((ia|0)<0)<<31>>31|0,Y|0,Z|0)|0;ha=cw(d|0,z|0,h|0,ha|0)|0;h=z;d=rs(l|0,((l|0)<0)<<31>>31|0,_|0,$|0)|0;d=cw(ha|0,h|0,d|0,z|0)|0;h=z;g=(g|0)==(V|0)?0:I;c[e>>2]=g;l=(O(ia,ea)|0)+(O(ja,da)|0)+(O(l,ca)|0)|0;if(!g){q=l;s=((l|0)<0)<<31>>31;u=l;g=M;break}else{q=l;s=((l|0)<0)<<31>>31;u=l;J=t;K=r;L=M}}l=c[f>>2]|0;w=q;D=s;E=h;q=d;I=t;H=r;G=g}if(!l){g=118;break}if(!(c[l+12>>2]|0)){g=118;break}F=c[c[l+8>>2]>>2]|0;if((c[F+20>>2]|0)<=(c[a+100>>2]|0)){g=118;break}h=c[F+12>>2]|0;s=c[h+88>>2]|0;l=s-N|0;r=c[h+92>>2]|0;d=r-P|0;h=c[h+96>>2]|0;g=h-Q|0;ja=rs(l|0,((l|0)<0)<<31>>31|0,aa|0,((aa|0)<0)<<31>>31|0)|0;ha=z;ia=rs(d|0,((d|0)<0)<<31>>31|0,ba|0,((ba|0)<0)<<31>>31|0)|0;ha=cw(ia|0,z|0,ja|0,ha|0)|0;ja=z;ia=rs(g|0,((g|0)<0)<<31>>31|0,R|0,S|0)|0;if(!((ha|0)==(ia|0)&(ja|0)==(z|0))){g=118;break}v=rs(l|0,((l|0)<0)<<31>>31|0,W|0,X|0)|0;ja=z;t=rs(d|0,((d|0)<0)<<31>>31|0,Y|0,Z|0)|0;ja=cw(t|0,z|0,v|0,ja|0)|0;v=z;t=rs(g|0,((g|0)<0)<<31>>31|0,_|0,$|0)|0;t=cw(ja|0,v|0,t|0,z|0)|0;v=z;g=(O(d,ea)|0)+(O(l,da)|0)+(O(g,ca)|0)|0;ja=s-I|0;ia=r-H|0;d=h-G|0;h=rs(ja|0,((ja|0)<0)<<31>>31|0,W|0,X|0)|0;ja=z;ia=rs(ia|0,((ia|0)<0)<<31>>31|0,Y|0,Z|0)|0;ja=cw(ia|0,z|0,h|0,ja|0)|0;h=z;d=rs(d|0,((d|0)<0)<<31>>31|0,_|0,$|0)|0;d=cw(ja|0,h|0,d|0,z|0)|0;h=z;if(!((h|0)>0|(h|0)==0&d>>>0>0)){g=118;break}if((t|0)==0&(v|0)==0){if((g|0)>=0){g=118;break}}else{if((v|0)>=0){g=118;break}if((g|0)>0){x=1;y=g;s=((g|0)<0)<<31>>31}else{y=Nv(0,0,g|0,((g|0)<0)<<31>>31|0)|0;x=((g|0)!=0)<<31>>31;y=g|0?y:0;s=g|0?z:0}C=0-x|0;A=Nv(0,0,t|0,v|0)|0;B=z;if((u|0)>0){r=D;g=1}else{g=(u|0)!=0;w=Nv(0,0,w|0,D|0)|0;w=g?w:0;r=g?z:0;g=g<<31>>31}if((E|0)>0|(E|0)==0&q>>>0>0)l=E;else{ja=(q|0)!=0|(E|0)!=0;q=Nv(0,0,q|0,E|0)|0;q=ja?q:0;l=ja?z:0;g=ja?0-g|0:g}if((g|0)==(C|0)){if(!x){g=118;break}g=rs(q|0,0,y|0,0)|0;t=z;ia=rs(l|0,0,y|0,0)|0;Q=z;u=rs(q|0,0,s|0,0)|0;v=z;ja=rs(l|0,0,s|0,0)|0;s=z;u=cw(ia|0,0,u|0,0)|0;l=z;s=cw(Q|0,0,ja|0,s|0)|0;v=cw(s|0,z|0,v|0,0)|0;l=cw(v|0,z|0,l|0,0)|0;v=z;s=cw(0,u|0,g|0,t|0)|0;t=z;u=cw(l|0,v|0,(t>>>0>>0|(t|0)==(u|0)&s>>>0<0)&1|0,0)|0;v=z;l=rs(w|0,0,A|0,0)|0;g=z;ja=rs(r|0,0,A|0,0)|0;Q=z;q=rs(w|0,0,B|0,0)|0;ia=z;ha=rs(r|0,0,B|0,0)|0;r=z;q=cw(ja|0,0,q|0,0)|0;ja=z;r=cw(Q|0,0,ha|0,r|0)|0;r=cw(r|0,z|0,ia|0,0)|0;ja=cw(r|0,z|0,ja|0,0)|0;r=z;g=cw(0,q|0,l|0,g|0)|0;l=z;q=cw(ja|0,r|0,(l>>>0>>0|(l|0)==(q|0)&g>>>0<0)&1|0,0)|0;r=z;do if(v>>>0>>0|(v|0)==(r|0)&u>>>0>>0)g=-1;else{if(v>>>0>r>>>0|(v|0)==(r|0)&u>>>0>q>>>0){g=1;break}if(t>>>0>>0|(t|0)==(l|0)&s>>>0>>0){g=-1;break}g=(t>>>0>l>>>0|(t|0)==(l|0)&s>>>0>g>>>0)&1}while(0);g=O(g,C)|0}else g=C-g|0;if((g|0)<=0){g=118;break}}c[f>>2]=F;Q=c[F+12>>2]|0;l=F;t=I;v=H;x=G;N=c[Q+88>>2]|0;P=c[Q+92>>2]|0;Q=c[Q+96>>2]|0}if((g|0)==118)return}if((b|0)>=0)return;F=Nv(0,0,U|0,((U|0)<0)<<31>>31|0)|0;G=z;h=p;d=T;g=m;E=k;c:while(1){x=h;D=b;C=j;y=d;A=g;d:while(1){B=(O(n-i|0,ea)|0)+(O(E-y|0,da)|0)+(O(o-A|0,ca)|0)|0;do if((x|0?c[x+12>>2]|0:0)?(ga=c[(c[x+4>>2]|0)+8>>2]|0,(c[ga+20>>2]|0)>(c[a+100>>2]|0)):0){w=c[ga+12>>2]|0;u=c[w+88>>2]|0;ja=u-E|0;v=c[w+92>>2]|0;ia=v-n|0;w=c[w+96>>2]|0;g=w-o|0;d=rs(ja|0,((ja|0)<0)<<31>>31|0,W|0,X|0)|0;ha=z;b=rs(ia|0,((ia|0)<0)<<31>>31|0,Y|0,Z|0)|0;ha=cw(b|0,z|0,d|0,ha|0)|0;d=z;b=rs(g|0,((g|0)<0)<<31>>31|0,_|0,$|0)|0;b=cw(ha|0,d|0,b|0,z|0)|0;d=z;g=(O(ia,ea)|0)+(O(ja,da)|0)+(O(g,ca)|0)|0;if((b|0)==0&(d|0)==0)if((g|0)>0)break d;else break;if((d|0)<0){if((g|0)>0){j=1;k=g;h=((g|0)<0)<<31>>31}else{k=Nv(0,0,g|0,((g|0)<0)<<31>>31|0)|0;j=((g|0)!=0)<<31>>31;k=g|0?k:0;h=g|0?z:0}t=0-j|0;p=Nv(0,0,b|0,d|0)|0;q=z;if((B|0)>0){r=B;s=((B|0)<0)<<31>>31;g=1}else{r=Nv(0,0,B|0,((B|0)<0)<<31>>31|0)|0;r=B|0?r:0;s=B|0?z:0;g=((B|0)!=0)<<31>>31}if((D|0)>0|(D|0)==0&C>>>0>0){b=C;d=D}else{ja=(C|0)!=0|(D|0)!=0;b=Nv(0,0,C|0,D|0)|0;b=ja?b:0;d=ja?z:0;g=ja?0-g|0:g}if((g|0)==(t|0)){if(!j)break d;g=rs(b|0,0,k|0,0)|0;j=z;ha=rs(d|0,0,k|0,0)|0;V=z;l=rs(b|0,0,h|0,0)|0;m=z;ja=rs(d|0,0,h|0,0)|0;k=z;l=cw(ha|0,0,l|0,0)|0;b=z;k=cw(V|0,0,ja|0,k|0)|0;m=cw(k|0,z|0,m|0,0)|0;b=cw(m|0,z|0,b|0,0)|0;m=z;j=cw(0,l|0,g|0,j|0)|0;k=z;l=cw(b|0,m|0,(k>>>0>>0|(k|0)==(l|0)&j>>>0<0)&1|0,0)|0;m=z;b=rs(r|0,0,p|0,0)|0;g=z;ja=rs(s|0,0,p|0,0)|0;V=z;d=rs(r|0,0,q|0,0)|0;h=z;ha=rs(s|0,0,q|0,0)|0;ia=z;d=cw(ja|0,0,d|0,0)|0;ja=z;ia=cw(V|0,0,ha|0,ia|0)|0;h=cw(ia|0,z|0,h|0,0)|0;ja=cw(h|0,z|0,ja|0,0)|0;h=z;g=cw(0,d|0,b|0,g|0)|0;b=z;d=cw(ja|0,h|0,(b>>>0>>0|(b|0)==(d|0)&g>>>0<0)&1|0,0)|0;h=z;do if(m>>>0>>0|(m|0)==(h|0)&l>>>0>>0)g=-1;else{if(m>>>0>h>>>0|(m|0)==(h|0)&l>>>0>d>>>0){g=1;break}if(k>>>0>>0|(k|0)==(b|0)&j>>>0>>0){g=-1;break}g=(k>>>0>b>>>0|(k|0)==(b|0)&j>>>0>g>>>0)&1}while(0);g=O(g,t)|0}else g=t-g|0;if((g|0)<1)break d}}while(0);g=c[e>>2]|0;if(!g){g=118;break c}if(!(c[g+12>>2]|0)){g=118;break c}v=c[(c[g+8>>2]|0)+4>>2]|0;if((c[v+20>>2]|0)<=(c[a+100>>2]|0)){g=118;break c}d=c[v+12>>2]|0;k=c[d+88>>2]|0;h=k-y|0;j=c[d+92>>2]|0;b=j-i|0;d=c[d+96>>2]|0;g=d-A|0;ja=rs(h|0,((h|0)<0)<<31>>31|0,aa|0,((aa|0)<0)<<31>>31|0)|0;ha=z;ia=rs(b|0,((b|0)<0)<<31>>31|0,ba|0,((ba|0)<0)<<31>>31|0)|0;ha=cw(ia|0,z|0,ja|0,ha|0)|0;ja=z;ia=rs(g|0,((g|0)<0)<<31>>31|0,F|0,G|0)|0;if(!((ha|0)==(ia|0)&(ja|0)==(z|0))){g=118;break c}l=rs(h|0,((h|0)<0)<<31>>31|0,W|0,X|0)|0;u=z;i=rs(b|0,((b|0)<0)<<31>>31|0,Y|0,Z|0)|0;u=cw(i|0,z|0,l|0,u|0)|0;l=z;i=rs(g|0,((g|0)<0)<<31>>31|0,_|0,$|0)|0;i=cw(u|0,l|0,i|0,z|0)|0;l=z;g=(O(b,ea)|0)+(O(h,da)|0)+(O(g,ca)|0)|0;u=E-k|0;ia=n-j|0;t=o-d|0;u=rs(u|0,((u|0)<0)<<31>>31|0,W|0,X|0)|0;ja=z;ia=rs(ia|0,((ia|0)<0)<<31>>31|0,Y|0,Z|0)|0;ja=cw(ia|0,z|0,u|0,ja|0)|0;u=z;t=rs(t|0,((t|0)<0)<<31>>31|0,_|0,$|0)|0;t=cw(ja|0,u|0,t|0,z|0)|0;u=z;if((u|0)>=0){g=118;break c}if((i|0)==0&(l|0)==0){if((g|0)<=0){g=118;break c}}else{if((l|0)>=0){g=118;break c}if((g|0)>0){j=1;k=g;h=((g|0)<0)<<31>>31}else{k=Nv(0,0,g|0,((g|0)<0)<<31>>31|0)|0;j=((g|0)!=0)<<31>>31;k=g|0?k:0;h=g|0?z:0}s=0-j|0;m=Nv(0,0,i|0,l|0)|0;p=z;if((B|0)>0){q=B;r=((B|0)<0)<<31>>31;g=1}else{q=Nv(0,0,B|0,((B|0)<0)<<31>>31|0)|0;q=B|0?q:0;r=B|0?z:0;g=((B|0)!=0)<<31>>31}if((D|0)>0|(D|0)==0&C>>>0>0){d=C;b=D}else{ja=(C|0)!=0|(D|0)!=0;d=Nv(0,0,C|0,D|0)|0;d=ja?d:0;b=ja?z:0;g=ja?0-g|0:g}if((g|0)==(s|0)){if(!j){g=118;break c}j=rs(d|0,0,k|0,0)|0;i=z;ha=rs(b|0,0,k|0,0)|0;V=z;k=rs(d|0,0,h|0,0)|0;l=z;ja=rs(b|0,0,h|0,0)|0;g=z;k=cw(ha|0,0,k|0,0)|0;b=z;g=cw(V|0,0,ja|0,g|0)|0;l=cw(g|0,z|0,l|0,0)|0;b=cw(l|0,z|0,b|0,0)|0;l=z;i=cw(0,k|0,j|0,i|0)|0;j=z;k=cw(b|0,l|0,(j>>>0>>0|(j|0)==(k|0)&i>>>0<0)&1|0,0)|0;l=z;b=rs(q|0,0,m|0,0)|0;g=z;ja=rs(r|0,0,m|0,0)|0;V=z;d=rs(q|0,0,p|0,0)|0;h=z;ha=rs(r|0,0,p|0,0)|0;ia=z;d=cw(ja|0,0,d|0,0)|0;ja=z;ia=cw(V|0,0,ha|0,ia|0)|0;h=cw(ia|0,z|0,h|0,0)|0;ja=cw(h|0,z|0,ja|0,0)|0;h=z;g=cw(0,d|0,b|0,g|0)|0;b=z;d=cw(ja|0,h|0,(b>>>0>>0|(b|0)==(d|0)&g>>>0<0)&1|0,0)|0;h=z;do if(l>>>0>>0|(l|0)==(h|0)&k>>>0>>0)g=-1;else{if(l>>>0>h>>>0|(l|0)==(h|0)&k>>>0>d>>>0){g=1;break}if(j>>>0>>0|(j|0)==(b|0)&i>>>0>>0){g=-1;break}g=(j>>>0>b>>>0|(j|0)==(b|0)&i>>>0>g>>>0)&1}while(0);g=O(g,s)|0}else g=s-g|0;if((g|0)>=0){g=118;break c}}c[e>>2]=v;A=c[v+12>>2]|0;x=c[f>>2]|0;D=u;C=t;y=c[A+88>>2]|0;i=c[A+92>>2]|0;A=c[A+96>>2]|0}h=u-y|0;d=v-i|0;j=w-A|0;h=rs(h|0,((h|0)<0)<<31>>31|0,W|0,X|0)|0;b=z;d=rs(d|0,((d|0)<0)<<31>>31|0,Y|0,Z|0)|0;b=cw(d|0,z|0,h|0,b|0)|0;h=z;j=rs(j|0,((j|0)<0)<<31>>31|0,_|0,$|0)|0;j=cw(b|0,h|0,j|0,z|0)|0;h=(x|0)==(fa|0)?0:ga;c[f>>2]=h;b=z;d=y;g=A;E=u;n=v;o=w}if((g|0)==118)return}function ic(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=l;l=l+16|0;do if(a>>>0<245){n=a>>>0<11?16:a+11&-8;k=c[6474]|0;if(k>>>(n>>>3)&3|0){d=25936+((k>>>(n>>>3)&1^1)+(n>>>3)<<1<<2)|0;a=c[d+8>>2]|0;b=c[a+8>>2]|0;if((d|0)==(b|0))c[6474]=k&~(1<<(k>>>(n>>>3)&1^1)+(n>>>3));else{c[b+12>>2]=d;c[d+8>>2]=b}v=(k>>>(n>>>3)&1^1)+(n>>>3)<<3;c[a+4>>2]=v|3;c[a+v+4>>2]=c[a+v+4>>2]|1;v=a+8|0;l=w;return v|0}m=c[6476]|0;if(n>>>0>m>>>0){if(k>>>(n>>>3)|0){a=k>>>(n>>>3)<<(n>>>3)&(2<<(n>>>3)|0-(2<<(n>>>3)));e=((a&0-a)+-1|0)>>>(((a&0-a)+-1|0)>>>12&16);f=e>>>(e>>>5&8)>>>(e>>>(e>>>5&8)>>>2&4);f=(e>>>5&8|((a&0-a)+-1|0)>>>12&16|e>>>(e>>>5&8)>>>2&4|f>>>1&2|f>>>(f>>>1&2)>>>1&1)+(f>>>(f>>>1&2)>>>(f>>>(f>>>1&2)>>>1&1))|0;e=c[25936+(f<<1<<2)+8>>2]|0;a=c[e+8>>2]|0;if((25936+(f<<1<<2)|0)==(a|0)){c[6474]=k&~(1<>2]=25936+(f<<1<<2);c[25936+(f<<1<<2)+8>>2]=a;a=k}c[e+4>>2]=n|3;c[e+n+4>>2]=(f<<3)-n|1;c[e+n+((f<<3)-n)>>2]=(f<<3)-n;if(m|0){d=c[6479]|0;if(!(a&1<<(m>>>3))){c[6474]=a|1<<(m>>>3);a=25936+(m>>>3<<1<<2)+8|0;b=25936+(m>>>3<<1<<2)|0}else{a=25936+(m>>>3<<1<<2)+8|0;b=c[25936+(m>>>3<<1<<2)+8>>2]|0}c[a>>2]=d;c[b+12>>2]=d;c[d+8>>2]=b;c[d+12>>2]=25936+(m>>>3<<1<<2)}c[6476]=(f<<3)-n;c[6479]=e+n;v=e+8|0;l=w;return v|0}j=c[6475]|0;if(j){b=((j&0-j)+-1|0)>>>(((j&0-j)+-1|0)>>>12&16);d=b>>>(b>>>5&8)>>>(b>>>(b>>>5&8)>>>2&4);d=c[26200+((b>>>5&8|((j&0-j)+-1|0)>>>12&16|b>>>(b>>>5&8)>>>2&4|d>>>1&2|d>>>(d>>>1&2)>>>1&1)+(d>>>(d>>>1&2)>>>(d>>>(d>>>1&2)>>>1&1))<<2)>>2]|0;b=(c[d+4>>2]&-8)-n|0;a=c[d+16+(((c[d+16>>2]|0)==0&1)<<2)>>2]|0;if(!a){i=b;h=d}else{do{h=(c[a+4>>2]&-8)-n|0;i=h>>>0>>0;b=i?h:b;d=i?a:d;a=c[a+16+(((c[a+16>>2]|0)==0&1)<<2)>>2]|0}while((a|0)!=0);i=b;h=d}g=h+n|0;if(h>>>0>>0){f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){b=h+20|0;a=c[b>>2]|0;if(!a){b=h+16|0;a=c[b>>2]|0;if(!a){b=0;break}}while(1){e=a+20|0;d=c[e>>2]|0;if(d|0){a=d;b=e;continue}e=a+16|0;d=c[e>>2]|0;if(!d)break;else{a=d;b=e}}c[b>>2]=0;b=a}else{b=c[h+8>>2]|0;c[b+12>>2]=a;c[a+8>>2]=b;b=a}while(0);do if(f|0){a=c[h+28>>2]|0;if((h|0)==(c[26200+(a<<2)>>2]|0)){c[26200+(a<<2)>>2]=b;if(!b){c[6475]=j&~(1<>2]|0)!=(h|0)&1)<<2)>>2]=b;if(!b)break}c[b+24>>2]=f;a=c[h+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[h+20>>2]|0;if(a|0){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);if(i>>>0<16){v=i+n|0;c[h+4>>2]=v|3;v=h+v+4|0;c[v>>2]=c[v>>2]|1}else{c[h+4>>2]=n|3;c[g+4>>2]=i|1;c[g+i>>2]=i;if(m|0){d=c[6479]|0;if(!(k&1<<(m>>>3))){c[6474]=k|1<<(m>>>3);a=25936+(m>>>3<<1<<2)+8|0;b=25936+(m>>>3<<1<<2)|0}else{a=25936+(m>>>3<<1<<2)+8|0;b=c[25936+(m>>>3<<1<<2)+8>>2]|0}c[a>>2]=d;c[b+12>>2]=d;c[d+8>>2]=b;c[d+12>>2]=25936+(m>>>3<<1<<2)}c[6476]=i;c[6479]=g}v=h+8|0;l=w;return v|0}}}}else if(a>>>0<=4294967231){n=a+11&-8;e=c[6475]|0;if(e){if((a+11|0)>>>8)if(n>>>0>16777215)j=31;else{j=(a+11|0)>>>8<<((((a+11|0)>>>8)+1048320|0)>>>16&8);j=14-((j+520192|0)>>>16&4|(((a+11|0)>>>8)+1048320|0)>>>16&8|((j<<((j+520192|0)>>>16&4))+245760|0)>>>16&2)+(j<<((j+520192|0)>>>16&4)<<(((j<<((j+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;j=n>>>(j+7|0)&1|j<<1}else j=0;a=c[26200+(j<<2)>>2]|0;a:do if(!a){d=0-n|0;a=0;b=0;u=57}else{h=0-n|0;g=0;i=n<<((j|0)==31?0:25-(j>>>1)|0);b=0;while(1){d=(c[a+4>>2]&-8)-n|0;if(d>>>0>>0)if(!d){d=0;f=a;b=a;u=61;break a}else b=a;else d=h;f=c[a+20>>2]|0;a=c[a+16+(i>>>31<<2)>>2]|0;g=(f|0)==0|(f|0)==(a|0)?g:f;f=(a|0)==0;if(f){a=g;u=57;break}else{h=d;i=i<<((f^1)&1)}}}while(0);if((u|0)==57){if((a|0)==0&(b|0)==0){a=2<>>(m>>>12&16)>>>(m>>>(m>>>12&16)>>>5&8);a=b>>>(b>>>2&4)>>>(b>>>(b>>>2&4)>>>1&2);a=c[26200+((m>>>(m>>>12&16)>>>5&8|m>>>12&16|b>>>2&4|b>>>(b>>>2&4)>>>1&2|a>>>1&1)+(a>>>(a>>>1&1))<<2)>>2]|0;b=0}if(!a){i=d;j=b}else{f=a;u=61}}if((u|0)==61)while(1){u=0;a=(c[f+4>>2]&-8)-n|0;m=a>>>0>>0;a=m?a:d;b=m?f:b;f=c[f+16+(((c[f+16>>2]|0)==0&1)<<2)>>2]|0;if(!f){i=a;j=b;break}else{d=a;u=61}}if((j|0)!=0?i>>>0<((c[6476]|0)-n|0)>>>0:0){h=j+n|0;if(j>>>0>=h>>>0){v=0;l=w;return v|0}g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){b=j+20|0;a=c[b>>2]|0;if(!a){b=j+16|0;a=c[b>>2]|0;if(!a){a=0;break}}while(1){f=a+20|0;d=c[f>>2]|0;if(d|0){a=d;b=f;continue}f=a+16|0;d=c[f>>2]|0;if(!d)break;else{a=d;b=f}}c[b>>2]=0}else{v=c[j+8>>2]|0;c[v+12>>2]=a;c[a+8>>2]=v}while(0);do if(g){b=c[j+28>>2]|0;if((j|0)==(c[26200+(b<<2)>>2]|0)){c[26200+(b<<2)>>2]=a;if(!a){c[6475]=e&~(1<>2]|0)!=(j|0)&1)<<2)>>2]=a;if(!a)break}c[a+24>>2]=g;b=c[j+16>>2]|0;if(b|0){c[a+16>>2]=b;c[b+24>>2]=a}b=c[j+20>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a}}while(0);do if(i>>>0>=16){c[j+4>>2]=n|3;c[h+4>>2]=i|1;c[h+i>>2]=i;d=i>>>3;if(i>>>0<256){a=c[6474]|0;if(!(a&1<>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=25936+(d<<1<<2);break}a=i>>>8;if(a)if(i>>>0>16777215)a=31;else{v=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);a=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(v+245760|0)>>>16&2)+(v<<((v+245760|0)>>>16&2)>>>15)|0;a=i>>>(a+7|0)&1|a<<1}else a=0;d=26200+(a<<2)|0;c[h+28>>2]=a;c[h+16+4>>2]=0;c[h+16>>2]=0;b=1<>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}b=i<<((a|0)==31?0:25-(a>>>1)|0);d=c[d>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(i|0)){u=97;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){u=96;break}else{b=b<<1;d=a}}if((u|0)==96){c[e>>2]=h;c[h+24>>2]=d;c[h+12>>2]=h;c[h+8>>2]=h;break}else if((u|0)==97){u=d+8|0;v=c[u>>2]|0;c[v+12>>2]=h;c[u>>2]=h;c[h+8>>2]=v;c[h+12>>2]=d;c[h+24>>2]=0;break}}else{v=i+n|0;c[j+4>>2]=v|3;v=j+v+4|0;c[v>>2]=c[v>>2]|1}while(0);v=j+8|0;l=w;return v|0}}}else n=-1;while(0);d=c[6476]|0;if(d>>>0>=n>>>0){b=d-n|0;a=c[6479]|0;if(b>>>0>15){v=a+n|0;c[6479]=v;c[6476]=b;c[v+4>>2]=b|1;c[v+b>>2]=b;c[a+4>>2]=n|3}else{c[6476]=0;c[6479]=0;c[a+4>>2]=d|3;c[a+d+4>>2]=c[a+d+4>>2]|1}v=a+8|0;l=w;return v|0}f=c[6477]|0;if(f>>>0>n>>>0){t=f-n|0;c[6477]=t;v=c[6480]|0;u=v+n|0;c[6480]=u;c[u+4>>2]=t|1;c[v+4>>2]=n|3;v=v+8|0;l=w;return v|0}if(!(c[6592]|0)){c[6594]=4096;c[6593]=4096;c[6595]=-1;c[6596]=-1;c[6597]=0;c[6585]=0;c[w>>2]=w&-16^1431655768;c[6592]=w&-16^1431655768;a=4096}else a=c[6594]|0;g=n+48|0;h=n+47|0;j=a+h|0;i=0-a|0;if((j&i)>>>0<=n>>>0){v=0;l=w;return v|0}a=c[6584]|0;if(a|0?(m=c[6582]|0,(m+(j&i)|0)>>>0<=m>>>0?1:(m+(j&i)|0)>>>0>a>>>0):0){v=0;l=w;return v|0}b:do if(!(c[6585]&4)){b=c[6480]|0;c:do if(b){d=26344;while(1){a=c[d>>2]|0;if(a>>>0<=b>>>0?(p=d+4|0,(a+(c[p>>2]|0)|0)>>>0>b>>>0):0)break;a=c[d+8>>2]|0;if(!a){u=118;break c}else d=a}if((j-f&i)>>>0<2147483647){a=uo(j-f&i|0)|0;if((a|0)==((c[d>>2]|0)+(c[p>>2]|0)|0))if((a|0)==(-1|0))a=j-f&i;else{h=a;g=j-f&i;u=135;break b}else{e=a;d=j-f&i;u=126}}else a=0}else u=118;while(0);do if((u|0)==118){b=uo(0)|0;if((b|0)!=(-1|0)?(q=c[6593]|0,q=((q+-1&b|0)==0?0:(q+-1+b&0-q)-b|0)+(j&i)|0,o=c[6582]|0,q>>>0>n>>>0&q>>>0<2147483647):0){p=c[6584]|0;if(p|0?(q+o|0)>>>0<=o>>>0|(q+o|0)>>>0>p>>>0:0){a=0;break}a=uo(q|0)|0;if((a|0)==(b|0)){h=b;g=q;u=135;break b}else{e=a;d=q;u=126}}else a=0}while(0);do if((u|0)==126){b=0-d|0;if(!(g>>>0>d>>>0&(d>>>0<2147483647&(e|0)!=(-1|0))))if((e|0)==(-1|0)){a=0;break}else{h=e;g=d;u=135;break b}a=c[6594]|0;a=h-d+a&0-a;if(a>>>0>=2147483647){h=e;g=d;u=135;break b}if((uo(a|0)|0)==(-1|0)){uo(b|0)|0;a=0;break}else{h=e;g=a+d|0;u=135;break b}}while(0);c[6585]=c[6585]|4;u=133}else{a=0;u=133}while(0);if(((u|0)==133?(j&i)>>>0<2147483647:0)?(r=uo(j&i|0)|0,s=uo(0)|0,t=(s-r|0)>>>0>(n+40|0)>>>0,!((r|0)==(-1|0)|t^1|r>>>0>>0&((r|0)!=(-1|0)&(s|0)!=(-1|0))^1)):0){h=r;g=t?s-r|0:a;u=135}if((u|0)==135){a=(c[6582]|0)+g|0;c[6582]=a;if(a>>>0>(c[6583]|0)>>>0)c[6583]=a;j=c[6480]|0;do if(j){f=26344;while(1){a=c[f>>2]|0;e=f+4|0;b=c[e>>2]|0;if((h|0)==(a+b|0)){u=145;break}d=c[f+8>>2]|0;if(!d)break;else f=d}if(((u|0)==145?(c[f+12>>2]&8|0)==0:0)?j>>>0>>0&j>>>0>=a>>>0:0){c[e>>2]=b+g;u=(j+8&7|0)==0?0:0-(j+8)&7;v=(c[6477]|0)+(g-u)|0;c[6480]=j+u;c[6477]=v;c[j+u+4>>2]=v|1;c[j+u+v+4>>2]=40;c[6481]=c[6596];break}if(h>>>0<(c[6478]|0)>>>0)c[6478]=h;d=h+g|0;b=26344;while(1){if((c[b>>2]|0)==(d|0)){u=153;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((u|0)==153?(c[b+12>>2]&8|0)==0:0){c[b>>2]=h;m=b+4|0;c[m>>2]=(c[m>>2]|0)+g;m=h+8|0;m=h+((m&7|0)==0?0:0-m&7)|0;a=d+((d+8&7|0)==0?0:0-(d+8)&7)|0;k=m+n|0;i=a-m-n|0;c[m+4>>2]=n|3;do if((a|0)!=(j|0)){if((a|0)==(c[6479]|0)){v=(c[6476]|0)+i|0;c[6476]=v;c[6479]=k;c[k+4>>2]=v|1;c[k+v>>2]=v;break}h=c[a+4>>2]|0;if((h&3|0)==1){d:do if(h>>>0<256){b=c[a+8>>2]|0;d=c[a+12>>2]|0;if((d|0)==(b|0)){c[6474]=c[6474]&~(1<<(h>>>3));break}else{c[b+12>>2]=d;c[d+8>>2]=b;break}}else{g=c[a+24>>2]|0;b=c[a+12>>2]|0;do if((b|0)==(a|0)){b=c[a+16+4>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b){b=0;break}else f=a+16|0}else f=a+16+4|0;while(1){e=b+20|0;d=c[e>>2]|0;if(d|0){b=d;f=e;continue}e=b+16|0;d=c[e>>2]|0;if(!d)break;else{b=d;f=e}}c[f>>2]=0}else{v=c[a+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);if(!g)break;d=c[a+28>>2]|0;do if((a|0)!=(c[26200+(d<<2)>>2]|0)){c[g+16+(((c[g+16>>2]|0)!=(a|0)&1)<<2)>>2]=b;if(!b)break d}else{c[26200+(d<<2)>>2]=b;if(b|0)break;c[6475]=c[6475]&~(1<>2]=g;d=c[a+16>>2]|0;if(d|0){c[b+16>>2]=d;c[d+24>>2]=b}d=c[a+16+4>>2]|0;if(!d)break;c[b+20>>2]=d;c[d+24>>2]=b}while(0);a=a+(h&-8)|0;f=(h&-8)+i|0}else f=i;d=a+4|0;c[d>>2]=c[d>>2]&-2;c[k+4>>2]=f|1;c[k+f>>2]=f;d=f>>>3;if(f>>>0<256){a=c[6474]|0;if(!(a&1<>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;c[k+12>>2]=25936+(d<<1<<2);break}a=f>>>8;do if(!a)b=0;else{if(f>>>0>16777215){b=31;break}b=a<<((a+1048320|0)>>>16&8)<<(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4);b=14-(((a<<((a+1048320|0)>>>16&8))+520192|0)>>>16&4|(a+1048320|0)>>>16&8|(b+245760|0)>>>16&2)+(b<<((b+245760|0)>>>16&2)>>>15)|0;b=f>>>(b+7|0)&1|b<<1}while(0);e=26200+(b<<2)|0;c[k+28>>2]=b;c[k+16+4>>2]=0;c[k+16>>2]=0;a=c[6475]|0;d=1<>2]=k;c[k+24>>2]=e;c[k+12>>2]=k;c[k+8>>2]=k;break}b=f<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f|0)){u=194;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){u=193;break}else{b=b<<1;d=a}}if((u|0)==193){c[e>>2]=k;c[k+24>>2]=d;c[k+12>>2]=k;c[k+8>>2]=k;break}else if((u|0)==194){u=d+8|0;v=c[u>>2]|0;c[v+12>>2]=k;c[u>>2]=k;c[k+8>>2]=v;c[k+12>>2]=d;c[k+24>>2]=0;break}}else{v=(c[6477]|0)+i|0;c[6477]=v;c[6480]=k;c[k+4>>2]=v|1}while(0);v=m+8|0;l=w;return v|0}b=26344;while(1){a=c[b>>2]|0;if(a>>>0<=j>>>0?(v=a+(c[b+4>>2]|0)|0,v>>>0>j>>>0):0)break;b=c[b+8>>2]|0}f=v+-47+((v+-47+8&7|0)==0?0:0-(v+-47+8)&7)|0;f=f>>>0<(j+16|0)>>>0?j:f;a=h+8|0;a=(a&7|0)==0?0:0-a&7;u=h+a|0;a=g+-40-a|0;c[6480]=u;c[6477]=a;c[u+4>>2]=a|1;c[u+a+4>>2]=40;c[6481]=c[6596];c[f+4>>2]=27;c[f+8>>2]=c[6586];c[f+8+4>>2]=c[6587];c[f+8+8>>2]=c[6588];c[f+8+12>>2]=c[6589];c[6586]=h;c[6587]=g;c[6589]=0;c[6588]=f+8;a=f+24|0;do{u=a;a=a+4|0;c[a>>2]=7}while((u+8|0)>>>0>>0);if((f|0)!=(j|0)){c[f+4>>2]=c[f+4>>2]&-2;c[j+4>>2]=f-j|1;c[f>>2]=f-j;if((f-j|0)>>>0<256){d=25936+((f-j|0)>>>3<<1<<2)|0;a=c[6474]|0;if(!(a&1<<((f-j|0)>>>3))){c[6474]=a|1<<((f-j|0)>>>3);a=d+8|0;b=d}else{a=d+8|0;b=c[d+8>>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;c[j+12>>2]=d;break}if((f-j|0)>>>8)if((f-j|0)>>>0>16777215)b=31;else{b=(f-j|0)>>>8<<((((f-j|0)>>>8)+1048320|0)>>>16&8);b=14-((b+520192|0)>>>16&4|(((f-j|0)>>>8)+1048320|0)>>>16&8|((b<<((b+520192|0)>>>16&4))+245760|0)>>>16&2)+(b<<((b+520192|0)>>>16&4)<<(((b<<((b+520192|0)>>>16&4))+245760|0)>>>16&2)>>>15)|0;b=(f-j|0)>>>(b+7|0)&1|b<<1}else b=0;e=26200+(b<<2)|0;c[j+28>>2]=b;c[j+20>>2]=0;c[j+16>>2]=0;a=c[6475]|0;d=1<>2]=j;c[j+24>>2]=e;c[j+12>>2]=j;c[j+8>>2]=j;break}b=f-j<<((b|0)==31?0:25-(b>>>1)|0);d=c[e>>2]|0;while(1){if((c[d+4>>2]&-8|0)==(f-j|0)){u=216;break}e=d+16+(b>>>31<<2)|0;a=c[e>>2]|0;if(!a){u=215;break}else{b=b<<1;d=a}}if((u|0)==215){c[e>>2]=j;c[j+24>>2]=d;c[j+12>>2]=j;c[j+8>>2]=j;break}else if((u|0)==216){u=d+8|0;v=c[u>>2]|0;c[v+12>>2]=j;c[u>>2]=j;c[j+8>>2]=v;c[j+12>>2]=d;c[j+24>>2]=0;break}}}else{v=c[6478]|0;if((v|0)==0|h>>>0>>0)c[6478]=h;c[6586]=h;c[6587]=g;c[6589]=0;c[6483]=c[6592];c[6482]=-1;a=0;do{v=25936+(a<<1<<2)|0;c[v+12>>2]=v;c[v+8>>2]=v;a=a+1|0}while((a|0)!=32);v=h+8|0;v=(v&7|0)==0?0:0-v&7;u=h+v|0;v=g+-40-v|0;c[6480]=u;c[6477]=v;c[u+4>>2]=v|1;c[u+v+4>>2]=40;c[6481]=c[6596]}while(0);a=c[6477]|0;if(a>>>0>n>>>0){t=a-n|0;c[6477]=t;v=c[6480]|0;u=v+n|0;c[6480]=u;c[u+4>>2]=t|1;c[v+4>>2]=n|3;v=v+8|0;l=w;return v|0}}c[6614]=12;v=0;l=w;return v|0}function jc(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0.0,o=0,p=0.0,q=0,r=0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0,y=0.0,z=0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0;L=l;l=l+176|0;if((e|0)<1){f=c[b+12>>2]|0;if(f|0){if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+12>>2]=0}a[b+16>>0]=1;c[b+12>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;f=c[b+32>>2]|0;if(f|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;f=c[b+52>>2]|0;if(f|0){if(a[b+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+52>>2]=0}a[b+56>>0]=1;c[b+52>>2]=0;c[b+44>>2]=0;c[b+48>>2]=0;l=L;return}c[L+32>>2]=0;c[L+36>>2]=0;c[L+40>>2]=0;c[L+44>>2]=256;c[L+48>>2]=0;c[L+52>>2]=0;c[L+56>>2]=0;c[L+60>>2]=256;c[L+64>>2]=0;c[L+68>>2]=0;c[L+72>>2]=0;c[L+76>>2]=256;a[L+96>>0]=1;c[L+92>>2]=0;c[L+84>>2]=0;c[L+88>>2]=0;m=0;o=-246811958;t=-246811958;x=-246811958;r=1900671690;v=1900671690;z=1900671690;q=d;while(1){E=+g[q>>2];k=+g[q+4>>2];n=+g[q+8>>2];I=E<(c[j>>2]=r,+g[j>>2]);f=(g[j>>2]=E,c[j>>2]|0);r=I?f:r;I=k<(c[j>>2]=v,+g[j>>2]);h=(g[j>>2]=k,c[j>>2]|0);v=I?h:v;I=n<(c[j>>2]=z,+g[j>>2]);i=(g[j>>2]=n,c[j>>2]|0);z=I?i:z;o=(c[j>>2]=o,+g[j>>2])>2]=t,+g[j>>2])>2]=x,+g[j>>2])>2]=o,+g[j>>2]);A=(c[j>>2]=r,+g[j>>2]);y=(c[j>>2]=t,+g[j>>2]);w=(c[j>>2]=v,+g[j>>2]);u=(c[j>>2]=x,+g[j>>2]);s=(c[j>>2]=z,+g[j>>2]);h=B-A>2]=h;f=B-A>>0)%3|0;c[L+104>>2]=f;I=(h^3)-f|0;c[L+108>>2]=I;if(((I+1|0)%3|0|0)==(h|0)){k=(B-A)*9.788566967472434e-05;n=(y-w)*9.788566967472434e-05;p=(u-s)*9.788566967472434e-05}else{k=-((B-A)*9.788566967472434e-05);n=-((y-w)*9.788566967472434e-05);p=-((u-s)*9.788566967472434e-05)}g[L>>2]=k;g[L+4>>2]=n;g[L+8>>2]=p;g[L+12>>2]=0.0;E=k!=0.0?1.0/k:k;D=n!=0.0?1.0/n:n;C=p!=0.0?1.0/p:p;g[L+16>>2]=(B+A)*.5;g[L+20>>2]=(y+w)*.5;g[L+24>>2]=(u+s)*.5;g[L+28>>2]=0.0;t=L+144+16|0;a[t>>0]=1;r=L+144+12|0;c[r>>2]=0;c[L+144+4>>2]=0;c[L+144+8>>2]=0;c[6472]=(c[6472]|0)+1;f=ic((e<<4|3)+16|0)|0;if(!f)m=0;else{c[(f+4+15&-16)+-4>>2]=f;m=f+4+15&-16}h=c[L+144+4>>2]|0;i=c[r>>2]|0;if((h|0)<=0){if(i|0)K=26}else{f=0;do{K=m+(f<<4)|0;I=i+(f<<4)|0;c[K>>2]=c[I>>2];c[K+4>>2]=c[I+4>>2];c[K+8>>2]=c[I+8>>2];c[K+12>>2]=c[I+12>>2];f=f+1|0}while((f|0)!=(h|0));K=26}if((K|0)==26){if(a[t>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[r>>2]=0}a[t>>0]=1;c[r>>2]=m;c[L+144+8>>2]=e;c[m>>2]=c[L+128>>2];c[m+4>>2]=c[L+128+4>>2];c[m+8>>2]=c[L+128+8>>2];c[m+12>>2]=c[L+128+12>>2];if((e|0)!=1){f=1;do{I=(c[r>>2]|0)+(f<<4)|0;c[I>>2]=c[L+128>>2];c[I+4>>2]=c[L+128+4>>2];c[I+8>>2]=c[L+128+8>>2];c[I+12>>2]=c[L+128+12>>2];f=f+1|0}while((f|0)!=(e|0))}c[L+144+4>>2]=e;i=L+128+(c[L+108>>2]<<2)|0;h=c[r>>2]|0;m=L+128+(c[L+112>>2]<<2)|0;o=L+128+(c[L+104>>2]<<2)|0;k=+g[L+16>>2];n=+g[L+20>>2];p=+g[L+24>>2];q=0;f=d;while(1){A=D*(+g[f+4>>2]-n);B=C*(+g[f+8>>2]-p);g[L+128>>2]=E*(+g[f>>2]-k);g[L+128+4>>2]=A;g[L+128+8>>2]=B;g[L+128+12>>2]=0.0;c[h+(q<<4)>>2]=~~+g[i>>2];c[h+(q<<4)+4>>2]=~~+g[m>>2];c[h+(q<<4)+8>>2]=~~+g[o>>2];c[h+(q<<4)+12>>2]=q;q=q+1|0;if((q|0)==(e|0))break;else f=f+16|0}if((e|0)>1)Qg(L+144|0,0,e+-1|0);c[L+36>>2]=c[L+32>>2];c[L+40>>2]=0;c[L+44>>2]=e;f=c[L+84>>2]|0;if((f|0)<(e|0)){if((c[L+88>>2]|0)<(e|0)){if(!e){i=f;m=0}else{c[6472]=(c[6472]|0)+1;h=ic((e<<2|3)+16|0)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}i=c[L+84>>2]|0;m=h}if((i|0)>0){h=0;do{c[m+(h<<2)>>2]=c[(c[L+92>>2]|0)+(h<<2)>>2];h=h+1|0}while((h|0)!=(i|0))}h=c[L+92>>2]|0;if(h|0){if(a[L+96>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[L+92>>2]=0}a[L+96>>0]=1;c[L+92>>2]=m;c[L+88>>2]=e}do{c[(c[L+92>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)!=(e|0))}c[L+84>>2]=e;o=0;do{f=c[L+40>>2]|0;if(!f){f=c[L+36>>2]|0;if(!f){c[6472]=(c[6472]|0)+1;f=ic(31)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}h=c[L+44>>2]|0;c[f+4>>2]=h;i=f+8|0;c[i>>2]=0;c[6472]=(c[6472]|0)+1;h=ic((h*112|3)+16|0)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}c[f>>2]=h;c[i>>2]=c[L+32>>2];c[L+32>>2]=f}else c[L+36>>2]=c[f+8>>2];m=c[f+4>>2]|0;f=c[f>>2]|0;if((m|0)>0){h=0;i=f;do{h=h+1|0;I=i;i=i+112|0;c[I>>2]=(h|0)<(m|0)?i:0}while((h|0)!=(m|0))}}c[L+40>>2]=c[f>>2];I=f+104|0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;c[f+16>>2]=0;c[I>>2]=-1;c[f+8>>2]=0;H=f+88|0;G=(c[r>>2]|0)+(o<<4)|0;c[H>>2]=c[G>>2];c[H+4>>2]=c[G+4>>2];c[H+8>>2]=c[G+8>>2];c[H+12>>2]=c[G+12>>2];c[I>>2]=-1;c[(c[L+92>>2]|0)+(o<<2)>>2]=f;o=o+1|0}while((o|0)<(e|0));f=c[r>>2]|0;if(f|0){if(a[t>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[r>>2]=0}a[t>>0]=1;c[r>>2]=0;c[L+144+4>>2]=0;c[L+144+8>>2]=0;c[L+52>>2]=c[L+48>>2];c[L+56>>2]=0;c[L+60>>2]=e*6;c[L+116>>2]=0;c[L+120>>2]=0;c[L+100>>2]=-3;c[L+128>>2]=0;c[L+128+4>>2]=0;c[L+128+8>>2]=0;c[L+128+12>>2]=0;cc(L,0,e,L+128|0);c[L+124>>2]=c[L+128>>2];f=c[r>>2]|0;if(f|0){if(a[t>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[r>>2]=0}f=c[b+4>>2]|0;if((f|0)<0){if((c[b+8>>2]|0)<0){h=c[b+12>>2]|0;if(h|0){if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+12>>2]=0}a[b+16>>0]=1;c[b+12>>2]=0;c[b+8>>2]=0}do{I=(c[b+12>>2]|0)+(f<<4)|0;c[I>>2]=c[L+144>>2];c[I+4>>2]=c[L+144+4>>2];c[I+8>>2]=c[L+144+8>>2];c[I+12>>2]=c[L+144+12>>2];f=f+1|0}while((f|0)!=0)}c[b+4>>2]=0;c[L+144>>2]=0;c[L+144+4>>2]=0;c[L+144+8>>2]=0;f=c[b+24>>2]|0;if((f|0)<0){if((c[b+28>>2]|0)<0){h=c[b+32>>2]|0;if(h|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+28>>2]=0}do{I=(c[b+32>>2]|0)+(f*12|0)|0;c[I>>2]=c[L+144>>2];c[I+4>>2]=c[L+144+4>>2];c[I+8>>2]=c[L+144+8>>2];f=f+1|0}while((f|0)!=0)}c[b+24>>2]=0;h=c[b+44>>2]|0;if((h|0)<0){f=c[b+52>>2]|0;if((c[b+48>>2]|0)<0){if(f|0?a[b+56>>0]|0:0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}a[b+56>>0]=1;c[b+52>>2]=0;c[b+48>>2]=0;f=0}Nk(f+(h<<2)|0,0,O(h,-4)|0)|0}c[b+44>>2]=0;f=c[L+124>>2]|0;if((c[f+104>>2]|0)<0){c[f+104>>2]=0;c[6472]=(c[6472]|0)+1;v=ic(23)|0;q=v+4+15&-16;c[q+-4>>2]=v;c[(v+4+15&-16)>>2]=f;r=q;I=0;t=1;v=v+4+15&-16;i=1;while(1){if((c[f+100>>2]|0)>-1){g[L+144+(c[L+108>>2]<<2)>>2]=+(c[f+88>>2]|0);g[L+144+(c[L+112>>2]<<2)>>2]=+(c[f+92>>2]|0);k=+(c[f+96>>2]|0)}else{H=f+24|0;G=f+32|0;E=+Pm(c[H>>2]|0,c[H+4>>2]|0,c[G>>2]|0,c[G+4>>2]|0);G=f+72|0;H=f+80|0;k=+Pm(c[G>>2]|0,c[G+4>>2]|0,c[H>>2]|0,c[H+4>>2]|0);g[L+144+(c[L+108>>2]<<2)>>2]=E/k;H=f+40|0;G=f+48|0;E=+Pm(c[H>>2]|0,c[H+4>>2]|0,c[G>>2]|0,c[G+4>>2]|0)/k;g[L+144+(c[L+112>>2]<<2)>>2]=E;G=f+56|0;H=f+64|0;k=+Pm(c[G>>2]|0,c[G+4>>2]|0,c[H>>2]|0,c[H+4>>2]|0)/k}g[L+144+(c[L+104>>2]<<2)>>2]=k;k=+g[L+144>>2]*+g[L>>2]+ +g[L+16>>2];p=+g[L+144+4>>2]*+g[L+4>>2]+ +g[L+20>>2];n=+g[L+144+8>>2]*+g[L+8>>2]+ +g[L+24>>2];h=c[b+4>>2]|0;if((h|0)==(c[b+8>>2]|0)?(J=h|0?h<<1:1,(h|0)<(J|0)):0){if(!J)m=0;else{c[6472]=(c[6472]|0)+1;h=ic((J<<4|3)+16|0)|0;if(!h)m=0;else{c[(h+4+15&-16)+-4>>2]=h;m=h+4+15&-16}h=c[b+4>>2]|0}if((h|0)>0){o=0;do{H=m+(o<<4)|0;G=(c[b+12>>2]|0)+(o<<4)|0;c[H>>2]=c[G>>2];c[H+4>>2]=c[G+4>>2];c[H+8>>2]=c[G+8>>2];c[H+12>>2]=c[G+12>>2];o=o+1|0}while((o|0)!=(h|0))}h=c[b+12>>2]|0;if(h|0){if(a[b+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+12>>2]=0}a[b+16>>0]=1;c[b+12>>2]=m;c[b+8>>2]=J;h=c[b+4>>2]|0}H=c[b+12>>2]|0;g[H+(h<<4)>>2]=k;g[H+(h<<4)+4>>2]=p;g[H+(h<<4)+8>>2]=n;g[H+(h<<4)+12>>2]=0.0;c[b+4>>2]=(c[b+4>>2]|0)+1;H=c[f+8>>2]|0;if(!H){z=r;o=q;m=t;x=v}else{o=q;x=r;G=H;h=-1;m=t;e=v;F=-1;while(1){d=G+20|0;f=c[d>>2]|0;if((f|0)<0){z=c[b+24>>2]|0;c[L+144>>2]=0;c[L+144+4>>2]=0;c[L+144+8>>2]=0;do if((z|0)==(c[b+28>>2]|0)){t=z|0?z<<1:1;if((z|0)>=(t|0)){f=z;break}if(!t){q=z;r=0}else{c[6472]=(c[6472]|0)+1;f=ic((t*12|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}q=c[b+24>>2]|0;r=f}if((q|0)>0){f=0;do{v=r+(f*12|0)|0;M=(c[b+32>>2]|0)+(f*12|0)|0;c[v>>2]=c[M>>2];c[v+4>>2]=c[M+4>>2];c[v+8>>2]=c[M+8>>2];f=f+1|0}while((f|0)!=(q|0))}f=c[b+32>>2]|0;if(f|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=r;c[b+28>>2]=t;f=c[b+24>>2]|0}else f=z;while(0);f=(c[b+32>>2]|0)+(f*12|0)|0;c[f>>2]=c[L+144>>2];c[f+4>>2]=c[L+144+4>>2];c[f+8>>2]=c[L+144+8>>2];f=(c[b+24>>2]|0)+1|0;c[b+24>>2]=f;c[L+144>>2]=0;c[L+144+4>>2]=0;c[L+144+8>>2]=0;do if((f|0)==(c[b+28>>2]|0)){t=f|0?f<<1:1;if((f|0)>=(t|0))break;if(!t)q=0;else{c[6472]=(c[6472]|0)+1;f=ic((t*12|3)+16|0)|0;if(!f)q=0;else{c[(f+4+15&-16)+-4>>2]=f;q=f+4+15&-16}f=c[b+24>>2]|0}if((f|0)>0){r=0;do{M=q+(r*12|0)|0;v=(c[b+32>>2]|0)+(r*12|0)|0;c[M>>2]=c[v>>2];c[M+4>>2]=c[v+4>>2];c[M+8>>2]=c[v+8>>2];r=r+1|0}while((r|0)!=(f|0))}f=c[b+32>>2]|0;if(f|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=q;c[b+28>>2]=t;f=c[b+24>>2]|0}while(0);v=(c[b+32>>2]|0)+(f*12|0)|0;c[v>>2]=c[L+144>>2];c[v+4>>2]=c[L+144+4>>2];c[v+8>>2]=c[L+144+8>>2];c[b+24>>2]=(c[b+24>>2]|0)+1;v=c[b+32>>2]|0;c[d>>2]=z;c[(c[G+8>>2]|0)+20>>2]=z+1;c[v+(z*12|0)+4>>2]=1;c[v+((z+1|0)*12|0)+4>>2]=-1;t=c[G+12>>2]|0;f=c[t+104>>2]|0;if((f|0)<0){c[t+104>>2]=i;do if((i|0)==(m|0)){r=m|0?m<<1:1;if((m|0)>=(r|0)){f=x;q=e;break}do if(!r)q=0;else{c[6472]=(c[6472]|0)+1;f=ic((r<<2|3)+16|0)|0;if(!f){q=0;break}c[(f+4+15&-16)+-4>>2]=f;q=f+4+15&-16}while(0);if((m|0)>0){f=0;do{c[q+(f<<2)>>2]=c[e+(f<<2)>>2];f=f+1|0}while((f|0)!=(m|0));if(!o){f=q;o=q;m=r;break}}else if((e|0)==0|(o|0)==0){f=q;o=q;m=r;break}c[6473]=(c[6473]|0)+1;nd(c[o+-4>>2]|0);f=q;o=q;m=r}else{f=x;q=e}while(0);c[q+(i<<2)>>2]=t;r=f;f=i;i=i+1|0}else{r=x;q=e}c[v+(z*12|0)+8>>2]=f;c[v+((z+1|0)*12|0)+8>>2]=I;f=c[d>>2]|0}else{r=x;q=e}if((F|0)>-1)c[(c[b+32>>2]|0)+(f*12|0)>>2]=F-f;else h=f;G=c[G>>2]|0;if((G|0)==(H|0))break;else{x=r;e=q;F=f}}c[(c[b+32>>2]|0)+(h*12|0)>>2]=f-h;z=r;x=q}h=I+1|0;if((h|0)>=(i|0))break;f=c[x+(h<<2)>>2]|0;r=z;q=o;I=h;t=m;v=x}if((I|0)>-1){v=0;while(1){r=c[(c[x+(v<<2)>>2]|0)+8>>2]|0;if(r|0){t=r;do{q=t+20|0;f=c[q>>2]|0;if((f|0)>-1){h=c[b+44>>2]|0;do if((h|0)==(c[b+48>>2]|0)){o=h|0?h<<1:1;if((h|0)>=(o|0))break;if(!o){f=h;h=0}else{c[6472]=(c[6472]|0)+1;f=ic((o<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[b+44>>2]|0}m=c[b+52>>2]|0;if((f|0)<=0){if(m)K=172}else{i=0;do{c[h+(i<<2)>>2]=c[m+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0));K=172}if((K|0)==172){K=0;if(a[b+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[b+52>>2]=0;f=c[b+44>>2]|0}a[b+56>>0]=1;c[b+52>>2]=h;c[b+48>>2]=o;h=f;f=c[q>>2]|0}while(0);c[(c[b+52>>2]|0)+(h<<2)>>2]=f;c[b+44>>2]=(c[b+44>>2]|0)+1;f=t;do{c[f+20>>2]=-1;f=c[(c[f+8>>2]|0)+4>>2]|0}while((f|0)!=(t|0))}t=c[t>>2]|0}while((t|0)!=(r|0))}if((v|0)==(I|0))break;else v=v+1|0}}if(!((x|0)==0|(z|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[z+-4>>2]|0)}}Ci(L);l=L;return}function kc(b,d,e,f,h,i,j,k,m){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;m=m|0;var n=0,o=0,p=0,q=0.0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;X=l;l=l+256|0;c[b+188>>2]=-1;bj(13038);c[b+184>>2]=0;if((e|0)>0){m=0;do{c[(c[d+(m<<2)>>2]|0)+212>>2]=-1;m=m+1|0}while((m|0)!=(e|0))}m=c[b+12>>2]|0;if((m|0)>(e|0))o=b+8|0;else{if((e+1|0)!=0?(c[6472]=(c[6472]|0)+1,n=ic(((e+1|0)*244|3)+16|0)|0,(n|0)!=0):0){c[(n+4+15&-16)+-4>>2]=n;o=n+4+15&-16}else o=0;m=c[b+8>>2]|0;if((m|0)>0){n=0;do{U=o+(n*244|0)|0;V=c[b+16>>2]|0;T=V+(n*244|0)|0;c[U>>2]=c[T>>2];c[U+4>>2]=c[T+4>>2];c[U+8>>2]=c[T+8>>2];c[U+12>>2]=c[T+12>>2];U=o+(n*244|0)+16|0;T=V+(n*244|0)+16|0;c[U>>2]=c[T>>2];c[U+4>>2]=c[T+4>>2];c[U+8>>2]=c[T+8>>2];c[U+12>>2]=c[T+12>>2];U=o+(n*244|0)+32|0;T=V+(n*244|0)+32|0;c[U>>2]=c[T>>2];c[U+4>>2]=c[T+4>>2];c[U+8>>2]=c[T+8>>2];c[U+12>>2]=c[T+12>>2];U=o+(n*244|0)+48|0;T=V+(n*244|0)+48|0;c[U>>2]=c[T>>2];c[U+4>>2]=c[T+4>>2];c[U+8>>2]=c[T+8>>2];c[U+12>>2]=c[T+12>>2];_h(o+(n*244|0)+64|0,V+(n*244|0)+64|0,180)|0;n=n+1|0}while((n|0)!=(m|0))}m=c[b+16>>2]|0;if(m|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=o;c[b+12>>2]=e+1;m=e+1|0;o=b+8|0}Nk(X|0,0,244)|0;n=c[o>>2]|0;if((n|0)<0){if((m|0)<0){m=c[b+16>>2]|0;if(m|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=0;c[b+12>>2]=0}m=n;do{V=c[b+16>>2]|0;U=V+(m*244|0)|0;c[U>>2]=c[X>>2];c[U+4>>2]=c[X+4>>2];c[U+8>>2]=c[X+8>>2];c[U+12>>2]=c[X+12>>2];U=V+(m*244|0)+16|0;c[U>>2]=c[X+16>>2];c[U+4>>2]=c[X+16+4>>2];c[U+8>>2]=c[X+16+8>>2];c[U+12>>2]=c[X+16+12>>2];U=V+(m*244|0)+32|0;c[U>>2]=c[X+32>>2];c[U+4>>2]=c[X+32+4>>2];c[U+8>>2]=c[X+32+8>>2];c[U+12>>2]=c[X+32+12>>2];U=V+(m*244|0)+48|0;c[U>>2]=c[X+48>>2];c[U+4>>2]=c[X+48+4>>2];c[U+8>>2]=c[X+48+8>>2];c[U+12>>2]=c[X+48+12>>2];_h(V+(m*244|0)+64|0,X+64|0,180)|0;m=m+1|0}while((m|0)!=0)}c[o>>2]=0;if((e|0)>0){o=0;do{m=d+(o<<2)|0;n=Gj(b,c[m>>2]|0,+g[k+12>>2])|0;m=c[m>>2]|0;if((!((m|0)==0?1:(c[m+236>>2]&2|0)==0)?+g[m+344>>2]!=0.0:0)?(p=c[b+16>>2]|0,c[m+504>>2]&2|0):0){q=+g[k+76>>2];L=1.0/+g[m+396>>2];N=1.0/+g[m+400>>2];s=1.0/+g[m+404>>2];F=+g[m+4>>2];G=+g[m+8>>2];H=+g[m+12>>2];I=+g[m+20>>2];J=+g[m+24>>2];K=+g[m+28>>2];M=+g[m+36>>2];O=+g[m+40>>2];u=+g[m+44>>2];w=+g[m+328>>2];x=+g[m+332>>2];t=+g[m+336>>2];z=(L*F*F+N*G*G+s*H*H)*w+(L*F*I+N*G*J+s*H*K)*x+(L*F*M+N*G*O+s*H*u)*t;y=(L*I*F+N*J*G+s*K*H)*w+(L*I*I+N*J*J+s*K*K)*x+(L*I*M+N*J*O+s*K*u)*t;u=(L*M*F+N*O*G+s*u*H)*w+(L*M*I+N*O*J+s*u*K)*x+(L*M*M+N*O*O+s*u*u)*t;s=(x*u-t*y)*(x*u-t*y)+(t*z-w*u)*(t*z-w*u)+(w*y-x*z)*(w*y-x*z);if(s>q*q){q=1.0/+C(+s)*q;v=(x*u-t*y)*q;s=q*(t*z-w*u);q=q*(w*y-x*z)}else{v=x*u-t*y;s=t*z-w*u;q=w*y-x*z}M=+g[k+12>>2];N=(v*+g[m+268>>2]+s*+g[m+284>>2]+q*+g[m+300>>2])*M;O=M*(v*+g[m+272>>2]+s*+g[m+288>>2]+q*+g[m+304>>2]);g[p+(n*244|0)+224>>2]=+g[p+(n*244|0)+224>>2]-(v*+g[m+264>>2]+s*+g[m+280>>2]+q*+g[m+296>>2])*M;g[p+(n*244|0)+228>>2]=+g[p+(n*244|0)+228>>2]-N;g[p+(n*244|0)+232>>2]=+g[p+(n*244|0)+232>>2]-O}o=o+1|0}while((o|0)!=(e|0))}if((j|0)>0){m=0;do{V=c[i+(m<<2)>>2]|0;Ab[c[(c[V>>2]|0)+8>>2]&511](V);g[V+36>>2]=0.0;m=m+1|0}while((m|0)<(j|0))}m=c[b+168>>2]|0;if((m|0)<(j|0)?(c[b+172>>2]|0)<(j|0):0){if(!j)n=0;else{c[6472]=(c[6472]|0)+1;m=ic((j<<3|3)+16|0)|0;if(!m)n=0;else{c[(m+4+15&-16)+-4>>2]=m;n=m+4+15&-16}m=c[b+168>>2]|0}if((m|0)>0){o=0;do{T=(c[b+176>>2]|0)+(o<<3)|0;U=c[T+4>>2]|0;V=n+(o<<3)|0;c[V>>2]=c[T>>2];c[V+4>>2]=U;o=o+1|0}while((o|0)!=(m|0))}m=c[b+176>>2]|0;if(m|0){if(a[b+180>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[b+176>>2]=0}a[b+180>>0]=1;c[b+176>>2]=n;c[b+172>>2]=j}c[b+168>>2]=j;if((j|0)>0){r=0;m=0;do{d=c[b+176>>2]|0;e=d+(r<<3)|0;p=i+(r<<2)|0;n=c[p>>2]|0;o=c[n+44>>2]|0;if(o){n=o+64|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(n|0));n=c[p>>2]|0}if(!(a[n+20>>0]|0)){c[e>>2]=0;c[d+(r<<3)+4>>2]=0;n=0}else{Gb[c[(c[n>>2]|0)+16>>2]&127](n,e);n=c[e>>2]|0}m=n+m|0;r=r+1|0}while((r|0)<(j|0));p=m}else p=0;m=c[b+48>>2]|0;if((m|0)<(p|0)?(c[b+52>>2]|0)<(p|0):0){if(!p)n=0;else{c[6472]=(c[6472]|0)+1;m=ic((p*152|3)+16|0)|0;if(!m)n=0;else{c[(m+4+15&-16)+-4>>2]=m;n=m+4+15&-16}m=c[b+48>>2]|0}if((m|0)>0){o=0;do{_h(n+(o*152|0)|0,(c[b+56>>2]|0)+(o*152|0)|0,152)|0;o=o+1|0}while((o|0)!=(m|0))}m=c[b+56>>2]|0;if(m|0){if(a[b+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}c[b+56>>2]=0}a[b+60>>0]=1;c[b+56>>2]=n;c[b+52>>2]=p}c[b+48>>2]=p;if((j|0)>0){m=c[b+176>>2]|0;U=0;V=0;while(1){T=m+(V<<3)|0;if(!(c[T>>2]|0))n=0;else{m=c[b+56>>2]|0;e=m+(U*152|0)|0;r=i+(V<<2)|0;p=c[r>>2]|0;S=c[p+28>>2]|0;R=c[p+32>>2]|0;P=Gj(b,S,+g[k+12>>2])|0;Q=Gj(b,R,+g[k+12>>2])|0;d=c[b+16>>2]|0;n=c[p+24>>2]|0;n=(n|0)>0?n:c[k+20>>2]|0;if((n|0)>(c[b+184>>2]|0))c[b+184>>2]=n;if((c[T>>2]|0)>0){o=0;do{Nk(e+(o*152|0)|0,0,152)|0;g[e+(o*152|0)+120>>2]=-3402823466385288598117041.0e14;g[e+(o*152|0)+124>>2]=3402823466385288598117041.0e14;g[e+(o*152|0)+100>>2]=0.0;g[e+(o*152|0)+96>>2]=0.0;c[e+(o*152|0)+144>>2]=P;c[e+(o*152|0)+148>>2]=Q;c[e+(o*152|0)+136>>2]=n;o=o+1|0}while((o|0)<(c[T>>2]|0))}c[d+(P*244|0)+64>>2]=0;c[d+(P*244|0)+64+4>>2]=0;c[d+(P*244|0)+64+8>>2]=0;c[d+(P*244|0)+64+12>>2]=0;c[d+(P*244|0)+64+16>>2]=0;c[d+(P*244|0)+64+20>>2]=0;c[d+(P*244|0)+64+24>>2]=0;c[d+(P*244|0)+64+28>>2]=0;c[d+(P*244|0)+144>>2]=0;c[d+(P*244|0)+144+4>>2]=0;c[d+(P*244|0)+144+8>>2]=0;c[d+(P*244|0)+144+12>>2]=0;c[d+(P*244|0)+144+16>>2]=0;c[d+(P*244|0)+144+20>>2]=0;c[d+(P*244|0)+144+24>>2]=0;c[d+(P*244|0)+144+28>>2]=0;c[d+(Q*244|0)+64>>2]=0;c[d+(Q*244|0)+64+4>>2]=0;c[d+(Q*244|0)+64+8>>2]=0;c[d+(Q*244|0)+64+12>>2]=0;c[d+(Q*244|0)+64+16>>2]=0;c[d+(Q*244|0)+64+20>>2]=0;c[d+(Q*244|0)+64+24>>2]=0;c[d+(Q*244|0)+64+28>>2]=0;c[d+(Q*244|0)+144>>2]=0;c[d+(Q*244|0)+144+4>>2]=0;c[d+(Q*244|0)+144+8>>2]=0;c[d+(Q*244|0)+144+12>>2]=0;c[d+(Q*244|0)+144+16>>2]=0;c[d+(Q*244|0)+144+20>>2]=0;c[d+(Q*244|0)+144+24>>2]=0;c[d+(Q*244|0)+144+28>>2]=0;g[X>>2]=1.0/+g[k+12>>2];c[X+4>>2]=c[k+32>>2];c[X+8>>2]=m+(U*152|0)+16;c[X+12>>2]=e;c[X+16>>2]=m+(U*152|0)+48;c[X+20>>2]=m+(U*152|0)+32;c[X+24>>2]=38;c[X+28>>2]=m+(U*152|0)+112;o=m+(U*152|0)+116|0;c[o>>2]=c[k+40>>2];c[X+52>>2]=c[k+4>>2];c[X+32>>2]=o;c[X+36>>2]=m+(U*152|0)+120;c[X+40>>2]=m+(U*152|0)+124;c[X+48>>2]=c[k+20>>2];o=c[r>>2]|0;Gb[c[(c[o>>2]|0)+20>>2]&127](o,X);if((c[T>>2]|0)>0){o=0;do{m=e+(o*152|0)+124|0;q=+g[(c[r>>2]|0)+16>>2];if(+g[m>>2]>=q)g[m>>2]=q;m=e+(o*152|0)+120|0;if(+g[m>>2]<=-q)g[m>>2]=-q;c[e+(o*152|0)+132>>2]=p;Y=e+(o*152|0)|0;n=e+(o*152|0)+64|0;m=c[p+28>>2]|0;M=+g[Y>>2];K=+g[Y+4>>2];O=+g[Y+8>>2];L=(M*+g[m+280>>2]+K*+g[m+284>>2]+O*+g[m+288>>2])*+g[m+548>>2];q=(M*+g[m+296>>2]+K*+g[m+300>>2]+O*+g[m+304>>2])*+g[m+552>>2];g[n>>2]=(+g[m+264>>2]*M+ +g[m+268>>2]*K+ +g[m+272>>2]*O)*+g[m+544>>2];g[n+4>>2]=L;g[n+8>>2]=q;g[n+12>>2]=0.0;n=e+(o*152|0)+32|0;m=e+(o*152|0)+80|0;Z=c[p+32>>2]|0;q=+g[n>>2];L=+g[n+4>>2];O=+g[n+8>>2];K=(q*+g[Z+280>>2]+L*+g[Z+284>>2]+O*+g[Z+288>>2])*+g[Z+548>>2];M=(q*+g[Z+296>>2]+L*+g[Z+300>>2]+O*+g[Z+304>>2])*+g[Z+552>>2];g[m>>2]=(+g[Z+264>>2]*q+ +g[Z+268>>2]*L+ +g[Z+272>>2]*O)*+g[Z+544>>2];g[m+4>>2]=K;g[m+8>>2]=M;g[m+12>>2]=0.0;m=e+(o*152|0)+16|0;M=+g[S+344>>2];K=+g[m>>2];L=+g[m+4>>2];q=+g[m+8>>2];s=+g[Y>>2];t=+g[Y+4>>2];u=+g[Y+8>>2];Y=e+(o*152|0)+48|0;N=+g[R+344>>2];v=+g[Y>>2];w=+g[Y+4>>2];x=+g[Y+8>>2];y=+g[n>>2];z=+g[n+4>>2];O=K*M*K+L*M*L+q*M*q+(s*(+g[S+264>>2]*s+ +g[S+268>>2]*t+ +g[S+272>>2]*u)+t*(s*+g[S+280>>2]+t*+g[S+284>>2]+u*+g[S+288>>2])+u*(s*+g[S+296>>2]+t*+g[S+300>>2]+u*+g[S+304>>2]))+(v*N*v+w*N*w+x*N*x)+(y*(+g[R+264>>2]*y+ +g[R+268>>2]*z+ +g[R+272>>2]*O)+z*(y*+g[R+280>>2]+z*+g[R+284>>2]+O*+g[R+288>>2])+O*(y*+g[R+296>>2]+z*+g[R+300>>2]+O*+g[R+304>>2]));Y=+B(+O)>1.1920928955078125e-07;O=Y?1.0/O:0.0;g[e+(o*152|0)+108>>2]=O;if(!(c[d+(P*244|0)+240>>2]|0)){A=0.0;D=0.0;E=0.0;F=0.0;G=0.0;H=0.0}else{A=+g[d+(P*244|0)+208>>2];D=+g[d+(P*244|0)+212>>2];E=+g[d+(P*244|0)+216>>2];F=+g[d+(P*244|0)+224>>2];G=+g[d+(P*244|0)+228>>2];H=+g[d+(P*244|0)+232>>2]}if(!(c[d+(Q*244|0)+240>>2]|0)){I=0.0;J=0.0;K=0.0;L=0.0;M=0.0;N=0.0}else{I=+g[d+(Q*244|0)+208>>2];J=+g[d+(Q*244|0)+212>>2];K=+g[d+(Q*244|0)+216>>2];L=+g[d+(Q*244|0)+224>>2];M=+g[d+(Q*244|0)+228>>2];N=+g[d+(Q*244|0)+232>>2]}Z=e+(o*152|0)+112|0;g[Z>>2]=+g[Z>>2]*O+O*(0.0-+g[X+52>>2]*((A+ +g[S+312>>2])*+g[m>>2]+(D+ +g[S+316>>2])*+g[m+4>>2]+(E+ +g[S+320>>2])*q+((F+ +g[S+328>>2])*s+(G+ +g[S+332>>2])*t+(H+ +g[S+336>>2])*u)+((I+ +g[R+312>>2])*v+(J+ +g[R+316>>2])*w+(K+ +g[R+320>>2])*x+((L+ +g[R+328>>2])*y+(M+ +g[R+332>>2])*z+(N+ +g[R+336>>2])*+g[n+8>>2]))));g[e+(o*152|0)+100>>2]=0.0;o=o+1|0}while((o|0)<(c[T>>2]|0))}m=c[b+176>>2]|0;n=c[m+(V<<3)>>2]|0}V=V+1|0;if((V|0)>=(j|0))break;else U=n+U|0}}Nb[c[(c[b>>2]|0)+28>>2]&127](b,f,h,k);d=c[b+48>>2]|0;e=c[b+28>>2]|0;r=c[b+68>>2]|0;m=c[b+128>>2]|0;if((m|0)<(d|0)?(c[b+132>>2]|0)<(d|0):0){if(!d)n=0;else{c[6472]=(c[6472]|0)+1;m=ic((d<<2|3)+16|0)|0;if(!m)n=0;else{c[(m+4+15&-16)+-4>>2]=m;n=m+4+15&-16}m=c[b+128>>2]|0}p=c[b+136>>2]|0;if((m|0)<=0)if(!p)m=b+140|0;else W=99;else{o=0;do{c[n+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)!=(m|0));W=99}if((W|0)==99){if(a[b+140>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}c[b+136>>2]=0;m=b+140|0}a[m>>0]=1;c[b+136>>2]=n;c[b+132>>2]=d}c[b+128>>2]=d;if(!(c[k+64>>2]&16)){m=c[b+108>>2]|0;if((m|0)<(e|0)?(c[b+112>>2]|0)<(e|0):0){if(!e)n=0;else{c[6472]=(c[6472]|0)+1;m=ic((e<<2|3)+16|0)|0;if(!m)n=0;else{c[(m+4+15&-16)+-4>>2]=m;n=m+4+15&-16}m=c[b+108>>2]|0}p=c[b+116>>2]|0;if((m|0)<=0)if(!p)m=b+120|0;else W=129;else{o=0;do{c[n+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)!=(m|0));W=129}if((W|0)==129){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}c[b+116>>2]=0;m=b+120|0}a[m>>0]=1;c[b+116>>2]=n;c[b+112>>2]=e}c[b+108>>2]=e}else{m=c[b+108>>2]|0;if((m|0)<(e<<1|0)?(c[b+112>>2]|0)<(e<<1|0):0){if(!e)n=0;else{c[6472]=(c[6472]|0)+1;m=ic((e<<3|3)+16|0)|0;if(!m)n=0;else{c[(m+4+15&-16)+-4>>2]=m;n=m+4+15&-16}m=c[b+108>>2]|0}p=c[b+116>>2]|0;if((m|0)<=0)if(!p)m=b+120|0;else W=114;else{o=0;do{c[n+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)!=(m|0));W=114}if((W|0)==114){if(a[b+120>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}c[b+116>>2]=0;m=b+120|0}a[m>>0]=1;c[b+116>>2]=n;c[b+112>>2]=e<<1}c[b+108>>2]=e<<1}m=c[b+148>>2]|0;if((m|0)<(r|0)?(c[b+152>>2]|0)<(r|0):0){if(!r)n=0;else{c[6472]=(c[6472]|0)+1;m=ic((r<<2|3)+16|0)|0;if(!m)n=0;else{c[(m+4+15&-16)+-4>>2]=m;n=m+4+15&-16}m=c[b+148>>2]|0}p=c[b+156>>2]|0;if((m|0)<=0)if(!p)m=b+160|0;else W=144;else{o=0;do{c[n+(o<<2)>>2]=c[p+(o<<2)>>2];o=o+1|0}while((o|0)!=(m|0));W=144}if((W|0)==144){if(a[b+160>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}c[b+156>>2]=0;m=b+160|0}a[m>>0]=1;c[b+156>>2]=n;c[b+152>>2]=r}c[b+148>>2]=r;if((d|0)>0){m=c[b+136>>2]|0;n=0;do{c[m+(n<<2)>>2]=n;n=n+1|0}while((n|0)!=(d|0))}if((e|0)>0){m=c[b+116>>2]|0;n=0;do{c[m+(n<<2)>>2]=n;n=n+1|0}while((n|0)!=(e|0))}if((r|0)>0){m=c[b+156>>2]|0;n=0;do{c[m+(n<<2)>>2]=n;n=n+1|0}while((n|0)!=(r|0))}m=c[2405]|0;Z=(c[m+16>>2]|0)+-1|0;c[m+16>>2]=Z;if(Z|0){l=X;return 0.0}do if(c[m+4>>2]|0){Za(X|0,0)|0;Z=c[6471]|0;g[m+8>>2]=+g[m+8>>2]+ +(((c[X+4>>2]|0)-(c[Z+4>>2]|0)+(((c[X>>2]|0)-(c[Z>>2]|0)|0)*1e6|0)-(c[m+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[m+16>>2]|0)){m=c[2405]|0;break}else{l=X;return 0.0}}while(0);c[2405]=c[m+20>>2];l=X;return 0.0}function lc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0,G=0.0,I=0.0,J=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0;la=l;l=l+80|0;g[b+504>>2]=0.0;g[b+500>>2]=0.0;a[b+525>>0]=0;a[b+526>>0]=0;if(a[b+552>>0]|0?(a[b+527>>0]|0)==0:0){sa=+g[b+556>>2];qa=+g[b+560>>2];ka=+g[b+564>>2];pa=+g[b+568>>2];$=sa*(2.0/(sa*sa+qa*qa+ka*ka+pa*pa));ra=qa*(2.0/(sa*sa+qa*qa+ka*ka+pa*pa));oa=ka*(2.0/(sa*sa+qa*qa+ka*ka+pa*pa));aa=+g[b+300>>2];R=+g[d>>2];ba=+g[b+316>>2];T=+g[d+4>>2];ca=+g[b+332>>2];U=+g[d+8>>2];ea=+g[b+304>>2];ga=+g[b+320>>2];ia=+g[b+336>>2];Y=+g[b+308>>2];Z=+g[b+324>>2];_=+g[b+340>>2];V=+g[d+16>>2];W=+g[d+20>>2];X=+g[d+24>>2];fa=+g[d+32>>2];ha=+g[d+36>>2];ja=+g[d+40>>2];q=+g[b+348>>2];p=+g[b+352>>2];o=+g[b+356>>2];u=+g[b+364>>2];na=+g[e>>2];v=+g[b+380>>2];ma=+g[e+4>>2];w=+g[b+396>>2];k=+g[e+8>>2];x=+g[b+368>>2];y=+g[b+384>>2];z=+g[b+400>>2];r=+g[b+372>>2];s=+g[b+388>>2];t=+g[b+404>>2];m=+g[e+16>>2];n=+g[e+20>>2];j=+g[e+24>>2];A=+g[e+32>>2];G=+g[e+36>>2];J=+g[e+40>>2];D=+g[b+412>>2];I=+g[b+416>>2];i=+g[b+420>>2];M=(1.0-(qa*ra+ka*oa))*(u*na+v*ma+w*k)+(sa*ra+pa*oa)*(na*x+ma*y+k*z)+(sa*oa-pa*ra)*(na*r+ma*s+k*t);N=(sa*ra-pa*oa)*(u*na+v*ma+w*k)+(1.0-(sa*$+ka*oa))*(na*x+ma*y+k*z)+(qa*oa+pa*$)*(na*r+ma*s+k*t);L=(sa*oa+pa*ra)*(u*na+v*ma+w*k)+(qa*oa-pa*$)*(na*x+ma*y+k*z)+(1.0-(sa*$+qa*ra))*(na*r+ma*s+k*t);P=(sa*oa-pa*ra)*(r*m+s*n+t*j)+((1.0-(qa*ra+ka*oa))*(u*m+v*n+w*j)+(sa*ra+pa*oa)*(x*m+y*n+z*j));Q=(qa*oa+pa*$)*(r*m+s*n+t*j)+((sa*ra-pa*oa)*(u*m+v*n+w*j)+(1.0-(sa*$+ka*oa))*(x*m+y*n+z*j));O=(1.0-(sa*$+qa*ra))*(r*m+s*n+t*j)+((sa*oa+pa*ra)*(u*m+v*n+w*j)+(qa*oa-pa*$)*(x*m+y*n+z*j));da=(sa*oa-pa*ra)*(r*A+s*G+t*J)+((1.0-(qa*ra+ka*oa))*(u*A+v*G+w*J)+(sa*ra+pa*oa)*(x*A+y*G+z*J));ka=(qa*oa+pa*$)*(r*A+s*G+t*J)+((sa*ra-pa*oa)*(u*A+v*G+w*J)+(1.0-(sa*$+ka*oa))*(x*A+y*G+z*J));$=(1.0-(sa*$+qa*ra))*(r*A+s*G+t*J)+((sa*oa+pa*ra)*(u*A+v*G+w*J)+(qa*oa-pa*$)*(x*A+y*G+z*J));pa=-(+g[d+48>>2]+(R*q+T*p+U*o));oa=-(V*q+W*p+X*o+ +g[d+52>>2]);o=-(fa*q+ha*p+ja*o+ +g[d+56>>2]);p=(aa*R+ba*T+ca*U)*pa+(aa*V+ba*W+ca*X)*oa+(aa*fa+ba*ha+ca*ja)*o;q=(R*ea+T*ga+U*ia)*pa+(ea*V+ga*W+ia*X)*oa+(ea*fa+ga*ha+ia*ja)*o;o=(R*Y+T*Z+U*_)*pa+(Y*V+Z*W+_*X)*oa+(Y*fa+Z*ha+_*ja)*o;k=o*L+(p*M+q*N)+((u*na+v*ma+w*k)*0.0+(na*x+ma*y+k*z)*0.0+(na*r+ma*s+k*t)*0.0+(+g[e+48>>2]+(na*D+ma*I+k*i)));j=o*O+(p*P+q*Q)+((r*m+s*n+t*j)*0.0+((u*m+v*n+w*j)*0.0+(x*m+y*n+z*j)*0.0)+(m*D+n*I+j*i+ +g[e+52>>2]));i=o*$+(p*da+q*ka)+((r*A+s*G+t*J)*0.0+((u*A+v*G+w*J)*0.0+(x*A+y*G+z*J)*0.0)+(A*D+G*I+J*i+ +g[e+56>>2]));g[la+16>>2]=(R*Y+T*Z+U*_)*L+((aa*R+ba*T+ca*U)*M+(R*ea+T*ga+U*ia)*N);g[la+16+4>>2]=(Y*V+Z*W+_*X)*L+((aa*V+ba*W+ca*X)*M+(ea*V+ga*W+ia*X)*N);g[la+16+8>>2]=(Y*fa+Z*ha+_*ja)*L+((aa*fa+ba*ha+ca*ja)*M+(ea*fa+ga*ha+ia*ja)*N);g[la+16+12>>2]=0.0;g[la+16+16>>2]=(R*Y+T*Z+U*_)*O+((aa*R+ba*T+ca*U)*P+(R*ea+T*ga+U*ia)*Q);g[la+16+20>>2]=(Y*V+Z*W+_*X)*O+((aa*V+ba*W+ca*X)*P+(ea*V+ga*W+ia*X)*Q);g[la+16+24>>2]=(Y*fa+Z*ha+_*ja)*O+((aa*fa+ba*ha+ca*ja)*P+(ea*fa+ga*ha+ia*ja)*Q);g[la+16+28>>2]=0.0;g[la+16+32>>2]=(R*Y+T*Z+U*_)*$+((aa*R+ba*T+ca*U)*da+(R*ea+T*ga+U*ia)*ka);g[la+16+36>>2]=(Y*V+Z*W+_*X)*$+((aa*V+ba*W+ca*X)*da+(ea*V+ga*W+ia*X)*ka);g[la+16+40>>2]=(Y*fa+Z*ha+_*ja)*$+((aa*fa+ba*ha+ca*ja)*da+(ea*fa+ga*ha+ia*ja)*ka);g[la+16+44>>2]=0.0;g[la+16+48>>2]=k;g[la+16+52>>2]=j;g[la+16+56>>2]=i;g[la+16+60>>2]=0.0;lh(la+16|0,la);i=+g[la>>2];j=+g[la+4>>2];k=+g[la+8>>2];if(!(+B(+(i*i+j*j+k*k))<1.1920928955078125e-07)?(g[b+472>>2]=0.0,sa=1.0/+C(+(i*i+j*j+k*k)),g[b+460>>2]=i*sa,g[b+464>>2]=j*sa,g[b+468>>2]=k*sa,sa=+g[la+12>>2],sa=sa<-1.0?-1.0:sa,sa=+H(+(sa>1.0?1.0:sa))*2.0,g[b+504>>2]=sa,!(+B(+sa)<1.1920928955078125e-07)):0)a[b+526>>0]=1;l=la;return}lh(d,la+16|0);lh(b+300|0,la);U=+g[la+16+12>>2];V=+g[la>>2];W=+g[la+16>>2];X=+g[la+12>>2];Y=+g[la+16+4>>2];Z=+g[la+8>>2];_=+g[la+16+8>>2];$=+g[la+4>>2];lh(e,la+16|0);lh(b+364|0,la);aa=+g[la+16+12>>2];ba=+g[la>>2];ca=+g[la+16>>2];da=+g[la+12>>2];ea=+g[la+16+4>>2];fa=+g[la+8>>2];ga=+g[la+16+8>>2];ha=+g[la+4>>2];ia=-(aa*ba+ca*da+ea*fa-ga*ha);ja=-(ba*ga+(da*ea+aa*ha)-ca*fa);ka=-(aa*fa+da*ga+ca*ha-ba*ea);r=(U*X-V*W-Y*$-Z*_)*ia+(U*V+W*X+Y*Z-_*$)*(aa*da-ba*ca-ea*ha-fa*ga)+(U*Z+X*_+W*$-V*Y)*ja-(V*_+(X*Y+U*$)-W*Z)*ka;s=(U*V+W*X+Y*Z-_*$)*ka+((V*_+(X*Y+U*$)-W*Z)*(aa*da-ba*ca-ea*ha-fa*ga)+(U*X-V*W-Y*$-Z*_)*ja)-(U*Z+X*_+W*$-V*Y)*ia;t=(V*_+(X*Y+U*$)-W*Z)*ia+((U*Z+X*_+W*$-V*Y)*(aa*da-ba*ca-ea*ha-fa*ga)+(U*X-V*W-Y*$-Z*_)*ka)-(U*V+W*X+Y*Z-_*$)*ja;u=(U*X-V*W-Y*$-Z*_)*(aa*da-ba*ca-ea*ha-fa*ga)-(U*V+W*X+Y*Z-_*$)*ia-(V*_+(X*Y+U*$)-W*Z)*ja-(U*Z+X*_+W*$-V*Y)*ka;m=-r-s*0.0-t*0.0;k=(t+u*0.0-r*0.0)*-t+(u*(u+s*0.0-t*0.0)+m*-r)-(u*0.0+r*0.0-s)*-s;i=(u*0.0+r*0.0-s)*-r+(u*(t+u*0.0-r*0.0)+m*-s)-(u+s*0.0-t*0.0)*-t;m=(u+s*0.0-t*0.0)*-s+(u*(u*0.0+r*0.0-s)+m*-t)-(t+u*0.0-r*0.0)*-r;j=1.0/+C(+(m*m+(k*k+i*i)));if(j*m*0.0+(j*i*0.0+j*k)<-.9999998807907104){n=-0.0;o=0.0;p=0.0;i=1.0}else{sa=+C(+((j*m*0.0+(j*i*0.0+j*k)+1.0)*2.0));n=(j*m*0.0-j*i*0.0)*(1.0/sa);o=(j*i-j*k*0.0)*(1.0/sa);p=sa*.5;i=(j*k*0.0-j*m)*(1.0/sa)}T=1.0/+C(+(n*n+i*i+o*o+p*p));v=n*T;w=i*T;q=o*T;n=p*T;T=1.0/+C(+((u*n-r*-v-s*-w-t*-q)*(u*n-r*-v-s*-w-t*-q)+((s*-v+(t*n+u*-q)-r*-w)*(s*-v+(t*n+u*-q)-r*-w)+((t*-w+(r*n+u*-v)-s*-q)*(t*-w+(r*n+u*-v)-s*-q)+(r*-q+(u*-w+s*n)-t*-v)*(r*-q+(u*-w+s*n)-t*-v)))));k=T*(t*-w+(r*n+u*-v)-s*-q);m=T*(r*-q+(u*-w+s*n)-t*-v);j=T*(s*-v+(t*n+u*-q)-r*-w);T=T*(u*n-r*-v-s*-w-t*-q);t=+g[b+444>>2];i=+g[b+456>>2];if(t>=i?(x=+g[b+448>>2],x>=i):0){s=n<-1.0?-1.0:n;s=+H(+(s>1.0?1.0:s))*2.0;if(s>1.1920928955078125e-07){i=1.0/+C(+(q*q+(v*v+w*w)));if(+B(+(w*i))>1.1920928955078125e-07){r=+C(+((q*i*q*i/(w*i*w*i)+1.0)/(1.0/(x*x)+q*i*q*i/(w*i*w*i)/(t*t))));o=v*i;n=q*i;i=w*i}else{r=t;o=v*i;n=q*i;i=w*i}}else{r=0.0;o=0.0;n=0.0;i=0.0}p=+g[b+428>>2];q=r*p;if(s>q){a[b+526>>0]=1;if(s>2]=p;g[b+504>>2]=s-q;if(+B(+i)>1.1920928955078125e-07){sa=+B(+(i*-n/i*(x/t)));n=n<-0.0?sa:-sa;sa=1.0/+C(+(o*o+i*i+n*n));o=o*sa;n=-(n*sa);i=i*sa}ra=-o;qa=-i;oa=-n;na=(aa*da-ba*ca-ea*ha-fa*ga)*ra+(ba*ga+(da*ea+aa*ha)-ca*fa)*oa-(aa*fa+da*ga+ca*ha-ba*ea)*qa;sa=(aa*fa+da*ga+ca*ha-ba*ea)*ra+(aa*da-ba*ca-ea*ha-fa*ga)*qa-(aa*ba+ca*da+ea*fa-ga*ha)*oa;pa=(aa*ba+ca*da+ea*fa-ga*ha)*qa+(aa*da-ba*ca-ea*ha-fa*ga)*oa-(ba*ga+(da*ea+aa*ha)-ca*fa)*ra;oa=-((aa*ba+ca*da+ea*fa-ga*ha)*ra)-(ba*ga+(da*ea+aa*ha)-ca*fa)*qa-(aa*fa+da*ga+ca*ha-ba*ea)*oa;qa=sa*ka+(oa*ia+(aa*da-ba*ca-ea*ha-fa*ga)*na)-pa*ja;ra=pa*ia+((aa*da-ba*ca-ea*ha-fa*ga)*sa+oa*ja)-na*ka;sa=na*ja+(oa*ka+(aa*da-ba*ca-ea*ha-fa*ga)*pa)-sa*ia;g[b+460>>2]=qa;g[b+464>>2]=ra;g[b+468>>2]=sa;g[b+472>>2]=0.0;c[b+536>>2]=0;c[b+536+4>>2]=0;c[b+536+8>>2]=0;c[b+536+12>>2]=0;g[b+492>>2]=1.0/(qa*(+g[f>>2]*qa+ +g[f+16>>2]*ra+ +g[f+32>>2]*sa)+ra*(qa*+g[f+4>>2]+ra*+g[f+20>>2]+sa*+g[f+36>>2])+sa*(qa*+g[f+8>>2]+ra*+g[f+24>>2]+sa*+g[f+40>>2])+(qa*(qa*+g[h>>2]+ra*+g[h+16>>2]+sa*+g[h+32>>2])+ra*(qa*+g[h+4>>2]+ra*+g[h+20>>2]+sa*+g[h+36>>2])+sa*(qa*+g[h+8>>2]+ra*+g[h+24>>2]+sa*+g[h+40>>2])))}}else S=20;a:do if((S|0)==20){D=+g[b+300>>2];G=+g[b+316>>2];I=+g[b+332>>2];J=+g[d>>2];L=+g[d+4>>2];M=+g[d+8>>2];N=+g[d+16>>2];O=+g[d+20>>2];P=+g[d+24>>2];Q=+g[d+32>>2];R=+g[d+36>>2];s=+g[d+40>>2];t=+g[b+304>>2];u=+g[b+320>>2];v=+g[b+336>>2];w=+g[b+308>>2];x=+g[b+324>>2];y=+g[b+340>>2];n=+g[b+364>>2];q=+g[b+380>>2];r=+g[b+396>>2];A=n*+g[e>>2]+q*+g[e+4>>2]+r*+g[e+8>>2];z=n*+g[e+16>>2]+q*+g[e+20>>2]+r*+g[e+24>>2];r=n*+g[e+32>>2]+q*+g[e+36>>2]+r*+g[e+40>>2];q=(D*J+G*L+I*M)*A+(D*N+G*O+I*P)*z+(D*Q+G*R+I*s)*r;n=(J*t+L*u+M*v)*A+(N*t+O*u+P*v)*z+(Q*t+R*u+s*v)*r;i=(J*w+L*x+M*y)*A+(N*w+O*x+P*y)*z+(Q*w+R*x+s*y)*r;p=+g[b+444>>2];o=+g[b+456>>2];do if(p>2];if(p>0]=1;g[b+460>>2]=-((D*Q+G*R+I*s)*z-(D*N+G*O+I*P)*r);g[b+464>>2]=-((D*J+G*L+I*M)*r-(D*Q+G*R+I*s)*A);g[b+468>>2]=-((D*N+G*O+I*P)*A-(D*J+G*L+I*M)*z);g[b+472>>2]=0.0;break a}if(+B(+q)<1.1920928955078125e-07?+B(+i)<1.1920928955078125e-07:0){o=q;break}a[b+526>>0]=1;if(p>=o){n=+K(+i,+q);if(n>p){o=+E(+p);n=0.0;i=+F(+p);break}if(n<-p){o=+E(+p);n=0.0;i=-+F(+p)}else{o=q;n=0.0}}else o=q}else{if(+B(+q)<1.1920928955078125e-07?+B(+n)<1.1920928955078125e-07:0){o=q;break}a[b+526>>0]=1;if(p>=o){i=+K(+n,+q);if(i>p){o=+E(+p);n=+F(+p);i=0.0;break}if(i<-p){o=+E(+p);n=-+F(+p);i=0.0}else{o=q;i=0.0}}else o=q}while(0);ra=(J*w+L*x+M*y)*i+((J*t+L*u+M*v)*n+(D*J+G*L+I*M)*o);pa=(N*w+O*x+P*y)*i+((N*t+O*u+P*v)*n+(D*N+G*O+I*P)*o);oa=(Q*w+R*x+s*y)*i+((Q*t+R*u+s*v)*n+(D*Q+G*R+I*s)*o);qa=1.0/+C(+(oa*oa+(ra*ra+pa*pa)));g[b+472>>2]=0.0;sa=+C(+((z*qa*oa-r*qa*pa)*(z*qa*oa-r*qa*pa)+(r*qa*ra-A*qa*oa)*(r*qa*ra-A*qa*oa)+(A*qa*pa-z*qa*ra)*(A*qa*pa-z*qa*ra)));g[b+504>>2]=sa;g[b+460>>2]=-((z*qa*oa-r*qa*pa)*(1.0/sa));g[b+464>>2]=-((r*qa*ra-A*qa*oa)*(1.0/sa));g[b+468>>2]=-((A*qa*pa-z*qa*ra)*(1.0/sa))}while(0);p=+g[b+452>>2];if(!(p>=0.0)){g[b+512>>2]=0.0;l=la;return}i=T<-1.0?-1.0:T;i=+H(+(i>1.0?1.0:i))*2.0;if(i>3.1415927410125732){i=-T<-1.0?-1.0:-T;i=+H(+(i>1.0?1.0:i))*2.0;k=-k;m=-m;j=-j}g[b+512>>2]=i;if(i>1.1920928955078125e-07){sa=1.0/+C(+(k*k+m*m+j*j));o=k*sa;j=j*sa;m=m*sa}else o=k;k=+g[b+428>>2];if(i>p*k){a[b+525>>0]=1;n=i-p*k;if(i>2]=i;g[b+508>>2]=n;ra=-o;qa=-m;oa=-j;na=(aa*da-ba*ca-ea*ha-fa*ga)*ra+(ba*ga+(da*ea+aa*ha)-ca*fa)*oa-(aa*fa+da*ga+ca*ha-ba*ea)*qa;sa=(aa*fa+da*ga+ca*ha-ba*ea)*ra+(aa*da-ba*ca-ea*ha-fa*ga)*qa-(aa*ba+ca*da+ea*fa-ga*ha)*oa;pa=(aa*ba+ca*da+ea*fa-ga*ha)*qa+(aa*da-ba*ca-ea*ha-fa*ga)*oa-(ba*ga+(da*ea+aa*ha)-ca*fa)*ra;oa=-((aa*ba+ca*da+ea*fa-ga*ha)*ra)-(ba*ga+(da*ea+aa*ha)-ca*fa)*qa-(aa*fa+da*ga+ca*ha-ba*ea)*oa;qa=sa*ka+(oa*ia+(aa*da-ba*ca-ea*ha-fa*ga)*na)-pa*ja;ra=pa*ia+((aa*da-ba*ca-ea*ha-fa*ga)*sa+oa*ja)-na*ka;sa=na*ja+(oa*ka+(aa*da-ba*ca-ea*ha-fa*ga)*pa)-sa*ia;g[b+476>>2]=qa;g[b+480>>2]=ra;g[b+484>>2]=sa;g[b+488>>2]=0.0;g[b+496>>2]=1.0/(qa*(+g[f>>2]*qa+ +g[f+16>>2]*ra+ +g[f+32>>2]*sa)+ra*(qa*+g[f+4>>2]+ra*+g[f+20>>2]+sa*+g[f+36>>2])+sa*(qa*+g[f+8>>2]+ra*+g[f+24>>2]+sa*+g[f+40>>2])+(qa*(qa*+g[h>>2]+ra*+g[h+16>>2]+sa*+g[h+32>>2])+ra*(qa*+g[h+4>>2]+ra*+g[h+20>>2]+sa*+g[h+36>>2])+sa*(qa*+g[h+8>>2]+ra*+g[h+24>>2]+sa*+g[h+40>>2])))}if(!(a[b+526>>0]|0)){l=la;return}na=-o;sa=-m;oa=-j;ma=(U*X-V*W-Y*$-Z*_)*na+(V*_+(X*Y+U*$)-W*Z)*oa-(U*Z+X*_+W*$-V*Y)*sa;ra=(U*Z+X*_+W*$-V*Y)*na+(U*X-V*W-Y*$-Z*_)*sa-(U*V+W*X+Y*Z-_*$)*oa;qa=(U*V+W*X+Y*Z-_*$)*sa+(U*X-V*W-Y*$-Z*_)*oa-(V*_+(X*Y+U*$)-W*Z)*na;oa=-((U*V+W*X+Y*Z-_*$)*na)-(V*_+(X*Y+U*$)-W*Z)*sa-(U*Z+X*_+W*$-V*Y)*oa;sa=-(U*V+W*X+Y*Z-_*$);na=-(V*_+(X*Y+U*$)-W*Z);pa=-(U*Z+X*_+W*$-V*Y);g[b+536>>2]=ra*pa+(oa*sa+(U*X-V*W-Y*$-Z*_)*ma)-qa*na;g[b+540>>2]=qa*sa+((U*X-V*W-Y*$-Z*_)*ra+oa*na)-ma*pa;g[b+544>>2]=ma*na+(oa*pa+(U*X-V*W-Y*$-Z*_)*qa)-ra*sa;g[b+548>>2]=0.0;l=la;return}function mc(d,e){d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0.0,l=0.0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0,qa=0;pa=c[d+28>>2]|0;qa=c[d+32>>2]|0;r=c[e+24>>2]|0;if(!(a[d+739>>0]|0)){z=+g[d+552>>2];S=+g[pa+4>>2];A=+g[d+568>>2];T=+g[pa+8>>2];B=+g[d+584>>2];U=+g[pa+12>>2];D=+g[d+556>>2];E=+g[d+572>>2];F=+g[d+588>>2];V=+g[d+560>>2];W=+g[d+576>>2];X=+g[d+592>>2];Y=+g[pa+20>>2];Z=+g[pa+24>>2];_=+g[pa+28>>2];$=+g[pa+36>>2];aa=+g[pa+40>>2];ba=+g[pa+44>>2];l=+g[d+600>>2];m=+g[d+604>>2];o=+g[d+608>>2];q=+g[pa+52>>2];u=+g[pa+56>>2];v=+g[pa+60>>2];G=+g[qa+4>>2];H=+g[qa+8>>2];I=+g[qa+12>>2];J=+g[d+624>>2];K=+g[d+640>>2];L=+g[d+656>>2];M=+g[qa+20>>2];N=+g[qa+24>>2];O=+g[qa+28>>2];P=+g[qa+36>>2];Q=+g[qa+40>>2];R=+g[qa+44>>2];na=+g[d+664>>2];oa=+g[d+668>>2];x=+g[d+672>>2];w=+g[qa+52>>2]+(G*na+H*oa+I*x);y=M*na+N*oa+O*x+ +g[qa+56>>2];x=P*na+Q*oa+R*x+ +g[qa+60>>2];t=b[d+736>>1]|0;if(!((t&255)<<24>>24)){i=c[e+8>>2]|0;g[i>>2]=1.0;g[i+(r+1<<2)>>2]=1.0;g[i+((r<<1)+2<<2)>>2]=1.0;i=c[e+16>>2]|0;g[i>>2]=-1.0;g[i+(r+1<<2)>>2]=-1.0;g[i+((r<<1)+2<<2)>>2]=-1.0;f=+g[pa+52>>2];h=+g[pa+56>>2];k=+g[pa+60>>2];i=r<<1}else{f=q;h=u;k=v;i=r<<1}f=q+(S*l+T*m+U*o)-f;oa=Y*l+Z*m+_*o+u-h;na=$*l+aa*m+ba*o+v-k;j=c[e+12>>2]|0;n=j+(i<<2)|0;c[j>>2]=0;g[j+4>>2]=na;g[j+8>>2]=-oa;g[j+12>>2]=0.0;g[j+(r<<2)>>2]=-na;c[j+(r<<2)+4>>2]=0;g[j+(r<<2)+8>>2]=f;g[j+(r<<2)+12>>2]=0.0;g[n>>2]=oa;g[n+4>>2]=-f;c[n+8>>2]=0;g[n+12>>2]=0.0;f=w-+g[qa+52>>2];oa=y-+g[qa+56>>2];na=x-+g[qa+60>>2];n=c[e+20>>2]|0;i=n+(i<<2)|0;c[n>>2]=0;g[n+4>>2]=-na;g[n+8>>2]=oa;g[n+12>>2]=0.0;g[n+(r<<2)>>2]=na;c[n+(r<<2)+4>>2]=0;g[n+(r<<2)+8>>2]=-f;g[n+(r<<2)+12>>2]=0.0;g[i>>2]=-oa;g[i+4>>2]=f;c[i+8>>2]=0;g[i+12>>2]=0.0;f=+g[e>>2]*+g[e+4>>2];i=c[e+28>>2]|0;if(!((t&255)<<24>>24)){g[i>>2]=f*(w-(q+(S*l+T*m+U*o)));g[i+(r<<2)>>2]=f*(y-(Y*l+Z*m+_*o+u));g[i+(r<<1<<2)>>2]=f*(x-($*l+aa*m+ba*o+v))}s=c[e+24>>2]|0;g[j+(s*3<<2)>>2]=z*S+A*T+B*U;g[j+((s*3|0)+1<<2)>>2]=z*Y+A*Z+B*_;g[j+((s*3|0)+2<<2)>>2]=z*$+A*aa+B*ba;g[j+(s<<2<<2)>>2]=S*D+T*E+U*F;g[j+((s<<2|1)<<2)>>2]=D*Y+E*Z+F*_;g[j+((s<<2|2)<<2)>>2]=D*$+E*aa+F*ba;g[n+(s*3<<2)>>2]=-(z*S+A*T+B*U);g[n+((s*3|0)+1<<2)>>2]=-(z*Y+A*Z+B*_);g[n+((s*3|0)+2<<2)>>2]=-(z*$+A*aa+B*ba);g[n+(s<<2<<2)>>2]=-(S*D+T*E+U*F);g[n+((s<<2|1)<<2)>>2]=-(D*Y+E*Z+F*_);g[n+((s<<2|2)<<2)>>2]=-(D*$+E*aa+F*ba);na=(V*Y+W*Z+X*_)*(J*P+K*Q+L*R)-(V*$+W*aa+X*ba)*(J*M+K*N+L*O);oa=(V*$+W*aa+X*ba)*(G*J+H*K+I*L)-(S*V+T*W+U*X)*(J*P+K*Q+L*R);ma=(S*V+T*W+U*X)*(J*M+K*N+L*O)-(V*Y+W*Z+X*_)*(G*J+H*K+I*L);g[i+(s*3<<2)>>2]=((z*$+A*aa+B*ba)*ma+((z*S+A*T+B*U)*na+(z*Y+A*Z+B*_)*oa))*f;g[i+(s<<2<<2)>>2]=((D*$+E*aa+F*ba)*ma+((S*D+T*E+U*F)*na+(D*Y+E*Z+F*_)*oa))*f;if(!(a[d+716>>0]|0)){r=0;q=0.0}else{q=+g[d+708>>2]*+g[d+732>>2];r=q>0.0?1:2}p=(r|0)!=0;if(!((t&65535)>>>8&65535|r))return;g[j+(s*5<<2)>>2]=S*V+T*W+U*X;g[j+((s*5|0)+1<<2)>>2]=V*Y+W*Z+X*_;g[j+((s*5|0)+2<<2)>>2]=V*$+W*aa+X*ba;g[n+(s*5<<2)>>2]=-(S*V+T*W+U*X);g[n+((s*5|0)+1<<2)>>2]=-(V*Y+W*Z+X*_);g[n+((s*5|0)+2<<2)>>2]=-(V*$+W*aa+X*ba);h=+g[d+688>>2];k=+g[d+692>>2];f=+bh(h-k,6.2831854820251465);if(!(f<-3.1415927410125732))if(f>3.1415927410125732)o=f+-6.2831854820251465;else o=f;else o=f+6.2831854820251465;f=+bh(h+k,6.2831854820251465);if(!(f<-3.1415927410125732)){if(f>3.1415927410125732)f=f+-6.2831854820251465}else f=f+6.2831854820251465;j=o==f;n=i+(s*5<<2)|0;g[n>>2]=0.0;i=c[d+748>>2]|0;m=+g[((i&2|0)==0?e+4|0:d+760|0)>>2];if(!((t&65535)>>>8<<16>>16==0|p&j)){if(i&4|0)c[(c[e+32>>2]|0)+(s*5<<2)>>2]=c[d+752>>2];k=+g[d+728>>2];l=+g[d+680>>2];h=o>f?1.0:0.0;do if(!(o>=f)){h=l/(m*+g[e>>2]);if(h<0.0)if(k>=o&o-h>k){f=(o-k)/h;break}else{f=k0.0)if(k<=f&f-hf?0.0:1.0;break}else f=0.0}else f=h;while(0);g[n>>2]=f*l*+g[d+732>>2]+ +g[n>>2];g[(c[e+36>>2]|0)+(s*5<<2)>>2]=-+g[d+684>>2];c[(c[e+40>>2]|0)+(s*5<<2)>>2]=c[d+684>>2]}if(!p)return;g[n>>2]=+g[n>>2]+q*m*+g[e>>2];if(i&1|0)c[(c[e+32>>2]|0)+(s*5<<2)>>2]=c[d+756>>2];do if(!j){j=(c[e+36>>2]|0)+(s*5<<2)|0;i=c[e+40>>2]|0;if((r|0)==1){g[j>>2]=0.0;f=3402823466385288598117041.0e14;break}else{g[j>>2]=-3402823466385288598117041.0e14;f=0.0;break}}else{g[(c[e+36>>2]|0)+(s*5<<2)>>2]=-3402823466385288598117041.0e14;f=3402823466385288598117041.0e14;i=c[e+40>>2]|0}while(0);g[i+(s*5<<2)>>2]=f;h=+g[d+704>>2];do if(h>0.0){f=(S*V+T*W+U*X)*+g[pa+328>>2]+(V*Y+W*Z+X*_)*+g[pa+332>>2]+(V*$+W*aa+X*ba)*+g[pa+336>>2]-((S*V+T*W+U*X)*+g[qa+328>>2]+(V*Y+W*Z+X*_)*+g[qa+332>>2]+(V*$+W*aa+X*ba)*+g[qa+336>>2]);if((r|0)==1){if(!(f<0.0))break;if(!(+g[n>>2]<-(h*f)))break;g[n>>2]=-(h*f);break}else{if(!(f>0.0))break;if(!(+g[n>>2]>-(h*f)))break;g[n>>2]=-(h*f);break}}while(0);g[n>>2]=+g[d+700>>2]*+g[n>>2];return}W=+g[pa+4>>2];ca=+g[pa+8>>2];ia=+g[pa+12>>2];u=+g[d+556>>2];v=+g[d+572>>2];w=+g[d+588>>2];ja=+g[d+560>>2];ka=+g[d+576>>2];P=+g[d+592>>2];Q=+g[pa+20>>2];R=+g[pa+24>>2];S=+g[pa+28>>2];T=+g[pa+36>>2];U=+g[pa+40>>2];V=+g[pa+44>>2];Y=+g[d+600>>2];X=+g[d+604>>2];o=+g[d+608>>2];k=+g[pa+52>>2]+(W*Y+ca*X+ia*o);y=Q*Y+R*X+S*o+ +g[pa+56>>2];o=T*Y+U*X+V*o+ +g[pa+60>>2];X=+g[qa+4>>2];Y=+g[qa+8>>2];Z=+g[qa+12>>2];_=+g[d+624>>2];$=+g[d+640>>2];aa=+g[d+656>>2];ba=+g[qa+20>>2];da=+g[qa+24>>2];ea=+g[qa+28>>2];fa=+g[qa+36>>2];ga=+g[qa+40>>2];ha=+g[qa+44>>2];m=+g[d+664>>2];x=+g[d+668>>2];h=+g[d+672>>2];l=+g[qa+52>>2];z=+g[qa+56>>2];q=+g[qa+60>>2];L=l+(X*m+Y*x+Z*h)-k;N=ba*m+da*x+ea*h+z-y;M=fa*m+ga*x+ha*h+q-o;A=+g[(c[d+28>>2]|0)+344>>2];B=+g[(c[d+32>>2]|0)+344>>2];J=A+B>0.0?B/(A+B):.5;la=(W*ja+ca*ka+ia*P)*J+(X*_+Y*$+Z*aa)*(1.0-J);na=(ja*Q+ka*R+P*S)*J+(_*ba+$*da+aa*ea)*(1.0-J);ma=(ja*T+ka*U+P*V)*J+(_*fa+$*ga+aa*ha)*(1.0-J);oa=1.0/+C(+(la*la+na*na+ma*ma));D=(l+(X*m+Y*x+Z*h)-l)*la*oa+(ba*m+da*x+ea*h+z-z)*na*oa+(fa*m+ga*x+ha*h+q-q)*ma*oa;l=l+(X*m+Y*x+Z*h)-l-la*oa*D;z=ba*m+da*x+ea*h+z-z-na*oa*D;q=fa*m+ga*x+ha*h+q-q-ma*oa*D;k=k-+g[pa+52>>2];y=y-+g[pa+56>>2];o=o-+g[pa+60>>2];h=la*oa*(k*la*oa+y*na*oa+o*ma*oa);x=na*oa*(k*la*oa+y*na*oa+o*ma*oa);m=ma*oa*(k*la*oa+y*na*oa+o*ma*oa);H=k-h+J*(h-la*oa*D);I=y-x+J*(x-na*oa*D);G=o-m+J*(m-ma*oa*D);E=l-(1.0-J)*(h-la*oa*D);F=z-(1.0-J)*(x-na*oa*D);D=q-(1.0-J)*(m-ma*oa*D);f=(J*l+(1.0-J)*(k-h))*(J*l+(1.0-J)*(k-h))+(J*z+(1.0-J)*(y-x))*(J*z+(1.0-J)*(y-x))+(J*q+(1.0-J)*(o-m))*(J*q+(1.0-J)*(o-m));if(f>1.1920928955078125e-07){w=1.0/+C(+f);O=(J*l+(1.0-J)*(k-h))*w;K=w*(J*q+(1.0-J)*(o-m));q=w*(J*z+(1.0-J)*(y-x))}else{O=W*u+ca*v+ia*w;K=u*T+v*U+w*V;q=u*Q+v*R+w*S}u=na*oa*K-ma*oa*q;v=ma*oa*O-K*la*oa;w=q*la*oa-na*oa*O;t=c[e+12>>2]|0;g[t>>2]=I*K-G*q;g[t+4>>2]=G*O-H*K;g[t+8>>2]=H*q-I*O;t=c[e+20>>2]|0;g[t>>2]=-(F*K-D*q);g[t+4>>2]=-(D*O-E*K);g[t+8>>2]=-(E*q-F*O);if(A<1.1920928955078125e-07|B<1.1920928955078125e-07?(a[d+716>>0]|0)!=0:0){f=(1.0-J)*(F*w-D*v);h=(1.0-J)*(D*u-E*w);k=(1.0-J)*(E*v-F*u);l=J*(I*w-G*v);m=J*(G*u-H*w);o=J*(H*v-I*u)}else{f=F*w-D*v;h=D*u-E*w;k=E*v-F*u;l=I*w-G*v;m=G*u-H*w;o=H*v-I*u}t=(c[e+12>>2]|0)+(r<<2)|0;g[t>>2]=l;g[t+4>>2]=m;g[t+8>>2]=o;t=c[e+20>>2]|0;g[t+(r<<2)>>2]=-f;g[t+(r+1<<2)>>2]=-h;g[t+(r+2<<2)>>2]=-k;if(A<1.1920928955078125e-07|B<1.1920928955078125e-07){o=(1.0-J)*(F*ma*oa-D*na*oa);m=(1.0-J)*(D*la*oa-E*ma*oa);l=(1.0-J)*(E*na*oa-F*la*oa);k=J*(I*ma*oa-G*na*oa);h=J*(G*la*oa-H*ma*oa);f=J*(H*na*oa-I*la*oa)}else{o=F*ma*oa-D*na*oa;m=D*la*oa-E*ma*oa;l=E*na*oa-F*la*oa;k=I*ma*oa-G*na*oa;h=G*la*oa-H*ma*oa;f=H*na*oa-I*la*oa}i=(c[e+12>>2]|0)+(r<<1<<2)|0;g[i>>2]=k;g[i+4>>2]=h;g[i+8>>2]=f;i=c[e+20>>2]|0;g[i+(r<<1<<2)>>2]=-o;g[i+((r<<1|1)<<2)>>2]=-m;g[i+((r<<1)+2<<2)>>2]=-l;f=+g[e>>2]*+g[e+4>>2];if(!(a[d+736>>0]|0)){p=c[e+8>>2]|0;g[p>>2]=O;g[p+4>>2]=q;g[p+8>>2]=K;p=(c[e+8>>2]|0)+(r<<2)|0;g[p>>2]=u;g[p+4>>2]=v;g[p+8>>2]=w;p=(c[e+8>>2]|0)+(r<<1<<2)|0;g[p>>2]=la*oa;g[p+4>>2]=na*oa;g[p+8>>2]=ma*oa;p=c[e+16>>2]|0;h=-O;g[p>>2]=h;g[p+4>>2]=-q;g[p+8>>2]=-K;g[p+(r<<2)>>2]=-u;g[p+(r+1<<2)>>2]=-v;g[p+(r+2<<2)>>2]=-w;g[p+(r<<1<<2)>>2]=-(la*oa);g[p+((r<<1|1)<<2)>>2]=-(na*oa);g[p+((r<<1)+2<<2)>>2]=-(ma*oa);p=c[e+28>>2]|0;g[p>>2]=f*(L*O+N*q+M*K);g[p+(r<<2)>>2]=f*(L*u+N*v+M*w);g[p+(r<<1<<2)>>2]=f*(L*la*oa+N*na*oa+M*ma*oa);i=c[e+20>>2]|0;f=h;h=-u;k=-v;l=-w}else{p=c[e+28>>2]|0;f=-O;h=-u;k=-v;l=-w}j=c[e+12>>2]|0;g[j+(r*3<<2)>>2]=O;g[j+((r*3|0)+1<<2)>>2]=q;g[j+((r*3|0)+2<<2)>>2]=K;g[j+(r<<2<<2)>>2]=u;g[j+((r<<2|1)<<2)>>2]=v;g[j+((r<<2|2)<<2)>>2]=w;g[i+(r*3<<2)>>2]=f;g[i+((r*3|0)+1<<2)>>2]=-q;g[i+((r*3|0)+2<<2)>>2]=-K;g[i+(r<<2<<2)>>2]=h;g[i+((r<<2|1)<<2)>>2]=k;g[i+((r<<2|2)<<2)>>2]=l;M=+g[e>>2]*+g[e+4>>2];N=(ja*Q+ka*R+P*S)*(_*fa+$*ga+aa*ha)-(ja*T+ka*U+P*V)*(_*ba+$*da+aa*ea);ha=(ja*T+ka*U+P*V)*(X*_+Y*$+Z*aa)-(W*ja+ca*ka+ia*P)*(_*fa+$*ga+aa*ha);ka=(W*ja+ca*ka+ia*P)*(_*ba+$*da+aa*ea)-(ja*Q+ka*R+P*S)*(X*_+Y*$+Z*aa);g[p+(r*3<<2)>>2]=M*(N*O+ha*q+ka*K);g[p+(r<<2<<2)>>2]=M*(N*u+ha*v+ka*w);if(!(a[d+716>>0]|0)){t=0;q=0.0}else{q=+g[d+708>>2]*+g[d+732>>2];t=q>0.0?1:2}n=a[d+737>>0]|0;r=(t|0)!=0;if(!(n&255|t))return;s=(c[e+24>>2]|0)*5|0;g[j+(s<<2)>>2]=la*oa;g[j+(s+1<<2)>>2]=na*oa;g[j+(s+2<<2)>>2]=ma*oa;g[i+(s<<2)>>2]=-(la*oa);g[i+(s+1<<2)>>2]=-(na*oa);g[i+(s+2<<2)>>2]=-(ma*oa);h=+g[d+688>>2];k=+g[d+692>>2];f=+bh(h-k,6.2831854820251465);if(!(f<-3.1415927410125732))if(f>3.1415927410125732)o=f+-6.2831854820251465;else o=f;else o=f+6.2831854820251465;f=+bh(h+k,6.2831854820251465);if(!(f<-3.1415927410125732)){if(f>3.1415927410125732)f=f+-6.2831854820251465}else f=f+6.2831854820251465;j=o==f;p=p+(s<<2)|0;g[p>>2]=0.0;i=c[d+748>>2]|0;m=+g[((i&2|0)==0?e+4|0:d+760|0)>>2];if(!(n<<24>>24==0|r&j)){if(i&4|0)c[(c[e+32>>2]|0)+(s<<2)>>2]=c[d+752>>2];k=+g[d+728>>2];l=+g[d+680>>2];h=o>f?1.0:0.0;do if(!(o>=f)){h=l/(m*+g[e>>2]);if(h<0.0)if(k>=o&o-h>k){f=(o-k)/h;break}else{f=k0.0)if(k<=f&f-hf?0.0:1.0;break}else f=0.0}else f=h;while(0);g[p>>2]=f*l*+g[d+732>>2]+ +g[p>>2];g[(c[e+36>>2]|0)+(s<<2)>>2]=-+g[d+684>>2];c[(c[e+40>>2]|0)+(s<<2)>>2]=c[d+684>>2]}if(!r)return;g[p>>2]=+g[p>>2]+q*m*+g[e>>2];if(i&1|0)c[(c[e+32>>2]|0)+(s<<2)>>2]=c[d+756>>2];do if(!j){j=(c[e+36>>2]|0)+(s<<2)|0;i=c[e+40>>2]|0;if((t|0)==1){g[j>>2]=0.0;f=3402823466385288598117041.0e14;break}else{g[j>>2]=-3402823466385288598117041.0e14;f=0.0;break}}else{g[(c[e+36>>2]|0)+(s<<2)>>2]=-3402823466385288598117041.0e14;f=3402823466385288598117041.0e14;i=c[e+40>>2]|0}while(0);g[i+(s<<2)>>2]=f;h=+g[d+704>>2];do if(h>0.0){f=+g[pa+328>>2]*la*oa+ +g[pa+332>>2]*na*oa+ +g[pa+336>>2]*ma*oa-(la*oa*+g[qa+328>>2]+na*oa*+g[qa+332>>2]+ma*oa*+g[qa+336>>2]);if((t|0)==1){if(!(f<0.0))break;if(!(+g[p>>2]<-(h*f)))break;g[p>>2]=-(h*f);break}else{if(!(f>0.0))break;if(!(+g[p>>2]>-(h*f)))break;g[p>>2]=-(h*f);break}}while(0);g[p>>2]=+g[d+700>>2]*+g[p>>2];return}function nc(b,d){b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0,k=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0.0,u=0.0,v=0.0,w=0,x=0,y=0,z=0,A=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0,L=0,M=0,N=0,P=0,Q=0,R=0,S=0,T=0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0,$=0,aa=0,ba=0,ca=0.0,da=0,ea=0,fa=0,ga=0;fa=l;l=l+16|0;da=c[b+28>>2]|0;ea=c[b+32>>2]|0;X=+g[da+344>>2];Y=+g[ea+344>>2];T=c[d+24>>2]|0;ca=a[b+180>>0]|0?1.0:-1.0;U=+g[b+936>>2]-+g[b+872>>2];W=+g[b+940>>2]-+g[b+876>>2];V=+g[b+944>>2]-+g[b+880>>2];Z=X+Y>0.0?Y/(X+Y):.5;K=c[b+824>>2]|0;L=c[b+840>>2]|0;M=c[b+856>>2]|0;N=c[b+888>>2]|0;P=c[b+904>>2]|0;Q=c[b+920>>2]|0;R=(a[b+49>>0]|0)==0;if(R){x=c[b+828>>2]|0;p=(c[j>>2]=x,+g[j>>2]);z=c[b+844>>2]|0;y=c[b+860>>2]|0;c[fa+4>>2]=z;f=c[b+832>>2]|0;w=c[b+848>>2]|0;s=c[b+864>>2]|0;c[fa>>2]=f;q=(c[j>>2]=y,+g[j>>2]);r=(c[j>>2]=f,+g[j>>2]);e=(c[j>>2]=w,+g[j>>2]);n=(c[j>>2]=s,+g[j>>2]);$=K;aa=L;ba=M}else{k=Z*(c[j>>2]=K,+g[j>>2]);n=Z*(c[j>>2]=L,+g[j>>2]);e=Z*(c[j>>2]=M,+g[j>>2]);m=(1.0-Z)*(c[j>>2]=N,+g[j>>2]);o=(1.0-Z)*(c[j>>2]=P,+g[j>>2]);e=e+(1.0-Z)*(c[j>>2]=Q,+g[j>>2]);h=1.0/+C(+((k+m)*(k+m)+(n+o)*(n+o)+e*e));i=(g[j>>2]=(k+m)*h,c[j>>2]|0);s=(g[j>>2]=(n+o)*h,c[j>>2]|0);w=(g[j>>2]=e*h,c[j>>2]|0);if(+B(+(e*h))>.7071067690849304){J=1.0/+C(+(e*h*e*h+(n+o)*h*(n+o)*h));g[fa+4>>2]=-(e*h*J);q=(n+o)*h*J;p=0.0;t=(k+m)*h*-(e*h*J);r=(e*h*e*h+(n+o)*h*(n+o)*h)*J;e=-((k+m)*h*(n+o)*h*J);f=0}else{t=(k+m)*h*(k+m)*h+(n+o)*h*(n+o)*h;J=1.0/+C(+t);f=(g[j>>2]=-((n+o)*h*J),c[j>>2]|0);g[fa+4>>2]=(k+m)*h*J;q=0.0;p=-((n+o)*h*J);t=t*J;r=-(e*h*(k+m)*h*J);e=e*h*-((n+o)*h*J)}y=(g[j>>2]=q,c[j>>2]|0);ga=(g[j>>2]=r,c[j>>2]|0);g[fa>>2]=r;S=(g[j>>2]=e,c[j>>2]|0);z=c[fa+4>>2]|0;n=t;$=i;aa=s;ba=w;x=f;f=ga;s=(g[j>>2]=t,c[j>>2]|0);w=S}S=c[d+12>>2]|0;g[S>>2]=p;c[S+4>>2]=z;c[S+8>>2]=y;c[S+(T<<2)>>2]=f;c[S+(T+1<<2)>>2]=w;c[S+(T+2<<2)>>2]=s;m=-p;i=c[d+20>>2]|0;g[i>>2]=m;k=+g[fa+4>>2];g[i+4>>2]=-k;g[i+8>>2]=-q;g[i+(T<<2)>>2]=-r;g[i+(T+1<<2)>>2]=-e;g[i+(T+2<<2)>>2]=-n;f=c[b+300>>2]|0;h=+g[b+280>>2];if(!(f&128))h=h*+g[d+4>>2];D=h*+g[d>>2];I=(c[j>>2]=L,+g[j>>2]);F=(c[j>>2]=Q,+g[j>>2]);E=(c[j>>2]=M,+g[j>>2]);H=(c[j>>2]=P,+g[j>>2]);J=(c[j>>2]=N,+g[j>>2]);G=(c[j>>2]=K,+g[j>>2]);ga=c[d+28>>2]|0;g[ga>>2]=D*((I*F-E*H)*p+(E*J-G*F)*k+(G*H-I*J)*q);g[ga+(T<<2)>>2]=D*((I*F-E*H)*r+(E*J-G*F)*e+(G*H-I*J)*n);if(f&64|0){ga=c[d+32>>2]|0;c[ga>>2]=c[b+292>>2];c[ga+(T<<2)>>2]=c[b+292>>2]}J=+g[da+52>>2];F=+g[da+56>>2];H=+g[da+60>>2];o=+g[ea+52>>2];h=+g[ea+56>>2];k=+g[ea+60>>2];if(R){u=+g[fa+4>>2];G=(h-F)*q-(k-H)*u;t=(k-H)*p-(o-J)*q;q=(o-J)*u-(h-F)*p;g[S+(T<<1<<2)>>2]=Z*G;g[S+((T<<1|1)<<2)>>2]=Z*t;g[S+((T<<1)+2<<2)>>2]=Z*q;g[i+(T<<1<<2)>>2]=(1.0-Z)*G;g[i+((T<<1|1)<<2)>>2]=(1.0-Z)*t;g[i+((T<<1)+2<<2)>>2]=(1.0-Z)*q;q=(h-F)*n-(k-H)*e;t=(k-H)*r-(o-J)*n;n=(o-J)*e-(h-F)*r;g[S+(T*3<<2)>>2]=Z*q;g[S+((T*3|0)+1<<2)>>2]=Z*t;g[S+((T*3|0)+2<<2)>>2]=Z*n;g[i+(T*3<<2)>>2]=(1.0-Z)*q;g[i+((T*3|0)+1<<2)>>2]=(1.0-Z)*t;g[i+((T*3|0)+2<<2)>>2]=(1.0-Z)*n;i=c[d+8>>2]|0;c[i+(T<<1<<2)>>2]=x;c[i+((T<<1|1)<<2)>>2]=z;c[i+((T<<1)+2<<2)>>2]=y;ga=c[fa>>2]|0;c[i+(T*3<<2)>>2]=ga;c[i+((T*3|0)+1<<2)>>2]=w;c[i+((T*3|0)+2<<2)>>2]=s;f=c[d+16>>2]|0;g[f+(T<<1<<2)>>2]=m;n=(c[j>>2]=z,+g[j>>2]);g[f+((T<<1|1)<<2)>>2]=-n;t=(c[j>>2]=y,+g[j>>2]);g[f+((T<<1)+2<<2)>>2]=-t;q=(c[j>>2]=ga,+g[j>>2]);g[f+(T*3<<2)>>2]=-q;r=(c[j>>2]=w,+g[j>>2]);g[f+((T*3|0)+1<<2)>>2]=-r;G=(c[j>>2]=s,+g[j>>2]);s=f;u=0.0;v=0.0;E=0.0;I=0.0;A=0.0;D=0.0;m=h-F;k=k-H;h=o-J;f=f+((T*3|0)+2<<2)|0}else{r=+g[b+936>>2]-o;t=+g[b+940>>2]-h;G=+g[b+944>>2]-k;o=(c[j>>2]=$,+g[j>>2]);p=(c[j>>2]=aa,+g[j>>2]);n=(c[j>>2]=ba,+g[j>>2]);I=+g[b+872>>2]-J;J=+g[b+876>>2]-F;k=+g[b+880>>2]-H;A=+g[b+1080>>2]-+g[b+1032>>2];D=o*(o*I+p*J+n*k)+o*A-o*(o*r+p*t+n*G);F=p*(o*I+p*J+n*k)+p*A-p*(o*r+p*t+n*G);A=n*(o*I+p*J+n*k)+n*A-n*(o*r+p*t+n*G);E=I-o*(o*I+p*J+n*k)+Z*D;u=J-p*(o*I+p*J+n*k)+Z*F;v=k-n*(o*I+p*J+n*k)+Z*A;D=r-o*(o*r+p*t+n*G)-(1.0-Z)*D;F=t-p*(o*r+p*t+n*G)-(1.0-Z)*F;A=G-n*(o*r+p*t+n*G)-(1.0-Z)*A;h=Z*(r-o*(o*r+p*t+n*G))+(1.0-Z)*(I-o*(o*I+p*J+n*k));e=Z*(t-p*(o*r+p*t+n*G))+(1.0-Z)*(J-p*(o*I+p*J+n*k));k=Z*(G-n*(o*r+p*t+n*G))+(1.0-Z)*(k-n*(o*I+p*J+n*k));g[fa+4>>2]=e;if(k*k+(h*h+e*e)>1.1920928955078125e-07){J=1.0/+C(+(k*k+(h*h+e*e)));i=(g[j>>2]=h*J,c[j>>2]|0);g[fa+4>>2]=J*e;t=J*k;m=J*e;e=h*J;f=(g[j>>2]=J*k,c[j>>2]|0)}else{i=c[b+828>>2]|0;ga=c[b+844>>2]|0;f=c[b+860>>2]|0;c[fa+4>>2]=ga;t=(c[j>>2]=f,+g[j>>2]);m=(c[j>>2]=ga,+g[j>>2]);e=(c[j>>2]=i,+g[j>>2])}q=p*t-n*m;r=n*e-o*t;p=o*m-p*e;g[fa>>2]=q;g[S+(T<<1<<2)>>2]=u*t-v*m;g[S+(T<<1<<2)+4>>2]=v*e-E*t;g[S+(T<<1<<2)+8>>2]=E*m-u*e;ga=c[d+20>>2]|0;g[ga+(T<<1<<2)>>2]=-(F*t-A*m);g[ga+((T<<1|1)<<2)>>2]=-(A*e-D*t);g[ga+((T<<1)+2<<2)>>2]=-(D*m-F*e);if(X<1.1920928955078125e-07|Y<1.1920928955078125e-07?(a[b+297>>0]|0)!=0:0){e=(1.0-Z)*(F*p-A*r);h=(1.0-Z)*(A*q-D*p);k=(1.0-Z)*(D*r-F*q);m=Z*(u*p-v*r);n=Z*(E*r-u*q);o=Z*(v*q-E*p)}else{e=F*p-A*r;h=A*q-D*p;k=D*r-F*q;m=u*p-v*r;n=E*r-u*q;o=v*q-E*p}s=(c[d+12>>2]|0)+(T*3<<2)|0;g[s>>2]=m;g[s+4>>2]=o;g[s+8>>2]=n;s=c[d+20>>2]|0;g[s+(T*3<<2)>>2]=-e;g[s+((T*3|0)+1<<2)>>2]=-h;g[s+((T*3|0)+2<<2)>>2]=-k;s=c[d+8>>2]|0;c[s+(T<<1<<2)>>2]=i;c[s+((T<<1|1)<<2)>>2]=c[fa+4>>2];c[s+((T<<1)+2<<2)>>2]=f;g[s+(T*3<<2)>>2]=q;g[s+((T*3|0)+1<<2)>>2]=r;g[s+((T*3|0)+2<<2)>>2]=p;f=c[d+16>>2]|0;I=(c[j>>2]=i,+g[j>>2]);g[f+(T<<1<<2)>>2]=-I;n=+g[fa+4>>2];g[f+((T<<1|1)<<2)>>2]=-n;g[f+((T<<1)+2<<2)>>2]=-t;g[f+(T*3<<2)>>2]=-q;g[f+((T*3|0)+1<<2)>>2]=-r;G=p;p=I;i=s;s=f;I=F;m=0.0;k=0.0;h=0.0;f=f+((T*3|0)+2<<2)|0}g[f>>2]=-G;K=c[b+300>>2]|0;e=+g[b+264>>2];if(!(K&32))e=e*+g[d+4>>2];J=e*+g[d>>2];L=c[d+28>>2]|0;g[L+(T<<1<<2)>>2]=J*(U*p+W*n+V*t);g[L+(T*3<<2)>>2]=J*(U*q+W*r+V*G);if(K&16|0){ga=c[d+32>>2]|0;c[ga+(T<<1<<2)>>2]=c[b+276>>2];c[ga+(T*3<<2)>>2]=c[b+276>>2]}if(!(a[b+296>>0]|0)){y=0;p=0.0}else{p=ca*+g[b+1032>>2];y=p>0.0?2:1}w=a[b+1096>>0]|0;x=(y|0)!=0;if(w&255|y){z=c[d+24>>2]<<2;c[i+(z<<2)>>2]=$;c[i+((z|1)<<2)>>2]=aa;c[i+((z|2)<<2)>>2]=ba;q=(c[j>>2]=$,+g[j>>2]);g[s+(z<<2)>>2]=-q;r=(c[j>>2]=aa,+g[j>>2]);g[s+((z|1)<<2)>>2]=-r;t=(c[j>>2]=ba,+g[j>>2]);g[s+((z|2)<<2)>>2]=-t;if(a[b+49>>0]|0){if(!(X<1.1920928955078125e-07|Y<1.1920928955078125e-07)){f=c[d+12>>2]|0;g[f+(z<<2)>>2]=t*u-r*v;g[f+((z|1)<<2)>>2]=q*v-t*E;g[f+((z|2)<<2)>>2]=r*E-q*u;f=c[d+20>>2]|0;g[f+(z<<2)>>2]=-(t*I-r*A);g[f+((z|1)<<2)>>2]=-(q*A-t*D);e=-(r*D-q*I);_=31}}else{X=t*m-r*k;Y=q*k-t*h;e=r*h-q*m;f=c[d+12>>2]|0;g[f+(z<<2)>>2]=Z*X;g[f+((z|1)<<2)>>2]=Z*Y;g[f+((z|2)<<2)>>2]=Z*e;f=c[d+20>>2]|0;g[f+(z<<2)>>2]=(1.0-Z)*X;g[f+((z|1)<<2)>>2]=(1.0-Z)*Y;e=(1.0-Z)*e;_=31}if((_|0)==31)g[f+((z|2)<<2)>>2]=e;f=+g[b+184>>2]==+g[b+188>>2];g[L+(z<<2)>>2]=0.0;i=(c[d+36>>2]|0)+(z<<2)|0;g[i>>2]=0.0;s=(c[d+40>>2]|0)+(z<<2)|0;g[s>>2]=0.0;o=+g[((K&512|0)==0?d+4|0:b+232|0)>>2];if(!(w<<24>>24==0|x&f)){if(K&1|0)c[(c[d+32>>2]|0)+(z<<2)>>2]=c[b+212>>2];n=+g[b+1100>>2];e=+g[b+1080>>2];h=+g[b+184>>2];k=+g[b+188>>2];m=o*+g[d>>2];do if(!(h>k))if(!(h==k)){if(n/m<0.0)if(e>=h?h-n/m>e:0){e=(h-e)/(n/m);break}else{e=e0.0)if(e<=k?k-n/mk?0.0:1.0;break}else e=0.0}else e=0.0;else e=1.0;while(0);g[L+(z<<2)>>2]=+g[L+(z<<2)>>2]-ca*e*n;g[i>>2]=+g[i>>2]-+g[b+1104>>2]*+g[d>>2];g[s>>2]=+g[b+1104>>2]*+g[d>>2]+ +g[s>>2]}if(x){g[L+(z<<2)>>2]=+g[L+(z<<2)>>2]+p*o*+g[d>>2];if(K&256|0)c[(c[d+32>>2]|0)+(z<<2)>>2]=c[b+244>>2];if(f){e=3402823466385288598117041.0e14;h=-3402823466385288598117041.0e14}else{ga=(y|0)==1;e=ga?0.0:3402823466385288598117041.0e14;h=ga?-3402823466385288598117041.0e14:0.0}g[i>>2]=h;g[s>>2]=e;Z=1.0-+g[b+240>>2];h=+B(+Z);do if(!(Z!=Z|0.0!=0.0|Z==0.0)){e=ca*(q*+g[da+312>>2]+r*+g[da+316>>2]+t*+g[da+320>>2]-(q*+g[ea+312>>2]+r*+g[ea+316>>2]+t*+g[ea+320>>2]));if((y|0)==1){if(!(e<0.0))break;if(!(+g[L+(z<<2)>>2]<-(h*e)))break;g[L+(z<<2)>>2]=-(h*e);break}else{if(!(e>0.0))break;if(!(+g[L+(z<<2)>>2]>-(h*e)))break;g[L+(z<<2)>>2]=-(h*e);break}}while(0);g[L+(z<<2)>>2]=+g[b+232>>2]*+g[L+(z<<2)>>2];f=5}else f=5}else f=4;if(!(a[b+297>>0]|0)){x=0;r=0.0}else{r=+g[b+1088>>2];x=r>0.0?1:2}i=a[b+1112>>0]|0;s=(x|0)!=0;if(!(i&255|x)){l=fa;return}w=O(c[d+24>>2]|0,f)|0;ga=c[d+12>>2]|0;c[ga+(w<<2)>>2]=$;c[ga+(w+1<<2)>>2]=aa;c[ga+(w+2<<2)>>2]=ba;v=(c[j>>2]=$,+g[j>>2]);ga=c[d+20>>2]|0;g[ga+(w<<2)>>2]=-v;u=(c[j>>2]=aa,+g[j>>2]);g[ga+(w+1<<2)>>2]=-u;t=(c[j>>2]=ba,+g[j>>2]);g[ga+(w+2<<2)>>2]=-t;o=+g[b+192>>2];p=+g[b+196>>2];q=+g[((K&2048|0)==0?d+4|0:b+248|0)>>2];if(!(i<<24>>24==0|s&o==p)){if(!(K&4)){h=p;k=o}else{c[(c[d+32>>2]|0)+(w<<2)>>2]=c[b+228>>2];h=+g[b+196>>2];k=+g[b+192>>2]}e=+g[b+1084>>2];n=+g[b+1116>>2];m=q*+g[d>>2];do if(!(k>h))if(!(k==h)){if(n/m<0.0)if(e>=k?k-n/m>e:0){e=(k-e)/(n/m);break}else{e=e0.0)if(e<=h?h-n/mh?0.0:1.0;break}else e=0.0}else e=0.0;else e=1.0;while(0);g[L+(w<<2)>>2]=e*n;g[(c[d+36>>2]|0)+(w<<2)>>2]=-(+g[b+1120>>2]*+g[d>>2]);g[(c[d+40>>2]|0)+(w<<2)>>2]=+g[b+1120>>2]*+g[d>>2]}if(!s){l=fa;return}g[L+(w<<2)>>2]=+g[L+(w<<2)>>2]+r*q*+g[d>>2];if(K&1024|0)c[(c[d+32>>2]|0)+(w<<2)>>2]=c[b+260>>2];do if(!(o==p)){i=(c[d+36>>2]|0)+(w<<2)|0;f=c[d+40>>2]|0;if((x|0)==1){g[i>>2]=0.0;e=3402823466385288598117041.0e14;break}else{g[i>>2]=-3402823466385288598117041.0e14;e=0.0;break}}else{g[(c[d+36>>2]|0)+(w<<2)>>2]=-3402823466385288598117041.0e14;e=3402823466385288598117041.0e14;f=c[d+40>>2]|0}while(0);g[f+(w<<2)>>2]=e;ca=1.0-+g[b+256>>2];h=+B(+ca);do if(!(ca!=ca|0.0!=0.0|ca==0.0)){d=c[b+28>>2]|0;ga=c[b+32>>2]|0;e=v*+g[d+328>>2]+u*+g[d+332>>2]+t*+g[d+336>>2]-(v*+g[ga+328>>2]+u*+g[ga+332>>2]+t*+g[ga+336>>2]);if((x|0)==1){if(!(e<0.0))break;if(!(+g[L+(w<<2)>>2]<-(h*e)))break;g[L+(w<<2)>>2]=-(h*e);break}else{if(!(e>0.0))break;if(!(+g[L+(w<<2)>>2]>-(h*e)))break;g[L+(w<<2)>>2]=-(h*e);break}}while(0);g[L+(w<<2)>>2]=+g[b+248>>2]*+g[L+(w<<2)>>2];l=fa;return}function oc(d,e,f,h,i,j){d=d|0;e=e|0;f=f|0;h=h|0;i=i|0;j=+j;var k=0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0,F=0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0;G=l;l=l+896|0;F=c[h+4>>2]|0;E=c[h+12>>2]|0;k=c[F+4>>2]|0;if((k|0)<20){c[G+712>>2]=3832;c[G+712+168>>2]=0;g[G+712+172>>2]=j;c[G+712+164>>2]=c[i+4>>2];g[G+352+308>>2]=9.999999747378752e-05;a[G+352+332>>0]=0;c[G+288>>2]=9312;c[G+64>>2]=9380;c[G+64+4>>2]=G+352;c[G+64+8>>2]=G+288;c[G+64+12>>2]=d;c[G+64+16>>2]=F;c[G+64+20>>2]=0;if((Jd(G+64|0,e,f,E,E,G+712|0)|0?(v=G+712+132|0,s=+g[v>>2],t=+g[G+712+136>>2],m=+g[G+712+140>>2],s*s+t*t+m*m>9.999999747378752e-05):0)?(n=+g[G+712+164>>2],n<+g[i+4>>2]):0){j=1.0/+C(+(s*s+t*t+m*m));g[v>>2]=s*j;g[G+712+136>>2]=t*j;g[G+712+140>>2]=m*j;c[G+16>>2]=c[h+8>>2];c[G+16+4>>2]=0;c[G+16+8>>2]=c[v>>2];c[G+16+8+4>>2]=c[v+4>>2];c[G+16+8+8>>2]=c[v+8>>2];c[G+16+8+12>>2]=c[v+12>>2];c[G+16+24>>2]=c[G+712+148>>2];c[G+16+24+4>>2]=c[G+712+148+4>>2];c[G+16+24+8>>2]=c[G+712+148+8>>2];c[G+16+24+12>>2]=c[G+712+148+12>>2];g[G+16+40>>2]=n;+jb[c[(c[i>>2]|0)+12>>2]&15](i,G+16|0,1)}l=G;return}if((k+-21|0)>>>0>=9){if((k|0)!=31){l=G;return}bj(15386);if((c[F+16>>2]|0)>0){k=0;do{v=c[F+24>>2]|0;m=+g[v+(k*80|0)>>2];p=+g[v+(k*80|0)+4>>2];s=+g[v+(k*80|0)+8>>2];n=+g[v+(k*80|0)+16>>2];q=+g[v+(k*80|0)+20>>2];u=+g[v+(k*80|0)+24>>2];o=+g[v+(k*80|0)+32>>2];r=+g[v+(k*80|0)+36>>2];y=+g[v+(k*80|0)+40>>2];O=+g[v+(k*80|0)+48>>2];N=+g[v+(k*80|0)+52>>2];D=+g[v+(k*80|0)+56>>2];v=c[v+(k*80|0)+64>>2]|0;M=+g[E>>2];L=+g[E+4>>2];K=+g[E+8>>2];J=+g[E+16>>2];I=+g[E+20>>2];H=+g[E+24>>2];t=+g[E+32>>2];x=+g[E+36>>2];z=+g[E+40>>2];A=O*M+N*L+D*K+ +g[E+48>>2];B=O*J+N*I+D*H+ +g[E+52>>2];D=O*t+N*x+D*z+ +g[E+56>>2];g[G+712>>2]=m*M+n*L+o*K;g[G+712+4>>2]=p*M+q*L+r*K;g[G+712+8>>2]=s*M+u*L+y*K;g[G+712+12>>2]=0.0;g[G+712+16>>2]=m*J+n*I+o*H;g[G+712+20>>2]=p*J+q*I+r*H;g[G+712+24>>2]=s*J+u*I+y*H;g[G+712+28>>2]=0.0;g[G+712+32>>2]=m*t+n*x+o*z;g[G+712+36>>2]=p*t+q*x+r*z;g[G+712+40>>2]=s*t+u*x+y*z;g[G+712+44>>2]=0.0;g[G+712+48>>2]=A;g[G+712+52>>2]=B;g[G+712+56>>2]=D;g[G+712+60>>2]=0.0;b[G+352+8>>1]=1;b[G+352+10>>1]=-1;c[G+352>>2]=6104;c[G+352+12>>2]=i;c[G+352+16>>2]=k;c[G+352+4>>2]=c[i+4>>2];w=c[h+8>>2]|0;c[G+288>>2]=h;c[G+288+4>>2]=v;c[G+288+8>>2]=w;c[G+288+12>>2]=G+712;c[G+288+16>>2]=-1;c[G+288+20>>2]=k;oc(d,e,f,G+288|0,G+352|0,j);k=k+1|0}while((k|0)<(c[F+16>>2]|0))}k=c[2405]|0;F=(c[k+16>>2]|0)+-1|0;c[k+16>>2]=F;if(F|0){l=G;return}do if(c[k+4>>2]|0){Za(G+712|0,0)|0;F=c[6471]|0;g[k+8>>2]=+g[k+8>>2]+ +(((c[G+712+4>>2]|0)-(c[F+4>>2]|0)+(((c[G+712>>2]|0)-(c[F>>2]|0)|0)*1e6|0)-(c[k+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[k+16>>2]|0)){k=c[2405]|0;break}else{l=G;return}}while(0);c[2405]=c[k+20>>2];l=G;return}switch(k|0){case 21:{m=+g[E>>2];n=+g[E+16>>2];o=+g[E+32>>2];p=+g[E+4>>2];q=+g[E+20>>2];r=+g[E+36>>2];s=+g[E+8>>2];t=+g[E+24>>2];u=+g[E+40>>2];A=-+g[E+48>>2];B=-+g[E+52>>2];D=-+g[E+56>>2];z=+g[e+48>>2];y=+g[e+52>>2];x=+g[e+56>>2];g[G+352>>2]=m*A+n*B+o*D+(m*z+n*y+o*x);g[G+352+4>>2]=p*A+q*B+r*D+(p*z+q*y+r*x);g[G+352+8>>2]=s*A+t*B+u*D+(s*z+t*y+u*x);g[G+352+12>>2]=0.0;x=+g[f+48>>2];y=+g[f+52>>2];z=+g[f+56>>2];P=+g[f>>2];H=+g[f+16>>2];I=+g[f+32>>2];J=+g[f+4>>2];K=+g[f+20>>2];L=+g[f+36>>2];M=+g[f+8>>2];N=+g[f+24>>2];O=+g[f+40>>2];g[G+288>>2]=m*P+n*H+o*I;g[G+288+4>>2]=m*J+n*K+o*L;g[G+288+8>>2]=m*M+n*N+o*O;g[G+288+12>>2]=0.0;g[G+288+16>>2]=p*P+q*H+r*I;g[G+288+20>>2]=p*J+q*K+r*L;g[G+288+24>>2]=p*M+q*N+r*O;g[G+288+28>>2]=0.0;g[G+288+32>>2]=s*P+t*H+u*I;g[G+288+36>>2]=s*J+t*K+u*L;g[G+288+40>>2]=s*M+t*N+u*O;k=G+288+44|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0;k=c[h+8>>2]|0;O=+gb[c[(c[F>>2]|0)+48>>2]&15](F);c[G+64>>2]=9240;c[G+64+4>>2]=d;c[G+64+8>>2]=c[e>>2];c[G+64+8+4>>2]=c[e+4>>2];c[G+64+8+8>>2]=c[e+8>>2];c[G+64+8+12>>2]=c[e+12>>2];c[G+64+24>>2]=c[e+16>>2];c[G+64+24+4>>2]=c[e+16+4>>2];c[G+64+24+8>>2]=c[e+16+8>>2];c[G+64+24+12>>2]=c[e+16+12>>2];c[G+64+40>>2]=c[e+32>>2];c[G+64+40+4>>2]=c[e+32+4>>2];c[G+64+40+8>>2]=c[e+32+8>>2];c[G+64+40+12>>2]=c[e+32+12>>2];c[G+64+56>>2]=c[e+48>>2];c[G+64+56+4>>2]=c[e+48+4>>2];c[G+64+56+8>>2]=c[e+48+8>>2];c[G+64+56+12>>2]=c[e+48+12>>2];c[G+64+72>>2]=c[f>>2];c[G+64+72+4>>2]=c[f+4>>2];c[G+64+72+8>>2]=c[f+8>>2];c[G+64+72+12>>2]=c[f+12>>2];c[G+64+88>>2]=c[f+16>>2];c[G+64+88+4>>2]=c[f+16+4>>2];c[G+64+88+8>>2]=c[f+16+8>>2];c[G+64+88+12>>2]=c[f+16+12>>2];c[G+64+104>>2]=c[f+32>>2];c[G+64+104+4>>2]=c[f+32+4>>2];c[G+64+104+8>>2]=c[f+32+8>>2];c[G+64+104+12>>2]=c[f+32+12>>2];c[G+64+120>>2]=c[f+48>>2];c[G+64+120+4>>2]=c[f+48+4>>2];c[G+64+120+8>>2]=c[f+48+8>>2];c[G+64+120+12>>2]=c[f+48+12>>2];c[G+64+136>>2]=c[E>>2];c[G+64+136+4>>2]=c[E+4>>2];c[G+64+136+8>>2]=c[E+8>>2];c[G+64+136+12>>2]=c[E+12>>2];c[G+64+152>>2]=c[E+16>>2];c[G+64+152+4>>2]=c[E+16+4>>2];c[G+64+152+8>>2]=c[E+16+8>>2];c[G+64+152+12>>2]=c[E+16+12>>2];c[G+64+168>>2]=c[E+32>>2];c[G+64+168+4>>2]=c[E+32+4>>2];c[G+64+168+8>>2]=c[E+32+8>>2];c[G+64+168+12>>2]=c[E+32+12>>2];c[G+64+184>>2]=c[E+48>>2];c[G+64+184+4>>2]=c[E+48+4>>2];c[G+64+184+8>>2]=c[E+48+8>>2];c[G+64+184+12>>2]=c[E+48+12>>2];g[G+64+204>>2]=O;c[G+64>>2]=6056;c[G+64+212>>2]=i;c[G+64+216>>2]=k;c[G+64+220>>2]=F;c[G+64+200>>2]=c[i+4>>2];g[G+64+208>>2]=j;Nb[c[(c[d>>2]|0)+8>>2]&127](d,G+288|0,G+16|0,G);k=c[F+48>>2]|0;c[G+712>>2]=7096;c[G+712+4>>2]=k;c[G+712+8>>2]=G+64;k=c[F+52>>2]|0;if(!(a[k+60>>0]|0))De(k,G+712|0,G+352|0,m*A+n*B+o*D+(m*x+n*y+o*z),p*A+q*B+r*D+(p*x+q*y+r*z),s*A+t*B+u*D+(s*x+t*y+u*z),G+16|0,G);else ke(k,G+712|0,G+352|0,m*A+n*B+o*D+(m*x+n*y+o*z),p*A+q*B+r*D+(p*x+q*y+r*z),s*A+t*B+u*D+(s*x+t*y+u*z),G+16|0,G,c[k+56>>2]|0);l=G;return}case 28:{c[G+712>>2]=3832;c[G+712+168>>2]=0;g[G+712+172>>2]=j;c[G+712+164>>2]=c[i+4>>2];c[G+352>>2]=9380;c[G+352+4>>2]=0;c[G+352+8>>2]=0;c[G+352+12>>2]=d;c[G+352+16>>2]=0;c[G+352+20>>2]=F;if((Jd(G+352|0,e,f,E,E,G+712|0)|0?(w=G+712+132|0,o=+g[w>>2],p=+g[G+712+136>>2],q=+g[G+712+140>>2],o*o+p*p+q*q>9.999999747378752e-05):0)?(r=+g[G+712+164>>2],r<+g[i+4>>2]):0){P=1.0/+C(+(o*o+p*p+q*q));g[w>>2]=o*P;g[G+712+136>>2]=p*P;g[G+712+140>>2]=q*P;c[G+288>>2]=c[h+8>>2];c[G+288+4>>2]=0;c[G+288+8>>2]=c[w>>2];c[G+288+8+4>>2]=c[w+4>>2];c[G+288+8+8>>2]=c[w+8>>2];c[G+288+8+12>>2]=c[w+12>>2];c[G+288+24>>2]=c[G+712+148>>2];c[G+288+24+4>>2]=c[G+712+148+4>>2];c[G+288+24+8>>2]=c[G+712+148+8>>2];c[G+288+24+12>>2]=c[G+712+148+12>>2];g[G+288+40>>2]=r;+jb[c[(c[i>>2]|0)+12>>2]&15](i,G+288|0,1)}l=G;return}default:{p=+g[E>>2];q=+g[E+16>>2];r=+g[E+32>>2];x=+g[E+4>>2];y=+g[E+20>>2];z=+g[E+36>>2];K=+g[E+8>>2];M=+g[E+24>>2];O=+g[E+40>>2];I=-+g[E+48>>2];H=-+g[E+52>>2];D=-+g[E+56>>2];A=+g[e+48>>2];B=+g[e+52>>2];u=+g[e+56>>2];s=p*I+q*H+r*D+(p*A+q*B+r*u);t=x*I+y*H+z*D+(x*A+y*B+z*u);u=K*I+M*H+O*D+(K*A+M*B+O*u);B=+g[f+48>>2];A=+g[f+52>>2];m=+g[f+56>>2];o=p*I+q*H+r*D+(p*B+q*A+r*m);n=x*I+y*H+z*D+(x*B+y*A+z*m);m=K*I+M*H+O*D+(K*B+M*A+O*m);A=+g[f>>2];B=+g[f+16>>2];D=+g[f+32>>2];H=+g[f+4>>2];I=+g[f+20>>2];J=+g[f+36>>2];L=+g[f+8>>2];N=+g[f+24>>2];P=+g[f+40>>2];g[G+712>>2]=p*A+q*B+r*D;g[G+712+4>>2]=p*H+q*I+r*J;g[G+712+8>>2]=p*L+q*N+r*P;g[G+712+12>>2]=0.0;g[G+712+16>>2]=x*A+y*B+z*D;g[G+712+20>>2]=x*H+y*I+z*J;g[G+712+24>>2]=x*L+y*N+z*P;g[G+712+28>>2]=0.0;g[G+712+32>>2]=K*A+M*B+O*D;g[G+712+36>>2]=K*H+M*I+O*J;g[G+712+40>>2]=K*L+M*N+O*P;w=G+712+44|0;c[w>>2]=0;c[w+4>>2]=0;c[w+8>>2]=0;c[w+12>>2]=0;c[w+16>>2]=0;h=c[h+8>>2]|0;P=+gb[c[(c[F>>2]|0)+48>>2]&15](F);c[G+352>>2]=9240;c[G+352+4>>2]=d;c[G+352+8>>2]=c[e>>2];c[G+352+8+4>>2]=c[e+4>>2];c[G+352+8+8>>2]=c[e+8>>2];c[G+352+8+12>>2]=c[e+12>>2];c[G+352+24>>2]=c[e+16>>2];c[G+352+24+4>>2]=c[e+16+4>>2];c[G+352+24+8>>2]=c[e+16+8>>2];c[G+352+24+12>>2]=c[e+16+12>>2];c[G+352+40>>2]=c[e+32>>2];c[G+352+40+4>>2]=c[e+32+4>>2];c[G+352+40+8>>2]=c[e+32+8>>2];c[G+352+40+12>>2]=c[e+32+12>>2];c[G+352+56>>2]=c[e+48>>2];c[G+352+56+4>>2]=c[e+48+4>>2];c[G+352+56+8>>2]=c[e+48+8>>2];c[G+352+56+12>>2]=c[e+48+12>>2];c[G+352+72>>2]=c[f>>2];c[G+352+72+4>>2]=c[f+4>>2];c[G+352+72+8>>2]=c[f+8>>2];c[G+352+72+12>>2]=c[f+12>>2];c[G+352+88>>2]=c[f+16>>2];c[G+352+88+4>>2]=c[f+16+4>>2];c[G+352+88+8>>2]=c[f+16+8>>2];c[G+352+88+12>>2]=c[f+16+12>>2];c[G+352+104>>2]=c[f+32>>2];c[G+352+104+4>>2]=c[f+32+4>>2];c[G+352+104+8>>2]=c[f+32+8>>2];c[G+352+104+12>>2]=c[f+32+12>>2];c[G+352+120>>2]=c[f+48>>2];c[G+352+120+4>>2]=c[f+48+4>>2];c[G+352+120+8>>2]=c[f+48+8>>2];c[G+352+120+12>>2]=c[f+48+12>>2];c[G+352+136>>2]=c[E>>2];c[G+352+136+4>>2]=c[E+4>>2];c[G+352+136+8>>2]=c[E+8>>2];c[G+352+136+12>>2]=c[E+12>>2];c[G+352+152>>2]=c[E+16>>2];c[G+352+152+4>>2]=c[E+16+4>>2];c[G+352+152+8>>2]=c[E+16+8>>2];c[G+352+152+12>>2]=c[E+16+12>>2];c[G+352+168>>2]=c[E+32>>2];c[G+352+168+4>>2]=c[E+32+4>>2];c[G+352+168+8>>2]=c[E+32+8>>2];c[G+352+168+12>>2]=c[E+32+12>>2];c[G+352+184>>2]=c[E+48>>2];c[G+352+184+4>>2]=c[E+48+4>>2];c[G+352+184+8>>2]=c[E+48+8>>2];c[G+352+184+12>>2]=c[E+48+12>>2];g[G+352+204>>2]=P;c[G+352>>2]=6080;c[G+352+212>>2]=i;c[G+352+216>>2]=h;c[G+352+220>>2]=F;c[G+352+200>>2]=c[i+4>>2];g[G+352+208>>2]=j;Nb[c[(c[d>>2]|0)+8>>2]&127](d,G+712|0,G+288|0,G+64|0);g[G+16>>2]=s;g[G+16+4>>2]=t;g[G+16+8>>2]=u;g[G+16+12>>2]=0.0;if(o>2]=o;r=o}else r=s;if(n>2]=n;p=n}else p=t;if(m>2]=m;q=m}else q=u;g[G>>2]=s;g[G+4>>2]=t;g[G+8>>2]=u;g[G+12>>2]=0.0;if(s>2]=o;else o=s;if(t>2]=n;else n=t;if(u>2]=m;else m=u;g[G+16>>2]=+g[G+288>>2]+r;g[G+16+4>>2]=+g[G+288+4>>2]+p;g[G+16+8>>2]=+g[G+288+8>>2]+q;g[G>>2]=+g[G+64>>2]+o;g[G+4>>2]=+g[G+64+4>>2]+n;g[G+8>>2]=+g[G+64+8>>2]+m;Nb[c[(c[F>>2]|0)+64>>2]&127](F,G+352|0,G+16|0,G);l=G;return}}}function pc(d,e,f){d=d|0;e=e|0;f=+f;var h=0,i=0.0,j=0.0,k=0,m=0.0,n=0,o=0.0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0;t=l;l=l+528|0;if((a[d+171>>0]|0)==0?+g[d+172>>2]<=0.0:0){l=t;return}a[d+168>>0]=(qb[c[(c[d>>2]|0)+48>>2]&127](d)|0)&1;j=+g[d+16>>2]-+g[d+44>>2]*f;g[d+16>>2]=j;if(j>0.0?(i=+g[d+28>>2],j>i):0)g[d+16>>2]=i;else i=j;if(i<0.0?(r=+B(+i),m=+B(+(+g[d+24>>2])),r>m):0){g[d+16>>2]=-m;i=-m}g[d+20>>2]=i*f;h=c[d+8>>2]|0;c[t>>2]=c[h+4>>2];c[t+4>>2]=c[h+4+4>>2];c[t+8>>2]=c[h+4+8>>2];c[t+12>>2]=c[h+4+12>>2];c[t+16>>2]=c[h+20>>2];c[t+16+4>>2]=c[h+20+4>>2];c[t+16+8>>2]=c[h+20+8>>2];c[t+16+12>>2]=c[h+20+12>>2];c[t+32>>2]=c[h+36>>2];c[t+32+4>>2]=c[h+36+4>>2];c[t+32+8>>2]=c[h+36+8>>2];c[t+32+12>>2]=c[h+36+12>>2];c[t+48>>2]=c[h+52>>2];c[t+48+4>>2]=c[h+52+4>>2];c[t+48+8>>2]=c[h+52+8>>2];c[t+48+12>>2]=c[h+52+12>>2];h=c[d+176>>2]|0;if((a[22768]|0)==0?Yy(22768)|0:0){c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}m=+g[d+20>>2];m=+g[d+52>>2]+(m>0.0?m:0.0);q=+g[24652+(h<<4)+4>>2]*m+ +g[d+96>>2];r=m*+g[24652+(h<<4)+8>>2]+ +g[d+100>>2];g[d+112>>2]=+g[d+92>>2]+ +g[24652+(h<<4)>>2]*m;g[d+116>>2]=q;g[d+120>>2]=r;g[d+124>>2]=0.0;c[t+456>>2]=1065353216;c[t+456+4>>2]=0;c[t+456+4+4>>2]=0;c[t+456+4+8>>2]=0;c[t+456+4+12>>2]=0;c[t+456+20>>2]=1065353216;c[t+456+24>>2]=0;c[t+456+24+4>>2]=0;c[t+456+24+8>>2]=0;c[t+456+24+12>>2]=0;c[t+456+40>>2]=1065353216;h=t+456+44|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[t+392>>2]=1065353216;c[t+392+4>>2]=0;c[t+392+4+4>>2]=0;c[t+392+4+8>>2]=0;c[t+392+4+12>>2]=0;c[t+392+20>>2]=1065353216;c[t+392+24>>2]=0;c[t+392+24+4>>2]=0;c[t+392+24+8>>2]=0;c[t+392+24+12>>2]=0;c[t+392+40>>2]=1065353216;h=t+392+44|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;h=c[d+176>>2]|0;if((a[22768]|0)==0?Yy(22768)|0:0){c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}k=c[d+12>>2]|0;m=+gb[c[(c[k>>2]|0)+48>>2]&15](k);m=m+ +g[d+56>>2];q=m*+g[24652+(h<<4)+4>>2]+ +g[d+96>>2];r=m*+g[24652+(h<<4)+8>>2]+ +g[d+100>>2];g[t+456+48>>2]=+g[24652+(h<<4)>>2]*m+ +g[d+92>>2];g[t+456+52>>2]=q;g[t+456+56>>2]=r;g[t+456+60>>2]=0.0;c[t+392+48>>2]=c[d+112>>2];c[t+392+48+4>>2]=c[d+112+4>>2];c[t+392+48+8>>2]=c[d+112+8>>2];c[t+392+48+12>>2]=c[d+112+12>>2];h=c[d+8>>2]|0;k=c[d+176>>2]|0;if((a[22768]|0)==0?Yy(22768)|0:0){c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}m=-+g[24652+(k<<4)>>2];q=-+g[24652+(k<<4)+4>>2];r=-+g[24652+(k<<4)+8>>2];g[t+288+4>>2]=1.0;b[t+288+8>>1]=1;b[t+288+10>>1]=-1;p=t+288+12|0;c[t+288+76>>2]=0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;c[p+16>>2]=0;c[p+20>>2]=0;c[p+24>>2]=0;c[p+28>>2]=0;c[t+288>>2]=5132;c[t+288+80>>2]=h;g[t+288+84>>2]=m;g[t+288+88>>2]=q;g[t+288+92>>2]=r;g[t+288+96>>2]=0.0;g[t+288+100>>2]=.707099974155426;h=c[d+8>>2]|0;p=c[(c[h+188>>2]|0)+4>>2]|0;b[t+288+8>>1]=p;b[t+288+10>>1]=p>>>16;if(!(a[d+170>>0]|0))zd(e,c[d+12>>2]|0,t+456|0,t+392|0,t+288|0,0.0);else gd(h,c[d+12>>2]|0,t+456|0,t+392|0,t+288|0,+g[e+56>>2]);if(+g[t+288+4>>2]<1.0){h=c[d+176>>2]|0;if((a[22768]|0)==0?Yy(22768)|0:0){c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}do if(+g[t+288+44>>2]*+g[24652+(h<<4)>>2]+ +g[t+288+48>>2]*+g[24652+(h<<4)+4>>2]+ +g[t+288+52>>2]*+g[24652+(h<<4)+8>>2]>0.0){i=+g[t+288+4>>2];g[d+108>>2]=+g[d+52>>2]*i;if(!(a[d+180>>0]|0)){c[d+92>>2]=c[d+112>>2];c[d+92+4>>2]=c[d+112+4>>2];c[d+92+8>>2]=c[d+112+8>>2];c[d+92+12>>2]=c[d+112+12>>2];break}else{g[d+92>>2]=(1.0-i)*+g[d+92>>2]+i*+g[d+112>>2];g[d+96>>2]=(1.0-i)*+g[d+96>>2]+i*+g[d+116>>2];g[d+100>>2]=(1.0-i)*+g[d+100>>2]+i*+g[d+120>>2];break}}while(0);g[d+16>>2]=0.0;g[d+20>>2]=0.0}else{c[d+108>>2]=c[d+52>>2];c[d+92>>2]=c[d+112>>2];c[d+92+4>>2]=c[d+112+4>>2];c[d+92+8>>2]=c[d+112+8>>2];c[d+92+12>>2]=c[d+112+12>>2]}if(!(a[d+171>>0]|0)){q=+g[d+172>>2];r=q>f?f:q;g[d+172>>2]=q-f;Rd(d,e,r*+g[d+60>>2],r*+g[d+64>>2],r*+g[d+68>>2])}else Rd(d,e,+g[d+60>>2],+g[d+64>>2],+g[d+68>>2]);c[t+272>>2]=c[d+112>>2];c[t+272+4>>2]=c[d+112+4>>2];c[t+272+8>>2]=c[d+112+8>>2];c[t+272+12>>2]=c[d+112+12>>2];i=+g[d+16>>2];i=(i<0.0?-i:0.0)*f;if(i>0.0?(o=+g[d+24>>2],i>o):0){p=b[d+168>>1]|0;i=(p&255)<<24>>24!=0|(p&65535)<256?o:i}h=c[d+176>>2]|0;if((a[22768]|0)==0?Yy(22768)|0:0){c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}o=i+ +g[d+108>>2];q=+g[24652+(h<<4)>>2]*o;r=o*+g[24652+(h<<4)+4>>2];o=o*+g[24652+(h<<4)+8>>2];g[d+112>>2]=+g[d+112>>2]-q;g[d+116>>2]=+g[d+116>>2]-r;g[d+120>>2]=+g[d+120>>2]-o;h=c[d+8>>2]|0;k=c[d+176>>2]|0;if((a[22768]|0)==0?Yy(22768)|0:0){c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}n=c[d+40>>2]|0;p=t+168+4|0;g[p>>2]=1.0;b[t+168+8>>1]=1;b[t+168+10>>1]=-1;u=t+168+12|0;c[t+168+76>>2]=0;c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;c[u+16>>2]=0;c[u+20>>2]=0;c[u+24>>2]=0;c[u+28>>2]=0;c[t+168>>2]=5132;c[t+168+80>>2]=h;c[t+168+84>>2]=c[24652+(k<<4)>>2];c[t+168+84+4>>2]=c[24652+(k<<4)+4>>2];c[t+168+84+8>>2]=c[24652+(k<<4)+8>>2];c[t+168+84+12>>2]=c[24652+(k<<4)+12>>2];c[t+168+100>>2]=n;k=c[d+8>>2]|0;h=c[(c[k+188>>2]|0)+4>>2]|0;b[t+168+8>>1]=h;b[t+168+10>>1]=h>>>16;h=c[d+176>>2]|0;if((a[22768]|0)==0?Yy(22768)|0:0){c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}u=c[d+40>>2]|0;g[t+64+4>>2]=1.0;b[t+64+8>>1]=1;b[t+64+10>>1]=-1;n=t+64+12|0;c[t+64+76>>2]=0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;c[n+16>>2]=0;c[n+20>>2]=0;c[n+24>>2]=0;c[n+28>>2]=0;c[t+64>>2]=5132;c[t+64+80>>2]=k;c[t+64+84>>2]=c[24652+(h<<4)>>2];c[t+64+84+4>>2]=c[24652+(h<<4)+4>>2];c[t+64+84+8>>2]=c[24652+(h<<4)+8>>2];c[t+64+84+12>>2]=c[24652+(h<<4)+12>>2];c[t+64+100>>2]=u;h=c[(c[(c[d+8>>2]|0)+188>>2]|0)+4>>2]|0;b[t+64+8>>1]=h;b[t+64+10>>1]=h>>>16;i=+g[d+112>>2];j=+g[d+116>>2];m=+g[d+120>>2];h=0;while(1){c[t+456>>2]=1065353216;c[t+456+4>>2]=0;c[t+456+4+4>>2]=0;c[t+456+4+8>>2]=0;c[t+456+4+12>>2]=0;c[t+456+20>>2]=1065353216;c[t+456+24>>2]=0;c[t+456+24+4>>2]=0;c[t+456+24+8>>2]=0;c[t+456+24+12>>2]=0;c[t+456+40>>2]=1065353216;c[t+456+44>>2]=0;c[t+392>>2]=1065353216;c[t+392+4>>2]=0;c[t+392+4+4>>2]=0;c[t+392+4+8>>2]=0;c[t+392+4+12>>2]=0;c[t+392+20>>2]=1065353216;c[t+392+24>>2]=0;c[t+392+24+4>>2]=0;c[t+392+24+8>>2]=0;c[t+392+24+12>>2]=0;c[t+392+40>>2]=1065353216;c[t+392+44>>2]=0;c[t+288>>2]=1065353216;c[t+288+4>>2]=0;c[t+288+4+4>>2]=0;c[t+288+4+8>>2]=0;c[t+288+4+12>>2]=0;c[t+288+20>>2]=1065353216;c[t+288+24>>2]=0;c[t+288+24+4>>2]=0;c[t+288+24+8>>2]=0;c[t+288+24+12>>2]=0;c[t+288+40>>2]=1065353216;c[t+288+44>>2]=0;c[t+456+48>>2]=c[d+92>>2];c[t+456+48+4>>2]=c[d+92+4>>2];c[t+456+48+8>>2]=c[d+92+8>>2];c[t+456+48+12>>2]=c[d+92+12>>2];c[t+392+48>>2]=c[d+112>>2];c[t+392+48+4>>2]=c[d+112+4>>2];c[t+392+48+8>>2]=c[d+112+8>>2];c[t+392+48+12>>2]=c[d+112+12>>2];g[t+288+48>>2]=i-q;g[t+288+52>>2]=j-r;g[t+288+56>>2]=m-o;g[t+288+60>>2]=0.0;if(!(a[d+170>>0]|0)){zd(e,c[d+12>>2]|0,t+456|0,t+392|0,t+168|0,+g[e+56>>2]);if(!(+g[p>>2]<1.0))zd(e,c[d+12>>2]|0,t+456|0,t+288|0,t+64|0,+g[e+56>>2])}else{gd(c[d+8>>2]|0,c[d+12>>2]|0,t+456|0,t+392|0,t+168|0,+g[e+56>>2]);if(!(+g[p>>2]<1.0))gd(c[d+8>>2]|0,c[d+12>>2]|0,t+456|0,t+288|0,t+64|0,+g[e+56>>2])}j=+g[d+16>>2];j=(j<0.0?-j:0.0)*f;n=(a[d+182>>0]|0)==0;if(!n?+g[p>>2]<1.0:0)k=1;else k=+g[t+64+4>>2]<1.0;if(!(j>0.0))break;i=+g[d+52>>2];if(h|(!(j>1]|0;if(!((u&255)<<24>>24!=0|(u&65535)<256)){h=0;break}c[d+112>>2]=c[t+272>>2];c[d+112+4>>2]=c[t+272+4>>2];c[d+112+8>>2]=c[t+272+8>>2];c[d+112+12>>2]=c[t+272+12>>2];h=c[d+176>>2]|0;do if(!(a[22768]|0)){if(!(Yy(22768)|0))break;c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}while(0);i=i+ +g[d+108>>2];j=i*+g[24652+(h<<4)+4>>2];m=i*+g[24652+(h<<4)+8>>2];i=+g[d+112>>2]-+g[24652+(h<<4)>>2]*i;g[d+112>>2]=i;j=+g[d+116>>2]-j;g[d+116>>2]=j;m=+g[d+120>>2]-m;g[d+120>>2]=m;h=1}m=+g[p>>2];if(h|m<1.0){i=+g[d+96>>2];j=(i-+g[t+168+64>>2])*.5;do if(!n)if(!(a[d+181>>0]|0)){g[d+92>>2]=(1.0-j)*+g[d+92>>2]+j*+g[d+112>>2];g[d+96>>2]=(1.0-j)*i+j*+g[d+116>>2];g[d+100>>2]=(1.0-j)*+g[d+100>>2]+j*+g[d+120>>2];h=d+181|0;break}else{g[d+92>>2]=(1.0-m)*+g[d+92>>2]+m*+g[d+112>>2];g[d+96>>2]=(1.0-m)*i+m*+g[d+116>>2];g[d+100>>2]=(1.0-m)*+g[d+100>>2]+m*+g[d+120>>2];h=d+181|0;break}else{g[d+92>>2]=(1.0-m)*+g[d+92>>2]+m*+g[d+112>>2];g[d+96>>2]=(1.0-m)*i+m*+g[d+116>>2];g[d+100>>2]=(1.0-m)*+g[d+100>>2]+m*+g[d+120>>2];h=d+181|0}while(0);a[h>>0]=0;g[d+16>>2]=0.0;g[d+20>>2]=0.0;a[d+169>>0]=0}else{a[d+181>>0]=1;if((!n?(s=+g[d+24>>2],j>s):0)?(u=b[d+168>>1]|0,(u&255)<<24>>24!=0|(u&65535)<256):0){g[d+112>>2]=q+ +g[d+112>>2];g[d+116>>2]=r+ +g[d+116>>2];g[d+120>>2]=o+ +g[d+120>>2];h=c[d+176>>2]|0;do if(!(a[22768]|0)){if(!(Yy(22768)|0))break;c[6163]=1065353216;c[6164]=0;c[6165]=0;c[6166]=0;c[6167]=0;c[6168]=1065353216;c[6169]=0;c[6170]=0;c[6171]=0;c[6172]=0;c[6173]=1065353216;g[6174]=0.0}while(0);r=s+ +g[d+108>>2];f=r*+g[24652+(h<<4)+4>>2];s=r*+g[24652+(h<<4)+8>>2];g[d+112>>2]=+g[d+112>>2]-+g[24652+(h<<4)>>2]*r;g[d+116>>2]=+g[d+116>>2]-f;g[d+120>>2]=+g[d+120>>2]-s}c[d+92>>2]=c[d+112>>2];c[d+92+4>>2]=c[d+112+4>>2];c[d+92+8>>2]=c[d+112+8>>2];c[d+92+12>>2]=c[d+112+12>>2]}c[t+48>>2]=c[d+92>>2];c[t+48+4>>2]=c[d+92+4>>2];c[t+48+8>>2]=c[d+92+8>>2];c[t+48+12>>2]=c[d+92+12>>2];u=c[d+8>>2]|0;c[u+260>>2]=(c[u+260>>2]|0)+1;c[u+4>>2]=c[t>>2];c[u+4+4>>2]=c[t+4>>2];c[u+4+8>>2]=c[t+8>>2];c[u+4+12>>2]=c[t+12>>2];c[u+20>>2]=c[t+16>>2];c[u+20+4>>2]=c[t+16+4>>2];c[u+20+8>>2]=c[t+16+8>>2];c[u+20+12>>2]=c[t+16+12>>2];c[u+36>>2]=c[t+32>>2];c[u+36+4>>2]=c[t+32+4>>2];c[u+36+8>>2]=c[t+32+8>>2];c[u+36+12>>2]=c[t+32+12>>2];c[u+52>>2]=c[t+48>>2];c[u+52+4>>2]=c[t+48+4>>2];c[u+52+8>>2]=c[t+48+8>>2];c[u+52+12>>2]=c[t+48+12>>2];l=t;return}function qc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0,y=0,z=0.0,A=0;A=l;l=l+112|0;c[b+164>>2]=1065353216;c[b+168>>2]=1065353216;c[b+172>>2]=1065353216;g[b+176>>2]=0.0;c[b+180>>2]=0;g[b+184>>2]=999999984306749440.0;c[b+188>>2]=0;c[b+188+4>>2]=0;c[b+188+8>>2]=0;c[b+188+12>>2]=0;c[b+204>>2]=1;c[b+208>>2]=-1;c[b+212>>2]=-1;c[b+216>>2]=1;g[b+220>>2]=0.0;g[b+224>>2]=.5;g[b+228>>2]=0.0;g[b+232>>2]=0.0;c[b+236>>2]=1;c[b+240>>2]=0;g[b+244>>2]=1.0;c[b+248>>2]=0;c[b+248+4>>2]=0;c[b+248+8>>2]=0;c[b+248+12>>2]=0;c[b+4>>2]=1065353216;c[b+8>>2]=0;c[b+8+4>>2]=0;c[b+8+8>>2]=0;c[b+8+12>>2]=0;c[b+24>>2]=1065353216;c[b+28>>2]=0;c[b+28+4>>2]=0;c[b+28+8>>2]=0;c[b+28+12>>2]=0;c[b+44>>2]=1065353216;c[b+48>>2]=0;c[b+48+4>>2]=0;c[b+48+8>>2]=0;c[b+48+12>>2]=0;c[b+48+16>>2]=0;c[b>>2]=3324;a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;c[b+272>>2]=0;c[b+284>>2]=0;a[b+408>>0]=1;c[b+404>>2]=0;c[b+396>>2]=0;c[b+400>>2]=0;a[b+428>>0]=1;c[b+424>>2]=0;c[b+416>>2]=0;c[b+420>>2]=0;a[b+448>>0]=1;c[b+444>>2]=0;c[b+436>>2]=0;c[b+440>>2]=0;a[b+496>>0]=1;c[b+492>>2]=0;c[b+484>>2]=0;c[b+488>>2]=0;a[b+516>>0]=1;c[b+512>>2]=0;c[b+504>>2]=0;c[b+508>>2]=0;c[b+684>>2]=d;a[b+704>>0]=1;c[b+700>>2]=0;c[b+692>>2]=0;c[b+696>>2]=0;a[b+724>>0]=1;c[b+720>>2]=0;c[b+712>>2]=0;c[b+716>>2]=0;a[b+744>>0]=1;c[b+740>>2]=0;c[b+732>>2]=0;c[b+736>>2]=0;a[b+764>>0]=1;c[b+760>>2]=0;c[b+752>>2]=0;c[b+756>>2]=0;a[b+784>>0]=1;c[b+780>>2]=0;c[b+772>>2]=0;c[b+776>>2]=0;a[b+804>>0]=1;c[b+800>>2]=0;c[b+792>>2]=0;c[b+796>>2]=0;a[b+824>>0]=1;c[b+820>>2]=0;c[b+812>>2]=0;c[b+816>>2]=0;a[b+844>>0]=1;c[b+840>>2]=0;c[b+832>>2]=0;c[b+836>>2]=0;a[b+864>>0]=1;c[b+860>>2]=0;c[b+852>>2]=0;c[b+856>>2]=0;a[b+884>>0]=1;c[b+880>>2]=0;c[b+872>>2]=0;c[b+876>>2]=0;a[b+964>>0]=1;c[b+960>>2]=0;c[b+952>>2]=0;c[b+956>>2]=0;a[b+984>>0]=1;c[b+980>>2]=0;c[b+972>>2]=0;c[b+976>>2]=0;c[b+928>>2]=0;c[b+932>>2]=0;c[b+936>>2]=-1;c[b+940>>2]=0;c[b+944>>2]=0;a[b+1024>>0]=1;c[b+1020>>2]=0;c[b+1012>>2]=0;c[b+1016>>2]=0;a[b+1044>>0]=1;c[b+1040>>2]=0;c[b+1032>>2]=0;c[b+1036>>2]=0;c[b+988>>2]=0;c[b+992>>2]=0;c[b+996>>2]=-1;c[b+1e3>>2]=0;c[b+1004>>2]=0;a[b+1084>>0]=1;c[b+1080>>2]=0;c[b+1072>>2]=0;c[b+1076>>2]=0;a[b+1104>>0]=1;c[b+1100>>2]=0;c[b+1092>>2]=0;c[b+1096>>2]=0;c[b+1048>>2]=0;c[b+1052>>2]=0;c[b+1056>>2]=-1;c[b+1060>>2]=0;c[b+1064>>2]=0;a[b+1124>>0]=1;c[b+1120>>2]=0;c[b+1112>>2]=0;c[b+1116>>2]=0;a[b+1144>>0]=1;c[b+1140>>2]=0;c[b+1132>>2]=0;c[b+1136>>2]=0;a[b+1248>>0]=1;c[b+1244>>2]=0;c[b+1236>>2]=0;c[b+1240>>2]=0;c[b+236>>2]=8;c[b+288>>2]=0;g[b+292>>2]=1.0;c[b+296>>2]=0;c[b+296+4>>2]=0;c[b+296+8>>2]=0;c[b+296+12>>2]=0;c[b+296+16>>2]=0;g[b+316>>2]=.20000000298023224;g[b+320>>2]=0.0;g[b+324>>2]=1.0;g[b+328>>2]=.10000000149011612;g[b+332>>2]=1.0;g[b+336>>2]=.699999988079071;g[b+340>>2]=.10000000149011612;g[b+344>>2]=1.0;g[b+348>>2]=.5;g[b+352>>2]=.5;g[b+356>>2]=.5;g[b+360>>2]=.5;g[b+364>>2]=1.0;g[b+368>>2]=1.0;c[b+372>>2]=0;c[b+376>>2]=1;c[b+380>>2]=0;c[b+384>>2]=4;c[b+388>>2]=1;a[b+472>>0]=0;a[b+473>>0]=0;g[b+476>>2]=0.0;c[b+520>>2]=0;c[b+520+4>>2]=0;c[b+520+8>>2]=0;c[b+520+12>>2]=0;c[b+536>>2]=1065353216;c[b+540>>2]=0;c[b+540+4>>2]=0;c[b+540+8>>2]=0;c[b+540+12>>2]=0;c[b+556>>2]=1065353216;c[b+560>>2]=0;c[b+560+4>>2]=0;c[b+560+8>>2]=0;c[b+560+12>>2]=0;c[b+576>>2]=1065353216;g[b+580>>2]=0.0;c[b+584>>2]=1065353216;c[b+588>>2]=0;c[b+588+4>>2]=0;c[b+588+8>>2]=0;c[b+588+12>>2]=0;c[b+604>>2]=1065353216;c[b+608>>2]=0;c[b+608+4>>2]=0;c[b+608+8>>2]=0;c[b+608+12>>2]=0;c[b+624>>2]=1065353216;g[b+628>>2]=0.0;c[b+680>>2]=0;g[b+888>>2]=0.0;a[b+924>>0]=1;c[b+892>>2]=0;c[b+892+4>>2]=0;c[b+892+8>>2]=0;c[b+892+12>>2]=0;c[b+892+16>>2]=0;c[b+892+20>>2]=0;c[b+892+24>>2]=0;c[b+892+28>>2]=0;c[b+4>>2]=1065353216;c[b+8>>2]=0;c[b+8+4>>2]=0;c[b+8+8>>2]=0;c[b+8+12>>2]=0;c[b+24>>2]=1065353216;c[b+28>>2]=0;c[b+28+4>>2]=0;c[b+28+8>>2]=0;c[b+28+12>>2]=0;c[b+44>>2]=1065353216;c[b+48>>2]=0;c[b+48+4>>2]=0;c[b+48+8>>2]=0;c[b+48+12>>2]=0;c[b+48+16>>2]=0;d=c[b+404>>2]|0;if(d|0){if(a[b+408>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+404>>2]=0}a[b+408>>0]=1;c[b+404>>2]=0;c[b+396>>2]=0;c[b+400>>2]=0;d=c[b+424>>2]|0;if(d|0){if(a[b+428>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+424>>2]=0}a[b+428>>0]=1;c[b+424>>2]=0;c[b+416>>2]=0;c[b+420>>2]=0;d=c[b+444>>2]|0;do if(d)if(a[b+448>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);i=c[b+416>>2]|0;d=c[b+420>>2]|0;c[b+444>>2]=0;a[b+448>>0]=1;c[b+444>>2]=0;c[b+436>>2]=0;c[b+440>>2]=0;if((i|0)==(d|0)){v=14;break}else break}else{c[b+444>>2]=0;v=13;break}else v=13;while(0);if((v|0)==13){a[b+448>>0]=1;c[b+444>>2]=0;c[b+436>>2]=0;c[b+440>>2]=0;d=0;v=14}if((v|0)==14){n=d|0?d<<1:1;if((d|0)<(n|0)){if(!n)i=0;else{c[6472]=(c[6472]|0)+1;d=ic((n<<2|3)+16|0)|0;if(!d)i=0;else{c[(d+4+15&-16)+-4>>2]=d;i=d+4+15&-16}d=c[b+416>>2]|0}k=c[b+424>>2]|0;if((d|0)<=0){if(k)v=22}else{j=0;do{c[i+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(d|0));v=22}if((v|0)==22){if(a[b+428>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);d=c[b+416>>2]|0}c[b+424>>2]=0}a[b+428>>0]=1;c[b+424>>2]=i;c[b+420>>2]=n;i=d;d=n}else i=d}k=c[b+424>>2]|0;c[k+(i<<2)>>2]=1;j=i+1|0;c[b+416>>2]=j;if((j|0)==(d|0)){n=d|0?d<<1:1;if((d|0)<(n|0)){if(!n)i=0;else{c[6472]=(c[6472]|0)+1;d=ic((n<<2|3)+16|0)|0;if(!d)i=0;else{c[(d+4+15&-16)+-4>>2]=d;i=d+4+15&-16}d=c[b+416>>2]|0;k=c[b+424>>2]|0}if((d|0)<=0){if(k)v=35}else{j=0;do{c[i+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(d|0));v=35}if((v|0)==35){if(a[b+428>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);d=c[b+416>>2]|0}c[b+424>>2]=0}a[b+428>>0]=1;c[b+424>>2]=i;c[b+420>>2]=n;j=d;d=n}else{i=k;j=d}}else i=k;c[i+(j<<2)>>2]=2;j=j+1|0;c[b+416>>2]=j;if((j|0)==(d|0)){n=d|0?d<<1:1;if((d|0)<(n|0)){if(!n)k=0;else{c[6472]=(c[6472]|0)+1;d=ic((n<<2|3)+16|0)|0;if(!d)j=0;else{c[(d+4+15&-16)+-4>>2]=d;j=d+4+15&-16}d=c[b+416>>2]|0;i=c[b+424>>2]|0;k=j}if((d|0)<=0){if(i)v=48}else{j=0;do{c[k+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(d|0));v=48}if((v|0)==48){if(a[b+428>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);d=c[b+416>>2]|0}c[b+424>>2]=0}a[b+428>>0]=1;c[b+424>>2]=k;c[b+420>>2]=n;i=k;j=d;d=n}else j=d}c[i+(j<<2)>>2]=3;j=j+1|0;c[b+416>>2]=j;if((j|0)==(d|0)){n=d|0?d<<1:1;if((d|0)<(n|0)){if(!n)k=0;else{c[6472]=(c[6472]|0)+1;d=ic((n<<2|3)+16|0)|0;if(!d)j=0;else{c[(d+4+15&-16)+-4>>2]=d;j=d+4+15&-16}d=c[b+416>>2]|0;i=c[b+424>>2]|0;k=j}if((d|0)<=0){if(i)v=61}else{j=0;do{c[k+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(d|0));v=61}if((v|0)==61){if(a[b+428>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);d=c[b+416>>2]|0}c[b+424>>2]=0}a[b+428>>0]=1;c[b+424>>2]=k;c[b+420>>2]=n;i=k}}else d=j;c[i+(d<<2)>>2]=0;c[b+416>>2]=d+1;c[6472]=(c[6472]|0)+1;d=ic(39)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}c[d+8>>2]=0;c[d>>2]=3432;c[d+4>>2]=32;c[d+16>>2]=b;c[b+192>>2]=d;g[d+12>>2]=.25;c[b+1148>>2]=1065353216;c[b+1152>>2]=0;c[b+1152+4>>2]=0;c[b+1152+8>>2]=0;c[b+1152+12>>2]=0;c[b+1168>>2]=1065353216;c[b+1172>>2]=0;c[b+1172+4>>2]=0;c[b+1172+8>>2]=0;c[b+1172+12>>2]=0;c[b+1188>>2]=1065353216;v=b+1192|0;w=v+36|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));g[b+1228>>2]=1.0;y=Yg(b)|0;g[y+4>>2]=1.0;g[y+8>>2]=1.0;g[y+12>>2]=1.0;c[y+16>>2]=1;v=c[b+192>>2]|0;z=+gb[c[(c[v>>2]|0)+48>>2]&15](v);v=A;w=v+100|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));n=c[b+712>>2]|0;if((n|0)<(e|0)){if((c[b+716>>2]|0)<(e|0)){if(!e){i=n;j=0}else{c[6472]=(c[6472]|0)+1;d=ic((e*104|3)+16|0)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}i=c[b+712>>2]|0;j=d}if((i|0)>0){d=0;do{v=j+(d*104|0)|0;k=(c[b+720>>2]|0)+(d*104|0)|0;w=v+104|0;do{c[v>>2]=c[k>>2];v=v+4|0;k=k+4|0}while((v|0)<(w|0));d=d+1|0}while((d|0)!=(i|0))}d=c[b+720>>2]|0;if(d|0){if(a[b+724>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+720>>2]=0}a[b+724>>0]=1;c[b+720>>2]=j;c[b+716>>2]=e;d=n}else d=n;do{v=c[b+720>>2]|0;c[v+(d*104|0)>>2]=0;v=v+(d*104|0)+4|0;k=A;w=v+100|0;do{c[v>>2]=c[k>>2];v=v+4|0;k=k+4|0}while((v|0)<(w|0));d=d+1|0}while((d|0)!=(e|0))}c[b+712>>2]=e;if((e|0)>0){x=0;j=h;i=f;do{k=c[b+720>>2]|0;n=k+(x*104|0)|0;v=n;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));d=k+(x*104|0)+8|0;if(!i){o=0.0;p=0.0;q=0.0;m=0.0;i=0}else{o=+g[i>>2];p=+g[i+4>>2];q=+g[i+8>>2];m=+g[i+12>>2];i=i+16|0}g[d>>2]=o;g[k+(x*104|0)+12>>2]=p;g[k+(x*104|0)+16>>2]=q;g[k+(x*104|0)+20>>2]=m;f=k+(x*104|0)+24|0;c[f>>2]=c[d>>2];c[f+4>>2]=c[d+4>>2];c[f+8>>2]=c[d+8>>2];c[f+12>>2]=c[d+12>>2];if(!j){m=1.0;j=0}else{m=+g[j>>2];j=j+4|0}g[k+(x*104|0)+88>>2]=m>0.0?1.0/m:0.0;s=o-z;u=p-z;t=q-z;r=z+o;o=z+p;m=z+q;d=c[b+932>>2]|0;if(!d){c[6472]=(c[6472]|0)+1;d=ic(63)|0;if(!d)d=0;else{c[(d+4+15&-16)+-4>>2]=d;d=d+4+15&-16}v=d;w=v+44|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0))}else c[b+932>>2]=0;c[d+32>>2]=0;c[d+36>>2]=n;c[d+40>>2]=0;g[d>>2]=s;g[d+4>>2]=u;g[d+8>>2]=t;g[d+12>>2]=0.0;g[d+16>>2]=r;g[d+20>>2]=o;g[d+24>>2]=m;g[d+28>>2]=0.0;af(b+928|0,c[b+928>>2]|0,d);c[b+940>>2]=(c[b+940>>2]|0)+1;c[k+(x*104|0)+96>>2]=d;c[k+(x*104|0)+4>>2]=y;x=x+1|0}while((x|0)!=(e|0))}d=c[b+928>>2]|0;if(!d){c[b+892>>2]=0;c[b+892+4>>2]=0;c[b+892+8>>2]=0;c[b+892+12>>2]=0;c[b+892+16>>2]=0;c[b+892+20>>2]=0;c[b+892+24>>2]=0;c[b+892+28>>2]=0;l=A;return}e=c[b+192>>2]|0;t=+gb[c[(c[e>>2]|0)+48>>2]&15](e);z=+g[d+4>>2]-t;u=+g[d+8>>2]-t;g[b+892>>2]=+g[d>>2]-t;g[b+896>>2]=z;g[b+900>>2]=u;g[b+904>>2]=0.0;u=t+ +g[d+20>>2];z=t+ +g[d+24>>2];g[b+908>>2]=t+ +g[d+16>>2];g[b+912>>2]=u;g[b+916>>2]=z;g[b+920>>2]=0.0;d=c[b+188>>2]|0;if(!d){l=A;return}e=c[b+684>>2]|0;f=c[e+32>>2]|0;Rb[c[(c[f>>2]|0)+16>>2]&31](f,d,b+892|0,b+908|0,c[e+36>>2]|0);l=A;return}function rc(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0.0,m=0.0,n=0.0,o=0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0,B=0,C=0.0,D=0.0,E=0.0,F=0,G=0,H=0,I=0,J=0,K=0,L=0.0,M=0.0,N=0.0;K=l;l=l+96|0;H=c[d+56>>2]|0;if((h-f|0)==1){if(!(a[d+60>>0]|0)){p=(c[d+96>>2]|0)+(H<<6)|0;q=(c[d+76>>2]|0)+(f<<6)|0;r=p+64|0;do{c[p>>2]=c[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(r|0))}else{J=(c[d+136>>2]|0)+(H<<4)|0;I=(c[d+116>>2]|0)+(f<<4)|0;c[J>>2]=c[I>>2];c[J+4>>2]=c[I+4>>2];c[J+8>>2]=c[I+8>>2];c[J+12>>2]=c[I+12>>2]}c[d+56>>2]=(c[d+56>>2]|0)+1;l=K;return}if((h|0)>(f|0)){o=(a[d+60>>0]|0)==0;if(o){i=c[d+76>>2]|0;j=f;m=0.0;n=0.0;k=0.0;do{m=m+(+g[i+(j<<6)+16>>2]+ +g[i+(j<<6)>>2])*.5;k=k+(+g[i+(j<<6)+20>>2]+ +g[i+(j<<6)+4>>2])*.5;n=n+(+g[i+(j<<6)+24>>2]+ +g[i+(j<<6)+8>>2])*.5;j=j+1|0}while((j|0)!=(h|0))}else{i=c[d+116>>2]|0;s=+g[d+36>>2];t=+g[d+40>>2];u=+g[d+44>>2];x=+g[d+4>>2];y=+g[d+8>>2];z=+g[d+12>>2];j=f;m=0.0;n=0.0;k=0.0;do{m=m+(+(e[i+(j<<4)+6>>1]|0)/s+x+(+(e[i+(j<<4)>>1]|0)/s+x))*.5;k=k+(+(e[i+(j<<4)+8>>1]|0)/t+y+(+(e[i+(j<<4)+2>>1]|0)/t+y))*.5;n=n+(+(e[i+(j<<4)+10>>1]|0)/u+z+(+(e[i+(j<<4)+4>>1]|0)/u+z))*.5;j=j+1|0}while((j|0)!=(h|0))}C=1.0/+(h-f|0);E=C*m;D=C*k;C=C*n;if(o){i=c[d+76>>2]|0;j=f;n=0.0;m=0.0;k=0.0;do{x=(+g[i+(j<<6)+16>>2]+ +g[i+(j<<6)>>2])*.5-E;y=(+g[i+(j<<6)+20>>2]+ +g[i+(j<<6)+4>>2])*.5-D;z=(+g[i+(j<<6)+24>>2]+ +g[i+(j<<6)+8>>2])*.5-C;n=n+x*x;k=k+y*y;m=m+z*z;j=j+1|0}while((j|0)!=(h|0));s=+(h-f|0)}else{i=c[d+116>>2]|0;s=+g[d+36>>2];t=+g[d+40>>2];u=+g[d+44>>2];x=+g[d+4>>2];y=+g[d+8>>2];z=+g[d+12>>2];j=f;n=0.0;m=0.0;k=0.0;do{N=(+(e[i+(j<<4)+6>>1]|0)/s+x+(+(e[i+(j<<4)>>1]|0)/s+x))*.5-E;M=(+(e[i+(j<<4)+8>>1]|0)/t+y+(+(e[i+(j<<4)+2>>1]|0)/t+y))*.5-D;L=(+(e[i+(j<<4)+10>>1]|0)/u+z+(+(e[i+(j<<4)+4>>1]|0)/u+z))*.5-C;n=n+N*N;k=k+M*M;m=m+L*L;j=j+1|0}while((j|0)!=(h|0));s=+(h-f|0)}}else{s=+(h-f|0);n=0.0;m=0.0;k=0.0}N=1.0/(s+-1.0);M=N*n;L=N*k;N=N*m;w=M>2]=0;c[K+16+4>>2]=0;c[K+16+8>>2]=0;c[K+16+12>>2]=0;if((h|0)>(f|0)){if(!(a[d+60>>0]|0)){i=c[d+76>>2]|0;m=0.0;k=0.0;n=0.0;j=f;do{n=(+g[i+(j<<6)+16>>2]+ +g[i+(j<<6)>>2])*.5+n;m=(+g[i+(j<<6)+20>>2]+ +g[i+(j<<6)+4>>2])*.5+m;k=(+g[i+(j<<6)+24>>2]+ +g[i+(j<<6)+8>>2])*.5+k;j=j+1|0}while((j|0)!=(h|0))}else{i=c[d+116>>2]|0;s=+g[d+36>>2];t=+g[d+40>>2];u=+g[d+44>>2];x=+g[d+4>>2];y=+g[d+8>>2];z=+g[d+12>>2];m=0.0;k=0.0;n=0.0;j=f;do{n=(+(e[i+(j<<4)+6>>1]|0)/s+x+(+(e[i+(j<<4)>>1]|0)/s+x))*.5+n;m=(+(e[i+(j<<4)+8>>1]|0)/t+y+(+(e[i+(j<<4)+2>>1]|0)/t+y))*.5+m;k=(+(e[i+(j<<4)+10>>1]|0)/u+z+(+(e[i+(j<<4)+4>>1]|0)/u+z))*.5+k;j=j+1|0}while((j|0)!=(h|0))}g[K+16>>2]=n;g[K+16+4>>2]=m;g[K+16+8>>2]=k;i=K+16|0}else{n=0.0;m=0.0;k=0.0;i=K+16|0}g[i>>2]=1.0/+(h-f|0)*n;g[K+16+4>>2]=1.0/+(h-f|0)*m;g[K+16+8>>2]=1.0/+(h-f|0)*k;x=+g[K+16+(w<<2)>>2];if((h|0)>(f|0)){v=f;i=f;do{j=(a[d+60>>0]|0)==0;if(j){G=c[d+76>>2]|0;k=+g[G+(v<<6)+16>>2];m=+g[G+(v<<6)+20>>2];n=+g[G+(v<<6)+24>>2];s=+g[G+(v<<6)>>2];t=+g[G+(v<<6)+4>>2];u=+g[G+(v<<6)+8>>2]}else{G=c[d+116>>2]|0;L=+g[d+36>>2];M=+g[d+40>>2];N=+g[d+44>>2];s=+g[d+4>>2];t=+g[d+8>>2];u=+g[d+12>>2];k=+(e[G+(v<<4)+6>>1]|0)/L+s;m=+(e[G+(v<<4)+8>>1]|0)/M+t;n=+(e[G+(v<<4)+10>>1]|0)/N+u;s=+(e[G+(v<<4)>>1]|0)/L+s;t=+(e[G+(v<<4)+2>>1]|0)/M+t;u=+(e[G+(v<<4)+4>>1]|0)/N+u}g[K>>2]=(k+s)*.5;g[K+4>>2]=(m+t)*.5;g[K+8>>2]=(n+u)*.5;g[K+12>>2]=0.0;if(+g[K+(w<<2)>>2]>x){if(j){j=c[d+76>>2]|0;o=j+(v<<6)|0;p=K+32|0;q=o;r=p+64|0;do{c[p>>2]=c[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(r|0));p=o;q=j+(i<<6)|0;r=p+64|0;do{c[p>>2]=c[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(r|0));p=(c[d+76>>2]|0)+(i<<6)|0;q=K+32|0;r=p+64|0;do{c[p>>2]=c[q>>2];p=p+4|0;q=q+4|0}while((p|0)<(r|0))}else{F=c[d+116>>2]|0;G=F+(v<<4)|0;c[K+32>>2]=c[G>>2];c[K+32+4>>2]=c[G+4>>2];c[K+32+8>>2]=c[G+8>>2];c[K+32+12>>2]=c[G+12>>2];F=F+(i<<4)|0;c[G>>2]=c[F>>2];c[G+4>>2]=c[F+4>>2];c[G+8>>2]=c[F+8>>2];c[G+12>>2]=c[F+12>>2];G=(c[d+116>>2]|0)+(i<<4)|0;c[G>>2]=c[K+32>>2];c[G+4>>2]=c[K+32+4>>2];c[G+8>>2]=c[K+32+8>>2];c[G+12>>2]=c[K+32+12>>2]}i=i+1|0}v=v+1|0}while((v|0)!=(h|0))}else i=f;if(!((i|0)>(((h-f|0)/3|0)+f|0)?(i|0)<(h+-1-((h-f|0)/3|0)|0):0))i=(h-f>>1)+f|0;G=c[d+56>>2]|0;if(!(a[d+60>>0]|0)){F=(c[d+96>>2]|0)+(G<<6)|0;c[F>>2]=c[d+20>>2];c[F+4>>2]=c[d+20+4>>2];c[F+8>>2]=c[d+20+8>>2];c[F+12>>2]=c[d+20+12>>2]}else{F=c[d+136>>2]|0;M=(+g[d+24>>2]-+g[d+8>>2])*+g[d+40>>2];N=(+g[d+28>>2]-+g[d+12>>2])*+g[d+44>>2];b[F+(G<<4)>>1]=~~((+g[d+20>>2]-+g[d+4>>2])*+g[d+36>>2])&65535&-2;b[F+(G<<4)+2>>1]=~~M&65535&-2;b[F+(G<<4)+4>>1]=~~N&65535&-2}j=c[d+56>>2]|0;if(!(a[d+60>>0]|0)){F=(c[d+96>>2]|0)+(j<<6)+16|0;c[F>>2]=c[d+4>>2];c[F+4>>2]=c[d+4+4>>2];c[F+8>>2]=c[d+4+8>>2];c[F+12>>2]=c[d+4+12>>2]}else{F=c[d+136>>2]|0;L=+g[d+4>>2];M=+g[d+8>>2];N=+g[d+12>>2];M=(M-M)*+g[d+40>>2];N=(N-N)*+g[d+44>>2];b[F+(j<<4)+6>>1]=~~((L-L)*+g[d+36>>2]+1.0)&65535|1;b[F+(j<<4)+8>>1]=~~(M+1.0)&65535|1;b[F+(j<<4)+10>>1]=~~(N+1.0)&65535|1}F=c[d+56>>2]|0;if((h|0)>(f|0)){A=a[d+60>>0]|0;B=f;do{if(!(A<<24>>24)){j=c[d+76>>2]|0;k=+g[j+(B<<6)>>2];n=+g[j+(B<<6)+4>>2];s=+g[j+(B<<6)+8>>2];m=+g[j+(B<<6)+12>>2];t=+g[j+(B<<6)+16>>2];y=+g[j+(B<<6)+20>>2];u=+g[j+(B<<6)+24>>2];x=+g[j+(B<<6)+28>>2];j=c[d+96>>2]|0;if(k<+g[j+(F<<6)>>2])g[j+(F<<6)>>2]=k;if(n<+g[j+(F<<6)+4>>2])g[j+(F<<6)+4>>2]=n;if(s<+g[j+(F<<6)+8>>2])g[j+(F<<6)+8>>2]=s;if(m<+g[j+(F<<6)+12>>2])g[j+(F<<6)+12>>2]=m;if(+g[j+(F<<6)+16>>2]>2]=t;if(+g[j+(F<<6)+20>>2]>2]=y;if(+g[j+(F<<6)+24>>2]>2]=u;if(+g[j+(F<<6)+28>>2]>2]=x}else{v=c[d+116>>2]|0;s=+g[d+36>>2];y=+g[d+40>>2];E=+g[d+44>>2];t=+g[d+4>>2];z=+g[d+8>>2];L=+g[d+12>>2];u=+g[d+4>>2];C=+g[d+8>>2];M=+g[d+12>>2];x=+g[d+36>>2];D=+g[d+40>>2];N=+g[d+44>>2];j=~~((+(e[v+(B<<4)>>1]|0)/s+t-u)*x)&65535&-2;o=~~((+(e[v+(B<<4)+2>>1]|0)/y+z-C)*D)&65535&-2;p=~~((+(e[v+(B<<4)+4>>1]|0)/E+L-M)*N)&65535&-2;q=~~((+(e[v+(B<<4)+6>>1]|0)/s+t-u)*x+1.0)&65535|1;r=~~((+(e[v+(B<<4)+8>>1]|0)/y+z-C)*D+1.0)&65535|1;v=~~((+(e[v+(B<<4)+10>>1]|0)/E+L-M)*N+1.0)&65535|1;w=c[d+136>>2]|0;if((e[w+(F<<4)>>1]|0)>(j&65535))b[w+(F<<4)>>1]=j;if((e[w+(F<<4)+6>>1]|0)<(q&65535))b[w+(F<<4)+6>>1]=q;if((e[w+(F<<4)+2>>1]|0)>(o&65535))b[w+(F<<4)+2>>1]=o;if((e[w+(F<<4)+8>>1]|0)<(r&65535))b[w+(F<<4)+8>>1]=r;if((e[w+(F<<4)+4>>1]|0)>(p&65535))b[w+(F<<4)+4>>1]=p;if((e[w+(F<<4)+10>>1]|0)<(v&65535))b[w+(F<<4)+10>>1]=v}B=B+1|0}while((B|0)!=(h|0))}c[d+56>>2]=F+1;rc(d,f,i);A=c[d+56>>2]|0;rc(d,i,h);w=(c[d+56>>2]|0)-H|0;i=a[d+60>>0]|0;if(i<<24>>24!=0&(w<<4|0)>2048){r=c[d+136>>2]|0;p=c[r+(F+1<<4)+12>>2]|0;p=(p|0)>-1?1:0-p|0;v=c[r+(A<<4)+12>>2]|0;v=(v|0)>-1?1:0-v|0;if((p<<4|0)<2049){q=c[d+152>>2]|0;if((q|0)==(c[d+156>>2]|0)?(I=q|0?q<<1:1,(q|0)<(I|0)):0){if(!I){j=q;o=0}else{c[6472]=(c[6472]|0)+1;i=ic(I<<5|19)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}j=c[d+152>>2]|0;o=i}if((j|0)>0){i=0;do{h=o+(i<<5)|0;H=(c[d+160>>2]|0)+(i<<5)|0;c[h>>2]=c[H>>2];c[h+4>>2]=c[H+4>>2];c[h+8>>2]=c[H+8>>2];c[h+12>>2]=c[H+12>>2];c[h+16>>2]=c[H+16>>2];c[h+20>>2]=c[H+20>>2];c[h+24>>2]=c[H+24>>2];c[h+28>>2]=c[H+28>>2];i=i+1|0}while((i|0)!=(j|0))}i=c[d+160>>2]|0;if(i|0){if(a[d+164>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[d+160>>2]=0}a[d+164>>0]=1;c[d+160>>2]=o;c[d+156>>2]=I;i=c[d+152>>2]|0}else i=q;c[d+152>>2]=i+1;I=(c[d+160>>2]|0)+(q<<5)|0;c[I>>2]=c[K+32>>2];c[I+4>>2]=c[K+32+4>>2];c[I+8>>2]=c[K+32+8>>2];c[I+12>>2]=c[K+32+12>>2];c[I+16>>2]=c[K+32+16>>2];c[I+20>>2]=c[K+32+20>>2];c[I+24>>2]=c[K+32+24>>2];c[I+28>>2]=c[K+32+28>>2];I=c[d+160>>2]|0;b[I+(q<<5)>>1]=b[r+(F+1<<4)>>1]|0;b[I+(q<<5)+2>>1]=b[r+(F+1<<4)+2>>1]|0;b[I+(q<<5)+4>>1]=b[r+(F+1<<4)+4>>1]|0;b[I+(q<<5)+6>>1]=b[r+(F+1<<4)+6>>1]|0;b[I+(q<<5)+8>>1]=b[r+(F+1<<4)+8>>1]|0;b[I+(q<<5)+10>>1]=b[r+(F+1<<4)+10>>1]|0;c[I+(q<<5)+12>>2]=F+1;c[I+(q<<5)+16>>2]=p}if((v<<4|0)<2049){p=c[d+152>>2]|0;if((p|0)==(c[d+156>>2]|0)?(J=p|0?p<<1:1,(p|0)<(J|0)):0){if(!J){j=p;o=0}else{c[6472]=(c[6472]|0)+1;i=ic(J<<5|19)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}j=c[d+152>>2]|0;o=i}if((j|0)>0){i=0;do{I=o+(i<<5)|0;h=(c[d+160>>2]|0)+(i<<5)|0;c[I>>2]=c[h>>2];c[I+4>>2]=c[h+4>>2];c[I+8>>2]=c[h+8>>2];c[I+12>>2]=c[h+12>>2];c[I+16>>2]=c[h+16>>2];c[I+20>>2]=c[h+20>>2];c[I+24>>2]=c[h+24>>2];c[I+28>>2]=c[h+28>>2];i=i+1|0}while((i|0)!=(j|0))}i=c[d+160>>2]|0;if(i|0){if(a[d+164>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[d+160>>2]=0}a[d+164>>0]=1;c[d+160>>2]=o;c[d+156>>2]=J;i=c[d+152>>2]|0}else i=p;c[d+152>>2]=i+1;i=(c[d+160>>2]|0)+(p<<5)|0;c[i>>2]=c[K+32>>2];c[i+4>>2]=c[K+32+4>>2];c[i+8>>2]=c[K+32+8>>2];c[i+12>>2]=c[K+32+12>>2];c[i+16>>2]=c[K+32+16>>2];c[i+20>>2]=c[K+32+20>>2];c[i+24>>2]=c[K+32+24>>2];c[i+28>>2]=c[K+32+28>>2];i=c[d+160>>2]|0;b[i+(p<<5)>>1]=b[r+(A<<4)>>1]|0;b[i+(p<<5)+2>>1]=b[r+(A<<4)+2>>1]|0;b[i+(p<<5)+4>>1]=b[r+(A<<4)+4>>1]|0;b[i+(p<<5)+6>>1]=b[r+(A<<4)+6>>1]|0;b[i+(p<<5)+8>>1]=b[r+(A<<4)+8>>1]|0;b[i+(p<<5)+10>>1]=b[r+(A<<4)+10>>1]|0;c[i+(p<<5)+12>>2]=A;c[i+(p<<5)+16>>2]=v;i=d+152|0}else i=d+152|0;c[d+168>>2]=c[i>>2];i=a[d+60>>0]|0}if(!(i<<24>>24)){c[(c[d+96>>2]|0)+(G<<6)+32>>2]=w;l=K;return}else{c[(c[d+136>>2]|0)+(G<<4)+12>>2]=0-w;l=K;return}}function sc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0;ga=l;l=l+176|0;da=c[d+4>>2]|0;ea=c[e+4>>2]|0;if((c[da+68>>2]|0)==(c[b+40>>2]|0)?(c[ea+68>>2]|0)==(c[b+44>>2]|0):0)ca=b+8|0;else{i=c[b+8>>2]|0;j=c[i+8>>2]|0;if((j|0)>0){m=0;do{k=c[(c[i+16>>2]|0)+(m*12|0)+8>>2]|0;if(k|0){Ab[c[c[k>>2]>>2]&511](k);ca=c[b+4>>2]|0;Gb[c[(c[ca>>2]|0)+60>>2]&127](ca,k)}m=m+1|0}while((m|0)!=(j|0));i=c[b+8>>2]|0}Hh(i);ca=b+8|0}a[ga+128+16>>0]=1;q=ga+128+12|0;c[q>>2]=0;c[ga+128+4>>2]=0;c[ga+128+8>>2]=0;p=c[ca>>2]|0;i=c[p+8>>2]|0;if((i|0)>0){o=0;do{j=c[(c[p+16>>2]|0)+(o*12|0)+8>>2]|0;if(j){Gb[c[(c[j>>2]|0)+16>>2]&127](j,ga+128|0);i=c[ga+128+4>>2]|0;if((i|0)>0){n=0;do{m=c[(c[q>>2]|0)+(n<<2)>>2]|0;if(c[m+748>>2]|0){c[h+4>>2]=m;i=c[m+740>>2]|0;j=c[(c[h+8>>2]|0)+8>>2]|0;k=c[(c[h+12>>2]|0)+8>>2]|0;if((i|0)==(j|0))Oe(m,i+4|0,k+4|0);else Oe(m,k+4|0,j+4|0);c[h+4>>2]=0;i=c[ga+128+4>>2]|0}n=n+1|0}while((n|0)<(i|0))}if((i|0)<0){if((c[ga+128+8>>2]|0)<0){j=c[q>>2]|0;if(j|0){if(a[ga+128+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0)}c[q>>2]=0}a[ga+128+16>>0]=1;c[q>>2]=0;c[ga+128+8>>2]=0}do{c[(c[q>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)!=0)}c[ga+128+4>>2]=0;i=c[p+8>>2]|0}o=o+1|0}while((o|0)<(i|0));i=c[q>>2]|0;if(i|0){if(a[ga+128+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[q>>2]=0}}j=c[da+64>>2]|0;k=c[ea+64>>2]|0;s=c[b+4>>2]|0;t=c[ca>>2]|0;u=c[b+32>>2]|0;c[ga+128>>2]=6448;c[ga+128+4>>2]=0;c[ga+128+8>>2]=d;c[ga+128+12>>2]=e;c[ga+128+16>>2]=s;c[ga+128+20>>2]=f;c[ga+128+24>>2]=h;c[ga+128+28>>2]=t;c[ga+128+32>>2]=u;u=c[d+12>>2]|0;F=+g[u>>2];G=+g[u+16>>2];H=+g[u+32>>2];I=+g[u+4>>2];J=+g[u+20>>2];K=+g[u+36>>2];L=+g[u+8>>2];M=+g[u+24>>2];N=+g[u+40>>2];_=-+g[u+48>>2];$=-+g[u+52>>2];aa=-+g[u+56>>2];u=c[e+12>>2]|0;O=+g[u>>2];P=+g[u+16>>2];Q=+g[u+32>>2];R=+g[u+4>>2];S=+g[u+20>>2];T=+g[u+36>>2];U=+g[u+8>>2];V=+g[u+24>>2];W=+g[u+40>>2];X=+g[u+48>>2];Y=+g[u+52>>2];Z=+g[u+56>>2];j=c[j>>2]|0;k=c[k>>2]|0;if((j|0)!=0&(k|0)!=0){c[6472]=(c[6472]|0)+1;i=ic(1043)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}c[i>>2]=j;c[i+4>>2]=k;w=+B(+(F*O+G*P+H*Q));C=+B(+(F*R+G*S+H*T));E=+B(+(F*U+G*V+H*W));y=+B(+(I*O+J*P+K*Q));z=+B(+(I*R+J*S+K*T));x=+B(+(I*U+J*V+K*W));D=+B(+(L*O+M*P+N*Q));A=+B(+(L*R+M*S+N*T));v=+B(+(L*U+M*V+N*W));n=i;p=i;o=i;u=1;k=128;h=i;m=128;i=124;while(1){q=u+-1|0;s=c[h+(q<<3)>>2]|0;t=c[h+(q<<3)+4>>2]|0;ra=+g[t+16>>2];qa=+g[t>>2];pa=+g[t+20>>2];oa=+g[t+4>>2];na=+g[t+24>>2];ha=+g[t+8>>2];ma=F*_+G*$+H*aa+(F*X+G*Y+H*Z)+((F*O+G*P+H*Q)*(ra+qa)*.5+(F*R+G*S+H*T)*(pa+oa)*.5+(F*U+G*V+H*W)*(na+ha)*.5);ka=I*_+J*$+K*aa+(I*X+J*Y+K*Z)+((I*O+J*P+K*Q)*(ra+qa)*.5+(I*R+J*S+K*T)*(pa+oa)*.5+(I*U+J*V+K*W)*(na+ha)*.5);ia=L*_+M*$+N*aa+(L*X+M*Y+N*Z)+((L*O+M*P+N*Q)*(ra+qa)*.5+(L*R+M*S+N*T)*(pa+oa)*.5+(L*U+M*V+N*W)*(na+ha)*.5);la=((ra-qa)*.5+0.0)*w+((pa-oa)*.5+0.0)*C+((na-ha)*.5+0.0)*E;ja=((ra-qa)*.5+0.0)*y+((pa-oa)*.5+0.0)*z+((na-ha)*.5+0.0)*x;ha=((ra-qa)*.5+0.0)*D+((pa-oa)*.5+0.0)*A+((na-ha)*.5+0.0)*v;do if(((((+g[s>>2]<=la+ma?+g[s+16>>2]>=ma-la:0)?+g[s+4>>2]<=ka+ja:0)?+g[s+20>>2]>=ka-ja:0)?+g[s+8>>2]<=ia+ha:0)?+g[s+24>>2]>=ia-ha:0){if((q|0)>(i|0)){f=m<<1;do if((m|0)<(f|0)&(k|0)<(f|0)){do if(!m){i=0;j=0;ba=52}else{c[6472]=(c[6472]|0)+1;i=ic((m<<4|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}if((m|0)>0)i=0;else{i=j;ba=52;break}do{o=h+(i<<3)|0;p=c[o+4>>2]|0;r=j+(i<<3)|0;c[r>>2]=c[o>>2];c[r+4>>2]=p;i=i+1|0}while((i|0)!=(m|0));i=j}while(0);if((ba|0)==52){ba=0;if(!h){m=i;o=i;k=f;break}}if(!n){m=i;o=i;k=f}else{c[6473]=(c[6473]|0)+1;nd(c[n+-4>>2]|0);m=i;o=i;k=f}}else{m=p;i=n;j=h}while(0);p=m;n=i;r=k;h=f;f=f+-4|0}else{r=k;j=h;h=m;f=i}m=(c[t+40>>2]|0)!=0;if(!(c[s+40>>2]|0))if(m){k=c[t+36>>2]|0;c[j+(q<<3)>>2]=s;c[j+(q<<3)+4>>2]=k;q=c[t+40>>2]|0;c[j+(u<<3)>>2]=s;c[j+(u<<3)+4>>2]=q;q=u+1|0;k=r;m=h;i=f;break}else{Kb[c[(c[ga+128>>2]|0)+8>>2]&127](ga+128|0,s,t);k=r;m=h;i=f;break}else{k=j+(q<<3)|0;i=c[s+36>>2]|0;if(m){m=c[t+36>>2]|0;c[k>>2]=i;c[j+(q<<3)+4>>2]=m;k=u+1|0;q=c[t+36>>2]|0;c[j+(u<<3)>>2]=c[s+40>>2];c[j+(u<<3)+4>>2]=q;q=u+2|0;m=c[t+40>>2]|0;c[j+(k<<3)>>2]=c[s+36>>2];c[j+(k<<3)+4>>2]=m;k=c[t+40>>2]|0;c[j+(q<<3)>>2]=c[s+40>>2];c[j+(q<<3)+4>>2]=k;q=u+3|0;k=r;m=h;i=f;break}else{c[k>>2]=i;c[j+(q<<3)+4>>2]=t;c[j+(u<<3)>>2]=c[s+40>>2];c[j+(u<<3)+4>>2]=t;q=u+1|0;k=r;m=h;i=f;break}}}else j=h;while(0);if(!q)break;else{u=q;h=j}}if(!((j|0)==0|(p|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}}o=c[ca>>2]|0;if((c[o+8>>2]|0)>0){p=0;do{i=c[o+16>>2]|0;j=c[i+(p*12|0)+8>>2]|0;do if(j|0){ba=c[i+(p*12|0)>>2]|0;u=c[da+24>>2]|0;t=c[u+(ba*80|0)+64>>2]|0;s=c[d+12>>2]|0;ra=+g[s>>2];S=+g[s+4>>2];R=+g[s+8>>2];oa=+g[s+16>>2];ma=+g[s+20>>2];ka=+g[s+24>>2];na=+g[s+32>>2];ja=+g[s+36>>2];X=+g[s+40>>2];ia=+g[u+(ba*80|0)>>2];ha=+g[u+(ba*80|0)+16>>2];aa=+g[u+(ba*80|0)+32>>2];$=+g[u+(ba*80|0)+4>>2];_=+g[u+(ba*80|0)+20>>2];Z=+g[u+(ba*80|0)+36>>2];la=+g[u+(ba*80|0)+8>>2];Y=+g[u+(ba*80|0)+24>>2];W=+g[u+(ba*80|0)+40>>2];qa=+g[u+(ba*80|0)+48>>2];pa=+g[u+(ba*80|0)+52>>2];T=+g[u+(ba*80|0)+56>>2];V=+g[s+48>>2]+(ra*qa+S*pa+R*T);U=+g[s+52>>2]+(oa*qa+ma*pa+ka*T);T=+g[s+56>>2]+(na*qa+ja*pa+X*T);g[ga>>2]=ra*ia+S*ha+R*aa;g[ga+4>>2]=ra*$+S*_+R*Z;g[ga+8>>2]=ra*la+S*Y+R*W;g[ga+12>>2]=0.0;g[ga+16>>2]=oa*ia+ma*ha+ka*aa;g[ga+20>>2]=oa*$+ma*_+ka*Z;g[ga+24>>2]=oa*la+ma*Y+ka*W;g[ga+28>>2]=0.0;g[ga+32>>2]=na*ia+ja*ha+X*aa;g[ga+36>>2]=na*$+ja*_+X*Z;g[ga+40>>2]=na*la+ja*Y+X*W;g[ga+44>>2]=0.0;g[ga+48>>2]=V;g[ga+52>>2]=U;g[ga+56>>2]=T;g[ga+60>>2]=0.0;Nb[c[(c[t>>2]|0)+8>>2]&127](t,ga,ga+112|0,ga+96|0);t=c[(c[o+16>>2]|0)+(p*12|0)+4>>2]|0;s=c[ea+24>>2]|0;ba=c[s+(t*80|0)+64>>2]|0;u=c[e+12>>2]|0;T=+g[u>>2];U=+g[u+4>>2];V=+g[u+8>>2];W=+g[u+16>>2];X=+g[u+20>>2];Y=+g[u+24>>2];ja=+g[u+32>>2];la=+g[u+36>>2];na=+g[u+40>>2];Z=+g[s+(t*80|0)>>2];_=+g[s+(t*80|0)+16>>2];$=+g[s+(t*80|0)+32>>2];aa=+g[s+(t*80|0)+4>>2];ha=+g[s+(t*80|0)+20>>2];ia=+g[s+(t*80|0)+36>>2];ka=+g[s+(t*80|0)+8>>2];ma=+g[s+(t*80|0)+24>>2];oa=+g[s+(t*80|0)+40>>2];R=+g[s+(t*80|0)+48>>2];S=+g[s+(t*80|0)+52>>2];ra=+g[s+(t*80|0)+56>>2];pa=+g[u+48>>2]+(T*R+U*S+V*ra);qa=+g[u+52>>2]+(W*R+X*S+Y*ra);ra=+g[u+56>>2]+(ja*R+la*S+na*ra);g[ga>>2]=T*Z+U*_+V*$;g[ga+4>>2]=T*aa+U*ha+V*ia;g[ga+8>>2]=T*ka+U*ma+V*oa;g[ga+12>>2]=0.0;g[ga+16>>2]=W*Z+X*_+Y*$;g[ga+20>>2]=W*aa+X*ha+Y*ia;g[ga+24>>2]=W*ka+X*ma+Y*oa;g[ga+28>>2]=0.0;g[ga+32>>2]=ja*Z+la*_+na*$;g[ga+36>>2]=ja*aa+la*ha+na*ia;g[ga+40>>2]=ja*ka+la*ma+na*oa;g[ga+44>>2]=0.0;g[ga+48>>2]=pa;g[ga+52>>2]=qa;g[ga+56>>2]=ra;g[ga+60>>2]=0.0;Nb[c[(c[ba>>2]|0)+8>>2]&127](ba,ga,ga+80|0,ga+64|0);if(!(+g[ga+112>>2]>+g[ga+64>>2])?!(+g[ga+96>>2]<+g[ga+80>>2]):0)i=1;else i=0;if(!(!(+g[ga+112+8>>2]>+g[ga+64+8>>2])?!(+g[ga+96+8>>2]<+g[ga+80+8>>2]):0))i=0;if(!(+g[ga+112+4>>2]>+g[ga+64+4>>2])?!(+g[ga+96+4>>2]<+g[ga+80+4>>2]|i^1):0)break;Ab[c[c[j>>2]>>2]&511](j);n=c[b+4>>2]|0;Gb[c[(c[n>>2]|0)+60>>2]&127](n,j);n=c[o+16>>2]|0;m=c[n+(p*12|0)>>2]|0;n=c[n+(p*12|0)+4>>2]|0;i=c[b+16>>2]|0;if((i|0)==(c[b+20>>2]|0)?(fa=i|0?i<<1:1,(i|0)<(fa|0)):0){if(!fa)j=0;else{c[6472]=(c[6472]|0)+1;i=ic((fa*12|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[b+16>>2]|0}if((i|0)>0){k=0;do{ba=j+(k*12|0)|0;u=(c[b+24>>2]|0)+(k*12|0)|0;c[ba>>2]=c[u>>2];c[ba+4>>2]=c[u+4>>2];c[ba+8>>2]=c[u+8>>2];k=k+1|0}while((k|0)!=(i|0))}i=c[b+24>>2]|0;if(i|0){if(a[b+28>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[b+24>>2]=0}a[b+28>>0]=1;c[b+24>>2]=j;c[b+20>>2]=fa;i=c[b+16>>2]|0}ba=c[b+24>>2]|0;c[ba+(i*12|0)>>2]=m;c[ba+(i*12|0)+4>>2]=n;c[ba+(i*12|0)+8>>2]=0;c[b+16>>2]=(c[b+16>>2]|0)+1}while(0);p=p+1|0}while((p|0)<(c[o+8>>2]|0));j=b+24|0;k=b+16|0}else{j=b+24|0;k=b+16|0}if((c[k>>2]|0)>0){i=0;do{e=c[ca>>2]|0;fa=c[j>>2]|0;ub[c[(c[e>>2]|0)+8>>2]&63](e,c[fa+(i*12|0)>>2]|0,c[fa+(i*12|0)+4>>2]|0)|0;i=i+1|0}while((i|0)<(c[k>>2]|0))}i=c[j>>2]|0;if(!i){a[b+28>>0]=1;c[j>>2]=0;c[k>>2]=0;b=b+20|0;c[b>>2]=0;l=ga;return}if(a[b+28>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[j>>2]=0;a[b+28>>0]=1;c[j>>2]=0;c[k>>2]=0;b=b+20|0;c[b>>2]=0;l=ga;return}function tc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,j=0.0,k=0.0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0;u=l;l=l+208|0;f=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;Hb[c[(c[f>>2]|0)+56>>2]&7](f,b,1.0);f=c[d+4>>2]|0;switch(f|0){case 31:{f=c[d+16>>2]|0;if((f|0)<=0){l=u;return}do{t=f;f=f+-1|0;s=c[d+24>>2]|0;F=+g[s+(f*80|0)>>2];C=+g[s+(f*80|0)+4>>2];z=+g[s+(f*80|0)+8>>2];E=+g[s+(f*80|0)+16>>2];B=+g[s+(f*80|0)+20>>2];x=+g[s+(f*80|0)+24>>2];D=+g[s+(f*80|0)+32>>2];A=+g[s+(f*80|0)+36>>2];v=+g[s+(f*80|0)+40>>2];N=+g[s+(f*80|0)+48>>2];M=+g[s+(f*80|0)+52>>2];k=+g[s+(f*80|0)+56>>2];s=c[s+(f*80|0)+64>>2]|0;r=c[(c[a>>2]|0)+28>>2]|0;L=+g[b>>2];K=+g[b+4>>2];J=+g[b+8>>2];I=+g[b+16>>2];H=+g[b+20>>2];G=+g[b+24>>2];y=+g[b+32>>2];w=+g[b+36>>2];h=+g[b+40>>2];i=N*L+M*K+k*J+ +g[b+48>>2];j=N*I+M*H+k*G+ +g[b+52>>2];k=N*y+M*w+k*h+ +g[b+56>>2];g[u+144>>2]=F*L+E*K+D*J;g[u+144+4>>2]=C*L+B*K+A*J;g[u+144+8>>2]=z*L+x*K+v*J;g[u+144+12>>2]=0.0;g[u+144+16>>2]=F*I+E*H+D*G;g[u+144+20>>2]=C*I+B*H+A*G;g[u+144+24>>2]=z*I+x*H+v*G;g[u+144+28>>2]=0.0;g[u+144+32>>2]=F*y+E*w+D*h;g[u+144+36>>2]=C*y+B*w+A*h;g[u+144+40>>2]=z*y+x*w+v*h;g[u+144+44>>2]=0.0;g[u+144+48>>2]=i;g[u+144+52>>2]=j;g[u+144+56>>2]=k;g[u+144+60>>2]=0.0;Nb[r&127](a,u+144|0,s,e)}while((t|0)>1);l=u;return}case 0:{c[u+144>>2]=c[d+28>>2];c[u+144+4>>2]=c[d+28+4>>2];c[u+144+8>>2]=c[d+28+8>>2];c[u+144+12>>2]=c[d+28+12>>2];L=+gb[c[(c[d>>2]|0)+48>>2]&15](d);M=+gb[c[(c[d>>2]|0)+48>>2]&15](d);N=+gb[c[(c[d>>2]|0)+48>>2]&15](d);L=L+ +g[u+144>>2];g[u+144>>2]=L;M=M+ +g[u+144+4>>2];g[u+144+4>>2]=M;N=N+ +g[u+144+8>>2];g[u+144+8>>2]=N;a=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;d=c[(c[a>>2]|0)+72>>2]|0;g[u+112>>2]=-L;g[u+112+4>>2]=-M;g[u+112+8>>2]=-N;g[u+112+12>>2]=0.0;Rb[d&31](a,u+112|0,u+144|0,b,e);l=u;return}case 8:{N=+gb[c[(c[d>>2]|0)+48>>2]&15](d);a=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;Fb[c[(c[a>>2]|0)+16>>2]&0](a,N,b,e);l=u;return}case 9:{f=c[d+92>>2]|0;if((f|0)<=0){l=u;return}do{t=f;f=f+-1|0;s=c[d+100>>2]|0;z=+g[s+(f<<4)>>2];A=+g[s+(f<<4)+4>>2];M=+g[s+(f<<4)+8>>2];s=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;r=c[(c[s>>2]|0)+16>>2]|0;N=+g[(c[d+120>>2]|0)+(f<<2)>>2];C=+g[b>>2];D=+g[b+4>>2];B=+g[b+8>>2];F=+g[b+16>>2];G=+g[b+20>>2];E=+g[b+24>>2];I=+g[b+32>>2];J=+g[b+36>>2];H=+g[b+40>>2];K=z*C+A*D+M*B+ +g[b+48>>2];L=z*F+A*G+M*E+ +g[b+52>>2];M=z*I+A*J+M*H+ +g[b+56>>2];g[u+144>>2]=C+D*0.0+B*0.0;g[u+144+4>>2]=C*0.0+D+B*0.0;g[u+144+8>>2]=B+(C*0.0+D*0.0);g[u+144+12>>2]=0.0;g[u+144+16>>2]=F+G*0.0+E*0.0;g[u+144+20>>2]=F*0.0+G+E*0.0;g[u+144+24>>2]=E+(F*0.0+G*0.0);g[u+144+28>>2]=0.0;g[u+144+32>>2]=I+J*0.0+H*0.0;g[u+144+36>>2]=I*0.0+J+H*0.0;g[u+144+40>>2]=H+(I*0.0+J*0.0);g[u+144+44>>2]=0.0;g[u+144+48>>2]=K;g[u+144+52>>2]=L;g[u+144+56>>2]=M;g[u+144+60>>2]=0.0;Fb[r&0](s,N,u+144|0,e)}while((t|0)>1);l=u;return}case 10:{t=c[d+52>>2]|0;M=+g[d+28+(((t+2|0)%3|0)<<2)>>2];N=+g[d+28+(t<<2)>>2];a=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;Db[c[(c[a>>2]|0)+76>>2]&0](a,M,N,t,b,e);l=u;return}case 11:{M=+g[d+56>>2];N=+g[d+60>>2];d=c[d+68>>2]|0;a=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;Db[c[(c[a>>2]|0)+84>>2]&0](a,M,N,d,b,e);l=u;return}case 13:{t=c[d+52>>2]|0;M=+gb[c[(c[d>>2]|0)+92>>2]&15](d);c[u+128>>2]=c[d+28>>2];c[u+128+4>>2]=c[d+28+4>>2];c[u+128+8>>2]=c[d+28+8>>2];c[u+128+12>>2]=c[d+28+12>>2];K=+gb[c[(c[d>>2]|0)+48>>2]&15](d);L=+gb[c[(c[d>>2]|0)+48>>2]&15](d);N=+gb[c[(c[d>>2]|0)+48>>2]&15](d);g[u+128>>2]=K+ +g[u+128>>2];g[u+128+4>>2]=L+ +g[u+128+4>>2];g[u+128+8>>2]=N+ +g[u+128+8>>2];N=+g[u+128+(t<<2)>>2];a=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;Db[c[(c[a>>2]|0)+80>>2]&0](a,M,N,t,b,e);l=u;return}case 28:{N=+g[d+64>>2];a=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;Jb[c[(c[a>>2]|0)+88>>2]&0](a,d+48|0,N,b,e);l=u;return}default:{a:do if((f|0)<7){r=c[d+52>>2]|0;if(!r){if((qb[c[(c[d>>2]|0)+100>>2]&127](d)|0)<=0)break;f=0;while(1){Nb[c[(c[d>>2]|0)+104>>2]&127](d,f,u+144|0,u+112|0);L=+g[u+144>>2];z=+g[b>>2];J=+g[u+144+4>>2];A=+g[b+4>>2];H=+g[u+144+8>>2];B=+g[b+8>>2];D=+g[b+16>>2];E=+g[b+20>>2];F=+g[b+24>>2];I=+g[b+32>>2];K=+g[b+36>>2];M=+g[b+40>>2];C=+g[b+48>>2];G=+g[b+52>>2];N=+g[b+56>>2];g[u+16>>2]=L*z+J*A+H*B+C;g[u+16+4>>2]=L*D+J*E+H*F+G;g[u+16+8>>2]=L*I+J*K+H*M+N;g[u+16+12>>2]=0.0;H=+g[u+112>>2];J=+g[u+112+4>>2];L=+g[u+112+8>>2];g[u>>2]=H*z+J*A+L*B+C;g[u+4>>2]=H*D+J*E+L*F+G;g[u+8>>2]=H*I+J*K+L*M+N;g[u+12>>2]=0.0;t=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;Nb[c[(c[t>>2]|0)+8>>2]&127](t,u+16|0,u,e);f=f+1|0;if((f|0)>=(qb[c[(c[d>>2]|0)+100>>2]&127](d)|0))break a}}if((c[r+28>>2]|0)>0){s=0;do{f=c[r+36>>2]|0;q=c[f+(s*36|0)+4>>2]|0;b:do if((q|0)!=0?(t=c[f+(s*36|0)+12>>2]|0,(q|0)>0):0){m=t;h=0.0;i=0.0;j=0.0;o=c[t+(q+-1<<2)>>2]|0;f=0;while(1){p=c[m+(f<<2)>>2]|0;n=c[r+16>>2]|0;h=h+ +g[n+(p<<4)>>2];i=i+ +g[n+(p<<4)+4>>2];j=j+ +g[n+(p<<4)+8>>2];n=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;m=c[(c[n>>2]|0)+8>>2]|0;O=c[r+16>>2]|0;L=+g[O+(o<<4)>>2];z=+g[b>>2];J=+g[O+(o<<4)+4>>2];A=+g[b+4>>2];H=+g[O+(o<<4)+8>>2];B=+g[b+8>>2];D=+g[b+16>>2];E=+g[b+20>>2];F=+g[b+24>>2];I=+g[b+32>>2];K=+g[b+36>>2];M=+g[b+40>>2];C=+g[b+48>>2];G=+g[b+52>>2];N=+g[b+56>>2];g[u+144>>2]=L*z+J*A+H*B+C;g[u+144+4>>2]=L*D+J*E+H*F+G;g[u+144+8>>2]=L*I+J*K+H*M+N;g[u+144+12>>2]=0.0;H=+g[O+(p<<4)>>2];J=+g[O+(p<<4)+4>>2];L=+g[O+(p<<4)+8>>2];g[u+112>>2]=H*z+J*A+L*B+C;g[u+112+4>>2]=H*D+J*E+L*F+G;g[u+112+8>>2]=H*I+J*K+L*M+N;g[u+112+12>>2]=0.0;Nb[m&127](n,u+144|0,u+112|0,e);n=f+1|0;f=c[r+36>>2]|0;if((n|0)>=(c[f+(s*36|0)+4>>2]|0))break b;m=c[f+(s*36|0)+12>>2]|0;o=p;f=n}}else{h=0.0;i=0.0;j=0.0}while(0);k=1.0/+(q|0)*h;i=1.0/+(q|0)*i;h=1.0/+(q|0)*j;O=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;if((qb[c[(c[O>>2]|0)+48>>2]&127](O)|0)&16384|0){c[u+144>>2]=1065353216;c[u+144+4>>2]=1065353216;c[u+144+8>>2]=0;g[u+144+12>>2]=0.0;O=c[r+36>>2]|0;H=+g[O+(s*36|0)+20>>2];J=+g[O+(s*36|0)+24>>2];L=+g[O+(s*36|0)+28>>2];O=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;q=c[(c[O>>2]|0)+8>>2]|0;z=+g[b>>2];A=+g[b+4>>2];B=+g[b+8>>2];D=+g[b+16>>2];E=+g[b+20>>2];F=+g[b+24>>2];I=+g[b+32>>2];K=+g[b+36>>2];M=+g[b+40>>2];C=+g[b+48>>2];G=+g[b+52>>2];N=+g[b+56>>2];g[u+112>>2]=k*z+i*A+h*B+C;g[u+112+4>>2]=k*D+i*E+h*F+G;g[u+112+8>>2]=k*I+i*K+h*M+N;g[u+112+12>>2]=0.0;g[u+16>>2]=(k+H)*z+(i+J)*A+(h+L)*B+C;g[u+16+4>>2]=(k+H)*D+(i+J)*E+(h+L)*F+G;g[u+16+8>>2]=(k+H)*I+(i+J)*K+(h+L)*M+N;g[u+16+12>>2]=0.0;Nb[q&127](O,u+112|0,u+16|0,u+144|0)}s=s+1|0}while((s|0)<(c[r+28>>2]|0))}}while(0);f=c[d+4>>2]|0;if((f+-21|0)>>>0<9){c[u+144>>2]=1566444395;c[u+144+4>>2]=1566444395;c[u+144+8>>2]=1566444395;g[u+144+12>>2]=0.0;c[u+112>>2]=-581039253;c[u+112+4>>2]=-581039253;c[u+112+8>>2]=-581039253;g[u+112+12>>2]=0.0;f=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;c[u+16>>2]=6012;c[u+16+4>>2]=6036;c[u+16+8>>2]=f;c[u+16+12>>2]=c[e>>2];c[u+16+12+4>>2]=c[e+4>>2];c[u+16+12+8>>2]=c[e+8>>2];c[u+16+12+12>>2]=c[e+12>>2];c[u+16+28>>2]=c[b>>2];c[u+16+28+4>>2]=c[b+4>>2];c[u+16+28+8>>2]=c[b+8>>2];c[u+16+28+12>>2]=c[b+12>>2];c[u+16+44>>2]=c[b+16>>2];c[u+16+44+4>>2]=c[b+16+4>>2];c[u+16+44+8>>2]=c[b+16+8>>2];c[u+16+44+12>>2]=c[b+16+12>>2];c[u+16+60>>2]=c[b+32>>2];c[u+16+60+4>>2]=c[b+32+4>>2];c[u+16+60+8>>2]=c[b+32+8>>2];c[u+16+60+12>>2]=c[b+32+12>>2];c[u+16+76>>2]=c[b+48>>2];c[u+16+76+4>>2]=c[b+48+4>>2];c[u+16+76+8>>2]=c[b+48+8>>2];c[u+16+76+12>>2]=c[b+48+12>>2];Nb[c[(c[d>>2]|0)+64>>2]&127](d,u+16|0,u+112|0,u+144|0);f=c[d+4>>2]|0}if((f|0)!=3){l=u;return}c[u+144>>2]=1566444395;c[u+144+4>>2]=1566444395;c[u+144+8>>2]=1566444395;g[u+144+12>>2]=0.0;c[u+112>>2]=-581039253;c[u+112+4>>2]=-581039253;c[u+112+8>>2]=-581039253;g[u+112+12>>2]=0.0;O=qb[c[(c[a>>2]|0)+20>>2]&127](a)|0;c[u+16>>2]=6012;c[u+16+4>>2]=6036;c[u+16+8>>2]=O;c[u+16+12>>2]=c[e>>2];c[u+16+12+4>>2]=c[e+4>>2];c[u+16+12+8>>2]=c[e+8>>2];c[u+16+12+12>>2]=c[e+12>>2];c[u+16+28>>2]=c[b>>2];c[u+16+28+4>>2]=c[b+4>>2];c[u+16+28+8>>2]=c[b+8>>2];c[u+16+28+12>>2]=c[b+12>>2];c[u+16+44>>2]=c[b+16>>2];c[u+16+44+4>>2]=c[b+16+4>>2];c[u+16+44+8>>2]=c[b+16+8>>2];c[u+16+44+12>>2]=c[b+16+12>>2];c[u+16+60>>2]=c[b+32>>2];c[u+16+60+4>>2]=c[b+32+4>>2];c[u+16+60+8>>2]=c[b+32+8>>2];c[u+16+60+12>>2]=c[b+32+12>>2];c[u+16+76>>2]=c[b+48>>2];c[u+16+76+4>>2]=c[b+48+4>>2];c[u+16+76+8>>2]=c[b+48+8>>2];c[u+16+76+12>>2]=c[b+48+12>>2];O=c[d+92>>2]|0;Nb[c[(c[O>>2]|0)+8>>2]&127](O,u+16+4|0,u+112|0,u+144|0);l=u;return}}}function uc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0;t=l;l=l+48|0;z=1.0/+g[a+108>>2];A=1.0/+g[a+112>>2];B=1.0/+g[a+116>>2];u=+g[a+48>>2];v=z*+g[d>>2]+u;o=+g[a+52>>2];j=A*+g[d+4>>2]+o;q=+g[a+56>>2];p=B*+g[d+8>>2]+q;u=z*+g[e>>2]+u;o=A*+g[e+4>>2]+o;q=B*+g[e+8>>2]+q;B=+g[a+16>>2];v=v>2];j=j>2];p=p>2];v=y>2];j=x>2];p=w>2]|0)+-1|0;d=(c[a+68>>2]|0)+-1|0;switch(c[a+104>>2]|0){case 0:{d=(e|0)<(d|0)?e:d;i=(h|0)<(i|0)?h:i;e=(k|0)>0?k:0;r=(n|0)>0?n:0;break}case 1:{d=(e|0)<(d|0)?e:d;i=(f|0)<(i|0)?f:i;e=(k|0)>0?k:0;r=(m|0)>0?m:0;break}case 2:{d=(h|0)<(d|0)?h:d;i=(f|0)<(i|0)?f:i;e=(n|0)>0?n:0;r=(m|0)>0?m:0;break}default:{e=0;r=0}}if((e|0)>=(d|0)){l=t;return}n=(r|0)<(i|0);k=e;while(1){if(n){m=(k&1|0)==0;e=k+1|0;q=+(k|0);h=r;while(1){f=c[a+100>>2]|0;do if(!((f&255)<<24>>24)){if(f&65280|0?(h+k&1|0)==0:0){s=16;break}if(!(m&(f&16711680|0)!=0)){j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,h,k);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(h|0)-+g[a+80>>2]*.5;p=q-+g[a+84>>2]*.5;g[t>>2]=j;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;break}case 1:{B=+(h|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=q-+g[a+84>>2]*.5;g[t>>2]=B;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;j=B;break}case 2:{B=+(h|0)-+g[a+80>>2]*.5;o=q-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t>>2]=B;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;j=B;break}default:{j=+g[t>>2];o=+g[t+4>>2];p=+g[t+8>>2]}}g[t>>2]=j*+g[a+108>>2];g[t+4>>2]=o*+g[a+112>>2];g[t+8>>2]=p*+g[a+116>>2];j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,h,e);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(h|0)-+g[a+80>>2]*.5;p=+(e|0)-+g[a+84>>2]*.5;g[t+16>>2]=j;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;break}case 1:{B=+(h|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=+(e|0)-+g[a+84>>2]*.5;g[t+16>>2]=B;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;j=B;break}case 2:{B=+(h|0)-+g[a+80>>2]*.5;o=+(e|0)-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t+16>>2]=B;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;j=B;break}default:{j=+g[t+16>>2];o=+g[t+20>>2];p=+g[t+24>>2]}}g[t+16>>2]=j*+g[a+108>>2];g[t+20>>2]=o*+g[a+112>>2];g[t+24>>2]=p*+g[a+116>>2];f=h+1|0;j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,f,k);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(f|0)-+g[a+80>>2]*.5;p=q-+g[a+84>>2]*.5;g[t+32>>2]=j;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;break}case 1:{B=+(f|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=q-+g[a+84>>2]*.5;g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}case 2:{B=+(f|0)-+g[a+80>>2]*.5;o=q-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}default:{j=+g[t+32>>2];o=+g[t+36>>2];p=+g[t+40>>2]}}g[t+32>>2]=j*+g[a+108>>2];g[t+36>>2]=o*+g[a+112>>2];g[t+40>>2]=p*+g[a+116>>2];Nb[c[(c[b>>2]|0)+8>>2]&127](b,t,h,k);j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,f,k);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(f|0)-+g[a+80>>2]*.5;p=q-+g[a+84>>2]*.5;g[t>>2]=j;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;break}case 1:{B=+(f|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=q-+g[a+84>>2]*.5;g[t>>2]=B;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;j=B;break}case 2:{B=+(f|0)-+g[a+80>>2]*.5;o=q-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t>>2]=B;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;j=B;break}default:{j=+g[t>>2];o=+g[t+4>>2];p=+g[t+8>>2]}}g[t>>2]=j*+g[a+108>>2];g[t+4>>2]=o*+g[a+112>>2];g[t+8>>2]=p*+g[a+116>>2];j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,f,e);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(f|0)-+g[a+80>>2]*.5;p=+(e|0)-+g[a+84>>2]*.5;g[t+32>>2]=j;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;break}case 1:{B=+(f|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=+(e|0)-+g[a+84>>2]*.5;g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}case 2:{B=+(f|0)-+g[a+80>>2]*.5;o=+(e|0)-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}default:{j=+g[t+32>>2];o=+g[t+36>>2];p=+g[t+40>>2]}}g[t+32>>2]=j*+g[a+108>>2];g[t+36>>2]=o*+g[a+112>>2];g[t+40>>2]=p*+g[a+116>>2];Nb[c[(c[b>>2]|0)+8>>2]&127](b,t,h,k)}else s=16}else s=16;while(0);if((s|0)==16){s=0;j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,h,k);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(h|0)-+g[a+80>>2]*.5;p=q-+g[a+84>>2]*.5;g[t>>2]=j;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;break}case 1:{B=+(h|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=q-+g[a+84>>2]*.5;g[t>>2]=B;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;j=B;break}case 2:{B=+(h|0)-+g[a+80>>2]*.5;o=q-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t>>2]=B;g[t+4>>2]=o;g[t+8>>2]=p;g[t+12>>2]=0.0;j=B;break}default:{j=+g[t>>2];o=+g[t+4>>2];p=+g[t+8>>2]}}g[t>>2]=j*+g[a+108>>2];g[t+4>>2]=o*+g[a+112>>2];g[t+8>>2]=p*+g[a+116>>2];f=h+1|0;j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,f,k);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(f|0)-+g[a+80>>2]*.5;p=q-+g[a+84>>2]*.5;g[t+16>>2]=j;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;break}case 1:{B=+(f|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=q-+g[a+84>>2]*.5;g[t+16>>2]=B;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;j=B;break}case 2:{B=+(f|0)-+g[a+80>>2]*.5;o=q-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t+16>>2]=B;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;j=B;break}default:{j=+g[t+16>>2];o=+g[t+20>>2];p=+g[t+24>>2]}}g[t+16>>2]=j*+g[a+108>>2];g[t+20>>2]=o*+g[a+112>>2];g[t+24>>2]=p*+g[a+116>>2];j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,f,e);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(f|0)-+g[a+80>>2]*.5;p=+(e|0)-+g[a+84>>2]*.5;g[t+32>>2]=j;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;break}case 1:{B=+(f|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=+(e|0)-+g[a+84>>2]*.5;g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}case 2:{B=+(f|0)-+g[a+80>>2]*.5;o=+(e|0)-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}default:{j=+g[t+32>>2];o=+g[t+36>>2];p=+g[t+40>>2]}}g[t+32>>2]=j*+g[a+108>>2];g[t+36>>2]=o*+g[a+112>>2];g[t+40>>2]=p*+g[a+116>>2];Nb[c[(c[b>>2]|0)+8>>2]&127](b,t,h,k);j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,f,e);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(f|0)-+g[a+80>>2]*.5;p=+(e|0)-+g[a+84>>2]*.5;g[t+16>>2]=j;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;break}case 1:{B=+(f|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=+(e|0)-+g[a+84>>2]*.5;g[t+16>>2]=B;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;j=B;break}case 2:{B=+(f|0)-+g[a+80>>2]*.5;o=+(e|0)-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t+16>>2]=B;g[t+20>>2]=o;g[t+24>>2]=p;g[t+28>>2]=0.0;j=B;break}default:{j=+g[t+16>>2];o=+g[t+20>>2];p=+g[t+24>>2]}}g[t+16>>2]=j*+g[a+108>>2];g[t+20>>2]=o*+g[a+112>>2];g[t+24>>2]=p*+g[a+116>>2];j=+jb[c[(c[a>>2]|0)+68>>2]&15](a,h,e);switch(c[a+104>>2]|0){case 0:{j=j-+g[a+48>>2];o=+(h|0)-+g[a+80>>2]*.5;p=+(e|0)-+g[a+84>>2]*.5;g[t+32>>2]=j;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;break}case 1:{B=+(h|0)-+g[a+80>>2]*.5;o=j-+g[a+52>>2];p=+(e|0)-+g[a+84>>2]*.5;g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}case 2:{B=+(h|0)-+g[a+80>>2]*.5;o=+(e|0)-+g[a+84>>2]*.5;p=j-+g[a+56>>2];g[t+32>>2]=B;g[t+36>>2]=o;g[t+40>>2]=p;g[t+44>>2]=0.0;j=B;break}default:{j=+g[t+32>>2];o=+g[t+36>>2];p=+g[t+40>>2]}}g[t+32>>2]=j*+g[a+108>>2];g[t+36>>2]=o*+g[a+112>>2];g[t+40>>2]=p*+g[a+116>>2];Nb[c[(c[b>>2]|0)+8>>2]&127](b,t,h,k)}if((f|0)==(i|0))break;else h=f}}else e=k+1|0;if((e|0)==(d|0))break;else k=e}l=t;return}function vc(b,d){b=b|0;d=+d;var e=0,f=0.0,h=0,i=0,j=0,k=0.0,m=0.0,n=0,o=0,p=0,q=0.0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0,y=0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0;s=l;l=l+96|0;o=c[b+136>>2]|0;if(!o){l=s;return}j=c[b+8>>2]|0;if((j|0)<(o|0)){if((c[b+12>>2]|0)<(o|0)){c[6472]=(c[6472]|0)+1;e=ic((o<<4|3)+16|0)|0;if(!e)i=0;else{c[(e+4+15&-16)+-4>>2]=e;i=e+4+15&-16}e=c[b+8>>2]|0;if((e|0)>0){h=0;do{p=i+(h<<4)|0;n=(c[b+16>>2]|0)+(h<<4)|0;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];c[p+8>>2]=c[n+8>>2];c[p+12>>2]=c[n+12>>2];h=h+1|0}while((h|0)!=(e|0))}e=c[b+16>>2]|0;if(e|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=i;c[b+12>>2]=o;h=b+16|0}else h=b+16|0;e=j;do{p=(c[h>>2]|0)+(e<<4)|0;c[p>>2]=c[s+48>>2];c[p+4>>2]=c[s+48+4>>2];c[p+8>>2]=c[s+48+8>>2];c[p+12>>2]=c[s+48+12>>2];e=e+1|0}while((e|0)!=(o|0))}c[b+8>>2]=o;j=c[b+28>>2]|0;if((j|0)<(o|0)){if((c[b+32>>2]|0)<(o|0)){c[6472]=(c[6472]|0)+1;e=ic((o<<4|3)+16|0)|0;if(!e)i=0;else{c[(e+4+15&-16)+-4>>2]=e;i=e+4+15&-16}e=c[b+28>>2]|0;if((e|0)>0){h=0;do{p=i+(h<<4)|0;n=(c[b+36>>2]|0)+(h<<4)|0;c[p>>2]=c[n>>2];c[p+4>>2]=c[n+4>>2];c[p+8>>2]=c[n+8>>2];c[p+12>>2]=c[n+12>>2];h=h+1|0}while((h|0)!=(e|0))}e=c[b+36>>2]|0;if(e|0){if(a[b+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+36>>2]=0}a[b+40>>0]=1;c[b+36>>2]=i;c[b+32>>2]=o;h=b+36|0}else h=b+36|0;e=j;do{p=(c[h>>2]|0)+(e<<4)|0;c[p>>2]=c[s+48>>2];c[p+4>>2]=c[s+48+4>>2];c[p+8>>2]=c[s+48+8>>2];c[p+12>>2]=c[s+48+12>>2];e=e+1|0}while((e|0)!=(o|0))}c[b+28>>2]=o;n=c[b+48>>2]|0;if((n|0)<(o|0)){do if((c[b+52>>2]|0)<(o|0)){c[6472]=(c[6472]|0)+1;e=ic((o<<2|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}h=c[b+48>>2]|0;i=c[b+56>>2]|0;if((h|0)<=0){if(!i){a[b+60>>0]=1;c[b+56>>2]=e;c[b+52>>2]=o;h=o<<2;break}}else{j=0;do{c[e+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(h|0))}if(a[b+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}a[b+60>>0]=1;c[b+56>>2]=e;c[b+52>>2]=o;h=o<<2}else{h=o<<2;e=c[b+56>>2]|0}while(0);Nk(e+(n<<2)|0,0,h-(n<<2)|0)|0}c[b+48>>2]=o;n=c[b+68>>2]|0;if((n|0)<(o|0)){do if((c[b+72>>2]|0)<(o|0)){c[6472]=(c[6472]|0)+1;e=ic((o<<2|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}h=c[b+68>>2]|0;i=c[b+76>>2]|0;if((h|0)<=0){if(!i){a[b+80>>0]=1;c[b+76>>2]=e;c[b+72>>2]=o;h=o<<2;break}}else{j=0;do{c[e+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(h|0))}if(a[b+80>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}a[b+80>>0]=1;c[b+76>>2]=e;c[b+72>>2]=o;h=o<<2}else{h=o<<2;e=c[b+76>>2]|0}while(0);Nk(e+(n<<2)|0,0,h-(n<<2)|0)|0}c[b+68>>2]=o;e=c[b+136>>2]|0;if((e|0)<=0){l=s;return}h=c[b+76>>2]|0;i=c[b+56>>2]|0;j=0;do{g[h+(j<<2)>>2]=0.0;g[i+(j<<2)>>2]=0.0;j=j+1|0}while((j|0)!=(e|0));j=0;do{h=c[b+144>>2]|0;i=c[h+(j*284|0)+88>>2]|0;if(i){e=h+(j*284|0)+92|0;c[s+48>>2]=c[e>>2];c[s+48+4>>2]=c[e+4>>2];c[s+48+8>>2]=c[e+8>>2];c[s+48+12>>2]=c[e+12>>2];e=h+(j*284|0)+108|0;c[s+48+16>>2]=c[e>>2];c[s+48+16+4>>2]=c[e+4>>2];c[s+48+16+8>>2]=c[e+8>>2];c[s+48+16+12>>2]=c[e+12>>2];e=h+(j*284|0)+124|0;c[s+48+32>>2]=c[e>>2];c[s+48+32+4>>2]=c[e+4>>2];c[s+48+32+8>>2]=c[e+8>>2];c[s+48+32+12>>2]=c[e+12>>2];e=c[b+36>>2]|0;x=c[b+120>>2]|0;o=c[s+48+16+(x<<2)>>2]|0;y=c[s+48+32+(x<<2)>>2]|0;c[e+(j<<4)>>2]=c[s+48+(x<<2)>>2];c[e+(j<<4)+4>>2]=o;c[e+(j<<4)+8>>2]=y;g[e+(j<<4)+12>>2]=0.0;e=c[b+36>>2]|0;y=e+(j<<4)|0;z=+g[y>>2];o=h+(j*284|0)|0;f=+g[o>>2];x=e+(j<<4)+4|0;w=+g[x>>2];n=h+(j*284|0)+4|0;k=+g[n>>2];e=e+(j<<4)+8|0;t=+g[e>>2];p=h+(j*284|0)+8|0;v=+g[p>>2];m=z-f*(z*f+w*k+t*v);u=w-k*(z*f+w*k+t*v);v=t-v*(z*f+w*k+t*v);t=1.0/+C(+(m*m+u*u+v*v));g[y>>2]=m*t;g[x>>2]=u*t;g[e>>2]=v*t;e=c[b+16>>2]|0;k=+g[n>>2];w=+g[p>>2];f=+g[o>>2];g[e+(j<<4)>>2]=k*v*t-w*u*t;g[e+(j<<4)+4>>2]=w*m*t-v*t*f;g[e+(j<<4)+8>>2]=u*t*f-k*m*t;g[e+(j<<4)+12>>2]=0.0;e=c[b+16>>2]|0;o=e+(j<<4)|0;t=+g[o>>2];p=e+(j<<4)+4|0;m=+g[p>>2];e=e+(j<<4)+8|0;k=+g[e>>2];f=1.0/+C(+(t*t+m*m+k*k));g[o>>2]=t*f;g[p>>2]=m*f;g[e>>2]=k*f;e=c[b+116>>2]|0;p=c[b+36>>2]|0;f=+g[p+(j<<4)>>2];k=+g[p+(j<<4)+4>>2];m=+g[p+(j<<4)+8>>2];if(f*f+k*k+m*m>1.100000023841858)f=0.0;else{D=+g[h+(j*284|0)+16>>2];H=D-+g[e+52>>2];F=+g[h+(j*284|0)+20>>2];J=F-+g[e+56>>2];K=+g[h+(j*284|0)+24>>2];M=K-+g[e+60>>2];D=D-+g[i+52>>2];F=F-+g[i+56>>2];K=K-+g[i+60>>2];G=+g[e+332>>2];N=+g[e+336>>2];I=+g[e+328>>2];B=+g[i+332>>2];L=+g[i+336>>2];E=+g[i+328>>2];A=(m*J-k*M)*+g[e+4>>2]+(f*M-m*H)*+g[e+20>>2]+(k*H-f*J)*+g[e+36>>2];t=(m*J-k*M)*+g[e+8>>2]+(f*M-m*H)*+g[e+24>>2]+(k*H-f*J)*+g[e+40>>2];u=(m*J-k*M)*+g[e+12>>2]+(f*M-m*H)*+g[e+28>>2]+(k*H-f*J)*+g[e+44>>2];v=(F*-m-K*-k)*+g[i+4>>2]+(K*-f-D*-m)*+g[i+20>>2]+(D*-k-F*-f)*+g[i+36>>2];w=(F*-m-K*-k)*+g[i+8>>2]+(K*-f-D*-m)*+g[i+24>>2]+(D*-k-F*-f)*+g[i+40>>2];z=(F*-m-K*-k)*+g[i+12>>2]+(K*-f-D*-m)*+g[i+28>>2]+(D*-k-F*-f)*+g[i+44>>2];f=(f*(M*G-J*N+ +g[e+312>>2]-(K*B-F*L+ +g[i+312>>2]))+k*(+g[e+316>>2]+(H*N-M*I)-(+g[i+316>>2]+(D*L-K*E)))+m*(J*I-H*G+ +g[e+320>>2]-(F*E-D*B+ +g[i+320>>2])))*-.20000000298023224*(1.0/(+g[i+344>>2]+(+g[e+344>>2]+(A*A*+g[e+396>>2]+t*t*+g[e+400>>2]+u*u*+g[e+404>>2]))+(v*v*+g[i+396>>2]+w*w*+g[i+400>>2]+z*z*+g[i+404>>2])))}g[(c[b+76>>2]|0)+(j<<2)>>2]=f;e=c[b+136>>2]|0}j=j+1|0}while((j|0)<(e|0));if((e|0)<=0){l=s;return}h=c[b+144>>2]|0;i=0;p=0;while(1){e=c[h+(p*284|0)+88>>2]|0;if(e){f=+g[h+(p*284|0)+252>>2];if(f!=0.0){n=h;f=f*d}else{N=+g[h+(p*284|0)+256>>2];N=N==0.0?0.0:N;n=c[b+116>>2]|0;y=c[b+16>>2]|0;H=+g[h+(p*284|0)+16>>2];F=+g[h+(p*284|0)+20>>2];A=+g[h+(p*284|0)+24>>2];w=+g[y+(p<<4)>>2];E=+g[y+(p<<4)+4>>2];f=+g[y+(p<<4)+8>>2];P=H-+g[n+52>>2];Q=F-+g[n+56>>2];k=A-+g[n+60>>2];m=+g[n+264>>2]*(Q*f-k*E)+ +g[n+280>>2]*(k*w-P*f)+(P*E-Q*w)*+g[n+296>>2];R=(Q*f-k*E)*+g[n+268>>2]+(k*w-P*f)*+g[n+284>>2]+(P*E-Q*w)*+g[n+300>>2];O=(Q*f-k*E)*+g[n+272>>2]+(k*w-P*f)*+g[n+288>>2]+(P*E-Q*w)*+g[n+304>>2];L=H-+g[e+52>>2];J=F-+g[e+56>>2];D=A-+g[e+60>>2];v=(E*L-w*J)*+g[e+296>>2]+(+g[e+264>>2]*(f*J-E*D)+ +g[e+280>>2]*(w*D-f*L));t=(f*J-E*D)*+g[e+268>>2]+(w*D-f*L)*+g[e+284>>2]+(E*L-w*J)*+g[e+300>>2];u=(f*J-E*D)*+g[e+272>>2]+(w*D-f*L)*+g[e+288>>2]+(E*L-w*J)*+g[e+304>>2];H=H-+g[n+52>>2];F=F-+g[n+56>>2];A=A-+g[n+60>>2];I=+g[n+332>>2];z=+g[n+336>>2];G=+g[n+328>>2];M=+g[e+332>>2];B=+g[e+336>>2];K=+g[e+328>>2];f=-(1.0/(+g[n+344>>2]+(f*(Q*m-P*R)+(w*(k*R-Q*O)+E*(P*O-k*m)))+(+g[e+344>>2]+(f*(J*v-L*t)+(w*(D*t-J*u)+E*(L*u-D*v)))))*((A*I-F*z+ +g[n+312>>2]-(D*M-J*B+ +g[e+312>>2]))*w+(+g[n+316>>2]+(H*z-A*G)-(+g[e+316>>2]+(L*B-D*K)))*E+(F*G-H*I+ +g[n+320>>2]-(J*K-L*M+ +g[e+320>>2]))*f));f=N>2]|0;f=f<-N?-N:f}o=c[b+56>>2]|0;y=o+(p<<2)|0;g[y>>2]=0.0;e=n+(p*284|0)+280|0;g[e>>2]=1.0;m=+g[h+(p*284|0)+276>>2]*d*+g[h+(p*284|0)+228>>2];g[y>>2]=f;k=f*.5;f=+g[(c[b+76>>2]|0)+(p<<2)>>2];if(k*k+f*f>m*m){R=m/+C(+(k*k+f*f));g[e>>2]=R*+g[e>>2];e=1}else e=i}else{o=c[b+56>>2]|0;g[o+(p<<2)>>2]=0.0;g[h+(p*284|0)+280>>2]=1.0;n=h;e=i}p=p+1|0;j=c[b+136>>2]|0;if((p|0)>=(j|0))break;else{h=n;i=e}}if(e){if((j|0)<=0){l=s;return}e=c[b+76>>2]|0;i=0;do{h=e+(i<<2)|0;if(+g[h>>2]!=0.0?(r=n+(i*284|0)+280|0,q=+g[r>>2],q<1.0):0){y=o+(i<<2)|0;g[y>>2]=q*+g[y>>2];g[h>>2]=+g[r>>2]*+g[h>>2]}i=i+1|0}while((i|0)!=(j|0))}if((j|0)<=0){l=s;return}p=n;i=o;e=0;while(1){h=c[b+116>>2]|0;j=p+(e*284|0)+16|0;k=+g[j>>2]-+g[h+52>>2];o=p+(e*284|0)+20|0;d=+g[o>>2]-+g[h+56>>2];n=p+(e*284|0)+24|0;m=+g[n>>2]-+g[h+60>>2];g[s+48>>2]=k;g[s+48+4>>2]=d;g[s+48+8>>2]=m;g[s+48+12>>2]=0.0;f=+g[i+(e<<2)>>2];if(f!=0.0){y=c[b+16>>2]|0;Q=f*+g[y+(e<<4)+4>>2];R=f*+g[y+(e<<4)+8>>2];g[s+32>>2]=+g[y+(e<<4)>>2]*f;g[s+32+4>>2]=Q;g[s+32+8>>2]=R;g[s+32+12>>2]=0.0;Zk(h,s+32|0,s+48|0)}f=+g[(c[b+76>>2]|0)+(e<<2)>>2];if(f!=0.0){y=c[(c[b+144>>2]|0)+(e*284|0)+88>>2]|0;Q=+g[o>>2]-+g[y+56>>2];P=+g[n>>2]-+g[y+60>>2];g[s+32>>2]=+g[j>>2]-+g[y+52>>2];g[s+32+4>>2]=Q;g[s+32+8>>2]=P;g[s+32+12>>2]=0.0;x=c[b+36>>2]|0;P=+g[x+(e<<4)>>2]*f;Q=f*+g[x+(e<<4)+4>>2];R=f*+g[x+(e<<4)+8>>2];g[s+16>>2]=P;g[s+16+4>>2]=Q;g[s+16+8>>2]=R;g[s+16+12>>2]=0.0;x=c[b+116>>2]|0;r=c[b+124>>2]|0;L=+g[x+4+(r<<2)>>2];M=+g[x+20+(r<<2)>>2];N=+g[x+36+(r<<2)>>2];O=(L*k+M*d+N*m)*(1.0-+g[p+(e*284|0)+244>>2]);g[s+48>>2]=k-L*O;g[s+48+4>>2]=d-M*O;g[s+48+8>>2]=m-N*O;Zk(x,s+16|0,s+48|0);g[s>>2]=-P;g[s+4>>2]=-Q;g[s+8>>2]=-R;g[s+12>>2]=0.0;Zk(y,s,s+32|0)}e=e+1|0;if((e|0)>=(c[b+136>>2]|0))break;p=c[b+144>>2]|0;i=c[b+56>>2]|0}l=s;return}function wc(b,e,f,h,i,k,m){b=b|0;e=e|0;f=f|0;h=h|0;i=i|0;k=k|0;m=m|0;var n=0.0,o=0.0,p=0.0,q=0,r=0,s=0.0,t=0,u=0,v=0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,O=0.0,P=0;w=l;l=l+9824|0;q=k;r=q+36|0;do{c[q>>2]=0;q=q+4|0}while((q|0)<(r|0));c[w+9680>>2]=b;c[w+9680+4>>2]=f;z=+g[h>>2];M=+g[e>>2];A=+g[h+16>>2];D=+g[e+16>>2];B=+g[h+32>>2];N=+g[e+32>>2];E=+g[e+4>>2];O=+g[e+20>>2];F=+g[e+36>>2];s=+g[e+8>>2];n=+g[e+24>>2];y=+g[e+40>>2];L=+g[h+4>>2];K=+g[h+20>>2];J=+g[h+36>>2];I=+g[h+8>>2];H=+g[h+24>>2];G=+g[h+40>>2];g[w+9680+8>>2]=z*M+A*D+B*N;g[w+9680+12>>2]=z*E+A*O+B*F;g[w+9680+16>>2]=z*s+A*n+B*y;g[w+9680+20>>2]=0.0;g[w+9680+24>>2]=M*L+D*K+N*J;g[w+9680+28>>2]=E*L+O*K+F*J;g[w+9680+32>>2]=s*L+n*K+y*J;g[w+9680+36>>2]=0.0;g[w+9680+40>>2]=M*I+D*H+N*G;g[w+9680+44>>2]=E*I+O*H+F*G;g[w+9680+48>>2]=s*I+n*H+y*G;g[w+9680+52>>2]=0.0;y=+g[h+48>>2]-+g[e+48>>2];n=+g[h+52>>2]-+g[e+52>>2];s=+g[h+56>>2]-+g[e+56>>2];F=+g[e>>2];O=+g[h>>2];E=+g[e+16>>2];N=+g[h+16>>2];D=+g[e+32>>2];M=+g[h+32>>2];B=+g[e+4>>2];A=+g[e+20>>2];z=+g[e+36>>2];x=+g[e+8>>2];o=+g[e+24>>2];p=+g[e+40>>2];g[w+9680+56>>2]=F*O+E*N+D*M;g[w+9680+60>>2]=F*L+E*K+D*J;g[w+9680+64>>2]=F*I+E*H+D*G;g[w+9680+68>>2]=0.0;g[w+9680+72>>2]=O*B+N*A+M*z;g[w+9680+76>>2]=L*B+K*A+J*z;g[w+9680+80>>2]=I*B+H*A+G*z;g[w+9680+84>>2]=0.0;g[w+9680+88>>2]=O*x+N*o+M*p;g[w+9680+92>>2]=L*x+K*o+J*p;g[w+9680+96>>2]=I*x+H*o+G*p;g[w+9680+100>>2]=0.0;g[w+9680+104>>2]=y*F+n*E+s*D;g[w+9680+108>>2]=y*B+n*A+s*z;g[w+9680+112>>2]=y*x+n*o+s*p;g[w+9680+116>>2]=0.0;c[w+9680+120>>2]=m?81:80;c[w+9680+124>>2]=0;c[w+9296+364>>2]=0;c[w+9296+128>>2]=0;c[w+9296+128+4>>2]=0;c[w+9296+128+8>>2]=0;c[w+9296+128+12>>2]=0;c[w+9296+376>>2]=2;c[w+9296+368>>2]=0;g[w+9296+144>>2]=0.0;p=-+g[i+4>>2];s=-+g[i+8>>2];g[w+9808>>2]=-+g[i>>2];g[w+9808+4>>2]=p;g[w+9808+8>>2]=s;g[w+9808+12>>2]=0.0;switch(Ac(w+9296|0,w+9680|0,w+9808|0)|0){case 1:{c[w+9280>>2]=0;c[w+9280+4>>2]=0;c[w+9280+8>>2]=0;c[w+9280+12>>2]=0;c[w>>2]=9;c[w+9276>>2]=0;c[w+40>>2]=0;c[w+40+4>>2]=0;c[w+40+8>>2]=0;c[w+40+12>>2]=0;c[w+40+16>>2]=0;f=0;do{m=128-f+-1|0;c[w+2108+(m*56|0)+44>>2]=0;b=c[w+9288>>2]|0;c[w+2108+(m*56|0)+48>>2]=b;if(b|0)c[b+44>>2]=w+2108+(m*56|0);c[w+9288>>2]=w+2108+(m*56|0);c[w+9292>>2]=(c[w+9292>>2]|0)+1;f=f+1|0}while((f|0)!=128);p=+g[i>>2];s=+g[i+4>>2];o=+g[i+8>>2];t=c[w+9296+372>>2]|0;do if((c[t+32>>2]|0)>>>0>1?hd(w+9296|0)|0:0){b=c[w+9280>>2]|0;if(b|0){q=c[w+9284>>2]|0;r=c[w+9292>>2]|0;do{m=b+44|0;h=b+48|0;f=c[h>>2]|0;if(f|0)c[f+44>>2]=c[m>>2];f=c[m>>2]|0;if(f|0)c[f+48>>2]=c[h>>2];if((c[w+9280>>2]|0)==(b|0))c[w+9280>>2]=c[h>>2];q=q+-1|0;c[b+44>>2]=0;c[h>>2]=c[w+9288>>2];f=c[w+9288>>2]|0;if(f|0)c[f+44>>2]=b;c[w+9288>>2]=b;r=r+1|0;b=c[w+9280>>2]|0}while((b|0)!=0);c[w+9284>>2]=q;c[w+9292>>2]=r}c[w>>2]=0;c[w+9276>>2]=0;b=c[t>>2]|0;f=c[t+12>>2]|0;O=+g[f+16>>2];G=+g[b+16>>2]-O;I=+g[f+20>>2];J=+g[b+20>>2]-I;L=+g[f+24>>2];M=+g[b+24>>2]-L;f=c[t+4>>2]|0;K=+g[f+16>>2]-O;N=+g[f+20>>2]-I;H=+g[f+24>>2]-L;m=c[t+8>>2]|0;O=+g[m+16>>2]-O;I=+g[m+20>>2]-I;L=+g[m+24>>2]-L;if(G*N*L+(J*H*O+M*K*I-G*H*I-J*K*L)-M*N*O<0.0){c[t>>2]=f;c[t+4>>2]=b;h=c[t+16>>2]|0;c[t+16>>2]=c[t+20>>2];c[t+20>>2]=h;h=f}else{h=b;b=f}h=cf(w,h,b,m,1)|0;q=cf(w,c[t+4>>2]|0,c[t>>2]|0,c[t+12>>2]|0,1)|0;r=cf(w,c[t+8>>2]|0,c[t+4>>2]|0,c[t+12>>2]|0,1)|0;i=cf(w,c[t>>2]|0,c[t+8>>2]|0,c[t+12>>2]|0,1)|0;if((c[w+9284>>2]|0)==4){b=c[w+9280>>2]|0;n=+g[b+16>>2];f=c[b+48>>2]|0;if(f){o=n*n;while(1){n=+g[f+16>>2];m=n*n>2]|0;if(!f)break;else o=m?n*n:o}}o=+g[b>>2];s=+g[b+4>>2];p=+g[b+8>>2];n=+g[b+12>>2];u=c[b+16>>2]|0;P=c[b+20>>2]|0;f=c[b+24>>2]|0;m=c[b+28>>2]|0;a[h+52>>0]=0;c[h+32>>2]=q;a[q+52>>0]=0;c[q+32>>2]=h;a[h+53>>0]=0;c[h+36>>2]=r;a[r+52>>0]=1;c[r+32>>2]=h;a[h+54>>0]=0;c[h+40>>2]=i;a[i+52>>0]=2;c[i+32>>2]=h;a[q+53>>0]=2;c[q+36>>2]=i;a[i+54>>0]=1;c[i+40>>2]=q;a[q+54>>0]=1;c[q+40>>2]=r;a[r+53>>0]=2;c[r+36>>2]=q;a[r+54>>0]=1;c[r+40>>2]=i;a[i+53>>0]=2;c[i+36>>2]=r;c[w>>2]=0;t=b;r=P;i=f;q=m;b=u;u=0;while(1){f=c[w+9276>>2]|0;if(f>>>0>=64){v=43;break}c[w+9808>>2]=0;c[w+9808+4>>2]=0;c[w+9808+8>>2]=0;c[w+9276>>2]=f+1;u=u+1|0;a[t+55>>0]=u;h=t+4|0;P=t+8|0;uh(w+9296|0,+g[t>>2],+g[h>>2],+g[P>>2],w+60+(f<<5)|0);if(+g[t>>2]*+g[w+60+(f<<5)+16>>2]+ +g[h>>2]*+g[w+60+(f<<5)+20>>2]+ +g[P>>2]*+g[w+60+(f<<5)+24>>2]-+g[t+16>>2]>9.999999747378752e-05)h=0;else{f=7;v=42;break}do{m=eh(w,u,w+60+(f<<5)|0,c[t+32+(h<<2)>>2]|0,d[t+52+h>>0]|0,w+9808|0)|0;h=h+1|0}while(m&h>>>0<3);if(!(m&(c[w+9808+8>>2]|0)>>>0>2)){f=4;v=42;break}m=c[w+9808>>2]|0;f=c[w+9808+4>>2]|0;a[m+53>>0]=2;c[m+36>>2]=f;a[f+54>>0]=1;c[f+40>>2]=m;f=t+44|0;m=t+48|0;b=c[m>>2]|0;if(b|0)c[b+44>>2]=c[f>>2];b=c[f>>2]|0;if(b|0)c[b+48>>2]=c[m>>2];if((c[w+9280>>2]|0)==(t|0))c[w+9280>>2]=c[m>>2];c[w+9284>>2]=(c[w+9284>>2]|0)+-1;c[t+44>>2]=0;c[m>>2]=c[w+9288>>2];b=c[w+9288>>2]|0;if(b|0)c[b+44>>2]=t;c[w+9288>>2]=t;c[w+9292>>2]=(c[w+9292>>2]|0)+1;f=c[w+9280>>2]|0;n=+g[f+16>>2];b=c[f+48>>2]|0;if(b){o=n*n;while(1){n=+g[b+16>>2];m=n*n>2]|0;if(!b)break;else o=m?n*n:o}}o=+g[f>>2];s=+g[f+4>>2];p=+g[f+8>>2];n=+g[f+12>>2];b=c[f+16>>2]|0;m=c[f+20>>2]|0;h=c[f+24>>2]|0;q=c[f+28>>2]|0;if(u>>>0>=255){f=q;break}else{t=f;r=m;i=h}}if((v|0)==42){c[w>>2]=f;m=r;h=i;f=q}else if((v|0)==43){c[w>>2]=6;m=r;h=i;f=q}M=(c[j>>2]=b,+g[j>>2]);K=o*M;I=s*M;M=p*M;g[w+40>>2]=o;g[w+44>>2]=s;g[w+48>>2]=p;g[w+52>>2]=n;c[w+56>>2]=b;c[w+36>>2]=3;c[w+4>>2]=m;c[w+8>>2]=h;c[w+12>>2]=f;P=h;N=+g[P+16>>2]-K;G=+g[P+20>>2]-I;F=+g[P+24>>2]-M;u=f;L=+g[u+16>>2]-K;H=+g[u+20>>2]-I;J=+g[u+24>>2]-M;N=+C(+((N*H-G*L)*(N*H-G*L)+((G*J-F*H)*(G*J-F*H)+(F*L-N*J)*(F*L-N*J))));g[w+20>>2]=N;L=+g[u+16>>2]-K;F=+g[u+20>>2]-I;u=m;H=+g[u+16>>2]-K;G=+g[u+20>>2]-I;O=+g[u+24>>2]-M;O=+C(+((L*G-F*H)*(L*G-F*H)+((F*O-J*G)*(F*O-J*G)+(J*H-L*O)*(J*H-L*O))));g[w+24>>2]=O;L=+g[u+16>>2]-K;H=+g[u+20>>2]-I;J=+g[u+24>>2]-M;K=+g[P+16>>2]-K;I=+g[P+20>>2]-I;M=+g[P+24>>2]-M;M=+C(+((L*I-H*K)*(L*I-H*K)+((H*M-J*I)*(H*M-J*I)+(J*K-L*M)*(J*K-L*M))));g[w+20>>2]=N/(M+(N+O));g[w+24>>2]=O/(M+(N+O));g[w+28>>2]=M/(M+(N+O));if((c[w>>2]|0)!=9)if(!(c[w+36>>2]|0)){p=0.0;o=0.0;n=0.0;break}else{h=w+36|0;v=51;break}c[k>>2]=3;P=0;l=w;return P|0}else v=45}else v=45;while(0);if((v|0)==45){c[w>>2]=8;g[w+40>>2]=p;g[w+44>>2]=s;g[w+48>>2]=o;g[w+52>>2]=0.0;n=+C(+(p*p+s*s+o*o));if(n>0.0){g[w+40>>2]=1.0/n*p;g[w+44>>2]=1.0/n*s;g[w+48>>2]=1.0/n*o}else{c[w+40>>2]=1065353216;c[w+44>>2]=0;c[w+48>>2]=0}g[w+52>>2]=0.0;g[w+56>>2]=0.0;c[w+36>>2]=1;c[w+4>>2]=c[t>>2];g[w+20>>2]=1.0;h=w+36|0;v=51}if((v|0)==51){m=0;p=0.0;o=0.0;n=0.0;do{b=c[w+9680+120>>2]|0;P=c[w+9680+124>>2]|0;f=(c[w+9680>>2]|0)+(P>>1)|0;if(P&1)b=c[(c[f>>2]|0)+b>>2]|0;Kb[b&127](w+9808|0,f,c[w+4+(m<<2)>>2]|0);O=+g[w+20+(m<<2)>>2];p=p+ +g[w+9808>>2]*O;n=n+O*+g[w+9808+4>>2];o=o+O*+g[w+9808+8>>2];m=m+1|0}while(m>>>0<(c[h>>2]|0)>>>0)}c[k>>2]=1;O=p*+g[e+16>>2]+n*+g[e+20>>2]+o*+g[e+24>>2]+ +g[e+52>>2];L=p*+g[e+32>>2]+n*+g[e+36>>2]+o*+g[e+40>>2]+ +g[e+56>>2];g[k+4>>2]=p*+g[e>>2]+n*+g[e+4>>2]+o*+g[e+8>>2]+ +g[e+48>>2];g[k+8>>2]=O;g[k+12>>2]=L;g[k+16>>2]=0.0;L=+g[w+40>>2];O=+g[w+56>>2];M=+g[w+44>>2];N=+g[w+48>>2];G=p-L*O;H=n-O*M;I=o-O*N;J=G*+g[e+16>>2]+H*+g[e+20>>2]+I*+g[e+24>>2]+ +g[e+52>>2];K=G*+g[e+32>>2]+H*+g[e+36>>2]+I*+g[e+40>>2]+ +g[e+56>>2];g[k+20>>2]=G*+g[e>>2]+H*+g[e+4>>2]+I*+g[e+8>>2]+ +g[e+48>>2];g[k+24>>2]=J;g[k+28>>2]=K;g[k+32>>2]=0.0;g[k+36>>2]=-L;g[k+40>>2]=-M;g[k+44>>2]=-N;g[k+48>>2]=0.0;g[k+52>>2]=-O;P=1;l=w;return P|0}case 2:{c[k>>2]=2;P=0;l=w;return P|0}default:{P=0;l=w;return P|0}}return 0}function xc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0.0,Q=0.0;O=l;l=l+192|0;M=c[d+36>>2]|0;n=+g[(+g[M+88>>2]>0.0?b+16|0:b+20|0)>>2];if(a[M+100>>0]&1){l=O;return}K=c[b+8>>2]|0;t=c[K+4>>2]|0;L=c[K+12>>2]|0;G=c[(c[b+4>>2]|0)+684>>2]|0;A=+g[M+8>>2]-+g[L+48>>2];r=+g[M+12>>2]-+g[L+52>>2];B=+g[M+16>>2]-+g[L+56>>2];z=1.0/+g[G+76>>2];y=(A*+g[L>>2]+r*+g[L+16>>2]+B*+g[L+32>>2])*z/3.0;D=y<0.0?~~(1.0-y):0;H=~~((y+ +(D|0)-+(~~(y+ +(D|0))|0))*3.0);o=(y+ +(D|0)-+(~~(y+ +(D|0))|0))*3.0-+(H|0);D=~~(y+ +(D|0))-D|0;y=z*(A*+g[L+4>>2]+r*+g[L+20>>2]+B*+g[L+36>>2])/3.0;F=y<0.0?~~(1.0-y):0;J=~~((y+ +(F|0)-+(~~(y+ +(F|0))|0))*3.0);s=(y+ +(F|0)-+(~~(y+ +(F|0))|0))*3.0-+(J|0);F=~~(y+ +(F|0))-F|0;B=z*(A*+g[L+8>>2]+r*+g[L+24>>2]+B*+g[L+40>>2])/3.0;E=B<0.0?~~(1.0-B):0;I=~~((B+ +(E|0)-+(~~(B+ +(E|0))|0))*3.0);r=(B+ +(E|0)-+(~~(B+ +(E|0))|0))*3.0-+(I|0);E=~~(B+ +(E|0))-E|0;u=(D>>>16<<11^(D&65535)+16^(D&65535)+16<<16)+(F&65535)+((D>>>16<<11^(D&65535)+16^(D&65535)+16<<16)>>>11)|0;u=(u^F>>>16<<11^u<<16)+(E&65535)+((u^F>>>16<<11^u<<16)>>>11)|0;u=(u^E>>>16<<11^u<<16)+(t&65535)+((u^E>>>16<<11^u<<16)>>>11)|0;u=((u^t>>>16<<11^u<<16)>>>11)+(u^t>>>16<<11^u<<16)|0;u=((u<<3^u)>>>5)+(u<<3^u)<<4^((u<<3^u)>>>5)+(u<<3^u);u=(((u>>>17)+u<<25^(u>>>17)+u)>>>6)+((u>>>17)+u<<25^(u>>>17)+u)|0;p=c[G+60>>2]|0;q=c[G+68>>2]|0;d=c[q+(((u>>>0)%(p>>>0)|0)<<2)>>2]|0;c[G+96>>2]=(c[G+96>>2]|0)+1;e=(c[G+92>>2]|0)+1|0;c[G+92>>2]=e;a:do if(!d)f=9;else while(1){if(((((c[d+272>>2]|0)==(u|0)?(c[d+256>>2]|0)==(D|0):0)?(c[d+260>>2]|0)==(F|0):0)?(c[d+264>>2]|0)==(E|0):0)?(c[d+276>>2]|0)==(t|0):0)break a;d=c[d+280>>2]|0;e=e+1|0;c[G+92>>2]=e;if(!d){f=9;break}}while(0);b:do if((f|0)==9){f=c[G+84>>2]|0;c[G+84>>2]=f+1;if((f|0)>=(c[G+88>>2]|0)){c[5826]=(c[5826]|0)+1;c:do if((p|0)>0){e=q;f=0;while(1){e=e+(f<<2)|0;d=c[e>>2]|0;c[e>>2]=0;if(d|0)do{e=d;d=c[d+280>>2]|0;_H(e)}while((d|0)!=0);d=f+1|0;if((d|0)==(p|0))break c;e=c[G+68>>2]|0;f=d}}while(0);g[G+76>>2]=.25;c[G+80>>2]=0;c[G+84>>2]=0;c[G+92>>2]=1;c[G+96>>2]=1}d=Vr(284)|0;Nk(d|0,0,284)|0;c[d+280>>2]=c[q+(((u>>>0)%(p>>>0)|0)<<2)>>2];c[q+(((u>>>0)%(p>>>0)|0)<<2)>>2]=d;c[d+276>>2]=t;c[d+272>>2]=u;c[d+256>>2]=D;c[d+260>>2]=F;c[d+264>>2]=E;k=+g[G+76>>2];q=O+120+4|0;t=O+120+24|0;u=O+120+44|0;h=k;e=0;while(1){j=k*+(E|0)*3.0+ +(e|0)*h;p=0;while(1){i=k*+(F|0)*3.0+ +(p|0)*h;g[O+48>>2]=+(D|0)*3.0*k+h*0.0;g[O+48+4>>2]=i;g[O+48+8>>2]=j;g[O+48+12>>2]=0.0;f=c[d+276>>2]|0;c[O+120>>2]=1065353216;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[O+120+20>>2]=1065353216;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[O+120+40>>2]=1065353216;c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;c[u+16>>2]=0;if((c[f+4>>2]|0)<20)h=+Pc(O+48|0,f,O+120|0,O+64|0);else h=0.0;g[d+(p<<4)+(e<<2)>>2]=h;g[O+48>>2]=+(D|0)*3.0*k+ +g[G+76>>2];g[O+48+4>>2]=i;g[O+48+8>>2]=j;g[O+48+12>>2]=0.0;f=c[d+276>>2]|0;c[O+120>>2]=1065353216;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[O+120+20>>2]=1065353216;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[O+120+40>>2]=1065353216;c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;c[u+16>>2]=0;if((c[f+4>>2]|0)<20)h=+Pc(O+48|0,f,O+120|0,O+64|0);else h=0.0;g[d+64+(p<<4)+(e<<2)>>2]=h;g[O+48>>2]=+(D|0)*3.0*k+ +g[G+76>>2]*2.0;g[O+48+4>>2]=i;g[O+48+8>>2]=j;g[O+48+12>>2]=0.0;f=c[d+276>>2]|0;c[O+120>>2]=1065353216;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[O+120+20>>2]=1065353216;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[O+120+40>>2]=1065353216;c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;c[u+16>>2]=0;if((c[f+4>>2]|0)<20)h=+Pc(O+48|0,f,O+120|0,O+64|0);else h=0.0;g[d+128+(p<<4)+(e<<2)>>2]=h;g[O+48>>2]=+(D|0)*3.0*k+ +g[G+76>>2]*3.0;g[O+48+4>>2]=i;g[O+48+8>>2]=j;g[O+48+12>>2]=0.0;f=c[d+276>>2]|0;c[O+120>>2]=1065353216;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[O+120+20>>2]=1065353216;c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;c[O+120+40>>2]=1065353216;c[u>>2]=0;c[u+4>>2]=0;c[u+8>>2]=0;c[u+12>>2]=0;c[u+16>>2]=0;if((c[f+4>>2]|0)<20)h=+Pc(O+48|0,f,O+120|0,O+64|0);else h=0.0;g[d+192+(p<<4)+(e<<2)>>2]=h;f=p+1|0;if((f|0)==4)break;h=+g[G+76>>2];p=f}e=e+1|0;if((e|0)==4)break b;h=+g[G+76>>2]}}while(0);c[d+268>>2]=c[G+80>>2];h=+g[d+(H<<6)+(J<<4)+(I<<2)>>2];x=+g[d+(H+1<<6)+(J<<4)+(I<<2)>>2];v=+g[d+(H+1<<6)+(J+1<<4)+(I<<2)>>2];w=+g[d+(H<<6)+(J+1<<4)+(I<<2)>>2];B=+g[d+(H<<6)+(J<<4)+(I+1<<2)>>2];A=+g[d+(H+1<<6)+(J<<4)+(I+1<<2)>>2];y=+g[d+(H+1<<6)+(J+1<<4)+(I+1<<2)>>2];z=+g[d+(H<<6)+(J+1<<4)+(I+1<<2)>>2];k=x-h+s*(v-w-(x-h))+r*(A-B+s*(y-z-(A-B))-(x-h+s*(v-w-(x-h))));j=w-h+o*(v-x-(w-h))+r*(z-B+o*(y-A-(z-B))-(w-h+o*(v-x-(w-h))));i=B-h+o*(A-x-(B-h))+s*(z-w+o*(y-v-(z-w))-(B-h+o*(A-x-(B-h))));m=1.0/+C(+(k*k+j*j+i*i));h=h+o*(x-h)+s*(w+o*(v-w)-(h+o*(x-h)));h=h+r*(B+o*(A-B)+s*(z+o*(y-z)-(B+o*(A-B)))-h)-n;if(!(h<0.0)){l=O;return}t=c[K+8>>2]|0;B=+g[L>>2]*k*m+ +g[L+4>>2]*j*m+ +g[L+8>>2]*i*m;A=k*m*+g[L+16>>2]+j*m*+g[L+20>>2]+i*m*+g[L+24>>2];z=k*m*+g[L+32>>2]+j*m*+g[L+36>>2]+i*m*+g[L+40>>2];y=-(B*(+g[M+8>>2]-h*B)+A*(+g[M+12>>2]-h*A)+z*(+g[M+16>>2]-h*z));s=+g[M+88>>2];d=c[b+12>>2]|0;if(!d)r=0.0;else r=+g[d+344>>2];if(!(s+r>0.0)){l=O;return}if(!d)d=c[(c[b+8>>2]|0)+8>>2]|0;if((a[22736]|0)==0?Yy(22736)|0:0){e=23308;f=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0))}e=c[b+12>>2]|0;m=+g[M+8>>2];w=m-+g[d+52>>2];n=+g[M+12>>2];x=n-+g[d+56>>2];o=+g[M+16>>2];v=o-+g[d+60>>2];if(!e){L=c[b+4>>2]|0;d=L;h=+g[L+452>>2];i=0.0;j=0.0;k=0.0}else{P=+g[e+332>>2];j=+g[e+336>>2];Q=+g[e+328>>2];d=c[b+4>>2]|0;k=+g[d+452>>2];h=k;i=(P*v-j*x+ +g[e+312>>2])*k;j=(+g[e+316>>2]+(j*w-v*Q))*k;k=(x*Q-P*w+ +g[e+320>>2])*k}m=m-+g[M+24>>2]-i;n=n-+g[M+28>>2]-j;P=o-+g[M+32>>2]-k;Q=+g[d+316>>2]*+g[(c[(c[b+8>>2]|0)+8>>2]|0)+224>>2];Df(O+120|0,h,s,r,(e|0)==0?23308:e+264|0,w,x,v);c[O+32>>2]=c[O+120>>2];c[O+32+4>>2]=c[O+120+4>>2];c[O+32+8>>2]=c[O+120+8>>2];c[O+32+12>>2]=c[O+120+12>>2];c[O+16>>2]=c[O+120+16>>2];c[O+16+4>>2]=c[O+120+16+4>>2];c[O+16+8>>2]=c[O+120+16+8>>2];c[O+16+12>>2]=c[O+120+16+12>>2];c[O>>2]=c[O+120+32>>2];c[O+4>>2]=c[O+120+32+4>>2];c[O+8>>2]=c[O+120+32+8>>2];c[O+12>>2]=c[O+120+32+12>>2];q=c[b+4>>2]|0;i=s*+g[q+452>>2];h=(P-z*(m*B+n*A+P*z))*(P-z*(m*B+n*A+P*z))+((m-B*(m*B+n*A+P*z))*(m-B*(m*B+n*A+P*z))+(n-A*(m*B+n*A+P*z))*(n-A*(m*B+n*A+P*z)))>2]|0)+8>>2]|0)+204>>2]&3|0?q+328|0:q+324|0)>>2]|0;d=c[q+812>>2]|0;if((d|0)==(c[q+816>>2]|0)?(N=d|0?d<<1:1,(d|0)<(N|0)):0){if(!N)e=0;else{c[6472]=(c[6472]|0)+1;d=ic((N*104|3)+16|0)|0;if(!d)e=0;else{c[(d+4+15&-16)+-4>>2]=d;e=d+4+15&-16}d=c[q+812>>2]|0}if((d|0)>0){f=0;do{L=e+(f*104|0)|0;K=c[q+820>>2]|0;J=K+(f*104|0)|0;c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];c[L+16>>2]=c[J+16>>2];c[L+20>>2]=c[J+20>>2];c[L+24>>2]=c[J+24>>2];L=e+(f*104|0)+28|0;J=K+(f*104|0)+28|0;c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];L=e+(f*104|0)+44|0;J=K+(f*104|0)+44|0;c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];L=e+(f*104|0)+60|0;J=K+(f*104|0)+60|0;c[L>>2]=c[J>>2];c[L+4>>2]=c[J+4>>2];c[L+8>>2]=c[J+8>>2];c[L+12>>2]=c[J+12>>2];L=e+(f*104|0)+76|0;K=K+(f*104|0)+76|0;c[L>>2]=c[K>>2];c[L+4>>2]=c[K+4>>2];c[L+8>>2]=c[K+8>>2];c[L+12>>2]=c[K+12>>2];c[L+16>>2]=c[K+16>>2];c[L+20>>2]=c[K+20>>2];c[L+24>>2]=c[K+24>>2];f=f+1|0}while((f|0)!=(d|0))}d=c[q+820>>2]|0;if(d|0){if(a[q+824>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[q+820>>2]=0}a[q+824>>0]=1;c[q+820>>2]=e;c[q+816>>2]=N;d=c[q+812>>2]|0}L=c[q+820>>2]|0;c[L+(d*104|0)>>2]=t;g[L+(d*104|0)+4>>2]=B;g[L+(d*104|0)+8>>2]=A;g[L+(d*104|0)+12>>2]=z;g[L+(d*104|0)+16>>2]=0.0;g[L+(d*104|0)+20>>2]=y;c[L+(d*104|0)+24>>2]=M;N=L+(d*104|0)+28|0;c[N>>2]=c[O+32>>2];c[N+4>>2]=c[O+32+4>>2];c[N+8>>2]=c[O+32+8>>2];c[N+12>>2]=c[O+32+12>>2];N=L+(d*104|0)+44|0;c[N>>2]=c[O+16>>2];c[N+4>>2]=c[O+16+4>>2];c[N+8>>2]=c[O+16+8>>2];c[N+12>>2]=c[O+16+12>>2];N=L+(d*104|0)+60|0;c[N>>2]=c[O>>2];c[N+4>>2]=c[O+4>>2];c[N+8>>2]=c[O+8>>2];c[N+12>>2]=c[O+12>>2];N=L+(d*104|0)+76|0;g[N>>2]=w;g[L+(d*104|0)+80>>2]=x;g[L+(d*104|0)+84>>2]=v;g[L+(d*104|0)+88>>2]=0.0;g[N+16>>2]=i;g[N+20>>2]=h;c[N+24>>2]=p;c[q+812>>2]=(c[q+812>>2]|0)+1;d=c[b+12>>2]|0;if(!d){l=O;return}if(c[d+204>>2]&3|0){l=O;return}if((c[d+216>>2]&-2|0)!=4)c[d+216>>2]=1;g[d+220>>2]=0.0;l=O;return}function yc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;v=l;l=l+16|0;bj(12254);j=c[b+212>>2]|0;i=c[b+180>>2]|0;if((i|0)<(j|0)){if((c[b+184>>2]|0)<(j|0)){if(!j){f=i;h=0}else{c[6472]=(c[6472]|0)+1;e=ic((j<<2|3)+16|0)|0;if(!e)e=0;else{c[(e+4+15&-16)+-4>>2]=e;e=e+4+15&-16}f=c[b+180>>2]|0;h=e}if((f|0)>0){e=0;do{c[h+(e<<2)>>2]=c[(c[b+188>>2]|0)+(e<<2)>>2];e=e+1|0}while((e|0)!=(f|0))}e=c[b+188>>2]|0;if(e|0){if(a[b+192>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[b+188>>2]=0}a[b+192>>0]=1;c[b+188>>2]=h;c[b+184>>2]=j;f=b+188|0}else f=b+188|0;e=i;do{c[(c[f>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=(j|0))}else f=b+188|0;c[b+180>>2]=j;e=0;while(1){if((e|0)>=(qb[c[(c[b>>2]|0)+104>>2]&127](b)|0))break;c[(c[f>>2]|0)+(e<<2)>>2]=c[(c[b+220>>2]|0)+(e<<2)>>2];e=e+1|0}e=c[b+180>>2]|0;if((e|0)>1)Pg(b+176|0,0,e+-1|0);if(!(qb[c[(c[b>>2]|0)+104>>2]&127](b)|0))e=0;else e=c[f>>2]|0;h=c[b+196>>2]|0;t=c[b+180>>2]|0;u=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;c[h+4>>2]=d;c[h+12>>2]=e;c[h+16>>2]=t;c[h+20>>2]=u;e=c[h+32>>2]|0;if((e|0)<0){if((c[h+36>>2]|0)<0){f=c[h+40>>2]|0;if(f|0){if(a[h+44>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[h+40>>2]=0}a[h+44>>0]=1;c[h+40>>2]=0;c[h+36>>2]=0}do{c[(c[h+40>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=0)}c[h+32>>2]=0;e=c[h+52>>2]|0;if((e|0)<0){if((c[h+56>>2]|0)<0){f=c[h+60>>2]|0;if(f|0){if(a[h+64>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[h+60>>2]=0}a[h+64>>0]=1;c[h+60>>2]=0;c[h+56>>2]=0}do{c[(c[h+60>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=0)}c[h+52>>2]=0;e=c[h+72>>2]|0;if((e|0)<0){if((c[h+76>>2]|0)<0){f=c[h+80>>2]|0;if(f|0){if(a[h+84>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[h+80>>2]=0}a[h+84>>0]=1;c[h+80>>2]=0;c[h+76>>2]=0}do{c[(c[h+80>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=0)}c[h+72>>2]=0;u=c[b+200>>2]|0;e=c[(c[u>>2]|0)+8>>2]|0;s=c[b+8>>2]|0;t=c[b+24>>2]|0;t=qb[c[(c[t>>2]|0)+36>>2]&127](t)|0;Kb[e&127](u,s,t);t=c[b+204>>2]|0;s=c[b+24>>2]|0;u=c[b+196>>2]|0;bj(14086);e=c[t+28>>2]|0;if((e|0)<0){if((c[t+32>>2]|0)<0){f=c[t+36>>2]|0;if(f|0){if(a[t+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[t+36>>2]=0}a[t+40>>0]=1;c[t+36>>2]=0;c[t+32>>2]=0}do{c[(c[t+36>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=0)}c[t+28>>2]=0;i=c[t+8>>2]|0;if((i|0)>0){j=c[t+16>>2]|0;k=0;do{m=j+(k<<3)|0;e=c[m>>2]|0;if((e|0)==(k|0))e=k;else{h=m;do{f=j+(e<<3)|0;c[h>>2]=c[f>>2];f=c[f>>2]|0;h=j+(f<<3)|0;e=c[h>>2]|0}while((f|0)!=(e|0));e=f}c[m>>2]=e;k=k+1|0}while((k|0)!=(i|0));if((i|0)>1){ej(t+4|0,0,i+-1|0);i=c[t+8>>2]|0}if((i|0)>0){k=c[t+16>>2]|0;f=0;while(1){m=c[k+(f<<3)>>2]|0;q=f;while(1){p=q+1|0;if((p|0)>=(i|0)){o=0;break}if((c[k+(p<<3)>>2]|0)==(m|0))q=p;else{o=1;break}}a:do if((f|0)<=(q|0)){n=c[b+16>>2]|0;e=1;j=f;while(1){h=c[n+(c[k+(j<<3)+4>>2]<<2)>>2]|0;if((c[h+208>>2]|0)==(m|0)){h=c[h+216>>2]|0;e=(h|0)!=4&(e&(h|0)!=1)}if((j|0)<(q|0))j=j+1|0;else break}if(e)while(1){e=c[n+(c[k+(f<<3)+4>>2]<<2)>>2]|0;if((c[e+208>>2]|0)==(m|0)?(c[e+216>>2]&-2|0)!=4:0)c[e+216>>2]=2;if((f|0)>=(q|0))break a;f=f+1|0}else while(1){e=c[n+(c[k+(f<<3)+4>>2]<<2)>>2]|0;if((c[e+208>>2]|0)==(m|0)?(c[e+216>>2]|0)==2:0){c[e+216>>2]=3;g[e+220>>2]=0.0}if((f|0)>=(q|0))break a;f=f+1|0}}while(0);if(o)f=p;else break}}}i=qb[c[(c[s>>2]|0)+36>>2]&127](s)|0;if((i|0)>0){k=0;do{j=sb[c[(c[s>>2]|0)+40>>2]&31](s,k)|0;f=c[j+740>>2]|0;h=c[j+744>>2]|0;if((f|0)!=0?(c[f+216>>2]|0)!=2:0)e=93;else e=91;if(((e|0)==91?(e=0,h|0):0)?(c[h+216>>2]|0)!=2:0)e=93;if((e|0)==93){e=c[f+204>>2]|0;if((e&2|0?((e&4|0)==0?(c[f+216>>2]|0)!=2:0):0)?(c[h+204>>2]&3|0)==0:0){if((c[h+216>>2]&-2|0)!=4)c[h+216>>2]=1;g[h+220>>2]=0.0}q=c[h+204>>2]|0;if(q&2|0?((q&4|e&3|0)==0?(c[h+216>>2]|0)!=2:0):0){if((c[f+216>>2]&-2|0)!=4)c[f+216>>2]=1;g[f+220>>2]=0.0}if(a[t+64>>0]|0?ub[c[(c[s>>2]|0)+28>>2]&63](s,f,h)|0:0){e=c[t+28>>2]|0;if((e|0)==(c[t+32>>2]|0)?(r=e|0?e<<1:1,(e|0)<(r|0)):0){if(!r)f=0;else{c[6472]=(c[6472]|0)+1;e=ic((r<<2|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=c[t+28>>2]|0}if((e|0)>0){h=0;do{c[f+(h<<2)>>2]=c[(c[t+36>>2]|0)+(h<<2)>>2];h=h+1|0}while((h|0)!=(e|0))}h=c[t+36>>2]|0;if(h){if(a[t+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);e=c[t+28>>2]|0}c[t+36>>2]=0}a[t+40>>0]=1;c[t+36>>2]=f;c[t+32>>2]=r}c[(c[t+36>>2]|0)+(e<<2)>>2]=j;c[t+28>>2]=e+1}}k=k+1|0}while((k|0)<(i|0))}e=c[2405]|0;r=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=r;do if(!r){if(c[e+4>>2]|0){Za(v|0,0)|0;r=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[v+4>>2]|0)-(c[r+4>>2]|0)+(((c[v>>2]|0)-(c[r>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(c[e+16>>2]|0)break;e=c[2405]|0}c[2405]=c[e+20>>2]}while(0);r=c[t+8>>2]|0;bj(14114);if(a[t+64>>0]|0){p=c[t+28>>2]|0;if((p|0)>1)Mg(t+24|0,0,p+-1|0);if((r|0)>0){n=1;f=0;q=0;while(1){e=c[t+16>>2]|0;o=c[e+(f<<3)>>2]|0;b:do if((f|0)<(r|0)){j=c[t+48>>2]|0;i=c[t+52>>2]|0;m=1;while(1){k=c[(c[b+16>>2]|0)+(c[e+(f<<3)+4>>2]<<2)>>2]|0;do if((j|0)==(i|0)){j=i|0?i<<1:1;if((i|0)>=(j|0)){e=i;break}if(!j){e=i;h=0}else{c[6472]=(c[6472]|0)+1;e=ic((j<<2|3)+16|0)|0;if(!e)h=0;else{c[(e+4+15&-16)+-4>>2]=e;h=e+4+15&-16}e=c[t+48>>2]|0}if((e|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[t+56>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(e|0))}i=c[t+56>>2]|0;if(i){if(a[t+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);e=c[t+48>>2]|0}c[t+56>>2]=0}a[t+60>>0]=1;c[t+56>>2]=h;c[t+52>>2]=j;i=j}else e=j;while(0);c[(c[t+56>>2]|0)+(e<<2)>>2]=k;j=e+1|0;c[t+48>>2]=j;h=c[k+216>>2]|0;h=m&((h|0)==2|(h|0)==5);f=f+1|0;if((f|0)>=(r|0)){m=f;k=h;break b}e=c[t+16>>2]|0;if((c[e+(f<<3)>>2]|0)!=(o|0)){m=f;k=h;break}else m=h}}else{m=f;k=1}while(0);if((q|0)<(p|0)){j=c[t+36>>2]|0;e=j+(q<<2)|0;h=c[e>>2]|0;f=c[(c[h+740>>2]|0)+208>>2]|0;if((f|0)<=-1)f=c[(c[h+744>>2]|0)+208>>2]|0;if((f|0)==(o|0)){i=q;do{i=i+1|0;if((i|0)>=(p|0))break;h=c[j+(i<<2)>>2]|0;f=c[(c[h+740>>2]|0)+208>>2]|0;if((f|0)<=-1)f=c[(c[h+744>>2]|0)+208>>2]|0}while((o|0)==(f|0));h=i;f=i-q|0}else{h=n;f=0;e=0}}else{h=n;f=0;e=0}if(!k)Tb[c[(c[u>>2]|0)+8>>2]&7](u,c[t+56>>2]|0,c[t+48>>2]|0,e,f,o);q=(f|0)==0?q:h;e=c[t+48>>2]|0;if((e|0)<0){if((c[t+52>>2]|0)<0){f=c[t+56>>2]|0;if(f|0){if(a[t+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[t+56>>2]=0}a[t+60>>0]=1;c[t+56>>2]=0;c[t+52>>2]=0}do{c[(c[t+56>>2]|0)+(e<<2)>>2]=0;e=e+1|0}while((e|0)!=0)}c[t+48>>2]=0;if((m|0)>=(r|0))break;else{n=h;f=m}}}}else{r=qb[c[(c[s>>2]|0)+44>>2]&127](s)|0;t=qb[c[(c[s>>2]|0)+36>>2]&127](s)|0;Tb[c[(c[u>>2]|0)+8>>2]&7](u,c[b+16>>2]|0,c[b+8>>2]|0,r,t,-1)}e=c[2405]|0;u=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=u;do if(!u){if(c[e+4>>2]|0){Za(v|0,0)|0;u=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[v+4>>2]|0)-(c[u+4>>2]|0)+(((c[v>>2]|0)-(c[u>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(c[e+16>>2]|0)break;e=c[2405]|0}c[2405]=c[e+20>>2]}while(0);Xg(c[b+196>>2]|0);e=c[b+200>>2]|0;Kb[c[(c[e>>2]|0)+16>>2]&127](e,d,c[b+72>>2]|0);e=c[2405]|0;b=(c[e+16>>2]|0)+-1|0;c[e+16>>2]=b;if(b|0){l=v;return}do if(c[e+4>>2]|0){Za(v|0,0)|0;b=c[6471]|0;g[e+8>>2]=+g[e+8>>2]+ +(((c[v+4>>2]|0)-(c[b+4>>2]|0)+(((c[v>>2]|0)-(c[b>>2]|0)|0)*1e6|0)-(c[e+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[e+16>>2]|0)){e=c[2405]|0;break}else{l=v;return}}while(0);c[2405]=c[e+20>>2];l=v;return}function zc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0,I=0;s=l;l=l+144|0;n=c[b+48>>2]|0;h=c[b+52>>2]|0;if((h|0?(j=c[h+20>>2]|0,j|0):0)?(qb[c[(c[j>>2]|0)+48>>2]&127](j)|0)&1|0:0){c[s+48>>2]=1065353216;c[s+48+4>>2]=1065353216;c[s+48+8>>2]=0;g[s+48+12>>2]=0.0;k=c[b+8>>2]|0;r=c[(c[b+52>>2]|0)+20>>2]|0;q=c[(c[r>>2]|0)+8>>2]|0;y=+g[d>>2];F=+g[d+4>>2];B=+g[d+8>>2];w=+g[k+20>>2];t=+g[k+24>>2];x=+g[k+28>>2];u=+g[k+36>>2];A=+g[k+40>>2];D=+g[k+44>>2];v=+g[k+52>>2];E=+g[k+56>>2];z=+g[k+60>>2];g[s+24>>2]=y*+g[k+4>>2]+F*+g[k+8>>2]+B*+g[k+12>>2]+v;g[s+24+4>>2]=y*w+F*t+B*x+E;g[s+24+8>>2]=y*u+F*A+B*D+z;g[s+24+12>>2]=0.0;B=+g[d+16>>2];F=+g[d+20>>2];y=+g[d+24>>2];g[s>>2]=B*+g[k+4>>2]+F*+g[k+8>>2]+y*+g[k+12>>2]+v;g[s+4>>2]=B*w+F*t+y*x+E;g[s+8>>2]=B*u+F*A+y*D+z;g[s+12>>2]=0.0;Nb[q&127](r,s+24|0,s,s+48|0);r=c[(c[b+52>>2]|0)+20>>2]|0;q=c[(c[r>>2]|0)+8>>2]|0;z=+g[d+16>>2];D=+g[d+20>>2];y=+g[d+24>>2];A=+g[k+20>>2];F=+g[k+24>>2];u=+g[k+28>>2];B=+g[k+36>>2];E=+g[k+40>>2];x=+g[k+44>>2];t=+g[k+52>>2];w=+g[k+56>>2];v=+g[k+60>>2];g[s+24>>2]=z*+g[k+4>>2]+D*+g[k+8>>2]+y*+g[k+12>>2]+t;g[s+24+4>>2]=z*A+D*F+y*u+w;g[s+24+8>>2]=z*B+D*E+y*x+v;g[s+24+12>>2]=0.0;y=+g[d+32>>2];D=+g[d+36>>2];z=+g[d+40>>2];g[s>>2]=y*+g[k+4>>2]+D*+g[k+8>>2]+z*+g[k+12>>2]+t;g[s+4>>2]=y*A+D*F+z*u+w;g[s+8>>2]=y*B+D*E+z*x+v;g[s+12>>2]=0.0;Nb[q&127](r,s+24|0,s,s+48|0);r=c[(c[b+52>>2]|0)+20>>2]|0;q=c[(c[r>>2]|0)+8>>2]|0;v=+g[d+32>>2];x=+g[d+36>>2];z=+g[d+40>>2];E=+g[k+20>>2];D=+g[k+24>>2];B=+g[k+28>>2];y=+g[k+36>>2];w=+g[k+40>>2];u=+g[k+44>>2];F=+g[k+52>>2];A=+g[k+56>>2];t=+g[k+60>>2];g[s+24>>2]=v*+g[k+4>>2]+x*+g[k+8>>2]+z*+g[k+12>>2]+F;g[s+24+4>>2]=v*E+x*D+z*B+A;g[s+24+8>>2]=v*y+x*w+z*u+t;g[s+24+12>>2]=0.0;z=+g[d>>2];x=+g[d+4>>2];v=+g[d+8>>2];g[s>>2]=z*+g[k+4>>2]+x*+g[k+8>>2]+v*+g[k+12>>2]+F;g[s+4>>2]=z*E+x*D+v*B+A;g[s+8>>2]=z*y+x*w+v*u+t;g[s+12>>2]=0.0;Nb[q&127](r,s+24|0,s,s+48|0)}h=((e<<21|f)+~(f<<15)>>10^(e<<21|f)+~(f<<15))*9|0;h=(c[b+108>>2]|0)+-1&((h>>6^h)+~((h>>6^h)<<11)>>16^(h>>6^h)+~((h>>6^h)<<11));a:do if(h>>>0<(c[b+64>>2]|0)>>>0?(m=c[(c[b+72>>2]|0)+(h<<2)>>2]|0,(m|0)!=-1):0){k=c[b+132>>2]|0;j=m;while(1){if((e<<21|f|0)==(c[k+(j<<2)>>2]|0))break;h=c[(c[b+92>>2]|0)+(j<<2)>>2]|0;if((h|0)==-1)break a;else j=h}h=c[b+112>>2]|0;if(h+(j<<3)|0){q=c[h+(j<<3)+4>>2]|0;r=c[b+8>>2]|0;c[q+8>>2]=c[(c[r+192>>2]|0)+8>>2];p=c[b+4>>2]|0;o=c[p+192>>2]|0;c[s+48>>2]=0;c[s+48+4>>2]=o;c[s+48+8>>2]=p;c[s+48+12>>2]=p+4;c[s+48+16>>2]=-1;c[s+48+20>>2]=-1;c[s+24>>2]=0;c[s+24+4>>2]=q;c[s+24+8>>2]=r;c[s+24+12>>2]=r+4;c[s+24+16>>2]=e;c[s+24+20>>2]=f;r=vb[c[(c[n>>2]|0)+8>>2]&31](n,s+48|0,s+24|0,0)|0;Rb[c[(c[r>>2]|0)+8>>2]&31](r,s+48|0,s+24|0,c[b+52>>2]|0,c[b+44>>2]|0);Ab[c[c[r>>2]>>2]&511](r);Gb[c[(c[n>>2]|0)+60>>2]&127](n,r);l=s;return}}while(0);v=+g[d+16>>2];G=+g[d>>2];w=+g[d+20>>2];t=+g[d+4>>2];x=+g[d+24>>2];u=+g[d+8>>2];y=+g[d+32>>2];A=+g[d+36>>2];D=+g[d+40>>2];z=(w-t)*(D-u)-(x-u)*(A-t);B=(x-u)*(y-G)-(v-G)*(D-u);F=(v-G)*(A-t)-(w-t)*(y-G);E=1.0/+C(+(F*F+(z*z+B*B)));g[s+48>>2]=G+E*z*.05999999865889549;g[s+48+4>>2]=t+E*B*.05999999865889549;g[s+48+8>>2]=E*F*.05999999865889549+u;g[s+48+12>>2]=0.0;g[s+48+16>>2]=E*z*.05999999865889549+v;g[s+48+20>>2]=E*B*.05999999865889549+w;g[s+48+24>>2]=E*F*.05999999865889549+x;g[s+48+28>>2]=0.0;g[s+48+32>>2]=E*z*.05999999865889549+y;g[s+48+36>>2]=E*B*.05999999865889549+A;g[s+48+40>>2]=E*F*.05999999865889549+D;g[s+48+44>>2]=0.0;g[s+48+48>>2]=G-E*z*.05999999865889549;g[s+48+52>>2]=t-E*B*.05999999865889549;g[s+48+56>>2]=u-E*F*.05999999865889549;g[s+48+60>>2]=0.0;g[s+48+64>>2]=v-E*z*.05999999865889549;g[s+48+68>>2]=w-E*B*.05999999865889549;g[s+48+72>>2]=x-E*F*.05999999865889549;g[s+48+76>>2]=0.0;g[s+48+80>>2]=y-E*z*.05999999865889549;g[s+48+84>>2]=A-E*B*.05999999865889549;g[s+48+88>>2]=D-E*F*.05999999865889549;g[s+48+92>>2]=0.0;c[6472]=(c[6472]|0)+1;h=ic(131)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}$f(h,s+48|0,6,16);r=c[b+8>>2]|0;c[h+8>>2]=c[(c[r+192>>2]|0)+8>>2];d=c[b+4>>2]|0;q=c[d+192>>2]|0;c[s+24>>2]=0;c[s+24+4>>2]=q;c[s+24+8>>2]=d;c[s+24+12>>2]=d+4;c[s+24+16>>2]=-1;c[s+24+20>>2]=-1;c[s>>2]=0;c[s+4>>2]=h;c[s+8>>2]=r;c[s+12>>2]=r+4;c[s+16>>2]=e;c[s+20>>2]=f;r=vb[c[(c[n>>2]|0)+8>>2]&31](n,s+24|0,s,0)|0;Rb[c[(c[r>>2]|0)+8>>2]&31](r,s+24|0,s,c[b+52>>2]|0,c[b+44>>2]|0);Ab[c[c[r>>2]>>2]&511](r);Gb[c[(c[n>>2]|0)+60>>2]&127](n,r);r=((e<<21|f)+~(f<<15)>>10^(e<<21|f)+~(f<<15))*9|0;r=(r>>6^r)+~((r>>6^r)<<11)>>16^(r>>6^r)+~((r>>6^r)<<11);d=c[b+108>>2]|0;b:do if((r&d+-1)>>>0<(c[b+64>>2]|0)>>>0?(i=c[(c[b+72>>2]|0)+((r&d+-1)<<2)>>2]|0,(i|0)!=-1):0){j=c[b+132>>2]|0;while(1){if((e<<21|f|0)==(c[j+(i<<2)>>2]|0))break;i=c[(c[b+92>>2]|0)+(i<<2)>>2]|0;if((i|0)==-1){o=20;break b}}b=c[b+112>>2]|0;c[b+(i<<3)>>2]=e<<21|f;c[b+(i<<3)+4>>2]=h}else o=20;while(0);if((o|0)==20){q=c[b+104>>2]|0;if((q|0)==(d|0)){m=d|0?d<<1:1;if((d|0)<(m|0)){if(!m){j=d;k=0}else{c[6472]=(c[6472]|0)+1;i=ic((m<<3|3)+16|0)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}j=c[b+104>>2]|0;k=i}if((j|0)>0){i=0;do{I=(c[b+112>>2]|0)+(i<<3)|0;H=c[I+4>>2]|0;n=k+(i<<3)|0;c[n>>2]=c[I>>2];c[n+4>>2]=H;i=i+1|0}while((i|0)!=(j|0))}i=c[b+112>>2]|0;if(i|0){if(a[b+116>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[b+112>>2]=0}a[b+116>>0]=1;c[b+112>>2]=k;c[b+108>>2]=m;i=c[b+104>>2]|0}else i=d}else i=q;I=c[b+112>>2]|0;c[I+(i<<3)>>2]=e<<21|f;c[I+(i<<3)+4>>2]=h;c[b+104>>2]=(c[b+104>>2]|0)+1;h=c[b+124>>2]|0;if((h|0)==(c[b+128>>2]|0)?(p=h|0?h<<1:1,(h|0)<(p|0)):0){if(!p)i=0;else{c[6472]=(c[6472]|0)+1;h=ic((p<<2|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=c[b+124>>2]|0}k=c[b+132>>2]|0;if((h|0)<=0)if(!k)h=b+136|0;else o=43;else{j=0;do{c[i+(j<<2)>>2]=c[k+(j<<2)>>2];j=j+1|0}while((j|0)!=(h|0));o=43}if((o|0)==43){if(a[b+136>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0)}c[b+132>>2]=0;h=b+136|0}a[h>>0]=1;c[b+132>>2]=i;c[b+128>>2]=p;h=c[b+124>>2]|0}c[(c[b+132>>2]|0)+(h<<2)>>2]=e<<21|f;c[b+124>>2]=(c[b+124>>2]|0)+1;n=c[b+108>>2]|0;if((d|0)<(n|0)){o=c[b+64>>2]|0;if((o|0)<(n|0)){do if((c[b+68>>2]|0)<(n|0)){if(!n){k=o;h=0}else{c[6472]=(c[6472]|0)+1;h=ic((n<<2|3)+16|0)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}k=c[b+64>>2]|0}i=c[b+72>>2]|0;if((k|0)<=0){if(!i){a[b+76>>0]=1;c[b+72>>2]=h;c[b+68>>2]=n;d=b+72|0;break}}else{j=0;do{c[h+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}if(a[b+76>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}a[b+76>>0]=1;c[b+72>>2]=h;c[b+68>>2]=n;d=b+72|0}else{h=c[b+72>>2]|0;d=b+72|0}while(0);Nk(h+(o<<2)|0,0,(n<<2)-(o<<2)|0)|0;c[b+64>>2]=n;m=c[b+84>>2]|0;if((m|0)<(n|0)){do if((c[b+88>>2]|0)<(n|0)){if(!n){k=m;h=0}else{c[6472]=(c[6472]|0)+1;h=ic((n<<2|3)+16|0)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}k=c[b+84>>2]|0}i=c[b+92>>2]|0;if((k|0)<=0){if(!i){a[b+96>>0]=1;c[b+92>>2]=h;c[b+88>>2]=n;break}}else{j=0;do{c[h+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}if(a[b+96>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}a[b+96>>0]=1;c[b+92>>2]=h;c[b+88>>2]=n}else h=c[b+92>>2]|0;while(0);Nk(h+(m<<2)|0,0,(n<<2)-(m<<2)|0)|0}c[b+84>>2]=n;if((n|0)>0){Nk(c[d>>2]|0,-1,n<<2|0)|0;Nk(c[b+92>>2]|0,-1,n<<2|0)|0}if((o|0)>0){k=c[b+132>>2]|0;h=c[d>>2]|0;i=c[b+92>>2]|0;j=0;do{I=c[k+(j<<2)>>2]|0;I=(I+~(I<<15)>>10^I+~(I<<15))*9|0;I=h+((((I>>6^I)+~((I>>6^I)<<11)>>16^(I>>6^I)+~((I>>6^I)<<11))&(c[b+108>>2]|0)+-1)<<2)|0;c[i+(j<<2)>>2]=c[I>>2];c[I>>2]=j;j=j+1|0}while((j|0)!=(o|0))}}h=r&(c[b+108>>2]|0)+-1}else h=r&d+-1;I=(c[b+72>>2]|0)+(h<<2)|0;c[(c[b+92>>2]|0)+(q<<2)>>2]=c[I>>2];c[I>>2]=q}l=s;return}function Ac(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,k=0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0,t=0,u=0.0,v=0,w=0.0,x=0,y=0,z=0.0,A=0,B=0,D=0.0,E=0.0,F=0.0,G=0.0;B=l;l=l+176|0;c[a+348>>2]=a+220;c[a+352>>2]=a+252;c[a+356>>2]=a+284;c[a+360>>2]=a+316;c[a+364>>2]=4;c[a+368>>2]=0;c[a+376>>2]=0;y=c[b+4>>2]|0;c[a>>2]=c[b>>2];c[a+4>>2]=y;c[a+8>>2]=c[b+8>>2];c[a+8+4>>2]=c[b+8+4>>2];c[a+8+8>>2]=c[b+8+8>>2];c[a+8+12>>2]=c[b+8+12>>2];c[a+24>>2]=c[b+24>>2];c[a+24+4>>2]=c[b+24+4>>2];c[a+24+8>>2]=c[b+24+8>>2];c[a+24+12>>2]=c[b+24+12>>2];c[a+40>>2]=c[b+40>>2];c[a+40+4>>2]=c[b+40+4>>2];c[a+40+8>>2]=c[b+40+8>>2];c[a+40+12>>2]=c[b+40+12>>2];c[a+56>>2]=c[b+56>>2];c[a+56+4>>2]=c[b+56+4>>2];c[a+56+8>>2]=c[b+56+8>>2];c[a+56+12>>2]=c[b+56+12>>2];c[a+72>>2]=c[b+72>>2];c[a+72+4>>2]=c[b+72+4>>2];c[a+72+8>>2]=c[b+72+8>>2];c[a+72+12>>2]=c[b+72+12>>2];c[a+88>>2]=c[b+88>>2];c[a+88+4>>2]=c[b+88+4>>2];c[a+88+8>>2]=c[b+88+8>>2];c[a+88+12>>2]=c[b+88+12>>2];c[a+104>>2]=c[b+104>>2];c[a+104+4>>2]=c[b+104+4>>2];c[a+104+8>>2]=c[b+104+8>>2];c[a+104+12>>2]=c[b+104+12>>2];y=c[b+124>>2]|0;c[a+120>>2]=c[b+120>>2];c[a+124>>2]=y;g[a+144>>2]=0.0;c[a+180>>2]=0;c[a+128>>2]=c[d>>2];c[a+128+4>>2]=c[d+4>>2];c[a+128+8>>2]=c[d+8>>2];c[a+128+12>>2]=c[d+12>>2];e=+g[a+128>>2];f=+g[a+132>>2];h=+g[a+136>>2];if(e*e+f*f+h*h>0.0){g[a+164>>2]=0.0;c[a+364>>2]=3;c[a+148>>2]=a+316;c[a+180>>2]=1;uh(a,-e,-f,-h,a+316|0);d=a+164|0;b=a+148|0}else{g[a+164>>2]=0.0;c[a+364>>2]=3;c[a+148>>2]=a+316;c[a+180>>2]=1;uh(a,1.0,0.0,0.0,a+316|0);d=a+164|0;b=a+148|0}g[d>>2]=1.0;x=(c[b>>2]|0)+16|0;c[a+128>>2]=c[x>>2];c[a+128+4>>2]=c[x+4>>2];c[a+128+8>>2]=c[x+8>>2];c[a+128+12>>2]=c[x+12>>2];c[B+24+48>>2]=c[x>>2];c[B+24+48+4>>2]=c[x+4>>2];c[B+24+48+8>>2]=c[x+8>>2];c[B+24+48+12>>2]=c[x+12>>2];c[B+24+32>>2]=c[x>>2];c[B+24+32+4>>2]=c[x+4>>2];c[B+24+32+8>>2]=c[x+8>>2];c[B+24+32+12>>2]=c[x+12>>2];c[B+24+16>>2]=c[x>>2];c[B+24+16+4>>2]=c[x+4>>2];c[B+24+16+8>>2]=c[x+8>>2];c[B+24+16+12>>2]=c[x+12>>2];c[B+24>>2]=c[x>>2];c[B+24+4>>2]=c[x+4>>2];c[B+24+8>>2]=c[x+8>>2];c[B+24+12>>2]=c[x+12>>2];w=0.0;x=0;y=0;e=e*e+f*f+h*h;a:do{v=c[a+368>>2]|0;f=+g[a+128>>2];h=+g[a+132>>2];i=+g[a+136>>2];o=+C(+(f*f+h*h+i*i));if(o<9.999999747378752e-05){A=6;break}g[a+148+(v*36|0)+16+(c[a+148+(v*36|0)+32>>2]<<2)>>2]=0.0;d=(c[a+364>>2]|0)+-1|0;c[a+364>>2]=d;c[a+148+(v*36|0)+(c[a+148+(v*36|0)+32>>2]<<2)>>2]=c[a+348+(d<<2)>>2];d=c[a+148+(v*36|0)+32>>2]|0;c[a+148+(v*36|0)+32>>2]=d+1;uh(a,-f,-h,-i,c[a+148+(v*36|0)+(d<<2)>>2]|0);d=c[a+148+(v*36|0)+32>>2]|0;b=c[a+148+(v*36|0)+(d+-1<<2)>>2]|0;f=+g[b+16>>2];h=+g[b+20>>2];i=+g[b+24>>2];q=f-+g[B+24>>2];r=h-+g[B+24+4>>2];u=i-+g[B+24+8>>2];if(q*q+r*r+u*u<9.999999747378752e-05){A=9;break}q=f-+g[B+24+16>>2];r=h-+g[B+24+20>>2];u=i-+g[B+24+24>>2];if(q*q+r*r+u*u<9.999999747378752e-05){A=9;break}q=f-+g[B+24+32>>2];r=h-+g[B+24+36>>2];u=i-+g[B+24+40>>2];if(q*q+r*r+u*u<9.999999747378752e-05){A=9;break}q=f-+g[B+24+48>>2];r=h-+g[B+24+52>>2];u=i-+g[B+24+56>>2];if(q*q+r*r+u*u<9.999999747378752e-05){A=9;break}x=x+1&3;t=B+24+(x<<4)|0;c[t>>2]=c[b+16>>2];c[t+4>>2]=c[b+16+4>>2];c[t+8>>2]=c[b+16+8>>2];c[t+12>>2]=c[b+16+12>>2];u=(+g[a+128>>2]*f+ +g[a+132>>2]*h+ +g[a+136>>2]*i)/o;w=u>w?u:w;if(o-w-o*9.999999747378752e-05<=0.0){A=10;break}c[B>>2]=0;b:do switch(d|0){case 2:{t=c[a+148+(v*36|0)>>2]|0;s=c[a+148+(v*36|0)+4>>2]|0;e=+g[s+16>>2];f=+g[t+16>>2];h=+g[s+20>>2];i=+g[t+20>>2];o=+g[s+24>>2];p=+g[t+24>>2];if(!((e-f)*(e-f)+(h-i)*(h-i)+(o-p)*(o-p)>0.0)){A=40;break a}q=-(f*(e-f)+i*(h-i)+p*(o-p))/((e-f)*(e-f)+(h-i)*(h-i)+(o-p)*(o-p));if(q>=1.0){g[B+8>>2]=0.0;g[B+8+4>>2]=1.0;c[B>>2]=2;e=e*e+h*h+o*o;break b}if(!(q<=0.0)){g[B+8+4>>2]=q;g[B+8>>2]=1.0-q;c[B>>2]=3;e=((e-f)*q+f)*((e-f)*q+f)+((h-i)*q+i)*((h-i)*q+i)+((o-p)*q+p)*((o-p)*q+p);break b}else{g[B+8>>2]=1.0;g[B+8+4>>2]=0.0;c[B>>2]=1;e=f*f+i*i+p*p;break b}}case 3:{e=+ye((c[a+148+(v*36|0)>>2]|0)+16|0,(c[a+148+(v*36|0)+4>>2]|0)+16|0,(c[a+148+(v*36|0)+8>>2]|0)+16|0,B+8|0,B);break}case 4:{m=c[a+148+(v*36|0)>>2]|0;n=c[a+148+(v*36|0)+4>>2]|0;s=c[a+148+(v*36|0)+8>>2]|0;t=c[a+148+(v*36|0)+12>>2]|0;c[B+152>>2]=m+16;c[B+152+4>>2]=n+16;c[B+152+8>>2]=s+16;c[B+152+12>>2]=t+16;h=+g[m+16>>2];i=+g[t+16>>2];e=+g[m+20>>2];o=+g[t+20>>2];f=+g[m+24>>2];p=+g[t+24>>2];g[B+104>>2]=h-i;g[B+104+4>>2]=e-o;g[B+104+8>>2]=f-p;g[B+104+12>>2]=0.0;D=+g[n+16>>2];F=+g[n+20>>2];r=+g[n+24>>2];g[B+104+16>>2]=D-i;g[B+104+20>>2]=F-o;g[B+104+24>>2]=r-p;g[B+104+28>>2]=0.0;q=+g[s+16>>2];G=+g[s+20>>2];E=+g[s+24>>2];g[B+104+32>>2]=q-i;g[B+104+36>>2]=G-o;g[B+104+40>>2]=E-p;g[B+104+44>>2]=0.0;u=(e-o)*(r-p)*(q-i)+(f-p)*(D-i)*(G-o)-(G-o)*(r-p)*(h-i)-(e-o)*(D-i)*(E-p)+(E-p)*(h-i)*(F-o)-(q-i)*(f-p)*(F-o);if(u!=u|0.0!=0.0|u==0.0|!(u*(f*((D-q)*(e-F)-(F-G)*(h-D))+(h*((F-G)*(f-r)-(r-E)*(e-F))+e*((r-E)*(h-D)-(D-q)*(f-r))))<=0.0))e=-1.0;else{c[B+92>>2]=0;c[B+92+4>>2]=0;c[B+92+8>>2]=0;c[B+88>>2]=0;r=e-o;q=f-p;f=h-i;b=c[B>>2]|0;k=0;e=-1.0;while(1){d=c[5168+(k<<2)>>2]|0;E=+g[B+104+(d<<4)+8>>2];F=+g[B+104+(d<<4)+4>>2];G=+g[B+104+(d<<4)>>2];if(u*((r*E-q*F)*i+o*(q*G-E*f)+(F*f-r*G)*p)>0.0?(z=+ye(c[B+152+(k<<2)>>2]|0,c[B+152+(d<<2)>>2]|0,t+16|0,B+92|0,B+88|0),e<0.0|z>2]|0;c[B+8+(k<<2)>>2]=c[B+92>>2];c[B+8+(d<<2)>>2]=c[B+92+4>>2];g[B+8+(c[5168+(d<<2)>>2]<<2)>>2]=0.0;c[B+8+12>>2]=c[B+92+8>>2];b=(b&2|0?1<>2];q=+g[B+104+(d<<4)+8>>2];f=+g[B+104+(d<<4)>>2];i=+g[t+16>>2];o=+g[t+20>>2];p=+g[t+24>>2];k=d}c[B>>2]=b;if(e<0.0){c[B>>2]=15;i=+g[s+20>>2];G=+g[n+24>>2];F=+g[t+16>>2];f=+g[s+24>>2];E=+g[n+16>>2];o=+g[t+20>>2];h=+g[s+16>>2];D=+g[t+24>>2];q=+g[n+20>>2];g[B+8>>2]=(i*G*F+f*E*o-o*G*h-i*E*D+D*h*q-F*f*q)/u;e=+g[m+20>>2];p=+g[m+24>>2];r=+g[m+16>>2];g[B+8+4>>2]=(e*f*F+p*h*o-o*f*r-e*h*D+D*r*i-F*p*i)/u;g[B+8+8>>2]=(q*p*F+G*r*o-o*p*E-q*r*D+D*E*e-F*G*e)/u;g[B+8+12>>2]=1.0-((i*G*F+f*E*o-o*G*h-i*E*D+D*h*q-F*f*q)/u+(e*f*F+p*h*o-o*f*r-e*h*D+D*r*i-F*p*i)/u+(q*p*F+G*r*o-o*p*E-q*r*D+D*E*e-F*G*e)/u);e=0.0}}break}default:{}}while(0);if(!(e>=0.0)){A=40;break}c[a+148+((1-v|0)*36|0)+32>>2]=0;c[a+128>>2]=0;c[a+128+4>>2]=0;c[a+128+8>>2]=0;c[a+128+12>>2]=0;c[a+368>>2]=1-v;d=c[a+148+(v*36|0)+32>>2]|0;b=c[B>>2]|0;if(d|0){n=0;do{m=a+148+(v*36|0)+(n<<2)|0;k=c[m>>2]|0;if(!(b&1<>2]|0;c[a+364>>2]=t+1;c[a+348+(t<<2)>>2]=k}else{c[a+148+((1-v|0)*36|0)+(c[a+148+((1-v|0)*36|0)+32>>2]<<2)>>2]=k;s=c[B+8+(n<<2)>>2]|0;t=c[a+148+((1-v|0)*36|0)+32>>2]|0;c[a+148+((1-v|0)*36|0)+32>>2]=t+1;c[a+148+((1-v|0)*36|0)+16+(t<<2)>>2]=s;t=c[m>>2]|0;E=(c[j>>2]=s,+g[j>>2]);F=E*+g[t+20>>2];G=E*+g[t+24>>2];g[a+128>>2]=+g[t+16>>2]*E+ +g[a+128>>2];g[a+132>>2]=F+ +g[a+132>>2];g[a+136>>2]=G+ +g[a+136>>2]}n=n+1|0}while((n|0)!=(d|0))}if((b|0)==15)c[a+376>>2]=1;y=y+1|0;if(y>>>0>=128){A=39;break}}while(!(c[a+376>>2]|0));if((A|0)==6)c[a+376>>2]=1;else if((A|0)==9){A=c[a+368>>2]|0;y=(c[a+148+(A*36|0)+32>>2]|0)+-1|0;c[a+148+(A*36|0)+32>>2]=y;y=c[a+148+(A*36|0)+(y<<2)>>2]|0;A=c[a+364>>2]|0;c[a+364>>2]=A+1;c[a+348+(A<<2)>>2]=y}else if((A|0)==10){A=c[a+368>>2]|0;y=(c[a+148+(A*36|0)+32>>2]|0)+-1|0;c[a+148+(A*36|0)+32>>2]=y;y=c[a+148+(A*36|0)+(y<<2)>>2]|0;A=c[a+364>>2]|0;c[a+364>>2]=A+1;c[a+348+(A<<2)>>2]=y}else if((A|0)==39)c[a+376>>2]=2;else if((A|0)==40){A=c[a+368>>2]|0;y=(c[a+148+(A*36|0)+32>>2]|0)+-1|0;c[a+148+(A*36|0)+32>>2]=y;y=c[a+148+(A*36|0)+(y<<2)>>2]|0;A=c[a+364>>2]|0;c[a+364>>2]=A+1;c[a+348+(A<<2)>>2]=y}c[a+372>>2]=a+148+((c[a+368>>2]|0)*36|0);d=c[a+376>>2]|0;switch(d|0){case 0:{F=+g[a+128>>2];G=+g[a+132>>2];e=+g[a+136>>2];e=+C(+(F*F+G*G+e*e));break}case 1:{e=0.0;break}default:{l=B;return d|0}}g[a+144>>2]=e;l=B;return d|0}function Bc(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0.0,j=0.0,k=0.0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,B=0,D=0,E=0.0,F=0.0,G=0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0;P=l;l=l+208|0;g[b+56>>2]=0.0;N=P+192+4|0;O=P+192+8|0;c[P+192>>2]=0;c[P+192+4>>2]=0;c[P+192+8>>2]=0;c[P+192+12>>2]=0;c[P+128>>2]=c[d>>2];c[P+128+4>>2]=c[d+4>>2];c[P+128+8>>2]=c[d+8>>2];c[P+128+12>>2]=c[d+12>>2];c[P+128+16>>2]=c[d+16>>2];c[P+128+16+4>>2]=c[d+16+4>>2];c[P+128+16+8>>2]=c[d+16+8>>2];c[P+128+16+12>>2]=c[d+16+12>>2];c[P+128+32>>2]=c[d+32>>2];c[P+128+32+4>>2]=c[d+32+4>>2];c[P+128+32+8>>2]=c[d+32+8>>2];c[P+128+32+12>>2]=c[d+32+12>>2];B=P+128+48|0;c[B>>2]=c[d+48>>2];c[B+4>>2]=c[d+48+4>>2];c[B+8>>2]=c[d+48+8>>2];c[B+12>>2]=c[d+48+12>>2];c[P+64>>2]=c[d+64>>2];c[P+64+4>>2]=c[d+64+4>>2];c[P+64+8>>2]=c[d+64+8>>2];c[P+64+12>>2]=c[d+64+12>>2];c[P+64+16>>2]=c[d+80>>2];c[P+64+16+4>>2]=c[d+80+4>>2];c[P+64+16+8>>2]=c[d+80+8>>2];c[P+64+16+12>>2]=c[d+80+12>>2];c[P+64+32>>2]=c[d+96>>2];c[P+64+32+4>>2]=c[d+96+4>>2];c[P+64+32+8>>2]=c[d+96+8>>2];c[P+64+32+12>>2]=c[d+96+12>>2];D=P+64+48|0;c[D>>2]=c[d+112>>2];c[D+4>>2]=c[d+112+4>>2];c[D+8>>2]=c[d+112+8>>2];c[D+12>>2]=c[d+112+12>>2];H=+g[B>>2];I=+g[D>>2];J=+g[P+128+52>>2];K=+g[P+64+52>>2];L=+g[P+128+56>>2];M=+g[P+64+56>>2];g[B>>2]=H-(H+I)*.5;g[P+128+52>>2]=J-(J+K)*.5;g[P+128+56>>2]=L-(L+M)*.5;g[D>>2]=I-(H+I)*.5;g[P+64+52>>2]=K-(J+K)*.5;g[P+64+56>>2]=M-(L+M)*.5;if(((c[(c[b+28>>2]|0)+4>>2]|0)+-17|0)>>>0<2)B=((c[(c[b+32>>2]|0)+4>>2]|0)+-17|0)>>>0<2;else B=0;v=+g[b+44>>2];u=+g[b+48>>2];c[6457]=(c[6457]|0)+1;D=a[b+52>>0]|0;c[b+64>>2]=0;c[b+4>>2]=0;c[b+8>>2]=1065353216;c[b+12>>2]=0;g[b+16>>2]=0.0;c[b+68>>2]=0;c[b+60>>2]=-1;m=c[b+24>>2]|0;a[m+312>>0]=0;c[m>>2]=0;a[m+356>>0]=1;c[m+292>>2]=1566444395;c[m+296>>2]=1566444395;c[m+300>>2]=1566444395;g[m+304>>2]=0.0;c[m+336>>2]=0;c[m+336+4>>2]=0;c[m+336+8>>2]=0;c[m+336+12>>2]=0;a[m+336+16>>0]=0;a[m+332>>0]=a[m+332>>0]&-16;m=0;p=999999984306749440.0;do{s=+g[b+4>>2];q=+g[b+8>>2];j=+g[b+12>>2];k=+g[d+4>>2]*-s+ +g[d+20>>2]*-q+ +g[d+36>>2]*-j;n=+g[d+8>>2]*-s+ +g[d+24>>2]*-q+ +g[d+40>>2]*-j;g[P+48>>2]=+g[d>>2]*-s+ +g[d+16>>2]*-q+ +g[d+32>>2]*-j;g[P+48+4>>2]=k;g[P+48+8>>2]=n;g[P+48+12>>2]=0.0;n=s*+g[d+68>>2]+q*+g[d+84>>2]+j*+g[d+100>>2];k=s*+g[d+72>>2]+q*+g[d+88>>2]+j*+g[d+104>>2];g[P+32>>2]=+g[d+64>>2]*s+ +g[d+80>>2]*q+ +g[d+96>>2]*j;g[P+32+4>>2]=n;g[P+32+8>>2]=k;g[P+32+12>>2]=0.0;wd(P+16|0,c[b+28>>2]|0,P+48|0);wd(P,c[b+32>>2]|0,P+32|0);k=+g[P+16>>2];n=+g[P+16+4>>2];j=+g[P+16+8>>2];q=k*+g[P+128>>2]+n*+g[P+128+4>>2]+j*+g[P+128+8>>2]+ +g[P+128+48>>2];s=k*+g[P+128+16>>2]+n*+g[P+128+20>>2]+j*+g[P+128+24>>2]+ +g[P+128+52>>2];j=k*+g[P+128+32>>2]+n*+g[P+128+36>>2]+j*+g[P+128+40>>2]+ +g[P+128+56>>2];n=+g[P>>2];k=+g[P+4>>2];t=+g[P+8>>2];o=n*+g[P+64>>2]+k*+g[P+64+4>>2]+t*+g[P+64+8>>2]+ +g[P+64+48>>2];r=n*+g[P+64+16>>2]+k*+g[P+64+20>>2]+t*+g[P+64+24>>2]+ +g[P+64+52>>2];t=n*+g[P+64+32>>2]+k*+g[P+64+36>>2]+t*+g[P+64+40>>2]+ +g[P+64+56>>2];k=B?0.0:t;n=B?0.0:j;t=(B?0.0:j)-(B?0.0:t);j=+g[b+4>>2]*(q-o)+ +g[b+8>>2]*(s-r)+ +g[b+12>>2]*t;if(j>0.0?j*j>p*+g[d+128>>2]:0){c[b+68>>2]=10;m=1;h=0}else T=7;do if((T|0)==7){T=0;z=c[b+24>>2]|0;A=c[z>>2]|0;if((A|0)>0){i=+g[z+308>>2];h=0;y=0;do{x=q-o-+g[z+4+(y<<4)>>2];E=s-r-+g[z+4+(y<<4)+4>>2];F=t-+g[z+4+(y<<4)+8>>2];h=h|x*x+E*E+F*F<=i;y=y+1|0}while((y|0)!=(A|0))}else h=0;if((+g[z+304>>2]==0.0?t==+g[z+300>>2]:0)?s-r==+g[z+296>>2]:0){if(q-o==+g[z+292>>2]|h)T=15}else T=14;if((T|0)==14?(T=0,h):0)T=15;if((T|0)==15){T=0;c[b+68>>2]=1;m=1;h=0;break}i=p-j;if(i<=p*9.999999974752427e-07){c[b+68>>2]=!(i<=0.0)?11:2;m=1;h=0;break}g[z+292>>2]=q-o;g[z+296>>2]=s-r;g[z+300>>2]=t;g[z+304>>2]=0.0;a[z+356>>0]=1;g[z+4+(A<<4)>>2]=q-o;g[z+4+(A<<4)+4>>2]=s-r;g[z+4+(A<<4)+8>>2]=t;g[z+4+(A<<4)+12>>2]=0.0;h=c[z>>2]|0;g[z+84+(h<<4)>>2]=q;g[z+84+(h<<4)+4>>2]=s;g[z+84+(h<<4)+8>>2]=n;g[z+84+(h<<4)+12>>2]=0.0;h=c[z>>2]|0;g[z+164+(h<<4)>>2]=o;g[z+164+(h<<4)+4>>2]=r;g[z+164+(h<<4)+8>>2]=k;g[z+164+(h<<4)+12>>2]=0.0;c[z>>2]=(c[z>>2]|0)+1;h=c[b+24>>2]|0;A=Dc(h)|0;i=+g[h+276>>2];j=+g[h+280>>2];k=+g[h+284>>2];h=c[h+288>>2]|0;if(!A){c[b+68>>2]=3;m=1;h=0;break}if(i*i+j*j+k*k<9.999999974752427e-07){g[b+4>>2]=i;g[b+8>>2]=j;g[b+12>>2]=k;c[b+16>>2]=h;c[b+68>>2]=6;m=1;h=0;break}if(p-(i*i+j*j+k*k)<=p*1.1920928955078125e-07){c[b+68>>2]=12;m=1;h=0;p=i*i+j*j+k*k;break}g[b+4>>2]=i;g[b+8>>2]=j;g[b+12>>2]=k;c[b+16>>2]=h;A=c[b+64>>2]|0;c[b+64>>2]=A+1;if((A|0)<=1e3)if((c[c[b+24>>2]>>2]|0)==4){c[b+68>>2]=13;h=0;p=i*i+j*j+k*k}else{h=1;p=i*i+j*j+k*k}else{h=0;p=i*i+j*j+k*k}}while(0)}while(h);w=D<<24>>24==0?u:0.0;u=(D<<24>>24==0?v:0.0)+w;if(m){D=c[b+24>>2]|0;Dc(D)|0;j=+g[D+260>>2];n=+g[D+264>>2];q=+g[D+268>>2];c[P+192>>2]=c[b+4>>2];c[P+192+4>>2]=c[b+4+4>>2];c[P+192+8>>2]=c[b+4+8>>2];c[P+192+12>>2]=c[b+4+12>>2];i=+g[b+4>>2];k=+g[b+8>>2];o=+g[b+12>>2];if(i*i+k*k+o*o<.0001)c[b+68>>2]=5;if(i*i+k*k+o*o>1.4210854715202004e-14){E=1.0/+C(+(i*i+k*k+o*o));g[P+192>>2]=E*+g[P+192>>2];g[N>>2]=E*+g[N>>2];g[O>>2]=E*+g[O>>2];F=w/+C(+p);h=1;p=1.0/E-u;m=1;j=F*i+j;n=F*k+n;i=F*o+q}else{h=2;p=0.0;m=0;i=q}c[b+60>>2]=h;E=j;F=i}else{p=0.0;m=0;E=0.0;n=0.0;F=0.0}if(((c[b+72>>2]|0)!=0?(c[b+20>>2]|0)!=0:0)?(c[b+68>>2]|0)!=0:0)h=u+p<.01;else h=0;y=m^1;do if(h|y?(G=c[b+20>>2]|0,(G|0)!=0):0){c[6456]=(c[6456]|0)+1;c[b+4>>2]=0;c[b+4+4>>2]=0;c[b+4+8>>2]=0;c[b+4+12>>2]=0;if(yb[c[(c[G>>2]|0)+8>>2]&3](G,c[b+24>>2]|0,c[b+28>>2]|0,c[b+32>>2]|0,P+128|0,P+64|0,b+4|0,P+48|0,P+32|0,f)|0){k=+g[P+32>>2];q=+g[P+48>>2];j=+g[P+32+4>>2];r=+g[P+48+4>>2];i=+g[P+32+8>>2];s=+g[P+48+8>>2];if(!((k-q)*(k-q)+(j-r)*(j-r)+(i-s)*(i-s)<=1.4210854715202004e-14)){o=(k-q)*(k-q)+(j-r)*(j-r)+(i-s)*(i-s);u=k-q;v=i-s;w=0.0;x=j-r}else{u=+g[b+4>>2];x=+g[b+8>>2];v=+g[b+12>>2];o=u*u+x*x+v*v;w=+g[b+16>>2]}if(o>1.4210854715202004e-14){t=1.0/+C(+o);o=-+C(+((q-k)*(q-k)+(r-j)*(r-j)+(s-i)*(s-i)));if(p>o|y){g[P+192>>2]=u*t;g[N>>2]=x*t;g[O>>2]=v*t;g[P+192+12>>2]=w;c[b+60>>2]=3;break}else h=8}else h=9;c[b+60>>2]=h;if(m){o=p;k=E;j=n;i=F;break}l=P;return}else{j=+g[b+4>>2];q=+g[b+8>>2];s=+g[b+12>>2];if(!(j*j+q*q+s*s>0.0)){if(m){o=p;k=E;j=n;i=F;break}l=P;return}k=+g[P+32>>2];v=+g[P+48>>2]-k;r=+g[P+32+4>>2];x=+g[P+48+4>>2]-r;t=+g[P+32+8>>2];i=+g[P+48+8>>2]-t;i=+C(+(v*v+x*x+i*i))-u;if(i>2]=c[b+4>>2];c[P+192+4>>2]=c[b+4+4>>2];c[P+192+8>>2]=c[b+4+8>>2];c[P+192+12>>2]=c[b+4+12>>2];x=+g[P+192>>2];E=+g[N>>2];F=+g[O>>2];o=1.0/+C(+(x*x+E*E+F*F));g[P+192>>2]=x*o;g[N>>2]=E*o;g[O>>2]=F*o;c[b+60>>2]=6;o=i;k=w*j+k;j=w*q+r;i=w*s+t;break}c[b+60>>2]=5;if(m){o=p;k=E;j=n;i=F;break}l=P;return}}else T=52;while(0);if((T|0)==52)if(m){o=p;k=E;j=n;i=F}else{l=P;return}if(!(o<0.0)?!(o*o<+g[d+128>>2]):0){l=P;return}if(c[b+76>>2]|0?(T=c[b+28>>2]|0,Nb[c[(c[T>>2]|0)+8>>2]&127](T,P+128|0,P+48|0,P+32|0),x=(+g[P+32>>2]+ +g[P+48>>2])*.5,E=(+g[P+32+4>>2]+ +g[P+48+4>>2])*.5,F=(+g[P+32+8>>2]+ +g[P+48+8>>2])*.5,T=c[b+32>>2]|0,Nb[c[(c[T>>2]|0)+8>>2]&127](T,P+64|0,P+48|0,P+32|0),Q=+g[P+192>>2],R=+g[N>>2],S=+g[O>>2],(x-(+g[P+48>>2]+ +g[P+32>>2])*.5)*Q+(E-(+g[P+48+4>>2]+ +g[P+32+4>>2])*.5)*R+(F-(+g[P+48+8>>2]+ +g[P+32+8>>2])*.5)*S<0.0):0){g[P+192>>2]=-Q;g[N>>2]=-R;g[O>>2]=-S}c[b+4>>2]=c[P+192>>2];c[b+4+4>>2]=c[P+192+4>>2];c[b+4+8>>2]=c[P+192+8>>2];c[b+4+12>>2]=c[P+192+12>>2];g[b+56>>2]=o;T=c[(c[e>>2]|0)+16>>2]|0;g[P+48>>2]=(H+I)*.5+k;g[P+48+4>>2]=(J+K)*.5+j;g[P+48+8>>2]=(L+M)*.5+i;g[P+48+12>>2]=0.0;Lb[T&15](e,P+192|0,P+48|0,o);l=P;return} +function Xb(d,f){d=d|0;f=f|0;var h=0,i=0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0.0,w=0.0,x=0.0,y=0,z=0,A=0,D=0,E=0.0,F=0.0,G=0,H=0,I=0.0,J=0,K=0.0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0.0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0.0,ka=0.0,la=0;ia=l;l=l+192|0;h=c[d+52>>2]|0;if(h|0?(Ab[c[c[h>>2]>>2]&511](h),i=c[d+52>>2]|0,i|0):0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[6472]=(c[6472]|0)+1;h=ic(151)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}c[h>>2]=9544;a[h+20>>0]=1;c[h+16>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;a[h+40>>0]=1;c[h+36>>2]=0;c[h+28>>2]=0;c[h+32>>2]=0;a[h+60>>0]=1;c[h+56>>2]=0;c[h+48>>2]=0;c[h+52>>2]=0;c[d+52>>2]=h;k=0;p=0;o=0;ha=0;L=0;while(1){if((p|0)>=(qb[c[(c[d>>2]|0)+96>>2]&127](d)|0))break;do if((L|0)==(o|0)){i=o|0?o<<1:1;if((o|0)<(i|0)){if((i|0)!=0?(c[6472]=(c[6472]|0)+1,t=ic((i<<4|3)+16|0)|0,(t|0)!=0):0){c[(t+4+15&-16)+-4>>2]=t;m=t+4+15&-16}else m=0;if((o|0)<=0){if(!ha){n=o;k=m;h=m;break}}else{h=0;do{ga=m+(h<<4)|0;fa=ha+(h<<4)|0;c[ga>>2]=c[fa>>2];c[ga+4>>2]=c[fa+4>>2];c[ga+8>>2]=c[fa+8>>2];c[ga+12>>2]=c[fa+12>>2];h=h+1|0}while((h|0)!=(o|0))}c[6473]=(c[6473]|0)+1;nd(c[ha+-4>>2]|0);n=o;k=m;h=m}else{n=o;i=o;h=ha}}else{n=L;i=o;h=ha}while(0);o=h+(L<<4)|0;c[o>>2]=c[ia+136>>2];c[o+4>>2]=c[ia+136+4>>2];c[o+8>>2]=c[ia+136+8>>2];c[o+12>>2]=c[ia+136+12>>2];Kb[c[(c[d>>2]|0)+108>>2]&127](d,p,o);p=p+1|0;o=i;ha=h;L=n+1|0}a[ia+76+16>>0]=1;ga=ia+76+12|0;c[ga>>2]=0;c[ia+76+4>>2]=0;c[ia+76+8>>2]=0;a[ia+76+36>>0]=1;fa=ia+76+32|0;c[fa>>2]=0;c[ia+76+24>>2]=0;c[ia+76+28>>2]=0;a[ia+76+56>>0]=1;ea=ia+76+52|0;c[ea>>2]=0;c[ia+76+44>>2]=0;c[ia+76+48>>2]=0;if(f){if((L|0)>0){J=0;i=0;m=0;k=0;while(1){h=J;J=J+1|0;if((J|0)<(L|0)){G=ha+(h<<4)|0;H=ha+(h<<4)+4|0;A=ha+(h<<4)+8|0;D=J;h=k;do{k=D;D=D+1|0;if((D|0)<(L|0)){y=ha+(k<<4)|0;z=ha+(k<<4)+4|0;t=ha+(k<<4)+8|0;f=D;do{w=+g[G>>2];x=+g[y>>2]-w;I=+g[H>>2];K=+g[z>>2]-I;E=+g[A>>2];F=+g[t>>2]-E;w=+g[ha+(f<<4)>>2]-w;I=+g[ha+(f<<4)+4>>2]-I;E=+g[ha+(f<<4)+8>>2]-E;q=1.0;p=0;while(1){u=(K*E-F*I)*q;v=(F*w-x*E)*q;s=(x*I-K*w)*q;a:do if(s*s+(u*u+v*v)>9.999999747378752e-05){r=1.0/+C(+(s*s+(u*u+v*v)));if((h|0)>0){k=0;do{if(u*r*+g[m+(k<<4)>>2]+v*r*+g[m+(k<<4)+4>>2]+s*r*+g[m+(k<<4)+8>>2]>.9990000128746033)break a;k=k+1|0}while((k|0)<(h|0))}q=u*r*+g[G>>2]+v*r*+g[H>>2]+s*r*+g[A>>2];k=0;do{if(u*r*+g[ha+(k<<4)>>2]+v*r*+g[ha+(k<<4)+4>>2]+s*r*+g[ha+(k<<4)+8>>2]-q+-.009999999776482582>0.0)break a;k=k+1|0}while((k|0)<(L|0));do if((h|0)==(i|0)){n=i|0?i<<1:1;if((i|0)<(n|0)){do if(!n)o=0;else{c[6472]=(c[6472]|0)+1;k=ic((n<<4|3)+16|0)|0;if(!k){o=0;break}c[(k+4+15&-16)+-4>>2]=k;o=k+4+15&-16}while(0);if((i|0)<=0){if(!m){k=i;i=n;m=o;break}}else{k=0;do{ba=o+(k<<4)|0;aa=m+(k<<4)|0;c[ba>>2]=c[aa>>2];c[ba+4>>2]=c[aa+4>>2];c[ba+8>>2]=c[aa+8>>2];c[ba+12>>2]=c[aa+12>>2];k=k+1|0}while((k|0)!=(i|0))}c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);k=i;i=n;m=o}else k=i}else k=h;while(0);g[m+(k<<4)>>2]=u*r;g[m+(k<<4)+4>>2]=v*r;g[m+(k<<4)+8>>2]=s*r;g[m+(k<<4)+12>>2]=-q;h=h+1|0}while(0);p=p+1|0;if((p|0)==2)break;else q=-1.0}f=f+1|0}while((f|0)!=(L|0))}}while((D|0)!=(L|0))}else h=k;if((J|0)==(L|0))break;else k=h}if((h|0)>0){o=0;p=0;t=0;while(1){ba=m+(t<<4)|0;c[ia+136>>2]=c[ba>>2];c[ia+136+4>>2]=c[ba+4>>2];c[ia+136+8>>2]=c[ba+8>>2];q=+g[m+(t<<4)+12>>2];q=q-+gb[c[(c[d>>2]|0)+48>>2]&15](d);do if((t|0)==(o|0)){n=o|0?o<<1:1;if((o|0)<(n|0)){if((n|0)!=0?(c[6472]=(c[6472]|0)+1,M=ic((n<<4|3)+16|0)|0,(M|0)!=0):0){c[(M+4+15&-16)+-4>>2]=M;k=M+4+15&-16}else k=0;if((o|0)<=0){if(!p){i=o;break}}else{i=0;do{ba=k+(i<<4)|0;aa=p+(i<<4)|0;c[ba>>2]=c[aa>>2];c[ba+4>>2]=c[aa+4>>2];c[ba+8>>2]=c[aa+8>>2];c[ba+12>>2]=c[aa+12>>2];i=i+1|0}while((i|0)!=(o|0))}c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0);i=o}else{i=o;n=o;k=p}}else{i=t;n=o;k=p}while(0);ba=k+(i<<4)|0;c[ba>>2]=c[ia+136>>2];c[ba+4>>2]=c[ia+136+4>>2];c[ba+8>>2]=c[ia+136+8>>2];g[k+(i<<4)+12>>2]=q;t=t+1|0;if((t|0)<(h|0)){o=n;p=k}else break}if((t|0)>0){n=0;H=0;o=0;i=0;h=0;do{G=H;H=H+1|0;if((H|0)<(t|0)){D=H;do{A=D;D=D+1|0;if((D|0)<(t|0)){z=D;do{u=+g[k+(A<<4)+4>>2];q=+g[k+(z<<4)+8>>2];r=+g[k+(A<<4)+8>>2];v=+g[k+(z<<4)+4>>2];w=+g[k+(z<<4)>>2];x=+g[k+(A<<4)>>2];s=+g[k+(G<<4)+8>>2];E=+g[k+(G<<4)+4>>2];F=+g[k+(G<<4)>>2];b:do if((((v*x-u*w)*(v*x-u*w)+((u*q-r*v)*(u*q-r*v)+(r*w-q*x)*(r*w-q*x))>9.999999747378752e-05?(w*E-v*F)*(w*E-v*F)+((v*s-q*E)*(v*s-q*E)+(q*F-w*s)*(q*F-w*s))>9.999999747378752e-05:0)?(u*F-x*E)*(u*F-x*E)+((r*E-u*s)*(r*E-u*s)+(x*s-r*F)*(x*s-r*F))>9.999999747378752e-05:0)?(W=s*(v*x-u*w)+(E*(r*w-q*x)+(u*q-r*v)*F),+B(+W)>9.999999974752427e-07):0){ja=+g[k+(G<<4)+12>>2];K=+g[k+(A<<4)+12>>2];ka=+g[k+(z<<4)+12>>2];I=-1.0/W*((r*E-u*s)*ka+((u*q-r*v)*ja+(v*s-q*E)*K));r=-1.0/W*((x*s-r*F)*ka+((r*w-q*x)*ja+(q*F-w*s)*K));q=-1.0/W*((u*F-x*E)*ka+((v*x-u*w)*ja+(w*E-v*F)*K));p=0;do{if(+g[k+(p<<4)+12>>2]+(I*+g[k+(p<<4)>>2]+r*+g[k+(p<<4)+4>>2]+q*+g[k+(p<<4)+8>>2])+-.009999999776482582>0.0)break b;p=p+1|0}while((p|0)<(t|0));do if((h|0)==(o|0)){y=o|0?o<<1:1;if((o|0)>=(y|0)){p=o;break}do if(!y)f=0;else{c[6472]=(c[6472]|0)+1;n=ic((y<<4|3)+16|0)|0;if(!n){f=0;break}c[(n+4+15&-16)+-4>>2]=n;f=n+4+15&-16}while(0);if((o|0)<=0){if(!i){n=f;p=o;o=y;i=f;break}}else{n=0;do{ba=f+(n<<4)|0;aa=i+(n<<4)|0;c[ba>>2]=c[aa>>2];c[ba+4>>2]=c[aa+4>>2];c[ba+8>>2]=c[aa+8>>2];c[ba+12>>2]=c[aa+12>>2];n=n+1|0}while((n|0)!=(o|0))}c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);n=f;p=o;o=y;i=f}else p=h;while(0);g[i+(p<<4)>>2]=I;g[i+(p<<4)+4>>2]=r;g[i+(p<<4)+8>>2]=q;g[i+(p<<4)+12>>2]=0.0;h=h+1|0}while(0);z=z+1|0}while((z|0)!=(t|0))}}while((D|0)!=(t|0))}}while((H|0)!=(t|0))}else{n=0;i=0;h=0}}else{n=0;k=0;i=0;h=0}}else{n=0;m=0;k=0;i=0;h=0}jc(ia+76|0,n,h);if(i|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}if(k|0){c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0)}if(m|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}}else jc(ia+76|0,k,L);H=c[ia+76+44>>2]|0;if((H|0)>0){c[6472]=(c[6472]|0)+1;h=ic((H<<4|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=0;do{ba=i+(h<<4)|0;c[ba>>2]=c[ia+136>>2];c[ba+4>>2]=c[ia+136+4>>2];c[ba+8>>2]=c[ia+136+8>>2];c[ba+12>>2]=c[ia+136+12>>2];h=h+1|0}while((h|0)!=(H|0));ba=i;$=i}else{ba=0;$=0}a[ia+56+16>>0]=1;aa=ia+56+12|0;c[aa>>2]=0;_=ia+56+4|0;c[_>>2]=0;c[ia+56+8>>2]=0;k=ia+136|0;n=k+19|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(n|0));if((H|0)<0)$a();if(H|0){xf(ia+56|0,H);h=c[aa>>2]|0;i=0;do{k=h+(i*36|0)|0;a[k+16>>0]=1;c[k+4>>2]=0;c[k+4+4>>2]=0;c[k+4+8>>2]=0;k=k+20|0;m=ia+136+3|0;n=k+16|0;do{a[k>>0]=a[m>>0]|0;k=k+1|0;m=m+1|0}while((k|0)<(n|0));i=i+1|0}while((i|0)!=(H|0))}c[_>>2]=H;o=c[ia+76+4>>2]|0;n=c[d+52>>2]|0;m=c[n+8>>2]|0;if((m|0)<(o|0)){if((c[n+12>>2]|0)<(o|0)){if(!o){i=m;k=0}else{c[6472]=(c[6472]|0)+1;h=ic((o<<4|3)+16|0)|0;if(!h)h=0;else{c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}i=c[n+8>>2]|0;k=h}if((i|0)>0){h=0;do{Z=k+(h<<4)|0;Y=(c[n+16>>2]|0)+(h<<4)|0;c[Z>>2]=c[Y>>2];c[Z+4>>2]=c[Y+4>>2];c[Z+8>>2]=c[Y+8>>2];c[Z+12>>2]=c[Y+12>>2];h=h+1|0}while((h|0)!=(i|0))}h=c[n+16>>2]|0;if(h|0){if(a[n+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[n+16>>2]=0}a[n+20>>0]=1;c[n+16>>2]=k;c[n+12>>2]=o;i=n+16|0}else i=n+16|0;h=m;do{Z=(c[i>>2]|0)+(h<<4)|0;c[Z>>2]=c[ia+136>>2];c[Z+4>>2]=c[ia+136+4>>2];c[Z+8>>2]=c[ia+136+8>>2];c[Z+12>>2]=c[ia+136+12>>2];h=h+1|0}while((h|0)!=(o|0))}c[n+8>>2]=o;if((o|0)>0){h=0;do{Z=(c[(c[d+52>>2]|0)+16>>2]|0)+(h<<4)|0;Y=(c[ga>>2]|0)+(h<<4)|0;c[Z>>2]=c[Y>>2];c[Z+4>>2]=c[Y+4>>2];c[Z+8>>2]=c[Y+8>>2];c[Z+12>>2]=c[Y+12>>2];h=h+1|0}while((h|0)!=(o|0))}if((H|0)>0){G=0;do{z=(c[fa>>2]|0)+((c[(c[ea>>2]|0)+(G<<2)>>2]|0)*12|0)|0;A=z;i=0;do{D=A+4|0;y=c[A+((c[D>>2]|0)*12|0)+8>>2]|0;t=c[aa>>2]|0;f=t+(G*36|0)+4|0;h=c[f>>2]|0;p=t+(G*36|0)+8|0;if((h|0)==(c[p>>2]|0)?(N=h|0?h<<1:1,(h|0)<(N|0)):0){if(!N)k=0;else{c[6472]=(c[6472]|0)+1;h=ic((N<<2|3)+16|0)|0;if(!h)k=0;else{c[(h+4+15&-16)+-4>>2]=h;k=h+4+15&-16}h=c[f>>2]|0}o=t+(G*36|0)+12|0;n=c[o>>2]|0;if((h|0)<=0)if(!n)m=t+(G*36|0)+16|0;else ca=132;else{m=0;do{c[k+(m<<2)>>2]=c[n+(m<<2)>>2];m=m+1|0}while((m|0)!=(h|0));ca=132}if((ca|0)==132){ca=0;m=t+(G*36|0)+16|0;if(a[m>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[n+-4>>2]|0)}c[o>>2]=0;h=c[f>>2]|0}a[m>>0]=1;c[o>>2]=k;c[p>>2]=N}c[(c[t+(G*36|0)+12>>2]|0)+(h<<2)>>2]=y;c[f>>2]=(c[f>>2]|0)+1;Y=c[A+8>>2]|0;Z=c[ga>>2]|0;s=+g[Z+(Y<<4)>>2]-+g[Z+(y<<4)>>2];u=+g[Z+(Y<<4)+4>>2]-+g[Z+(y<<4)+4>>2];r=+g[Z+(Y<<4)+8>>2]-+g[Z+(y<<4)+8>>2];q=1.0/+C(+(s*s+u*u+r*r));if((i|0)<2){g[ia+136+(i<<4)>>2]=s*q;g[ia+136+(i<<4)+4>>2]=u*q;g[ia+136+(i<<4)+8>>2]=r*q;g[ia+136+(i<<4)+12>>2]=0.0;i=i+1|0}Z=A+((c[D>>2]|0)*12|0)|0;A=Z+((c[Z>>2]|0)*12|0)|0}while((A|0)!=(z|0));h=$+(G<<4)|0;if((i|0)==2){I=+g[ia+136+4>>2];K=+g[ia+136+24>>2];W=+g[ia+136+8>>2];ja=+g[ia+136+20>>2];F=+g[ia+136+16>>2];E=+g[ia+136>>2];Y=$+(G<<4)+4|0;Z=$+(G<<4)+8|0;g[$+(G<<4)+12>>2]=0.0;ka=1.0/+C(+((I*K-W*ja)*(I*K-W*ja)+(W*F-K*E)*(W*F-K*E)+(ja*E-I*F)*(ja*E-I*F)));g[h>>2]=(I*K-W*ja)*ka;g[Y>>2]=(W*F-K*E)*ka;g[Z>>2]=(ja*E-I*F)*ka;n=c[aa>>2]|0;g[n+(G*36|0)+20>>2]=(I*K-W*ja)*ka;c[n+(G*36|0)+24>>2]=c[Y>>2];c[n+(G*36|0)+28>>2]=c[Z>>2];g[n+(G*36|0)+32>>2]=1000000015047466219876688.0e6}else{c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;n=c[aa>>2]|0}k=c[n+(G*36|0)+4>>2]|0;if((k|0)>0){m=c[(c[d+52>>2]|0)+16>>2]|0;r=+g[h>>2];s=+g[$+(G<<4)+4>>2];u=+g[$+(G<<4)+8>>2];h=c[n+(G*36|0)+12>>2]|0;q=1000000015047466219876688.0e6;i=0;do{Z=c[h+(i<<2)>>2]|0;ka=+g[m+(Z<<4)>>2]*r+ +g[m+(Z<<4)+4>>2]*s+ +g[m+(Z<<4)+8>>2]*u;q=q>ka?ka:q;i=i+1|0}while((i|0)!=(k|0))}else q=1000000015047466219876688.0e6;g[n+(G*36|0)+32>>2]=-q;G=G+1|0}while((G|0)!=(H|0))}if((c[_>>2]|0)>0){k=0;h=0;o=0;i=0;n=0;do{do if((o|0)==(i|0)){i=o|0?o<<1:1;if((o|0)<(i|0)){if((i|0)!=0?(c[6472]=(c[6472]|0)+1,O=ic((i<<2|3)+16|0)|0,(O|0)!=0):0){c[(O+4+15&-16)+-4>>2]=O;m=O+4+15&-16}else m=0;if((o|0)>0){h=0;do{c[m+(h<<2)>>2]=c[n+(h<<2)>>2];h=h+1|0}while((h|0)!=(o|0));if(!k){h=m;k=m;n=m;break}}else if((n|0)==0|(k|0)==0){h=m;k=m;n=m;break}c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);h=m;k=m;n=m}else i=o}while(0);c[n+(o<<2)>>2]=o;o=o+1|0}while((o|0)<(c[_>>2]|0));N=ia+36+12|0;P=ia+36+4|0;O=ia+136+12|0;m=o;while(1){z=m+-1|0;k=c[n+(z<<2)>>2]|0;c[6472]=(c[6472]|0)+1;i=ic(23)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}c[i>>2]=k;Z=c[aa>>2]|0;r=+g[Z+(k*36|0)+20>>2];s=+g[Z+(k*36|0)+24>>2];q=+g[Z+(k*36|0)+28>>2];c:do if((m|0)>1){f=i;o=i;p=i;y=1;t=1;k=z;G=z;while(1){D=i;d:while(1){i=c[aa>>2]|0;do{Z=k;k=k+-1|0;if((Z|0)<=0){M=f;L=D;J=t;m=G;break c}A=c[n+(k<<2)>>2]|0}while(!(r*+g[i+(A*36|0)+20>>2]+s*+g[i+(A*36|0)+24>>2]+q*+g[i+(A*36|0)+28>>2]>.9990000128746033));do if((t|0)==(y|0)){y=t|0?t<<1:1;if((t|0)<(y|0)){do if(!y)m=0;else{c[6472]=(c[6472]|0)+1;i=ic((y<<2|3)+16|0)|0;if(!i){m=0;break}c[(i+4+15&-16)+-4>>2]=i;m=i+4+15&-16}while(0);if((t|0)>0){i=0;do{c[m+(i<<2)>>2]=c[D+(i<<2)>>2];i=i+1|0}while((i|0)!=(t|0));if(!p){f=m;o=m;z=m;D=m;break}}else if((D|0)==0|(p|0)==0){f=m;o=m;z=m;D=m;break}c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0);f=m;o=m;z=m;D=m}else{z=p;y=t}}else z=p;while(0);c[D+(t<<2)>>2]=A;t=t+1|0;i=0;while(1){p=n+(i<<2)|0;if((c[p>>2]|0)==(A|0))break;i=i+1|0;if((i|0)>=(G|0)){p=z;continue d}}if((i|0)<(G|0))break;else p=z}m=G+-1|0;Z=n+(m<<2)|0;c[p>>2]=c[Z>>2];c[Z>>2]=A;if((G|0)>1){p=z;i=D;G=m}else{p=y;i=D;ca=162;break}}}else{f=i;o=i;p=1;t=1;k=z;m=z;ca=162}while(0);e:do if((ca|0)==162){ca=0;z=i;A=t;while(1){i=c[aa>>2]|0;do{Z=k;k=k+-1|0;if((Z|0)<=0){M=f;L=z;J=A;break e}y=c[n+(k<<2)>>2]|0}while(!(r*+g[i+(y*36|0)+20>>2]+s*+g[i+(y*36|0)+24>>2]+q*+g[i+(y*36|0)+28>>2]>.9990000128746033));do if((A|0)==(p|0)){p=A|0?A<<1:1;if((A|0)<(p|0)){do if(!p)t=0;else{c[6472]=(c[6472]|0)+1;i=ic((p<<2|3)+16|0)|0;if(!i){t=0;break}c[(i+4+15&-16)+-4>>2]=i;t=i+4+15&-16}while(0);if((A|0)>0){i=0;do{c[t+(i<<2)>>2]=c[z+(i<<2)>>2];i=i+1|0}while((i|0)!=(A|0));if(!o){f=t;o=t;i=t;break}}else if((z|0)==0|(o|0)==0){f=t;o=t;i=t;break}c[6473]=(c[6473]|0)+1;nd(c[o+-4>>2]|0);f=t;o=t;i=t}else{p=A;i=z}}else i=z;while(0);c[i+(A<<2)>>2]=y;z=i;A=A+1|0}}while(0);if((J|0)>1){a[ia+36+16>>0]=1;c[N>>2]=0;c[P>>2]=0;c[ia+36+8>>2]=0;q=0.0;r=0.0;s=0.0;o=0;D=0;do{k=c[L+(D<<2)>>2]|0;q=+g[i+(k*36|0)+20>>2]+q;r=+g[i+(k*36|0)+24>>2]+r;s=+g[i+(k*36|0)+28>>2]+s;A=i+(k*36|0)+4|0;if((c[A>>2]|0)>0){z=i+(k*36|0)+12|0;i=o;y=0;while(1){f=c[(c[z>>2]|0)+(y<<2)>>2]|0;Z=(c[(c[d+52>>2]|0)+16>>2]|0)+(f<<4)|0;c[ia+136>>2]=c[Z>>2];c[ia+136+4>>2]=c[Z+4>>2];c[ia+136+8>>2]=c[Z+8>>2];c[ia+136+12>>2]=c[Z+12>>2];f:do if((i|0)>0){k=c[N>>2]|0;o=0;while(1){if((c[k+(o*24|0)+20>>2]|0)==(f|0))break f;o=o+1|0;if((o|0)>=(i|0)){ca=249;break}}}else ca=249;while(0);if((ca|0)==249){ca=0;c[ia>>2]=c[ia+136>>2];c[ia+4>>2]=c[ia+136+4>>2];c[ia+8>>2]=c[ia+136+8>>2];c[ia+12>>2]=c[ia+136+12>>2];do if((i|0)==(c[ia+36+8>>2]|0)){t=i|0?i<<1:1;if((i|0)>=(t|0))break;if(!t)k=0;else{c[6472]=(c[6472]|0)+1;i=ic((t*24|3)+16|0)|0;if(!i)k=0;else{c[(i+4+15&-16)+-4>>2]=i;k=i+4+15&-16}i=c[P>>2]|0}p=c[N>>2]|0;if((i|0)<=0){if(p)ca=258}else{o=0;do{ca=k+(o*24|0)|0;Z=p+(o*24|0)|0;c[ca>>2]=c[Z>>2];c[ca+4>>2]=c[Z+4>>2];c[ca+8>>2]=c[Z+8>>2];c[ca+12>>2]=c[Z+12>>2];c[ca+16>>2]=c[Z+16>>2];c[ca+20>>2]=c[Z+20>>2];o=o+1|0}while((o|0)!=(i|0));ca=258}if((ca|0)==258){ca=0;if(a[ia+36+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0);i=c[P>>2]|0}c[N>>2]=0}a[ia+36+16>>0]=1;c[N>>2]=k;c[ia+36+8>>2]=t}while(0);Z=c[N>>2]|0;Y=Z+(i*24|0)|0;c[Y>>2]=c[ia>>2];c[Y+4>>2]=c[ia+4>>2];c[Y+8>>2]=c[ia+8>>2];c[Y+12>>2]=c[ia+12>>2];c[Y+16>>2]=c[ia+16>>2];c[Z+(i*24|0)+20>>2]=f;i=(c[P>>2]|0)+1|0;c[P>>2]=i}y=y+1|0;if((y|0)>=(c[A>>2]|0)){o=i;break}}}D=D+1|0;i=c[aa>>2]|0}while((D|0)!=(J|0));a[ia+16>>0]=1;c[ia+12>>2]=0;c[ia+4>>2]=0;c[ia+8>>2]=0;Z=c[L>>2]|0;c[ia+20>>2]=c[i+(Z*36|0)+20>>2];c[ia+24>>2]=c[i+(Z*36|0)+24>>2];c[ia+28>>2]=c[i+(Z*36|0)+28>>2];c[ia+32>>2]=c[i+(Z*36|0)+32>>2];v=1.0/+C(+(q*q+r*r+s*s));x=q*v;w=r*v;v=s*v;if(+B(+v)>.7071067690849304){u=1.0/+C(+(v*v+w*w));r=0.0;s=w*u;u=-(v*u)}else{u=1.0/+C(+(x*x+w*w));r=-(w*u);s=0.0;u=x*u}if((o|0)<2)if((o|0)==1){k=1;o=0;p=0;i=0;do{z=c[N>>2]|0;do if((o|0)==(p|0)){y=p|0?p<<1:1;if((p|0)>=(y|0)){f=p;break}do if(!y)t=0;else{c[6472]=(c[6472]|0)+1;k=ic((y*24|3)+16|0)|0;if(!k){p=o;t=0;break}c[(k+4+15&-16)+-4>>2]=k;p=o;t=k+4+15&-16}while(0);if((p|0)<=0){if(i|0)ca=212}else{k=0;do{ca=t+(k*24|0)|0;Z=i+(k*24|0)|0;c[ca>>2]=c[Z>>2];c[ca+4>>2]=c[Z+4>>2];c[ca+8>>2]=c[Z+8>>2];c[ca+12>>2]=c[Z+12>>2];c[ca+16>>2]=c[Z+16>>2];c[ca+20>>2]=c[Z+20>>2];k=k+1|0}while((k|0)!=(p|0));ca=212}if((ca|0)==212){ca=0;c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}f=o;k=c[P>>2]|0;p=y;i=t}else f=o;while(0);Z=i+(f*24|0)|0;c[Z>>2]=c[z>>2];c[Z+4>>2]=c[z+4>>2];c[Z+8>>2]=c[z+8>>2];c[Z+12>>2]=c[z+12>>2];c[Z+16>>2]=c[z+16>>2];c[Z+20>>2]=c[z+20>>2];o=o+1|0}while((o|0)<(k|0));ca=264}else{i=0;ca=303}else{p=c[N>>2]|0;i=o;k=0;do{if(r*+g[p+(k*24|0)>>2]+u*+g[p+(k*24|0)+4>>2]+s*+g[p+(k*24|0)+8>>2]>2]+u*+g[p+4>>2]+s*+g[p+8>>2]){c[ia+136>>2]=c[p>>2];c[ia+136+4>>2]=c[p+4>>2];c[ia+136+8>>2]=c[p+8>>2];c[ia+136+12>>2]=c[p+12>>2];c[ia+136+16>>2]=c[p+16>>2];c[ia+136+20>>2]=c[p+20>>2];i=p+(k*24|0)|0;c[p>>2]=c[i>>2];c[p+4>>2]=c[i+4>>2];c[p+8>>2]=c[i+8>>2];c[p+12>>2]=c[i+12>>2];c[p+16>>2]=c[i+16>>2];c[p+20>>2]=c[i+20>>2];i=p+(k*24|0)|0;c[i>>2]=c[ia+136>>2];c[i+4>>2]=c[ia+136+4>>2];c[i+8>>2]=c[ia+136+8>>2];c[i+12>>2]=c[ia+136+12>>2];c[i+16>>2]=c[ia+136+16>>2];c[i+20>>2]=c[ia+136+20>>2];i=o}k=k+1|0}while((k|0)<(i|0));g[p+16>>2]=-1000000015047466219876688.0e6;if((i|0)>1){q=+g[p+4>>2];k=1;do{W=+g[p+(k*24|0)>>2]-+g[p>>2];ja=+g[p+(k*24|0)+4>>2]-q;ka=+g[p+(k*24|0)+8>>2]-+g[p+8>>2];g[p+(k*24|0)+16>>2]=((r*ja-u*W)*v+(x*(u*ka-s*ja)+w*(s*W-r*ka)))/+C(+(W*W+ja*ja+ka*ka));k=k+1|0}while((k|0)!=(i|0))}c[ia+136>>2]=c[p>>2];c[ia+136+4>>2]=c[p+4>>2];c[ia+136+8>>2]=c[p+8>>2];c[ia+136+12>>2]=c[p+12>>2];jf(ia+36|0,ia+136|0,1,i+-1|0);k=c[N>>2]|0;c[6472]=(c[6472]|0)+1;i=ic(43)|0;if(!i)p=0;else{c[(i+4+15&-16)+-4>>2]=i;p=i+4+15&-16}o=c[N>>2]|0;c[p>>2]=c[k>>2];c[p+4>>2]=c[k+4>>2];c[p+8>>2]=c[k+8>>2];c[p+12>>2]=c[k+12>>2];c[p+16>>2]=c[k+16>>2];c[p+20>>2]=c[k+20>>2];c[6472]=(c[6472]|0)+1;i=ic(67)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}c[i>>2]=c[p>>2];c[i+4>>2]=c[p+4>>2];c[i+8>>2]=c[p+8>>2];c[i+12>>2]=c[p+12>>2];c[i+16>>2]=c[p+16>>2];c[i+20>>2]=c[p+20>>2];if(p|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}k=i+24|0;c[k>>2]=c[o+24>>2];c[k+4>>2]=c[o+24+4>>2];c[k+8>>2]=c[o+24+8>>2];c[k+12>>2]=c[o+24+12>>2];c[k+16>>2]=c[o+24+16>>2];c[k+20>>2]=c[o+24+20>>2];k=c[P>>2]|0;if((k|0)==2){k=2;o=2}else{t=2;o=2;p=2;z=2;do{g:do if((t|0)>1){ca=c[N>>2]|0;y=ca+(z*24|0)|0;q=+g[y>>2];r=+g[ca+(z*24|0)+4>>2];s=+g[ca+(z*24|0)+8>>2];while(1){ca=t+-2|0;f=t+-1|0;W=+g[i+(ca*24|0)>>2];ja=W-+g[i+(f*24|0)>>2];I=+g[i+(ca*24|0)+4>>2];F=I-+g[i+(f*24|0)+4>>2];ka=+g[i+(ca*24|0)+8>>2];K=ka-+g[i+(f*24|0)+8>>2];if((ja*(I-r)-F*(W-q))*v+(x*(F*(ka-s)-K*(I-r))+w*(K*(W-q)-ja*(ka-s)))>0.0)break;if((f|0)>1){t=f;o=f}else{t=1;o=f;break g}}do if((t|0)==(p|0)){f=p<<1;if((p|0)>=(f|0)){t=p;f=p;break}c[6472]=(c[6472]|0)+1;k=ic((p*48|3)+16|0)|0;if(!k)p=0;else{c[(k+4+15&-16)+-4>>2]=k;p=k+4+15&-16}if((o|0)>0){k=0;do{ca=p+(k*24|0)|0;Z=i+(k*24|0)|0;c[ca>>2]=c[Z>>2];c[ca+4>>2]=c[Z+4>>2];c[ca+8>>2]=c[Z+8>>2];c[ca+12>>2]=c[Z+12>>2];c[ca+16>>2]=c[Z+16>>2];c[ca+20>>2]=c[Z+20>>2];k=k+1|0}while((k|0)!=(o|0))}c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);k=c[P>>2]|0;t=o;i=p}else f=p;while(0);t=i+(t*24|0)|0;c[t>>2]=c[y>>2];c[t+4>>2]=c[y+4>>2];c[t+8>>2]=c[y+8>>2];c[t+12>>2]=c[y+12>>2];c[t+16>>2]=c[y+16>>2];c[t+20>>2]=c[y+20>>2];o=o+1|0;t=o;p=f}while(0);z=z+1|0}while((z|0)!=(k|0))}ca=264}h:do if((ca|0)==264){ca=0;if((o|0)>0){p=c[ia+4>>2]|0;k=c[ia+8>>2]|0;y=a[ia+16>>0]|0;H=0;while(1){G=i+(H*24|0)+20|0;do if((p|0)==(k|0)){A=k|0?k<<1:1;if((k|0)>=(A|0)){D=y;p=k;A=k;break}do if(!A)f=0;else{c[6472]=(c[6472]|0)+1;p=ic((A<<2|3)+16|0)|0;if(!p){f=0;break}c[(p+4+15&-16)+-4>>2]=p;f=p+4+15&-16}while(0);t=c[ia+12>>2]|0;if((k|0)<=0){if(t)ca=293}else{p=0;do{c[f+(p<<2)>>2]=c[t+(p<<2)>>2];p=p+1|0}while((p|0)!=(k|0));ca=293}if((ca|0)==293){ca=0;if(y<<24>>24){c[6473]=(c[6473]|0)+1;nd(c[t+-4>>2]|0)}c[ia+12>>2]=0;k=c[ia+4>>2]|0}c[ia+12>>2]=f;c[ia+8>>2]=A;D=1;p=k}else{D=y;A=k}while(0);c[(c[ia+12>>2]|0)+(p<<2)>>2]=c[G>>2];p=p+1|0;c[ia+4>>2]=p;k=c[P>>2]|0;i:do if((k|0)>0){z=c[N>>2]|0;t=c[G>>2]|0;f=0;while(1){y=z+(f*24|0)+20|0;f=f+1|0;if((c[y>>2]|0)==(t|0))break;if((f|0)>=(k|0))break i}c[y>>2]=-1}while(0);H=H+1|0;if((H|0)>=(o|0))break;else{k=A;y=D}}a[ia+16>>0]=D}if((k|0)<=0){ca=303;break}y=c[N>>2]|0;z=c[_>>2]|0;A=c[aa>>2]|0;G=(J|0)>0;if((z|0)>0)H=0;else{ca=303;break}while(1){D=c[y+(H*24|0)+20>>2]|0;j:do if((D|0)!=-1){if(G)f=0;else{t=0;while(1){o=c[A+(t*36|0)+4>>2]|0;if((o|0)>0){p=c[A+(t*36|0)+12>>2]|0;f=0;do{if((c[p+(f<<2)>>2]|0)==(D|0)){k=1;break h}f=f+1|0}while((f|0)<(o|0))}t=t+1|0;if((t|0)>=(z|0))break j}}do{o=0;while(1){if((c[L+(o<<2)>>2]|0)==(f|0))break;o=o+1|0;if((o|0)>=(J|0)){ca=279;break}}do if((ca|0)==279){ca=0;o=c[A+(f*36|0)+4>>2]|0;if((o|0)<=0)break;p=c[A+(f*36|0)+12>>2]|0;t=0;do{if((c[p+(t<<2)>>2]|0)==(D|0)){k=1;break h}t=t+1|0}while((t|0)<(o|0))}while(0);f=f+1|0}while((f|0)<(z|0))}while(0);H=H+1|0;if((H|0)>=(k|0)){ca=303;break}}}while(0);if((ca|0)==303){ca=0;ah((c[d+52>>2]|0)+24|0,ia);k=0}if(i|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}i=c[ia+12>>2]|0;if(i|0){if(a[ia+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[ia+12>>2]=0}i=c[N>>2]|0;if(i|0){if(a[ia+36+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[N>>2]=0}if(k&(J|0)>0){y=0;ca=315}}else if((J|0)==1){y=0;ca=315}if((ca|0)==315)while(1){ca=0;t=c[L+(y<<2)>>2]|0;f=c[aa>>2]|0;a[ia+136+16>>0]=1;c[O>>2]=0;c[ia+136+4>>2]=0;c[ia+136+8>>2]=0;p=c[f+(t*36|0)+4>>2]|0;if((p|0)>0){c[6472]=(c[6472]|0)+1;o=ic((p<<2|3)+16|0)|0;do if(!o){k=0;i=0;ca=319}else{c[(o+4+15&-16)+-4>>2]=o;i=c[O>>2]|0;if(!i){k=o+4+15&-16;i=o+4+15&-16;ca=319;break}c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);a[ia+136+16>>0]=1;c[O>>2]=o+4+15&-16;c[ia+136+8>>2]=p;Nk(o+4+15&-16|0,0,p<<2|0)|0;k=o+4+15&-16}while(0);if((ca|0)==319){ca=0;a[ia+136+16>>0]=1;c[O>>2]=i;c[ia+136+8>>2]=p;Nk(i|0,0,p<<2|0)|0}c[ia+136+4>>2]=p;i=c[f+(t*36|0)+12>>2]|0;o=0;do{c[k+(o<<2)>>2]=c[i+(o<<2)>>2];o=o+1|0}while((o|0)!=(p|0));i=c[O>>2]|0}else{c[ia+136+4>>2]=p;i=0}c[ia+136+20>>2]=c[f+(t*36|0)+20>>2];c[ia+136+20+4>>2]=c[f+(t*36|0)+20+4>>2];c[ia+136+20+8>>2]=c[f+(t*36|0)+20+8>>2];c[ia+136+20+12>>2]=c[f+(t*36|0)+20+12>>2];ah((c[d+52>>2]|0)+24|0,ia+136|0);if(i|0){if(a[ia+136+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[O>>2]=0}y=y+1|0;if((y|0)>=(J|0))break;else ca=315}if(!((L|0)==0|(M|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[M+-4>>2]|0)}if(!m){Z=h;break}}}else{Z=0;n=0}Y=c[d+52>>2]|0;c[Y+64>>2]=0;c[Y+64+4>>2]=0;c[Y+64+8>>2]=0;c[Y+64+12>>2]=0;h=c[Y+28>>2]|0;if((h|0)>0){z=0;G=0;y=0;i=0;k=0;J=0;D=0;f=0;m=0;H=0;t=0;o=0;A=0;L=0;X=0;while(1){p=c[Y+36>>2]|0;V=c[p+(X*36|0)+4>>2]|0;if((V|0)>0){T=X&65535;U=X|-65536;Q=z;O=y;R=D;N=t;h=0;while(1){S=h+1|0;D=c[p+(X*36|0)+12>>2]|0;t=c[D+(h<<2)>>2]&65535;D=c[D+(((S|0)==(V|0)?0:S)<<2)>>2]&65535;P=D<<16>>16>t<<16>>16?t:D;d=D<<16>>16>t<<16>>16?D:t;p=D<<16>>16>t<<16>>16?t:D;t=D<<16>>16>t<<16>>16?D:t;D=N+-1|0;k:do if((((p&65535)<<16)+(t<<16>>16)&D)>>>0>>0?(da=c[k+((((p&65535)<<16)+(t<<16>>16)&D)<<2)>>2]|0,(da|0)!=-1):0){h=da;while(1){if(t<<16>>16==(b[i+(h<<2)>>1]|0)?p<<16>>16==(b[i+(h<<2)+2>>1]|0):0)break;h=c[m+(h<<2)>>2]|0;if((h|0)==-1){z=0;break k}}z=o+(h<<2)|0}else z=0;while(0);h=c[Y+16>>2]|0;v=+g[h+(p<<16>>16<<4)>>2]-+g[h+(t<<16>>16<<4)>>2];w=+g[h+(p<<16>>16<<4)+4>>2]-+g[h+(t<<16>>16<<4)+4>>2];u=+g[h+(p<<16>>16<<4)+8>>2]-+g[h+(t<<16>>16<<4)+8>>2];s=1.0/+C(+(v*v+w*w+u*u));h=c[Y+48>>2]|0;l:do if((h|0)>0){p=c[Y+56>>2]|0;t=0;while(1){q=+g[p+(t<<4)>>2];r=+g[p+(t<<4)+8>>2];do if(!(+B(+(q-v*s))>1.0e-06)){if(+B(+(+g[p+(t<<4)+4>>2]-w*s))>1.0e-06)break;if(!(+B(+(r-u*s))>1.0e-06))break l}while(0);do if(!(+B(+(v*s+q))>1.0e-06)){if(+B(+(w*s+ +g[p+(t<<4)+4>>2]))>1.0e-06)break;if(!(+B(+(u*s+r))>1.0e-06))break l}while(0);t=t+1|0;if((t|0)>=(h|0)){ca=356;break}}}else ca=356;while(0);if((ca|0)==356){ca=0;do if((h|0)==(c[Y+52>>2]|0)){y=h|0?h<<1:1;if((h|0)>=(y|0))break;if(!y)p=0;else{c[6472]=(c[6472]|0)+1;h=ic((y<<4|3)+16|0)|0;if(!h)p=0;else{c[(h+4+15&-16)+-4>>2]=h;p=h+4+15&-16}h=c[Y+48>>2]|0}if((h|0)>0){t=0;do{M=p+(t<<4)|0;la=(c[Y+56>>2]|0)+(t<<4)|0;c[M>>2]=c[la>>2];c[M+4>>2]=c[la+4>>2];c[M+8>>2]=c[la+8>>2];c[M+12>>2]=c[la+12>>2];t=t+1|0}while((t|0)!=(h|0))}h=c[Y+56>>2]|0;if(h|0){if(a[Y+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[Y+56>>2]=0}a[Y+60>>0]=1;c[Y+56>>2]=p;c[Y+52>>2]=y;h=c[Y+48>>2]|0}while(0);la=c[Y+56>>2]|0;g[la+(h<<4)>>2]=v*s;g[la+(h<<4)+4>>2]=w*s;g[la+(h<<4)+8>>2]=u*s;g[la+(h<<4)+12>>2]=0.0;c[Y+48>>2]=(c[Y+48>>2]|0)+1}m:do if(!z){h=((P&65535)<<16)+(d<<16>>16)&D;n:do if(h>>>0>>0){p=c[k+(h<<2)>>2]|0;if((p|0)==-1)break;while(1){if(d<<16>>16==(b[i+(p<<2)>>1]|0)?P<<16>>16==(b[i+(p<<2)+2>>1]|0):0)break;p=c[m+(p<<2)>>2]|0;if((p|0)==-1)break n}z=o+(p<<2)|0;b[z>>1]=U;b[z+2>>1]=U>>>16;z=Q;y=O;D=R;t=N;break m}while(0);do if((H|0)==(N|0)){t=H|0?H<<1:1;if((H|0)>=(t|0)){t=H;break}do if(!t)y=0;else{c[6472]=(c[6472]|0)+1;p=ic((t<<2|3)+16|0)|0;if(!p){y=0;break}c[(p+4+15&-16)+-4>>2]=p;y=p+4+15&-16}while(0);if((H|0)<=0){if(!o){o=y;break}}else{p=0;do{la=y+(p<<2)|0;M=o+(p<<2)|0;M=e[M>>1]|e[M+2>>1]<<16;b[la>>1]=M;b[la+2>>1]=M>>>16;p=p+1|0}while((p|0)!=(H|0))}c[6473]=(c[6473]|0)+1;nd(c[o+-4>>2]|0);o=y}else t=N;while(0);M=o+(H<<2)|0;b[M>>1]=U;b[M+2>>1]=U>>>16;M=H+1|0;do if((L|0)==(O|0)){y=L|0?L<<1:1;if((L|0)>=(y|0)){y=L;break}do if(!y)z=0;else{c[6472]=(c[6472]|0)+1;p=ic((y<<2|3)+16|0)|0;if(!p){z=0;break}c[(p+4+15&-16)+-4>>2]=p;z=p+4+15&-16}while(0);if((L|0)<=0){if(!i){i=z;break}}else{p=0;do{la=z+(p<<2)|0;O=i+(p<<2)|0;O=e[O>>1]|e[O+2>>1]<<16;b[la>>1]=O;b[la+2>>1]=O>>>16;p=p+1|0}while((p|0)!=(L|0))}c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);i=z}else y=O;while(0);la=i+(L<<2)|0;b[la>>1]=(P&65535)<<16|d&65535;b[la+2>>1]=((P&65535)<<16|d&65535)>>>16;L=L+1|0;if((N|0)<(t|0)){do if((J|0)<(t|0)){do if((A|0)<(t|0)){do if(!t)p=0;else{c[6472]=(c[6472]|0)+1;h=ic((t<<2|3)+16|0)|0;if(!h){p=0;break}c[(h+4+15&-16)+-4>>2]=h;p=h+4+15&-16}while(0);if((J|0)<=0){if(!k){G=p;k=p;A=t;break}}else{h=0;do{c[p+(h<<2)>>2]=c[k+(h<<2)>>2];h=h+1|0}while((h|0)!=(J|0))}c[6473]=(c[6473]|0)+1;nd(c[k+-4>>2]|0);G=p;k=p;A=t}while(0);D=t<<2;Nk(k+(J<<2)|0,0,D-(J<<2)|0)|0;if((R|0)<(t|0)){do if((f|0)<(t|0)){do if(!t)p=0;else{c[6472]=(c[6472]|0)+1;h=ic((D|3)+16|0)|0;if(!h){p=0;break}c[(h+4+15&-16)+-4>>2]=h;p=h+4+15&-16}while(0);if((R|0)<=0){if(!m){h=p;f=t;m=p;break}}else{h=0;do{c[p+(h<<2)>>2]=c[m+(h<<2)>>2];h=h+1|0}while((h|0)!=(R|0))}c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);h=p;f=t;m=p}else h=Q;while(0);Nk(m+(R<<2)|0,0,D-(R<<2)|0)|0;z=h}else z=Q;if((t|0)>0){Nk(G|0,-1,D|0)|0;Nk(z|0,-1,D|0)|0}if((J|0)<=0){p=t;D=t;h=A;break}p=t+-1|0;h=0;do{la=k+(((e[i+(h<<2)+2>>1]<<16)+(b[i+(h<<2)>>1]|0)&p)<<2)|0;c[m+(h<<2)>>2]=c[la>>2];c[la>>2]=h;h=h+1|0}while((h|0)!=(J|0));p=t;D=t;h=A}else{z=Q;p=J;D=R;h=A}while(0);A=h;h=((P&65535)<<16)+(d<<16>>16)&t+-1}else{z=Q;p=J;D=R}J=k+(h<<2)|0;c[m+(H<<2)>>2]=c[J>>2];c[J>>2]=H;J=p;H=M}else{b[z+2>>1]=T;z=Q;y=O;D=R;t=N}while(0);if((S|0)>=(V|0))break;p=c[Y+36>>2]|0;Q=z;O=y;R=D;N=t;h=S}h=c[Y+28>>2]|0;p=L}else p=L;X=X+1|0;if((X|0)>=(h|0))break;else L=p}if((h|0)>0){z=c[Y+36>>2]|0;A=c[Y+16>>2]|0;q=0.0;D=0;do{t=c[z+(D*36|0)+4>>2]|0;f=c[z+(D*36|0)+12>>2]|0;y=c[f>>2]|0;if((t+-2|0)>=1){r=+g[Y+64>>2];s=+g[Y+68>>2];u=+g[Y+72>>2];p=1;do{da=c[f+(p<<2)>>2]|0;p=p+1|0;la=c[f+(((p|0)%(t|0)|0)<<2)>>2]|0;v=+g[A+(y<<4)>>2];w=+g[A+(da<<4)>>2];E=+g[A+(y<<4)+4>>2];F=+g[A+(da<<4)+4>>2];K=+g[A+(y<<4)+8>>2];W=+g[A+(da<<4)+8>>2];x=+g[A+(la<<4)>>2];I=+g[A+(la<<4)+4>>2];ja=+g[A+(la<<4)+8>>2];ka=+C(+(((v-w)*(E-I)-(E-F)*(v-x))*((v-w)*(E-I)-(E-F)*(v-x))+(((E-F)*(K-ja)-(K-W)*(E-I))*((E-F)*(K-ja)-(K-W)*(E-I))+((K-W)*(v-x)-(v-w)*(K-ja))*((K-W)*(v-x)-(v-w)*(K-ja)))))*.5;r=r+(v+w+x)*.3333333432674408*ka;g[Y+64>>2]=r;s=(E+F+I)*.3333333432674408*ka+s;g[Y+68>>2]=s;u=ka*(K+W+ja)*.3333333432674408+u;g[Y+72>>2]=u;q=q+ka}while((p|0)!=(t+-1|0))}D=D+1|0}while((D|0)!=(h|0));p=Y+64|0;t=1;y=i;f=k}else ca=335}else{i=0;k=0;m=0;o=0;ca=335}if((ca|0)==335){q=0.0;p=Y+64|0;t=0;y=i;f=k}u=1.0/q;v=u*+g[p>>2];g[p>>2]=v;s=u*+g[Y+68>>2];g[Y+68>>2]=s;u=u*+g[Y+72>>2];g[Y+72>>2]=u;g[Y+96>>2]=3402823466385288598117041.0e14;if(t){i=c[Y+36>>2]|0;q=3402823466385288598117041.0e14;k=0;do{r=+B(+(+g[i+(k*36|0)+32>>2]+(+g[i+(k*36|0)+20>>2]*v+ +g[i+(k*36|0)+24>>2]*s+ +g[i+(k*36|0)+28>>2]*u)));if(r>2]=r;q=r}k=k+1|0}while((k|0)<(h|0))}else q=3402823466385288598117041.0e14;h=c[Y+8>>2]|0;if((h|0)>0){i=c[Y+16>>2]|0;x=-3402823466385288598117041.0e14;w=-3402823466385288598117041.0e14;v=-3402823466385288598117041.0e14;u=3402823466385288598117041.0e14;s=3402823466385288598117041.0e14;r=3402823466385288598117041.0e14;k=0;do{ka=+g[i+(k<<4)>>2];u=kax?ka:x;ka=+g[i+(k<<4)+4>>2];s=kaw?ka:w;ka=+g[i+(k<<4)+8>>2];r=kav?ka:v;k=k+1|0}while((k|0)!=(h|0))}else{x=-3402823466385288598117041.0e14;w=-3402823466385288598117041.0e14;v=-3402823466385288598117041.0e14;u=3402823466385288598117041.0e14;s=3402823466385288598117041.0e14;r=3402823466385288598117041.0e14}g[Y+100>>2]=u+x;g[Y+104>>2]=s+w;g[Y+108>>2]=r+v;g[Y+112>>2]=0.0;ka=x-u;ja=w-s;r=v-r;g[Y+116>>2]=ka;g[Y+120>>2]=ja;g[Y+124>>2]=r;g[Y+128>>2]=0.0;s=q/1.7320507764816284;p=ka>2]*.5-s)*.0009765625;g[Y+88>>2]=s;g[Y+84>>2]=s;g[Y+80>>2]=s;q=+g[Y+116+(p<<2)>>2]*.5;g[Y+80+(p<<2)>>2]=q;h=0;while(1){if(Tg(Y)|0){ca=441;break}q=q-r;g[Y+80+(p<<2)>>2]=q;h=h+1|0;if((h|0)>=1024){ca=440;break}}o:do if((ca|0)==440){g[Y+88>>2]=s;g[Y+84>>2]=s;g[Y+80>>2]=s}else if((ca|0)==441){r=(+g[Y+96>>2]-s)*.0009765625;i=c[Y+80+((1<<(1<>2]|0;k=0;while(1){h=c[Y+80+((1<>2]|0;g[Y+80+((1<>2]=r+(c[j>>2]=h,+g[j>>2]);q=r+ +g[Y+80+((1<<(1<>2];g[Y+80+((1<<(1<>2]=q;k=k+1|0;if(!(Tg(Y)|0))break;if((k|0)>=1024)break o;else i=(g[j>>2]=q,c[j>>2]|0)}c[Y+80+((1<>2]=h;c[Y+80+((1<<(1<>2]=i}while(0);if(y|0){c[6473]=(c[6473]|0)+1;nd(c[y+-4>>2]|0)}if(o|0){c[6473]=(c[6473]|0)+1;nd(c[o+-4>>2]|0)}if(m|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}if(f|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}if(!((n|0)==0|(Z|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[Z+-4>>2]|0)}o=c[_>>2]|0;p=c[aa>>2]|0;if((o|0)<=0){if(p|0)ca=462}else{k=0;do{n=p+(k*36|0)+4|0;m=p+(k*36|0)+12|0;i=c[m>>2]|0;h=p+(k*36|0)+16|0;if(i|0){if(a[h>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[m>>2]=0}a[h>>0]=1;c[m>>2]=0;c[n>>2]=0;c[p+(k*36|0)+8>>2]=0;k=k+1|0}while((k|0)!=(o|0));ca=462}if((ca|0)==462){if(a[ia+56+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[p+-4>>2]|0)}c[aa>>2]=0}if(!(($|0)==0|(ba|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[ba+-4>>2]|0)}h=c[ea>>2]|0;if(h|0){if(a[ia+76+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[ea>>2]=0}a[ia+76+56>>0]=1;c[ea>>2]=0;c[ia+76+44>>2]=0;c[ia+76+48>>2]=0;h=c[fa>>2]|0;if(h|0){if(a[ia+76+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[fa>>2]=0}a[ia+76+36>>0]=1;c[fa>>2]=0;c[ia+76+24>>2]=0;c[ia+76+28>>2]=0;h=c[ga>>2]|0;if(h|0){if(a[ia+76+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[ga>>2]=0}if(!ha){l=ia;return 1}c[6473]=(c[6473]|0)+1;nd(c[ha+-4>>2]|0);l=ia;return 1}function Yb(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0,j=0,k=0,m=0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0,G=0,H=0.0,I=0,J=0,K=0,L=0.0,M=0,N=0.0,O=0.0,P=0.0,Q=0.0,R=0.0,S=0.0,T=0,U=0,V=0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0.0,ka=0.0,la=0.0,ma=0,na=0.0,oa=0.0,pa=0.0,qa=0,ra=0.0,sa=0,ta=0,ua=0,va=0;va=l;l=l+688|0;j=c[b+20>>2]|0;if(!j){j=c[b+4>>2]|0;j=ub[c[(c[j>>2]|0)+12>>2]&63](j,c[d+8>>2]|0,c[e+8>>2]|0)|0;c[b+20>>2]=j;a[b+16>>0]=1}c[h+4>>2]=j;sa=c[d+4>>2]|0;ta=c[e+4>>2]|0;k=c[sa+4>>2]|0;i=c[ta+4>>2]|0;if((k|0)==10&(i|0)==10){S=+g[j+752>>2];qa=c[sa+52>>2]|0;s=+g[sa+28+(qa<<2)>>2];R=+g[sa+28+(((qa+2|0)%3|0)<<2)>>2];ua=c[ta+52>>2]|0;o=+g[ta+28+(ua<<2)>>2];Q=+g[ta+28+(((ua+2|0)%3|0)<<2)>>2];b=c[d+12>>2]|0;d=c[e+12>>2]|0;D=+g[b+(qa<<2)>>2];L=+g[b+16+(qa<<2)>>2];H=+g[b+32+(qa<<2)>>2];q=+g[d+(ua<<2)>>2];r=+g[d+16+(ua<<2)>>2];u=+g[d+32+(ua<<2)>>2];N=+g[d+48>>2];O=+g[d+52>>2];P=+g[d+56>>2];y=N-+g[b+48>>2];z=O-+g[b+52>>2];A=P-+g[b+56>>2];n=1.0-(D*q+L*r+H*u)*(D*q+L*r+H*u);if(!(n==0.0)){n=(D*y+L*z+H*A-(D*q+L*r+H*u)*(q*y+r*z+u*A))/n;if(!(n<-s)){if(n>s)n=s}else n=-s}else n=0.0;p=(D*q+L*r+H*u)*n-(q*y+r*z+u*A);if(p<-o){n=(D*q+L*r+H*u)*-o+(D*y+L*z+H*A);if(!(n<-s))if(n>s){n=s;o=-o}else o=-o;else{n=-s;o=-o}}else if(p>o){n=o*(D*q+L*r+H*u)+(D*y+L*z+H*A);if(!(n<-s)){if(n>s)n=s}else n=-s}else o=p;x=q*o;w=r*o;u=u*o;o=x+(y-D*n);r=w+(z-L*n);n=u+(A-H*n);s=+C(+(n*n+(o*o+r*r)));if(!(s-R-Q>S)){do if(n*n+(o*o+r*r)<=1.4210854715202004e-14)if(+B(+H)>.7071067690849304){n=1.0/+C(+(L*L+H*H));g[va+280>>2]=0.0;g[va+280+4>>2]=-(H*n);q=L*n;i=2;p=0.0;o=-(H*n);n=L*n;break}else{o=1.0/+C(+(D*D+L*L));g[va+280>>2]=-(L*o);g[va+280+4>>2]=D*o;q=0.0;i=2;p=-(L*o);o=D*o;n=0.0;break}else{g[va+280>>2]=o*-(1.0/s);g[va+280+4>>2]=r*-(1.0/s);g[va+280+8>>2]=n*-(1.0/s);q=0.0;i=3;p=o*-(1.0/s);o=r*-(1.0/s);n=n*-(1.0/s)}while(0);g[va+280+(i<<2)>>2]=q;g[va+264>>2]=Q*p+(x+N);g[va+264+4>>2]=Q*o+(w+O);g[va+264+8>>2]=Q*n+(u+P);g[va+264+12>>2]=0.0}if(s-R-Q>2]|0)+16>>2]&15](h,va+280|0,va+264|0,s-R-Q);j=c[h+4>>2]|0}if(!(c[j+748>>2]|0)){l=va;return}k=c[j+740>>2]|0;m=c[(c[h+8>>2]|0)+8>>2]|0;i=c[(c[h+12>>2]|0)+8>>2]|0;if((k|0)==(m|0)){Oe(j,k+4|0,i+4|0);l=va;return}else{Oe(j,i+4|0,m+4|0);l=va;return}}g[va+128+128>>2]=999999984306749440.0;K=c[b+8>>2]|0;v=c[b+12>>2]|0;c[va+48>>2]=9400;c[va+48+4>>2]=0;c[va+48+8>>2]=1065353216;c[va+48+12>>2]=0;g[va+48+16>>2]=0.0;c[va+48+20>>2]=v;c[va+48+24>>2]=K;c[va+48+28>>2]=sa;c[va+48+32>>2]=ta;c[va+48+36>>2]=k;c[va+48+40>>2]=i;g[va+48+44>>2]=+gb[c[(c[sa>>2]|0)+48>>2]&15](sa);g[va+48+48>>2]=+gb[c[(c[ta>>2]|0)+48>>2]&15](ta);a[va+48+52>>0]=0;c[va+48+60>>2]=-1;c[va+48+72>>2]=1;c[va+48+76>>2]=1;c[va+48+28>>2]=sa;c[va+48+32>>2]=ta;pa=+gb[c[(c[sa>>2]|0)+48>>2]&15](sa);ra=+gb[c[(c[ta>>2]|0)+48>>2]&15](ta);ra=pa+ra+ +g[(c[b+20>>2]|0)+752>>2];g[va+128+128>>2]=ra*ra;K=c[d+12>>2]|0;c[va+128>>2]=c[K>>2];c[va+128+4>>2]=c[K+4>>2];c[va+128+8>>2]=c[K+8>>2];c[va+128+12>>2]=c[K+12>>2];k=va+128+16|0;c[k>>2]=c[K+16>>2];c[k+4>>2]=c[K+16+4>>2];c[k+8>>2]=c[K+16+8>>2];c[k+12>>2]=c[K+16+12>>2];v=va+128+32|0;c[v>>2]=c[K+32>>2];c[v+4>>2]=c[K+32+4>>2];c[v+8>>2]=c[K+32+8>>2];c[v+12>>2]=c[K+32+12>>2];I=va+128+48|0;c[I>>2]=c[K+48>>2];c[I+4>>2]=c[K+48+4>>2];c[I+8>>2]=c[K+48+8>>2];c[I+12>>2]=c[K+48+12>>2];K=va+128+64|0;i=c[e+12>>2]|0;c[K>>2]=c[i>>2];c[K+4>>2]=c[i+4>>2];c[K+8>>2]=c[i+8>>2];c[K+12>>2]=c[i+12>>2];t=va+128+80|0;c[t>>2]=c[i+16>>2];c[t+4>>2]=c[i+16+4>>2];c[t+8>>2]=c[i+16+8>>2];c[t+12>>2]=c[i+16+12>>2];G=va+128+96|0;c[G>>2]=c[i+32>>2];c[G+4>>2]=c[i+32+4>>2];c[G+8>>2]=c[i+32+8>>2];c[G+12>>2]=c[i+32+12>>2];J=va+128+112|0;c[J>>2]=c[i+48>>2];c[J+4>>2]=c[i+48+4>>2];c[J+8>>2]=c[i+48+8>>2];c[J+12>>2]=c[i+48+12>>2];i=c[sa+4>>2]|0;if((i|0)<7?(m=c[ta+4>>2]|0,(m|0)<7):0){c[va+40>>2]=6272;if(!i){i=m;o=0.0}else{o=+gb[c[(c[sa>>2]|0)+48>>2]&15](sa);i=c[ta+4>>2]|0}if(!i)n=0.0;else n=+gb[c[(c[ta>>2]|0)+48>>2]&15](ta);c[va>>2]=6300;c[va+4>>2]=h;g[va+24>>2]=o;g[va+28>>2]=n;a[va+36>>0]=0;V=c[sa+52>>2]|0;a:do if(V|0){ma=c[ta+52>>2]|0;do if(!ma){if((c[ta+4>>2]|0)!=1)break a;G=va+624+16|0;a[G>>0]=1;v=va+624+12|0;c[v>>2]=0;t=va+624+4|0;c[t>>2]=0;m=va+624+8|0;c[m>>2]=0;i=c[e+12>>2]|0;pa=+g[ta+56>>2];ra=+g[ta+56+4>>2];o=+g[ta+56+8>>2];n=pa*+g[i>>2]+ra*+g[i+4>>2]+o*+g[i+8>>2]+ +g[i+48>>2];p=pa*+g[i+16>>2]+ra*+g[i+20>>2]+o*+g[i+24>>2]+ +g[i+52>>2];o=pa*+g[i+32>>2]+ra*+g[i+36>>2]+o*+g[i+40>>2]+ +g[i+56>>2];c[6472]=(c[6472]|0)+1;i=ic(35)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[v>>2]|0;if(!i)i=0;else{c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);i=c[t>>2]|0;c[v>>2]=0}a[G>>0]=1;c[v>>2]=j;c[m>>2]=1;g[j+(i<<4)>>2]=n;g[j+(i<<4)+4>>2]=p;g[j+(i<<4)+8>>2]=o;g[j+(i<<4)+12>>2]=0.0;i=(c[t>>2]|0)+1|0;c[t>>2]=i;ua=c[e+12>>2]|0;pa=+g[ta+56+16>>2];ra=+g[ta+56+20>>2];o=+g[ta+56+24>>2];n=pa*+g[ua>>2]+ra*+g[ua+4>>2]+o*+g[ua+8>>2]+ +g[ua+48>>2];p=pa*+g[ua+16>>2]+ra*+g[ua+20>>2]+o*+g[ua+24>>2]+ +g[ua+52>>2];o=pa*+g[ua+32>>2]+ra*+g[ua+36>>2]+o*+g[ua+40>>2]+ +g[ua+56>>2];if((i|0)==(c[m>>2]|0)?(M=i|0?i<<1:1,(i|0)<(M|0)):0){if(!M)j=0;else{c[6472]=(c[6472]|0)+1;i=ic((M<<4|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[t>>2]|0}if((i|0)>0){k=0;do{ua=j+(k<<4)|0;qa=(c[v>>2]|0)+(k<<4)|0;c[ua>>2]=c[qa>>2];c[ua+4>>2]=c[qa+4>>2];c[ua+8>>2]=c[qa+8>>2];c[ua+12>>2]=c[qa+12>>2];k=k+1|0}while((k|0)!=(i|0))}i=c[v>>2]|0;if(i|0){if(a[G>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[v>>2]=0}a[G>>0]=1;c[v>>2]=j;c[m>>2]=M;i=c[t>>2]|0}ua=c[v>>2]|0;g[ua+(i<<4)>>2]=n;g[ua+(i<<4)+4>>2]=p;g[ua+(i<<4)+8>>2]=o;g[ua+(i<<4)+12>>2]=0.0;i=(c[t>>2]|0)+1|0;c[t>>2]=i;ua=c[e+12>>2]|0;pa=+g[ta+56+32>>2];ra=+g[ta+56+36>>2];o=+g[ta+56+40>>2];n=pa*+g[ua>>2]+ra*+g[ua+4>>2]+o*+g[ua+8>>2]+ +g[ua+48>>2];p=pa*+g[ua+16>>2]+ra*+g[ua+20>>2]+o*+g[ua+24>>2]+ +g[ua+52>>2];o=pa*+g[ua+32>>2]+ra*+g[ua+36>>2]+o*+g[ua+40>>2]+ +g[ua+56>>2];if((i|0)==(c[m>>2]|0)?(T=i|0?i<<1:1,(i|0)<(T|0)):0){if(!T)j=0;else{c[6472]=(c[6472]|0)+1;i=ic((T<<4|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[t>>2]|0}if((i|0)>0){k=0;do{ua=j+(k<<4)|0;e=(c[v>>2]|0)+(k<<4)|0;c[ua>>2]=c[e>>2];c[ua+4>>2]=c[e+4>>2];c[ua+8>>2]=c[e+8>>2];c[ua+12>>2]=c[e+12>>2];k=k+1|0}while((k|0)!=(i|0))}i=c[v>>2]|0;if(i|0){if(a[G>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[v>>2]=0}a[G>>0]=1;c[v>>2]=j;c[m>>2]=T;i=c[t>>2]|0}ua=c[v>>2]|0;g[ua+(i<<4)>>2]=n;g[ua+(i<<4)+4>>2]=p;g[ua+(i<<4)+8>>2]=o;g[ua+(i<<4)+12>>2]=0.0;c[t>>2]=(c[t>>2]|0)+1;q=+g[(c[b+20>>2]|0)+752>>2];Bc(va+48|0,va+128|0,va+40|0,c[f+20>>2]|0,0);n=+g[va+48+4>>2];o=+g[va+48+8>>2];p=+g[va+48+12>>2];if(n*n+o*o+p*p>1.1920928955078125e-07){pa=1.0/(n*n+o*o+p*p);g[va+384>>2]=n*pa;g[va+384+4>>2]=o*pa;g[va+384+8>>2]=p*pa;g[va+384+12>>2]=0.0;pa=+g[va+48+56>>2];ra=+gb[c[(c[sa>>2]|0)+48>>2]&15](sa);ra=pa-ra-+gb[c[(c[ta>>2]|0)+48>>2]&15](ta);Cc(va+384|0,c[sa+52>>2]|0,c[d+12>>2]|0,va+624|0,ra-q,q,h)}do if(a[b+16>>0]|0?(U=c[h+4>>2]|0,c[U+748>>2]|0):0){j=c[U+740>>2]|0;k=c[(c[h+8>>2]|0)+8>>2]|0;i=c[(c[h+12>>2]|0)+8>>2]|0;if((j|0)==(k|0)){Oe(U,j+4|0,i+4|0);break}else{Oe(U,i+4|0,k+4|0);break}}while(0);i=c[v>>2]|0;if(i|0){if(a[G>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[v>>2]=0}}else{ra=+g[(c[b+20>>2]|0)+752>>2];b:do if(!(a[f+24>>0]|0)){Bc(va+48|0,va+128|0,va,c[f+20>>2]|0,0);n=+g[va+32>>2];if(n<0.0&(a[va+36>>0]|0)!=0){o=+g[va+8>>2];p=+g[va+12>>2];q=+g[va+16>>2];i=c[va+20>>2]|0;qa=111}}else{I=c[d+12>>2]|0;G=c[e+12>>2]|0;c[6455]=(c[6455]|0)+1;ha=+g[V+64>>2];ia=+g[V+68>>2];s=+g[I+4>>2];ja=+g[V+72>>2];u=+g[I+8>>2];w=+g[I+16>>2];n=+g[I+20>>2];o=+g[I+24>>2];p=+g[I+32>>2];q=+g[I+36>>2];r=+g[I+40>>2];ka=+g[ma+64>>2];la=+g[ma+68>>2];oa=+g[ma+72>>2];na=ha*+g[I>>2]+ia*s+ja*u+ +g[I+48>>2]-(ka*+g[G>>2]+la*+g[G+4>>2]+oa*+g[G+8>>2]+ +g[G+48>>2]);pa=ha*w+ia*n+ja*o+ +g[I+52>>2]-(ka*+g[G+16>>2]+la*+g[G+20>>2]+oa*+g[G+24>>2]+ +g[G+52>>2]);oa=ha*p+ia*q+ja*r+ +g[I+56>>2]-(ka*+g[G+32>>2]+la*+g[G+36>>2]+oa*+g[G+40>>2]+ +g[G+56>>2]);k=c[V+28>>2]|0;c:do if((k|0)>0){A=o;D=p;z=q;H=0.0;L=3402823466385288598117041.0e14;j=0;o=0.0;p=0.0;q=0.0;while(1){f=c[V+36>>2]|0;ja=+g[f+(j*36|0)+20>>2];ka=+g[f+(j*36|0)+24>>2];la=+g[f+(j*36|0)+28>>2];u=ja*+g[I>>2]+ka*s+la*u;s=ja*w+ka*n+la*A;n=ja*D+ka*z+la*r;g[va+296>>2]=u;g[va+296+4>>2]=s;g[va+296+8>>2]=n;g[va+296+12>>2]=0.0;if(na*u+pa*s+oa*n<0.0){g[va+296>>2]=-u;g[va+296+4>>2]=-s;g[va+296+8>>2]=-n;x=-u;y=-s;n=-n}else{x=u;y=s}c[6453]=(c[6453]|0)+1;if(ri(I,G,na,pa,oa,x,y,n,V,ma,L)|0){c[6454]=(c[6454]|0)+1;Ug(V,I,va+296|0,va+624|0,va+384|0,va+360|0,va+344|0);Ug(ma,G,va+296|0,va+380|0,va+376|0,va+328|0,va+312|0);r=+g[va+384>>2];s=+g[va+380>>2];do if(r>2];w=+g[va+624>>2];if(u=(k|0)){n=x;break c}n=+g[I+20>>2];A=+g[I+24>>2];D=+g[I+32>>2];z=+g[I+36>>2];r=+g[I+40>>2];s=+g[I+4>>2];u=+g[I+8>>2];w=+g[I+16>>2];H=y;L=x;j=i}break b}else{n=3402823466385288598117041.0e14;o=0.0;p=0.0;q=0.0}while(0);k=c[ma+28>>2]|0;d:do if((k|0)>0){A=0.0;j=0;while(1){f=c[ma+36>>2]|0;ka=+g[f+(j*36|0)+20>>2];la=+g[f+(j*36|0)+24>>2];u=+g[f+(j*36|0)+28>>2];r=ka*+g[G>>2]+la*+g[G+4>>2]+u*+g[G+8>>2];s=ka*+g[G+16>>2]+la*+g[G+20>>2]+u*+g[G+24>>2];u=ka*+g[G+32>>2]+la*+g[G+36>>2]+u*+g[G+40>>2];g[va+296>>2]=r;g[va+296+4>>2]=s;g[va+296+8>>2]=u;g[va+296+12>>2]=0.0;if(na*r+pa*s+oa*u<0.0){g[va+296>>2]=-r;g[va+296+4>>2]=-s;g[va+296+8>>2]=-u;r=-r;s=-s;u=-u}c[6453]=(c[6453]|0)+1;if(ri(I,G,na,pa,oa,r,s,u,V,ma,n)|0){c[6454]=(c[6454]|0)+1;Ug(V,I,va+296|0,va+624|0,va+384|0,va+360|0,va+344|0);Ug(ma,G,va+296|0,va+380|0,va+376|0,va+328|0,va+312|0);w=+g[va+384>>2];x=+g[va+380>>2];do if(w>2];z=+g[va+624>>2];if(y=(k|0))break d;else A=w}break b}while(0);i=c[V+48>>2]|0;e:do if((i|0)>0){k=c[ma+48>>2]|0;u=0.0;v=0;j=-1;m=-1;y=0.0;z=0.0;A=0.0;D=0.0;S=0.0;W=0.0;Y=0.0;r=0.0;s=0.0;R=0.0;Q=0.0;P=0.0;L=0.0;N=0.0;O=0.0;w=0.0;x=0.0;H=0.0;f:while(1){f=c[V+56>>2]|0;ha=+g[f+(v<<4)>>2];ia=+g[f+(v<<4)+4>>2];ja=+g[f+(v<<4)+8>>2];la=ha*+g[I>>2]+ia*+g[I+4>>2]+ja*+g[I+8>>2];ka=ha*+g[I+16>>2]+ia*+g[I+20>>2]+ja*+g[I+24>>2];ja=ha*+g[I+32>>2]+ia*+g[I+36>>2]+ja*+g[I+40>>2];if((k|0)>0){X=u;t=0;ia=o;ha=p;ga=q;_=y;aa=z;ca=A;while(1){f=c[ma+56>>2]|0;ea=+g[f+(t<<4)>>2];fa=+g[f+(t<<4)+4>>2];ba=+g[f+(t<<4)+8>>2];Z=ea*+g[G>>2]+fa*+g[G+4>>2]+ba*+g[G+8>>2];$=ea*+g[G+16>>2]+fa*+g[G+20>>2]+ba*+g[G+24>>2];ba=ea*+g[G+32>>2]+fa*+g[G+36>>2]+ba*+g[G+40>>2];g[va+296>>2]=ka*ba-ja*$;g[va+296+4>>2]=ja*Z-la*ba;g[va+296+8>>2]=la*$-ka*Z;g[va+296+12>>2]=0.0;do if(!(+B(+(ka*ba-ja*$))>1.0e-06)){if(+B(+(ja*Z-la*ba))>1.0e-06){qa=75;break}if(!(+B(+(la*$-ka*Z))>1.0e-06)){o=ia;p=ha;q=ga;da=D;ea=S;fa=W}else qa=75}else qa=75;while(0);do if((qa|0)==75){qa=0;q=1.0/+C(+((ka*ba-ja*$)*(ka*ba-ja*$)+(ja*Z-la*ba)*(ja*Z-la*ba)+(la*$-ka*Z)*(la*$-ka*Z)));o=(ka*ba-ja*$)*q;g[va+296>>2]=o;p=(ja*Z-la*ba)*q;g[va+296+4>>2]=p;q=(la*$-ka*Z)*q;g[va+296+8>>2]=q;if(o*na+p*pa+oa*q<0.0){g[va+296>>2]=-o;g[va+296+4>>2]=-p;g[va+296+8>>2]=-q;o=-o;p=-p;q=-q}c[6453]=(c[6453]|0)+1;if(!(ri(I,G,na,pa,oa,o,p,q,V,ma,n)|0)){o=ia;p=ha;q=ga;da=D;ea=S;fa=W;break}c[6454]=(c[6454]|0)+1;Ug(V,I,va+296|0,va+624|0,va+384|0,va+360|0,va+344|0);Ug(ma,G,va+296|0,va+380|0,va+376|0,va+328|0,va+312|0);u=+g[va+384>>2];y=+g[va+380>>2];do if(!(u>2];A=+g[va+624>>2];if(z>2];z=+g[va+344+4>>2];A=+g[va+344+8>>2];D=+g[va+328>>2];S=+g[va+328+4>>2];W=+g[va+328+8>>2];break}else{u=z-A;i=1;y=+g[va+360>>2];z=+g[va+360+4>>2];A=+g[va+360+8>>2];D=+g[va+312>>2];S=+g[va+312+4>>2];W=+g[va+312+8>>2];break}}else{u=X;i=0;y=_;z=aa;A=ca}while(0);if(!i)break f;if(!(u>2]|0;if((t|0)>=(k|0))break;else{ia=o;ha=p;ga=q;D=da;S=ea;W=fa}}i=c[V+48>>2]|0;u=X;y=_;z=aa;A=ca;D=da;S=ea;W=fa;X=Y}else X=Y;v=v+1|0;if((v|0)>=(i|0)){i=m;n=X;break e}else Y=X}break b}else{j=-1;i=-1;n=0.0;r=0.0;s=0.0;R=0.0;Q=0.0;P=0.0;L=0.0;N=0.0;O=0.0;w=0.0;x=0.0;H=0.0}while(0);if((i|j|0)>-1){z=R-n;D=Q-r;A=P-s;r=w*L+x*N+H*O;s=z*L+D*N+A*O;n=z*w+D*x+A*H;do if(1.0-r*r==0.0)u=0.0;else{if((s-n*r)/(1.0-r*r)<-1000000015047466219876688.0e6){u=-1000000015047466219876688.0e6;break}if(!((s-n*r)/(1.0-r*r)>1000000015047466219876688.0e6)){u=(s-n*r)/(1.0-r*r);break}u=1000000015047466219876688.0e6}while(0);n=r*u-n;do if(n<-1000000015047466219876688.0e6){if(s-r*1000000015047466219876688.0e6<-1000000015047466219876688.0e6){r=-1000000015047466219876688.0e6;n=-1000000015047466219876688.0e6;break}if(!(s-r*1000000015047466219876688.0e6>1000000015047466219876688.0e6)){r=s-r*1000000015047466219876688.0e6;n=-1000000015047466219876688.0e6;break}r=1000000015047466219876688.0e6;n=-1000000015047466219876688.0e6}else{if(!(n>1000000015047466219876688.0e6)){r=u;break}if(s+r*1000000015047466219876688.0e6<-1000000015047466219876688.0e6){r=-1000000015047466219876688.0e6;n=1000000015047466219876688.0e6;break}if(!(s+r*1000000015047466219876688.0e6>1000000015047466219876688.0e6)){r=s+r*1000000015047466219876688.0e6;n=1000000015047466219876688.0e6;break}r=1000000015047466219876688.0e6;n=1000000015047466219876688.0e6}while(0);y=w*n;x=x*n;w=H*n;u=y+(z-L*r);s=x+(D-N*r);n=w+(A-O*r);g[va+624>>2]=u;g[va+624+4>>2]=s;g[va+624+8>>2]=n;g[va+624+12>>2]=0.0;if(u*u+s*s+n*n>1.1920928955078125e-07){r=+C(+(u*u+s*s+n*n));g[va+624>>2]=u*(1.0/r);g[va+624+4>>2]=1.0/r*s;g[va+624+8>>2]=1.0/r*n;if(u*(1.0/r)*na+1.0/r*s*pa+1.0/r*n*oa<0.0){g[va+624>>2]=-(u*(1.0/r));g[va+624+4>>2]=-(1.0/r*s);g[va+624+8>>2]=-(1.0/r*n)}g[va+384>>2]=R+y;g[va+384+4>>2]=Q+x;g[va+384+8>>2]=P+w;g[va+384+12>>2]=0.0;Lb[c[(c[h>>2]|0)+16>>2]&15](h,va+624|0,va+384|0,-r)}}if(na*o+pa*p+oa*q<0.0){n=-1000000015047466219876688.0e6;o=-o;p=-p;q=-q;i=0;qa=111}else{n=-1000000015047466219876688.0e6;i=0;qa=111}}while(0);if((qa|0)==111){V=c[sa+52>>2]|0;f=c[ta+52>>2]|0;U=c[d+12>>2]|0;T=c[e+12>>2]|0;O=n-ra;H=1.0/+C(+(o*o+p*p+q*q));N=o*H;L=p*H;H=q*H;g[va+624>>2]=N;g[va+624+4>>2]=L;g[va+624+8>>2]=H;c[va+624+12>>2]=i;j=c[f+28>>2]|0;t=c[f+36>>2]|0;if((j|0)>0){n=+g[T>>2];o=+g[T+4>>2];p=+g[T+8>>2];q=+g[T+16>>2];r=+g[T+20>>2];s=+g[T+24>>2];u=+g[T+32>>2];w=+g[T+36>>2];x=+g[T+40>>2];i=-1;D=-3402823466385288598117041.0e14;m=0;while(1){y=+g[t+(m*36|0)+20>>2];z=+g[t+(m*36|0)+24>>2];A=+g[t+(m*36|0)+28>>2];k=(y*n+z*o+A*p)*N+(y*q+z*r+A*s)*L+(y*u+z*w+A*x)*H>D;i=k?m:i;m=m+1|0;if((m|0)==(j|0)){J=i;break}else D=k?(y*n+z*o+A*p)*N+(y*q+z*r+A*s)*L+(y*u+z*w+A*x)*H:D}}else J=-1;a[va+384+16>>0]=1;M=va+384+12|0;c[M>>2]=0;K=va+384+4|0;c[K>>2]=0;c[va+384+8>>2]=0;I=c[t+(J*36|0)+4>>2]|0;g:do if((I|0)>0){G=t+(J*36|0)+12|0;i=0;k=0;j=0;while(1){d=c[(c[G>>2]|0)+(j<<2)>>2]|0;e=c[f+16>>2]|0;oa=+g[e+(d<<4)>>2];pa=+g[e+(d<<4)+4>>2];o=+g[e+(d<<4)+8>>2];n=oa*+g[T>>2]+pa*+g[T+4>>2]+o*+g[T+8>>2]+ +g[T+48>>2];p=oa*+g[T+16>>2]+pa*+g[T+20>>2]+o*+g[T+24>>2]+ +g[T+52>>2];o=oa*+g[T+32>>2]+pa*+g[T+36>>2]+o*+g[T+40>>2]+ +g[T+56>>2];if((i|0)==(k|0)){v=k|0?k<<1:1;if((k|0)<(v|0)){if(!v){i=k;k=0}else{c[6472]=(c[6472]|0)+1;i=ic((v<<4|3)+16|0)|0;if(!i)k=0;else{c[(i+4+15&-16)+-4>>2]=i;k=i+4+15&-16}i=c[K>>2]|0}t=c[M>>2]|0;if((i|0)<=0){if(t)qa=126}else{m=0;do{d=k+(m<<4)|0;e=t+(m<<4)|0;c[d>>2]=c[e>>2];c[d+4>>2]=c[e+4>>2];c[d+8>>2]=c[e+8>>2];c[d+12>>2]=c[e+12>>2];m=m+1|0}while((m|0)!=(i|0));qa=126}if((qa|0)==126){qa=0;if(a[va+384+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[t+-4>>2]|0);i=c[K>>2]|0}c[M>>2]=0}a[va+384+16>>0]=1;c[M>>2]=k;c[va+384+8>>2]=v}else i=k}d=c[M>>2]|0;g[d+(i<<4)>>2]=n;g[d+(i<<4)+4>>2]=p;g[d+(i<<4)+8>>2]=o;g[d+(i<<4)+12>>2]=0.0;i=(c[K>>2]|0)+1|0;c[K>>2]=i;j=j+1|0;if((j|0)>=(I|0))break g;k=c[va+384+8>>2]|0}}while(0);if((J|0)>-1)Cc(va+624|0,V,U,va+384|0,O,ra,h);i=c[M>>2]|0;if(i|0){if(a[va+384+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[M>>2]=0}}if(a[b+16>>0]|0?(ua=c[h+4>>2]|0,c[ua+748>>2]|0):0){j=c[ua+740>>2]|0;k=c[(c[h+8>>2]|0)+8>>2]|0;i=c[(c[h+12>>2]|0)+8>>2]|0;if((j|0)==(k|0)){Oe(ua,j+4|0,i+4|0);break}else{Oe(ua,i+4|0,k+4|0);break}}}while(0);l=va;return}while(0)}Bc(va+48|0,va+128|0,h,c[f+20>>2]|0,0);if((c[b+28>>2]|0?(c[(c[h+4>>2]|0)+748>>2]|0)<(c[b+32>>2]|0):0)?(O=+g[va+48+4>>2],P=+g[va+48+8>>2],Q=+g[va+48+12>>2],O*O+P*P+Q*Q>1.1920928955078125e-07):0){D=1.0/(O*O+P*P+Q*Q);if(+B(+(Q*D))>.7071067690849304){N=1.0/+C(+(Q*D*Q*D+P*D*P*D));H=0.0;L=P*D*N;N=-(Q*D*N)}else{N=1.0/+C(+(O*D*O*D+P*D*P*D));H=-(P*D*N);L=0.0;N=O*D*N}A=+gb[c[(c[sa>>2]|0)+16>>2]&15](sa);z=+gb[c[(c[ta>>2]|0)+16>>2]&15](ta);n=.019999999552965164/(A>2]=c[va+128>>2];c[va+624+4>>2]=c[va+128+4>>2];c[va+624+8>>2]=c[va+128+8>>2];c[va+624+12>>2]=c[va+128+12>>2];c[va+624+16>>2]=c[k>>2];c[va+624+16+4>>2]=c[k+4>>2];c[va+624+16+8>>2]=c[k+8>>2];c[va+624+16+12>>2]=c[k+12>>2];c[va+624+32>>2]=c[v>>2];c[va+624+32+4>>2]=c[v+4>>2];c[va+624+32+8>>2]=c[v+8>>2];c[va+624+32+12>>2]=c[v+12>>2];c[va+624+48>>2]=c[I>>2];c[va+624+48+4>>2]=c[I+4>>2];c[va+624+48+8>>2]=c[I+8>>2];c[va+624+48+12>>2]=c[I+12>>2]}else{c[va+624>>2]=c[K>>2];c[va+624+4>>2]=c[K+4>>2];c[va+624+8>>2]=c[K+8>>2];c[va+624+12>>2]=c[K+12>>2];c[va+624+16>>2]=c[t>>2];c[va+624+16+4>>2]=c[t+4>>2];c[va+624+16+8>>2]=c[t+8>>2];c[va+624+16+12>>2]=c[t+12>>2];c[va+624+32>>2]=c[G>>2];c[va+624+32+4>>2]=c[G+4>>2];c[va+624+32+8>>2]=c[G+8>>2];c[va+624+32+12>>2]=c[G+12>>2];c[va+624+48>>2]=c[J>>2];c[va+624+48+4>>2]=c[J+4>>2];c[va+624+48+8>>2]=c[J+8>>2];c[va+624+48+12>>2]=c[J+12>>2]}i=c[b+28>>2]|0;if((i|0)>0){y=H*H+N*N+L*L;x=(n>.39269909262657166?.39269909262657166:n)*.5;j=0;do{if(y>1.1920928955078125e-07){s=+F(+x)/+C(+y);u=H*s;w=N*s;s=L*s;r=+E(+x);n=+(j|0)*(6.2831854820251465/+(i|0))*.5;o=+F(+n)/+C(+(Q*D*Q*D+(O*D*O*D+P*D*P*D)));p=O*D*o;q=P*D*o;o=Q*D*o;n=+E(+n);if(A>2]|0;ba=+g[ua>>2];ca=+g[ua+16>>2];da=+g[ua+32>>2];ea=+g[ua+4>>2];fa=+g[ua+20>>2];ga=+g[ua+36>>2];ha=+g[ua+8>>2];ka=+g[ua+24>>2];ra=+g[ua+40>>2];g[va+128>>2]=(1.0-(oa*pa+aa*ia))*ba+(la*pa-ja*ia)*ca+(la*ia+ja*pa)*da;g[va+128+4>>2]=(1.0-(oa*pa+aa*ia))*ea+(la*pa-ja*ia)*fa+(la*ia+ja*pa)*ga;g[va+128+8>>2]=(1.0-(oa*pa+aa*ia))*ha+(la*pa-ja*ia)*ka+(la*ia+ja*pa)*ra;g[va+128+12>>2]=0.0;g[va+128+16>>2]=(la*pa+ja*ia)*ba+(1.0-(la*na+aa*ia))*ca+(oa*ia-ja*na)*da;g[va+128+20>>2]=(la*pa+ja*ia)*ea+(1.0-(la*na+aa*ia))*fa+(oa*ia-ja*na)*ga;g[va+128+24>>2]=(la*pa+ja*ia)*ha+(1.0-(la*na+aa*ia))*ka+(oa*ia-ja*na)*ra;g[va+128+28>>2]=0.0;g[va+128+32>>2]=(la*ia-ja*pa)*ba+(oa*ia+ja*na)*ca+(1.0-(la*na+oa*pa))*da;g[va+128+36>>2]=(la*ia-ja*pa)*ea+(oa*ia+ja*na)*fa+(1.0-(la*na+oa*pa))*ga;g[va+128+40>>2]=(la*ia-ja*pa)*ha+(oa*ia+ja*na)*ka+(1.0-(la*na+oa*pa))*ra;g[va+128+44>>2]=0.0;ua=c[e+12>>2]|0;c[K>>2]=c[ua>>2];c[K+4>>2]=c[ua+4>>2];c[K+8>>2]=c[ua+8>>2];c[K+12>>2]=c[ua+12>>2];c[t>>2]=c[ua+16>>2];c[t+4>>2]=c[ua+16+4>>2];c[t+8>>2]=c[ua+16+8>>2];c[t+12>>2]=c[ua+16+12>>2];c[G>>2]=c[ua+32>>2];c[G+4>>2]=c[ua+32+4>>2];c[G+8>>2]=c[ua+32+8>>2];c[G+12>>2]=c[ua+32+12>>2];c[J>>2]=c[ua+48>>2];c[J+4>>2]=c[ua+48+4>>2];c[J+8>>2]=c[ua+48+8>>2];c[J+12>>2]=c[ua+48+12>>2]}else{ua=c[d+12>>2]|0;c[va+128>>2]=c[ua>>2];c[va+128+4>>2]=c[ua+4>>2];c[va+128+8>>2]=c[ua+8>>2];c[va+128+12>>2]=c[ua+12>>2];c[k>>2]=c[ua+16>>2];c[k+4>>2]=c[ua+16+4>>2];c[k+8>>2]=c[ua+16+8>>2];c[k+12>>2]=c[ua+16+12>>2];c[v>>2]=c[ua+32>>2];c[v+4>>2]=c[ua+32+4>>2];c[v+8>>2]=c[ua+32+8>>2];c[v+12>>2]=c[ua+32+12>>2];c[I>>2]=c[ua+48>>2];c[I+4>>2]=c[ua+48+4>>2];c[I+8>>2]=c[ua+48+8>>2];c[I+12>>2]=c[ua+48+12>>2];la=o*(u*-o+(w*n+r*-q)-s*-p)+(p*(r*n-u*-p-w*-q-s*-o)+n*(s*-q+(u*n+r*-p)-w*-o))-q*(w*-p+(s*n+r*-o)-u*-q);oa=p*(w*-p+(s*n+r*-o)-u*-q)+(n*(u*-o+(w*n+r*-q)-s*-p)+q*(r*n-u*-p-w*-q-s*-o))-o*(s*-q+(u*n+r*-p)-w*-o);aa=q*(s*-q+(u*n+r*-p)-w*-o)+(o*(r*n-u*-p-w*-q-s*-o)+n*(w*-p+(s*n+r*-o)-u*-q))-p*(u*-o+(w*n+r*-q)-s*-p);ja=n*(r*n-u*-p-w*-q-s*-o)-p*(s*-q+(u*n+r*-p)-w*-o)-q*(u*-o+(w*n+r*-q)-s*-p)-o*(w*-p+(s*n+r*-o)-u*-q);na=la*(2.0/(ja*ja+(aa*aa+(la*la+oa*oa))));pa=oa*(2.0/(ja*ja+(aa*aa+(la*la+oa*oa))));ia=aa*(2.0/(ja*ja+(aa*aa+(la*la+oa*oa))));ua=c[e+12>>2]|0;ba=+g[ua>>2];ca=+g[ua+16>>2];da=+g[ua+32>>2];ea=+g[ua+4>>2];fa=+g[ua+20>>2];ga=+g[ua+36>>2];ha=+g[ua+8>>2];ka=+g[ua+24>>2];ra=+g[ua+40>>2];g[va+128+64>>2]=(1.0-(oa*pa+aa*ia))*ba+(la*pa-ja*ia)*ca+(la*ia+ja*pa)*da;g[va+128+68>>2]=(1.0-(oa*pa+aa*ia))*ea+(la*pa-ja*ia)*fa+(la*ia+ja*pa)*ga;g[va+128+72>>2]=(1.0-(oa*pa+aa*ia))*ha+(la*pa-ja*ia)*ka+(la*ia+ja*pa)*ra;g[va+128+76>>2]=0.0;g[va+128+80>>2]=(la*pa+ja*ia)*ba+(1.0-(la*na+aa*ia))*ca+(oa*ia-ja*na)*da;g[va+128+84>>2]=(la*pa+ja*ia)*ea+(1.0-(la*na+aa*ia))*fa+(oa*ia-ja*na)*ga;g[va+128+88>>2]=(la*pa+ja*ia)*ha+(1.0-(la*na+aa*ia))*ka+(oa*ia-ja*na)*ra;g[va+128+92>>2]=0.0;g[va+128+96>>2]=(la*ia-ja*pa)*ba+(oa*ia+ja*na)*ca+(1.0-(la*na+oa*pa))*da;g[va+128+100>>2]=(la*ia-ja*pa)*ea+(oa*ia+ja*na)*fa+(1.0-(la*na+oa*pa))*ga;g[va+128+104>>2]=(la*ia-ja*pa)*ha+(oa*ia+ja*na)*ka+(1.0-(la*na+oa*pa))*ra;g[va+128+108>>2]=0.0}i=c[f+20>>2]|0;c[va+384>>2]=6328;c[va+384+32>>2]=h;c[va+384+36>>2]=c[va+128>>2];c[va+384+36+4>>2]=c[va+128+4>>2];c[va+384+36+8>>2]=c[va+128+8>>2];c[va+384+36+12>>2]=c[va+128+12>>2];c[va+384+52>>2]=c[k>>2];c[va+384+52+4>>2]=c[k+4>>2];c[va+384+52+8>>2]=c[k+8>>2];c[va+384+52+12>>2]=c[k+12>>2];c[va+384+68>>2]=c[v>>2];c[va+384+68+4>>2]=c[v+4>>2];c[va+384+68+8>>2]=c[v+8>>2];c[va+384+68+12>>2]=c[v+12>>2];c[va+384+84>>2]=c[I>>2];c[va+384+84+4>>2]=c[I+4>>2];c[va+384+84+8>>2]=c[I+8>>2];c[va+384+84+12>>2]=c[I+12>>2];c[va+384+100>>2]=c[K>>2];c[va+384+100+4>>2]=c[K+4>>2];c[va+384+100+8>>2]=c[K+8>>2];c[va+384+100+12>>2]=c[K+12>>2];c[va+384+116>>2]=c[t>>2];c[va+384+116+4>>2]=c[t+4>>2];c[va+384+116+8>>2]=c[t+8>>2];c[va+384+116+12>>2]=c[t+12>>2];c[va+384+132>>2]=c[G>>2];c[va+384+132+4>>2]=c[G+4>>2];c[va+384+132+8>>2]=c[G+8>>2];c[va+384+132+12>>2]=c[G+12>>2];c[va+384+148>>2]=c[J>>2];c[va+384+148+4>>2]=c[J+4>>2];c[va+384+148+8>>2]=c[J+8>>2];c[va+384+148+12>>2]=c[J+12>>2];c[va+384+164>>2]=c[va+624>>2];c[va+384+164+4>>2]=c[va+624+4>>2];c[va+384+164+8>>2]=c[va+624+8>>2];c[va+384+164+12>>2]=c[va+624+12>>2];c[va+384+180>>2]=c[va+624+16>>2];c[va+384+180+4>>2]=c[va+624+16+4>>2];c[va+384+180+8>>2]=c[va+624+16+8>>2];c[va+384+180+12>>2]=c[va+624+16+12>>2];c[va+384+196>>2]=c[va+624+32>>2];c[va+384+196+4>>2]=c[va+624+32+4>>2];c[va+384+196+8>>2]=c[va+624+32+8>>2];c[va+384+196+12>>2]=c[va+624+32+12>>2];c[va+384+212>>2]=c[va+624+48>>2];c[va+384+212+4>>2]=c[va+624+48+4>>2];c[va+384+212+8>>2]=c[va+624+48+8>>2];c[va+384+212+12>>2]=c[va+624+48+12>>2];a[va+384+228>>0]=A>2]=i;Bc(va+48|0,va+128|0,va+384|0,i,0);i=c[b+28>>2]|0}j=j+1|0}while((j|0)<(i|0))}}if(!(a[b+16>>0]|0)){l=va;return}j=c[h+4>>2]|0;if(!(c[j+748>>2]|0)){l=va;return}k=c[j+740>>2]|0;m=c[(c[h+8>>2]|0)+8>>2]|0;i=c[(c[h+12>>2]|0)+8>>2]|0;if((k|0)==(m|0)){Oe(j,k+4|0,i+4|0);l=va;return}else{Oe(j,i+4|0,m+4|0);l=va;return}}function Zb(d){d=d|0;var e=0,f=0,h=0,i=0.0,k=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0.0,Z=0.0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0;X=l;l=l+176|0;ac(d);if(!(qb[c[(c[d>>2]|0)+20>>2]&127](d)|0)){l=X;return}if((c[d+328>>2]|0)<=0){l=X;return}V=X+96+32|0;W=X+96+52|0;U=0;do{S=c[(c[d+336>>2]|0)+(U<<2)>>2]|0;if(qb[c[(c[d>>2]|0)+20>>2]&127](d)|0?(N=qb[c[(c[d>>2]|0)+20>>2]&127](d)|0,(qb[c[(c[N>>2]|0)+48>>2]&127](N)|0)&1|0):0){e=c[d+72>>2]|0;if(!(a[S+473>>0]|0))N=e;else{c[X+80>>2]=c[S+520>>2];c[X+80+4>>2]=c[S+520+4>>2];c[X+80+8>>2]=c[S+520+8>>2];c[X+80+12>>2]=c[S+520+12>>2];i=+g[S+584>>2];k=+g[S+536>>2];m=+g[S+600>>2];t=+g[S+540>>2];u=+g[S+616>>2];v=+g[S+544>>2];w=+g[S+588>>2];x=+g[S+604>>2];y=+g[S+620>>2];z=+g[S+592>>2];A=+g[S+608>>2];B=+g[S+624>>2];D=+g[S+552>>2];E=+g[S+556>>2];F=+g[S+560>>2];G=+g[S+568>>2];H=+g[S+572>>2];I=+g[S+576>>2];ha=i*k+m*t+u*v+(k*w+t*x+v*y)*0.0+(k*z+t*A+v*B)*0.0;fa=(z*D+A*E+B*F)*0.0+(i*D+m*E+u*F+(w*D+x*E+y*F)*0.0);ea=(z*G+A*H+B*I)*0.0+(i*G+m*H+u*I+(w*G+x*H+y*I)*0.0);ga=1.0/+C(+(ha*ha+fa*fa+ea*ea));da=(i*k+m*t+u*v)*0.0+(k*w+t*x+v*y)+(k*z+t*A+v*B)*0.0;ba=(z*D+A*E+B*F)*0.0+(w*D+x*E+y*F+(i*D+m*E+u*F)*0.0);aa=(z*G+A*H+B*I)*0.0+(w*G+x*H+y*I+(i*G+m*H+u*I)*0.0);ca=1.0/+C(+(da*da+ba*ba+aa*aa));$=(i*k+m*t+u*v)*0.0+(k*w+t*x+v*y)*0.0+(k*z+t*A+v*B);Z=z*D+A*E+B*F+((i*D+m*E+u*F)*0.0+(w*D+x*E+y*F)*0.0);Y=z*G+A*H+B*I+((i*G+m*H+u*I)*0.0+(w*G+x*H+y*I)*0.0);_=1.0/+C(+($*$+Z*Z+Y*Y));N=c[(c[e>>2]|0)+8>>2]|0;fa=fa*ga*10.0+ +g[X+80+4>>2];ea=ga*ea*10.0+ +g[X+80+8>>2];g[X+160>>2]=ha*ga*10.0+ +g[X+80>>2];g[X+160+4>>2]=fa;g[X+160+8>>2]=ea;g[X+160+12>>2]=0.0;c[X+96>>2]=1065353216;c[X+96+4>>2]=0;c[X+96+8>>2]=0;g[X+96+12>>2]=0.0;Nb[N&127](e,X+80|0,X+160|0,X+96|0);N=c[(c[e>>2]|0)+8>>2]|0;ba=ba*ca*10.0+ +g[X+80+4>>2];aa=ca*aa*10.0+ +g[X+80+8>>2];g[X+160>>2]=da*ca*10.0+ +g[X+80>>2];g[X+160+4>>2]=ba;g[X+160+8>>2]=aa;g[X+160+12>>2]=0.0;c[X+96>>2]=0;c[X+96+4>>2]=1065353216;c[X+96+8>>2]=0;g[X+96+12>>2]=0.0;Nb[N&127](e,X+80|0,X+160|0,X+96|0);N=c[(c[e>>2]|0)+8>>2]|0;Z=Z*_*10.0+ +g[X+80+4>>2];Y=_*Y*10.0+ +g[X+80+8>>2];g[X+160>>2]=$*_*10.0+ +g[X+80>>2];g[X+160+4>>2]=Z;g[X+160+8>>2]=Y;g[X+160+12>>2]=0.0;c[X+96>>2]=0;c[X+96+4>>2]=0;c[X+96+8>>2]=1065353216;g[X+96+12>>2]=0.0;Nb[N&127](e,X+80|0,X+160|0,X+96|0);if((c[S+484>>2]|0)>0){f=0;do{N=c[S+492>>2]|0;da=+g[N+(f<<4)>>2];ea=+g[N+(f<<4)+4>>2];ha=+g[N+(f<<4)+8>>2];fa=+g[X+80>>2]+((i*k+m*t+u*v)*da+(k*w+t*x+v*y)*ea+(k*z+t*A+v*B)*ha);ga=+g[X+80+4>>2]+((i*D+m*E+u*F)*da+(w*D+x*E+y*F)*ea+(z*D+A*E+B*F)*ha);ha=(i*G+m*H+u*I)*da+(w*G+x*H+y*I)*ea+(z*G+A*H+B*I)*ha+ +g[X+80+8>>2];c[X+64>>2]=1065353216;c[X+64+4>>2]=0;c[X+64+8>>2]=1065353216;g[X+64+12>>2]=0.0;N=c[(c[e>>2]|0)+8>>2]|0;g[X+160>>2]=fa+-.10000000149011612;g[X+160+4>>2]=ga;g[X+160+8>>2]=ha;g[X+160+12>>2]=0.0;g[X+96>>2]=fa+.10000000149011612;g[X+96+4>>2]=ga+0.0;g[X+96+8>>2]=ha+0.0;g[X+96+12>>2]=0.0;Nb[N&127](e,X+160|0,X+96|0,X+64|0);N=c[(c[e>>2]|0)+8>>2]|0;g[X+160>>2]=fa;g[X+160+4>>2]=ga+-.10000000149011612;g[X+160+8>>2]=ha;g[X+160+12>>2]=0.0;g[X+96>>2]=fa+0.0;g[X+96+4>>2]=ga+.10000000149011612;g[X+96+8>>2]=ha+0.0;g[X+96+12>>2]=0.0;Nb[N&127](e,X+160|0,X+96|0,X+64|0);N=c[(c[e>>2]|0)+8>>2]|0;g[X+160>>2]=fa;g[X+160+4>>2]=ga;g[X+160+8>>2]=ha+-.10000000149011612;g[X+160+12>>2]=0.0;g[X+96>>2]=fa+0.0;g[X+96+4>>2]=ga+0.0;g[X+96+8>>2]=ha+.10000000149011612;g[X+96+12>>2]=0.0;Nb[N&127](e,X+160|0,X+96|0,X+64|0);f=f+1|0}while((f|0)<(c[S+484>>2]|0))}N=c[d+72>>2]|0}M=c[d+344>>2]|0;c[X+80>>2]=0;c[X+80+4>>2]=0;c[X+80+8>>2]=0;c[X+80+12>>2]=0;c[X+64>>2]=1065353216;c[X+64+4>>2]=1065353216;c[X+64+8>>2]=1065353216;g[X+64+12>>2]=0.0;c[X+48>>2]=1065353216;c[X+48+4>>2]=0;c[X+48+8>>2]=0;g[X+48+12>>2]=0.0;if(!(M&256)){if(M&1|0?(T=c[S+712>>2]|0,(T|0)>0):0){e=T;h=0;do{f=c[S+720>>2]|0;if(c[(c[f+(h*104|0)+4>>2]|0)+16>>2]&1){e=c[(c[N>>2]|0)+8>>2]|0;L=f+(h*104|0)+8|0;J=f+(h*104|0)+12|0;r=c[J>>2]|0;K=f+(h*104|0)+16|0;s=c[K>>2]|0;g[X+160>>2]=+g[L>>2]+-.10000000149011612;c[X+160+4>>2]=r;c[X+160+8>>2]=s;g[X+160+12>>2]=0.0;ga=+g[J>>2]+0.0;ha=+g[K>>2]+0.0;g[X+96>>2]=+g[L>>2]+.10000000149011612;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;c[X+32>>2]=1065353216;c[X+32+4>>2]=0;c[X+32+8>>2]=0;g[X+32+12>>2]=0.0;Nb[e&127](N,X+160|0,X+96|0,X+32|0);e=c[(c[N>>2]|0)+8>>2]|0;ha=+g[J>>2]+-.10000000149011612;s=c[K>>2]|0;c[X+160>>2]=c[L>>2];g[X+160+4>>2]=ha;c[X+160+8>>2]=s;g[X+160+12>>2]=0.0;ha=+g[J>>2]+.10000000149011612;ga=+g[K>>2]+0.0;g[X+96>>2]=+g[L>>2]+0.0;g[X+96+4>>2]=ha;g[X+96+8>>2]=ga;g[X+96+12>>2]=0.0;c[X+32>>2]=0;c[X+32+4>>2]=1065353216;c[X+32+8>>2]=0;g[X+32+12>>2]=0.0;Nb[e&127](N,X+160|0,X+96|0,X+32|0);e=c[(c[N>>2]|0)+8>>2]|0;s=c[J>>2]|0;ga=+g[K>>2]+-.10000000149011612;c[X+160>>2]=c[L>>2];c[X+160+4>>2]=s;g[X+160+8>>2]=ga;g[X+160+12>>2]=0.0;ga=+g[J>>2]+0.0;ha=+g[K>>2]+.10000000149011612;g[X+96>>2]=+g[L>>2]+0.0;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;c[X+32>>2]=0;c[X+32+4>>2]=0;c[X+32+8>>2]=1065353216;g[X+32+12>>2]=0.0;Nb[e&127](N,X+160|0,X+96|0,X+32|0);e=c[S+712>>2]|0}h=h+1|0}while((h|0)<(e|0))}if(M&2|0?(O=c[S+732>>2]|0,(O|0)>0):0){e=O;h=0;do{f=c[S+740>>2]|0;if(c[(c[f+(h*52|0)+4>>2]|0)+16>>2]&1){Nb[c[(c[N>>2]|0)+8>>2]&127](N,(c[f+(h*52|0)+8>>2]|0)+8|0,(c[f+(h*52|0)+12>>2]|0)+8|0,X+80|0);e=c[S+732>>2]|0}h=h+1|0}while((h|0)<(e|0))}if(M&16|0?(P=c[S+712>>2]|0,(P|0)>0):0){e=P;h=0;do{f=c[S+720>>2]|0;if(c[(c[f+(h*104|0)+4>>2]|0)+16>>2]&1){fa=+g[f+(h*104|0)+72>>2]*.5;ha=+g[f+(h*104|0)+76>>2]*.5;ga=+g[f+(h*104|0)+80>>2]*.5;L=c[(c[N>>2]|0)+8>>2]|0;e=f+(h*104|0)+8|0;J=f+(h*104|0)+12|0;da=ha+ +g[J>>2];K=f+(h*104|0)+16|0;ea=ga+ +g[K>>2];g[X+160>>2]=fa+ +g[e>>2];g[X+160+4>>2]=da;g[X+160+8>>2]=ea;g[X+160+12>>2]=0.0;Nb[L&127](N,e,X+160|0,X+64|0);L=c[(c[N>>2]|0)+8>>2]|0;ha=+g[J>>2]-ha;ga=+g[K>>2]-ga;g[X+160>>2]=+g[e>>2]-fa;g[X+160+4>>2]=ha;g[X+160+8>>2]=ga;g[X+160+12>>2]=0.0;ga=+g[X+64+4>>2]*.5;ha=+g[X+64+8>>2]*.5;g[X+96>>2]=+g[X+64>>2]*.5;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;Nb[L&127](N,e,X+160|0,X+96|0);e=c[S+712>>2]|0}h=h+1|0}while((h|0)<(e|0))}if(M&32|0){if((a[22744]|0)==0?Yy(22744)|0:0){c[5840]=1065353216;c[5841]=0;c[5842]=0;c[5843]=0;c[5844]=0;c[5845]=1065353216;c[5846]=0;c[5847]=0;c[5848]=0;c[5849]=0;c[5850]=1065353216;g[5851]=0.0}if((c[S+812>>2]|0)>0){e=0;do{L=c[S+820>>2]|0;J=c[L+(e*104|0)+24>>2]|0;D=+g[J+8>>2];K=L+(e*104|0)+4|0;E=+g[K>>2];H=+g[J+12>>2];s=L+(e*104|0)+8|0;I=+g[s>>2];ga=+g[J+16>>2];J=L+(e*104|0)+12|0;ea=+g[J>>2];ca=+g[L+(e*104|0)+20>>2]+(D*E+H*I+ga*ea);g[X+160>>2]=D-E*ca;g[X+160+4>>2]=H-I*ca;g[X+160+8>>2]=ga-ea*ca;g[X+160+12>>2]=0.0;Y=+g[K>>2];_=+g[s>>2];F=+g[J>>2];L=Y<_?(Y>2];Z=+g[23360+(L<<4)+4>>2];$=+g[23360+(L<<4)>>2];aa=1.0/+C(+((Y*Z-_*$)*(Y*Z-_*$)+((_*G-F*Z)*(_*G-F*Z)+(F*$-Y*G)*(F*$-Y*G))));ba=F*(F*$-Y*G)*aa-_*(Y*Z-_*$)*aa;da=Y*(Y*Z-_*$)*aa-F*(_*G-F*Z)*aa;ha=_*(_*G-F*Z)*aa-Y*(F*$-Y*G)*aa;fa=1.0/+C(+(ha*ha+(ba*ba+da*da)));L=c[(c[N>>2]|0)+8>>2]|0;g[X+96>>2]=D-E*ca-(_*G-F*Z)*aa*.5;g[X+96+4>>2]=H-I*ca-(F*$-Y*G)*aa*.5;g[X+96+8>>2]=ga-ea*ca-(Y*Z-_*$)*aa*.5;g[X+96+12>>2]=0.0;g[X+32>>2]=(_*G-F*Z)*aa*.5+(D-E*ca);g[X+32+4>>2]=(F*$-Y*G)*aa*.5+(H-I*ca);g[X+32+8>>2]=(Y*Z-_*$)*aa*.5+(ga-ea*ca);g[X+32+12>>2]=0.0;Nb[L&127](N,X+96|0,X+32|0,X+48|0);L=c[(c[N>>2]|0)+8>>2]|0;ca=+g[X+160>>2];ea=+g[X+160+4>>2];ga=+g[X+160+8>>2];g[X+96>>2]=ca-fa*ba*.5;g[X+96+4>>2]=ea-fa*da*.5;g[X+96+8>>2]=ga-fa*ha*.5;g[X+96+12>>2]=0.0;g[X+32>>2]=fa*ba*.5+ca;g[X+32+4>>2]=fa*da*.5+ea;g[X+32+8>>2]=fa*ha*.5+ga;g[X+32+12>>2]=0.0;Nb[L&127](N,X+96|0,X+32|0,X+48|0);L=c[(c[N>>2]|0)+8>>2]|0;ga=+g[s>>2]*.5*3.0+ +g[X+160+4>>2];ha=+g[J>>2]*.5*3.0+ +g[X+160+8>>2];g[X+96>>2]=+g[K>>2]*.5*3.0+ +g[X+160>>2];g[X+96+4>>2]=ga;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;c[X+32>>2]=1065353216;c[X+32+4>>2]=1065353216;c[X+32+8>>2]=0;g[X+32+12>>2]=0.0;Nb[L&127](N,X+160|0,X+96|0,X+32|0);e=e+1|0}while((e|0)<(c[S+812>>2]|0))}}if(M&4|0?(c[X+160>>2]=0,c[X+160+4>>2]=1060320051,c[X+160+8>>2]=0,g[X+160+12>>2]=0.0,Q=c[S+752>>2]|0,(Q|0)>0):0){e=Q;h=0;do{f=c[S+760>>2]|0;if(c[(c[f+(h*44|0)+4>>2]|0)+16>>2]&1){e=c[f+(h*44|0)+8>>2]|0;$=+g[e+8>>2];ca=+g[e+12>>2];fa=+g[e+16>>2];e=c[f+(h*44|0)+12>>2]|0;aa=+g[e+8>>2];da=+g[e+12>>2];ga=+g[e+16>>2];e=c[f+(h*44|0)+16>>2]|0;ba=+g[e+8>>2];ea=+g[e+12>>2];ha=+g[e+16>>2];e=c[(c[N>>2]|0)+28>>2]|0;g[X+96>>2]=($+aa+ba)*.3333333432674408+($-($+aa+ba)*.3333333432674408)*.800000011920929;g[X+96+4>>2]=(ca+da+ea)*.3333333432674408+(ca-(ca+da+ea)*.3333333432674408)*.800000011920929;g[X+96+8>>2]=(fa+ga+ha)*.3333333432674408+(fa-(fa+ga+ha)*.3333333432674408)*.800000011920929;g[X+96+12>>2]=0.0;g[X+32>>2]=($+aa+ba)*.3333333432674408+(aa-($+aa+ba)*.3333333432674408)*.800000011920929;g[X+32+4>>2]=(ca+da+ea)*.3333333432674408+(da-(ca+da+ea)*.3333333432674408)*.800000011920929;g[X+32+8>>2]=(fa+ga+ha)*.3333333432674408+(ga-(fa+ga+ha)*.3333333432674408)*.800000011920929;g[X+32+12>>2]=0.0;g[X+16>>2]=($+aa+ba)*.3333333432674408+(ba-($+aa+ba)*.3333333432674408)*.800000011920929;g[X+16+4>>2]=(ca+da+ea)*.3333333432674408+(ea-(ca+da+ea)*.3333333432674408)*.800000011920929;g[X+16+8>>2]=(fa+ga+ha)*.3333333432674408+(ha-(fa+ga+ha)*.3333333432674408)*.800000011920929;g[X+16+12>>2]=0.0;Sb[e&0](N,X+96|0,X+32|0,X+16|0,X+160|0,1.0);e=c[S+752>>2]|0}h=h+1|0}while((h|0)<(e|0))}if(M&8|0?(c[X+160>>2]=1050253722,c[X+160+4>>2]=1050253722,c[X+160+8>>2]=1060320051,g[X+160+12>>2]=0.0,R=c[S+772>>2]|0,(R|0)>0):0){e=R;h=0;do{f=c[S+780>>2]|0;if(c[(c[f+(h*104|0)+4>>2]|0)+16>>2]&1){e=c[f+(h*104|0)+8>>2]|0;z=+g[e+8>>2];D=+g[e+12>>2];G=+g[e+16>>2];e=c[f+(h*104|0)+12>>2]|0;A=+g[e+8>>2];E=+g[e+12>>2];H=+g[e+16>>2];e=c[f+(h*104|0)+16>>2]|0;B=+g[e+8>>2];F=+g[e+12>>2];I=+g[e+16>>2];e=c[f+(h*104|0)+20>>2]|0;fa=+g[e+8>>2];ga=+g[e+12>>2];ha=+g[e+16>>2];e=c[(c[N>>2]|0)+28>>2]|0;ca=(z+A+B+fa)*.25+(z-(z+A+B+fa)*.25)*.800000011920929;da=(D+E+F+ga)*.25+(D-(D+E+F+ga)*.25)*.800000011920929;ea=(G+H+I+ha)*.25+(G-(G+H+I+ha)*.25)*.800000011920929;g[X+96>>2]=ca;g[X+96+4>>2]=da;g[X+96+8>>2]=ea;g[X+96+12>>2]=0.0;Y=(z+A+B+fa)*.25+(A-(z+A+B+fa)*.25)*.800000011920929;Z=(D+E+F+ga)*.25+(E-(D+E+F+ga)*.25)*.800000011920929;_=(G+H+I+ha)*.25+(H-(G+H+I+ha)*.25)*.800000011920929;g[X+32>>2]=Y;g[X+32+4>>2]=Z;g[X+32+8>>2]=_;g[X+32+12>>2]=0.0;$=(z+A+B+fa)*.25+(B-(z+A+B+fa)*.25)*.800000011920929;aa=(D+E+F+ga)*.25+(F-(D+E+F+ga)*.25)*.800000011920929;ba=(G+H+I+ha)*.25+(I-(G+H+I+ha)*.25)*.800000011920929;g[X+16>>2]=$;g[X+16+4>>2]=aa;g[X+16+8>>2]=ba;g[X+16+12>>2]=0.0;Sb[e&0](N,X+96|0,X+32|0,X+16|0,X+160|0,1.0);e=c[(c[N>>2]|0)+28>>2]|0;g[X+96>>2]=ca;g[X+96+4>>2]=da;g[X+96+8>>2]=ea;g[X+96+12>>2]=0.0;g[X+32>>2]=Y;g[X+32+4>>2]=Z;g[X+32+8>>2]=_;g[X+32+12>>2]=0.0;fa=(z+A+B+fa)*.25+(fa-(z+A+B+fa)*.25)*.800000011920929;ga=(D+E+F+ga)*.25+(ga-(D+E+F+ga)*.25)*.800000011920929;ha=(G+H+I+ha)*.25+(ha-(G+H+I+ha)*.25)*.800000011920929;g[X+16>>2]=fa;g[X+16+4>>2]=ga;g[X+16+8>>2]=ha;g[X+16+12>>2]=0.0;Sb[e&0](N,X+96|0,X+32|0,X+16|0,X+160|0,1.0);e=c[(c[N>>2]|0)+28>>2]|0;g[X+96>>2]=Y;g[X+96+4>>2]=Z;g[X+96+8>>2]=_;g[X+96+12>>2]=0.0;g[X+32>>2]=$;g[X+32+4>>2]=aa;g[X+32+8>>2]=ba;g[X+32+12>>2]=0.0;g[X+16>>2]=fa;g[X+16+4>>2]=ga;g[X+16+8>>2]=ha;g[X+16+12>>2]=0.0;Sb[e&0](N,X+96|0,X+32|0,X+16|0,X+160|0,1.0);e=c[(c[N>>2]|0)+28>>2]|0;g[X+96>>2]=$;g[X+96+4>>2]=aa;g[X+96+8>>2]=ba;g[X+96+12>>2]=0.0;g[X+32>>2]=ca;g[X+32+4>>2]=da;g[X+32+8>>2]=ea;g[X+32+12>>2]=0.0;g[X+16>>2]=fa;g[X+16+4>>2]=ga;g[X+16+8>>2]=ha;g[X+16+12>>2]=0.0;Sb[e&0](N,X+96|0,X+32|0,X+16|0,X+160|0,1.0);e=c[S+772>>2]|0}h=h+1|0}while((h|0)<(e|0))}}else{HH();e=c[S+1112>>2]|0;if((e|0)>0){L=0;do{if(a[(c[(c[S+1120>>2]|0)+(L<<2)>>2]|0)+377>>0]|0){ea=+(Lr()|0)*4.656612873077393e-10;fa=+(Lr()|0)*4.656612873077393e-10;ga=+(Lr()|0)*4.656612873077393e-10;ha=1.0/+C(+(ga*ga+(ea*ea+fa*fa)));g[X+160>>2]=ea*ha*.75;g[X+160+4>>2]=fa*ha*.75;g[X+160+8>>2]=ga*ha*.75;g[X+160+12>>2]=0.0;h=c[(c[(c[S+1120>>2]|0)+(L<<2)>>2]|0)+24>>2]|0;if((h|0)>0){c[6472]=(c[6472]|0)+1;e=ic((h<<4|3)+16|0)|0;if(!e)f=0;else{c[(e+4+15&-16)+-4>>2]=e;f=e+4+15&-16}e=0;do{K=f+(e<<4)|0;c[K>>2]=c[X+96>>2];c[K+4>>2]=c[X+96+4>>2];c[K+8>>2]=c[X+96+8>>2];c[K+12>>2]=c[X+96+12>>2];e=e+1|0}while((e|0)!=(h|0));e=0;do{K=f+(e<<4)|0;J=(c[(c[(c[(c[S+1120>>2]|0)+(L<<2)>>2]|0)+32>>2]|0)+(e<<2)>>2]|0)+8|0;c[K>>2]=c[J>>2];c[K+4>>2]=c[J+4>>2];c[K+8>>2]=c[J+8>>2];c[K+12>>2]=c[J+12>>2];e=e+1|0}while((e|0)!=(h|0));K=f;J=f}else{K=0;J=0}a[X+96+16>>0]=1;c[X+96+12>>2]=0;c[X+96+4>>2]=0;c[X+96+8>>2]=0;a[X+96+36>>0]=1;c[V>>2]=0;c[X+96+24>>2]=0;c[X+96+28>>2]=0;a[X+96+56>>0]=1;c[W>>2]=0;c[X+96+44>>2]=0;c[X+96+48>>2]=0;jc(X+96|0,K,h);q=c[X+96+44>>2]|0;if((q|0)>0){o=c[V>>2]|0;s=0;do{r=c[(c[W>>2]|0)+(s<<2)>>2]|0;f=c[o+(r*12|0)+4>>2]|0;e=o+(r*12|0)+(f*12|0)+((c[o+(r*12|0)+(f*12|0)>>2]|0)*12|0)|0;if((e|0)!=(o+(r*12|0)|0)){p=c[X+96+12>>2]|0;h=c[o+(r*12|0)+(f*12|0)+8>>2]|0;n=c[o+(r*12|0)+8>>2]|0;while(1){f=c[e+8>>2]|0;Sb[c[(c[N>>2]|0)+28>>2]&0](N,p+(h<<4)|0,p+(n<<4)|0,p+(f<<4)|0,X+160|0,1.0);h=e+((c[e+4>>2]|0)*12|0)|0;e=h+((c[h>>2]|0)*12|0)|0;if((e|0)==(o+(r*12|0)|0))break;else{h=n;n=f}}}s=s+1|0}while((s|0)<(q|0))}e=c[W>>2]|0;if(e|0){if(a[X+96+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[W>>2]=0}a[X+96+56>>0]=1;c[W>>2]=0;c[X+96+44>>2]=0;c[X+96+48>>2]=0;e=c[V>>2]|0;if(e|0){if(a[X+96+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[V>>2]=0}a[X+96+36>>0]=1;c[V>>2]=0;c[X+96+24>>2]=0;c[X+96+28>>2]=0;e=c[X+96+12>>2]|0;if(e|0){if(a[X+96+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[X+96+12>>2]=0}if(!((J|0)==0|(K|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[K+-4>>2]|0)}e=c[S+1112>>2]|0}L=L+1|0}while((L|0)<(e|0))}}if(M&64|0){if((c[S+792>>2]|0)>0){e=0;do{L=c[S+800>>2]|0;r=c[L+(e*96|0)+20>>2]|0;da=+g[L+(e*96|0)+4>>2];ea=+g[L+(e*96|0)+8>>2];fa=+g[L+(e*96|0)+12>>2];ga=da*+g[r+20>>2]+ea*+g[r+24>>2]+fa*+g[r+28>>2]+ +g[r+56>>2];ha=da*+g[r+36>>2]+ea*+g[r+40>>2]+fa*+g[r+44>>2]+ +g[r+60>>2];g[X+32>>2]=da*+g[r+4>>2]+ea*+g[r+8>>2]+fa*+g[r+12>>2]+ +g[r+52>>2];g[X+32+4>>2]=ga;g[X+32+8>>2]=ha;g[X+32+12>>2]=0.0;L=L+(e*96|0)|0;r=c[L>>2]|0;c[X+16>>2]=1065353216;c[X+16+4>>2]=0;c[X+16+8>>2]=0;g[X+16+12>>2]=0.0;K=c[(c[N>>2]|0)+8>>2]|0;ha=+g[r+8>>2];J=c[r+12>>2]|0;s=c[r+16>>2]|0;g[X+160>>2]=ha+-.25;c[X+160+4>>2]=J;c[X+160+8>>2]=s;g[X+160+12>>2]=0.0;ga=(c[j>>2]=J,+g[j>>2])+0.0;fa=(c[j>>2]=s,+g[j>>2])+0.0;g[X+96>>2]=ha+.25;g[X+96+4>>2]=ga;g[X+96+8>>2]=fa;g[X+96+12>>2]=0.0;Nb[K&127](N,X+160|0,X+96|0,X+16|0);K=c[(c[N>>2]|0)+8>>2]|0;s=c[r+8>>2]|0;fa=+g[r+12>>2];J=c[r+16>>2]|0;c[X+160>>2]=s;g[X+160+4>>2]=fa+-.25;c[X+160+8>>2]=J;g[X+160+12>>2]=0.0;ga=(c[j>>2]=s,+g[j>>2])+0.0;ha=(c[j>>2]=J,+g[j>>2])+0.0;g[X+96>>2]=ga;g[X+96+4>>2]=fa+.25;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;Nb[K&127](N,X+160|0,X+96|0,X+16|0);K=c[(c[N>>2]|0)+8>>2]|0;J=c[r+8>>2]|0;s=c[r+12>>2]|0;ha=+g[r+16>>2];c[X+160>>2]=J;c[X+160+4>>2]=s;g[X+160+8>>2]=ha+-.25;g[X+160+12>>2]=0.0;fa=(c[j>>2]=J,+g[j>>2])+0.0;ga=(c[j>>2]=s,+g[j>>2])+0.0;g[X+96>>2]=fa;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha+.25;g[X+96+12>>2]=0.0;Nb[K&127](N,X+160|0,X+96|0,X+16|0);c[X+16>>2]=0;c[X+16+4>>2]=1065353216;c[X+16+8>>2]=0;g[X+16+12>>2]=0.0;K=c[(c[N>>2]|0)+8>>2]|0;ha=+g[X+32>>2];s=c[X+32+4>>2]|0;J=c[X+32+8>>2]|0;g[X+160>>2]=ha+-.25;c[X+160+4>>2]=s;c[X+160+8>>2]=J;g[X+160+12>>2]=0.0;ga=(c[j>>2]=s,+g[j>>2])+0.0;fa=(c[j>>2]=J,+g[j>>2])+0.0;g[X+96>>2]=ha+.25;g[X+96+4>>2]=ga;g[X+96+8>>2]=fa;g[X+96+12>>2]=0.0;Nb[K&127](N,X+160|0,X+96|0,X+16|0);K=c[(c[N>>2]|0)+8>>2]|0;J=c[X+32>>2]|0;fa=+g[X+32+4>>2];s=c[X+32+8>>2]|0;c[X+160>>2]=J;g[X+160+4>>2]=fa+-.25;c[X+160+8>>2]=s;g[X+160+12>>2]=0.0;ga=(c[j>>2]=J,+g[j>>2])+0.0;ha=(c[j>>2]=s,+g[j>>2])+0.0;g[X+96>>2]=ga;g[X+96+4>>2]=fa+.25;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;Nb[K&127](N,X+160|0,X+96|0,X+16|0);K=c[(c[N>>2]|0)+8>>2]|0;s=c[X+32>>2]|0;J=c[X+32+4>>2]|0;ha=+g[X+32+8>>2];c[X+160>>2]=s;c[X+160+4>>2]=J;g[X+160+8>>2]=ha+-.25;g[X+160+12>>2]=0.0;fa=(c[j>>2]=s,+g[j>>2])+0.0;ga=(c[j>>2]=J,+g[j>>2])+0.0;g[X+96>>2]=fa;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha+.25;g[X+96+12>>2]=0.0;Nb[K&127](N,X+160|0,X+96|0,X+16|0);K=c[(c[N>>2]|0)+8>>2]|0;L=(c[L>>2]|0)+8|0;c[X+160>>2]=1065353216;c[X+160+4>>2]=1065353216;c[X+160+8>>2]=1065353216;g[X+160+12>>2]=0.0;Nb[K&127](N,L,X+32|0,X+160|0);e=e+1|0}while((e|0)<(c[S+792>>2]|0))}e=c[S+712>>2]|0;if((e|0)>0){h=0;do{f=c[S+720>>2]|0;if((c[(c[f+(h*104|0)+4>>2]|0)+16>>2]&1|0)!=0?+g[f+(h*104|0)+88>>2]<=0.0:0){K=f+(h*104|0)+8|0;c[X+32>>2]=1065353216;c[X+32+4>>2]=0;c[X+32+8>>2]=0;g[X+32+12>>2]=0.0;e=c[(c[N>>2]|0)+8>>2]|0;ha=+g[K>>2];L=f+(h*104|0)+12|0;s=c[L>>2]|0;J=f+(h*104|0)+16|0;r=c[J>>2]|0;g[X+160>>2]=ha+-.25;c[X+160+4>>2]=s;c[X+160+8>>2]=r;g[X+160+12>>2]=0.0;ga=(c[j>>2]=s,+g[j>>2])+0.0;fa=(c[j>>2]=r,+g[j>>2])+0.0;g[X+96>>2]=ha+.25;g[X+96+4>>2]=ga;g[X+96+8>>2]=fa;g[X+96+12>>2]=0.0;Nb[e&127](N,X+160|0,X+96|0,X+32|0);e=c[(c[N>>2]|0)+8>>2]|0;r=c[K>>2]|0;fa=+g[L>>2];s=c[J>>2]|0;c[X+160>>2]=r;g[X+160+4>>2]=fa+-.25;c[X+160+8>>2]=s;g[X+160+12>>2]=0.0;ga=(c[j>>2]=r,+g[j>>2])+0.0;ha=(c[j>>2]=s,+g[j>>2])+0.0;g[X+96>>2]=ga;g[X+96+4>>2]=fa+.25;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;Nb[e&127](N,X+160|0,X+96|0,X+32|0);e=c[(c[N>>2]|0)+8>>2]|0;K=c[K>>2]|0;L=c[L>>2]|0;ha=+g[J>>2];c[X+160>>2]=K;c[X+160+4>>2]=L;g[X+160+8>>2]=ha+-.25;g[X+160+12>>2]=0.0;fa=(c[j>>2]=K,+g[j>>2])+0.0;ga=(c[j>>2]=L,+g[j>>2])+0.0;g[X+96>>2]=fa;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha+.25;g[X+96+12>>2]=0.0;Nb[e&127](N,X+160|0,X+96|0,X+32|0);e=c[S+712>>2]|0}h=h+1|0}while((h|0)<(e|0))}}if(M&128|0?(c[S+692>>2]|0)>0:0){h=0;do{e=c[S+700>>2]|0;f=e+(h*60|0)+8|0;c[X+160>>2]=c[f>>2];c[X+160+4>>2]=c[f+4>>2];c[X+160+8>>2]=c[f+8>>2];c[X+160+12>>2]=c[f+12>>2];f=c[e+(h*60|0)+24>>2]|0;if((f|0)>0){i=+g[X+160+8>>2];k=+g[X+160>>2];m=+g[X+160+4>>2];n=0;do{L=c[e+(h*60|0)+28+(n<<2)>>2]|0;ha=+g[e+(h*60|0)+44+(n<<2)>>2];k=+g[L+8>>2]*ha+k;m=ha*+g[L+12>>2]+m;i=ha*+g[L+16>>2]+i;g[X+160+8>>2]=i;n=n+1|0}while((n|0)!=(f|0));g[X+160>>2]=k;g[X+160+4>>2]=m}Kb[c[(c[N>>2]|0)+40>>2]&127](N,X+160|0,c[e+(h*60|0)+4>>2]|0);h=h+1|0}while((h|0)<(c[S+692>>2]|0))}if(M&512|0){L=c[S+928>>2]|0;c[X+160>>2]=1065353216;c[X+160+4>>2]=0;c[X+160+8>>2]=1065353216;g[X+160+12>>2]=0.0;c[X+96>>2]=1065353216;c[X+96+4>>2]=1065353216;c[X+96+8>>2]=1065353216;g[X+96+12>>2]=0.0;Cf(N,L,0,X+160|0,X+96|0)}if(M&1024|0){L=c[S+988>>2]|0;c[X+160>>2]=0;c[X+160+4>>2]=1065353216;c[X+160+8>>2]=0;g[X+160+12>>2]=0.0;c[X+96>>2]=1065353216;c[X+96+4>>2]=0;c[X+96+8>>2]=0;g[X+96+12>>2]=0.0;Cf(N,L,0,X+160|0,X+96|0)}if(M&2048|0){L=c[S+1048>>2]|0;c[X+160>>2]=0;c[X+160+4>>2]=1065353216;c[X+160+8>>2]=1065353216;g[X+160+12>>2]=0.0;c[X+96>>2]=1065353216;c[X+96+4>>2]=0;c[X+96+8>>2]=0;g[X+96+12>>2]=0.0;Cf(N,L,0,X+160|0,X+96|0)}a:do if(M&4096|0?(c[S+852>>2]|0)>0:0){f=0;while(1){e=c[(c[S+860>>2]|0)+(f<<2)>>2]|0;switch(qb[c[(c[e>>2]|0)+20>>2]&127](e)|0){case 0:{M=ji(e+4|0)|0;ha=+g[e+28>>2];ga=+g[e+32>>2];fa=+g[e+36>>2];ea=ha*+g[M+16>>2]+ga*+g[M+20>>2]+fa*+g[M+24>>2]+ +g[M+52>>2];da=ha*+g[M+32>>2]+ga*+g[M+36>>2]+fa*+g[M+40>>2]+ +g[M+56>>2];g[X+32>>2]=ha*+g[M>>2]+ga*+g[M+4>>2]+fa*+g[M+8>>2]+ +g[M+48>>2];g[X+32+4>>2]=ea;g[X+32+8>>2]=da;g[X+32+12>>2]=0.0;M=ji(e+16|0)|0;da=+g[e+44>>2];ea=+g[e+48>>2];fa=+g[e+52>>2];ga=da*+g[M+16>>2]+ea*+g[M+20>>2]+fa*+g[M+24>>2]+ +g[M+52>>2];ha=da*+g[M+32>>2]+ea*+g[M+36>>2]+fa*+g[M+40>>2]+ +g[M+56>>2];g[X+16>>2]=da*+g[M>>2]+ea*+g[M+4>>2]+fa*+g[M+8>>2]+ +g[M+48>>2];g[X+16+4>>2]=ga;g[X+16+8>>2]=ha;g[X+16+12>>2]=0.0;M=c[(c[N>>2]|0)+8>>2]|0;L=(ji(e+4|0)|0)+48|0;c[X+160>>2]=1065353216;c[X+160+4>>2]=1065353216;c[X+160+8>>2]=0;g[X+160+12>>2]=0.0;Nb[M&127](N,L,X+32|0,X+160|0);L=c[(c[N>>2]|0)+8>>2]|0;M=(ji(e+16|0)|0)+48|0;c[X+160>>2]=0;c[X+160+4>>2]=1065353216;c[X+160+8>>2]=1065353216;g[X+160+12>>2]=0.0;Nb[L&127](N,M,X+16|0,X+160|0);c[X>>2]=1065353216;c[X+4>>2]=1065353216;c[X+8>>2]=0;g[X+12>>2]=0.0;M=c[(c[N>>2]|0)+8>>2]|0;ha=+g[X+32>>2];L=c[X+32+4>>2]|0;K=c[X+32+8>>2]|0;g[X+160>>2]=ha+-.25;c[X+160+4>>2]=L;c[X+160+8>>2]=K;g[X+160+12>>2]=0.0;ga=(c[j>>2]=L,+g[j>>2])+0.0;fa=(c[j>>2]=K,+g[j>>2])+0.0;g[X+96>>2]=ha+.25;g[X+96+4>>2]=ga;g[X+96+8>>2]=fa;g[X+96+12>>2]=0.0;Nb[M&127](N,X+160|0,X+96|0,X);M=c[(c[N>>2]|0)+8>>2]|0;K=c[X+32>>2]|0;fa=+g[X+32+4>>2];L=c[X+32+8>>2]|0;c[X+160>>2]=K;g[X+160+4>>2]=fa+-.25;c[X+160+8>>2]=L;g[X+160+12>>2]=0.0;ga=(c[j>>2]=K,+g[j>>2])+0.0;ha=(c[j>>2]=L,+g[j>>2])+0.0;g[X+96>>2]=ga;g[X+96+4>>2]=fa+.25;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;Nb[M&127](N,X+160|0,X+96|0,X);M=c[(c[N>>2]|0)+8>>2]|0;L=c[X+32>>2]|0;K=c[X+32+4>>2]|0;ha=+g[X+32+8>>2];c[X+160>>2]=L;c[X+160+4>>2]=K;g[X+160+8>>2]=ha+-.25;g[X+160+12>>2]=0.0;fa=(c[j>>2]=L,+g[j>>2])+0.0;ga=(c[j>>2]=K,+g[j>>2])+0.0;g[X+96>>2]=fa;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha+.25;g[X+96+12>>2]=0.0;Nb[M&127](N,X+160|0,X+96|0,X);c[X>>2]=0;c[X+4>>2]=1065353216;c[X+8>>2]=1065353216;g[X+12>>2]=0.0;M=c[(c[N>>2]|0)+8>>2]|0;ha=+g[X+16>>2];K=c[X+16+4>>2]|0;L=c[X+16+8>>2]|0;g[X+160>>2]=ha+-.25;c[X+160+4>>2]=K;c[X+160+8>>2]=L;g[X+160+12>>2]=0.0;ga=(c[j>>2]=K,+g[j>>2])+0.0;fa=(c[j>>2]=L,+g[j>>2])+0.0;g[X+96>>2]=ha+.25;g[X+96+4>>2]=ga;g[X+96+8>>2]=fa;g[X+96+12>>2]=0.0;Nb[M&127](N,X+160|0,X+96|0,X);M=c[(c[N>>2]|0)+8>>2]|0;L=c[X+16>>2]|0;fa=+g[X+16+4>>2];K=c[X+16+8>>2]|0;c[X+160>>2]=L;g[X+160+4>>2]=fa+-.25;c[X+160+8>>2]=K;g[X+160+12>>2]=0.0;ga=(c[j>>2]=L,+g[j>>2])+0.0;ha=(c[j>>2]=K,+g[j>>2])+0.0;g[X+96>>2]=ga;g[X+96+4>>2]=fa+.25;g[X+96+8>>2]=ha;g[X+96+12>>2]=0.0;Nb[M&127](N,X+160|0,X+96|0,X);M=c[(c[N>>2]|0)+8>>2]|0;K=c[X+16>>2]|0;L=c[X+16+4>>2]|0;ha=+g[X+16+8>>2];c[X+160>>2]=K;c[X+160+4>>2]=L;g[X+160+8>>2]=ha+-.25;g[X+160+12>>2]=0.0;fa=(c[j>>2]=K,+g[j>>2])+0.0;ga=(c[j>>2]=L,+g[j>>2])+0.0;g[X+96>>2]=fa;g[X+96+4>>2]=ga;g[X+96+8>>2]=ha+.25;g[X+96+12>>2]=0.0;Nb[M&127](N,X+160|0,X+96|0,X);break}case 1:{M=(ji(e+4|0)|0)+48|0;c[X+160>>2]=c[M>>2];c[X+160+4>>2]=c[M+4>>2];c[X+160+8>>2]=c[M+8>>2];c[X+160+12>>2]=c[M+12>>2];M=(ji(e+16|0)|0)+48|0;c[X+96>>2]=c[M>>2];c[X+96+4>>2]=c[M+4>>2];c[X+96+8>>2]=c[M+8>>2];c[X+96+12>>2]=c[M+12>>2];M=ji(e+4|0)|0;ba=+g[e+28>>2];aa=+g[e+32>>2];ea=+g[e+36>>2];ca=+g[M>>2]*ba+ +g[M+4>>2]*aa+ +g[M+8>>2]*ea;da=ba*+g[M+16>>2]+aa*+g[M+20>>2]+ea*+g[M+24>>2];ea=ba*+g[M+32>>2]+aa*+g[M+36>>2]+ea*+g[M+40>>2];M=ji(e+16|0)|0;aa=+g[e+44>>2];ba=+g[e+48>>2];ha=+g[e+52>>2];fa=+g[M>>2]*aa+ +g[M+4>>2]*ba+ +g[M+8>>2]*ha;ga=aa*+g[M+16>>2]+ba*+g[M+20>>2]+ha*+g[M+24>>2];ha=aa*+g[M+32>>2]+ba*+g[M+36>>2]+ha*+g[M+40>>2];M=c[(c[N>>2]|0)+8>>2]|0;ba=da*10.0+ +g[X+160+4>>2];aa=ea*10.0+ +g[X+160+8>>2];g[X+32>>2]=ca*10.0+ +g[X+160>>2];g[X+32+4>>2]=ba;g[X+32+8>>2]=aa;g[X+32+12>>2]=0.0;c[X+16>>2]=1065353216;c[X+16+4>>2]=1065353216;c[X+16+8>>2]=0;g[X+16+12>>2]=0.0;Nb[M&127](N,X+160|0,X+32|0,X+16|0);M=c[(c[N>>2]|0)+8>>2]|0;aa=ga*10.0+ +g[X+160+4>>2];ba=ha*10.0+ +g[X+160+8>>2];g[X+32>>2]=fa*10.0+ +g[X+160>>2];g[X+32+4>>2]=aa;g[X+32+8>>2]=ba;g[X+32+12>>2]=0.0;c[X+16>>2]=1065353216;c[X+16+4>>2]=1065353216;c[X+16+8>>2]=0;g[X+16+12>>2]=0.0;Nb[M&127](N,X+160|0,X+32|0,X+16|0);M=c[(c[N>>2]|0)+8>>2]|0;da=da*10.0+ +g[X+96+4>>2];ea=ea*10.0+ +g[X+96+8>>2];g[X+32>>2]=ca*10.0+ +g[X+96>>2];g[X+32+4>>2]=da;g[X+32+8>>2]=ea;g[X+32+12>>2]=0.0;c[X+16>>2]=0;c[X+16+4>>2]=1065353216;c[X+16+8>>2]=1065353216;g[X+16+12>>2]=0.0;Nb[M&127](N,X+96|0,X+32|0,X+16|0);M=c[(c[N>>2]|0)+8>>2]|0;ga=ga*10.0+ +g[X+96+4>>2];ha=ha*10.0+ +g[X+96+8>>2];g[X+32>>2]=fa*10.0+ +g[X+96>>2];g[X+32+4>>2]=ga;g[X+32+8>>2]=ha;g[X+32+12>>2]=0.0;c[X+16>>2]=0;c[X+16+4>>2]=1065353216;c[X+16+8>>2]=1065353216;g[X+16+12>>2]=0.0;Nb[M&127](N,X+96|0,X+32|0,X+16|0);break}default:{}}f=f+1|0;if((f|0)>=(c[S+852>>2]|0))break a}}while(0)}e=c[d+72>>2]|0;if(e|0?(qb[c[(c[e>>2]|0)+48>>2]&127](e)|0)&2|0:0){e=b[d+348>>1]|0;if(!((e&255)<<24>>24))e=(e&65535)>>>8&255;else{N=c[d+72>>2]|0;e=c[S+928>>2]|0;c[X+160>>2]=1065353216;c[X+160+4>>2]=0;c[X+160+8>>2]=1065353216;g[X+160+12>>2]=0.0;c[X+96>>2]=1065353216;c[X+96+4>>2]=1065353216;c[X+96+8>>2]=1065353216;g[X+96+12>>2]=0.0;Cf(N,e,0,X+160|0,X+96|0);e=a[d+349>>0]|0}if(e<<24>>24){M=c[d+72>>2]|0;N=c[S+988>>2]|0;c[X+160>>2]=0;c[X+160+4>>2]=1065353216;c[X+160+8>>2]=0;g[X+160+12>>2]=0.0;c[X+96>>2]=1065353216;c[X+96+4>>2]=0;c[X+96+8>>2]=0;g[X+96+12>>2]=0.0;Cf(M,N,0,X+160|0,X+96|0)}if(a[d+350>>0]|0){N=c[d+72>>2]|0;S=c[S+1048>>2]|0;c[X+160>>2]=0;c[X+160+4>>2]=1065353216;c[X+160+8>>2]=1065353216;g[X+160+12>>2]=0.0;c[X+96>>2]=1065353216;c[X+96+4>>2]=0;c[X+96+8>>2]=0;g[X+96+12>>2]=0.0;Cf(N,S,0,X+160|0,X+96|0)}}U=U+1|0}while((U|0)<(c[d+328>>2]|0));l=X;return}function _b(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0,v=0.0,w=0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0.0,J=0.0,K=0.0,L=0.0,M=0.0,N=0.0,P=0.0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0;Z=l;l=l+112|0;c[Z+40>>2]=0;a[Z+16>>0]=1;c[Z+12>>2]=0;c[Z+4>>2]=0;c[Z+8>>2]=0;a[Z+36>>0]=1;c[Z+32>>2]=0;c[Z+24>>2]=0;c[Z+28>>2]=0;i=e>>>0>8?e:8;if((i|0)>0){c[6472]=(c[6472]|0)+1;h=ic((i<<4|3)+16|0)|0;if(!h)j=0;else{c[(h+4+15&-16)+-4>>2]=h;j=h+4+15&-16}h=0;do{Y=j+(h<<4)|0;c[Y>>2]=c[Z+48>>2];c[Y+4>>2]=c[Z+48+4>>2];c[Y+8>>2]=c[Z+48+8>>2];c[Y+12>>2]=c[Z+48+12>>2];h=h+1|0}while((h|0)!=(i|0));Y=j;X=j}else{Y=0;X=0}do if(!e){h=0;w=0;q=0;t=0;u=0}else{i=c[Z+24>>2]|0;if((i|0)<0){h=c[Z+32>>2]|0;if((c[Z+28>>2]|0)<0){if(!((h|0)==0|(a[Z+36>>0]|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}a[Z+36>>0]=1;c[Z+32>>2]=0;c[Z+28>>2]=0;h=0}Nk(h+(i<<2)|0,0,O(i,-4)|0)|0}c[Z+24>>2]=0;x=3402823466385288598117041.0e14;p=-3402823466385288598117041.0e14;y=3402823466385288598117041.0e14;r=-3402823466385288598117041.0e14;z=3402823466385288598117041.0e14;v=-3402823466385288598117041.0e14;h=0;i=d;while(1){P=+g[i>>2];x=Pp?P:p;P=+g[i+4>>2];y=Pr?P:r;P=+g[i+8>>2];z=Pv?P:v;h=h+1|0;if((h|0)==(e|0))break;else i=i+16|0}s=p-x;J=r-y;p=v-z;K=x+s*.5;L=y+J*.5;D=z+p*.5;do if(e>>>0<3|(s<9.999999974752427e-07|J<9.999999974752427e-07|p<9.999999974752427e-07)){v=s>9.999999974752427e-07&s<3402823466385288598117041.0e14?s:3402823466385288598117041.0e14;v=J>9.999999974752427e-07&J9.999999974752427e-07&p>2];z=1.0/J*+g[n+4>>2];A=1.0/p*+g[n+8>>2];n=n+16|0;a:do if(h){j=0;while(1){d=Y+(j<<4)|0;r=+g[d>>2];k=Y+(j<<4)+4|0;v=+g[k>>2];m=Y+(j<<4)+8|0;x=+g[m>>2];if(+B(+(r-y))<1.0000000474974513e-03&+B(+(v-z))<1.0000000474974513e-03&+B(+(x-A))<1.0000000474974513e-03)break;j=j+1|0;if(j>>>0>=h>>>0){m=j;break a}}if((y-1.0/s*K)*(y-1.0/s*K)+(z-1.0/J*L)*(z-1.0/J*L)+(A-1.0/p*D)*(A-1.0/p*D)>(r-1.0/s*K)*(r-1.0/s*K)+(v-1.0/J*L)*(v-1.0/J*L)+(x-1.0/p*D)*(x-1.0/p*D)){g[d>>2]=y;g[k>>2]=z;g[m>>2]=A;m=j}else m=j}else m=0;while(0);if((m|0)==(h|0)){g[Y+(h<<4)>>2]=y;g[Y+(h<<4)+4>>2]=z;g[Y+(h<<4)+8>>2]=A;h=h+1|0}if((i|0)==(c[Z+28>>2]|0)?(t=i|0?i<<1:1,(i|0)<(t|0)):0){if((t|0)!=0?(c[6472]=(c[6472]|0)+1,q=ic((t<<2|3)+16|0)|0,(q|0)!=0):0){c[(q+4+15&-16)+-4>>2]=q;k=q+4+15&-16}else k=0;d=c[Z+32>>2]|0;if((i|0)<=0){if(d)W=37}else{j=0;do{c[k+(j<<2)>>2]=c[d+(j<<2)>>2];j=j+1|0}while((j|0)!=(i|0));W=37}if((W|0)==37){W=0;if(a[Z+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[Z+32>>2]=0;i=c[Z+24>>2]|0}a[Z+36>>0]=1;c[Z+32>>2]=k;c[Z+28>>2]=t}c[(c[Z+32>>2]|0)+(i<<2)>>2]=m;i=(c[Z+24>>2]|0)+1|0;c[Z+24>>2]=i;o=o+1|0}while((o|0)!=(e|0));if(!h){i=1;D=3402823466385288598117041.0e14;x=-3402823466385288598117041.0e14;A=3402823466385288598117041.0e14;v=-3402823466385288598117041.0e14;y=3402823466385288598117041.0e14;r=-3402823466385288598117041.0e14}else{E=3402823466385288598117041.0e14;D=3402823466385288598117041.0e14;F=-3402823466385288598117041.0e14;x=-3402823466385288598117041.0e14;K=3402823466385288598117041.0e14;A=3402823466385288598117041.0e14;L=-3402823466385288598117041.0e14;v=-3402823466385288598117041.0e14;N=3402823466385288598117041.0e14;y=3402823466385288598117041.0e14;P=-3402823466385288598117041.0e14;r=-3402823466385288598117041.0e14;o=0;while(1){z=+g[Y+(o<<4)>>2];d=zF;x=n?z:x;I=+g[Y+(o<<4)+4>>2];i=IL;v=k?I:v;M=+g[Y+(o<<4)+8>>2];j=MP;r=m?M:r;o=o+1|0;if((o|0)==(h|0))break;else{E=d?z:E;F=n?z:F;K=i?I:K;L=k?I:L;N=j?M:N;P=m?M:P}}i=h>>>0<3}z=x-D;v=v-A;E=r-y;if(!(i|(z<9.999999974752427e-07|v<9.999999974752427e-07|E<9.999999974752427e-07))){if(h|0){U=h;r=J;W=52;break}break}D=D+z*.5;A=A+v*.5;y=y+E*.5;x=z>=9.999999974752427e-07&z<3402823466385288598117041.0e14?z:3402823466385288598117041.0e14;x=v>=9.999999974752427e-07&v=9.999999974752427e-07&E>2]=x;g[Y+4>>2]=r;g[Y+8>>2]=y;g[Y+16>>2]=E;g[Y+20>>2]=r;g[Y+24>>2]=y;g[Y+32>>2]=E;g[Y+36>>2]=F;g[Y+40>>2]=y;g[Y+48>>2]=x;g[Y+52>>2]=F;g[Y+56>>2]=y;g[Y+64>>2]=x;g[Y+68>>2]=r;g[Y+72>>2]=z;g[Y+80>>2]=E;g[Y+84>>2]=r;g[Y+88>>2]=z;g[Y+96>>2]=E;g[Y+100>>2]=F;g[Y+104>>2]=z;g[Y+112>>2]=x;g[Y+116>>2]=F;g[Y+120>>2]=z;U=8;s=I;r=J;W=52}if((W|0)==52){h=0;do{V=Y+(h<<4)|0;g[V>>2]=s*+g[V>>2];V=Y+(h<<4)+4|0;g[V>>2]=r*+g[V>>2];V=Y+(h<<4)+8|0;g[V>>2]=p*+g[V>>2];h=h+1|0}while(h>>>0>>0);if((U|0)>=4){p=+g[Y>>2];s=+g[Y+4>>2];r=+g[Y+8>>2];V=U<<2;c[6472]=(c[6472]|0)+1;h=ic((V|3)+16|0)|0;if(!h)j=0;else{c[(h+4+15&-16)+-4>>2]=h;j=h+4+15&-16}c[Z+48>>2]=0;c[6472]=(c[6472]|0)+1;i=ic((V|3)+16|0)|0;if(i){c[(i+4+15&-16)+-4>>2]=i;h=c[Z+48>>2]|0;if(!h)h=i+4+15&-16;else{c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);h=i+4+15&-16}}else h=0;c[Z+48>>2]=h;o=j;q=j;t=0;h=U;x=p;y=r;z=s;v=p;p=s;m=U;n=j;while(1){if((t|0)==(h|0)?(G=t|0?t<<1:1,(t|0)<(G|0)):0){if((G|0)!=0?(c[6472]=(c[6472]|0)+1,u=ic((G<<2|3)+16|0)|0,(u|0)!=0):0){c[(u+4+15&-16)+-4>>2]=u;j=u+4+15&-16}else j=0;i=c[Z+48>>2]|0;if((t|0)<=0){if(i|0)W=68}else{h=0;do{c[j+(h<<2)>>2]=c[i+(h<<2)>>2];h=h+1|0}while((h|0)!=(t|0));W=68}if((W|0)==68){W=0;c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);c[Z+48>>2]=0}c[Z+48>>2]=j;k=G}else k=h;c[(c[Z+48>>2]|0)+(t<<2)>>2]=1;d=t;t=t+1|0;do if((d|0)==(m|0)){i=d|0?d<<1:1;if((d|0)<(i|0)){if((i|0)!=0?(c[6472]=(c[6472]|0)+1,w=ic((i<<2|3)+16|0)|0,(w|0)!=0):0){c[(w+4+15&-16)+-4>>2]=w;j=w+4+15&-16}else j=0;if((d|0)>0){h=0;do{c[j+(h<<2)>>2]=c[n+(h<<2)>>2];h=h+1|0}while((h|0)!=(d|0));if(!q){o=j;h=j;n=j;break}}else if((n|0)==0|(q|0)==0){o=j;h=j;n=j;break}c[6473]=(c[6473]|0)+1;nd(c[q+-4>>2]|0);o=j;h=j;n=j}else{h=q;i=d}}else{h=q;i=m}while(0);c[n+(d<<2)>>2]=0;M=+g[Y+(d<<4)>>2];v=M>2];p=N>2];r=P=(U|0))break;else{q=h;h=k;m=i}}P=x-v;x=z-p;L=y-r;L=+C(+(P*P+x*x+L*L))*1.0000000474974513e-03;Q=He(Y,U,.009999999776482582,.019999999552965164,1.0,c[Z+48>>2]|0)|0;m=c[Z+48>>2]|0;R=He(Y,U,-.009999999776482582,-.019999999552965164,-1.0,m)|0;q=Y+(Q<<4)|0;w=Y+(R<<4)|0;x=+g[q>>2]-+g[w>>2];G=Y+(Q<<4)+4|0;H=Y+(R<<4)+4|0;z=+g[G>>2]-+g[H>>2];t=Y+(Q<<4)+8|0;u=Y+(R<<4)+8|0;y=+g[t>>2]-+g[u>>2];b:do if((Q|0)!=(R|0)?!(y==0.0&z==0.0&x==0.0):0){r=+C(+((y*.019999999552965164-z*0.0)*(y*.019999999552965164-z*0.0)+(x*0.0-y)*(x*0.0-y)+(z-x*.019999999552965164)*(z-x*.019999999552965164)));p=+C(+((y-z*0.0)*(y-z*0.0)+(y*.019999999552965164+x*0.0)*(y*.019999999552965164+x*0.0)+(z*-.019999999552965164-x)*(z*-.019999999552965164-x)));if(r>p){s=(y*.019999999552965164-z*0.0)*(1.0/r);v=(x*0.0-y)*(1.0/r);p=(z-x*.019999999552965164)*(1.0/r)}else{s=(y-z*0.0)*(1.0/p);v=(y*.019999999552965164+x*0.0)*(1.0/p);p=(z*-.019999999552965164-x)*(1.0/p)}h=He(Y,U,s,v,p,m)|0;if((h|0)==(Q|0)|(h|0)==(R|0))k=He(Y,U,-s,-v,-p,m)|0;else k=h;if(!((k|0)==(Q|0)|(k|0)==(R|0))){i=Y+(k<<4)|0;r=+g[i>>2]-+g[q>>2];d=Y+(k<<4)+4|0;v=+g[d>>2]-+g[G>>2];j=Y+(k<<4)+8|0;s=+g[j>>2]-+g[t>>2];p=1.0/+C(+((z*r-v*x)*(z*r-v*x)+((v*y-s*z)*(v*y-s*z)+(s*x-y*r)*(s*x-y*r))));h=He(Y,U,(v*y-s*z)*p,(s*x-y*r)*p,(z*r-v*x)*p,m)|0;if((h|0)==(k|0)|((h|0)==(Q|0)|(h|0)==(R|0)))h=He(Y,U,-((v*y-s*z)*p),-((s*x-y*r)*p),-((z*r-v*x)*p),m)|0;if(!((h|0)==(k|0)|((h|0)==(Q|0)|(h|0)==(R|0)))?(E=+g[q>>2],J=+g[G>>2],D=+g[t>>2],N=+g[w>>2]-E,F=+g[H>>2]-J,K=+g[u>>2]-D,M=+g[i>>2]-E,I=+g[d>>2]-J,P=+g[j>>2]-D,S=(+g[Y+(h<<4)+8>>2]-D)*(N*I-F*M)+((+g[Y+(h<<4)>>2]-E)*(F*P-K*I)+(+g[Y+(h<<4)+4>>2]-J)*(K*M-N*P))<0.0,T=S?k:h,S=S?h:k,(Q|0)!=-1):0){I=(+g[Y+(Q<<4)>>2]+ +g[Y+(R<<4)>>2]+ +g[Y+(S<<4)>>2]+ +g[Y+(T<<4)>>2])*.25;J=(+g[Y+(Q<<4)+4>>2]+ +g[Y+(R<<4)+4>>2]+ +g[Y+(S<<4)+4>>2]+ +g[Y+(T<<4)+4>>2])*.25;K=(+g[Y+(Q<<4)+8>>2]+ +g[Y+(R<<4)+8>>2]+ +g[Y+(S<<4)+8>>2]+ +g[Y+(T<<4)+8>>2])*.25;h=Ah(Z,S,T,R)|0;c[h+12>>2]=2;c[h+16>>2]=3;c[h+20>>2]=1;h=Ah(Z,T,S,Q)|0;c[h+12>>2]=3;c[h+16>>2]=2;c[h+20>>2]=0;h=Ah(Z,Q,R,T)|0;c[h+12>>2]=0;c[h+16>>2]=1;c[h+20>>2]=3;h=Ah(Z,R,Q,S)|0;c[h+12>>2]=1;c[h+16>>2]=0;c[h+20>>2]=2;c[n+(T<<2)>>2]=1;c[n+(S<<2)>>2]=1;c[n+(R<<2)>>2]=1;c[n+(Q<<2)>>2]=1;h=c[Z+4>>2]|0;if((h|0)>0){i=c[Z+12>>2]|0;j=0;do{h=c[i+(j<<2)>>2]|0;S=c[h>>2]|0;R=c[h+4>>2]|0;T=c[h+8>>2]|0;x=+g[Y+(R<<4)>>2];v=x-+g[Y+(S<<4)>>2];z=+g[Y+(R<<4)+4>>2];y=z-+g[Y+(S<<4)+4>>2];r=+g[Y+(R<<4)+8>>2];p=r-+g[Y+(S<<4)+8>>2];x=+g[Y+(T<<4)>>2]-x;z=+g[Y+(T<<4)+4>>2]-z;r=+g[Y+(T<<4)+8>>2]-r;s=+C(+((v*z-y*x)*(v*z-y*x)+((y*r-p*z)*(y*r-p*z)+(p*x-v*r)*(p*x-v*r))));if(s==0.0){A=1.0;r=0.0;p=0.0}else{A=1.0/s*(y*r-p*z);r=1.0/s*(p*x-v*r);p=1.0/s*(v*z-y*x)}S=He(Y,U,A,r,p,c[Z+48>>2]|0)|0;c[h+28>>2]=S;T=c[h>>2]|0;g[h+32>>2]=(+g[Y+(S<<4)>>2]-+g[Y+(T<<4)>>2])*A+(+g[Y+(S<<4)+4>>2]-+g[Y+(T<<4)+4>>2])*r+(+g[Y+(S<<4)+8>>2]-+g[Y+(T<<4)+8>>2])*p;j=j+1|0;h=c[Z+4>>2]|0}while((j|0)<(h|0))}if((e+-4|0)>0){t=e+-4|0;while(1){k=c[Z+12>>2]|0;d=0;j=0;while(1){i=c[k+(d<<2)>>2]|0;do if(j){if(!i){i=j;break}if(!(+g[j+32>>2]<+g[i+32>>2]))i=j;else W=104}else W=104;while(0);if((W|0)==104)W=0;d=d+1|0;if((d|0)>=(h|0))break;else j=i}if((i|0)==0?1:!(+g[i+32>>2]>L)){i=1;break b}q=c[i+28>>2]|0;c[n+(q<<2)>>2]=1;h=c[Z+4>>2]|0;c:do if(h|0){j=Y+(q<<4)|0;m=Y+(q<<4)+4|0;d=Y+(q<<4)+8|0;i=k;while(1){h=h+-1|0;i=c[i+(h<<2)>>2]|0;do if(i|0){T=c[i>>2]|0;S=c[i+4>>2]|0;e=c[i+8>>2]|0;s=+g[Y+(S<<4)>>2];A=+g[Y+(T<<4)>>2];v=+g[Y+(S<<4)+4>>2];D=+g[Y+(T<<4)+4>>2];p=+g[Y+(S<<4)+8>>2];E=+g[Y+(T<<4)+8>>2];y=+g[Y+(e<<4)>>2]-s;z=+g[Y+(e<<4)+4>>2]-v;r=+g[Y+(e<<4)+8>>2]-p;x=+C(+(((s-A)*z-(v-D)*y)*((s-A)*z-(v-D)*y)+(((v-D)*r-(p-E)*z)*((v-D)*r-(p-E)*z)+((p-E)*y-(s-A)*r)*((p-E)*y-(s-A)*r))));if(x==0.0){F=1.0;r=0.0;p=0.0}else{F=1.0/x*((v-D)*r-(p-E)*z);r=1.0/x*((p-E)*y-(s-A)*r);p=1.0/x*((s-A)*z-(v-D)*y)}if(!(F*(+g[j>>2]-A)+r*(+g[m>>2]-D)+p*(+g[d>>2]-E)>L*.009999999776482582))break;ce(Z,i,q)}while(0);if(!h)break;i=c[Z+12>>2]|0}i=c[Z+4>>2]|0;if(!i)break;else h=i;d:do{i=i+-1|0;k=c[Z+12>>2]|0;m=c[k+(i<<2)>>2]|0;do if(m){d=c[m>>2]|0;do if((d|0)!=(q|0)){j=c[m+4>>2]|0;if((j|0)==(q|0)){j=q;break}if((c[m+8>>2]|0)!=(q|0))break d}else j=c[m+4>>2]|0;while(0);e=c[m+8>>2]|0;A=+g[Y+(j<<4)>>2];E=+g[Y+(d<<4)>>2];D=+g[Y+(j<<4)+4>>2];F=+g[Y+(d<<4)+4>>2];r=+g[Y+(j<<4)+8>>2];x=+g[Y+(d<<4)+8>>2];s=+g[Y+(e<<4)>>2]-A;v=+g[Y+(e<<4)+4>>2]-D;p=+g[Y+(e<<4)+8>>2]-r;y=+C(+(((A-E)*v-(D-F)*s)*((A-E)*v-(D-F)*s)+(((D-F)*p-(r-x)*v)*((D-F)*p-(r-x)*v)+((r-x)*s-(A-E)*p)*((r-x)*s-(A-E)*p))));if(y==0.0){z=1.0;r=0.0;p=0.0}else{z=1.0/y*((D-F)*p-(r-x)*v);r=1.0/y*((r-x)*s-(A-E)*p);p=1.0/y*((A-E)*v-(D-F)*s)}if(!(yL*.009999999776482582))break;ce(Z,c[k+(c[m+12>>2]<<2)>>2]|0,q);i=c[Z+4>>2]|0;h=i}while(0)}while((i|0)!=0);if(!h)break;d=c[Z+12>>2]|0;do{h=h+-1|0;j=c[d+(h<<2)>>2]|0;do if(j|0){if((c[j+28>>2]|0)>-1)break c;T=c[j>>2]|0;S=c[j+4>>2]|0;e=c[j+8>>2]|0;x=+g[Y+(S<<4)>>2];v=x-+g[Y+(T<<4)>>2];z=+g[Y+(S<<4)+4>>2];y=z-+g[Y+(T<<4)+4>>2];r=+g[Y+(S<<4)+8>>2];p=r-+g[Y+(T<<4)+8>>2];x=+g[Y+(e<<4)>>2]-x;z=+g[Y+(e<<4)+4>>2]-z;r=+g[Y+(e<<4)+8>>2]-r;s=+C(+((v*z-y*x)*(v*z-y*x)+((y*r-p*z)*(y*r-p*z)+(p*x-v*r)*(p*x-v*r))));if(s==0.0){A=1.0;r=0.0;p=0.0}else{A=1.0/s*(y*r-p*z);r=1.0/s*(p*x-v*r);p=1.0/s*(v*z-y*x)}i=He(Y,U,A,r,p,c[Z+48>>2]|0)|0;c[j+28>>2]=i;if(!(c[n+(i<<2)>>2]|0)){e=c[j>>2]|0;g[j+32>>2]=(+g[Y+(i<<4)>>2]-+g[Y+(e<<4)>>2])*A+(+g[Y+(i<<4)+4>>2]-+g[Y+(e<<4)+4>>2])*r+(+g[Y+(i<<4)+8>>2]-+g[Y+(e<<4)+8>>2])*p;break}else{c[j+28>>2]=-1;break}}while(0)}while((h|0)!=0)}while(0);if((t|0)<=1){i=1;break b}h=c[Z+4>>2]|0;t=t+-1|0}}else i=1}else i=0}else i=0}else i=0;while(0);h=c[Z+48>>2]|0;if(h|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);c[Z+48>>2]=0}if(!((n|0)==0|(o|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[o+-4>>2]|0)}if(i){h=c[Z+4>>2]|0;if((h|0)>0){i=c[Z+12>>2]|0;m=0;j=0;t=0;o=0;G=0;u=0;d=0;k=0;while(1){q=c[i+(G<<2)>>2]|0;if(!q)n=u;else{do if((k|0)==(u|0)){n=u|0?u<<1:1;if((u|0)>=(n|0)){w=o;h=t;n=u;break}do if(!n)i=0;else{c[6472]=(c[6472]|0)+1;h=ic((n<<2|3)+16|0)|0;if(!h){i=0;break}c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}while(0);if((u|0)>0){h=0;do{c[i+(h<<2)>>2]=c[d+(h<<2)>>2];h=h+1|0}while((h|0)!=(u|0));if(!m){w=i;j=i;h=i;m=i;d=i;break}}else if((d|0)==0|(m|0)==0){w=i;j=i;h=i;m=i;d=i;break}c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);w=i;j=i;h=i;m=i;d=i}else{w=o;h=t;n=u}while(0);c[d+(k<<2)>>2]=c[q>>2];t=k+1|0;q=(c[(c[Z+12>>2]|0)+(G<<2)>>2]|0)+4|0;do if((t|0)==(n|0)){o=n|0?n<<1:1;if((n|0)>=(o|0)){u=h;h=w;break}do if(!o)i=0;else{c[6472]=(c[6472]|0)+1;h=ic((o<<2|3)+16|0)|0;if(!h){i=0;break}c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}while(0);if((n|0)>0){h=0;do{c[i+(h<<2)>>2]=c[d+(h<<2)>>2];h=h+1|0}while((h|0)!=(n|0));if(!w){u=i;j=i;h=i;m=i;n=o;d=i;break}}else if((d|0)==0|(w|0)==0){u=i;j=i;h=i;m=i;n=o;d=i;break}c[6473]=(c[6473]|0)+1;nd(c[w+-4>>2]|0);u=i;j=i;h=i;m=i;n=o;d=i}else{u=h;h=w}while(0);c[d+(t<<2)>>2]=c[q>>2];t=k+2|0;q=(c[(c[Z+12>>2]|0)+(G<<2)>>2]|0)+8|0;do if((t|0)==(n|0)){o=n|0?n<<1:1;if((n|0)>=(o|0)){w=h;break}do if(!o)i=0;else{c[6472]=(c[6472]|0)+1;h=ic((o<<2|3)+16|0)|0;if(!h){i=0;break}c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}while(0);if((n|0)>0){h=0;do{c[i+(h<<2)>>2]=c[d+(h<<2)>>2];h=h+1|0}while((h|0)!=(n|0));if(!u){j=i;u=i;w=i;m=i;n=o;d=i;break}}else if((d|0)==0|(u|0)==0){j=i;u=i;w=i;m=i;n=o;d=i;break}c[6473]=(c[6473]|0)+1;nd(c[u+-4>>2]|0);j=i;u=i;w=i;m=i;n=o;d=i}else w=h;while(0);c[d+(t<<2)>>2]=c[q>>2];i=c[Z+12>>2]|0;h=c[i+(G<<2)>>2]|0;c[i+(c[h+24>>2]<<2)>>2]=0;if(h|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}h=c[Z+4>>2]|0;t=u;o=w;k=k+3|0}G=G+1|0;if((G|0)>=(h|0))break;else u=n}c[Z+44>>2]=(k|0)/3|0;if((k|0)>0){c[6472]=(c[6472]|0)+1;h=ic((k<<2|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}Nk(i|0,0,k<<2|0)|0;h=0;do{c[i+(h<<2)>>2]=c[d+(h<<2)>>2];h=h+1|0}while((h|0)!=(k|0));m=j;T=i;h=i}else{m=j;T=0;h=0}}else{c[Z+44>>2]=0;m=0;T=0;h=0;d=0;k=0}i=c[Z+4>>2]|0;if((i|0)<0){if((c[Z+8>>2]|0)<0){j=c[Z+12>>2]|0;if(j|0){if(a[Z+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[j+-4>>2]|0)}c[Z+12>>2]=0}a[Z+16>>0]=1;c[Z+12>>2]=0;c[Z+8>>2]=0}do{c[(c[Z+12>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)!=0)}c[Z+4>>2]=0;if(!((d|0)==0|(m|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0)}S=c[Z+44>>2]|0;m=(U|0)>0;if(m){c[6472]=(c[6472]|0)+1;i=ic((U<<4|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=0;do{e=j+(i<<4)|0;c[e>>2]=c[Z+48>>2];c[e+4>>2]=c[Z+48+4>>2];c[e+8>>2]=c[Z+48+8>>2];c[e+12>>2]=c[Z+48+12>>2];i=i+1|0}while((i|0)!=(U|0));R=j;Q=j}else{R=0;Q=0}j=c[Z+24>>2]|0;do if((j|0)>0){c[6472]=(c[6472]|0)+1;i=ic((j<<2|3)+16|0)|0;if(!i)d=0;else{c[(i+4+15&-16)+-4>>2]=i;d=i+4+15&-16}Nk(d|0,0,j<<2|0)|0;if((c[Z+24>>2]|0)<=0){H=d;G=d;break}i=c[Z+32>>2]|0;j=0;do{c[d+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)<(c[Z+24>>2]|0));H=d;G=d}else{H=0;G=0}while(0);if(m){c[6472]=(c[6472]|0)+1;i=ic((V|3)+16|0)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}Nk(i|0,0,V|0)|0;u=i;t=i}else{u=0;t=0}Nk(u|0,0,V|0)|0;if((S|0)<=0)if(!t)w=0;else{i=0;W=225}else{o=c[Z+32>>2]|0;q=0;i=0;do{d=h+(q<<2)|0;m=c[d>>2]|0;n=t+(m<<2)|0;j=c[n>>2]|0;if(!j){c[d>>2]=i;c[Q+(i<<4)>>2]=c[Y+(m<<4)>>2];c[Q+(i<<4)+4>>2]=c[Y+(m<<4)+4>>2];c[Q+(i<<4)+8>>2]=c[Y+(m<<4)+8>>2];j=c[Z+24>>2]|0;if((j|0)>0){d=0;do{if((c[G+(d<<2)>>2]|0)==(m|0))c[o+(d<<2)>>2]=i;d=d+1|0}while((d|0)!=(j|0))}i=i+1|0;c[n>>2]=i}else c[d>>2]=j+-1;q=q+1|0}while((q|0)!=(S*3|0));W=225}do if((W|0)==225){if(!u){w=i;break}c[6473]=(c[6473]|0)+1;nd(c[u+-4>>2]|0);w=i}while(0);if(!((G|0)==0|(H|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[H+-4>>2]|0)}if((w|0)>0){c[6472]=(c[6472]|0)+1;i=ic((w<<4|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=0;do{W=j+(i<<4)|0;c[W>>2]=c[Z+48>>2];c[W+4>>2]=c[Z+48+4>>2];c[W+8>>2]=c[Z+48+8>>2];c[W+12>>2]=c[Z+48+12>>2];i=i+1|0}while((i|0)!=(w|0));d=j;m=j}else{d=0;m=0}if((S|0)>0){c[6472]=(c[6472]|0)+1;i=ic((S*12|3)+16|0)|0;if(!i)j=0;else{c[(i+4+15&-16)+-4>>2]=i;j=i+4+15&-16}i=c[Z+40>>2]|0;if(i|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[Z+40>>2]=j;Nk(j|0,0,S*12|0)|0}_h(d|0,R|0,w<<4|0)|0;_h(c[Z+40>>2]|0,T|0,S*12|0)|0;do if(k){if(!h){h=0;break}c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);h=0}while(0);if((Q|0)==0|(R|0)==0){q=m;t=S;u=S*3|0;break}c[6473]=(c[6473]|0)+1;nd(c[R+-4>>2]|0);q=m;t=S;u=S*3|0;break}}}h=0;w=0;q=0;t=0;u=0}while(0);if(!((Y|0)==0|(X|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[X+-4>>2]|0)}if(h|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[6472]=(c[6472]|0)+1;h=ic(1271)|0;if(!h)G=0;else{c[(h+4+15&-16)+-4>>2]=h;G=h+4+15&-16}qc(G,b,w,q,0);if((t|0)>0){m=G+720|0;o=G+732|0;n=G+740|0;h=G+924|0;k=0;do{d=k*3|0;b=c[Z+40>>2]|0;i=c[b+(d<<2)>>2]|0;j=c[b+(d+1<<2)>>2]|0;d=c[b+(d+2<<2)>>2]|0;if((i|0)<(j|0)){X=c[m>>2]|0;Rh(G,0);b=(c[o>>2]|0)+-1|0;Y=c[n>>2]|0;c[Y+(b*52|0)+8>>2]=X+(i*104|0);c[Y+(b*52|0)+12>>2]=X+(j*104|0);M=+g[X+(i*104|0)+8>>2]-+g[X+(j*104|0)+8>>2];N=+g[X+(i*104|0)+12>>2]-+g[X+(j*104|0)+12>>2];P=+g[X+(i*104|0)+16>>2]-+g[X+(j*104|0)+16>>2];g[Y+(b*52|0)+16>>2]=+C(+(M*M+N*N+P*P));a[h>>0]=1}if((j|0)<(d|0)){X=c[m>>2]|0;Rh(G,0);b=(c[o>>2]|0)+-1|0;Y=c[n>>2]|0;c[Y+(b*52|0)+8>>2]=X+(j*104|0);c[Y+(b*52|0)+12>>2]=X+(d*104|0);M=+g[X+(j*104|0)+8>>2]-+g[X+(d*104|0)+8>>2];N=+g[X+(j*104|0)+12>>2]-+g[X+(d*104|0)+12>>2];P=+g[X+(j*104|0)+16>>2]-+g[X+(d*104|0)+16>>2];g[Y+(b*52|0)+16>>2]=+C(+(M*M+N*N+P*P));a[h>>0]=1}if((d|0)<(i|0)){X=c[m>>2]|0;Rh(G,0);b=(c[o>>2]|0)+-1|0;Y=c[n>>2]|0;c[Y+(b*52|0)+8>>2]=X+(d*104|0);c[Y+(b*52|0)+12>>2]=X+(i*104|0);M=+g[X+(d*104|0)+8>>2]-+g[X+(i*104|0)+8>>2];N=+g[X+(d*104|0)+12>>2]-+g[X+(i*104|0)+12>>2];P=+g[X+(d*104|0)+16>>2]-+g[X+(i*104|0)+16>>2];g[Y+(b*52|0)+16>>2]=+C(+(M*M+N*N+P*P));a[h>>0]=1}Qf(G,i,j,d,0);k=k+1|0}while((k|0)!=(t|0))}if(w)if(!q)t=0;else{c[6473]=(c[6473]|0)+1;nd(c[q+-4>>2]|0);t=0}else t=q;if(u|0){h=c[Z+40>>2]|0;if(h|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);c[Z+40>>2]=0}c[Z+40>>2]=0}if(f){i=c[G+732>>2]|0;if((i|0)>0){m=G+740|0;k=0;h=243703;do{j=c[m>>2]|0;d=j+(k*52|0)|0;h=(O(h,1664525)|0)+1013904223|0;n=Z+48|0;o=d;q=n+52|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(q|0));n=d;o=j+(((h>>>0)%(i>>>0)|0)*52|0)|0;q=n+52|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(q|0));n=j+(((h>>>0)%(i>>>0)|0)*52|0)|0;o=Z+48|0;q=n+52|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(q|0));k=k+1|0}while((k|0)!=(i|0))}else h=243703;d=c[G+752>>2]|0;if((d|0)>0){m=G+760|0;k=0;do{i=c[m>>2]|0;j=i+(k*44|0)|0;h=(O(h,1664525)|0)+1013904223|0;i=i+(((h>>>0)%(d>>>0)|0)*44|0)|0;n=Z+48|0;o=j;q=n+44|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(q|0));n=j;o=i;q=n+44|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(q|0));n=i;o=Z+48|0;q=n+44|0;do{c[n>>2]=c[o>>2];n=n+4|0;o=o+4|0}while((n|0)<(q|0));k=k+1|0}while((k|0)!=(d|0))}}h=c[Z+32>>2]|0;if(h|0){if(a[Z+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[Z+32>>2]=0}a[Z+36>>0]=1;c[Z+32>>2]=0;c[Z+24>>2]=0;c[Z+28>>2]=0;h=c[Z+12>>2]|0;if(h|0){if(a[Z+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[Z+12>>2]=0}h=c[Z+40>>2]|0;if(h|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0);c[Z+40>>2]=0}c[Z+40>>2]=0;if(!t){l=Z;return G|0}c[6473]=(c[6473]|0)+1;nd(c[t+-4>>2]|0);l=Z;return G|0}function $b(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,k=0.0,m=0,n=0,o=0.0,p=0.0,q=0.0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0,z=0.0,A=0.0,C=0.0,D=0.0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0.0,P=0.0,Q=0.0,R=0.0;M=l;l=l+16|0;f=c[b+1112>>2]|0;a:do if((f|0)>0)while(1){n=c[c[b+1120>>2]>>2]|0;f=c[n+348>>2]|0;if(f|0){Sg(b+1048|0,f)|0;h=c[b+1052>>2]|0;if(h|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+1052>>2]=f;c[b+1060>>2]=(c[b+1060>>2]|0)+-1}f=c[n+52>>2]|0;if(f|0){if(a[n+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[n+52>>2]=0}a[n+56>>0]=1;c[n+52>>2]=0;c[n+44>>2]=0;c[n+48>>2]=0;f=c[n+32>>2]|0;if(f|0){if(a[n+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[n+32>>2]=0}a[n+36>>0]=1;c[n+32>>2]=0;c[n+24>>2]=0;c[n+28>>2]=0;f=c[n+12>>2]|0;if(f|0){if(a[n+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[n+12>>2]=0}a[n+16>>0]=1;c[n+12>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[n+-4>>2]|0);f=c[b+1112>>2]|0;if((f|0)<=0){n=f;break a}m=c[b+1120>>2]|0;h=0;do{i=m+(h<<2)|0;if((c[i>>2]|0)==(n|0)){L=24;break}h=h+1|0}while((h|0)<(f|0));if((L|0)==24){L=0;if((h|0)<(f|0)){c[i>>2]=c[m+(f+-1<<2)>>2];c[(c[b+1120>>2]|0)+(f+-1<<2)>>2]=n;c[b+1112>>2]=f+-1;f=f+-1|0}}if((f|0)<=0){n=f;break}}else n=f;while(0);f=c[b+712>>2]|0;f=(f|0)>(d|0)?d:f;if((n|0)<(f|0)){if((c[b+1116>>2]|0)<(f|0)){if(f){c[6472]=(c[6472]|0)+1;h=ic((f<<2|3)+16|0)|0;if(!h)m=0;else{c[(h+4+15&-16)+-4>>2]=h;m=h+4+15&-16}h=c[b+1112>>2]|0;if((h|0)>0){i=0;do{c[m+(i<<2)>>2]=c[(c[b+1120>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(h|0));i=b+1120|0}else i=b+1120|0}else{i=b+1120|0;m=0}h=c[i>>2]|0;if(h|0){if(a[b+1124>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[i>>2]=0}a[b+1124>>0]=1;c[i>>2]=m;c[b+1116>>2]=f}else i=b+1120|0;h=n;do{c[(c[i>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)!=(f|0))}c[b+1112>>2]=f;if((f|0)>0){h=0;do{c[6472]=(c[6472]|0)+1;f=ic(403)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}a[f+16>>0]=1;c[f+12>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;a[f+36>>0]=1;c[f+32>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;a[f+56>>0]=1;c[f+52>>2]=0;c[f+44>>2]=0;c[f+48>>2]=0;i=f+348|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[i+16>>2]=0;g[f+368>>2]=100.0;g[f+372>>2]=.009999999776482582;a[f+376>>0]=0;c[(c[b+1120>>2]|0)+(h<<2)>>2]=f;i=c[b+1120>>2]|0;a[(c[i+(h<<2)>>2]|0)+377>>0]=1;h=h+1|0;f=c[b+1112>>2]|0}while((h|0)<(f|0));if((f|0)>0){h=c[b+712>>2]|0;if((h|0)>0){k=0.0;o=0.0;p=0.0;n=f;r=0;while(1){d=c[b+720>>2]|0;q=k+ +g[d+(r*104|0)+8>>2];y=o+ +g[d+(r*104|0)+12>>2];z=p+ +g[d+(r*104|0)+16>>2];n=c[i+(((r*29873|0)%(n|0)|0)<<2)>>2]|0;d=d+(r*104|0)|0;i=c[n+24>>2]|0;if((i|0)==(c[n+28>>2]|0)?(s=i|0?i<<1:1,(i|0)<(s|0)):0){if(!s){h=i;i=0}else{c[6472]=(c[6472]|0)+1;h=ic((s<<2|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=c[n+24>>2]|0}if((h|0)>0){m=0;do{c[i+(m<<2)>>2]=c[(c[n+32>>2]|0)+(m<<2)>>2];m=m+1|0}while((m|0)!=(h|0))}m=c[n+32>>2]|0;if(m){if(a[n+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);h=c[n+24>>2]|0}c[n+32>>2]=0}a[n+36>>0]=1;c[n+32>>2]=i;c[n+28>>2]=s;i=h;h=c[b+712>>2]|0}c[(c[n+32>>2]|0)+(i<<2)>>2]=d;c[n+24>>2]=i+1;m=r+1|0;if((m|0)>=(h|0))break;k=q;o=y;p=z;n=c[b+1112>>2]|0;i=c[b+1120>>2]|0;r=m}k=1.0/+(h|0);if((f|0)>=0)if(!f){f=0;o=q*k;p=y*k;k=z*k;i=0;L=70}else{o=q*k;p=y*k;k=z*k;L=68}else{I=0;H=0;G=b+720|0}}else{o=1.0/+(h|0)*0.0;p=1.0/+(h|0)*0.0;k=1.0/+(h|0)*0.0;L=68}if((L|0)==68){c[6472]=(c[6472]|0)+1;h=ic((f<<4|3)+16|0)|0;if(!h){i=0;L=70}else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16;L=70}}if((L|0)==70){h=0;do{g[i+(h<<4)>>2]=o;g[i+(h<<4)+4>>2]=p;g[i+(h<<4)+8>>2]=k;g[i+(h<<4)+12>>2]=0.0;h=h+1|0}while((h|0)!=(f|0));I=i;H=i;G=b+720|0}u=H+4|0;v=H+8|0;w=(f|0)>1;x=0;do{C=+(x|0)*.0625;C=2.0-(C>1.0?1.0:C);n=0;d=0;while(1){h=c[(c[b+1120>>2]|0)+(d<<2)>>2]|0;m=c[h+24>>2]|0;if((m|0)>0){h=c[h+32>>2]|0;k=0.0;o=0.0;p=0.0;i=0;do{t=c[h+(i<<2)>>2]|0;k=k+ +g[t+8>>2];o=o+ +g[t+12>>2];p=p+ +g[t+16>>2];i=i+1|0}while((i|0)!=(m|0))}else{k=0.0;o=0.0;p=0.0}if(!m)t=n;else{s=H+(d<<4)|0;y=+g[s>>2];t=H+(d<<4)+4|0;z=+g[t>>2];h=H+(d<<4)+8|0;A=+g[h>>2];q=y+C*(k*(1.0/+(m|0))-y);o=z+C*(o*(1.0/+(m|0))-z);k=A+C*(p*(1.0/+(m|0))-A);g[s>>2]=q;g[t>>2]=o;g[h>>2]=k;g[H+(d<<4)+12>>2]=0.0;m=c[(c[b+1120>>2]|0)+(d<<2)>>2]|0;h=c[m+24>>2]|0;if((h|0)<0){if((c[m+28>>2]|0)<0){i=c[m+32>>2]|0;if(i|0){if(a[m+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[m+32>>2]=0}a[m+36>>0]=1;c[m+32>>2]=0;c[m+28>>2]=0}do{c[(c[m+32>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)!=0)}c[m+24>>2]=0;t=n|(q-y)*(q-y)+(o-z)*(o-z)+(k-A)*(k-A)>1.1920928955078125e-07}d=d+1|0;if((d|0)>=(f|0))break;else n=t}x=x+1|0;h=c[b+712>>2]|0;b:do if((h|0)>0){if(w)s=0;else{r=0;while(1){n=c[c[b+1120>>2]>>2]|0;d=(c[G>>2]|0)+(r*104|0)|0;i=c[n+24>>2]|0;if((i|0)==(c[n+28>>2]|0)?(E=i|0?i<<1:1,(i|0)<(E|0)):0){if(!E){h=i;i=0}else{c[6472]=(c[6472]|0)+1;h=ic((E<<2|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=c[n+24>>2]|0}if((h|0)>0){m=0;do{c[i+(m<<2)>>2]=c[(c[n+32>>2]|0)+(m<<2)>>2];m=m+1|0}while((m|0)!=(h|0))}m=c[n+32>>2]|0;if(m){if(a[n+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);h=c[n+24>>2]|0}c[n+32>>2]=0}a[n+36>>0]=1;c[n+32>>2]=i;c[n+28>>2]=E;i=h;h=c[b+712>>2]|0}c[(c[n+32>>2]|0)+(i<<2)>>2]=d;c[n+24>>2]=i+1;r=r+1|0;if((r|0)>=(h|0))break b}}do{d=c[G>>2]|0;p=+g[d+(s*104|0)+8>>2];q=+g[d+(s*104|0)+12>>2];y=+g[d+(s*104|0)+16>>2];m=1;n=0;o=+B(+(+g[H>>2]-p))+ +B(+(+g[u>>2]-q))+ +B(+(+g[v>>2]-y));while(1){k=+B(+(+g[H+(m<<4)>>2]-p))+ +B(+(+g[H+(m<<4)+4>>2]-q))+ +B(+(+g[H+(m<<4)+8>>2]-y));i=k>2]|0)+(n<<2)>>2]|0;n=d+(s*104|0)|0;i=c[r+24>>2]|0;if((i|0)==(c[r+28>>2]|0)?(F=i|0?i<<1:1,(i|0)<(F|0)):0){if(!F){h=i;m=0}else{c[6472]=(c[6472]|0)+1;h=ic((F<<2|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=c[r+24>>2]|0;m=i}if((h|0)>0){i=0;do{c[m+(i<<2)>>2]=c[(c[r+32>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(h|0))}i=c[r+32>>2]|0;if(!i)i=h;else{if(a[r+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);h=c[r+24>>2]|0}c[r+32>>2]=0;i=h}a[r+36>>0]=1;c[r+32>>2]=m;c[r+28>>2]=F;h=c[b+712>>2]|0}c[(c[r+32>>2]|0)+(i<<2)>>2]=n;c[r+24>>2]=i+1;s=s+1|0}while((s|0)<(h|0))}while(0)}while((x|0)<(e|0)&t);if((h|0)>0){h=h<<2;c[6472]=(c[6472]|0)+1;f=ic((h|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}Nk(f|0,-1,h|0)|0;x=f;w=f}else{x=0;w=0}f=c[b+1112>>2]|0;if((f|0)>0){d=c[b+1120>>2]|0;n=0;do{m=c[d+(n<<2)>>2]|0;if((c[m+24>>2]|0)>0){h=c[G>>2]|0;f=c[m+32>>2]|0;i=0;do{c[w+((((c[f+(i<<2)>>2]|0)-h|0)/104|0)<<2)>>2]=n;i=i+1|0}while((i|0)<(c[m+24>>2]|0));f=c[b+1112>>2]|0}n=n+1|0}while((n|0)<(f|0))}if((c[b+752>>2]|0)>0){t=0;do{e=c[b+760>>2]|0;f=c[G>>2]|0;h=((c[e+(t*44|0)+8>>2]|0)-f|0)/104|0;c[M>>2]=h;c[M+4>>2]=((c[e+(t*44|0)+12>>2]|0)-f|0)/104|0;c[M+8>>2]=((c[e+(t*44|0)+16>>2]|0)-f|0)/104|0;f=0;while(1){d=c[w+(h<<2)>>2]|0;s=1;do{h=c[M+(((s+f|0)%3|0)<<2)>>2]|0;c:do if((c[w+(h<<2)>>2]|0)!=(d|0)){r=c[(c[b+1120>>2]|0)+(d<<2)>>2]|0;n=(c[G>>2]|0)+(h*104|0)|0;h=c[r+24>>2]|0;d:do if((h|0)>0){m=c[r+32>>2]|0;i=0;while(1){if((c[m+(i<<2)>>2]|0)==(n|0))break;i=i+1|0;if((i|0)>=(h|0))break d}if((i|0)!=(h|0))break c}while(0);if((h|0)==(c[r+28>>2]|0)?(J=h|0?h<<1:1,(h|0)<(J|0)):0){if(!J)i=0;else{c[6472]=(c[6472]|0)+1;h=ic((J<<2|3)+16|0)|0;if(!h)i=0;else{c[(h+4+15&-16)+-4>>2]=h;i=h+4+15&-16}h=c[r+24>>2]|0}if((h|0)>0){m=0;do{c[i+(m<<2)>>2]=c[(c[r+32>>2]|0)+(m<<2)>>2];m=m+1|0}while((m|0)!=(h|0))}m=c[r+32>>2]|0;if(m){if(a[r+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[m+-4>>2]|0);h=c[r+24>>2]|0}c[r+32>>2]=0}a[r+36>>0]=1;c[r+32>>2]=i;c[r+28>>2]=J}c[(c[r+32>>2]|0)+(h<<2)>>2]=n;c[r+24>>2]=h+1}while(0);s=s+1|0}while((s|0)!=3);f=f+1|0;if((f|0)>=3)break;h=c[M+(f<<2)>>2]|0}t=t+1|0}while((t|0)<(c[b+752>>2]|0));f=c[b+1112>>2]|0}if((f|0)>1){c[6472]=(c[6472]|0)+1;f=ic(403)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}a[f+16>>0]=1;c[f+12>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;r=f+36|0;a[r>>0]=1;t=f+32|0;c[t>>2]=0;u=f+24|0;c[u>>2]=0;s=f+28|0;c[s>>2]=0;a[f+56>>0]=1;c[f+52>>2]=0;c[f+44>>2]=0;c[f+48>>2]=0;v=f+348|0;c[v>>2]=0;c[v+4>>2]=0;c[v+8>>2]=0;c[v+12>>2]=0;c[v+16>>2]=0;g[f+368>>2]=100.0;g[f+372>>2]=.009999999776482582;a[f+376>>0]=0;v=f;a[f+377>>0]=0;m=c[b+712>>2]|0;if((m|0)>0){c[6472]=(c[6472]|0)+1;f=ic((m<<2|3)+16|0)|0;if(!f)i=0;else{c[(f+4+15&-16)+-4>>2]=f;i=f+4+15&-16}f=c[u>>2]|0;if((f|0)>0){h=0;do{c[i+(h<<2)>>2]=c[(c[t>>2]|0)+(h<<2)>>2];h=h+1|0}while((h|0)!=(f|0))}f=c[t>>2]|0;if(f|0){if(a[r>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[t>>2]=0}a[r>>0]=1;c[t>>2]=i;c[s>>2]=m;f=c[b+712>>2]|0;if((f|0)>0){i=c[u>>2]|0;h=m;d=0;do{n=(c[G>>2]|0)+(d*104|0)|0;do if((i|0)==(h|0)){m=h|0?h<<1:1;if((h|0)>=(m|0)){i=h;break}if(!m){f=h;h=0}else{c[6472]=(c[6472]|0)+1;f=ic((m<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[u>>2]|0}if((f|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[t>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0))}i=c[t>>2]|0;if(i){if(a[r>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);f=c[u>>2]|0}c[t>>2]=0}a[r>>0]=1;c[t>>2]=h;c[s>>2]=m;i=f;f=c[b+712>>2]|0;h=m}while(0);c[(c[t>>2]|0)+(i<<2)>>2]=n;i=i+1|0;c[u>>2]=i;d=d+1|0}while((d|0)<(f|0))}}f=c[b+1112>>2]|0;if((f|0)==(c[b+1116>>2]|0)?(K=f|0?f<<1:1,(f|0)<(K|0)):0){if(!K)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((K<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[b+1112>>2]|0}if((f|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[b+1120>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0))}i=c[b+1120>>2]|0;if(i){if(a[b+1124>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);f=c[b+1112>>2]|0}c[b+1120>>2]=0}a[b+1124>>0]=1;c[b+1120>>2]=h;c[b+1116>>2]=K}c[(c[b+1120>>2]|0)+(f<<2)>>2]=v;K=f+1|0;c[b+1112>>2]=K;e=c[b+1120>>2]|0;f=e+(f<<2)|0;J=c[e>>2]|0;c[e>>2]=c[f>>2];c[f>>2]=J;f=K}if((f|0)>0){h=0;do{d=c[(c[b+1120>>2]|0)+(h<<2)>>2]|0;e:do if(!(c[d+24>>2]|0)){h=h+-1|0;f=c[d+348>>2]|0;if(f|0){Sg(b+1048|0,f)|0;i=c[b+1052>>2]|0;if(i|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[b+1052>>2]=f;c[b+1060>>2]=(c[b+1060>>2]|0)+-1}f=c[d+52>>2]|0;if(f|0){if(a[d+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+52>>2]=0}a[d+56>>0]=1;c[d+52>>2]=0;c[d+44>>2]=0;c[d+48>>2]=0;f=c[d+32>>2]|0;if(f|0){if(a[d+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+32>>2]=0}a[d+36>>0]=1;c[d+32>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;f=c[d+12>>2]|0;if(f|0){if(a[d+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[d+12>>2]=0}a[d+16>>0]=1;c[d+12>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);f=c[b+1112>>2]|0;if((f|0)>0){n=c[b+1120>>2]|0;i=0;while(1){m=n+(i<<2)|0;if((c[m>>2]|0)==(d|0))break;i=i+1|0;if((i|0)>=(f|0))break e}if((i|0)>=(f|0))break;c[m>>2]=c[n+(f+-1<<2)>>2];c[(c[b+1120>>2]|0)+(f+-1<<2)>>2]=d;c[b+1112>>2]=f+-1;f=f+-1|0}}while(0);h=h+1|0}while((h|0)<(f|0))}if(!((w|0)==0|(x|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[x+-4>>2]|0)}if(!((H|0)==0|(I|0)==0)){c[6473]=(c[6473]|0)+1;nd(c[I+-4>>2]|0)}}else L=234}else L=234;f:do if((L|0)==234){n=c[b+772>>2]|0;if(n|0){if((f|0)<(n|0)){if((c[b+1116>>2]|0)<(n|0)){c[6472]=(c[6472]|0)+1;h=ic((n<<2|3)+16|0)|0;if(!h)m=0;else{c[(h+4+15&-16)+-4>>2]=h;m=h+4+15&-16}h=c[b+1112>>2]|0;if((h|0)>0){i=0;do{c[m+(i<<2)>>2]=c[(c[b+1120>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(h|0))}h=c[b+1120>>2]|0;if(h|0){if(a[b+1124>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[b+1120>>2]=0}a[b+1124>>0]=1;c[b+1120>>2]=m;c[b+1116>>2]=n;h=b+1120|0}else h=b+1120|0;do{c[(c[h>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)!=(n|0))}c[b+1112>>2]=n;if((n|0)>0){h=0;do{c[6472]=(c[6472]|0)+1;f=ic(403)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}a[f+16>>0]=1;c[f+12>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;a[f+36>>0]=1;c[f+32>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;a[f+56>>0]=1;c[f+52>>2]=0;c[f+44>>2]=0;c[f+48>>2]=0;L=f+348|0;c[L>>2]=0;c[L+4>>2]=0;c[L+8>>2]=0;c[L+12>>2]=0;c[L+16>>2]=0;g[f+368>>2]=100.0;g[f+372>>2]=.009999999776482582;a[f+376>>0]=0;c[(c[b+1120>>2]|0)+(h<<2)>>2]=f;a[(c[(c[b+1120>>2]|0)+(h<<2)>>2]|0)+377>>0]=1;h=h+1|0}while((h|0)<(c[b+1112>>2]|0))}if((c[b+772>>2]|0)<=0)break;d=0;while(1){r=0;do{m=c[(c[b+1120>>2]|0)+(d<<2)>>2]|0;n=(c[b+780>>2]|0)+(d*104|0)+8+(r<<2)|0;f=c[m+24>>2]|0;if((f|0)==(c[m+28>>2]|0)?(t=f|0?f<<1:1,(f|0)<(t|0)):0){if(!t)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((t<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[m+24>>2]|0}if((f|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[m+32>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0))}i=c[m+32>>2]|0;if(i){if(a[m+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);f=c[m+24>>2]|0}c[m+32>>2]=0}a[m+36>>0]=1;c[m+32>>2]=h;c[m+28>>2]=t}c[(c[m+32>>2]|0)+(f<<2)>>2]=c[n>>2];c[m+24>>2]=f+1;r=r+1|0}while((r|0)!=4);d=d+1|0;if((d|0)>=(c[b+772>>2]|0))break f}}d=c[b+752>>2]|0;if((f|0)<(d|0)){if((c[b+1116>>2]|0)<(d|0)){if(d){c[6472]=(c[6472]|0)+1;h=ic((d<<2|3)+16|0)|0;if(!h)n=0;else{c[(h+4+15&-16)+-4>>2]=h;n=h+4+15&-16}h=c[b+1112>>2]|0;if((h|0)>0){i=0;do{c[n+(i<<2)>>2]=c[(c[b+1120>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(h|0));m=b+1120|0;i=n}else{m=b+1120|0;i=n}}else{m=b+1120|0;i=0}h=c[m>>2]|0;if(h|0){if(a[b+1124>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}c[m>>2]=0}a[b+1124>>0]=1;c[m>>2]=i;c[b+1116>>2]=d}do{c[(c[b+1120>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)!=(d|0))}c[b+1112>>2]=d;if((d|0)>0){h=0;do{c[6472]=(c[6472]|0)+1;f=ic(403)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}a[f+16>>0]=1;c[f+12>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;a[f+36>>0]=1;c[f+32>>2]=0;c[f+24>>2]=0;c[f+28>>2]=0;a[f+56>>0]=1;c[f+52>>2]=0;c[f+44>>2]=0;c[f+48>>2]=0;L=f+348|0;c[L>>2]=0;c[L+4>>2]=0;c[L+8>>2]=0;c[L+12>>2]=0;c[L+16>>2]=0;g[f+368>>2]=100.0;g[f+372>>2]=.009999999776482582;a[f+376>>0]=0;c[(c[b+1120>>2]|0)+(h<<2)>>2]=f;a[(c[(c[b+1120>>2]|0)+(h<<2)>>2]|0)+377>>0]=1;h=h+1|0}while((h|0)<(c[b+1112>>2]|0))}if((c[b+752>>2]|0)>0){d=0;do{r=0;do{m=c[(c[b+1120>>2]|0)+(d<<2)>>2]|0;n=(c[b+760>>2]|0)+(d*44|0)+8+(r<<2)|0;f=c[m+24>>2]|0;if((f|0)==(c[m+28>>2]|0)?(u=f|0?f<<1:1,(f|0)<(u|0)):0){if(!u)h=0;else{c[6472]=(c[6472]|0)+1;f=ic((u<<2|3)+16|0)|0;if(!f)h=0;else{c[(f+4+15&-16)+-4>>2]=f;h=f+4+15&-16}f=c[m+24>>2]|0}if((f|0)>0){i=0;do{c[h+(i<<2)>>2]=c[(c[m+32>>2]|0)+(i<<2)>>2];i=i+1|0}while((i|0)!=(f|0))}i=c[m+32>>2]|0;if(i){if(a[m+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0);f=c[m+24>>2]|0}c[m+32>>2]=0}a[m+36>>0]=1;c[m+32>>2]=h;c[m+28>>2]=u}c[(c[m+32>>2]|0)+(f<<2)>>2]=c[n>>2];c[m+24>>2]=f+1;r=r+1|0}while((r|0)!=3);d=d+1|0}while((d|0)<(c[b+752>>2]|0))}}while(0);f=c[b+1112>>2]|0;if(!f){b=0;l=M;return b|0}if((f|0)>0){t=0;do{s=c[(c[b+1120>>2]|0)+(t<<2)>>2]|0;g[s+128>>2]=0.0;d=c[s+24>>2]|0;n=c[s+4>>2]|0;if((d|0)>(n|0)){do if((c[s+8>>2]|0)<(d|0)){if(!d){m=n;f=0}else{c[6472]=(c[6472]|0)+1;f=ic((d<<2|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}m=c[s+4>>2]|0}h=c[s+12>>2]|0;if((m|0)<=0){if(!h){a[s+16>>0]=1;c[s+12>>2]=f;c[s+8>>2]=d;break}}else{i=0;do{c[f+(i<<2)>>2]=c[h+(i<<2)>>2];i=i+1|0}while((i|0)!=(m|0))}if(a[s+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}a[s+16>>0]=1;c[s+12>>2]=f;c[s+8>>2]=d}else f=c[s+12>>2]|0;while(0);Nk(f+(n<<2)|0,0,d-n<<2|0)|0;m=c[s+24>>2]|0}else m=d;c[s+4>>2]=d;if((m|0)>0){f=c[s+32>>2]|0;h=c[s+12>>2]|0;i=0;do{k=+g[(c[f+(i<<2)>>2]|0)+88>>2];if(k==0.0){a[s+376>>0]=1;k=999999984306749440.0}else k=1.0/k;g[h+(i<<2)>>2]=k;o=k+ +g[s+128>>2];g[s+128>>2]=o;i=i+1|0}while((i|0)!=(m|0));g[s+128>>2]=1.0/o;f=c[s+32>>2]|0;h=c[s+12>>2]|0;p=0.0;q=0.0;k=0.0;i=0;do{L=c[f+(i<<2)>>2]|0;D=+g[h+(i<<2)>>2];p=p+ +g[L+8>>2]*D;k=k+D*+g[L+12>>2];q=q+D*+g[L+16>>2];i=i+1|0}while((i|0)!=(m|0));o=1.0/o}else{o=1.0/+g[s+128>>2];g[s+128>>2]=o;p=0.0;q=0.0;k=0.0}D=p*o;C=k*o;z=q*o;g[s+228>>2]=D;g[s+232>>2]=C;g[s+236>>2]=z;g[s+240>>2]=0.0;f=s+316|0;h=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));f=s+132|0;h=f+48|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));f=c[s+24>>2]|0;if((f|0)>0){h=c[s+32>>2]|0;i=c[s+12>>2]|0;y=+g[s+132>>2];p=+g[s+152>>2];k=0.0;q=+g[s+136>>2];o=+g[s+140>>2];A=+g[s+156>>2];m=0;do{L=c[h+(m<<2)>>2]|0;R=+g[L+8>>2]-D;P=+g[L+12>>2]-C;Q=+g[L+16>>2]-z;N=+g[i+(m<<2)>>2];y=y+N*(P*P+Q*Q);g[s+132>>2]=y;p=N*(R*R+Q*Q)+p;g[s+152>>2]=p;k=(R*R+P*P)*N+k;g[s+172>>2]=k;q=q-P*R*N;g[s+136>>2]=q;o=o-Q*R*N;g[s+140>>2]=o;A=A-Q*P*N;g[s+156>>2]=A;m=m+1|0}while((m|0)!=(f|0));r=(g[j>>2]=A,c[j>>2]|0);n=(g[j>>2]=o,c[j>>2]|0);d=(g[j>>2]=q,c[j>>2]|0);f=s+136|0;h=s+140|0;i=s+156|0;m=s+152|0}else{d=c[s+136>>2]|0;f=c[s+140>>2]|0;r=c[s+156>>2]|0;A=(c[j>>2]=r,+g[j>>2]);q=(c[j>>2]=d,+g[j>>2]);k=0.0;p=+g[s+152>>2];n=f;y=+g[s+132>>2];o=(c[j>>2]=f,+g[j>>2]);f=s+136|0;h=s+140|0;i=s+156|0;m=s+152|0}P=(c[j>>2]=r,+g[j>>2]);z=p*k-A*P;N=(c[j>>2]=n,+g[j>>2]);Q=(c[j>>2]=d,+g[j>>2]);C=A*N-k*Q;D=P*Q-p*N;R=1.0/(z*y+q*C+D*o);g[s+132>>2]=z*R;g[f>>2]=(P*o-k*q)*R;g[h>>2]=(A*q-p*o)*R;g[s+144>>2]=0.0;g[s+148>>2]=C*R;g[m>>2]=(k*y-N*o)*R;g[i>>2]=(Q*o-A*y)*R;g[s+160>>2]=0.0;g[s+164>>2]=D*R;g[s+168>>2]=(N*q-P*y)*R;g[s+172>>2]=(p*y-Q*q)*R;g[s+176>>2]=0.0;c[s+60>>2]=1065353216;c[s+64>>2]=0;c[s+64+4>>2]=0;c[s+64+8>>2]=0;c[s+64+12>>2]=0;c[s+80>>2]=1065353216;c[s+84>>2]=0;c[s+84+4>>2]=0;c[s+84+8>>2]=0;c[s+84+12>>2]=0;c[s+100>>2]=1065353216;c[s+104>>2]=0;c[s+104+4>>2]=0;c[s+104+8>>2]=0;c[s+104+12>>2]=0;c[s+104+16>>2]=0;c[s+108>>2]=c[s+228>>2];c[s+108+4>>2]=c[s+228+4>>2];c[s+108+8>>2]=c[s+228+8>>2];c[s+108+12>>2]=c[s+228+12>>2];n=c[s+24>>2]|0;m=c[s+44>>2]|0;if((m|0)<(n|0)){if((c[s+48>>2]|0)<(n|0)){if(!n){h=m;i=0}else{c[6472]=(c[6472]|0)+1;f=ic((n<<4|3)+16|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}h=c[s+44>>2]|0;i=f}if((h|0)>0){f=0;do{L=i+(f<<4)|0;K=(c[s+52>>2]|0)+(f<<4)|0;c[L>>2]=c[K>>2];c[L+4>>2]=c[K+4>>2];c[L+8>>2]=c[K+8>>2];c[L+12>>2]=c[K+12>>2];f=f+1|0}while((f|0)!=(h|0))}f=c[s+52>>2]|0;if(f|0){if(a[s+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[f+-4>>2]|0)}c[s+52>>2]=0}a[s+56>>0]=1;c[s+52>>2]=i;c[s+48>>2]=n;h=s+52|0}else h=s+52|0;f=m;do{L=(c[h>>2]|0)+(f<<4)|0;c[L>>2]=c[M>>2];c[L+4>>2]=c[M+4>>2];c[L+8>>2]=c[M+8>>2];c[L+12>>2]=c[M+12>>2];f=f+1|0}while((f|0)!=(n|0))}c[s+44>>2]=n;if((n|0)>0){f=0;do{L=c[s+52>>2]|0;K=c[(c[s+32>>2]|0)+(f<<2)>>2]|0;Q=+g[K+12>>2]-+g[s+232>>2];R=+g[K+16>>2]-+g[s+236>>2];g[L+(f<<4)>>2]=+g[K+8>>2]-+g[s+228>>2];g[L+(f<<4)+4>>2]=Q;g[L+(f<<4)+8>>2]=R;g[L+(f<<4)+12>>2]=0.0;f=f+1|0}while((f|0)<(c[s+44>>2]|0))}t=t+1|0}while((t|0)<(c[b+1112>>2]|0))}Gc(b);f=c[b+1112>>2]|0;d=O(f,f)|0;n=c[b+1132>>2]|0;if((d|0)>(n|0)){do if((c[b+1136>>2]|0)<(d|0)){if(!d){m=n;f=0}else{c[6472]=(c[6472]|0)+1;f=ic(d+19|0)|0;if(!f)f=0;else{c[(f+4+15&-16)+-4>>2]=f;f=f+4+15&-16}m=c[b+1132>>2]|0}h=c[b+1140>>2]|0;if((m|0)<=0){if(!h){a[b+1144>>0]=1;c[b+1140>>2]=f;c[b+1136>>2]=d;break}}else{i=0;do{a[f+i>>0]=a[h+i>>0]|0;i=i+1|0}while((i|0)!=(m|0))}if(a[b+1144>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[h+-4>>2]|0)}a[b+1144>>0]=1;c[b+1140>>2]=f;c[b+1136>>2]=d}else f=c[b+1140>>2]|0;while(0);Nk(f+n|0,0,d-n|0)|0;f=c[b+1112>>2]|0}c[b+1132>>2]=d;if((f|0)<=0){b=f;l=M;return b|0}x=c[b+1120>>2]|0;s=c[b+1140>>2]|0;v=0;do{t=c[x+(v<<2)>>2]|0;c[t+380>>2]=v;u=c[t+24>>2]|0;w=0;do{h=c[x+(w<<2)>>2]|0;g:do if((u|0)>0){i=c[h+24>>2]|0;d=0;while(1){if((i|0)>0){n=c[(c[t+32>>2]|0)+(d<<2)>>2]|0;m=c[h+32>>2]|0;r=0;do{if((n|0)==(c[m+(r<<2)>>2]|0)){h=1;break g}r=r+1|0}while((r|0)<(i|0))}d=d+1|0;if((d|0)>=(u|0)){h=0;break}}}else h=0;while(0);a[s+((O(f,w)|0)+v)>>0]=h;w=w+1|0}while((w|0)!=(f|0));v=v+1|0}while((v|0)!=(f|0));l=M;return f|0}function ac(b){b=b|0;var d=0,e=0.0,f=0.0,h=0.0,i=0.0,k=0,m=0,n=0,o=0,p=0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,B=0.0,C=0,D=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0.0,$=0.0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0.0,ga=0.0,ha=0.0,ia=0.0,ja=0,ka=0,la=0;Z=l;l=l+176|0;bj(12466);Xd(b);a:do if(qb[c[(c[b>>2]|0)+20>>2]&127](b)|0?(Y=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0,(qb[c[(c[Y>>2]|0)+48>>2]&127](Y)|0)&6144|0):0){I=Z+112+44|0;S=Z+112+4|0;T=Z+112+8|0;U=Z+112+16|0;V=Z+112+20|0;O=Z+112+24|0;P=Z+112+32|0;Q=Z+112+36|0;R=Z+112+40|0;W=Z+112+48|0;X=Z+112+52|0;Y=Z+112+56|0;N=Z+112+48|0;H=Z+112+16|0;D=Z+112+32|0;M=Z+112+48|0;G=Z+112+16|0;C=Z+112+32|0;L=Z+112+48|0;d=qb[c[(c[b>>2]|0)+104>>2]&127](b)|0;b:while(1){K=d+-1|0;if((d|0)<=0)break a;p=sb[c[(c[b>>2]|0)+108>>2]&31](b,K)|0;d=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;d=(qb[c[(c[d>>2]|0)+48>>2]&127](d)|0)>>>11;o=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;o=(qb[c[(c[o>>2]|0)+48>>2]&127](o)|0)>>>12;B=+g[p+40>>2];if(B<=0.0){d=K;continue}switch(c[p+4>>2]|0){case 3:{c[Z+112>>2]=1065353216;c[Z+112+4>>2]=0;c[Z+112+4+4>>2]=0;c[Z+112+4+8>>2]=0;c[Z+112+4+12>>2]=0;c[Z+112+20>>2]=1065353216;c[Z+112+24>>2]=0;c[Z+112+24+4>>2]=0;c[Z+112+24+8>>2]=0;c[Z+112+24+12>>2]=0;c[Z+112+40>>2]=1065353216;c[I>>2]=0;c[I+4>>2]=0;c[I+8>>2]=0;c[I+12>>2]=0;c[I+16>>2]=0;A=+g[p+300>>2];z=+g[p+304>>2];y=+g[p+308>>2];o=c[p+28>>2]|0;x=A*+g[o+20>>2]+z*+g[o+24>>2]+y*+g[o+28>>2]+ +g[o+56>>2];w=A*+g[o+36>>2]+z*+g[o+40>>2]+y*+g[o+44>>2]+ +g[o+60>>2];g[Z+112+48>>2]=A*+g[o+4>>2]+z*+g[o+8>>2]+y*+g[o+12>>2]+ +g[o+52>>2];g[Z+112+52>>2]=x;g[Z+112+56>>2]=w;g[Z+112+60>>2]=0.0;o=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[o>>2]|0)+56>>2]&7](o,Z+112|0,B);w=+g[p+316>>2];x=+g[p+320>>2];y=+g[p+324>>2];p=c[p+32>>2]|0;z=w*+g[p+20>>2]+x*+g[p+24>>2]+y*+g[p+28>>2]+ +g[p+56>>2];A=w*+g[p+36>>2]+x*+g[p+40>>2]+y*+g[p+44>>2]+ +g[p+60>>2];g[Z+112+48>>2]=w*+g[p+4>>2]+x*+g[p+8>>2]+y*+g[p+12>>2]+ +g[p+52>>2];g[Z+112+52>>2]=z;g[Z+112+56>>2]=A;g[Z+112+60>>2]=0.0;if(d&1|0){p=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[p>>2]|0)+56>>2]&7](p,Z+112|0,B)}d=K;continue b}case 4:{n=c[p+28>>2]|0;e=+g[p+552>>2];da=+g[n+4>>2];f=+g[p+552+16>>2];ca=+g[n+8>>2];h=+g[p+552+32>>2];ba=+g[n+12>>2];i=+g[p+552+4>>2];q=+g[p+552+20>>2];r=+g[p+552+36>>2];s=+g[p+552+8>>2];u=+g[p+552+24>>2];w=+g[p+552+40>>2];aa=+g[n+20>>2];$=+g[n+24>>2];_=+g[n+28>>2];t=+g[n+36>>2];v=+g[n+40>>2];x=+g[n+44>>2];fa=+g[p+552+48>>2];ea=+g[p+552+52>>2];A=+g[p+552+56>>2];y=+g[n+52>>2]+(da*fa+ca*ea+ba*A);z=aa*fa+$*ea+_*A+ +g[n+56>>2];A=t*fa+v*ea+x*A+ +g[n+60>>2];g[Z+112>>2]=e*da+f*ca+h*ba;g[Z+112+4>>2]=da*i+ca*q+ba*r;g[Z+112+8>>2]=da*s+ca*u+ba*w;g[Z+112+12>>2]=0.0;g[Z+112+16>>2]=e*aa+f*$+h*_;g[Z+112+20>>2]=i*aa+q*$+r*_;g[Z+112+24>>2]=s*aa+u*$+w*_;g[Z+112+28>>2]=0.0;g[Z+112+32>>2]=e*t+f*v+h*x;g[Z+112+36>>2]=i*t+q*v+r*x;g[Z+112+40>>2]=s*t+u*v+w*x;g[Z+112+44>>2]=0.0;g[Z+112+48>>2]=y;g[Z+112+52>>2]=z;g[Z+112+56>>2]=A;g[Z+112+60>>2]=0.0;if(!(d&1)){n=c[p+32>>2]|0;u=+g[p+616>>2];h=+g[n+4>>2];v=+g[p+616+16>>2];i=+g[n+8>>2];w=+g[p+616+32>>2];q=+g[n+12>>2];x=+g[p+616+4>>2];y=+g[p+616+20>>2];z=+g[p+616+36>>2];A=+g[p+616+8>>2];$=+g[p+616+24>>2];ba=+g[p+616+40>>2];r=+g[n+20>>2];s=+g[n+24>>2];t=+g[n+28>>2];_=+g[n+36>>2];aa=+g[n+40>>2];ca=+g[n+44>>2];e=+g[p+616+48>>2];f=+g[p+616+52>>2];fa=+g[p+616+56>>2];da=+g[n+52>>2]+(h*e+i*f+q*fa);ea=r*e+s*f+t*fa+ +g[n+56>>2];fa=_*e+aa*f+ca*fa+ +g[n+60>>2];g[Z+112>>2]=u*h+v*i+w*q;g[Z+112+4>>2]=h*x+i*y+q*z;g[Z+112+8>>2]=h*A+i*$+q*ba;g[Z+112+12>>2]=0.0;g[Z+112+16>>2]=u*r+v*s+w*t;g[Z+112+20>>2]=x*r+y*s+z*t;g[Z+112+24>>2]=A*r+$*s+ba*t;g[Z+112+28>>2]=0.0;g[Z+112+32>>2]=u*_+v*aa+w*ca;g[Z+112+36>>2]=x*_+y*aa+z*ca;g[Z+112+40>>2]=A*_+$*aa+ba*ca;g[Z+112+44>>2]=0.0;g[Z+112+48>>2]=da;g[Z+112+52>>2]=ea;g[Z+112+56>>2]=fa;g[Z+112+60>>2]=0.0}else{n=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[n>>2]|0)+56>>2]&7](n,Z+112|0,B);n=c[p+32>>2]|0;u=+g[p+616>>2];h=+g[n+4>>2];v=+g[p+616+16>>2];i=+g[n+8>>2];w=+g[p+616+32>>2];q=+g[n+12>>2];x=+g[p+616+4>>2];y=+g[p+616+20>>2];z=+g[p+616+36>>2];A=+g[p+616+8>>2];$=+g[p+616+24>>2];ba=+g[p+616+40>>2];r=+g[n+20>>2];s=+g[n+24>>2];t=+g[n+28>>2];_=+g[n+36>>2];aa=+g[n+40>>2];ca=+g[n+44>>2];e=+g[p+616+48>>2];f=+g[p+616+52>>2];fa=+g[p+616+56>>2];da=+g[n+52>>2]+(h*e+i*f+q*fa);ea=r*e+s*f+t*fa+ +g[n+56>>2];fa=_*e+aa*f+ca*fa+ +g[n+60>>2];g[Z+112>>2]=u*h+v*i+w*q;g[Z+112+4>>2]=h*x+i*y+q*z;g[Z+112+8>>2]=h*A+i*$+q*ba;g[Z+112+12>>2]=0.0;g[Z+112+16>>2]=u*r+v*s+w*t;g[Z+112+20>>2]=x*r+y*s+z*t;g[Z+112+24>>2]=A*r+$*s+ba*t;g[Z+112+28>>2]=0.0;g[Z+112+32>>2]=u*_+v*aa+w*ca;g[Z+112+36>>2]=x*_+y*aa+z*ca;g[Z+112+40>>2]=A*_+$*aa+ba*ca;g[Z+112+44>>2]=0.0;g[Z+112+48>>2]=da;g[Z+112+52>>2]=ea;g[Z+112+56>>2]=fa;g[Z+112+60>>2]=0.0;n=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[n>>2]|0)+56>>2]&7](n,Z+112|0,B)}h=+g[p+688>>2];f=+g[p+688+4>>2];e=+bh(h-f,6.2831854820251465);if(!(e<-3.1415927410125732))if(e>3.1415927410125732)i=e+-6.2831854820251465;else i=e;else i=e+6.2831854820251465;e=+bh(h+f,6.2831854820251465);if(!(e<-3.1415927410125732)){if(e>3.1415927410125732)e=e+-6.2831854820251465}else e=e+6.2831854820251465;if(!(i==e)?(J=i>e,o&1|0):0){c[Z+96>>2]=c[Z+112+8>>2];c[Z+96+4>>2]=c[Z+112+24>>2];c[Z+96+8>>2]=c[Z+112+40>>2];g[Z+96+12>>2]=0.0;c[Z+80>>2]=c[Z+112>>2];c[Z+80+4>>2]=c[Z+112+16>>2];c[Z+80+8>>2]=c[Z+112+32>>2];g[Z+80+12>>2]=0.0;p=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;o=c[(c[p>>2]|0)+60>>2]|0;c[Z+64>>2]=0;c[Z+64+4>>2]=0;c[Z+64+8>>2]=0;c[Z+64+12>>2]=0;Qb[o&0](p,Z+112+48|0,Z+96|0,Z+80|0,B,B,J?0.0:i,J?6.2831854820251465:e,Z+64|0,J^1,10.0)}d=K;continue b}case 5:{n=c[p+28>>2]|0;u=+g[p+300>>2];h=+g[n+4>>2];v=+g[p+300+16>>2];i=+g[n+8>>2];w=+g[p+300+32>>2];q=+g[n+12>>2];x=+g[p+300+4>>2];y=+g[p+300+20>>2];z=+g[p+300+36>>2];A=+g[p+300+8>>2];$=+g[p+300+24>>2];ba=+g[p+300+40>>2];r=+g[n+20>>2];s=+g[n+24>>2];t=+g[n+28>>2];_=+g[n+36>>2];aa=+g[n+40>>2];ca=+g[n+44>>2];e=+g[p+300+48>>2];f=+g[p+300+52>>2];fa=+g[p+300+56>>2];da=+g[n+52>>2]+(h*e+i*f+q*fa);ea=r*e+s*f+t*fa+ +g[n+56>>2];fa=_*e+aa*f+ca*fa+ +g[n+60>>2];g[Z+112>>2]=u*h+v*i+w*q;g[S>>2]=h*x+i*y+q*z;g[T>>2]=h*A+i*$+q*ba;g[Z+112+12>>2]=0.0;g[U>>2]=u*r+v*s+w*t;g[V>>2]=x*r+y*s+z*t;g[O>>2]=A*r+$*s+ba*t;g[Z+112+28>>2]=0.0;g[P>>2]=u*_+v*aa+w*ca;g[Q>>2]=x*_+y*aa+z*ca;g[R>>2]=A*_+$*aa+ba*ca;g[Z+112+44>>2]=0.0;g[W>>2]=da;g[X>>2]=ea;g[Y>>2]=fa;g[Z+112+60>>2]=0.0;if(!(d&1)){n=c[p+32>>2]|0;u=+g[p+364>>2];h=+g[n+4>>2];v=+g[p+364+16>>2];i=+g[n+8>>2];w=+g[p+364+32>>2];q=+g[n+12>>2];x=+g[p+364+4>>2];y=+g[p+364+20>>2];z=+g[p+364+36>>2];A=+g[p+364+8>>2];$=+g[p+364+24>>2];ba=+g[p+364+40>>2];r=+g[n+20>>2];s=+g[n+24>>2];t=+g[n+28>>2];_=+g[n+36>>2];aa=+g[n+40>>2];ca=+g[n+44>>2];e=+g[p+364+48>>2];f=+g[p+364+52>>2];fa=+g[p+364+56>>2];da=+g[n+52>>2]+(h*e+i*f+q*fa);ea=r*e+s*f+t*fa+ +g[n+56>>2];fa=_*e+aa*f+ca*fa+ +g[n+60>>2];g[Z+112>>2]=u*h+v*i+w*q;g[S>>2]=h*x+i*y+q*z;g[T>>2]=h*A+i*$+q*ba;g[Z+112+12>>2]=0.0;g[U>>2]=u*r+v*s+w*t;g[V>>2]=x*r+y*s+z*t;g[O>>2]=A*r+$*s+ba*t;g[Z+112+28>>2]=0.0;g[P>>2]=u*_+v*aa+w*ca;g[Q>>2]=x*_+y*aa+z*ca;g[R>>2]=A*_+$*aa+ba*ca;g[Z+112+44>>2]=0.0;g[W>>2]=da;g[X>>2]=ea;g[Y>>2]=fa;g[Z+112+60>>2]=0.0}else{n=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[n>>2]|0)+56>>2]&7](n,Z+112|0,B);n=c[p+32>>2]|0;u=+g[p+364>>2];h=+g[n+4>>2];v=+g[p+364+16>>2];i=+g[n+8>>2];w=+g[p+364+32>>2];q=+g[n+12>>2];x=+g[p+364+4>>2];y=+g[p+364+20>>2];z=+g[p+364+36>>2];A=+g[p+364+8>>2];$=+g[p+364+24>>2];ba=+g[p+364+40>>2];r=+g[n+20>>2];s=+g[n+24>>2];t=+g[n+28>>2];_=+g[n+36>>2];aa=+g[n+40>>2];ca=+g[n+44>>2];e=+g[p+364+48>>2];f=+g[p+364+52>>2];fa=+g[p+364+56>>2];da=+g[n+52>>2]+(h*e+i*f+q*fa);ea=r*e+s*f+t*fa+ +g[n+56>>2];fa=_*e+aa*f+ca*fa+ +g[n+60>>2];g[Z+112>>2]=u*h+v*i+w*q;g[S>>2]=h*x+i*y+q*z;g[T>>2]=h*A+i*$+q*ba;g[Z+112+12>>2]=0.0;g[U>>2]=u*r+v*s+w*t;g[V>>2]=x*r+y*s+z*t;g[O>>2]=A*r+$*s+ba*t;g[Z+112+28>>2]=0.0;g[P>>2]=u*_+v*aa+w*ca;g[Q>>2]=x*_+y*aa+z*ca;g[R>>2]=A*_+$*aa+ba*ca;g[Z+112+44>>2]=0.0;g[W>>2]=da;g[X>>2]=ea;g[Y>>2]=fa;g[Z+112+60>>2]=0.0;n=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[n>>2]|0)+56>>2]&7](n,Z+112|0,B)}if(o&1|0){kj(Z+96|0,p,6.0868353843688965,B);ba=+g[Z+96>>2];ca=+g[Z+96+4>>2];da=+g[Z+96+8>>2];ea=ba*+g[U>>2]+ca*+g[V>>2]+da*+g[O>>2]+ +g[X>>2];fa=ba*+g[P>>2]+ca*+g[Q>>2]+da*+g[R>>2]+ +g[Y>>2];g[Z+96>>2]=ba*+g[Z+112>>2]+ca*+g[S>>2]+da*+g[T>>2]+ +g[W>>2];g[Z+96+4>>2]=ea;g[Z+96+8>>2]=fa;g[Z+96+12>>2]=0.0;d=0;do{kj(Z+80|0,p,+(d|0)*6.283185005187988*.03125,B);ba=+g[Z+80>>2];ca=+g[Z+80+4>>2];da=+g[Z+80+8>>2];ea=ba*+g[U>>2]+ca*+g[V>>2]+da*+g[O>>2]+ +g[X>>2];fa=ba*+g[P>>2]+ca*+g[Q>>2]+da*+g[R>>2]+ +g[Y>>2];g[Z+80>>2]=ba*+g[Z+112>>2]+ca*+g[S>>2]+da*+g[T>>2]+ +g[W>>2];g[Z+80+4>>2]=ea;g[Z+80+8>>2]=fa;g[Z+80+12>>2]=0.0;o=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;n=c[(c[o>>2]|0)+8>>2]|0;c[Z+64>>2]=0;c[Z+64+4>>2]=0;c[Z+64+8>>2]=0;c[Z+64+12>>2]=0;Nb[n&127](o,Z+96|0,Z+80|0,Z+64|0);if(!(d&3)){o=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;n=c[(c[o>>2]|0)+8>>2]|0;c[Z+64>>2]=0;c[Z+64+4>>2]=0;c[Z+64+8>>2]=0;c[Z+64+12>>2]=0;Nb[n&127](o,N,Z+80|0,Z+64|0)}c[Z+96>>2]=c[Z+80>>2];c[Z+96+4>>2]=c[Z+80+4>>2];c[Z+96+8>>2]=c[Z+80+8>>2];c[Z+96+12>>2]=c[Z+80+12>>2];d=d+1|0}while((d|0)!=32);z=+g[p+452>>2];A=+g[p+512>>2];d=c[p+32>>2]|0;if(+g[d+344>>2]>0.0){ba=+g[p+364>>2];ca=+g[d+4>>2];da=+g[p+364+16>>2];ea=+g[d+8>>2];fa=+g[p+364+32>>2];u=+g[d+12>>2];$=+g[p+364+4>>2];aa=+g[p+364+20>>2];t=+g[p+364+36>>2];ga=+g[p+364+8>>2];_=+g[p+364+24>>2];s=+g[p+364+40>>2];ia=+g[d+20>>2];ha=+g[d+24>>2];r=+g[d+28>>2];q=+g[d+36>>2];i=+g[d+40>>2];h=+g[d+44>>2];e=+g[p+364+48>>2];x=+g[p+364+52>>2];y=+g[p+364+56>>2];v=q*e+i*x;w=ca*e+ea*x+u*y;x=ia*e+ha*x+r*y;y=h*y;e=ga*q+_*i+s*h;f=$*q+aa*i+t*h;h=ba*q+da*i+fa*h;i=ga*ia+_*ha+s*r;q=$*ia+aa*ha+t*r;r=ba*ia+da*ha+fa*r;s=ca*ga+ea*_+u*s;t=ca*$+ea*aa+u*t;u=ba*ca+da*ea+fa*u}else{d=c[p+28>>2]|0;ea=+g[p+300>>2];fa=+g[d+4>>2];ga=+g[p+300+16>>2];ha=+g[d+8>>2];ia=+g[p+300+32>>2];u=+g[d+12>>2];ca=+g[p+300+4>>2];da=+g[p+300+20>>2];t=+g[p+300+36>>2];aa=+g[p+300+8>>2];ba=+g[p+300+24>>2];s=+g[p+300+40>>2];_=+g[d+20>>2];$=+g[d+24>>2];r=+g[d+28>>2];q=+g[d+36>>2];i=+g[d+40>>2];h=+g[d+44>>2];e=+g[p+300+48>>2];x=+g[p+300+52>>2];y=+g[p+300+56>>2];v=q*e+i*x;w=fa*e+ha*x+u*y;x=_*e+$*x+r*y;y=h*y;e=aa*q+ba*i+s*h;f=ca*q+da*i+t*h;h=ea*q+ga*i+ia*h;i=aa*_+ba*$+s*r;q=ca*_+da*$+t*r;r=ea*_+ga*$+ia*r;s=fa*aa+ha*ba+u*s;t=fa*ca+ha*da+u*t;u=ea*fa+ga*ha+ia*u}ga=+g[d+52>>2]+w;ha=x+ +g[d+56>>2];ia=v+y+ +g[d+60>>2];g[Z+112>>2]=u;g[S>>2]=t;g[T>>2]=s;g[Z+112+12>>2]=0.0;g[U>>2]=r;g[V>>2]=q;g[O>>2]=i;g[Z+112+28>>2]=0.0;g[P>>2]=h;g[Q>>2]=f;g[R>>2]=e;g[Z+112+44>>2]=0.0;g[W>>2]=ga;g[X>>2]=ha;g[Y>>2]=ia;g[Z+112+60>>2]=0.0;c[Z+80>>2]=c[N>>2];c[Z+80+4>>2]=c[N+4>>2];c[Z+80+8>>2]=c[N+8>>2];c[Z+80+12>>2]=c[N+12>>2];g[Z+64>>2]=u;g[Z+64+4>>2]=r;g[Z+64+8>>2]=h;g[Z+64+12>>2]=0.0;g[Z+48>>2]=t;g[Z+48+4>>2]=q;g[Z+48+8>>2]=f;g[Z+48+12>>2]=0.0;p=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;o=c[(c[p>>2]|0)+60>>2]|0;c[Z+32>>2]=0;c[Z+32+4>>2]=0;c[Z+32+8>>2]=0;c[Z+32+12>>2]=0;Qb[o&0](p,Z+80|0,Z+64|0,Z+48|0,B,B,-A-z,z-A,Z+32|0,1,10.0)}d=K;continue b}case 6:case 9:{c[Z+112>>2]=c[p+1064>>2];c[Z+112+4>>2]=c[p+1064+4>>2];c[Z+112+8>>2]=c[p+1064+8>>2];c[Z+112+12>>2]=c[p+1064+12>>2];m=p+1064+16|0;c[H>>2]=c[m>>2];c[H+4>>2]=c[m+4>>2];c[H+8>>2]=c[m+8>>2];c[H+12>>2]=c[m+12>>2];k=p+1064+32|0;c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];n=p+1064+48|0;c[M>>2]=c[n>>2];c[M+4>>2]=c[n+4>>2];c[M+8>>2]=c[n+8>>2];c[M+12>>2]=c[n+12>>2];if(!(d&1)){c[Z+112>>2]=c[p+1128>>2];c[Z+112+4>>2]=c[p+1128+4>>2];c[Z+112+8>>2]=c[p+1128+8>>2];c[Z+112+12>>2]=c[p+1128+12>>2];c[H>>2]=c[p+1128+16>>2];c[H+4>>2]=c[p+1128+16+4>>2];c[H+8>>2]=c[p+1128+16+8>>2];c[H+12>>2]=c[p+1128+16+12>>2];c[D>>2]=c[p+1128+32>>2];c[D+4>>2]=c[p+1128+32+4>>2];c[D+8>>2]=c[p+1128+32+8>>2];c[D+12>>2]=c[p+1128+32+12>>2];c[M>>2]=c[p+1128+48>>2];c[M+4>>2]=c[p+1128+48+4>>2];c[M+8>>2]=c[p+1128+48+8>>2];c[M+12>>2]=c[p+1128+48+12>>2]}else{d=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[d>>2]|0)+56>>2]&7](d,Z+112|0,B);c[Z+112>>2]=c[p+1128>>2];c[Z+112+4>>2]=c[p+1128+4>>2];c[Z+112+8>>2]=c[p+1128+8>>2];c[Z+112+12>>2]=c[p+1128+12>>2];c[H>>2]=c[p+1128+16>>2];c[H+4>>2]=c[p+1128+16+4>>2];c[H+8>>2]=c[p+1128+16+8>>2];c[H+12>>2]=c[p+1128+16+12>>2];c[D>>2]=c[p+1128+32>>2];c[D+4>>2]=c[p+1128+32+4>>2];c[D+8>>2]=c[p+1128+32+8>>2];c[D+12>>2]=c[p+1128+32+12>>2];c[M>>2]=c[p+1128+48>>2];c[M+4>>2]=c[p+1128+48+4>>2];c[M+8>>2]=c[p+1128+48+8>>2];c[M+12>>2]=c[p+1128+48+12>>2];d=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[d>>2]|0)+56>>2]&7](d,Z+112|0,B)}if(o&1|0){c[Z+112>>2]=c[p+1064>>2];c[Z+112+4>>2]=c[p+1064+4>>2];c[Z+112+8>>2]=c[p+1064+8>>2];c[Z+112+12>>2]=c[p+1064+12>>2];c[H>>2]=c[m>>2];c[H+4>>2]=c[m+4>>2];c[H+8>>2]=c[m+8>>2];c[H+12>>2]=c[m+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];c[M>>2]=c[n>>2];c[M+4>>2]=c[n+4>>2];c[M+8>>2]=c[n+8>>2];c[M+12>>2]=c[n+12>>2];d=p+1128+48|0;c[Z+96>>2]=c[Z+112+8>>2];c[Z+96+4>>2]=c[Z+112+24>>2];c[Z+96+8>>2]=c[Z+112+40>>2];g[Z+96+12>>2]=0.0;c[Z+80>>2]=c[Z+112>>2];c[Z+80+4>>2]=c[Z+112+16>>2];c[Z+80+8>>2]=c[Z+112+32>>2];g[Z+80+12>>2]=0.0;ea=+g[p+932>>2];e=+g[p+932+4>>2];ha=+g[p+996>>2];ga=+g[p+996+4>>2];ka=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;ja=c[(c[ka>>2]|0)+64>>2]|0;c[Z+64>>2]=0;c[Z+64+4>>2]=0;c[Z+64+8>>2]=0;c[Z+64+12>>2]=0;Pb[ja&0](ka,d,Z+96|0,Z+80|0,B*.8999999761581421,ea,e,ha,ga,Z+64|0,10.0,1);ka=c[Z+112+4>>2]|0;ja=c[Z+112+20>>2]|0;o=c[Z+112+36>>2]|0;c[Z+80>>2]=ka;c[Z+80+4>>2]=ja;c[Z+80+8>>2]=o;g[Z+80+12>>2]=0.0;ga=+g[p+1196>>2];ha=+g[p+1200>>2];e=+E(+ga);ga=+F(+ga);ea=+E(+ha);ha=+F(+ha);fa=(c[j>>2]=ka,+g[j>>2]);ia=(c[j>>2]=ja,+g[j>>2]);f=(c[j>>2]=o,+g[j>>2]);g[Z+64>>2]=e*ea*fa+e*ha*ia-ga*f;g[Z+64+4>>2]=ea*ia-ha*fa;g[Z+64+8>>2]=ga*ea*fa+ga*ha*ia+e*f;c[Z+112>>2]=c[p+1128>>2];c[Z+112+4>>2]=c[p+1128+4>>2];c[Z+112+8>>2]=c[p+1128+8>>2];c[Z+112+12>>2]=c[p+1128+12>>2];c[H>>2]=c[p+1128+16>>2];c[H+4>>2]=c[p+1128+16+4>>2];c[H+8>>2]=c[p+1128+16+8>>2];c[H+12>>2]=c[p+1128+16+12>>2];c[D>>2]=c[p+1128+32>>2];c[D+4>>2]=c[p+1128+32+4>>2];c[D+8>>2]=c[p+1128+32+8>>2];c[D+12>>2]=c[p+1128+32+12>>2];c[M>>2]=c[d>>2];c[M+4>>2]=c[d+4>>2];c[M+8>>2]=c[d+8>>2];c[M+12>>2]=c[d+12>>2];f=-+g[Z+112+16>>2];e=-+g[Z+112+32>>2];g[Z+48>>2]=-+g[Z+112>>2];g[Z+48+4>>2]=f;g[Z+48+8>>2]=e;g[Z+48+12>>2]=0.0;e=+g[p+868>>2];f=+g[p+868+4>>2];if(!(e>f)){if(e>2]|0)+20>>2]&127](b)|0;ja=c[(c[ka>>2]|0)+60>>2]|0;c[Z+32>>2]=0;c[Z+32+4>>2]=0;c[Z+32+8>>2]=0;c[Z+32+12>>2]=0;Qb[ja&0](ka,d,Z+48|0,Z+64|0,B,B,e,f,Z+32|0,1,10.0)}}else{ka=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;ja=c[(c[ka>>2]|0)+60>>2]|0;c[Z+32>>2]=0;c[Z+32+4>>2]=0;c[Z+32+8>>2]=0;c[Z+32+12>>2]=0;Qb[ja&0](ka,d,Z+48|0,Z+64|0,B,B,-3.1415927410125732,3.1415927410125732,Z+32|0,0,10.0)}c[Z+112>>2]=c[p+1064>>2];c[Z+112+4>>2]=c[p+1064+4>>2];c[Z+112+8>>2]=c[p+1064+8>>2];c[Z+112+12>>2]=c[p+1064+12>>2];c[H>>2]=c[m>>2];c[H+4>>2]=c[m+4>>2];c[H+8>>2]=c[m+8>>2];c[H+12>>2]=c[m+12>>2];c[D>>2]=c[k>>2];c[D+4>>2]=c[k+4>>2];c[D+8>>2]=c[k+8>>2];c[D+12>>2]=c[k+12>>2];c[M>>2]=c[n>>2];c[M+4>>2]=c[n+4>>2];c[M+8>>2]=c[n+8>>2];c[M+12>>2]=c[n+12>>2];c[Z+32>>2]=c[p+680>>2];c[Z+32+4>>2]=c[p+680+4>>2];c[Z+32+8>>2]=c[p+680+8>>2];c[Z+32+12>>2]=c[p+680+12>>2];c[Z+16>>2]=c[p+680+16>>2];c[Z+16+4>>2]=c[p+680+16+4>>2];c[Z+16+8>>2]=c[p+680+16+8>>2];c[Z+16+12>>2]=c[p+680+16+12>>2];ka=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;ja=c[(c[ka>>2]|0)+72>>2]|0;c[Z>>2]=0;c[Z+4>>2]=0;c[Z+8>>2]=0;c[Z+12>>2]=0;Rb[ja&31](ka,Z+32|0,Z+16|0,Z+112|0,Z)}d=K;continue b}case 7:{c[Z+112>>2]=c[p+824>>2];c[Z+112+4>>2]=c[p+824+4>>2];c[Z+112+8>>2]=c[p+824+8>>2];c[Z+112+12>>2]=c[p+824+12>>2];c[G>>2]=c[p+824+16>>2];c[G+4>>2]=c[p+824+16+4>>2];c[G+8>>2]=c[p+824+16+8>>2];c[G+12>>2]=c[p+824+16+12>>2];c[C>>2]=c[p+824+32>>2];c[C+4>>2]=c[p+824+32+4>>2];c[C+8>>2]=c[p+824+32+8>>2];c[C+12>>2]=c[p+824+32+12>>2];c[L>>2]=c[p+824+48>>2];c[L+4>>2]=c[p+824+48+4>>2];c[L+8>>2]=c[p+824+48+8>>2];c[L+12>>2]=c[p+824+48+12>>2];if(!(d&1)){c[Z+112>>2]=c[p+888>>2];c[Z+112+4>>2]=c[p+888+4>>2];c[Z+112+8>>2]=c[p+888+8>>2];c[Z+112+12>>2]=c[p+888+12>>2];c[G>>2]=c[p+888+16>>2];c[G+4>>2]=c[p+888+16+4>>2];c[G+8>>2]=c[p+888+16+8>>2];c[G+12>>2]=c[p+888+16+12>>2];c[C>>2]=c[p+888+32>>2];c[C+4>>2]=c[p+888+32+4>>2];c[C+8>>2]=c[p+888+32+8>>2];c[C+12>>2]=c[p+888+32+12>>2];c[L>>2]=c[p+888+48>>2];c[L+4>>2]=c[p+888+48+4>>2];c[L+8>>2]=c[p+888+48+8>>2];c[L+12>>2]=c[p+888+48+12>>2]}else{ka=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[ka>>2]|0)+56>>2]&7](ka,Z+112|0,B);c[Z+112>>2]=c[p+888>>2];c[Z+112+4>>2]=c[p+888+4>>2];c[Z+112+8>>2]=c[p+888+8>>2];c[Z+112+12>>2]=c[p+888+12>>2];c[G>>2]=c[p+888+16>>2];c[G+4>>2]=c[p+888+16+4>>2];c[G+8>>2]=c[p+888+16+8>>2];c[G+12>>2]=c[p+888+16+12>>2];c[C>>2]=c[p+888+32>>2];c[C+4>>2]=c[p+888+32+4>>2];c[C+8>>2]=c[p+888+32+8>>2];c[C+12>>2]=c[p+888+32+12>>2];c[L>>2]=c[p+888+48>>2];c[L+4>>2]=c[p+888+48+4>>2];c[L+8>>2]=c[p+888+48+8>>2];c[L+12>>2]=c[p+888+48+12>>2];ka=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;Hb[c[(c[ka>>2]|0)+56>>2]&7](ka,Z+112|0,B)}if(o&1|0){d=a[p+180>>0]|0?p+824|0:p+888|0;k=c[d>>2]|0;o=c[d+4>>2]|0;m=c[d+16>>2]|0;ja=c[d+20>>2]|0;n=c[d+32>>2]|0;ka=c[d+36>>2]|0;z=+g[d+48>>2];aa=+g[d+52>>2];ea=+g[d+56>>2];ha=+g[p+184>>2];$=(c[j>>2]=k,+g[j>>2]);_=(c[j>>2]=o,+g[j>>2])*0.0;A=+g[d+8>>2]*0.0;da=(c[j>>2]=m,+g[j>>2]);ca=(c[j>>2]=ja,+g[j>>2])*0.0;ba=+g[d+24>>2]*0.0;ia=(c[j>>2]=n,+g[j>>2]);ga=(c[j>>2]=ka,+g[j>>2])*0.0;fa=+g[d+40>>2]*0.0;g[Z+96>>2]=z+(A+(_+$*ha));g[Z+96+4>>2]=aa+(ba+(ca+da*ha));g[Z+96+8>>2]=ea+(fa+(ga+ia*ha));g[Z+96+12>>2]=0.0;ha=+g[p+188>>2];g[Z+80>>2]=z+(A+(_+$*ha));g[Z+80+4>>2]=aa+(ba+(ca+da*ha));g[Z+80+8>>2]=ea+(fa+(ga+ia*ha));g[Z+80+12>>2]=0.0;d=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;la=c[(c[d>>2]|0)+8>>2]|0;c[Z+64>>2]=0;c[Z+64+4>>2]=0;c[Z+64+8>>2]=0;c[Z+64+12>>2]=0;Nb[la&127](d,Z+96|0,Z+80|0,Z+64|0);c[Z+64>>2]=k;c[Z+64+4>>2]=m;c[Z+64+8>>2]=n;g[Z+64+12>>2]=0.0;c[Z+48>>2]=o;c[Z+48+4>>2]=ja;c[Z+48+8>>2]=ka;g[Z+48+12>>2]=0.0;ha=+g[p+192>>2];ia=+g[p+196>>2];ka=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0;ja=c[(c[ka>>2]|0)+60>>2]|0;c[Z+32>>2]=0;c[Z+32+4>>2]=0;c[Z+32+8>>2]=0;c[Z+32+12>>2]=0;Qb[ja&0](ka,p+888+48|0,Z+64|0,Z+48|0,B,B,ha,ia,Z+32|0,1,10.0)}d=K;continue b}default:{d=K;continue b}}}}while(0);if((((qb[c[(c[b>>2]|0)+20>>2]&127](b)|0?(la=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0,(qb[c[(c[la>>2]|0)+48>>2]&127](la)|0)&16387|0):0)?qb[c[(c[b>>2]|0)+20>>2]&127](b)|0:0)?(la=qb[c[(c[b>>2]|0)+20>>2]&127](b)|0,qb[c[(c[la>>2]|0)+48>>2]&127](la)|0):0)?(c[b+280>>2]|0)>0:0){d=0;do{la=c[(c[b+288>>2]|0)+(d<<2)>>2]|0;Gb[c[(c[la>>2]|0)+12>>2]&127](la,c[b+72>>2]|0);d=d+1|0}while((d|0)<(c[b+280>>2]|0))}d=c[2405]|0;la=(c[d+16>>2]|0)+-1|0;c[d+16>>2]=la;if(la|0){l=Z;return}do if(c[d+4>>2]|0){Za(Z+112|0,0)|0;la=c[6471]|0;g[d+8>>2]=+g[d+8>>2]+ +(((c[Z+112+4>>2]|0)-(c[la+4>>2]|0)+(((c[Z+112>>2]|0)-(c[la>>2]|0)|0)*1e6|0)-(c[d+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[d+16>>2]|0)){d=c[2405]|0;break}else{l=Z;return}}while(0);c[2405]=c[d+20>>2];l=Z;return}function bc(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0;A=l;l=l+80|0;$e(b,e,f)|0;a[A+16>>0]=1;c[A+12>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;a[A+36>>0]=1;c[A+32>>2]=0;c[A+24>>2]=0;c[A+28>>2]=0;a[A+56>>0]=1;c[A+52>>2]=0;c[A+44>>2]=0;c[A+48>>2]=0;a[A+76>>0]=1;c[A+72>>2]=0;c[A+64>>2]=0;c[A+68>>2]=0;y=c[b+872>>2]|0;c[e+292>>2]=y;if(y){y=sb[c[(c[f>>2]|0)+28>>2]&31](f,b+868|0)|0;c[e+260>>2]=y;if(y|0){h=c[e+292>>2]|0;n=ub[c[(c[f>>2]|0)+16>>2]&63](f,4,h)|0;if((h|0)>0){k=0;m=c[n+8>>2]|0;while(1){i=c[(c[b+880>>2]|0)+(k<<2)>>2]|0;if(!i){g=0;j=0}else{g=i;j=sb[c[(c[f>>2]|0)+28>>2]&31](f,i)|0}c[m>>2]=j;if(!(sb[c[(c[f>>2]|0)+24>>2]&31](f,g)|0)){y=ub[c[(c[f>>2]|0)+16>>2]&63](f,16,1)|0;t=c[y+8>>2]|0;c[t+12>>2]=c[i+16>>2];c[t+4>>2]=c[i+8>>2];c[t>>2]=c[i+4>>2];c[t+8>>2]=c[i+12>>2];Rb[c[(c[f>>2]|0)+20>>2]&31](f,y,10862,1414349395,g)}k=k+1|0;if((k|0)>=(h|0)){g=f;break}else m=m+4|0}}else g=f;Rb[c[(c[g>>2]|0)+20>>2]&31](f,n,10862,1497453121,b+868|0)}}else c[e+260>>2]=0;y=c[b+712>>2]|0;c[e+296>>2]=y;if(y){y=sb[c[(c[f>>2]|0)+28>>2]&31](f,b+708|0)|0;c[e+264>>2]=y;if(y|0){q=c[e+296>>2]|0;r=ub[c[(c[f>>2]|0)+16>>2]&63](f,100,q)|0;if((q|0)>0){s=0;t=c[r+8>>2]|0;while(1){g=c[b+720>>2]|0;c[t+52>>2]=c[g+(s*104|0)+56>>2];c[t+56>>2]=c[g+(s*104|0)+60>>2];c[t+60>>2]=c[g+(s*104|0)+64>>2];c[t+64>>2]=c[g+(s*104|0)+68>>2];c[t+88>>2]=c[g+(s*104|0)+92>>2];c[t+92>>2]=(a[g+(s*104|0)+100>>0]<<7&255)<<24>>24>>7<<24>>24;c[t+84>>2]=c[g+(s*104|0)+88>>2];h=c[g+(s*104|0)+4>>2]|0;if(!h)h=0;else{h=sb[c[(c[f>>2]|0)+28>>2]&31](f,h)|0;g=c[b+720>>2]|0}c[t>>2]=h;c[t+68>>2]=c[g+(s*104|0)+72>>2];c[t+72>>2]=c[g+(s*104|0)+76>>2];c[t+76>>2]=c[g+(s*104|0)+80>>2];c[t+80>>2]=c[g+(s*104|0)+84>>2];c[t+4>>2]=c[g+(s*104|0)+8>>2];c[t+8>>2]=c[g+(s*104|0)+12>>2];c[t+12>>2]=c[g+(s*104|0)+16>>2];c[t+16>>2]=c[g+(s*104|0)+20>>2];c[t+20>>2]=c[g+(s*104|0)+24>>2];c[t+24>>2]=c[g+(s*104|0)+28>>2];c[t+28>>2]=c[g+(s*104|0)+32>>2];c[t+32>>2]=c[g+(s*104|0)+36>>2];c[t+36>>2]=c[g+(s*104|0)+40>>2];c[t+40>>2]=c[g+(s*104|0)+44>>2];c[t+44>>2]=c[g+(s*104|0)+48>>2];c[t+48>>2]=c[g+(s*104|0)+52>>2];m=(c[b+720>>2]|0)+(s*104|0)|0;p=(m+~(m<<15)>>10^m+~(m<<15))*9|0;p=(p>>6^p)+~((p>>6^p)<<11)>>16^(p>>6^p)+~((p>>6^p)<<11);k=c[A+48>>2]|0;a:do if((p&k+-1)>>>0<(c[A+4>>2]|0)>>>0?(x=c[(c[A+12>>2]|0)+((p&k+-1)<<2)>>2]|0,(x|0)!=-1):0){h=c[A+72>>2]|0;i=c[A+32>>2]|0;g=x;while(1){if((m|0)==(c[h+(g<<3)>>2]|0))break;g=c[i+(g<<2)>>2]|0;if((g|0)==-1){z=27;break a}}c[(c[A+52>>2]|0)+(g<<2)>>2]=s}else z=27;while(0);if((z|0)==27){z=0;o=c[A+44>>2]|0;if((o|0)==(k|0)){g=k|0?k<<1:1;if((k|0)<(g|0)){if((g|0)!=0?(c[6472]=(c[6472]|0)+1,u=ic((g<<2|3)+16|0)|0,(u|0)!=0):0){c[(u+4+15&-16)+-4>>2]=u;j=u+4+15&-16}else j=0;i=c[A+52>>2]|0;if((k|0)<=0)if(!i)h=k;else z=35;else{h=0;do{c[j+(h<<2)>>2]=c[i+(h<<2)>>2];h=h+1|0}while((h|0)!=(k|0));z=35}if((z|0)==35){z=0;if(a[A+56>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[A+52>>2]=0;h=c[A+44>>2]|0}a[A+56>>0]=1;c[A+52>>2]=j;c[A+48>>2]=g}else{g=k;h=k}}else{g=k;h=o}c[(c[A+52>>2]|0)+(h<<2)>>2]=s;c[A+44>>2]=h+1;h=c[A+64>>2]|0;if((h|0)==(c[A+68>>2]|0)?(w=h|0?h<<1:1,(h|0)<(w|0)):0){if((w|0)!=0?(c[6472]=(c[6472]|0)+1,v=ic((w<<3|3)+16|0)|0,(v|0)!=0):0){c[(v+4+15&-16)+-4>>2]=v;i=v+4+15&-16}else i=0;if((h|0)>0){g=0;do{j=(c[A+72>>2]|0)+(g<<3)|0;n=c[j+4>>2]|0;y=i+(g<<3)|0;c[y>>2]=c[j>>2];c[y+4>>2]=n;g=g+1|0}while((g|0)!=(h|0))}g=c[A+72>>2]|0;if(g|0){if(a[A+76>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[g+-4>>2]|0)}c[A+72>>2]=0}a[A+76>>0]=1;c[A+72>>2]=i;c[A+68>>2]=w;h=c[A+64>>2]|0;g=c[A+48>>2]|0}c[(c[A+72>>2]|0)+(h<<3)>>2]=m;c[A+64>>2]=h+1;if((k|0)<(g|0)){n=c[A+4>>2]|0;do if((n|0)<(g|0)){b:do if((c[A+8>>2]|0)<(g|0)){do if(!g)h=0;else{c[6472]=(c[6472]|0)+1;h=ic((g<<2|3)+16|0)|0;if(!h){h=0;break}c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}while(0);i=c[A+12>>2]|0;do if((n|0)>0){j=0;do{c[h+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(n|0))}else{if(i|0)break;a[A+16>>0]=1;c[A+12>>2]=h;c[A+8>>2]=g;break b}while(0);if(a[A+16>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}a[A+16>>0]=1;c[A+12>>2]=h;c[A+8>>2]=g}else h=c[A+12>>2]|0;while(0);m=g<<2;Nk(h+(n<<2)|0,0,m-(n<<2)|0)|0;c[A+4>>2]=g;k=c[A+24>>2]|0;if((k|0)<(g|0)){c:do if((c[A+28>>2]|0)<(g|0)){do if(!g)h=0;else{c[6472]=(c[6472]|0)+1;h=ic((m|3)+16|0)|0;if(!h){h=0;break}c[(h+4+15&-16)+-4>>2]=h;h=h+4+15&-16}while(0);i=c[A+32>>2]|0;do if((k|0)>0){j=0;do{c[h+(j<<2)>>2]=c[i+(j<<2)>>2];j=j+1|0}while((j|0)!=(k|0))}else{if(i|0)break;a[A+36>>0]=1;c[A+32>>2]=h;c[A+28>>2]=g;break c}while(0);if(a[A+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}a[A+36>>0]=1;c[A+32>>2]=h;c[A+28>>2]=g}else h=c[A+32>>2]|0;while(0);Nk(h+(k<<2)|0,0,m-(k<<2)|0)|0}c[A+24>>2]=g;if((g|0)>0){Nk(c[A+12>>2]|0,-1,m|0)|0;Nk(c[A+32>>2]|0,-1,m|0)|0}if((n|0)<=0){g=c[A+48>>2]|0;break}h=c[A+72>>2]|0;i=c[A+12>>2]|0;j=c[A+32>>2]|0;g=c[A+48>>2]|0;k=0;do{y=c[h+(k<<3)>>2]|0;y=(y+~(y<<15)>>10^y+~(y<<15))*9|0;y=i+((((y>>6^y)+~((y>>6^y)<<11)>>16^(y>>6^y)+~((y>>6^y)<<11))&g+-1)<<2)|0;c[j+(k<<2)>>2]=c[y>>2];c[y>>2]=k;k=k+1|0}while((k|0)!=(n|0))}while(0);g=p&g+-1}else g=p&k+-1;y=(c[A+12>>2]|0)+(g<<2)|0;c[(c[A+32>>2]|0)+(o<<2)>>2]=c[y>>2];c[y>>2]=o}s=s+1|0;if((s|0)>=(q|0))break;else t=t+100|0}}Rb[c[(c[f>>2]|0)+20>>2]&31](f,r,10883,1145979475,b+708|0)}}else c[e+264>>2]=0;y=c[b+732>>2]|0;c[e+300>>2]=y;if(y){y=sb[c[(c[f>>2]|0)+28>>2]&31](f,c[b+740>>2]|0)|0;c[e+268>>2]=y;if(y|0){j=c[e+300>>2]|0;n=ub[c[(c[f>>2]|0)+16>>2]&63](f,20,j)|0;if((j|0)>0){g=c[b+740>>2]|0;i=g;k=0;m=c[n+8>>2]|0;while(1){c[m+16>>2]=(a[i+(k*52|0)+20>>0]<<7&255)<<24>>24>>7<<24>>24;h=c[i+(k*52|0)+4>>2]|0;if(!h)h=0;else{h=sb[c[(c[f>>2]|0)+28>>2]&31](f,h)|0;g=c[b+740>>2]|0;i=g}c[m>>2]=h;h=c[i+(k*52|0)+8>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+4>>2]=h;h=c[i+(k*52|0)+12>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+8>>2]=h;c[m+12>>2]=c[i+(k*52|0)+16>>2];k=k+1|0;if((k|0)>=(j|0))break;else m=m+20|0}}else g=c[b+740>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,n,10900,1497453121,g)}}else c[e+268>>2]=0;y=c[b+752>>2]|0;c[e+304>>2]=y;if(y){y=sb[c[(c[f>>2]|0)+28>>2]&31](f,c[b+760>>2]|0)|0;c[e+272>>2]=y;if(y|0){j=c[e+304>>2]|0;n=ub[c[(c[f>>2]|0)+16>>2]&63](f,36,j)|0;if((j|0)>0){g=c[b+760>>2]|0;i=g;k=0;m=c[n+8>>2]|0;while(1){h=c[i+(k*44|0)+4>>2]|0;if(!h)h=0;else{h=sb[c[(c[f>>2]|0)+28>>2]&31](f,h)|0;g=c[b+760>>2]|0;i=g}c[m+16>>2]=h;c[m>>2]=c[i+(k*44|0)+20>>2];c[m+4>>2]=c[i+(k*44|0)+24>>2];c[m+8>>2]=c[i+(k*44|0)+28>>2];c[m+12>>2]=c[i+(k*44|0)+32>>2];h=c[i+(k*44|0)+8>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+20>>2]=h;h=c[i+(k*44|0)+12>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+24>>2]=h;h=c[i+(k*44|0)+16>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+28>>2]=h;c[m+32>>2]=c[i+(k*44|0)+36>>2];k=k+1|0;if((k|0)>=(j|0))break;else m=m+36|0}}else g=c[b+760>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,n,10917,1497453121,g)}}else c[e+272>>2]=0;y=c[b+772>>2]|0;c[e+308>>2]=y;if(y){y=sb[c[(c[f>>2]|0)+28>>2]&31](f,c[b+780>>2]|0)|0;c[e+276>>2]=y;if(y|0){j=c[e+308>>2]|0;n=ub[c[(c[f>>2]|0)+16>>2]&63](f,100,j)|0;if((j|0)>0){g=c[b+780>>2]|0;i=g;k=0;m=c[n+8>>2]|0;while(1){c[m>>2]=c[i+(k*104|0)+32>>2];c[m+4>>2]=c[i+(k*104|0)+36>>2];c[m+8>>2]=c[i+(k*104|0)+40>>2];c[m+12>>2]=c[i+(k*104|0)+44>>2];h=c[i+8>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+68>>2]=h;c[m+16>>2]=c[i+(k*104|0)+48>>2];c[m+20>>2]=c[i+(k*104|0)+52>>2];c[m+24>>2]=c[i+(k*104|0)+56>>2];c[m+28>>2]=c[i+(k*104|0)+60>>2];h=c[i+116>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+72>>2]=h;c[m+32>>2]=c[i+(k*104|0)+64>>2];c[m+36>>2]=c[i+(k*104|0)+68>>2];c[m+40>>2]=c[i+(k*104|0)+72>>2];c[m+44>>2]=c[i+(k*104|0)+76>>2];h=c[i+224>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+76>>2]=h;c[m+48>>2]=c[i+(k*104|0)+80>>2];c[m+52>>2]=c[i+(k*104|0)+84>>2];c[m+56>>2]=c[i+(k*104|0)+88>>2];c[m+60>>2]=c[i+(k*104|0)+92>>2];h=c[i+332>>2]|0;if(!h)h=-1;else h=(h-(c[b+720>>2]|0)|0)/104|0;c[m+80>>2]=h;c[m+88>>2]=c[i+(k*104|0)+96>>2];c[m+92>>2]=c[i+(k*104|0)+100>>2];h=c[i+(k*104|0)+4>>2]|0;if(!h)h=0;else{h=sb[c[(c[f>>2]|0)+28>>2]&31](f,h)|0;g=c[b+780>>2]|0;i=g}c[m+64>>2]=h;c[m+84>>2]=c[i+(k*104|0)+24>>2];k=k+1|0;if((k|0)>=(j|0))break;else m=m+100|0}}else g=c[b+780>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,n,10934,1497453121,g)}}else c[e+276>>2]=0;y=c[b+792>>2]|0;c[e+312>>2]=y;if(y){y=sb[c[(c[f>>2]|0)+28>>2]&31](f,c[b+800>>2]|0)|0;c[e+280>>2]=y;if(!y)y=f;else{i=c[e+312>>2]|0;j=ub[c[(c[f>>2]|0)+16>>2]&63](f,92,i)|0;if((i|0)>0){k=0;m=c[j+8>>2]|0;while(1){h=c[b+800>>2]|0;c[m>>2]=c[h+(k*96|0)+28>>2];c[m+4>>2]=c[h+(k*96|0)+32>>2];c[m+8>>2]=c[h+(k*96|0)+36>>2];c[m+12>>2]=c[h+(k*96|0)+40>>2];c[m+16>>2]=c[h+(k*96|0)+44>>2];c[m+20>>2]=c[h+(k*96|0)+48>>2];c[m+24>>2]=c[h+(k*96|0)+52>>2];c[m+28>>2]=c[h+(k*96|0)+56>>2];c[m+32>>2]=c[h+(k*96|0)+60>>2];c[m+36>>2]=c[h+(k*96|0)+64>>2];c[m+40>>2]=c[h+(k*96|0)+68>>2];c[m+44>>2]=c[h+(k*96|0)+72>>2];c[m+48>>2]=c[h+(k*96|0)+76>>2];c[m+52>>2]=c[h+(k*96|0)+80>>2];c[m+56>>2]=c[h+(k*96|0)+84>>2];c[m+60>>2]=c[h+(k*96|0)+88>>2];c[m+88>>2]=c[h+(k*96|0)+92>>2];h=c[b+800>>2]|0;c[m+64>>2]=c[h+(k*96|0)+4>>2];c[m+68>>2]=c[h+(k*96|0)+8>>2];c[m+72>>2]=c[h+(k*96|0)+12>>2];c[m+76>>2]=c[h+(k*96|0)+16>>2];g=c[h+(k*96|0)>>2]|0;if(!g)g=-1;else g=(g-(c[b+720>>2]|0)|0)/104|0;c[m+84>>2]=g;g=c[h+(k*96|0)+20>>2]|0;if(!g)g=0;else g=sb[c[(c[f>>2]|0)+28>>2]&31](f,g)|0;c[m+80>>2]=g;k=k+1|0;if((k|0)>=(i|0))break;else m=m+92|0}}Rb[c[(c[f>>2]|0)+20>>2]&31](f,j,10952,1497453121,c[b+800>>2]|0);y=f}}else{c[e+280>>2]=0;y=f}c[e+352>>2]=c[b+316>>2];c[e+328>>2]=c[b+292>>2];c[e+344>>2]=c[b+308>>2];c[e+324>>2]=c[b+288>>2];c[e+340>>2]=c[b+304>>2];c[e+336>>2]=c[b+300>>2];c[e+412>>2]=c[b+376>>2];c[e+416>>2]=c[b+380>>2];c[e+420>>2]=c[b+384>>2];c[e+408>>2]=c[b+372>>2];n=c[b+364>>2]|0;c[e+332>>2]=c[b+296>>2];c[e+356>>2]=c[b+320>>2];c[e+424>>2]=c[b+388>>2];c[e+348>>2]=c[b+312>>2];c[e+360>>2]=c[b+324>>2];c[e+364>>2]=c[b+328>>2];c[e+368>>2]=c[b+332>>2];c[e+372>>2]=c[b+336>>2];c[e+404>>2]=c[b+368>>2];c[e+400>>2]=n;c[e+376>>2]=c[b+340>>2];c[e+380>>2]=c[b+344>>2];c[e+384>>2]=c[b+348>>2];c[e+388>>2]=c[b+352>>2];c[e+392>>2]=c[b+356>>2];c[e+396>>2]=c[b+360>>2];c[e+256>>2]=sb[c[(c[y>>2]|0)+28>>2]&31](f,b+472|0)|0;n=ub[c[(c[f>>2]|0)+16>>2]&63](f,192,1)|0;m=c[n+8>>2]|0;c[m+96>>2]=c[b+632>>2];c[m+100>>2]=c[b+636>>2];c[m+104>>2]=c[b+640>>2];c[m+108>>2]=c[b+644>>2];c[m+112>>2]=c[b+648>>2];c[m+116>>2]=c[b+652>>2];c[m+120>>2]=c[b+656>>2];c[m+124>>2]=c[b+660>>2];c[m+128>>2]=c[b+664>>2];c[m+132>>2]=c[b+668>>2];c[m+136>>2]=c[b+672>>2];c[m+140>>2]=c[b+676>>2];c[m+180>>2]=d[b+473>>0];c[m+176>>2]=d[b+472>>0];c[m+144>>2]=c[b+520>>2];c[m+148>>2]=c[b+524>>2];c[m+152>>2]=c[b+528>>2];c[m+156>>2]=c[b+532>>2];x=c[b+484>>2]|0;c[m+168>>2]=x;if(x){x=sb[c[(c[y>>2]|0)+28>>2]&31](f,c[b+492>>2]|0)|0;h=c[m+168>>2]|0;c[m+160>>2]=x;if(h|0){k=ub[c[(c[f>>2]|0)+16>>2]&63](f,16,h)|0;if((h|0)>0){g=c[b+492>>2]|0;i=0;j=c[k+8>>2]|0;while(1){c[j>>2]=c[g+(i<<4)>>2];c[j+4>>2]=c[g+(i<<4)+4>>2];c[j+8>>2]=c[g+(i<<4)+8>>2];c[j+12>>2]=c[g+(i<<4)+12>>2];i=i+1|0;if((i|0)==(h|0))break;else j=j+16|0}}else g=c[b+492>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,k,19486,1497453121,g)}}else c[m+160>>2]=0;c[m+184>>2]=c[b+476>>2];c[m>>2]=c[b+536>>2];c[m+4>>2]=c[b+540>>2];c[m+8>>2]=c[b+544>>2];c[m+12>>2]=c[b+548>>2];c[m+16>>2]=c[b+552>>2];c[m+20>>2]=c[b+556>>2];c[m+24>>2]=c[b+560>>2];c[m+28>>2]=c[b+564>>2];c[m+32>>2]=c[b+568>>2];c[m+36>>2]=c[b+572>>2];c[m+40>>2]=c[b+576>>2];c[m+44>>2]=c[b+580>>2];c[m+48>>2]=c[b+584>>2];c[m+52>>2]=c[b+588>>2];c[m+56>>2]=c[b+592>>2];c[m+60>>2]=c[b+596>>2];c[m+64>>2]=c[b+600>>2];c[m+68>>2]=c[b+604>>2];c[m+72>>2]=c[b+608>>2];c[m+76>>2]=c[b+612>>2];c[m+80>>2]=c[b+616>>2];c[m+84>>2]=c[b+620>>2];c[m+88>>2]=c[b+624>>2];c[m+92>>2]=c[b+628>>2];x=c[b+504>>2]|0;c[m+172>>2]=x;if(x){x=sb[c[(c[y>>2]|0)+28>>2]&31](f,c[b+512>>2]|0)|0;j=c[m+172>>2]|0;c[m+164>>2]=x;if(!j)z=149;else{k=ub[c[(c[f>>2]|0)+16>>2]&63](f,4,j)|0;if((j|0)>0){g=c[b+512>>2]|0;h=0;i=c[k+8>>2]|0;while(1){c[i>>2]=c[g+(h<<2)>>2];h=h+1|0;if((h|0)==(j|0))break;else i=i+4|0}}else g=c[b+512>>2]|0;Rb[c[(c[f>>2]|0)+20>>2]&31](f,k,10972,1497453121,g);x=f}}else{c[m+164>>2]=0;z=149}if((z|0)==149)x=f;Rb[c[(c[x>>2]|0)+20>>2]&31](f,n,10978,1497453121,b+472|0);z=c[b+1112>>2]|0;c[e+316>>2]=z;if(z){z=sb[c[(c[y>>2]|0)+28>>2]&31](f,c[c[b+1120>>2]>>2]|0)|0;t=c[e+316>>2]|0;c[e+284>>2]=z;if(t|0){u=ub[c[(c[f>>2]|0)+16>>2]&63](f,348,t)|0;if((t|0)>0){v=0;w=c[u+8>>2]|0;while(1){g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;z=w+320|0;c[z>>2]=c[g+360>>2];c[w+256>>2]=c[g+332>>2];c[w+260>>2]=c[g+336>>2];c[w+264>>2]=c[g+340>>2];c[w+268>>2]=c[g+344>>2];c[w+344>>2]=c[g+380>>2];c[w+340>>2]=d[g+377>>0];c[w+160>>2]=c[g+228>>2];c[w+164>>2]=c[g+232>>2];c[w+168>>2]=c[g+236>>2];c[w+172>>2]=c[g+240>>2];c[w+336>>2]=d[g+376>>0];c[w+208>>2]=c[g+276>>2];c[w+212>>2]=c[g+280>>2];c[w+216>>2]=c[g+284>>2];c[w+220>>2]=c[g+288>>2];c[w+224>>2]=c[g+292>>2];c[w+228>>2]=c[g+296>>2];c[w+232>>2]=c[g+300>>2];c[w+236>>2]=c[g+304>>2];g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;c[w>>2]=c[g+60>>2];c[w+4>>2]=c[g+64>>2];c[w+8>>2]=c[g+68>>2];c[w+12>>2]=c[g+72>>2];c[w+16>>2]=c[g+76>>2];c[w+20>>2]=c[g+80>>2];c[w+24>>2]=c[g+84>>2];c[w+28>>2]=c[g+88>>2];c[w+32>>2]=c[g+92>>2];c[w+36>>2]=c[g+96>>2];c[w+40>>2]=c[g+100>>2];c[w+44>>2]=c[g+104>>2];c[w+48>>2]=c[g+108>>2];c[w+52>>2]=c[g+112>>2];c[w+56>>2]=c[g+116>>2];c[w+60>>2]=c[g+120>>2];c[w+296>>2]=c[g+124>>2];g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;c[w+300>>2]=c[g+128>>2];c[w+112>>2]=c[g+180>>2];c[w+116>>2]=c[g+184>>2];c[w+120>>2]=c[g+188>>2];c[w+124>>2]=c[g+192>>2];c[w+128>>2]=c[g+196>>2];c[w+132>>2]=c[g+200>>2];c[w+136>>2]=c[g+204>>2];c[w+140>>2]=c[g+208>>2];c[w+144>>2]=c[g+212>>2];c[w+148>>2]=c[g+216>>2];c[w+152>>2]=c[g+220>>2];c[w+156>>2]=c[g+224>>2];h=w+316|0;c[h>>2]=c[g+356>>2];c[w+64>>2]=c[g+132>>2];c[w+68>>2]=c[g+136>>2];c[w+72>>2]=c[g+140>>2];c[w+76>>2]=c[g+144>>2];c[w+80>>2]=c[g+148>>2];c[w+84>>2]=c[g+152>>2];c[w+88>>2]=c[g+156>>2];c[w+92>>2]=c[g+160>>2];c[w+96>>2]=c[g+164>>2];c[w+100>>2]=c[g+168>>2];c[w+104>>2]=c[g+172>>2];c[w+108>>2]=c[g+176>>2];g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;c[w+240>>2]=c[g+316>>2];c[w+244>>2]=c[g+320>>2];c[w+248>>2]=c[g+324>>2];c[w+252>>2]=c[g+328>>2];c[w+324>>2]=c[g+364>>2];c[w+328>>2]=c[g+368>>2];c[w+312>>2]=c[g+352>>2];c[h>>2]=c[g+356>>2];c[z>>2]=c[g+360>>2];c[w+332>>2]=c[g+372>>2];z=c[g+44>>2]|0;h=w+284|0;c[h>>2]=z;n=w+292|0;c[n>>2]=c[g+4>>2];o=w+288|0;c[o>>2]=c[g+24>>2];c[w+304>>2]=c[g+308>>2];c[w+176>>2]=c[g+244>>2];c[w+180>>2]=c[g+248>>2];c[w+184>>2]=c[g+252>>2];c[w+188>>2]=c[g+256>>2];c[w+192>>2]=c[g+260>>2];c[w+196>>2]=c[g+264>>2];c[w+200>>2]=c[g+268>>2];c[w+204>>2]=c[g+272>>2];g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;c[w+308>>2]=c[g+312>>2];if(z){z=sb[c[(c[y>>2]|0)+28>>2]&31](f,c[g+52>>2]|0)|0;c[w+272>>2]=z;if(z|0){h=c[h>>2]|0;m=ub[c[(c[f>>2]|0)+16>>2]&63](f,16,h)|0;if((h|0)>0){g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;i=c[g+52>>2]|0;j=0;k=c[m+8>>2]|0;while(1){c[k>>2]=c[i+(j<<4)>>2];c[k+4>>2]=c[i+(j<<4)+4>>2];c[k+8>>2]=c[i+(j<<4)+8>>2];c[k+12>>2]=c[i+(j<<4)+12>>2];j=j+1|0;if((j|0)==(h|0))break;else k=k+16|0}}else g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;Rb[c[(c[x>>2]|0)+20>>2]&31](f,m,19486,1497453121,c[g+52>>2]|0)}}else c[w+272>>2]=0;if(c[n>>2]|0){z=sb[c[(c[y>>2]|0)+28>>2]&31](f,c[(c[(c[b+1120>>2]|0)+(v<<2)>>2]|0)+12>>2]|0)|0;c[w+280>>2]=z;if(z|0){h=c[n>>2]|0;m=ub[c[(c[f>>2]|0)+16>>2]&63](f,4,h)|0;if((h|0)>0){g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;i=c[g+12>>2]|0;j=0;k=c[m+8>>2]|0;while(1){c[k>>2]=c[i+(j<<2)>>2];j=j+1|0;if((j|0)==(h|0))break;else k=k+4|0}}else g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;Rb[c[(c[x>>2]|0)+20>>2]&31](f,m,10972,1497453121,c[g+12>>2]|0)}}else c[w+280>>2]=0;if(c[o>>2]|0){z=sb[c[(c[y>>2]|0)+28>>2]&31](f,(c[(c[b+1120>>2]|0)+(v<<2)>>2]|0)+20|0)|0;c[w+276>>2]=z;if(z|0){j=c[n>>2]|0;s=ub[c[(c[f>>2]|0)+16>>2]&63](f,4,j)|0;if((j|0)>0){g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;k=c[g+32>>2]|0;m=c[A+12>>2]|0;n=c[A+72>>2]|0;o=c[A+52>>2]|0;p=c[A+32>>2]|0;q=0;r=c[s+8>>2]|0;while(1){i=c[k+(q<<2)>>2]|0;h=(i+~(i<<15)>>10^i+~(i<<15))*9|0;h=c[m+((((h>>6^h)+~((h>>6^h)<<11)>>16^(h>>6^h)+~((h>>6^h)<<11))&(c[A+48>>2]|0)+-1)<<2)>>2]|0;if((i|0)!=(c[n+(h<<3)>>2]|0))do h=c[p+(h<<2)>>2]|0;while((i|0)!=(c[n+(h<<3)>>2]|0));c[r>>2]=c[o+(h<<2)>>2];q=q+1|0;if((q|0)==(j|0))break;else r=r+4|0}}else g=c[(c[b+1120>>2]|0)+(v<<2)>>2]|0;Rb[c[(c[x>>2]|0)+20>>2]&31](f,s,11015,1497453121,g+20|0)}}else c[w+276>>2]=0;v=v+1|0;if((v|0)>=(t|0))break;else w=w+348|0}}Rb[c[(c[x>>2]|0)+20>>2]&31](f,u,10995,1497453121,c[c[b+1120>>2]>>2]|0)}}else c[e+284>>2]=0;z=c[b+852>>2]|0;c[e+320>>2]=z;if(!z){c[e+288>>2]=0;Zi(A);l=A;return 11039}z=sb[c[(c[y>>2]|0)+28>>2]&31](f,c[b+860>>2]|0)|0;c[e+288>>2]=z;if(!z){Zi(A);l=A;return 11039}i=c[b+852>>2]|0;j=ub[c[(c[f>>2]|0)+16>>2]&63](f,104,i)|0;if((i|0)>0){k=0;n=c[j+8>>2]|0;while(1){g=c[(c[b+860>>2]|0)+(k<<2)>>2]|0;c[n+96>>2]=qb[c[(c[g>>2]|0)+20>>2]&127](g)|0;g=(c[b+860>>2]|0)+(k<<2)|0;h=c[g>>2]|0;c[n+8>>2]=c[h+28>>2];c[n+12>>2]=c[h+32>>2];c[n+16>>2]=c[h+36>>2];c[n+20>>2]=c[h+40>>2];c[n+24>>2]=c[h+44>>2];c[n+28>>2]=c[h+48>>2];c[n+32>>2]=c[h+52>>2];c[n+36>>2]=c[h+56>>2];c[n+40>>2]=c[h+60>>2];c[n+44>>2]=c[h+64>>2];c[n+48>>2]=c[h+68>>2];c[n+52>>2]=d[h+152>>0];h=n+56|0;c[n>>2]=0;m=n+4|0;c[m>>2]=0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[h+16>>2]=0;c[h+20>>2]=0;c[h+24>>2]=0;c[h+28>>2]=0;g=c[g>>2]|0;h=c[g+4>>2]|0;if(h){c[n+88>>2]=1;c[n>>2]=sb[c[(c[y>>2]|0)+28>>2]&31](f,h)|0;g=c[(c[b+860>>2]|0)+(k<<2)>>2]|0}if(c[g+12>>2]|0){c[n+88>>2]=3;c[n>>2]=sb[c[(c[y>>2]|0)+28>>2]&31](f,c[(c[(c[b+860>>2]|0)+(k<<2)>>2]|0)+12>>2]|0)|0}g=c[(c[b+860>>2]|0)+(k<<2)>>2]|0;h=c[g+8>>2]|0;if(h){c[n+88>>2]=2;c[n>>2]=sb[c[(c[y>>2]|0)+28>>2]&31](f,h)|0;g=c[(c[b+860>>2]|0)+(k<<2)>>2]|0}h=c[g+16>>2]|0;if(h){c[n+92>>2]=1;c[m>>2]=sb[c[(c[y>>2]|0)+28>>2]&31](f,h)|0;g=c[(c[b+860>>2]|0)+(k<<2)>>2]|0}h=c[g+24>>2]|0;if(h){c[n+92>>2]=3;c[m>>2]=sb[c[(c[y>>2]|0)+28>>2]&31](f,h)|0;g=c[(c[b+860>>2]|0)+(k<<2)>>2]|0}g=c[g+20>>2]|0;if(g|0){c[n+92>>2]=2;c[m>>2]=sb[c[(c[y>>2]|0)+28>>2]&31](f,g)|0}k=k+1|0;if((k|0)>=(i|0))break;else n=n+104|0}}Rb[c[(c[x>>2]|0)+20>>2]&31](f,j,11019,1497453121,c[b+860>>2]|0);Zi(A);l=A;return 11039}function cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,P=0;K=l;l=l+144|0;a:do switch(d-b|0){case 0:{c[e>>2]=0;c[e+4>>2]=0;c[e+8>>2]=0;c[e+12>>2]=0;l=K;return}case 2:{f=c[(c[a+92>>2]|0)+(b<<2)>>2]|0;i=c[f+88>>2]|0;j=c[f+200>>2]|0;h=c[f+92>>2]|0;g=c[f+204>>2]|0;if((i|0)==(j|0)&(h|0)==(g|0))if((c[f+96>>2]|0)==(c[f+208>>2]|0))break a;else g=h;g=h-g|0;do if(g|i-j){c[f>>2]=f+112;c[f+4>>2]=f+112;c[f+112>>2]=f;c[f+116>>2]=f;J=(i-j|0)<0|(i-j|0)==0&(g|0)<0;c[e>>2]=J?f:f+112|0;c[e+4>>2]=J?f+112|0:f;if((g|0)<0|(i-j|0)<0&(g|0)==0){c[e+8>>2]=f;g=f+112|0;h=f;f=f+112|0;break}else{c[e+8>>2]=f+112;g=f;h=f;f=f+112|0;break}}else{J=(c[f+96>>2]|0)>(c[f+208>>2]|0);h=J?f+112|0:f;c[h>>2]=h;c[h+4>>2]=h;c[e>>2]=h;c[e+4>>2]=h;c[e+8>>2]=h;g=h;f=J?f:f+112|0}while(0);c[e+12>>2]=g;a=Vf(a,h,f)|0;c[a>>2]=a;c[a+4>>2]=a;c[h+8>>2]=a;a=c[a+8>>2]|0;c[a>>2]=a;c[a+4>>2]=a;c[f+8>>2]=a;l=K;return}case 1:{f=c[(c[a+92>>2]|0)+(b<<2)>>2]|0;break}default:{n=((d-b|0)/2|0)+b|0;h=c[a+92>>2]|0;m=c[h+(n+-1<<2)>>2]|0;i=c[m+88>>2]|0;j=c[m+92>>2]|0;m=c[m+96>>2]|0;b:do if((n|0)<(d|0)){f=n;do{g=c[h+(f<<2)>>2]|0;if((c[g+88>>2]|0)!=(i|0))break b;if((c[g+92>>2]|0)!=(j|0))break b;if((c[g+96>>2]|0)!=(m|0))break b;f=f+1|0}while((f|0)<(d|0))}else f=n;while(0);cc(a,b,n,e);c[K+96>>2]=0;c[K+96+4>>2]=0;c[K+96+8>>2]=0;c[K+96+12>>2]=0;cc(a,f,d,K+96|0);m=c[K+96+4>>2]|0;c:do if(m|0){B=c[e+4>>2]|0;if(!B){c[e>>2]=c[K+96>>2];c[e+4>>2]=c[K+96+4>>2];c[e+8>>2]=c[K+96+8>>2];c[e+12>>2]=c[K+96+12>>2];break}c[a+100>>2]=(c[a+100>>2]|0)+-1;g=c[e+12>>2]|0;i=c[K+96+8>>2]|0;j=c[g+88>>2]|0;d:do if((j|0)==(c[i+88>>2]|0)?(k=c[g+92>>2]|0,(k|0)==(c[i+92>>2]|0)):0){n=c[i+4>>2]|0;if((n|0)==(i|0)){f=c[i+8>>2]|0;if(f){i=c[f+12>>2]|0;j=c[i+88>>2]|0;k=c[i+92>>2]|0}f=g;G=i;h=g;g=i;n=j+1|0;d=c[i+96>>2]|0;break}h=c[i>>2]|0;c[n>>2]=h;c[h+4>>2]=n;if((i|0)==(c[K+96>>2]|0)){f=c[h+88>>2]|0;g=c[n+88>>2]|0;if((f|0)>=(g|0))if((f|0)==(g|0)?(c[h+92>>2]|0)<(c[n+92>>2]|0):0)H=30;else f=n;else H=30;if((H|0)==30)f=h;c[K+96>>2]=f}if((i|0)==(m|0)){f=c[h+88>>2]|0;g=c[n+88>>2]|0;do if((f|0)<=(g|0)){if((f|0)==(g|0)?(c[h+92>>2]|0)>(c[n+92>>2]|0):0)break;c[K+96+4>>2]=n;h=n;H=38;break d}while(0);c[K+96+4>>2]=h;H=38}else{h=m;H=38}}else{h=m;H=38}while(0);if((H|0)==38){w=c[e>>2]|0;x=c[K+96>>2]|0;y=0;A=1;o=B;g=0;f=h;i=0;while(1){j=c[f+88>>2]|0;d=c[o+88>>2]|0;k=O(j-d|0,A)|0;e:do if((k|0)<=0){if((k|0)<0){v=(y|0)!=0;n=c[o+92>>2]|0;u=c[f+92>>2]|0;m=k;k=o;while(1){s=c[(v?f+4|0:f)>>2]|0;r=(s|0)==(f|0);t=f+88|0;q=m;while(1){m=k+88|0;p=u-n|0;if(!r?(C=c[s+88>>2]|0,E=O(C-j|0,A)|0,D=c[s+92>>2]|0,F=D-u|0,(F|0)>-1):0){if(!E)break;if((E|0)<0?(O(F,q)|0)<=(O(E,p)|0):0)break}o=c[(v?k+4|0:k)>>2]|0;if((o|0)==(k|0))break e;G=c[o+88>>2]|0;b=O(G-(c[m>>2]|0)|0,A)|0;d=c[o+92>>2]|0;n=d-n|0;j=c[t>>2]|0;m=q;q=O(j-G|0,A)|0;if(!((n|0)>0&(q|0)<0))break e;if(!b){n=d;k=o;continue}if((b|0)>=0)break e;if((O(n,m)|0)>=(O(b,p)|0))break e;else{n=d;k=o}}j=C;u=D;m=O(C-(c[m>>2]|0)|0,A)|0;f=s}}j=c[o+92>>2]|0;n=(y|0)!=0;f:do if(n){m=o;while(1){k=c[m>>2]|0;if((k|0)==(o|0))break f;if((c[k+88>>2]|0)!=(d|0))break f;G=j;j=c[k+92>>2]|0;if((j|0)>(G|0))break;else m=k}}else{m=o;while(1){k=c[m+4>>2]|0;if((k|0)==(o|0))break f;if((c[k+88>>2]|0)!=(d|0))break f;G=j;j=c[k+92>>2]|0;if((j|0)>(G|0))break;else m=k}}while(0);k=c[f+92>>2]|0;if(n){n=f;while(1){j=c[n+4>>2]|0;if((j|0)==(f|0)){k=m;f=n;break e}if((c[j+88>>2]|0)!=(d|0)){k=m;f=n;break e}G=k;k=c[j+92>>2]|0;if((k|0)<(G|0)){k=m;f=n;break}else n=j}}else{n=f;while(1){j=c[n>>2]|0;if((j|0)==(f|0)){k=m;f=n;break e}if((c[j+88>>2]|0)!=(d|0)){k=m;f=n;break e}G=k;k=c[j+92>>2]|0;if((k|0)<(G|0)){k=m;f=n;break}else n=j}}}else{u=(y|0)!=0;s=d;t=c[f+92>>2]|0;r=k;while(1){q=f+88|0;j=c[o+92>>2]|0;d=t-j|0;k=c[(u?o:o+4|0)>>2]|0;g:do if((k|0)!=(o|0))if(u){p=s;n=r;while(1){m=p;p=c[k+88>>2]|0;m=O(p-m|0,A)|0;b=j;j=c[k+92>>2]|0;b=j-b|0;if((b|0)>=1){b=d;k=o;break g}if(m|0){if((m|0)>=0){b=d;k=o;break g}if((O(b,n)|0)>(O(m,d)|0)){b=d;k=o;break g}}n=O((c[q>>2]|0)-p|0,A)|0;d=t-j|0;m=c[k>>2]|0;if((m|0)==(k|0)){b=d;break}else{o=k;k=m}}}else{p=s;n=r;while(1){m=p;p=c[k+88>>2]|0;m=O(p-m|0,A)|0;b=j;j=c[k+92>>2]|0;b=j-b|0;if((b|0)>=1){b=d;k=o;break g}if(m|0){if((m|0)>=0){b=d;k=o;break g}if((O(b,n)|0)>(O(m,d)|0)){b=d;k=o;break g}}n=O((c[q>>2]|0)-p|0,A)|0;d=t-j|0;m=c[k+4>>2]|0;if((m|0)==(k|0)){b=d;break}else{o=k;k=m}}}else{n=r;b=d;k=o}while(0);d=c[(u?f:f+4|0)>>2]|0;if((d|0)==(f|0))break e;r=c[d+88>>2]|0;j=O(r-(c[q>>2]|0)|0,A)|0;m=t;t=c[d+92>>2]|0;m=t-m|0;s=c[k+88>>2]|0;r=O(r-s|0,A)|0;if(!((m|0)<0&(r|0)>0))break e;if(!j){o=k;f=d;continue}if((j|0)>=0)break e;if((O(m,n)|0)>=(O(j,b)|0))break;else{o=k;f=d}}}while(0);j=(y|0)==0;i=j?f:i;g=j?k:g;f=j?x:f;o=j?w:k;y=y+1|0;if((y|0)==2)break;else A=j?-1:A}c[o+4>>2]=f;c[f>>2]=o;c[g>>2]=i;c[i+4>>2]=g;if((c[x+88>>2]|0)<(c[w+88>>2]|0))c[e>>2]=x;if((c[h+88>>2]|0)>=(c[B+88>>2]|0))c[e+4>>2]=h;c[e+12>>2]=c[K+96+12>>2];h=g;F=i;A=c[i+88>>2]|0;p=c[g+88>>2]|0;B=c[i+92>>2]|0;C=c[g+92>>2]|0;D=c[i+96>>2]|0;q=c[g+96>>2]|0;s=((B-C|0)<0)<<31>>31;E=0-(A-p)|0;t=Nv(0,0,E|0,((E|0)<0)<<31>>31|0)|0;t=rs(D-q|0,((D-q|0)<0)<<31>>31|0,t|0,z|0)|0;u=z;v=rs(D-q|0,((D-q|0)<0)<<31>>31|0,B-C|0,s|0)|0;w=z;d=rs(A-p|0,((A-p|0)<0)<<31>>31|0,E|0,((E|0)<0)<<31>>31|0)|0;y=z;x=rs(B-C|0,s|0,B-C|0,s|0)|0;x=Nv(d|0,y|0,x|0,z|0)|0;y=z;d=c[g+8>>2]|0;c[K+120>>2]=0;if(!d)p=0;else{b=Nv(0,0,B-C|0,s|0)|0;o=z;f=0;r=d;while(1){m=c[r+12>>2]|0;j=c[m+88>>2]|0;k=c[m+92>>2]|0;m=c[m+96>>2]|0;n=rs(k-C|0,((k-C|0)<0)<<31>>31|0,E|0,((E|0)<0)<<31>>31|0)|0;G=z;e=rs(j-p|0,((j-p|0)<0)<<31>>31|0,b|0,o|0)|0;h:do if((n|0)==(e|0)&(G|0)==(z|0)?(e=rs(j-p|0,((j-p|0)<0)<<31>>31|0,t|0,u|0)|0,n=z,G=rs(k-C|0,((k-C|0)<0)<<31>>31|0,v|0,w|0)|0,n=cw(G|0,z|0,e|0,n|0)|0,e=z,G=rs(m-q|0,((m-q|0)<0)<<31>>31|0,x|0,y|0)|0,G=cw(n|0,e|0,G|0,z|0)|0,e=z,(e|0)>0|(e|0)==0&G>>>0>0):0){do if(f|0){n=(c[f+4>>2]|0)==(r|0);if((c[f>>2]|0)!=(r|0))if(n)break;else break h;if(!n)break h;e=c[f+12>>2]|0;L=c[(c[r+8>>2]|0)+12>>2]|0;G=c[L+88>>2]|0;n=c[L+92>>2]|0;L=c[L+96>>2]|0;M=(c[e+96>>2]|0)-L|0;n=(O(m-L|0,(c[e+92>>2]|0)-n|0)|0)-(O(M,k-n|0)|0)|0;G=(O(M,j-G|0)|0)-(O(m-L|0,(c[e+88>>2]|0)-G|0)|0)|0;n=rs(n|0,((n|0)<0)<<31>>31|0,B-C|0,s|0)|0;e=z;G=rs(G|0,((G|0)<0)<<31>>31|0,E|0,((E|0)<0)<<31>>31|0)|0;G=cw(n|0,e|0,G|0,z|0)|0;e=z;if((e|0)>0|(e|0)==0&G>>>0>0)break h}while(0);c[K+120>>2]=r;f=r}while(0);r=c[r>>2]|0;if((r|0)==(d|0)){p=f;break}}}n=c[i+8>>2]|0;c[K+72>>2]=0;if(!n)f=0;else{d=Nv(0,0,B-C|0,s|0)|0;b=z;f=0;o=n;do{m=c[o+12>>2]|0;j=c[m+88>>2]|0;k=c[m+92>>2]|0;m=c[m+96>>2]|0;G=rs(k-B|0,((k-B|0)<0)<<31>>31|0,E|0,((E|0)<0)<<31>>31|0)|0;M=z;L=rs(j-A|0,((j-A|0)<0)<<31>>31|0,d|0,b|0)|0;do if((G|0)==(L|0)&(M|0)==(z|0)?(L=rs(j-A|0,((j-A|0)<0)<<31>>31|0,t|0,u|0)|0,G=z,M=rs(k-B|0,((k-B|0)<0)<<31>>31|0,v|0,w|0)|0,G=cw(M|0,z|0,L|0,G|0)|0,L=z,M=rs(m-D|0,((m-D|0)<0)<<31>>31|0,x|0,y|0)|0,M=cw(G|0,L|0,M|0,z|0)|0,L=z,(L|0)>0|(L|0)==0&M>>>0>0):0){if(f|0){if((c[f>>2]|0)!=(o|0))break;if((c[f+4>>2]|0)==(o|0)?(L=c[f+12>>2]|0,e=c[(c[o+8>>2]|0)+12>>2]|0,M=c[e+88>>2]|0,G=c[e+92>>2]|0,e=c[e+96>>2]|0,r=(c[L+96>>2]|0)-e|0,G=(O(m-e|0,(c[L+92>>2]|0)-G|0)|0)-(O(r,k-G|0)|0)|0,M=(O(r,j-M|0)|0)-(O(m-e|0,(c[L+88>>2]|0)-M|0)|0)|0,G=rs(G|0,((G|0)<0)<<31>>31|0,B-C|0,s|0)|0,L=z,M=rs(M|0,((M|0)<0)<<31>>31|0,E|0,((E|0)<0)<<31>>31|0)|0,M=cw(G|0,L|0,M|0,z|0)|0,L=z,!((L|0)>0|(L|0)==0&M>>>0>0)):0)break}c[K+72>>2]=o;f=o}while(0);o=c[o>>2]|0}while((o|0)!=(n|0))}if((p|0)!=0|(f|0)!=0){hc(a,g,i,K+120|0,K+72|0);f=c[K+120>>2]|0;if(f){h=c[f+12>>2]|0;g=h}f=c[K+72>>2]|0;if(!f){f=g;g=F}else{M=c[f+12>>2]|0;i=M;f=g;g=M}}else{f=g;g=F}G=i;n=c[i+88>>2]|0;d=(c[i+96>>2]|0)+1|0;k=c[i+92>>2]|0}w=G;x=f;i=0;E=0;e=1;j=0;m=0;y=0;B=0;C=n;D=d;v=0;n=0;while(1){A=c[x+88>>2]|0;t=(c[w+88>>2]|0)-A|0;M=c[x+92>>2]|0;F=(c[w+92>>2]|0)-M|0;s=c[x+96>>2]|0;q=(c[w+96>>2]|0)-s|0;c[K+120>>2]=t;c[K+120+4>>2]=F;c[K+120+8>>2]=q;c[K+120+12>>2]=-1;A=C-A|0;M=k-M|0;s=D-s|0;r=(O(q,M)|0)-(O(F,s)|0)|0;s=(O(t,s)|0)-(O(q,A)|0)|0;M=(O(F,A)|0)-(O(t,M)|0)|0;c[K+72>>2]=r;c[K+72+4>>2]=((r|0)<0)<<31>>31;c[K+72+8>>2]=s;c[K+72+8+4>>2]=((s|0)<0)<<31>>31;c[K+72+16>>2]=M;c[K+72+16+4>>2]=((M|0)<0)<<31>>31;A=rs(F|0,((F|0)<0)<<31>>31|0,M|0,((M|0)<0)<<31>>31|0)|0;L=z;u=rs(q|0,((q|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;u=Nv(A|0,L|0,u|0,z|0)|0;L=z;q=rs(r|0,((r|0)<0)<<31>>31|0,q|0,((q|0)<0)<<31>>31|0)|0;A=z;M=rs(t|0,((t|0)<0)<<31>>31|0,M|0,((M|0)<0)<<31>>31|0)|0;M=Nv(q|0,A|0,M|0,z|0)|0;A=z;s=rs(t|0,((t|0)<0)<<31>>31|0,s|0,((s|0)<0)<<31>>31|0)|0;t=z;F=rs(r|0,((r|0)<0)<<31>>31|0,F|0,((F|0)<0)<<31>>31|0)|0;F=Nv(s|0,t|0,F|0,z|0)|0;c[K+48>>2]=u;c[K+48+4>>2]=L;c[K+48+8>>2]=M;c[K+48+8+4>>2]=A;c[K+48+16>>2]=F;c[K+48+16+4>>2]=z;c[K+24>>2]=0;c[K+24+4>>2]=0;c[K+24+8>>2]=0;c[K+24+12>>2]=0;c[K+24+16>>2]=0;F=rd(a,0,x,K+120|0,K+72|0,K+48|0,K+24|0)|0;c[K>>2]=0;c[K+4>>2]=0;c[K+8>>2]=0;c[K+12>>2]=0;c[K+16>>2]=0;A=rd(a,1,w,K+120|0,K+72|0,K+48|0,K)|0;do if((F|0)!=0|(A|0)!=0){d=F|0?-1:1;do if((F|0)!=0&(A|0)!=0){u=c[K+24+16>>2]|0;d=c[K+16>>2]|0;if((u|0)!=(d|0)){u=u-d|0;break}if(!u)u=0;else{M=c[K+24>>2]|0;s=c[K+24+4>>2]|0;o=c[K+8>>2]|0;N=c[K+8+4>>2]|0;b=rs(o|0,0,M|0,0)|0;d=z;M=rs(N|0,0,M|0,0)|0;L=z;o=rs(o|0,0,s|0,0)|0;p=z;s=rs(N|0,0,s|0,0)|0;N=z;o=cw(M|0,0,o|0,0)|0;M=z;N=cw(L|0,0,s|0,N|0)|0;p=cw(N|0,z|0,p|0,0)|0;M=cw(p|0,z|0,M|0,0)|0;p=z;d=cw(0,o|0,b|0,d|0)|0;b=z;o=cw(M|0,p|0,(b>>>0>>0|(b|0)==(o|0)&d>>>0<0)&1|0,0)|0;p=z;M=c[K+24+8>>2]|0;N=c[K+24+8+4>>2]|0;s=c[K>>2]|0;L=c[K+4>>2]|0;r=rs(s|0,0,M|0,0)|0;q=z;M=rs(L|0,0,M|0,0)|0;P=z;s=rs(s|0,0,N|0,0)|0;t=z;N=rs(L|0,0,N|0,0)|0;L=z;s=cw(M|0,0,s|0,0)|0;M=z;L=cw(P|0,0,N|0,L|0)|0;t=cw(L|0,z|0,t|0,0)|0;M=cw(t|0,z|0,M|0,0)|0;t=z;q=cw(0,s|0,r|0,q|0)|0;r=z;s=cw(M|0,t|0,(r>>>0>>0|(r|0)==(s|0)&q>>>0<0)&1|0,0)|0;t=z;if(!(p>>>0>>0|(p|0)==(t|0)&o>>>0>>0))if(!(p>>>0>t>>>0|(p|0)==(t|0)&o>>>0>s>>>0))if(b>>>0>>0|(b|0)==(r|0)&d>>>0>>0)d=-1;else d=(b>>>0>r>>>0|(b|0)==(r|0)&d>>>0>q>>>0)&1;else d=1;else d=-1;u=O(d,u)|0}}else u=d;while(0);do if(!e)if((u|0)>-1)if((c[K+16>>2]|0)<0&((c[K+8>>2]|0)==0?(c[K+8+4>>2]|0)==0:0)){b=y;t=B;break}else{H=135;break}else if((c[K+24+16>>2]|0)<0&((c[K+24+8>>2]|0)==0?(c[K+24+8+4>>2]|0)==0:0)){b=y;t=B;break}else{H=135;break}else H=135;while(0);if((H|0)==135){H=0;b=Vf(a,x,w)|0;if(!y)j=b;else c[y+4>>2]=b;c[b>>2]=y;d=c[b+8>>2]|0;if(!B)m=d;else c[B>>2]=d;c[d+4>>2]=B;t=d}c[K+116>>2]=F;c[K+112>>2]=A;if(!u){hc(a,h,g,K+116|0,K+112|0);s=c[K+112>>2]|0}else s=A;if((u|0)>-1&(s|0)!=0){r=(n|0)!=0;if(r?(I=c[n>>2]|0,(I|0)!=(A|0)):0){p=I;do{q=p;p=c[p>>2]|0;o=c[q+8>>2]|0;d=c[o+12>>2]|0;if((p|0)==(q|0))k=0;else{c[p+4>>2]=c[q+4>>2];c[c[q+4>>2]>>2]=p;k=p}c[d+8>>2]=k;k=c[o>>2]|0;d=c[q+12>>2]|0;if((k|0)==(o|0))k=0;else{c[k+4>>2]=c[o+4>>2];c[c[o+4>>2]>>2]=k}c[d+8>>2]=k;c[q+4>>2]=0;c[q+4+4>>2]=0;c[q+4+8>>2]=0;c[q+4+12>>2]=0;c[q>>2]=c[a+56>>2];c[a+56>>2]=q;c[o+4>>2]=0;c[o+4+4>>2]=0;c[o+4+8>>2]=0;c[o+4+12>>2]=0;c[o>>2]=c[a+56>>2];c[a+56>>2]=o;c[a+116>>2]=(c[a+116>>2]|0)+-1}while((p|0)!=(A|0))}if(!t){n=s;k=r?E:A}else{if(r){c[n>>2]=m;k=E;d=A+4|0}else{n=c[A+4>>2]|0;c[n>>2]=m;k=m;d=A+4|0}c[m+4>>2]=n;c[t>>2]=A;c[d>>2]=t;n=c[K+112>>2]|0;m=0}P=g;g=c[n+12>>2]|0;E=k;y=m;t=0;m=c[P+88>>2]|0;d=c[P+96>>2]|0;k=c[P+92>>2]|0;n=c[n+8>>2]|0}else{y=m;m=C;d=D}s=c[K+116>>2]|0;if((u|0)<1&(s|0)!=0){r=(v|0)!=0;if(r?(J=c[v+4>>2]|0,(J|0)!=(F|0)):0){o=J;do{q=o+4|0;p=o;o=c[q>>2]|0;k=c[p>>2]|0;d=c[p+8>>2]|0;m=c[d+12>>2]|0;if((k|0)==(p|0))k=0;else{c[k+4>>2]=o;c[c[q>>2]>>2]=k}c[m+8>>2]=k;k=c[d>>2]|0;m=c[p+12>>2]|0;if((k|0)==(d|0))k=0;else{c[k+4>>2]=c[d+4>>2];c[c[d+4>>2]>>2]=k}c[m+8>>2]=k;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[p>>2]=c[a+56>>2];c[a+56>>2]=p;c[d+4>>2]=0;c[d+4+4>>2]=0;c[d+4+8>>2]=0;c[d+4+12>>2]=0;c[d>>2]=c[a+56>>2];c[a+56>>2]=d;c[a+116>>2]=(c[a+116>>2]|0)+-1}while((o|0)!=(F|0))}if(!b){m=s;i=r?i:F}else{if(r){c[v+4>>2]=j;m=F;k=v}else{k=c[F>>2]|0;c[k+4>>2]=j;i=j;m=F}c[j>>2]=k;c[m>>2]=b;c[b+4>>2]=F;m=c[K+116>>2]|0;j=0}k=h;h=c[m+12>>2]|0;u=0;w=c[k+88>>2]|0;x=c[k+96>>2]|0;k=c[k+92>>2]|0;v=c[m+8>>2]|0}else{u=b;w=m;x=d}if((h|0)==(f|0)&(g|0)==(G|0)){if(v){r=v+4|0;m=c[r>>2]|0;if((m|0)!=(i|0))do{q=m+4|0;p=m;m=c[q>>2]|0;d=c[p>>2]|0;o=c[p+8>>2]|0;b=c[o+12>>2]|0;if((d|0)==(p|0))d=0;else{c[d+4>>2]=m;c[c[q>>2]>>2]=d}c[b+8>>2]=d;d=c[o>>2]|0;b=c[p+12>>2]|0;if((d|0)==(o|0))d=0;else{c[d+4>>2]=c[o+4>>2];c[c[o+4>>2]>>2]=d}c[b+8>>2]=d;c[q>>2]=0;c[q+4>>2]=0;c[q+8>>2]=0;c[q+12>>2]=0;c[p>>2]=c[a+56>>2];c[a+56>>2]=p;c[o+4>>2]=0;c[o+4+4>>2]=0;c[o+4+8>>2]=0;c[o+4+12>>2]=0;c[o>>2]=c[a+56>>2];c[a+56>>2]=o;c[a+116>>2]=(c[a+116>>2]|0)+-1}while((m|0)!=(i|0));if(u|0){c[j>>2]=v;c[r>>2]=j;c[i>>2]=u;c[u+4>>2]=i}}else{c[j>>2]=u;c[u+4>>2]=j;c[h+8>>2]=u}if(!n){c[t>>2]=y;c[y+4>>2]=t;c[G+8>>2]=t;q=0;r=E;s=e;m=y;p=u;o=w;b=x;d=v;n=0;break}m=c[n>>2]|0;if((m|0)!=(E|0))do{p=m;m=c[m>>2]|0;o=c[p+8>>2]|0;b=c[o+12>>2]|0;if((m|0)==(p|0))d=0;else{c[m+4>>2]=c[p+4>>2];c[c[p+4>>2]>>2]=m;d=m}c[b+8>>2]=d;d=c[o>>2]|0;b=c[p+12>>2]|0;if((d|0)==(o|0))d=0;else{c[d+4>>2]=c[o+4>>2];c[c[o+4>>2]>>2]=d}c[b+8>>2]=d;c[p+4>>2]=0;c[p+4+4>>2]=0;c[p+4+8>>2]=0;c[p+4+12>>2]=0;c[p>>2]=c[a+56>>2];c[a+56>>2]=p;c[o+4>>2]=0;c[o+4+4>>2]=0;c[o+4+8>>2]=0;c[o+4+12>>2]=0;c[o>>2]=c[a+56>>2];c[a+56>>2]=o;c[a+116>>2]=(c[a+116>>2]|0)+-1}while((m|0)!=(E|0));if(!t){q=0;r=E;s=e;m=y;p=u;t=0;o=w;b=x;d=v}else{c[n>>2]=y;c[y+4>>2]=n;c[t>>2]=E;c[E+4>>2]=t;q=0;r=E;s=e;m=y;p=u;o=w;b=x;d=v}}else{q=1;r=E;s=0;m=y;p=u;o=w;b=x;d=v}}else{q=Vf(a,x,w)|0;c[q>>2]=q;c[q+4>>2]=q;c[x+8>>2]=q;q=c[q+8>>2]|0;c[q>>2]=q;c[q+4>>2]=q;c[w+8>>2]=q;q=0;r=E;s=e;p=y;t=B;o=C;b=D;d=v}while(0);if(!q)break c;w=g;x=h;E=r;e=s;y=p;B=t;C=o;D=b;v=d}}while(0);l=K;return}}while(0);c[f+8>>2]=0;c[f>>2]=f;c[f+4>>2]=f;c[e>>2]=f;c[e+4>>2]=f;c[e+8>>2]=f;c[e+12>>2]=f;l=K;return}function dc(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0.0,k=0.0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0.0,t=0.0,u=0.0,v=0.0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0,E=0.0,F=0.0,G=0.0,H=0.0,I=0.0,J=0.0,K=0.0,L=0.0,M=0,N=0,O=0,P=0.0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0.0,ea=0.0;ca=l;l=l+80|0;if((e|0)<=0){l=ca;return}$=0;do{T=c[d+($<<2)>>2]|0;V=c[T+740>>2]|0;W=c[T+744>>2]|0;Y=Gj(b,V,+g[f+12>>2])|0;Z=Gj(b,W,+g[f+12>>2])|0;X=c[b+16>>2]|0;if(!(((((+g[X+(Y*244|0)+128>>2]==0.0?+g[X+(Y*244|0)+132>>2]==0.0:0)?+g[X+(Y*244|0)+136>>2]==0.0:0)?+g[X+(Z*244|0)+128>>2]==0.0:0)?+g[X+(Z*244|0)+132>>2]==0.0:0)?+g[X+(Z*244|0)+136>>2]==0.0:0))ba=9;if((ba|0)==9?(ba=0,U=c[T+748>>2]|0,(U|0)>0):0){i=U;aa=0;h=1;do{R=T+4+(aa*184|0)|0;p=T+4+(aa*184|0)+80|0;if(+g[p>>2]<=+g[T+756>>2]){S=c[b+28>>2]|0;if((S|0)==(c[b+32>>2]|0)?(_=S|0?S<<1:1,(S|0)<(_|0)):0){if(!_){m=S;n=0}else{c[6472]=(c[6472]|0)+1;i=ic((_*152|3)+16|0)|0;if(!i)i=0;else{c[(i+4+15&-16)+-4>>2]=i;i=i+4+15&-16}m=c[b+28>>2]|0;n=i}if((m|0)>0){i=0;do{_h(n+(i*152|0)|0,(c[b+36>>2]|0)+(i*152|0)|0,152)|0;i=i+1|0}while((i|0)!=(m|0))}i=c[b+36>>2]|0;if(i|0){if(a[b+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[i+-4>>2]|0)}c[b+36>>2]=0}a[b+40>>0]=1;c[b+36>>2]=n;c[b+32>>2]=_;i=c[b+28>>2]|0}else i=S;c[b+28>>2]=i+1;Q=c[b+36>>2]|0;q=(c[V+236>>2]&2|0)==0?0:V;r=(c[W+236>>2]&2|0)==0?0:W;c[Q+(S*152|0)+144>>2]=Y;c[Q+(S*152|0)+148>>2]=Z;c[Q+(S*152|0)+132>>2]=R;z=+g[T+4+(aa*184|0)+48>>2]-+g[V+52>>2];A=+g[T+4+(aa*184|0)+52>>2]-+g[V+56>>2];y=+g[T+4+(aa*184|0)+56>>2]-+g[V+60>>2];g[ca+64>>2]=z;g[ca+64+4>>2]=A;g[ca+64+8>>2]=y;g[ca+64+12>>2]=0.0;E=+g[T+4+(aa*184|0)+32>>2]-+g[W+52>>2];F=+g[T+4+(aa*184|0)+36>>2]-+g[W+56>>2];D=+g[T+4+(aa*184|0)+40>>2]-+g[W+60>>2];g[ca+48>>2]=E;g[ca+48+4>>2]=F;g[ca+48+8>>2]=D;g[ca+48+12>>2]=0.0;if(!(c[X+(Y*244|0)+240>>2]|0)){k=0.0;s=0.0;u=0.0}else{P=+g[X+(Y*244|0)+192>>2]+ +g[X+(Y*244|0)+224>>2];u=+g[X+(Y*244|0)+196>>2]+ +g[X+(Y*244|0)+228>>2];s=+g[X+(Y*244|0)+200>>2]+ +g[X+(Y*244|0)+232>>2];k=+g[X+(Y*244|0)+176>>2]+ +g[X+(Y*244|0)+208>>2]+(u*y-s*A);s=+g[X+(Y*244|0)+180>>2]+ +g[X+(Y*244|0)+212>>2]+(s*z-P*y);u=+g[X+(Y*244|0)+184>>2]+ +g[X+(Y*244|0)+216>>2]+(P*A-u*z)}if(!(c[X+(Z*244|0)+240>>2]|0)){j=0.0;o=0.0;t=0.0}else{P=+g[X+(Z*244|0)+192>>2]+ +g[X+(Z*244|0)+224>>2];t=+g[X+(Z*244|0)+196>>2]+ +g[X+(Z*244|0)+228>>2];o=+g[X+(Z*244|0)+200>>2]+ +g[X+(Z*244|0)+232>>2];j=+g[X+(Z*244|0)+176>>2]+ +g[X+(Z*244|0)+208>>2]+(t*D-o*F);o=+g[X+(Z*244|0)+180>>2]+ +g[X+(Z*244|0)+212>>2]+(o*E-P*D);t=+g[X+(Z*244|0)+184>>2]+ +g[X+(Z*244|0)+216>>2]+(P*F-t*E)}P=k-j;L=s-o;K=u-t;O=T+4+(aa*184|0)+64|0;H=+g[O>>2];N=T+4+(aa*184|0)+68|0;I=+g[N>>2];M=T+4+(aa*184|0)+72|0;J=+g[M>>2];n=c[b+16>>2]|0;i=c[n+(Y*244|0)+240>>2]|0;m=c[n+(Z*244|0)+240>>2]|0;if(i|0){j=((A*J-y*I)*+g[i+264>>2]+(y*H-J*z)*+g[i+268>>2]+(I*z-A*H)*+g[i+272>>2])*+g[i+544>>2];k=((A*J-y*I)*+g[i+280>>2]+(y*H-J*z)*+g[i+284>>2]+(I*z-A*H)*+g[i+288>>2])*+g[i+548>>2];o=((A*J-y*I)*+g[i+296>>2]+(y*H-J*z)*+g[i+300>>2]+(I*z-A*H)*+g[i+304>>2])*+g[i+552>>2]}else{j=0.0;k=0.0;o=0.0}g[Q+(S*152|0)+64>>2]=j;g[Q+(S*152|0)+68>>2]=k;g[Q+(S*152|0)+72>>2]=o;g[Q+(S*152|0)+76>>2]=0.0;v=+g[M>>2];w=+g[N>>2];x=+g[O>>2];if(m|0){s=(+g[m+264>>2]*-(F*v-D*w)+ +g[m+268>>2]*-(D*x-v*E)+ +g[m+272>>2]*-(w*E-F*x))*+g[m+544>>2];t=(+g[m+280>>2]*-(F*v-D*w)+ +g[m+284>>2]*-(D*x-v*E)+ +g[m+288>>2]*-(w*E-F*x))*+g[m+548>>2];u=(+g[m+296>>2]*-(F*v-D*w)+ +g[m+300>>2]*-(D*x-v*E)+ +g[m+304>>2]*-(w*E-F*x))*+g[m+552>>2]}else{s=0.0;t=0.0;u=0.0}g[Q+(S*152|0)+80>>2]=s;g[Q+(S*152|0)+84>>2]=t;g[Q+(S*152|0)+88>>2]=u;g[Q+(S*152|0)+92>>2]=0.0;if(i|0)k=+g[i+344>>2]+((k*y-o*A)*+g[O>>2]+(o*z-y*j)*+g[N>>2]+(A*j-k*z)*+g[M>>2]);else k=0.0;if(m|0){G=-s;j=-t;u=-u;j=+g[m+344>>2]+((D*j-F*u)*+g[O>>2]+(E*u-D*G)*+g[N>>2]+(F*G-E*j)*+g[M>>2])}else j=0.0;g[Q+(S*152|0)+108>>2]=1.0/(k+j);if(i|0){c[Q+(S*152|0)+16>>2]=c[O>>2];c[Q+(S*152|0)+16+4>>2]=c[O+4>>2];c[Q+(S*152|0)+16+8>>2]=c[O+8>>2];c[Q+(S*152|0)+16+12>>2]=c[O+12>>2];g[Q+(S*152|0)>>2]=A*J-y*I;g[Q+(S*152|0)+4>>2]=y*H-J*z;g[Q+(S*152|0)+8>>2]=I*z-A*H;g[Q+(S*152|0)+12>>2]=0.0}else{c[Q+(S*152|0)>>2]=0;c[Q+(S*152|0)+4>>2]=0;c[Q+(S*152|0)+8>>2]=0;c[Q+(S*152|0)+12>>2]=0;c[Q+(S*152|0)+16>>2]=0;c[Q+(S*152|0)+20>>2]=0;c[Q+(S*152|0)+24>>2]=0;c[Q+(S*152|0)+28>>2]=0}if(m|0){u=-+g[N>>2];G=-+g[M>>2];g[Q+(S*152|0)+48>>2]=-+g[O>>2];g[Q+(S*152|0)+52>>2]=u;g[Q+(S*152|0)+56>>2]=G;g[Q+(S*152|0)+60>>2]=0.0;g[Q+(S*152|0)+32>>2]=-(F*v-D*w);g[Q+(S*152|0)+36>>2]=-(D*x-v*E);g[Q+(S*152|0)+40>>2]=-(w*E-F*x);g[Q+(S*152|0)+44>>2]=0.0}else{c[Q+(S*152|0)+32>>2]=0;c[Q+(S*152|0)+32+4>>2]=0;c[Q+(S*152|0)+32+8>>2]=0;c[Q+(S*152|0)+32+12>>2]=0;c[Q+(S*152|0)+32+16>>2]=0;c[Q+(S*152|0)+32+20>>2]=0;c[Q+(S*152|0)+32+24>>2]=0;c[Q+(S*152|0)+32+28>>2]=0}G=+g[p>>2]+ +g[f+56>>2];if(i|0){o=+g[i+332>>2];t=+g[i+336>>2];x=+g[i+328>>2];u=o*y-t*A+ +g[i+312>>2];t=+g[i+316>>2]+(t*z-y*x);o=A*x-o*z+ +g[i+320>>2]}else{u=0.0;t=0.0;o=0.0}if(m|0){j=+g[m+332>>2];k=+g[m+336>>2];A=+g[m+328>>2];s=j*D-k*F+ +g[m+312>>2];k=+g[m+316>>2]+(k*E-D*A);j=F*A-j*E+ +g[m+320>>2]}else{s=0.0;k=0.0;j=0.0}D=(u-s)*+g[O>>2]+(t-k)*+g[N>>2]+(o-j)*+g[M>>2];c[Q+(S*152|0)+104>>2]=c[T+4+(aa*184|0)+84>>2];D=-(D*+g[T+4+(aa*184|0)+92>>2]);D=D<=0.0?0.0:D;do if(!(c[f+64>>2]&4))g[Q+(S*152|0)+100>>2]=0.0;else{j=+g[T+4+(aa*184|0)+120>>2]*+g[f+60>>2];g[Q+(S*152|0)+100>>2]=j;do if(i|0){if(!(c[n+(Y*244|0)+240>>2]|0))break;F=j*+g[Q+(S*152|0)+20>>2]*+g[n+(Y*244|0)+132>>2]*+g[i+352>>2]*+g[n+(Y*244|0)+116>>2];E=j*+g[Q+(S*152|0)+24>>2]*+g[n+(Y*244|0)+136>>2]*+g[i+356>>2]*+g[n+(Y*244|0)+120>>2];g[n+(Y*244|0)+64>>2]=+g[n+(Y*244|0)+112>>2]*j*+g[Q+(S*152|0)+16>>2]*+g[n+(Y*244|0)+128>>2]*+g[i+348>>2]+ +g[n+(Y*244|0)+64>>2];g[n+(Y*244|0)+68>>2]=F+ +g[n+(Y*244|0)+68>>2];g[n+(Y*244|0)+72>>2]=E+ +g[n+(Y*244|0)+72>>2];E=j*+g[n+(Y*244|0)+100>>2]*+g[Q+(S*152|0)+68>>2];F=j*+g[n+(Y*244|0)+104>>2]*+g[Q+(S*152|0)+72>>2];g[n+(Y*244|0)+80>>2]=j*+g[n+(Y*244|0)+96>>2]*+g[Q+(S*152|0)+64>>2]+ +g[n+(Y*244|0)+80>>2];g[n+(Y*244|0)+84>>2]=E+ +g[n+(Y*244|0)+84>>2];g[n+(Y*244|0)+88>>2]=F+ +g[n+(Y*244|0)+88>>2]}while(0);if(!m)break;j=+g[Q+(S*152|0)+100>>2];if(!(c[n+(Z*244|0)+240>>2]|0))break;F=+g[Q+(S*152|0)+88>>2];E=+g[Q+(S*152|0)+84>>2];A=+g[Q+(S*152|0)+80>>2];y=j*+g[Q+(S*152|0)+52>>2]*+g[n+(Z*244|0)+132>>2]*+g[m+352>>2]*+g[n+(Z*244|0)+116>>2];z=j*+g[Q+(S*152|0)+56>>2]*+g[n+(Z*244|0)+136>>2]*+g[m+356>>2]*+g[n+(Z*244|0)+120>>2];g[n+(Z*244|0)+64>>2]=+g[n+(Z*244|0)+112>>2]*j*+g[Q+(S*152|0)+48>>2]*+g[n+(Z*244|0)+128>>2]*+g[m+348>>2]+ +g[n+(Z*244|0)+64>>2];g[n+(Z*244|0)+68>>2]=y+ +g[n+(Z*244|0)+68>>2];g[n+(Z*244|0)+72>>2]=z+ +g[n+(Z*244|0)+72>>2];E=E*+g[n+(Z*244|0)+100>>2]*-j;F=F*+g[n+(Z*244|0)+104>>2]*-j;g[n+(Z*244|0)+80>>2]=+g[n+(Z*244|0)+80>>2]-A*+g[n+(Z*244|0)+96>>2]*-j;g[n+(Z*244|0)+84>>2]=+g[n+(Z*244|0)+84>>2]-E;g[n+(Z*244|0)+88>>2]=+g[n+(Z*244|0)+88>>2]-F}while(0);g[Q+(S*152|0)+96>>2]=0.0;if(!(c[n+(Y*244|0)+240>>2]|0)){j=0.0;k=0.0;o=0.0;v=0.0;w=0.0;x=0.0}else{j=+g[n+(Y*244|0)+208>>2];k=+g[n+(Y*244|0)+212>>2];o=+g[n+(Y*244|0)+216>>2];v=+g[n+(Y*244|0)+224>>2];w=+g[n+(Y*244|0)+228>>2];x=+g[n+(Y*244|0)+232>>2]}if(!(c[n+(Z*244|0)+240>>2]|0)){s=0.0;t=0.0;u=0.0;y=0.0;z=0.0;A=0.0}else{s=+g[n+(Z*244|0)+208>>2];t=+g[n+(Z*244|0)+212>>2];u=+g[n+(Z*244|0)+216>>2];y=+g[n+(Z*244|0)+224>>2];z=+g[n+(Z*244|0)+228>>2];A=+g[n+(Z*244|0)+232>>2]}j=D-((j+ +g[n+(Y*244|0)+176>>2])*+g[Q+(S*152|0)+16>>2]+(k+ +g[n+(Y*244|0)+180>>2])*+g[Q+(S*152|0)+20>>2]+(o+ +g[n+(Y*244|0)+184>>2])*+g[Q+(S*152|0)+24>>2]+((v+ +g[n+(Y*244|0)+192>>2])*+g[Q+(S*152|0)>>2]+(w+ +g[n+(Y*244|0)+196>>2])*+g[Q+(S*152|0)+4>>2]+(x+ +g[n+(Y*244|0)+200>>2])*+g[Q+(S*152|0)+8>>2])+((s+ +g[n+(Z*244|0)+176>>2])*+g[Q+(S*152|0)+48>>2]+(t+ +g[n+(Z*244|0)+180>>2])*+g[Q+(S*152|0)+52>>2]+(u+ +g[n+(Z*244|0)+184>>2])*+g[Q+(S*152|0)+56>>2]+((y+ +g[n+(Z*244|0)+192>>2])*+g[Q+(S*152|0)+32>>2]+(z+ +g[n+(Z*244|0)+196>>2])*+g[Q+(S*152|0)+36>>2]+(A+ +g[n+(Z*244|0)+200>>2])*+g[Q+(S*152|0)+40>>2])));i=(c[f+44>>2]|0)==0;k=+g[f+12>>2];if(G>0.0){o=0.0;j=j-G/k}else o=-(G*(i|G>+g[f+48>>2]?+g[f+32>>2]:+g[f+36>>2]))/k;E=+g[Q+(S*152|0)+108>>2];F=o*E;E=j*E;p=i|G>+g[f+48>>2];g[Q+(S*152|0)+112>>2]=p?F+E:E;g[Q+(S*152|0)+128>>2]=p?0.0:F;g[Q+(S*152|0)+116>>2]=0.0;g[Q+(S*152|0)+120>>2]=0.0;g[Q+(S*152|0)+124>>2]=1.0e10;c[Q+(S*152|0)+140>>2]=c[b+68>>2];if(!q){k=0.0;t=0.0;u=0.0}else{k=+g[q+328>>2];t=+g[q+332>>2];u=+g[q+336>>2]}if(!r){j=0.0;o=0.0;s=0.0}else{j=+g[r+328>>2];o=+g[r+332>>2];s=+g[r+336>>2]}v=j-k;k=o-t;s=s-u;g[ca+32>>2]=v;g[ca+32+4>>2]=k;g[ca+32+8>>2]=s;g[ca+32+12>>2]=0.0;do if((h|0)>0?+g[T+4+(aa*184|0)+88>>2]>0.0:0){h=h+-1|0;j=+C(+(v*v+k*k+s*s));if(j>+g[f+80>>2]){g[ca+32>>2]=v*(1.0/j);g[ca+32+4>>2]=k*(1.0/j);g[ca+32+8>>2]=s*(1.0/j);if(!(c[V+180>>2]&2)){o=v*(1.0/j);k=k*(1.0/j);j=s*(1.0/j)}else{u=+g[V+4>>2];x=+g[V+20>>2];A=+g[V+36>>2];w=+g[V+8>>2];y=+g[V+24>>2];E=+g[V+40>>2];o=+g[V+12>>2];z=+g[V+28>>2];G=+g[V+44>>2];D=(u*v*(1.0/j)+x*k*(1.0/j)+s*(1.0/j)*A)*+g[V+164>>2];F=(v*(1.0/j)*w+k*(1.0/j)*y+s*(1.0/j)*E)*+g[V+168>>2];j=(v*(1.0/j)*o+k*(1.0/j)*z+s*(1.0/j)*G)*+g[V+172>>2];g[ca+32>>2]=u*D+w*F+o*j;g[ca+32+4>>2]=x*D+y*F+z*j;g[ca+32+8>>2]=A*D+E*F+G*j;g[ca+32+12>>2]=0.0;o=u*D+w*F+o*j;k=x*D+y*F+z*j;j=A*D+E*F+G*j}if(c[W+180>>2]&2){u=+g[W+4>>2];x=+g[W+20>>2];A=+g[W+36>>2];v=+g[W+8>>2];y=+g[W+24>>2];E=+g[W+40>>2];w=+g[W+12>>2];z=+g[W+28>>2];G=+g[W+44>>2];D=(u*o+x*k+A*j)*+g[W+164>>2];F=(o*v+k*y+j*E)*+g[W+168>>2];j=(o*w+k*z+j*G)*+g[W+172>>2];g[ca+32>>2]=u*D+v*F+w*j;g[ca+32+4>>2]=x*D+y*F+z*j;g[ca+32+8>>2]=A*D+E*F+G*j;g[ca+32+12>>2]=0.0;o=u*D+v*F+w*j;k=x*D+y*F+z*j;j=A*D+E*F+G*j}if(!(+C(+(o*o+k*k+j*j))>.001))break;vd(b,ca+32|0,Y,Z,S,R);break}vd(b,O,Y,Z,S,R);j=+g[M>>2];if(+B(+j)>.7071067690849304){G=+g[N>>2];F=1.0/+C(+(j*j+G*G));g[ca+16>>2]=0.0;g[ca+16+4>>2]=-(F*j);g[ca+16+8>>2]=F*G;g[ca>>2]=(j*j+G*G)*F;o=+g[O>>2];g[ca+4>>2]=-(F*G*o);v=o*-(F*j);k=0.0;s=-(F*j);u=F*G;t=(j*j+G*G)*F;o=-(F*G*o)}else{t=+g[O>>2];G=+g[N>>2];o=1.0/+C(+(t*t+G*G));g[ca+16>>2]=-(G*o);g[ca+16+4>>2]=o*t;g[ca+16+8>>2]=0.0;g[ca>>2]=-(o*t*j);g[ca+4>>2]=j*-(G*o);v=(t*t+G*G)*o;k=-(G*o);s=o*t;u=0.0;t=-(o*t*j);o=j*-(G*o)}g[ca+8>>2]=v;if(!(c[V+180>>2]&2))j=u;else{ea=+g[V+4>>2];x=+g[V+20>>2];A=+g[V+36>>2];da=+g[V+8>>2];y=+g[V+24>>2];E=+g[V+40>>2];w=+g[V+12>>2];z=+g[V+28>>2];G=+g[V+44>>2];D=(ea*k+x*s+A*u)*+g[V+164>>2];F=(k*da+s*y+u*E)*+g[V+168>>2];j=(k*w+s*z+u*G)*+g[V+172>>2];g[ca+16>>2]=ea*D+da*F+w*j;g[ca+16+4>>2]=x*D+y*F+z*j;g[ca+16+8>>2]=A*D+E*F+G*j;g[ca+16+12>>2]=0.0;k=ea*D+da*F+w*j;s=x*D+y*F+z*j;j=A*D+E*F+G*j}if(!(c[W+180>>2]&2))u=j;else{w=+g[W+4>>2];z=+g[W+20>>2];E=+g[W+36>>2];x=+g[W+8>>2];A=+g[W+24>>2];G=+g[W+40>>2];y=+g[W+12>>2];D=+g[W+28>>2];ea=+g[W+44>>2];F=(w*k+z*s+E*j)*+g[W+164>>2];da=(k*x+s*A+j*G)*+g[W+168>>2];u=(k*y+s*D+j*ea)*+g[W+172>>2];g[ca+16>>2]=w*F+x*da+y*u;g[ca+16+4>>2]=z*F+A*da+D*u;g[ca+16+8>>2]=E*F+G*da+ea*u;g[ca+16+12>>2]=0.0;k=w*F+x*da+y*u;s=z*F+A*da+D*u;u=E*F+G*da+ea*u}do if(!V)j=v;else{if(!(c[V+180>>2]&2)){j=v;break}w=+g[V+4>>2];z=+g[V+20>>2];E=+g[V+36>>2];x=+g[V+8>>2];A=+g[V+24>>2];G=+g[V+40>>2];y=+g[V+12>>2];D=+g[V+28>>2];ea=+g[V+44>>2];F=(w*t+z*o+E*v)*+g[V+164>>2];da=(t*x+o*A+v*G)*+g[V+168>>2];j=(t*y+o*D+v*ea)*+g[V+172>>2];g[ca>>2]=w*F+x*da+y*j;g[ca+4>>2]=z*F+A*da+D*j;g[ca+8>>2]=E*F+G*da+ea*j;g[ca+12>>2]=0.0;t=w*F+x*da+y*j;o=z*F+A*da+D*j;j=E*F+G*da+ea*j}while(0);do if(W){if(!(c[W+180>>2]&2))break;w=+g[W+4>>2];z=+g[W+20>>2];E=+g[W+36>>2];x=+g[W+8>>2];A=+g[W+24>>2];G=+g[W+40>>2];y=+g[W+12>>2];D=+g[W+28>>2];ea=+g[W+44>>2];F=(w*t+z*o+E*j)*+g[W+164>>2];da=(t*x+o*A+j*G)*+g[W+168>>2];j=(t*y+o*D+j*ea)*+g[W+172>>2];g[ca>>2]=w*F+x*da+y*j;g[ca+4>>2]=z*F+A*da+D*j;g[ca+8>>2]=E*F+G*da+ea*j;g[ca+12>>2]=0.0;t=w*F+x*da+y*j;o=z*F+A*da+D*j;j=E*F+G*da+ea*j}while(0);if(+C(+(k*k+s*s+u*u))>.001)vd(b,ca+16|0,Y,Z,S,R);if(+C(+(t*t+o*o+j*j))>.001)vd(b,ca,Y,Z,S,R)}while(0);do if(!(c[f+64>>2]&32))ba=94;else{if(!(a[T+4+(aa*184|0)+116>>0]|0)){ba=94;break}$c(b,T+4+(aa*184|0)+152|0,Y,Z,S,R,ca+64|0,ca+48|0,1.0,+g[T+4+(aa*184|0)+132>>2],+g[T+4+(aa*184|0)+140>>2]);if(!(c[f+64>>2]&16))break;$c(b,T+4+(aa*184|0)+168|0,Y,Z,S,R,ca+64|0,ca+48|0,1.0,+g[T+4+(aa*184|0)+136>>2],+g[T+4+(aa*184|0)+144>>2])}while(0);do if((ba|0)==94){ba=0;p=T+4+(aa*184|0)+152|0;s=+g[O>>2];t=+g[N>>2];u=+g[M>>2];k=P-(P*H+L*I+K*J)*s;o=L-(P*H+L*I+K*J)*t;j=K-(P*H+L*I+K*J)*u;g[T+4+(aa*184|0)+152>>2]=k;i=T+4+(aa*184|0)+156|0;g[i>>2]=o;n=T+4+(aa*184|0)+160|0;g[n>>2]=j;g[T+4+(aa*184|0)+164>>2]=0.0;if((c[f+64>>2]&64|0)==0?k*k+o*o+j*j>1.1920928955078125e-07:0){ea=1.0/+C(+(k*k+o*o+j*j));g[p>>2]=k*ea;g[i>>2]=ea*o;g[n>>2]=ea*j;mk(V,p);mk(W,p);$c(b,p,Y,Z,S,R,ca+64|0,ca+48|0,1.0,0.0,0.0);if(!(c[f+64>>2]&16))break;r=T+4+(aa*184|0)+168|0;P=+g[i>>2];J=+g[M>>2];I=+g[n>>2];K=+g[N>>2];da=+g[O>>2];L=+g[p>>2];g[T+4+(aa*184|0)+168>>2]=P*J-I*K;g[T+4+(aa*184|0)+180>>2]=0.0;ea=1.0/+C(+((P*J-I*K)*(P*J-I*K)+(I*da-J*L)*(I*da-J*L)+(K*L-P*da)*(K*L-P*da)));g[r>>2]=(P*J-I*K)*ea;g[T+4+(aa*184|0)+172>>2]=(I*da-J*L)*ea;g[T+4+(aa*184|0)+176>>2]=(K*L-P*da)*ea;mk(V,r);mk(W,r);$c(b,r,Y,Z,S,R,ca+64|0,ca+48|0,1.0,0.0,0.0);break}m=T+4+(aa*184|0)+168|0;if(+B(+u)>.7071067690849304){j=1.0/+C(+(u*u+t*t));g[p>>2]=0.0;g[i>>2]=-(j*u);g[n>>2]=j*t;k=s*-(j*u);o=(u*u+t*t)*j;j=-(j*t*s)}else{j=1.0/+C(+(s*s+t*t));g[p>>2]=-(t*j);g[i>>2]=j*s;g[n>>2]=0.0;k=(s*s+t*t)*j;o=-(j*s*u);j=u*-(t*j)}g[m>>2]=o;g[T+4+(aa*184|0)+172>>2]=j;g[T+4+(aa*184|0)+176>>2]=k;mk(V,p);mk(W,p);$c(b,p,Y,Z,S,R,ca+64|0,ca+48|0,1.0,0.0,0.0);i=c[f+64>>2]|0;if(i&16){mk(V,m);mk(W,m);$c(b,m,Y,Z,S,R,ca+64|0,ca+48|0,1.0,0.0,0.0);i=c[f+64>>2]|0}if((i&80|0)!=80)break;a[T+4+(aa*184|0)+116>>0]=1}while(0);r=c[b+16>>2]|0;m=c[r+(Y*244|0)+240>>2]|0;n=c[r+(Z*244|0)+240>>2]|0;p=c[Q+(S*152|0)+140>>2]|0;q=c[b+76>>2]|0;i=c[f+64>>2]|0;do if(!(i&4))g[q+(p*152|0)+100>>2]=0.0;else{j=+g[T+4+(aa*184|0)+124>>2]*+g[f+60>>2];g[q+(p*152|0)+100>>2]=j;if(m|0){P=+g[m+344>>2];ea=j*P*+g[q+(p*152|0)+20>>2]*+g[m+352>>2]*+g[r+(Y*244|0)+116>>2];da=j*P*+g[q+(p*152|0)+24>>2]*+g[m+356>>2]*+g[r+(Y*244|0)+120>>2];g[r+(Y*244|0)+64>>2]=+g[r+(Y*244|0)+112>>2]*j*P*+g[q+(p*152|0)+16>>2]*+g[m+348>>2]+ +g[r+(Y*244|0)+64>>2];g[r+(Y*244|0)+68>>2]=ea+ +g[r+(Y*244|0)+68>>2];g[r+(Y*244|0)+72>>2]=da+ +g[r+(Y*244|0)+72>>2];da=j*+g[r+(Y*244|0)+100>>2]*+g[q+(p*152|0)+68>>2];ea=j*+g[r+(Y*244|0)+104>>2]*+g[q+(p*152|0)+72>>2];g[r+(Y*244|0)+80>>2]=j*+g[r+(Y*244|0)+96>>2]*+g[q+(p*152|0)+64>>2]+ +g[r+(Y*244|0)+80>>2];g[r+(Y*244|0)+84>>2]=da+ +g[r+(Y*244|0)+84>>2];g[r+(Y*244|0)+88>>2]=ea+ +g[r+(Y*244|0)+88>>2]}if(!n)break;j=+g[n+344>>2];k=+g[q+(p*152|0)+100>>2];if(!(c[r+(Z*244|0)+240>>2]|0))break;ea=+g[q+(p*152|0)+88>>2];da=+g[q+(p*152|0)+84>>2];P=+g[q+(p*152|0)+80>>2];K=k*j*+g[q+(p*152|0)+52>>2]*+g[n+352>>2]*+g[r+(Z*244|0)+116>>2];L=k*j*+g[q+(p*152|0)+56>>2]*+g[n+356>>2]*+g[r+(Z*244|0)+120>>2];g[r+(Z*244|0)+64>>2]=+g[r+(Z*244|0)+112>>2]*k*j*+g[q+(p*152|0)+48>>2]*+g[n+348>>2]+ +g[r+(Z*244|0)+64>>2];g[r+(Z*244|0)+68>>2]=K+ +g[r+(Z*244|0)+68>>2];g[r+(Z*244|0)+72>>2]=L+ +g[r+(Z*244|0)+72>>2];da=da*+g[r+(Z*244|0)+100>>2]*-k;ea=ea*+g[r+(Z*244|0)+104>>2]*-k;g[r+(Z*244|0)+80>>2]=+g[r+(Z*244|0)+80>>2]-P*+g[r+(Z*244|0)+96>>2]*-k;g[r+(Z*244|0)+84>>2]=+g[r+(Z*244|0)+84>>2]-da;g[r+(Z*244|0)+88>>2]=+g[r+(Z*244|0)+88>>2]-ea}while(0);do if(i&16|0){if(!(i&4)){g[q+((p+1|0)*152|0)+100>>2]=0.0;break}k=+g[T+4+(aa*184|0)+128>>2]*+g[f+60>>2];g[q+((p+1|0)*152|0)+100>>2]=k;do if(m|0){j=+g[m+344>>2];if(!(c[r+(Y*244|0)+240>>2]|0))break;ea=k*j*+g[q+((p+1|0)*152|0)+20>>2]*+g[r+(Y*244|0)+116>>2];da=k*j*+g[q+((p+1|0)*152|0)+24>>2]*+g[r+(Y*244|0)+120>>2];g[r+(Y*244|0)+64>>2]=+g[r+(Y*244|0)+112>>2]*k*j*+g[q+((p+1|0)*152|0)+16>>2]+ +g[r+(Y*244|0)+64>>2];g[r+(Y*244|0)+68>>2]=ea+ +g[r+(Y*244|0)+68>>2];g[r+(Y*244|0)+72>>2]=da+ +g[r+(Y*244|0)+72>>2];da=k*+g[r+(Y*244|0)+100>>2]*+g[q+((p+1|0)*152|0)+68>>2];ea=k*+g[r+(Y*244|0)+104>>2]*+g[q+((p+1|0)*152|0)+72>>2];g[r+(Y*244|0)+80>>2]=k*+g[r+(Y*244|0)+96>>2]*+g[q+((p+1|0)*152|0)+64>>2]+ +g[r+(Y*244|0)+80>>2];g[r+(Y*244|0)+84>>2]=da+ +g[r+(Y*244|0)+84>>2];g[r+(Y*244|0)+88>>2]=ea+ +g[r+(Y*244|0)+88>>2]}while(0);if(!n)break;j=+g[n+344>>2];k=+g[q+((p+1|0)*152|0)+100>>2];if(!(c[r+(Z*244|0)+240>>2]|0))break;ea=+g[q+((p+1|0)*152|0)+88>>2];da=+g[q+((p+1|0)*152|0)+84>>2];P=+g[q+((p+1|0)*152|0)+80>>2];K=k*j*+g[q+((p+1|0)*152|0)+52>>2]*+g[r+(Z*244|0)+116>>2];L=k*j*+g[q+((p+1|0)*152|0)+56>>2]*+g[r+(Z*244|0)+120>>2];g[r+(Z*244|0)+64>>2]=+g[r+(Z*244|0)+112>>2]*k*j*+g[q+((p+1|0)*152|0)+48>>2]+ +g[r+(Z*244|0)+64>>2];g[r+(Z*244|0)+68>>2]=K+ +g[r+(Z*244|0)+68>>2];g[r+(Z*244|0)+72>>2]=L+ +g[r+(Z*244|0)+72>>2];da=da*+g[r+(Z*244|0)+100>>2]*-k;ea=ea*+g[r+(Z*244|0)+104>>2]*-k;g[r+(Z*244|0)+80>>2]=+g[r+(Z*244|0)+80>>2]-P*+g[r+(Z*244|0)+96>>2]*-k;g[r+(Z*244|0)+84>>2]=+g[r+(Z*244|0)+84>>2]-da;g[r+(Z*244|0)+88>>2]=+g[r+(Z*244|0)+88>>2]-ea}while(0);i=c[T+748>>2]|0}aa=aa+1|0}while((aa|0)<(i|0))}$=$+1|0}while(($|0)!=(e|0));l=ca;return}function ec(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var h=0.0,i=0.0,k=0,m=0.0,n=0,o=0.0,p=0.0,q=0.0,r=0.0,s=0.0,t=0.0,u=0.0,v=0,w=0.0,x=0.0,y=0.0,z=0.0,A=0.0,D=0.0,E=0.0,F=0.0,G=0,H=0,I=0,J=0,L=0,M=0,N=0,O=0,P=0,Q=0.0,R=0.0,S=0.0,T=0.0,U=0.0,V=0.0,W=0.0,X=0.0,Y=0.0,Z=0.0,_=0,$=0,aa=0.0,ba=0.0,ca=0.0,da=0.0,ea=0.0,fa=0,ga=0,ha=0.0,ia=0,ja=0.0,ka=0.0,la=0.0,ma=0.0,na=0.0,oa=0.0,pa=0.0,qa=0.0,ra=0.0,sa=0.0,ta=0.0,ua=0.0,va=0.0,wa=0.0,xa=0.0,ya=0.0,za=0.0,Aa=0.0,Ba=0.0,Ca=0,Da=0,Ea=0,Fa=0.0,Ga=0.0,Ha=0;Ha=l;l=l+512|0;c[Ha+48>>2]=c[b>>2];c[Ha>>2]=c[b+64>>2];v=Ha+48+4|0;c[v>>2]=c[b+4>>2];c[Ha+4>>2]=c[b+68>>2];c[Ha+48+8>>2]=c[b+8>>2];c[Ha+8>>2]=c[b+72>>2];c[Ha+48+16>>2]=c[b+16>>2];c[Ha+16>>2]=c[b+80>>2];c[Ha+48+20>>2]=c[b+20>>2];c[Ha+20>>2]=c[b+84>>2];c[Ha+48+24>>2]=c[b+24>>2];c[Ha+24>>2]=c[b+88>>2];c[Ha+48+32>>2]=c[b+32>>2];c[Ha+32>>2]=c[b+96>>2];c[Ha+48+36>>2]=c[b+36>>2];c[Ha+36>>2]=c[b+100>>2];c[Ha+48+40>>2]=c[b+40>>2];c[Ha+40>>2]=c[b+104>>2];Ea=c[a+4>>2]|0;na=+g[Ea+28>>2];oa=+g[Ea+32>>2];ma=+g[Ea+36>>2];ka=+gb[c[(c[Ea>>2]|0)+48>>2]&15](Ea);la=+gb[c[(c[Ea>>2]|0)+48>>2]&15](Ea);ma=(ma+ +gb[c[(c[Ea>>2]|0)+48>>2]&15](Ea))*2.0;Ea=c[a+8>>2]|0;ua=+g[Ea+28>>2];va=+g[Ea+32>>2];ya=+g[Ea+36>>2];sa=+gb[c[(c[Ea>>2]|0)+48>>2]&15](Ea);ta=+gb[c[(c[Ea>>2]|0)+48>>2]&15](Ea);ya=(ya+ +gb[c[(c[Ea>>2]|0)+48>>2]&15](Ea))*2.0;S=+g[b+112>>2]-+g[b+48>>2];U=+g[b+116>>2]-+g[b+52>>2];T=+g[b+120>>2]-+g[b+56>>2];ea=+g[Ha+48>>2];ca=+g[Ha+48+16>>2];da=+g[Ha+48+32>>2];ba=+g[v>>2];Z=+g[Ha+48+20>>2];aa=+g[Ha+48+36>>2];ha=+g[Ha+48+8>>2];ja=+g[Ha+48+24>>2];pa=+g[Ha+48+40>>2];g[Ha+404>>2]=(na+ka)*2.0*.5;g[Ha+404+4>>2]=(oa+la)*2.0*.5;g[Ha+404+8>>2]=ma*.5;g[Ha+392>>2]=(ua+sa)*2.0*.5;g[Ha+392+4>>2]=(va+ta)*2.0*.5;g[Ha+392+8>>2]=ya*.5;za=+g[Ha>>2];qa=+g[Ha+16>>2];wa=+g[Ha+32>>2];Aa=+g[Ha+4>>2];ra=+g[Ha+20>>2];xa=+g[Ha+36>>2];Ba=+g[Ha+8>>2];Fa=+g[Ha+24>>2];Ga=+g[Ha+40>>2];D=+B(+(ea*za+ca*qa+da*wa));F=+B(+(ea*Aa+ca*ra+da*xa));V=+B(+(ea*Ba+ca*Fa+da*Ga));E=+B(+(za*ba+qa*Z+wa*aa));Q=+B(+(Aa*ba+ra*Z+xa*aa));W=+B(+(Ba*ba+Fa*Z+Ga*aa));X=+B(+(za*ha+qa*ja+wa*pa));Y=+B(+(Aa*ha+ra*ja+xa*pa));R=+B(+(Ba*ha+Fa*ja+Ga*pa));m=+B(+(S*ea+U*ca+T*da))-(ya*.5*V+((na+ka)*2.0*.5+D*(ua+sa)*2.0*.5+F*(va+ta)*2.0*.5));if(m>0.0){l=Ha;return}if(m>-3402823466385288598117041.0e14){e=1;f=S*ea+U*ca+T*da<0.0&1;a=Ha+48|0}else{e=0;f=0;a=0;m=-3402823466385288598117041.0e14}h=+B(+(S*ba+U*Z+T*aa))-((oa+la)*2.0*.5+E*(ua+sa)*2.0*.5+Q*(va+ta)*2.0*.5+W*ya*.5);if(h>0.0){l=Ha;return}if(h>m){e=2;f=S*ba+U*Z+T*aa<0.0&1;a=v;m=h}h=+B(+(S*ha+U*ja+T*pa))-(ma*.5+X*(ua+sa)*2.0*.5+Y*(va+ta)*2.0*.5+R*ya*.5);if(h>0.0){l=Ha;return}if(h>m){e=3;f=S*ha+U*ja+T*pa<0.0&1;a=Ha+48+8|0;m=h}h=+B(+(S*za+U*qa+T*wa))-((ua+sa)*2.0*.5+(D*(na+ka)*2.0*.5+E*(oa+la)*2.0*.5+X*ma*.5));if(h>0.0){l=Ha;return}if(h>m){e=4;f=S*za+U*qa+T*wa<0.0&1;a=Ha;m=h}h=+B(+(S*Aa+U*ra+T*xa))-((va+ta)*2.0*.5+(F*(na+ka)*2.0*.5+Q*(oa+la)*2.0*.5+Y*ma*.5));if(h>0.0){l=Ha;return}if(h>m){e=5;f=S*Aa+U*ra+T*xa<0.0&1;a=Ha+4|0;m=h}h=+B(+(S*Ba+U*Fa+T*Ga))-(ya*.5+(V*(na+ka)*2.0*.5+W*(oa+la)*2.0*.5+R*ma*.5));if(h>0.0){l=Ha;return}if(h>m){e=6;f=S*Ba+U*Fa+T*Ga<0.0&1;a=Ha+8|0;m=h}p=(S*ha+U*ja+T*pa)*(za*ba+qa*Z+wa*aa)-(S*ba+U*Z+T*aa)*(za*ha+qa*ja+wa*pa);r=+B(+p)-((X+9.999999747378752e-06)*(oa+la)*2.0*.5+(E+9.999999747378752e-06)*ma*.5+(V+9.999999747378752e-06)*(va+ta)*2.0*.5+(F+9.999999747378752e-06)*ya*.5);if(r>1.1920928955078125e-07){l=Ha;return}s=(za*ha+qa*ja+wa*pa)*(za*ha+qa*ja+wa*pa)+0.0;y=(za*ba+qa*Z+wa*aa)*(za*ba+qa*Z+wa*aa);q=+C(+(y+s));if(q>1.1920928955078125e-07?r/q*1.0499999523162842>m:0){o=0.0/q;i=-(za*ha+qa*ja+wa*pa)/q;h=(za*ba+qa*Z+wa*aa)/q;e=7;f=p<0.0&1;a=0;m=r/q}else{o=0.0;i=0.0;h=0.0}p=(S*ha+U*ja+T*pa)*(Aa*ba+ra*Z+xa*aa)-(S*ba+U*Z+T*aa)*(Aa*ha+ra*ja+xa*pa);r=+B(+p)-((Y+9.999999747378752e-06)*(oa+la)*2.0*.5+(Q+9.999999747378752e-06)*ma*.5+(V+9.999999747378752e-06)*(ua+sa)*2.0*.5+(D+9.999999747378752e-06)*ya*.5);if(r>1.1920928955078125e-07){l=Ha;return}t=(Aa*ha+ra*ja+xa*pa)*(Aa*ha+ra*ja+xa*pa)+0.0;z=(Aa*ba+ra*Z+xa*aa)*(Aa*ba+ra*Z+xa*aa);q=+C(+(z+t));if(q>1.1920928955078125e-07?r/q*1.0499999523162842>m:0){o=0.0/q;i=-(Aa*ha+ra*ja+xa*pa)/q;h=(Aa*ba+ra*Z+xa*aa)/q;e=8;f=p<0.0&1;a=0;m=r/q}p=(S*ha+U*ja+T*pa)*(Ba*ba+Fa*Z+Ga*aa)-(S*ba+U*Z+T*aa)*(Ba*ha+Fa*ja+Ga*pa);r=+B(+p)-((R+9.999999747378752e-06)*(oa+la)*2.0*.5+(W+9.999999747378752e-06)*ma*.5+(F+9.999999747378752e-06)*(ua+sa)*2.0*.5+(D+9.999999747378752e-06)*(va+ta)*2.0*.5);if(r>1.1920928955078125e-07){l=Ha;return}w=(Ba*ha+Fa*ja+Ga*pa)*(Ba*ha+Fa*ja+Ga*pa)+0.0;A=(Ba*ba+Fa*Z+Ga*aa)*(Ba*ba+Fa*Z+Ga*aa);q=+C(+(A+w));if(q>1.1920928955078125e-07?r/q*1.0499999523162842>m:0){o=0.0/q;i=-(Ba*ha+Fa*ja+Ga*pa)/q;h=(Ba*ba+Fa*Z+Ga*aa)/q;e=9;f=p<0.0&1;a=0;m=r/q}p=(S*ea+U*ca+T*da)*(za*ha+qa*ja+wa*pa)-(S*ha+U*ja+T*pa)*(ea*za+ca*qa+da*wa);r=+B(+p)-((X+9.999999747378752e-06)*(na+ka)*2.0*.5+(D+9.999999747378752e-06)*ma*.5+(W+9.999999747378752e-06)*(va+ta)*2.0*.5+(Q+9.999999747378752e-06)*ya*.5);if(r>1.1920928955078125e-07){l=Ha;return}x=(ea*za+ca*qa+da*wa)*(ea*za+ca*qa+da*wa);q=+C(+(x+s));do if(q>1.1920928955078125e-07){if(!(r/q*1.0499999523162842>m))break;o=(za*ha+qa*ja+wa*pa)/q;i=0.0/q;h=-(ea*za+ca*qa+da*wa)/q;e=10;f=p<0.0&1;a=0;m=r/q}while(0);p=(S*ea+U*ca+T*da)*(Aa*ha+ra*ja+xa*pa)-(S*ha+U*ja+T*pa)*(ea*Aa+ca*ra+da*xa);r=+B(+p)-((Y+9.999999747378752e-06)*(na+ka)*2.0*.5+(F+9.999999747378752e-06)*ma*.5+(W+9.999999747378752e-06)*(ua+sa)*2.0*.5+(E+9.999999747378752e-06)*ya*.5);if(r>1.1920928955078125e-07){l=Ha;return}u=(ea*Aa+ca*ra+da*xa)*(ea*Aa+ca*ra+da*xa);q=+C(+(u+t));do if(q>1.1920928955078125e-07){if(!(r/q*1.0499999523162842>m))break;o=(Aa*ha+ra*ja+xa*pa)/q;i=0.0/q;h=-(ea*Aa+ca*ra+da*xa)/q;e=11;f=p<0.0&1;a=0;m=r/q}while(0);p=(S*ea+U*ca+T*da)*(Ba*ha+Fa*ja+Ga*pa)-(S*ha+U*ja+T*pa)*(ea*Ba+ca*Fa+da*Ga);r=+B(+p)-((R+9.999999747378752e-06)*(na+ka)*2.0*.5+(V+9.999999747378752e-06)*ma*.5+(Q+9.999999747378752e-06)*(ua+sa)*2.0*.5+(E+9.999999747378752e-06)*(va+ta)*2.0*.5);if(r>1.1920928955078125e-07){l=Ha;return}s=(ea*Ba+ca*Fa+da*Ga)*(ea*Ba+ca*Fa+da*Ga);q=+C(+(s+w));do if(q>1.1920928955078125e-07){if(!(r/q*1.0499999523162842>m))break;o=(Ba*ha+Fa*ja+Ga*pa)/q;i=0.0/q;h=-(ea*Ba+ca*Fa+da*Ga)/q;e=12;f=p<0.0&1;a=0;m=r/q}while(0);q=(S*ba+U*Z+T*aa)*(ea*za+ca*qa+da*wa)-(S*ea+U*ca+T*da)*(za*ba+qa*Z+wa*aa);r=+B(+q)-((E+9.999999747378752e-06)*(na+ka)*2.0*.5+(D+9.999999747378752e-06)*(oa+la)*2.0*.5+(R+9.999999747378752e-06)*(va+ta)*2.0*.5+(Y+9.999999747378752e-06)*ya*.5);if(r>1.1920928955078125e-07){l=Ha;return}p=+C(+(x+y+0.0));do if(p>1.1920928955078125e-07){if(!(r/p*1.0499999523162842>m))break;o=-(za*ba+qa*Z+wa*aa)/p;i=(ea*za+ca*qa+da*wa)/p;h=0.0/p;e=13;f=q<0.0&1;a=0;m=r/p}while(0);r=(S*ba+U*Z+T*aa)*(ea*Aa+ca*ra+da*xa)-(S*ea+U*ca+T*da)*(Aa*ba+ra*Z+xa*aa);q=+B(+r)-((Q+9.999999747378752e-06)*(na+ka)*2.0*.5+(F+9.999999747378752e-06)*(oa+la)*2.0*.5+(R+9.999999747378752e-06)*(ua+sa)*2.0*.5+(X+9.999999747378752e-06)*ya*.5);if(q>1.1920928955078125e-07){l=Ha;return}p=+C(+(u+z+0.0));do if(p>1.1920928955078125e-07){if(!(q/p*1.0499999523162842>m))break;o=-(Aa*ba+ra*Z+xa*aa)/p;i=(ea*Aa+ca*ra+da*xa)/p;h=0.0/p;e=14;f=r<0.0&1;a=0;m=q/p}while(0);r=(S*ba+U*Z+T*aa)*(ea*Ba+ca*Fa+da*Ga)-(S*ea+U*ca+T*da)*(Ba*ba+Fa*Z+Ga*aa);q=+B(+r)-((W+9.999999747378752e-06)*(na+ka)*2.0*.5+(V+9.999999747378752e-06)*(oa+la)*2.0*.5+(Y+9.999999747378752e-06)*(ua+sa)*2.0*.5+(X+9.999999747378752e-06)*(va+ta)*2.0*.5);if(q>1.1920928955078125e-07){l=Ha;return}p=+C(+(s+A+0.0));do if(p>1.1920928955078125e-07){if(!(q/p*1.0499999523162842>m)){Ca=55;break}o=-(Ba*ba+Fa*Z+Ga*aa)/p;i=(ea*Ba+ca*Fa+da*Ga)/p;h=0.0/p;e=15;f=r<0.0&1;m=q/p;Ca=58}else Ca=55;while(0);do if((Ca|0)==55){if(!e){l=Ha;return}if(!a){Ca=58;break}Da=c[a>>2]|0;Ea=c[a+16>>2]|0;k=c[a+32>>2]|0;h=(c[j>>2]=Da,+g[j>>2]);i=(c[j>>2]=Ea,+g[j>>2]);o=(c[j>>2]=k,+g[j>>2]);n=e;e=Da;a=Ea;F=m}while(0);if((Ca|0)==58){da=o*+g[Ha+48>>2]+i*+g[v>>2]+h*ha;k=(g[j>>2]=da,c[j>>2]|0);ea=o*+g[Ha+48+16>>2]+i*+g[Ha+48+20>>2]+h*ja;a=(g[j>>2]=ea,c[j>>2]|0);F=o*+g[Ha+48+32>>2]+i*+g[Ha+48+36>>2]+h*pa;h=da;i=ea;o=F;n=e;e=k;k=(g[j>>2]=F,c[j>>2]|0);F=m}if(!f){Da=a;Ea=k}else{e=(g[j>>2]=-h,c[j>>2]|0);Da=(g[j>>2]=-i,c[j>>2]|0);Ea=(g[j>>2]=-o,c[j>>2]|0)}if((n|0)>6){E=(c[j>>2]=e,+g[j>>2]);D=(c[j>>2]=Da,+g[j>>2]);A=(c[j>>2]=Ea,+g[j>>2]);i=+g[Ha+48>>2];t=+g[Ha+48+16>>2];w=+g[Ha+48+32>>2];u=(E*i+D*t+A*w>0.0?1.0:-1.0)*(na+ka)*2.0*.5;z=+g[v>>2];y=+g[Ha+48+20>>2];h=+g[Ha+48+36>>2];s=(E*z+D*y+A*h>0.0?1.0:-1.0)*(oa+la)*2.0*.5;x=(E*ha+D*ja+A*pa>0.0?1.0:-1.0)*ma*.5;z=+g[b+48>>2]+u*i+s*z+x*ha;y=+g[b+52>>2]+u*t+s*y+x*ja;x=+g[b+56>>2]+u*w+s*h+x*pa;c[Ha+448>>2]=c[b+112>>2];c[Ha+448+4>>2]=c[b+112+4>>2];c[Ha+448+8>>2]=c[b+112+8>>2];h=(E*za+D*qa+A*wa>0.0?-1.0:1.0)*(ua+sa)*2.0*.5;s=(E*Aa+D*ra+A*xa>0.0?-1.0:1.0)*(va+ta)*2.0*.5;w=+g[Ha+448+4>>2]+h*qa+s*ra;u=+g[Ha+448+8>>2]+h*wa+s*xa;t=(E*Ba+D*Fa+A*Ga>0.0?-1.0:1.0)*ya*.5;s=+g[Ha+448>>2]+h*za+s*Aa+t*Ba;g[Ha+448>>2]=s;g[Ha+448+4>>2]=w+t*Fa;g[Ha+448+8>>2]=u+t*Ga;Ea=n+-7|0;h=+g[Ha+48+(((Ea|0)/3|0)<<2)>>2];i=+g[Ha+48+(((Ea|0)/3|0)+4<<2)>>2];m=+g[Ha+48+(((Ea|0)/3|0)+8<<2)>>2];p=+g[Ha+(((Ea|0)%3|0)<<2)>>2];q=+g[Ha+(((Ea|0)%3|0)+4<<2)>>2];r=+g[Ha+(((Ea|0)%3|0)+8<<2)>>2];o=1.0-(h*p+i*q+m*r)*(h*p+i*q+m*r);if(!(o<=9.999999747378752e-05))h=(((s-z)*h+(w+t*Fa-y)*i+(u+t*Ga-x)*m)*(h*p+i*q+m*r)-((s-z)*p+(w+t*Fa-y)*q+(u+t*Ga-x)*r))*(1.0/o);else h=0.0;g[Ha+448>>2]=s+h*p;g[Ha+448+4>>2]=w+t*Fa+h*q;g[Ha+448+8>>2]=u+t*Ga+h*r;Ea=c[(c[d>>2]|0)+16>>2]|0;g[Ha+416>>2]=-E;g[Ha+416+4>>2]=-D;g[Ha+416+8>>2]=-A;g[Ha+416+12>>2]=0.0;Lb[Ea&15](d,Ha+416|0,Ha+448|0,F);l=Ha;return}fa=(n|0)<4;ha=(c[j>>2]=e,+g[j>>2]);if(fa){ca=(c[j>>2]=Da,+g[j>>2]);da=(c[j>>2]=Ea,+g[j>>2]);a=Ha+48|0;$=Ha;P=Ha+404|0;k=Ha+392|0;ea=ha;ia=b+48|0;f=b+112|0}else{ca=-(c[j>>2]=Da,+g[j>>2]);da=-(c[j>>2]=Ea,+g[j>>2]);a=Ha;$=Ha+48|0;P=Ha+392|0;k=Ha+404|0;ea=-ha;ia=b+112|0;f=b+48|0}Y=ea*+g[$>>2]+ca*+g[$+16>>2]+da*+g[$+32>>2];g[Ha+376>>2]=Y;X=ea*+g[$+4>>2]+ca*+g[$+20>>2]+da*+g[$+36>>2];g[Ha+376+4>>2]=X;W=ea*+g[$+8>>2]+ca*+g[$+24>>2]+da*+g[$+40>>2];g[Ha+376+8>>2]=W;Y=+B(+Y);X=+B(+X);W=+B(+W);e=X>Y?(X>W?1:2):Y>W?0:2;_=(X>Y?X>W:Y>W)?2:1;p=+g[k+(e<<2)>>2];i=+g[f>>2]-+g[ia>>2];h=p*+g[$+(e<<2)>>2];m=+g[f+4>>2];ga=ia+4|0;o=+g[ga>>2];if(+g[Ha+376+(e<<2)>>2]<0.0){ba=i+h;aa=m-o+p*+g[$+((e|4)<<2)>>2];Z=+g[f+8>>2]-+g[ia+8>>2]+p*+g[$+((e|8)<<2)>>2]}else{ba=i-h;aa=m-o-p*+g[$+((e|4)<<2)>>2];Z=+g[f+8>>2]-+g[ia+8>>2]-p*+g[$+((e|8)<<2)>>2]}N=(fa?-1:-4)+n|0;switch(N|0){case 0:{e=1;f=2;break}case 1:{e=0;f=2;break}default:{e=0;f=1}}M=a+(e<<2)|0;U=+g[M>>2];S=+g[M+16>>2];T=+g[M+32>>2];V=ba*U+aa*S+Z*T;M=a+(f<<2)|0;y=+g[M>>2];w=+g[M+16>>2];x=+g[M+32>>2];R=ba*y+aa*w+Z*x;M=$+((Y>W&(X>Y^1)&1)<<2)|0;D=+g[M>>2];z=+g[M+16>>2];A=+g[M+32>>2];O=$+(_<<2)|0;Q=+g[O>>2];E=+g[O+16>>2];F=+g[O+32>>2];Fa=+g[k+((Y>W&(X>Y^1)&1)<<2)>>2];Ga=+g[k+(_<<2)>>2];Ba=(U*Q+S*E+T*F)*Ga;Ga=(y*Q+w*E+x*F)*Ga;g[Ha+344>>2]=V-(U*D+S*z+T*A)*Fa-Ba;g[Ha+344+4>>2]=R-(y*D+w*z+x*A)*Fa-Ga;g[Ha+344+8>>2]=V-(U*D+S*z+T*A)*Fa+Ba;g[Ha+344+12>>2]=R-(y*D+w*z+x*A)*Fa+Ga;g[Ha+344+16>>2]=V+(U*D+S*z+T*A)*Fa+Ba;g[Ha+344+20>>2]=R+(y*D+w*z+x*A)*Fa+Ga;g[Ha+344+24>>2]=V+(U*D+S*z+T*A)*Fa-Ba;g[Ha+344+28>>2]=R+(y*D+w*z+x*A)*Fa-Ga;c[Ha+336>>2]=c[P+(e<<2)>>2];c[Ha+336+4>>2]=c[P+(f<<2)>>2];L=0;f=4;G=Ha+344|0;J=Ha+272|0;a:while(1){H=Ha+336+(L<<2)|0;I=1-L|0;do if((f|0)>0){a=0;b=G;e=J;while(1){k=b+(L<<2)|0;h=+g[k>>2];i=+g[H>>2];if(i>-h){c[e>>2]=c[b>>2];c[e+4>>2]=c[b+4>>2];a=a+1|0;if(a&8|0){f=a;e=J;break a}h=+g[k>>2];i=+g[H>>2];n=e+8|0}else n=e;v=(f|0)>1;k=b;b=b+8|0;e=v?b:G;m=+g[e+(L<<2)>>2];if(i>-h^i>-m){Ga=+g[k+(I<<2)>>2];g[n+(I<<2)>>2]=Ga+(-i-h)*((+g[e+(I<<2)>>2]-Ga)/(m-h));g[n+(L<<2)>>2]=-+g[H>>2];e=a+1|0;if(!(e&8)){a=e;e=n+8|0}else{f=e;e=J;break a}}else e=n;if(!v)break;else f=f+-1|0}e=(J|0)==(Ha+272|0)?Ha+448|0:Ha+272|0;if((a|0)<=0){f=0;break}b=a;f=0;G=J;a=e;while(1){k=G+(L<<2)|0;i=+g[k>>2];h=+g[H>>2];if(i>2]=c[G>>2];c[a+4>>2]=c[G+4>>2];f=f+1|0;if(f&8|0)break a;h=+g[H>>2];i=+g[k>>2];a=a+8|0}v=(b|0)>1;n=G;G=G+8|0;k=v?G:J;m=+g[k+(L<<2)>>2];if(i>2];g[a+(I<<2)>>2]=Ga+(h-i)*((+g[k+(I<<2)>>2]-Ga)/(m-i));c[a+(L<<2)>>2]=c[H>>2];f=f+1|0;if(!(f&8))a=a+8|0;else break a}if(!v)break;else b=b+-1|0}}else{e=(J|0)==(Ha+272|0)?Ha+448|0:Ha+272|0;f=0}while(0);L=L+1|0;if((L|0)>=2)break;else{G=e;J=(e|0)==(Ha+272|0)?Ha+448|0:Ha+272|0}}if((e|0)!=(Ha+272|0))_h(Ha+272|0,e|0,f<<3|0)|0;if((f|0)>=1){u=1.0/((U*D+S*z+T*A)*(y*Q+w*E+x*F)-(y*D+w*z+x*A)*(U*Q+S*E+T*F));t=+g[P+(N<<2)>>2];s=+g[M>>2];p=+g[O>>2];q=+g[$+((Y>W&(X>Y^1)&1|4)<<2)>>2];r=+g[$+((_|4)<<2)>>2];o=+g[$+((Y>W&(X>Y^1)&1|8)<<2)>>2];m=+g[$+((_|8)<<2)>>2];a=0;e=0;do{$=e<<1;h=+g[Ha+272+($<<2)>>2];i=+g[Ha+272+(($|1)<<2)>>2];Aa=(y*Q+w*E+x*F)*u*(h-V)-(U*Q+S*E+T*F)*u*(i-R);Ga=(U*D+S*z+T*A)*u*(i-R)-(y*D+w*z+x*A)*u*(h-V);$=a*3|0;Ba=ba+Aa*s+Ga*p;g[Ha+176+($<<2)>>2]=Ba;Fa=aa+Aa*q+Ga*r;g[Ha+176+($+1<<2)>>2]=Fa;Ga=Z+Aa*o+Ga*m;g[Ha+176+($+2<<2)>>2]=Ga;Ga=t-(ea*Ba+ca*Fa+da*Ga);g[Ha+144+(a<<2)>>2]=Ga;if(Ga>=0.0){$=a<<1;g[Ha+272+($<<2)>>2]=h;g[Ha+272+(($|1)<<2)>>2]=i;a=a+1|0}e=e+1|0}while((e|0)!=(f|0));b:do if((a|0)>=1){b=(a|0)<4?a:4;G=(b|0)>1?b:1;if((a|0)<=(G|0))if(fa){f=ia+8|0;i=-(c[j>>2]=Da,+g[j>>2]);h=-(c[j>>2]=Ea,+g[j>>2]);e=0;while(1){Ea=e*3|0;g[Ha+448>>2]=+g[Ha+176+(Ea<<2)>>2]+ +g[ia>>2];g[Ha+448+4>>2]=+g[Ha+176+(Ea+1<<2)>>2]+ +g[ga>>2];g[Ha+448+8>>2]=+g[Ha+176+(Ea+2<<2)>>2]+ +g[f>>2];Ea=c[(c[d>>2]|0)+16>>2]|0;g[Ha+416>>2]=-ha;g[Ha+416+4>>2]=i;g[Ha+416+8>>2]=h;g[Ha+416+12>>2]=0.0;Lb[Ea&15](d,Ha+416|0,Ha+448|0,-+g[Ha+144+(e<<2)>>2]);e=e+1|0;if((e|0)==(a|0))break b}}else{f=ia+8|0;i=(c[j>>2]=Da,+g[j>>2]);h=(c[j>>2]=Ea,+g[j>>2]);e=0;while(1){Ea=e*3|0;Ga=+g[Ha+144+(e<<2)>>2];g[Ha+448>>2]=+g[Ha+176+(Ea<<2)>>2]+ +g[ia>>2]-ha*Ga;g[Ha+448+4>>2]=+g[Ha+176+(Ea+1<<2)>>2]+ +g[ga>>2]-i*Ga;g[Ha+448+8>>2]=+g[Ha+176+(Ea+2<<2)>>2]+ +g[f>>2]-h*Ga;Ea=c[(c[d>>2]|0)+16>>2]|0;g[Ha+416>>2]=-ha;g[Ha+416+4>>2]=-i;g[Ha+416+8>>2]=-h;g[Ha+416+12>>2]=0.0;Lb[Ea&15](d,Ha+416|0,Ha+448|0,-Ga);e=e+1|0;if((e|0)==(a|0))break b}}c:do if((a|0)>1){f=1;k=0;i=+g[Ha+144>>2];while(1){h=+g[Ha+144+(f<<2)>>2];e=h>i;k=e?f:k;f=f+1|0;if((f|0)==(a|0))break;else i=e?h:i}switch(a|0){case 1:{e=Ha+112|0;f=Ha+112|0;a=1;Ca=112;break c}case 2:{e=Ha+112|0;f=Ha+112|0;a=2;i=(+g[Ha+272>>2]+ +g[Ha+272+8>>2])*.5;h=(+g[Ha+272+4>>2]+ +g[Ha+272+12>>2])*.5;Ca=117;break c}default:{}}f=a+-1|0;h=0.0;i=0.0;r=0.0;e=0;do{$=e<<1;Aa=+g[Ha+272+($<<2)>>2];Ba=+g[Ha+272+($+3<<2)>>2];Fa=+g[Ha+272+($+2<<2)>>2];Ga=+g[Ha+272+(($|1)<<2)>>2];h=h+(Aa*Ba-Fa*Ga);i=i+(Aa+Fa)*(Aa*Ba-Fa*Ga);r=r+(Ba+Ga)*(Aa*Ba-Fa*Ga);e=e+1|0}while((e|0)!=(f|0));$=a<<1;m=+g[Ha+272+($+-2<<2)>>2];o=+g[Ha+272+4>>2];p=+g[Ha+272>>2];q=+g[Ha+272+($+-1<<2)>>2];h=h+(m*o-p*q);if(+B(+h)>1.1920928955078125e-07)h=1.0/(h*3.0);else h=999999984306749440.0;if((a|0)>0){n=Ha+112|0;v=Ha+448|0;f=Ha+112|0;i=h*(i+(m*o-p*q)*(m+p));h=h*(r+(m*o-p*q)*(q+o));Ca=120;break}f=Ha+112|0;e=0;v=a}else{e=Ha+112|0;f=Ha+112|0;k=0;Ca=112}while(0);if((Ca|0)==112){i=+g[Ha+272>>2];h=+g[Ha+272+4>>2];Ca=117}if((Ca|0)==117){n=e;v=Ha+448|0;Ca=120}if((Ca|0)==120){e=0;do{Ca=e<<1;g[Ha+448+(e<<2)>>2]=+K(+(+g[Ha+272+((Ca|1)<<2)>>2]-h),+(+g[Ha+272+(Ca<<2)>>2]-i));e=e+1|0}while((e|0)!=(a|0));e=0;do{c[Ha+416+(e<<2)>>2]=1;e=e+1|0}while((e|0)!=(a|0));e=1;v=a}a=Ha+416+(k<<2)|0;c[a>>2]=0;c[f>>2]=k;d:do if((b|0)>1){o=+g[Ha+448+(k<<2)>>2];if(e){a=Ha+112+4|0;n=1}else{e=Ha+112+4|0;f=1;while(1){c[e>>2]=k;c[a>>2]=0;f=f+1|0;if((f|0)==(G|0))break d;else e=e+4|0}}while(1){m=6.2831854820251465/+(G|0)*+(n|0)+o;m=m>3.1415927410125732?m+-6.2831854820251465:m;c[a>>2]=k;e=k;f=0;i=1.0e9;while(1){do if(!(c[Ha+416+(f<<2)>>2]|0))h=i;else{h=+B(+(+g[Ha+448+(f<<2)>>2]-m));h=h>3.1415927410125732?6.2831854820251465-h:h;if(!(h>2]=f;e=f}while(0);f=f+1|0;if((f|0)==(v|0))break;else i=h}c[Ha+416+(e<<2)>>2]=0;n=n+1|0;if((n|0)==(G|0))break;else a=a+4|0}}while(0);if((G|0)>0){f=ia+8|0;i=(c[j>>2]=Da,+g[j>>2]);h=(c[j>>2]=Ea,+g[j>>2]);if(fa){e=0;do{Ea=c[Ha+112+(e<<2)>>2]|0;g[Ha+448>>2]=+g[Ha+176+(Ea*3<<2)>>2]+ +g[ia>>2];g[Ha+448+4>>2]=+g[Ha+176+((Ea*3|0)+1<<2)>>2]+ +g[ga>>2];g[Ha+448+8>>2]=+g[Ha+176+((Ea*3|0)+2<<2)>>2]+ +g[f>>2];Da=c[(c[d>>2]|0)+16>>2]|0;g[Ha+416>>2]=-ha;g[Ha+416+4>>2]=-i;g[Ha+416+8>>2]=-h;g[Ha+416+12>>2]=0.0;Lb[Da&15](d,Ha+416|0,Ha+448|0,-+g[Ha+144+(Ea<<2)>>2]);e=e+1|0}while((e|0)<(G|0))}else{e=0;do{Da=c[Ha+112+(e<<2)>>2]|0;Aa=+g[Ha+176+(Da*3<<2)>>2]+ +g[ia>>2];g[Ha+448>>2]=Aa;Ba=+g[Ha+176+((Da*3|0)+1<<2)>>2]+ +g[ga>>2];g[Ha+448+4>>2]=Ba;Fa=+g[Ha+176+((Da*3|0)+2<<2)>>2]+ +g[f>>2];g[Ha+448+8>>2]=Fa;Ea=c[(c[d>>2]|0)+16>>2]|0;g[Ha+416>>2]=-ha;g[Ha+416+4>>2]=-i;g[Ha+416+8>>2]=-h;g[Ha+416+12>>2]=0.0;Ga=+g[Ha+144+(Da<<2)>>2];g[Ha+96>>2]=Aa-ha*Ga;g[Ha+96+4>>2]=Ba-Ga*i;g[Ha+96+8>>2]=Fa-Ga*h;g[Ha+96+12>>2]=0.0;Lb[Ea&15](d,Ha+416|0,Ha+96|0,-Ga);e=e+1|0}while((e|0)<(G|0))}}}while(0)}l=Ha;return} +function Wj(b,d,e,f){b=b|0;d=d|0;e=+e;f=f|0;var h=0;h=hs()|0;c[h>>2]=5068;a[h+144>>0]=1;c[h+140>>2]=0;c[h+132>>2]=0;c[h+136>>2]=0;c[h+176>>2]=f;g[h+56>>2]=.019999999552965164;c[h+60>>2]=0;c[h+60+4>>2]=0;c[h+60+8>>2]=0;c[h+60+12>>2]=0;a[h+170>>0]=1;c[h+8>>2]=b;g[h+52>>2]=e;g[h+48>>2]=0.0;c[h+12>>2]=d;a[h+171>>0]=1;g[h+172>>2]=0.0;g[h+16>>2]=0.0;g[h+20>>2]=0.0;g[h+44>>2]=29.399999618530273;g[h+24>>2]=55.0;g[h+28>>2]=10.0;a[h+168>>0]=0;a[h+169>>0]=0;a[h+180>>0]=1;g[h+36>>2]=.7853981852531433;g[h+40>>2]=.7071067690849304;g[h+108>>2]=0.0;a[h+181>>0]=0;a[h+182>>0]=0;return h|0}function Xj(a,b,d){a=a|0;b=b|0;d=d|0;do if(!((b|0)==8&(d|0)==8)){if((b|0)==8&(d|0)==1){b=a+76|0;break}if((b|0)==1&(d|0)==8){b=a+80|0;break}if(!(d|b)){b=a+72|0;break}if((b|0)<20&(d|0)==28){b=a+88|0;break}if((b|0)==28&(d|0)<20){b=a+84|0;break}if((b|0)<20){if((d|0)<20){b=a+32|0;break}if((d+-21|0)>>>0<9){b=a+36|0;break}}else{if((d|0)<20&(b+-21|0)>>>0<9){b=a+40|0;break}if((b|0)==31)if((d|0)==31){b=a+48|0;break}else{b=a+44|0;break}}if((d|0)==31){b=a+52|0;break}else{b=a+56|0;break}}else b=a+60|0;while(0);return c[b>>2]|0}function Yj(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;f=l;l=l+16|0;c[a+4>>2]=c[b+40>>2];e=c[b>>2]|0;c[a+76>>2]=e;if(d){c[a+44>>2]=c[b+8>>2];c[a+44+4>>2]=c[b+8+4>>2];c[a+44+8>>2]=c[b+8+8>>2];c[a+44+12>>2]=c[b+8+12>>2]}else{d=bI(KH(e)|0)|0;Pl(f,d,+g[b+8>>2],+g[b+12>>2],+g[b+16>>2]);c[a+44>>2]=c[f>>2];c[a+44+4>>2]=c[f+4>>2];c[a+44+8>>2]=c[f+8>>2];c[a+44+12>>2]=c[f+12>>2]}c[a+60>>2]=c[b+24>>2];c[a+60+4>>2]=c[b+24+4>>2];c[a+60+8>>2]=c[b+24+8>>2];c[a+60+12>>2]=c[b+24+12>>2];l=f;return +(+g[b+40>>2])}function Zj(a,b,d,e,f){a=a|0;b=b|0;d=+d;e=e|0;f=f|0;var h=0,i=0.0,j=0.0,k=0.0,m=0.0,n=0.0;h=l;l=l+48|0;c[h+32>>2]=e;c[h+32+4>>2]=f;n=+g[b>>2];m=+g[b+4>>2];i=+g[b+8>>2];k=+g[a+56>>2]*n+ +g[a+60>>2]*m+ +g[a+64>>2]*i;j=n*+g[a+72>>2]+m*+g[a+76>>2]+i*+g[a+80>>2];i=n*+g[a+88>>2]+m*+g[a+92>>2]+i*+g[a+96>>2];c[h>>2]=c[a+48>>2];c[h+4>>2]=h+32;g[h+8>>2]=k;g[h+12>>2]=j;g[h+16>>2]=i;g[h+20>>2]=0.0;g[h+24>>2]=d;f=c[a+44>>2]|0;d=+jb[c[(c[f>>2]|0)+12>>2]&15](f,h,1);l=h;return +d}function _j(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0.0,i=0.0,k=0.0,m=0,n=0;f=l;l=l+48|0;Kb[c[(c[a>>2]|0)+124>>2]&127](a,f+32|0,e);n=c[f+32>>2]|0;m=c[f+32+4>>2]|0;e=c[f+32+8>>2]|0;c[b>>2]=n;c[b+4>>2]=m;c[b+8>>2]=e;g[b+12>>2]=0.0;b=c[(c[a>>2]|0)+64>>2]|0;k=-(c[j>>2]=n,+g[j>>2]);i=-(c[j>>2]=m,+g[j>>2]);h=-(c[j>>2]=e,+g[j>>2]);g[f>>2]=k;g[f+4>>2]=i;g[f+8>>2]=h;g[f+12>>2]=0.0;Kb[b&127](f+16|0,a,f);c[d>>2]=c[f+16>>2];c[d+4>>2]=c[f+16+4>>2];c[d+8>>2]=c[f+16+8>>2];c[d+12>>2]=c[f+16+12>>2];l=f;return}function $j(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;if(e>>>0<3)switch(b|0){case 2:{g[a+756+(e<<2)>>2]=d;c[a+1304>>2]=c[a+1304>>2]|4<>2]=d;c[a+1304>>2]=c[a+1304>>2]|2<>2]=d;c[a+1304>>2]=c[a+1304>>2]|1<>>0>=3)return;switch(b|0){case 2:{g[a+868+(e+-3<<6)+32>>2]=d;c[a+1304>>2]=c[a+1304>>2]|4<>2]=d;c[a+1304>>2]=c[a+1304>>2]|2<>2]=d;c[a+1304>>2]=c[a+1304>>2]|1<>2]=5068;a[f+144>>0]=1;c[f+140>>2]=0;c[f+132>>2]=0;c[f+136>>2]=0;c[f+176>>2]=1;g[f+56>>2]=.019999999552965164;c[f+60>>2]=0;c[f+60+4>>2]=0;c[f+60+8>>2]=0;c[f+60+12>>2]=0;a[f+170>>0]=1;c[f+8>>2]=b;g[f+52>>2]=e;g[f+48>>2]=0.0;c[f+12>>2]=d;a[f+171>>0]=1;g[f+172>>2]=0.0;g[f+16>>2]=0.0;g[f+20>>2]=0.0;g[f+44>>2]=29.399999618530273;g[f+24>>2]=55.0;g[f+28>>2]=10.0;a[f+168>>0]=0;a[f+169>>0]=0;a[f+180>>0]=1;g[f+36>>2]=.7853981852531433;g[f+40>>2]=.7071067690849304;g[f+108>>2]=0.0;a[f+181>>0]=0;a[f+182>>0]=0;return f|0}function bk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var h=0;h=ws()|0;c[h+4>>2]=3;c[h+8>>2]=-1;c[h+12>>2]=-1;g[h+16>>2]=3402823466385288598117041.0e14;a[h+20>>0]=1;a[h+21>>0]=0;c[h+24>>2]=-1;c[h+28>>2]=b;c[h+32>>2]=d;g[h+36>>2]=0.0;g[h+40>>2]=.30000001192092896;c[h+44>>2]=0;c[h>>2]=4740;c[h+300>>2]=c[e>>2];c[h+300+4>>2]=c[e+4>>2];c[h+300+8>>2]=c[e+8>>2];c[h+300+12>>2]=c[e+12>>2];c[h+316>>2]=c[f>>2];c[h+316+4>>2]=c[f+4>>2];c[h+316+8>>2]=c[f+8>>2];c[h+316+12>>2]=c[f+12>>2];c[h+332>>2]=0;a[h+344>>0]=0;g[h+348>>2]=.30000001192092896;g[h+352>>2]=1.0;g[h+356>>2]=0.0;return h|0}function ck(b){b=b|0;var d=0;c[b>>2]=4500;d=c[b+80>>2]|0;if(d|0){if(a[b+84>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+80>>2]=0}a[b+84>>0]=1;c[b+80>>2]=0;c[b+72>>2]=0;c[b+76>>2]=0;d=c[b+60>>2]|0;if(d|0){if(a[b+64>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+60>>2]=0}a[b+64>>0]=1;c[b+60>>2]=0;c[b+52>>2]=0;c[b+56>>2]=0;d=c[b+40>>2]|0;if(!d){a[b+44>>0]=1;c[b+40>>2]=0;c[b+32>>2]=0;b=b+36|0;c[b>>2]=0;return}if(a[b+44>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+40>>2]=0;a[b+44>>0]=1;c[b+40>>2]=0;c[b+32>>2]=0;b=b+36|0;c[b>>2]=0;return}function dk(b){b=b|0;var d=0;c[b>>2]=8916;d=c[b+64>>2]|0;if(d|0){if(a[b+68>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+64>>2]=0}a[b+68>>0]=1;c[b+64>>2]=0;c[b+56>>2]=0;c[b+60>>2]=0;d=c[b+44>>2]|0;if(d|0){if(a[b+48>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+44>>2]=0}a[b+48>>0]=1;c[b+44>>2]=0;c[b+36>>2]=0;c[b+40>>2]=0;d=c[b+16>>2]|0;if(!d){a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}function ek(b){b=b|0;var d=0;c[b>>2]=5648;d=c[b+56>>2]|0;if(d|0){if(a[b+60>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+56>>2]=0}a[b+60>>0]=1;c[b+56>>2]=0;c[b+48>>2]=0;c[b+52>>2]=0;d=c[b+36>>2]|0;if(d|0){if(a[b+40>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+36>>2]=0}a[b+40>>0]=1;c[b+36>>2]=0;c[b+28>>2]=0;c[b+32>>2]=0;d=c[b+16>>2]|0;if(!d){d=b+12|0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[d>>2]=0;return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;d=b+12|0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[d>>2]=0;return}function fk(b){b=b|0;var d=0;c[b>>2]=9516;d=c[b+60>>2]|0;if(d|0){if(a[b+64>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+60>>2]=0}a[b+64>>0]=1;c[b+60>>2]=0;c[b+52>>2]=0;c[b+56>>2]=0;d=c[b+40>>2]|0;if(d|0){if(a[b+44>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+40>>2]=0}a[b+44>>0]=1;c[b+40>>2]=0;c[b+32>>2]=0;c[b+36>>2]=0;d=c[b+16>>2]|0;if(!d){a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;b=b+12|0;c[b>>2]=0;return}function gk(){var a=0,b=0,d=0,e=0;e=l;l=l+48|0;a=Nr()|0;if(a|0?(d=c[a>>2]|0,d|0):0){a=c[d+48>>2]|0;b=c[d+48+4>>2]|0;if(!((a&-256|0)==1126902528&(b|0)==1129074247)){c[e+24>>2]=22161;jw(22111,e+24|0)}if((a|0)==1126902529&(b|0)==1129074247)a=c[d+44>>2]|0;else a=d+80|0;c[e+36>>2]=a;d=c[d>>2]|0;a=c[d+4>>2]|0;if(dl(2752,d,e+36|0)|0){d=c[e+36>>2]|0;d=qb[c[(c[d>>2]|0)+8>>2]&127](d)|0;c[e>>2]=22161;c[e+4>>2]=a;c[e+8>>2]=d;jw(22025,e)}else{c[e+16>>2]=22161;c[e+16+4>>2]=a;jw(22070,e+16|0)}}jw(22149,e+32|0)}function hk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,156)|0;d=c[d>>2]|0;c[b+4>>2]=d;c[b>>2]=3784;a[b+8>>0]=1;c[b+12>>2]=3996;c[b+60>>2]=d;c[b+64>>2]=0;a[b+88>>0]=1;c[b+84>>2]=0;c[b+76>>2]=0;c[b+80>>2]=0;a[b+108>>0]=1;c[b+104>>2]=0;c[b+96>>2]=0;c[b+100>>2]=0;a[b+128>>0]=1;c[b+124>>2]=0;c[b+116>>2]=0;c[b+120>>2]=0;a[b+148>>0]=1;c[b+144>>2]=0;c[b+136>>2]=0;c[b+140>>2]=0;c[b+16>>2]=c[f+8>>2];c[b+20>>2]=c[e+8>>2];Rf(b+12|0);return b|0}function ik(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0;i=l;l=l+64|0;c[i+48>>2]=f;c[i+48+4>>2]=h;f=c[a+212>>2]|0;if(!(+g[f+4>>2]>=e)){l=i;return +e}c[i>>2]=c[a+216>>2];c[i+4>>2]=i+48;c[i+8>>2]=c[b>>2];c[i+8+4>>2]=c[b+4>>2];c[i+8+8>>2]=c[b+8>>2];c[i+8+12>>2]=c[b+12>>2];c[i+24>>2]=c[d>>2];c[i+24+4>>2]=c[d+4>>2];c[i+24+8>>2]=c[d+8>>2];c[i+24+12>>2]=c[d+12>>2];g[i+40>>2]=e;e=+jb[c[(c[f>>2]|0)+12>>2]&15](f,i,0);l=i;return +e}function jk(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=+e;f=f|0;h=h|0;var i=0;i=l;l=l+64|0;c[i+48>>2]=f;c[i+48+4>>2]=h;f=c[a+212>>2]|0;if(!(+g[f+4>>2]>=e)){l=i;return +e}c[i>>2]=c[a+216>>2];c[i+4>>2]=i+48;c[i+8>>2]=c[b>>2];c[i+8+4>>2]=c[b+4>>2];c[i+8+8>>2]=c[b+8>>2];c[i+8+12>>2]=c[b+12>>2];c[i+24>>2]=c[d>>2];c[i+24+4>>2]=c[d+4>>2];c[i+24+8>>2]=c[d+8>>2];c[i+24+12>>2]=c[d+12>>2];g[i+40>>2]=e;e=+jb[c[(c[f>>2]|0)+12>>2]&15](f,i,1);l=i;return +e}function kk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,156)|0;d=c[d>>2]|0;c[b+4>>2]=d;c[b>>2]=3784;a[b+8>>0]=0;c[b+12>>2]=3996;c[b+60>>2]=d;c[b+64>>2]=0;a[b+88>>0]=1;c[b+84>>2]=0;c[b+76>>2]=0;c[b+80>>2]=0;a[b+108>>0]=1;c[b+104>>2]=0;c[b+96>>2]=0;c[b+100>>2]=0;a[b+128>>0]=1;c[b+124>>2]=0;c[b+116>>2]=0;c[b+120>>2]=0;a[b+148>>0]=1;c[b+144>>2]=0;c[b+136>>2]=0;c[b+140>>2]=0;c[b+16>>2]=c[e+8>>2];c[b+20>>2]=c[f+8>>2];Rf(b+12|0);return b|0}function lk(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0;c=l;l=l+48|0;d=2.0/+HE(b);f=+g[(bI(b)|0)>>2];e=+g[(KH(b)|0)>>2];i=+g[(JH(b)|0)>>2];h=+g[(IH(b)|0)>>2];g[c+32>>2]=1.0-(e*e*d+i*i*d);g[c+28>>2]=f*e*d-h*i*d;g[c+24>>2]=f*i*d+h*e*d;g[c+20>>2]=f*e*d+h*i*d;g[c+16>>2]=1.0-(f*f*d+i*i*d);g[c+12>>2]=e*i*d-h*f*d;g[c+8>>2]=f*i*d-h*e*d;g[c+4>>2]=e*i*d+h*f*d;g[c>>2]=1.0-(f*f*d+e*e*d);dp(a,c+32|0,c+28|0,c+24|0,c+20|0,c+16|0,c+12|0,c+8|0,c+4|0,c);l=c;return}function mk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0,o=0.0,p=0.0,q=0.0,r=0.0;if(!a)return;if(!(c[a+180>>2]&1))return;p=+g[a+4>>2];r=+g[b>>2];m=+g[a+20>>2];q=+g[b+4>>2];j=+g[a+36>>2];d=+g[b+8>>2];o=+g[a+8>>2];l=+g[a+24>>2];h=+g[a+40>>2];n=+g[a+12>>2];k=+g[a+28>>2];e=+g[a+44>>2];i=(p*r+m*q+j*d)*+g[a+164>>2];f=(r*o+q*l+d*h)*+g[a+168>>2];d=(r*n+q*k+d*e)*+g[a+172>>2];g[b>>2]=p*i+o*f+n*d;g[b+4>>2]=m*i+l*f+k*d;g[b+8>>2]=j*i+h*f+e*d;g[b+12>>2]=0.0;return}function nk(b,d,e,f,h){b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;var i=0;i=is()|0;ve(i,b,d,e,f,h);c[i>>2]=4680;c[i+4>>2]=9;a[i+1309>>0]=0;g[i+1316>>2]=0.0;g[i+1340>>2]=0.0;g[i+1364>>2]=1.0;a[i+1310>>0]=0;g[i+1320>>2]=0.0;g[i+1344>>2]=0.0;g[i+1368>>2]=1.0;a[i+1311>>0]=0;g[i+1324>>2]=0.0;g[i+1348>>2]=0.0;g[i+1372>>2]=1.0;a[i+1312>>0]=0;g[i+1328>>2]=0.0;g[i+1352>>2]=0.0;g[i+1376>>2]=1.0;a[i+1313>>0]=0;g[i+1332>>2]=0.0;g[i+1356>>2]=0.0;g[i+1380>>2]=1.0;a[i+1314>>0]=0;g[i+1336>>2]=0.0;g[i+1360>>2]=0.0;g[i+1384>>2]=1.0;return i|0}function ok(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=c[e+16>>2]|0;if(!f){if(!(xo(e)|0)){f=c[e+16>>2]|0;g=5}}else g=5;a:do if((g|0)==5){g=c[e+20>>2]|0;if((f-g|0)>>>0>>0){ub[c[e+36>>2]&63](e,b,d)|0;break}b:do if((a[e+75>>0]|0)>-1){h=d;while(1){if(!h){f=d;break b}f=h+-1|0;if((a[b+f>>0]|0)==10)break;else h=f}if((ub[c[e+36>>2]&63](e,b,h)|0)>>>0>>0)break a;g=c[e+20>>2]|0;f=d-h|0;b=b+h|0}else f=d;while(0);_h(g|0,b|0,f|0)|0;c[e+20>>2]=(c[e+20>>2]|0)+f}while(0);return}function pk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;e=l;l=l+16|0;Kb[c[(c[b>>2]|0)+68>>2]&127](e,b,d);c[a>>2]=c[e>>2];c[a+4>>2]=c[e+4>>2];c[a+8>>2]=c[e+8>>2];c[a+12>>2]=c[e+12>>2];i=+g[d>>2];h=+g[d+4>>2];f=+g[d+8>>2];k=i*i+h*h+f*f<1.4210854715202004e-14?-1.0:i;j=i*i+h*h+f*f<1.4210854715202004e-14?-1.0:h;f=i*i+h*h+f*f<1.4210854715202004e-14?-1.0:f;h=1.0/+C(+(f*f+(k*k+j*j)));i=+gb[c[(c[b>>2]|0)+48>>2]&15](b);g[a>>2]=+g[a>>2]+i*h*k;g[a+4>>2]=i*h*j+ +g[a+4>>2];g[a+8>>2]=i*h*f+ +g[a+8>>2];l=e;return}function qk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;d=l;l=l+48|0;e=ZF(b,0)|0;g[d+32>>2]=+Ho(c,e);g[d+28>>2]=+wo(c,e);g[d+24>>2]=+vo(c,e);e=ZF(b,1)|0;g[d+20>>2]=+Ho(c,e);g[d+16>>2]=+wo(c,e);g[d+12>>2]=+vo(c,e);b=ZF(b,2)|0;g[d+8>>2]=+Ho(c,b);g[d+4>>2]=+wo(c,b);g[d>>2]=+vo(c,b);nq(a,d+32|0,d+28|0,d+24|0,d+20|0,d+16|0,d+12|0,d+8|0,d+4|0,d);l=d;return}function rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;d=c[b+188>>2]|0;if(d|0){g=c[a+68>>2]|0;g=qb[c[(c[g>>2]|0)+36>>2]&127](g)|0;Kb[c[(c[g>>2]|0)+40>>2]&127](g,d,c[a+24>>2]|0);g=c[a+68>>2]|0;Kb[c[(c[g>>2]|0)+12>>2]&127](g,d,c[a+24>>2]|0);c[b+188>>2]=0}f=c[a+8>>2]|0;if((f|0)<=0)return;g=c[a+16>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0)){h=9;break}}if((h|0)==9)return;if((d|0)>=(f|0))return;c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+16>>2]|0)+(f+-1<<2)>>2]=b;c[a+8>>2]=f+-1;return}function sk(b,d){b=b|0;d=d|0;var e=0,f=0,h=0;g[b+16>>2]=0.0;g[b+20>>2]=0.0;a[b+168>>0]=0;a[b+169>>0]=0;g[b+172>>2]=0.0;c[b+60>>2]=0;c[b+60+4>>2]=0;c[b+60+8>>2]=0;c[b+60+12>>2]=0;b=c[(c[b+8>>2]|0)+284>>2]|0;if((c[(qb[c[(c[b>>2]|0)+28>>2]&127](b)|0)+4>>2]|0)<=0)return;do{f=c[b>>2]|0;h=c[f+12>>2]|0;f=c[c[(qb[c[f+28>>2]&127](b)|0)+12>>2]>>2]|0;e=c[(c[(qb[c[(c[b>>2]|0)+28>>2]&127](b)|0)+12>>2]|0)+4>>2]|0;vb[h&31](b,f,e,c[d+24>>2]|0)|0}while((c[(qb[c[(c[b>>2]|0)+28>>2]&127](b)|0)+4>>2]|0)>0);return}function tk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;c[6175]=(c[6175]|0)+-1;Gb[c[(c[a>>2]|0)+20>>2]&127](a,b);e=c[b+768>>2]|0;d=(c[a+12>>2]|0)+-1|0;g=c[a+20>>2]|0;f=c[g+(e<<2)>>2]|0;c[g+(e<<2)>>2]=c[g+(d<<2)>>2];c[(c[a+20>>2]|0)+(d<<2)>>2]=f;c[(c[(c[a+20>>2]|0)+(e<<2)>>2]|0)+768>>2]=e;c[a+12>>2]=d;a=c[a+68>>2]|0;if(!b)return;g=c[a+16>>2]|0;if(g>>>0<=b>>>0?(g+(O(c[a>>2]|0,c[a+4>>2]|0)|0)|0)>>>0>b>>>0:0){c[b>>2]=c[a+12>>2];c[a+12>>2]=b;c[a+8>>2]=(c[a+8>>2]|0)+1;return}c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function uk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=c[b+8>>2]|0;if((k|0)<=0)return;i=c[b+16>>2]|0;j=0;b=0;do{g=c[i+(j<<2)>>2]|0;if(!(c[g+204>>2]&3)){h=c[a+16>>2]|0;e=h+(b<<3)|0;d=c[e>>2]|0;if((d|0)==(b|0))d=b;else{f=d;do{d=h+(f<<3)|0;c[e>>2]=c[d>>2];d=c[d>>2]|0;e=h+(d<<3)|0;f=c[e>>2]|0}while((d|0)!=(f|0))}c[g+208>>2]=d;c[h+(b<<3)+4>>2]=j;c[g+212>>2]=-1;b=b+1|0}else{c[g+208>>2]=-1;c[g+212>>2]=-2}j=j+1|0}while((j|0)!=(k|0));return}function vk(a,b,d,f){a=a|0;b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0;while(1){g=c[a+12>>2]|0;if(!(((e[f>>1]|0)>=(e[a>>1]|0)?(e[d>>1]|0)<=(e[a+6>>1]|0):0)&(e[d+4>>1]|0)<=(e[a+10>>1]|0)&(e[f+4>>1]|0)>=(e[a+4>>1]|0)&(e[d+2>>1]|0)<=(e[a+8>>1]|0)&(e[f+2>>1]|0)>=(e[a+2>>1]|0))){h=6;break}if((g|0)>-1)break;i=a+16|0;vk(i,b,d,f);g=c[a+28>>2]|0;a=(g|0)>-1?a+32|0:i+(0-g<<4)|0}if((h|0)==6)return;Kb[c[(c[b>>2]|0)+8>>2]&127](b,g>>21,g&2097151);return}function wk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=is()|0;Nd(f,b,d,e);c[f>>2]=4680;c[f+4>>2]=9;a[f+1309>>0]=0;g[f+1316>>2]=0.0;g[f+1340>>2]=0.0;g[f+1364>>2]=1.0;a[f+1310>>0]=0;g[f+1320>>2]=0.0;g[f+1344>>2]=0.0;g[f+1368>>2]=1.0;a[f+1311>>0]=0;g[f+1324>>2]=0.0;g[f+1348>>2]=0.0;g[f+1372>>2]=1.0;a[f+1312>>0]=0;g[f+1328>>2]=0.0;g[f+1352>>2]=0.0;g[f+1376>>2]=1.0;a[f+1313>>0]=0;g[f+1332>>2]=0.0;g[f+1356>>2]=0.0;g[f+1380>>2]=1.0;a[f+1314>>0]=0;g[f+1336>>2]=0.0;g[f+1360>>2]=0.0;g[f+1384>>2]=1.0;return f|0}function xk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0,n=0.0;if((e|0)<=0)return;f=0;do{n=+g[b+(f<<4)>>2];m=+g[b+(f<<4)+4>>2];j=+g[b+(f<<4)+8>>2];k=n*+g[a+56>>2]+m*+g[a+60>>2]+j*+g[a+64>>2];l=n*+g[a+72>>2]+m*+g[a+76>>2]+j*+g[a+80>>2];j=n*+g[a+88>>2]+m*+g[a+92>>2]+j*+g[a+96>>2];h=d+(f<<4)|0;i=a+56+((k>2]=c[i>>2];c[h+4>>2]=c[i+4>>2];c[h+8>>2]=c[i+8>>2];c[h+12>>2]=c[i+12>>2];f=f+1|0}while((f|0)!=(e|0));return}function yk(a,b){a=a|0;b=+b;var d=0,e=0;d=l;l=l+16|0;We(a,b);bj(11849);a=c[a+452>>2]|0;Bb[c[(c[a>>2]|0)+24>>2]&31](a,b);a=c[2405]|0;e=(c[a+16>>2]|0)+-1|0;c[a+16>>2]=e;if(e|0){l=d;return}do if(c[a+4>>2]|0){Za(d|0,0)|0;e=c[6471]|0;g[a+8>>2]=+g[a+8>>2]+ +(((c[d+4>>2]|0)-(c[e+4>>2]|0)+(((c[d>>2]|0)-(c[e>>2]|0)|0)*1e6|0)-(c[a+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[a+16>>2]|0)){a=c[2405]|0;break}else{l=d;return}}while(0);c[2405]=c[a+20>>2];l=d;return}function zk(b,d){b=b|0;d=d|0;a[b+148>>0]=0;if((((Vd(b,d)|0?(a[b+148>>0]=1,Vd(b,d)|0):0)?(a[b+148>>0]=1,Vd(b,d)|0):0)?(a[b+148>>0]=1,Vd(b,d)|0):0)?(a[b+148>>0]=1,Vd(b,d)|0):0)a[b+148>>0]=1;d=(c[b+8>>2]|0)+52|0;c[b+92>>2]=c[d>>2];c[b+92+4>>2]=c[d+4>>2];c[b+92+8>>2]=c[d+8>>2];c[b+92+12>>2]=c[d+12>>2];yp(b+112|0,d|0,16)|0;return}function Ak(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;h=+g[a+56>>2];k=+g[a+72>>2]-h;j=+g[a+60>>2];i=+g[a+76>>2]-j;l=+g[a+64>>2];m=+g[a+80>>2]-l;h=+g[a+88>>2]-h;j=+g[a+92>>2]-j;l=+g[a+96>>2]-l;g[d+12>>2]=0.0;f=1.0/+C(+((k*j-i*h)*(k*j-i*h)+((i*l-m*j)*(i*l-m*j)+(m*h-k*l)*(m*h-k*l))));g[d>>2]=(i*l-m*j)*f;g[d+4>>2]=(m*h-k*l)*f;g[d+8>>2]=(k*j-i*h)*f;c[e>>2]=c[a+56>>2];c[e+4>>2]=c[a+56+4>>2];c[e+8>>2]=c[a+56+8>>2];c[e+12>>2]=c[a+56+12>>2];return}function Bk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+224|0;e=g+80|0;f=e+40|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));c[g+120>>2]=c[d>>2];if((Oc(0,b,g+120|0,g,g+80|0)|0)>=0){d=c[2407]|0;if((a[9702]|0)<1)c[2407]=d&-33;if(!(c[2419]|0)){e=c[2418]|0;c[2418]=g+136;c[2414]=g+136;c[2412]=g+136;c[2419]=80;c[2411]=g+136+80;Oc(9628,b,g+120|0,g,g+80|0)|0;if(e|0){ub[c[9664>>2]&63](9628,0,0)|0;c[2418]=e;c[2419]=0;c[2411]=0;c[2414]=0;c[2412]=0}}else Oc(9628,b,g+120|0,g,g+80|0)|0;c[2407]=c[2407]|d&32}l=g;return}function Ck(b,d){b=b|0;d=d|0;do if(b){if(d>>>0<128){a[b>>0]=d;b=1;break}if(!(c[6608]|0))if((d&-128|0)==57216){a[b>>0]=d;b=1;break}else{c[6614]=84;b=-1;break}if(d>>>0<2048){a[b>>0]=d>>>6|192;a[b+1>>0]=d&63|128;b=2;break}if(d>>>0<55296|(d&-8192|0)==57344){a[b>>0]=d>>>12|224;a[b+1>>0]=d>>>6&63|128;a[b+2>>0]=d&63|128;b=3;break}if((d+-65536|0)>>>0<1048576){a[b>>0]=d>>>18|240;a[b+1>>0]=d>>>12&63|128;a[b+2>>0]=d>>>6&63|128;a[b+3>>0]=d&63|128;b=4;break}else{c[6614]=84;b=-1;break}}else b=1;while(0);return b|0}function Dk(b){b=b|0;var d=0,e=0,f=0;c[b>>2]=6356;d=c[b+12>>2]|0;if((d|0)>0){f=0;do{e=c[(c[b+20>>2]|0)+(f<<2)>>2]|0;if(e|0){Ab[c[c[e>>2]>>2]&511](e);e=c[b+4>>2]|0;Gb[c[(c[e>>2]|0)+60>>2]&127](e,c[(c[b+20>>2]|0)+(f<<2)>>2]|0)}f=f+1|0}while((f|0)!=(d|0))}d=c[b+20>>2]|0;if(!d){a[b+24>>0]=1;c[b+20>>2]=0;c[b+12>>2]=0;b=b+16|0;c[b>>2]=0;return}if(a[b+24>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+20>>2]=0;a[b+24>>0]=1;c[b+20>>2]=0;c[b+12>>2]=0;b=b+16|0;c[b>>2]=0;return}function Ek(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;h=+g[a+56>>2];f=+g[a+72>>2]-h;k=+g[a+60>>2];j=+g[a+76>>2]-k;e=+g[a+64>>2];i=+g[a+80>>2]-e;h=+g[a+88>>2]-h;k=+g[a+92>>2]-k;e=+g[a+96>>2]-e;g[c+12>>2]=0.0;d=1.0/+C(+((f*k-j*h)*(f*k-j*h)+((j*e-i*k)*(j*e-i*k)+(i*h-f*e)*(i*h-f*e))));g[c>>2]=(j*e-i*k)*d;g[c+4>>2]=(i*h-f*e)*d;g[c+8>>2]=(f*k-j*h)*d;if(!b)return;g[c>>2]=-((j*e-i*k)*d);g[c+4>>2]=-((i*h-f*e)*d);g[c+8>>2]=-((f*k-j*h)*d);return}function Fk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;g=c[a+720>>2]|0;h=c[a+752>>2]|0;if((h|0)<=0){e=0;return e|0}a=c[a+760>>2]|0;f=0;while(1){i=c[a+(f*44|0)+8>>2]|0;if(((i|0)==(g+(e*104|0)|0)|((i|0)==(g+(b*104|0)|0)|(i|0)==(g+(d*104|0)|0))?(i=c[a+(f*44|0)+12>>2]|0,(i|0)==(g+(e*104|0)|0)|((i|0)==(g+(b*104|0)|0)|(i|0)==(g+(d*104|0)|0))):0)?(i=c[a+(f*44|0)+16>>2]|0,(i|0)==(g+(e*104|0)|0)|((i|0)==(g+(b*104|0)|0)|(i|0)==(g+(d*104|0)|0))):0){a=1;f=7;break}f=f+1|0;if((f|0)>=(h|0)){a=0;f=7;break}}if((f|0)==7)return a|0;return 0}function Gk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0;i=c[a+96>>2]|0;j=c[a+104>>2]|0;f=+g[j+(((b|0)%(i|0)|0)<<4)+4>>2]*+g[a+16>>2];h=+g[j+(((b|0)%(i|0)|0)<<4)+8>>2]*+g[a+20>>2];g[d>>2]=+g[j+(((b|0)%(i|0)|0)<<4)>>2]*+g[a+12>>2];g[d+4>>2]=f;g[d+8>>2]=h;g[d+12>>2]=0.0;d=c[a+104>>2]|0;h=+g[d+(((b+1|0)%(i|0)|0)<<4)+4>>2]*+g[a+16>>2];f=+g[d+(((b+1|0)%(i|0)|0)<<4)+8>>2]*+g[a+20>>2];g[e>>2]=+g[d+(((b+1|0)%(i|0)|0)<<4)>>2]*+g[a+12>>2];g[e+4>>2]=h;g[e+8>>2]=f;g[e+12>>2]=0.0;return}function Hk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0.0,h=0,i=0;e=l;l=l+32|0;d=c[a+184>>2]|0;if(+g[d+4>>2]==0.0){a=0;l=e;return a|0}b=c[b>>2]|0;if(!(sb[c[(c[d>>2]|0)+8>>2]&31](d,c[b+188>>2]|0)|0)){a=1;l=e;return a|0}h=c[a+192>>2]|0;i=c[b+192>>2]|0;d=c[a+184>>2]|0;f=+g[a+188>>2];c[e>>2]=0;c[e+4>>2]=i;c[e+8>>2]=b;c[e+12>>2]=b+4;c[e+16>>2]=-1;c[e+20>>2]=-1;oc(h,a+36|0,a+100|0,e,d,f);a=1;l=e;return a|0}function Ik(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];a=c[a+8>>2]|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+4>>2]=1065353216;c[a+8>>2]=0;c[a+8+4>>2]=0;c[a+8+8>>2]=0;c[a+8+12>>2]=0;c[a+24>>2]=1065353216;c[a+28>>2]=0;c[a+28+4>>2]=0;c[a+28+8>>2]=0;c[a+28+12>>2]=0;c[a+44>>2]=1065353216;c[a+48>>2]=0;c[a+52>>2]=c[d>>2];c[a+52+4>>2]=c[d+4>>2];c[a+52+8>>2]=c[d+8>>2];c[a+52+12>>2]=c[d+12>>2];l=d;return}function Jk(a){a=a|0;var b=0,d=0;b=l;l=l+16|0;bj(15137);d=c[a+68>>2]|0;Gb[c[(c[d>>2]|0)+32>>2]&127](d,c[a+24>>2]|0);a=c[2405]|0;d=(c[a+16>>2]|0)+-1|0;c[a+16>>2]=d;if(d|0){l=b;return}do if(c[a+4>>2]|0){Za(b|0,0)|0;d=c[6471]|0;g[a+8>>2]=+g[a+8>>2]+ +(((c[b+4>>2]|0)-(c[d+4>>2]|0)+(((c[b>>2]|0)-(c[d>>2]|0)|0)*1e6|0)-(c[a+12>>2]|0)|0)>>>0)/1.0e3;if(!(c[a+16>>2]|0)){a=c[2405]|0;break}else{l=b;return}}while(0);c[2405]=c[a+20>>2];l=b;return}function Kk(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;do switch(b|0){case 0:{f=0;b=1;break}case 1:{f=0;b=2;break}case 2:{f=1;b=3;break}case 3:{f=2;break}case 4:{f=0;break}case 5:{f=1;break}case 6:{f=2;break}case 7:{f=3;break}case 8:{f=4;b=5;break}case 9:{f=4;b=6;break}case 10:{f=5;b=7;break}case 11:{f=6;b=7;break}default:{f=0;b=0}}while(0);Kb[c[(c[a>>2]|0)+108>>2]&127](a,f,d);Kb[c[(c[a>>2]|0)+108>>2]&127](a,b,e);return}function Lk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0.0;k=+gb[c[(c[a>>2]|0)+48>>2]&15](a);h=+gb[c[(c[a>>2]|0)+48>>2]&15](a);d=+gb[c[(c[a>>2]|0)+48>>2]&15](a);m=(k+ +g[a+28>>2])/+g[a+12>>2];j=(h+ +g[a+32>>2])/+g[a+16>>2];f=(d+ +g[a+36>>2])/+g[a+20>>2];l=+B(+(+g[b>>2]));i=+B(+(+g[b+4>>2]));e=+B(+(+g[b+8>>2]));g[a+12>>2]=l;g[a+16>>2]=i;g[a+20>>2]=e;g[a+24>>2]=0.0;g[a+28>>2]=m*l-k;g[a+32>>2]=j*i-h;g[a+36>>2]=f*e-d;g[a+40>>2]=0.0;return}function Mk(b,d){b=b|0;d=d|0;var e=0,f=0,h=0.0,i=0,j=0;if(a[b+527>>0]|0){c[d>>2]=0;c[d+4>>2]=0;return}c[d>>2]=3;c[d+4>>2]=3;j=c[b+28>>2]|0;i=c[b+32>>2]|0;lc(b,j+4|0,i+4|0,j+264|0,i+264|0);if((a[b+526>>0]|0?(e=c[d>>2]|0,c[d>>2]=e+1,f=c[d+4>>2]|0,c[d+4>>2]=f+-1,h=+g[b+456>>2],+g[b+444>>2]>2]>2]=e+2;c[d+4>>2]=f+-2}if(!(a[b+525>>0]|0))return;c[d>>2]=(c[d>>2]|0)+1;c[d+4>>2]=(c[d+4>>2]|0)+-1;return}function Nk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=b+e|0;d=d&255;if((e|0)>=67){while(b&3){a[b>>0]=d;b=b+1|0}g=d|d<<8|d<<16|d<<24;while((b|0)<=((f&-4)-64|0)){c[b>>2]=g;c[b+4>>2]=g;c[b+8>>2]=g;c[b+12>>2]=g;c[b+16>>2]=g;c[b+20>>2]=g;c[b+24>>2]=g;c[b+28>>2]=g;c[b+32>>2]=g;c[b+36>>2]=g;c[b+40>>2]=g;c[b+44>>2]=g;c[b+48>>2]=g;c[b+52>>2]=g;c[b+56>>2]=g;c[b+60>>2]=g;b=b+64|0}while((b|0)<(f&-4|0)){c[b>>2]=g;b=b+4|0}}while((b|0)<(f|0)){a[b>>0]=d;b=b+1|0}return f-e|0}function Ok(a,b,c,d,e,f,h,i,j,k){a=+a;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;i=+i;j=+j;k=k|0;if(!(((h-d)*b-(i-e)*a)*f+(((i-e)*c-(j-f)*b)*d+((j-f)*a-(h-d)*c)*e)<0.0)){k=0;return k|0}do if(!((h-d)*d+(i-e)*e+(j-f)*f>0.0))if((h-d)*h+(i-e)*i+(j-f)*j<0.0){d=h*h+i*i+j*j;break}else{d=((h*h+i*i+j*j)*(d*d+e*e+f*f)-(h*d+i*e+j*f)*(h*d+i*e+j*f))/((h-d)*(h-d)+(i-e)*(i-e)+(j-f)*(j-f));d=d>0.0?d:0.0;break}else d=d*d+e*e+f*f;while(0);g[k>>2]=+C(+d);k=1;return k|0}function Pk(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0,h=0,i=0;b=c[b+36>>2]|0;i=c[b+8>>2]|0;h=c[b+12>>2]|0;f=c[b+16>>2]|0;e=+g[a+52>>2];d=+th(a+4|0,+g[a+36>>2],+g[a+40>>2],+g[a+44>>2],+g[i+8>>2],+g[i+12>>2],+g[i+16>>2],+g[h+8>>2],+g[h+12>>2],+g[h+16>>2],+g[f+8>>2],+g[f+12>>2],+g[f+16>>2],e);if(!(d>0.0&d>2]|0;h=h+1|0;c[i>>2]=h;return}g[a+52>>2]=d;c[a+56>>2]=b;i=a+60|0;h=c[i>>2]|0;h=h+1|0;c[i>>2]=h;return}function Qk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do if(c>>>0>=3)if((c+-3|0)>>>0<3)switch(b|0){case 2:{d=+g[a+868+(c+-3<<6)+32>>2];break a}case 4:{d=+g[a+868+(c+-3<<6)+36>>2];break a}case 3:{d=+g[a+868+(c+-3<<6)+28>>2];break a}default:{d=0.0;break a}}else d=0.0;else switch(b|0){case 2:{d=+g[a+756+(c<<2)>>2];break a}case 4:{d=+g[a+772+(c<<2)>>2];break a}case 3:{d=+g[a+740+(c<<2)>>2];break a}default:{d=0.0;break a}}while(0);return +d}function Rk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;Kb[c[(c[b>>2]|0)+68>>2]&127](a,b,d);if(!(+gb[c[(c[b>>2]|0)+48>>2]&15](b)!=0.0))return;h=+g[d>>2];f=+g[d+4>>2];e=+g[d+8>>2];j=h*h+f*f+e*e<1.4210854715202004e-14?-1.0:h;i=h*h+f*f+e*e<1.4210854715202004e-14?-1.0:f;e=h*h+f*f+e*e<1.4210854715202004e-14?-1.0:e;f=1.0/+C(+(e*e+(j*j+i*i)));h=+gb[c[(c[b>>2]|0)+48>>2]&15](b);g[a>>2]=+g[a>>2]+h*f*j;g[a+4>>2]=h*f*i+ +g[a+4>>2];g[a+8>>2]=h*f*e+ +g[a+8>>2];return}function Sk(b,d,e){b=b|0;d=d|0;e=+e;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;a[b+171>>0]=0;c[b+60>>2]=c[d>>2];c[b+60+4>>2]=c[d+4>>2];c[b+60+8>>2]=c[d+8>>2];c[b+60+12>>2]=c[d+12>>2];f=+g[b+60>>2];h=+g[b+64>>2];j=+g[b+68>>2];i=1.0/+C(+(f*f+h*h+j*j));if(+C(+(j*i*j*i+(f*i*f*i+h*i*h*i)))<1.1920928955078125e-07){k=0.0;h=0.0;f=0.0;d=0}else{k=f*i;h=h*i;f=j*i;d=c[b+72>>2]|0}g[b+76>>2]=k;g[b+80>>2]=h;g[b+84>>2]=f;c[b+88>>2]=d;g[b+172>>2]=+g[b+172>>2]+e;return}function Tk(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;do if(!(GC(b,c[d+8>>2]|0)|0)){if(GC(b,c[d>>2]|0)|0){if((c[d+16>>2]|0)!=(e|0)?(c[d+20>>2]|0)!=(e|0):0){c[d+32>>2]=f;c[d+20>>2]=e;c[d+40>>2]=(c[d+40>>2]|0)+1;if((c[d+36>>2]|0)==1?(c[d+24>>2]|0)==2:0)a[d+54>>0]=1;c[d+44>>2]=4;break}if((f|0)==1)c[d+32>>2]=1}}else Kr(d,e,f);while(0);return}function Uk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;a:do if(!(GC(b,c[d+8>>2]|0)|0)){g=c[b+12>>2]|0;bo(b+16|0,d,e,f);if((g|0)>1){h=b+24|0;do{bo(h,d,e,f);if(a[d+54>>0]|0)break a;h=h+8|0}while(h>>>0<(b+16+(g<<3)|0)>>>0)}}else Rm(d,e,f);while(0);return}function Vk(b,d,e,f,h){b=b|0;d=+d;e=e|0;f=f|0;h=h|0;g[b>>2]=d;c[b+4>>2]=e;c[b+72>>2]=f;c[b+76>>2]=c[h>>2];c[b+76+4>>2]=c[h+4>>2];c[b+76+8>>2]=c[h+8>>2];c[b+76+12>>2]=c[h+12>>2];g[b+92>>2]=0.0;g[b+96>>2]=0.0;g[b+100>>2]=.5;g[b+104>>2]=0.0;g[b+108>>2]=0.0;g[b+112>>2]=.800000011920929;g[b+116>>2]=1.0;a[b+120>>0]=0;g[b+124>>2]=.004999999888241291;g[b+128>>2]=.009999999776482582;g[b+132>>2]=.009999999776482582;g[b+136>>2]=.009999999776482582;Gq(b+8|0);return}function Wk(b,d,e){b=b|0;d=d|0;e=e|0;b=Vr(152)|0;c[b>>2]=5012;a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;a[b+40>>0]=1;c[b+36>>2]=0;c[b+28>>2]=0;c[b+32>>2]=0;a[b+60>>0]=1;c[b+56>>2]=0;c[b+48>>2]=0;c[b+52>>2]=0;a[b+80>>0]=1;c[b+76>>2]=0;c[b+68>>2]=0;c[b+72>>2]=0;c[b+100>>2]=e;g[b+104>>2]=0.0;a[b+148>>0]=1;c[b+144>>2]=0;c[b+136>>2]=0;c[b+140>>2]=0;c[b+116>>2]=d;c[b+120>>2]=0;c[b+124>>2]=2;c[b+128>>2]=1;g[b+112>>2]=0.0;g[b+108>>2]=0.0;return b|0}function Xk(b){b=b|0;var d=0,e=0,f=0;e=Vr(5260)|0;c[e>>2]=5324;c[e+4>>2]=2;a[e+24>>0]=1;c[e+20>>2]=0;c[e+12>>2]=0;c[e+16>>2]=0;c[e+28>>2]=5796;c[e+5256>>2]=b;c[e+60>>2]=79;c[e+64>>2]=qb[c[(c[b>>2]|0)+12>>2]&127](b)|0;c[e+68>>2]=qb[c[(c[b>>2]|0)+8>>2]&127](b)|0;b=0;do{d=0;do{f=c[e+5256>>2]|0;c[e+72+(b*144|0)+(d<<2)>>2]=ub[c[(c[f>>2]|0)+16>>2]&63](f,b,d)|0;d=d+1|0}while((d|0)<36);b=b+1|0}while((b|0)<36);return e|0}function Yk(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;f=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=f;if(f|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];c[b+28>>2]=c[a+28>>2];c[b+32>>2]=c[a+32>>2];c[b+36>>2]=c[a+36>>2];c[b+40>>2]=c[a+40>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];c[b+20>>2]=c[a+20>>2];c[b+24>>2]=c[a+24>>2];c[b+44>>2]=c[a+44>>2];c[b+52>>2]=c[a+52>>2];return 18047}function Zk(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=l;l=l+32|0;if(!(+g[a+344>>2]!=0.0)){l=d;return}Xn(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);if(!(bI(a+544|0)|0)){l=d;return}Ip(d,+g[b>>2],+g[b+4>>2],+g[b+8>>2],+g[a+348>>2],+g[a+352>>2],+g[a+356>>2]);Xo(d+16|0,+g[c>>2],+g[c+4>>2],+g[c+8>>2],+g[d>>2],+g[d+4>>2],+g[d+8>>2]);Yn(a,+g[d+16>>2],+g[d+16+4>>2],+g[d+16+8>>2]);l=d;return}function _k(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;f=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=f;if(f|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];c[b+28>>2]=c[a+28>>2];c[b+32>>2]=c[a+32>>2];c[b+36>>2]=c[a+36>>2];c[b+40>>2]=c[a+40>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];c[b+20>>2]=c[a+20>>2];c[b+24>>2]=c[a+24>>2];c[b+44>>2]=c[a+44>>2];c[b+52>>2]=c[a+52>>2];return 17591}function $k(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;f=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=f;if(f|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];c[b+28>>2]=c[a+28>>2];c[b+32>>2]=c[a+32>>2];c[b+36>>2]=c[a+36>>2];c[b+40>>2]=c[a+40>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];c[b+20>>2]=c[a+20>>2];c[b+24>>2]=c[a+24>>2];c[b+44>>2]=c[a+44>>2];c[b+52>>2]=c[a+68>>2];return 16611}function al(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;a[b+53>>0]=1;do if((c[b+4>>2]|0)==(e|0)){a[b+52>>0]=1;e=c[b+16>>2]|0;if(!e){c[b+16>>2]=d;c[b+24>>2]=f;c[b+36>>2]=1;if(!((f|0)==1?(c[b+48>>2]|0)==1:0))break;a[b+54>>0]=1;break}if((e|0)!=(d|0)){c[b+36>>2]=(c[b+36>>2]|0)+1;a[b+54>>0]=1;break}e=c[b+24>>2]|0;if((e|0)==2){c[b+24>>2]=f;e=f}if((e|0)==1?(c[b+48>>2]|0)==1:0)a[b+54>>0]=1}while(0);return}function bl(a,b,d){a=a|0;b=+b;d=d|0;var e=0,f=0.0,h=0.0,i=0.0,j=0,k=0;e=l;l=l+16|0;j=c[a+52>>2]|0;k=c[a+28+(((j+2|0)%3|0)<<2)>>2]|0;c[e>>2]=k;c[e+4>>2]=k;c[e+8>>2]=k;g[e+12>>2]=0.0;g[e+(j<<2)>>2]=+g[a+28+(j<<2)>>2]+ +g[e+(j<<2)>>2];h=(+g[e>>2]+.03999999910593033)*2.0;f=(+g[e+4>>2]+.03999999910593033)*2.0;i=(+g[e+8>>2]+.03999999910593033)*2.0;g[d>>2]=b*.0833333283662796*(f*f+i*i);g[d+4>>2]=b*.0833333283662796*(h*h+i*i);g[d+8>>2]=b*.0833333283662796*(h*h+f*f);l=e;return}function cl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;if((d|0)<=0)return;m=0;do{j=+g[a+32>>2];e=+g[a+28>>2];f=b+(m<<4)|0;h=+g[b+(m<<4)+4>>2];k=+g[b+(m<<4)+8>>2];l=+C(+(h*h+k*k));if(l!=0.0){i=+g[f>>2]<0.0?-e:e;h=h*(j/l);e=k*(j/l)}else{i=+g[f>>2]<0.0?-e:e;h=j;e=0.0}g[c+(m<<4)>>2]=i;g[c+(m<<4)+4>>2]=h;g[c+(m<<4)+8>>2]=e;m=m+1|0}while((m|0)!=(d|0));return}function dl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=l;l=l+64|0;if(!(GC(a,b)|0))if((b|0)!=0?(f=Vi(b,2760)|0,(f|0)!=0):0){b=g+4|0;e=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));c[g>>2]=f;c[g+8>>2]=a;c[g+12>>2]=-1;c[g+48>>2]=1;Nb[c[(c[f>>2]|0)+28>>2]&127](f,g,c[d>>2]|0,1);if((c[g+24>>2]|0)==1){c[d>>2]=c[g+16>>2];b=1}else b=0}else b=0;else b=1;l=g;return b|0}function el(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[b>>2]|0;if(!e)e=c[a+188>>2]|0;h=c[a+268>>2]|0;if((h|0)<=0)return;i=c[a+276>>2]|0;f=0;while(1){g=i+(f<<2)|0;if((c[g>>2]|0)==(j|0))break;f=f+1|0;if((f|0)>=(h|0)){k=9;break}}if((k|0)==9)return;if((f|0)>=(h|0))return;c[g>>2]=c[i+(h+-1<<2)>>2];c[a+268>>2]=h+-1;k=c[a+284>>2]|0;vb[c[(c[k>>2]|0)+12>>2]&31](k,e,b,d)|0;return}function fl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;if((d|0)<=0)return;m=0;do{j=+g[a+28>>2];e=+g[a+36>>2];h=+g[b+(m<<4)>>2];k=+g[b+(m<<4)+4>>2];l=+C(+(h*h+k*k));f=+g[b+(m<<4)+8>>2];if(l!=0.0){i=f<0.0?-e:e;f=h*(j/l);e=k*(j/l)}else{i=f<0.0?-e:e;f=j;e=0.0}g[c+(m<<4)>>2]=f;g[c+(m<<4)+4>>2]=e;g[c+(m<<4)+8>>2]=i;m=m+1|0}while((m|0)!=(d|0));return}function gl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,l=0.0,m=0;if((d|0)<=0)return;m=0;do{j=+g[a+28>>2];e=+g[a+32>>2];h=+g[b+(m<<4)>>2];k=+g[b+(m<<4)+8>>2];l=+C(+(h*h+k*k));f=+g[b+(m<<4)+4>>2];if(l!=0.0){i=f<0.0?-e:e;f=h*(j/l);e=k*(j/l)}else{i=f<0.0?-e:e;f=j;e=0.0}g[c+(m<<4)>>2]=f;g[c+(m<<4)+4>>2]=i;g[c+(m<<4)+8>>2]=e;m=m+1|0}while((m|0)!=(d|0));return}function hl(b,d){b=b|0;d=d|0;var e=0;e=Hs()|0;c[e+8>>2]=0;c[e+12>>2]=1065353216;c[e+16>>2]=1065353216;c[e+20>>2]=1065353216;g[e+24>>2]=0.0;g[e+44>>2]=.03999999910593033;c[e+52>>2]=0;c[e+56>>2]=1065353216;c[e+60>>2]=1065353216;c[e+64>>2]=1065353216;g[e+68>>2]=0.0;c[e+72>>2]=-1082130432;c[e+76>>2]=-1082130432;c[e+80>>2]=-1082130432;g[e+84>>2]=0.0;a[e+88>>0]=0;c[e>>2]=7884;c[e+92>>2]=b;c[e+4>>2]=3;if(!d)return e|0;jj(e);return e|0}function il(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=l;l=l+32|0;d=c[a+216>>2]|0;if(+g[d+4>>2]==0.0){a=0;l=e;return a|0}b=c[b>>2]|0;if(!(sb[c[(c[d>>2]|0)+8>>2]&31](d,c[b+188>>2]|0)|0)){a=1;l=e;return a|0}f=c[b+192>>2]|0;d=c[a+216>>2]|0;c[e>>2]=0;c[e+4>>2]=f;c[e+8>>2]=b;c[e+12>>2]=b+4;c[e+16>>2]=-1;c[e+20>>2]=-1;Kc(a+68|0,a+132|0,e,d);a=1;l=e;return a|0}function jl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;f=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=f;if(f|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];c[b+28>>2]=c[a+28>>2];c[b+32>>2]=c[a+32>>2];c[b+36>>2]=c[a+36>>2];c[b+40>>2]=c[a+40>>2];c[b+12>>2]=c[a+12>>2];c[b+16>>2]=c[a+16>>2];c[b+20>>2]=c[a+20>>2];c[b+24>>2]=c[a+24>>2];c[b+44>>2]=c[a+44>>2];return 11252}function kl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;f=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=f;if(f|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];c[b+12>>2]=c[a+68>>2];c[b+16>>2]=c[a+72>>2];c[b+20>>2]=c[a+76>>2];c[b+24>>2]=c[a+80>>2];c[b+28>>2]=c[a+48>>2];c[b+32>>2]=c[a+52>>2];c[b+36>>2]=c[a+56>>2];c[b+40>>2]=c[a+60>>2];c[b+44>>2]=c[a+64>>2];return 17288}function ll(b,d){b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;a[b+171>>0]=1;c[b+60>>2]=c[d>>2];c[b+60+4>>2]=c[d+4>>2];c[b+60+8>>2]=c[d+8>>2];c[b+60+12>>2]=c[d+12>>2];e=+g[b+60>>2];f=+g[b+64>>2];i=+g[b+68>>2];h=1.0/+C(+(e*e+f*f+i*i));if(+C(+(i*h*i*h+(e*h*e*h+f*h*f*h)))<1.1920928955078125e-07){j=0.0;f=0.0;e=0.0;d=0}else{j=e*h;f=f*h;e=i*h;d=c[b+72>>2]|0}g[b+76>>2]=j;g[b+80>>2]=f;g[b+84>>2]=e;c[b+88>>2]=d;return}function ml(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0,h=0,i=0,j=0;j=c[a+68>>2]|0;i=c[a+64>>2]|0;h=c[a+72>>2]|0;e=+g[a+60>>2]*(+g[b+(j<<2)>>2]/+g[a+12+(j<<2)>>2]);g[a+60>>2]=e;f=+g[a+56>>2]*(+g[b+(i<<2)>>2]/+g[a+12+(i<<2)>>2]+ +g[b+(h<<2)>>2]/+g[a+12+(h<<2)>>2])*.5;g[a+56>>2]=f;g[a+52>>2]=f/+C(+(e*e+f*f));f=+B(+(+g[b>>2]));e=+B(+(+g[b+4>>2]));d=+B(+(+g[b+8>>2]));g[a+12>>2]=f;g[a+16>>2]=e;g[a+20>>2]=d;g[a+24>>2]=0.0;return}function nl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+48|0;c[f+32>>2]=9132;c[f+32+4>>2]=e;c[f>>2]=c[b>>2];c[f+4>>2]=c[b+4>>2];c[f+8>>2]=c[b+8>>2];c[f+12>>2]=c[b+12>>2];c[f+16>>2]=c[d>>2];c[f+16+4>>2]=c[d+4>>2];c[f+16+8>>2]=c[d+8>>2];c[f+16+12>>2]=c[d+12>>2];Ue(c[a+4>>2]|0,f,f+32|0);Ue(c[a+64>>2]|0,f,f+32|0);l=f;return}function ol(b,d){b=b|0;d=+d;var e=0,f=0.0,h=0;d=1.0/+g[(c[b+116>>2]|0)+344>>2];if((c[b+136>>2]|0)<=0)return;h=0;do{e=c[b+144>>2]|0;if(!(a[e+(h*284|0)+84>>0]|0))f=0.0;else{f=+g[e+(h*284|0)+272>>2];f=d*(+g[e+(h*284|0)+216>>2]*(+g[e+(h*284|0)+204>>2]-+g[e+(h*284|0)+32>>2])*+g[e+(h*284|0)+268>>2]-f*+g[(f<0.0?e+(h*284|0)+220|0:e+(h*284|0)+224|0)>>2]);f=f<0.0?0.0:f}g[e+(h*284|0)+276>>2]=f;h=h+1|0}while((h|0)<(c[b+136>>2]|0));return}function pl(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0.0,h=0.0,i=0.0;e=l;l=l+48|0;f=+TH(b);h=+TH(c);i=+TH(d);b=+SH(b);c=+SH(c);d=+SH(d);g[e+32>>2]=h*i;g[e+28>>2]=c*b*i-f*d;g[e+24>>2]=c*f*i+b*d;g[e+20>>2]=h*d;g[e+16>>2]=c*b*d+f*i;g[e+12>>2]=c*f*d-b*i;g[e+8>>2]=-c;g[e+4>>2]=h*b;g[e>>2]=h*f;dp(a,e+32|0,e+28|0,e+24|0,e+20|0,e+16|0,e+12|0,e+8|0,e+4|0,e);l=e;return}function ql(a,d,f,g,h,i){a=a|0;d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;var j=0;j=c[a+108>>2]|0;if(j|0){Tb[c[(c[j>>2]|0)+24>>2]&7](j,d,f,g,h,i);return}j=b[a+56>>1]|0;if(!(j<<16>>16))return;h=1;d=1;do{i=c[a+68>>2]|0;if(b[i+(h<<2)>>1]&1){sb[c[(c[g>>2]|0)+8>>2]&31](g,(c[a+60>>2]|0)+((e[i+(h<<2)+2>>1]|0)<<6)|0)|0;j=b[a+56>>1]|0}d=d+1<<16>>16;h=d&65535}while(h>>>0<((j&65535)<<1|1)>>>0);return}function rl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,80)|0;d=c[d>>2]|0;c[b+4>>2]=d;c[b>>2]=5700;a[b+8>>0]=1;c[b+12>>2]=5748;c[b+60>>2]=d;c[b+64>>2]=0;c[b+16>>2]=f;c[b+20>>2]=e;d=ub[c[(c[d>>2]|0)+12>>2]&63](d,c[f+8>>2]|0,c[e+8>>2]|0)|0;c[b+76>>2]=d;f=c[b+60>>2]|0;Gb[c[(c[f>>2]|0)+20>>2]&127](f,d);return b|0}function sl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0,h=0.0,i=0.0;e=+g[a+28>>2];i=+g[a+32>>2];h=+g[a+36>>2];switch(d|0){case 0:{a=0;d=0;f=1065353216;break}case 1:{a=0;d=0;f=-1082130432;break}case 2:{a=0;d=1065353216;f=0;e=i;break}case 3:{a=0;d=-1082130432;f=0;e=i;break}case 4:{a=1065353216;d=0;f=0;e=h;break}case 5:{a=-1082130432;d=0;f=0;e=h;break}default:return}c[b>>2]=f;c[b+4>>2]=d;c[b+8>>2]=a;g[b+12>>2]=-e;return}function tl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,80)|0;d=c[d>>2]|0;c[b+4>>2]=d;c[b>>2]=5700;a[b+8>>0]=0;c[b+12>>2]=5748;c[b+60>>2]=d;c[b+64>>2]=0;c[b+16>>2]=e;c[b+20>>2]=f;d=ub[c[(c[d>>2]|0)+12>>2]&63](d,c[e+8>>2]|0,c[f+8>>2]|0)|0;c[b+76>>2]=d;f=c[b+60>>2]|0;Gb[c[(c[f>>2]|0)+20>>2]&127](f,d);return b|0}function ul(b){b=b|0;var d=0;c[b>>2]=5280;d=c[b+284>>2]|0;Ab[c[c[d>>2]>>2]&511](d);d=c[b+284>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b>>2]=5236;d=c[b+276>>2]|0;if(!d){a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;d=b+272|0;c[d>>2]=0;c[b>>2]=5200;return}if(a[b+280>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+276>>2]=0;a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;d=b+272|0;c[d>>2]=0;c[b>>2]=5200;return}function vl(a){a=a|0;var b=0,d=0,e=0,f=0.0,h=0.0;e=c[a+232>>2]|0;if((e|0)<=0)return;a=c[a+240>>2]|0;d=0;do{b=c[a+(d<<2)>>2]|0;switch(c[b+216>>2]|0){case 2:case 5:break;default:if(!(c[b+204>>2]&3)){h=+g[b+368>>2]*+g[b+352>>2];f=+g[b+372>>2]*+g[b+356>>2];g[b+412>>2]=+g[b+364>>2]*+g[b+348>>2]+ +g[b+412>>2];g[b+416>>2]=h+ +g[b+416>>2];g[b+420>>2]=f+ +g[b+420>>2]}}d=d+1|0}while((d|0)!=(e|0));return}function wl(a,b){a=a|0;b=b|0;var c=0,d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0,m=0.0;c=l;l=l+16|0;m=+g[a+12>>2];i=+g[(bI(b)|0)>>2];j=+g[a>>2];k=+g[b+12>>2];h=+g[a+4>>2];d=+g[(JH(b)|0)>>2];e=+g[a+8>>2];f=+g[(KH(b)|0)>>2];g[c+12>>2]=m*i+j*k+h*d-e*f;g[c+8>>2]=m*f+h*k+e*i-j*d;g[c+4>>2]=m*d+e*k+j*f-h*i;g[c>>2]=m*k-j*i-h*f-e*d;Ar(a,c+12|0,c+8|0,c+4|0,c);l=c;return a|0}function xl(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;g=a[b+16>>0]|0;h=c[(g<<24>>24==0?d:e)+8>>2]|0;e=g<<24>>24?d:e;g=c[e+8>>2]|0;b=c[h+268>>2]|0;a:do if((b|0)>0){d=c[h+276>>2]|0;f=0;while(1){if((c[d+(f<<2)>>2]|0)==(g|0))break;f=f+1|0;if((f|0)>=(b|0))break a}if((f|0)!=(b|0))return}while(0);d=c[h+284>>2]|0;Kb[c[(c[d>>2]|0)+36>>2]&127](d,h,e);return}function yl(b){b=b|0;var d=0;d=Hs()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;c[d+16>>2]=1065353216;c[d+20>>2]=1065353216;g[d+24>>2]=0.0;g[d+44>>2]=.03999999910593033;c[d+52>>2]=0;c[d+56>>2]=1065353216;c[d+60>>2]=1065353216;c[d+64>>2]=1065353216;g[d+68>>2]=0.0;c[d+72>>2]=-1082130432;c[d+76>>2]=-1082130432;c[d+80>>2]=-1082130432;g[d+84>>2]=0.0;a[d+88>>0]=0;c[d>>2]=7884;c[d+92>>2]=b;c[d+4>>2]=3;jj(d);return d|0}function zl(a,b){a=a|0;b=+b;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0;h=+gb[c[(c[a>>2]|0)+48>>2]&15](a);e=+gb[c[(c[a>>2]|0)+48>>2]&15](a);i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);h=h+ +g[a+28>>2];e=e+ +g[a+32>>2];i=i+ +g[a+36>>2];g[a+44>>2]=b;f=+gb[c[(c[a>>2]|0)+48>>2]&15](a);d=+gb[c[(c[a>>2]|0)+48>>2]&15](a);b=i-+gb[c[(c[a>>2]|0)+48>>2]&15](a);g[a+28>>2]=h-f;g[a+32>>2]=e-d;g[a+36>>2]=b;g[a+40>>2]=0.0;return}function Al(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if((c[a+8>>2]|0)<=0)return;g=0;a:while(1){while(1){e=c[a+16>>2]|0;f=e+(g<<4)|0;if(!(sb[c[(c[b>>2]|0)+8>>2]&31](b,f)|0))break;vb[c[(c[a>>2]|0)+12>>2]&31](a,c[f>>2]|0,c[e+(g<<4)+4>>2]|0,d)|0;c[6200]=(c[6200]|0)+-1;if((g|0)>=(c[a+8>>2]|0)){e=7;break a}}g=g+1|0;if((g|0)>=(c[a+8>>2]|0)){e=7;break}}if((e|0)==7)return}function Bl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,16)|0;d=c[d>>2]|0;c[b+4>>2]=d;c[b>>2]=5768;a[b+8>>0]=0;c[b+12>>2]=0;if(!(ub[c[(c[d>>2]|0)+24>>2]&63](d,c[e+8>>2]|0,c[f+8>>2]|0)|0))return b|0;d=c[b+4>>2]|0;c[b+12>>2]=ub[c[(c[d>>2]|0)+12>>2]&63](d,c[e+8>>2]|0,c[f+8>>2]|0)|0;a[b+8>>0]=1;return b|0}function Cl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);h=+gb[c[(c[a>>2]|0)+48>>2]&15](a);f=+gb[c[(c[a>>2]|0)+48>>2]&15](a);k=+g[b+52>>2]-h;j=+g[b+56>>2]-f;g[d>>2]=+g[b+48>>2]-i;g[d+4>>2]=k;g[d+8>>2]=j;g[d+12>>2]=0.0;h=h+ +g[b+52>>2];f=f+ +g[b+56>>2];g[e>>2]=i+ +g[b+48>>2];g[e+4>>2]=h;g[e+8>>2]=f;g[e+12>>2]=0.0;return}function Dl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=c[a+720>>2]|0;h=c[a+732>>2]|0;if((h|0)<=0){d=0;return d|0}a=c[a+740>>2]|0;f=0;while(1){e=c[a+(f*52|0)+8>>2]|0;if((e|0)==(g+(b*104|0)|0)?(c[a+(f*52|0)+12>>2]|0)==(g+(d*104|0)|0):0){a=1;e=8;break}if((e|0)==(g+(d*104|0)|0)?(c[a+(f*52|0)+12>>2]|0)==(g+(b*104|0)|0):0){a=1;e=8;break}f=f+1|0;if((f|0)>=(h|0)){a=0;e=8;break}}if((e|0)==8)return a|0;return 0}function El(a){a=a|0;var b=0,d=0,e=0.0,f=0.0;if((c[a+136>>2]|0)<=0)return;b=0;do{d=c[a+144>>2]|0;c[d+(b*284|0)+32>>2]=c[d+(b*284|0)+204>>2];g[d+(b*284|0)+272>>2]=0.0;f=-+g[d+(b*284|0)+56>>2];e=-+g[d+(b*284|0)+60>>2];g[d+(b*284|0)>>2]=-+g[d+(b*284|0)+52>>2];g[d+(b*284|0)+4>>2]=f;g[d+(b*284|0)+8>>2]=e;g[d+(b*284|0)+12>>2]=0.0;g[d+(b*284|0)+268>>2]=1.0;b=b+1|0}while((b|0)<(c[a+136>>2]|0));return}function Fl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;j=+g[d>>2];i=+g[d+4>>2];e=+g[d+8>>2];f=j*+g[b+56>>2]+i*+g[b+60>>2]+e*+g[b+64>>2];h=j*+g[b+72>>2]+i*+g[b+76>>2]+e*+g[b+80>>2];e=j*+g[b+88>>2]+i*+g[b+92>>2]+e*+g[b+96>>2];b=b+56+((f>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Gl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[d>>2]|0;g=sb[c[(c[g>>2]|0)+56>>2]&31](g,20)|0;h=c[d+4>>2]|0;b=a[b+4>>0]|0;d=c[d>>2]|0;c[g+4>>2]=d;c[g>>2]=6196;a[g+8>>0]=0;c[g+12>>2]=h;a[g+16>>0]=b;if(h|0)return g|0;c[g+12>>2]=ub[c[(c[d>>2]|0)+12>>2]&63](d,c[e+8>>2]|0,c[f+8>>2]|0)|0;a[g+8>>0]=1;return g|0}function Hl(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,44)|0;c[b+4>>2]=c[d>>2];c[b>>2]=6356;a[b+24>>0]=1;c[b+20>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;a[b+28>>0]=1;c[b+32>>2]=c[d+4>>2];a[b+36>>0]=0;c[b+40>>2]=c[(c[f+4>>2]|0)+68>>2];Vg(b,e,f);return b|0}function Il(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,44)|0;c[b+4>>2]=c[d>>2];c[b>>2]=6356;a[b+24>>0]=1;c[b+20>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;a[b+28>>0]=0;c[b+32>>2]=c[d+4>>2];a[b+36>>0]=0;c[b+40>>2]=c[(c[e+4>>2]|0)+68>>2];Vg(b,e,f);return b|0}function Jl(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+48|0;c[f>>2]=7220;c[f+4>>2]=b;c[f+8>>2]=c[d>>2];c[f+8+4>>2]=c[d+4>>2];c[f+8+8>>2]=c[d+8>>2];c[f+8+12>>2]=c[d+12>>2];c[f+24>>2]=c[e>>2];c[f+24+4>>2]=c[e+4>>2];c[f+24+8>>2]=c[e+8>>2];c[f+24+12>>2]=c[e+12>>2];a=c[a+48>>2]|0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,f,d,e);l=f;return}function Kl(a,b,d){a=a|0;b=+b;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;i=+g[a+28>>2];f=+g[a+32>>2];j=+g[a+36>>2];h=+gb[c[(c[a>>2]|0)+48>>2]&15](a);e=+gb[c[(c[a>>2]|0)+48>>2]&15](a);j=(j+ +gb[c[(c[a>>2]|0)+48>>2]&15](a))*2.0;g[d>>2]=b/12.0*((f+e)*2.0*(f+e)*2.0+j*j);g[d+4>>2]=b/12.0*((i+h)*2.0*(i+h)*2.0+j*j);g[d+8>>2]=b/12.0*((i+h)*2.0*(i+h)*2.0+(f+e)*2.0*(f+e)*2.0);g[d+12>>2]=0.0;return}function Ll(a,b){a=a|0;b=+b;var d=0,e=0.0,f=0.0,h=0.0,i=0.0;d=Fs()|0;c[d+4>>2]=35;c[d+8>>2]=0;g[d+12>>2]=0.0;c[d>>2]=7240;i=+g[a>>2];h=+g[a+4>>2];f=+g[a+8>>2];a=c[a+12>>2]|0;e=1.0/+C(+(i*i+h*h+f*f));g[d+48>>2]=i*e;g[d+52>>2]=h*e;g[d+56>>2]=f*e;c[d+60>>2]=a;g[d+64>>2]=b;c[d+68>>2]=0;c[d+68+4>>2]=0;c[d+68+8>>2]=0;c[d+68+12>>2]=0;c[d+4>>2]=28;return d|0}function Ml(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;f=c[d>>2]|0;f=sb[c[(c[f>>2]|0)+56>>2]&31](f,36)|0;g=c[d+4>>2]|0;i=c[b+12>>2]|0;h=c[b+8>>2]|0;e=c[b+16>>2]|0;b=c[b+20>>2]|0;c[f+4>>2]=c[d>>2];c[f>>2]=6244;c[f+8>>2]=i;c[f+12>>2]=h;a[f+16>>0]=0;c[f+20>>2]=g;a[f+24>>0]=0;c[f+28>>2]=e;c[f+32>>2]=b;return f|0}function Nl(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=l;l=l+32|0;Rp(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);Ip(d,+g[b>>2],+g[b+4>>2],+g[b+8>>2],+g[a+348>>2],+g[a+352>>2],+g[a+356>>2]);Xo(d+16|0,+g[c>>2],+g[c+4>>2],+g[c+8>>2],+g[d>>2],+g[d+4>>2],+g[d+8>>2]);Wp(a,+g[d+16>>2],+g[d+16+4>>2],+g[d+16+8>>2]);l=d;return}function Ol(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+64|0;c[d>>2]=1065353216;c[d+4>>2]=0;c[d+4+4>>2]=0;c[d+4+8>>2]=0;c[d+4+12>>2]=0;c[d+20>>2]=1065353216;c[d+24>>2]=0;c[d+24+4>>2]=0;c[d+24+8>>2]=0;c[d+24+12>>2]=0;c[d+40>>2]=1065353216;c[d+44>>2]=0;c[d+48>>2]=c[b>>2];c[d+48+4>>2]=c[b+4>>2];c[d+48+8>>2]=c[b+8>>2];c[d+48+12>>2]=c[b+12>>2];Bd(a,d);l=d;return}function Pl(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=+e;var f=0,h=0;f=l;l=l+16|0;h=ZF(b,0)|0;g[f+8>>2]=+Sx(+g[h>>2],+g[h+4>>2],+g[h+8>>2],c,d,e);h=ZF(b,1)|0;g[f+4>>2]=+Sx(+g[h>>2],+g[h+4>>2],+g[h+8>>2],c,d,e);b=ZF(b,2)|0;g[f>>2]=+Sx(+g[b>>2],+g[b+4>>2],+g[b+8>>2],c,d,e);ps(a,f+8|0,f+4|0,f);l=f;return}function Ql(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;if((d|0)==0?1:(c[d+236>>2]&2|0)==0){d=1;return d|0}g=c[b+488>>2]|0;if((g|0)<=0){d=1;return d|0}b=c[b+496>>2]|0;f=0;while(1){e=c[b+(f<<2)>>2]|0;if(a[e+20>>0]|0){if((c[e+28>>2]|0)==(d|0)){b=0;e=8;break}if((c[e+32>>2]|0)==(d|0)){b=0;e=8;break}}f=f+1|0;if((f|0)>=(g|0)){b=1;e=8;break}}if((e|0)==8)return b|0;return 0}function Rl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;j=+g[a+28>>2];h=+g[a+32>>2];e=+g[a+36>>2];i=+gb[c[(c[a>>2]|0)+48>>2]&15](a);f=+gb[c[(c[a>>2]|0)+48>>2]&15](a);e=e+ +gb[c[(c[a>>2]|0)+48>>2]&15](a);g[d>>2]=+(b&1^1|0)*(j+i)-+(b&1|0)*(j+i);g[d+4>>2]=+(b>>>1&1^1|0)*(h+f)-+(b>>>1&1|0)*(h+f);g[d+8>>2]=+(b>>>2&1^1|0)*e-+(b>>>2&1|0)*e;g[d+12>>2]=0.0;return}function Sl(b,d){b=b|0;d=d|0;if((c[b+16>>2]|0)!=(0-(c[b+76>>2]|0)|0))return;tm(b+4|0);tm(b+64|0);a[b+193>>0]=0;a[b+194>>0]=1;c[b+144>>2]=0;c[b+164>>2]=0;c[b+148>>2]=1;c[b+152>>2]=0;c[b+156>>2]=10;c[b+160>>2]=1;c[b+124>>2]=0;c[b+124+4>>2]=0;c[b+124+8>>2]=0;c[b+168>>2]=0;c[b+168+4>>2]=0;c[b+168+8>>2]=0;c[b+168+12>>2]=0;c[b+168+16>>2]=0;c[b+168+20>>2]=0;return}function Tl(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=+d;e=+e;var f=0,h=0,i=0,j=0;f=l;l=l+16|0;j=ZF(b,0)|0;i=ZF(b,1)|0;h=ZF(b,2)|0;Im(f,c,d,e,+g[j>>2],+g[j+4>>2],+g[j+8>>2],+g[i>>2],+g[i+4>>2],+g[i+8>>2],+g[h>>2],+g[h+4>>2],+g[h+8>>2]);Hp(a,+g[f>>2],+g[f+4>>2],+g[f+8>>2],+g[b+48>>2],+g[b+52>>2],+g[b+56>>2]);l=f;return}function Ul(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;i=+g[b+28>>2];j=+g[b+32>>2];e=+g[b+36>>2];h=+gb[c[(c[b>>2]|0)+48>>2]&15](b);f=+gb[c[(c[b>>2]|0)+48>>2]&15](b);e=e+ +gb[c[(c[b>>2]|0)+48>>2]&15](b);f=+g[d+4>>2]>=0.0?j+f:-(j+f);e=+g[d+8>>2]>=0.0?e:-e;g[a>>2]=+g[d>>2]>=0.0?i+h:-(i+h);g[a+4>>2]=f;g[a+8>>2]=e;g[a+12>>2]=0.0;return}function Vl(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0.0,h=0.0,i=0.0;if((d|0)<=0)return;e=0;do{i=+g[a+28>>2];h=+g[a+32>>2];h=+g[b+(e<<4)+4>>2]>=0.0?h:-h;f=+g[a+36>>2];f=+g[b+(e<<4)+8>>2]>=0.0?f:-f;g[c+(e<<4)>>2]=+g[b+(e<<4)>>2]>=0.0?i:-i;g[c+(e<<4)+4>>2]=h;g[c+(e<<4)+8>>2]=f;g[c+(e<<4)+12>>2]=0.0;e=e+1|0}while((e|0)!=(d|0));return}function Wl(b){b=b|0;var d=0,e=0;c[b>>2]=6484;d=c[b+64>>2]|0;if(d|0?(Vh(d),e=c[b+64>>2]|0,e|0):0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}d=c[b+24>>2]|0;if(!d){a[b+28>>0]=1;c[b+24>>2]=0;c[b+16>>2]=0;b=b+20|0;c[b>>2]=0;return}if(a[b+28>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+24>>2]=0;a[b+28>>0]=1;c[b+24>>2]=0;c[b+16>>2]=0;b=b+20|0;c[b>>2]=0;return}function Xl(a,b,d,e,f,g,h,i,j,k){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;a=c[a+32>>2]|0;c[d>>2]=c[a+(k<<5)+12>>2];c[b>>2]=c[a+(k<<5)+16>>2];c[e>>2]=c[a+(k<<5)+28>>2];c[f>>2]=c[a+(k<<5)+20>>2];c[i>>2]=c[a+(k<<5)>>2];c[g>>2]=c[a+(k<<5)+4>>2];c[h>>2]=c[a+(k<<5)+8>>2];c[j>>2]=c[a+(k<<5)+24>>2];return}function Yl(a,e,f){a=a|0;e=e|0;f=f|0;var h=0.0;switch(c[a+96>>2]|0){case 0:{f=(O(c[a+64>>2]|0,f)|0)+e|0;h=+g[(c[a+92>>2]|0)+(f<<2)>>2];return +h}case 5:{h=+(d[(O(c[a+64>>2]|0,f)|0)+e+(c[a+92>>2]|0)>>0]|0)*+g[a+88>>2];return +h}case 3:{f=(O(c[a+64>>2]|0,f)|0)+e|0;h=+(b[(c[a+92>>2]|0)+(f<<1)>>1]|0)*+g[a+88>>2];return +h}default:{h=0.0;return +h}}return 0.0}function Zl(b){b=b|0;var d=0,e=0;c[b>>2]=7448;d=c[b+104>>2]|0;if(d|0){if(a[b+108>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+104>>2]=0}a[b+108>>0]=1;c[b+104>>2]=0;c[b+96>>2]=0;c[b+100>>2]=0;c[b>>2]=7316;d=c[b+52>>2]|0;if(d|0?(Ab[c[c[d>>2]>>2]&511](d),e=c[b+52>>2]|0,e|0):0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function _l(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;switch(b|0){case 0:{b=0;a=0;e=1065353216;break}case 1:{b=0;a=0;e=-1082130432;break}case 2:{b=0;a=1065353216;e=0;break}case 3:{b=0;a=-1082130432;e=0;break}case 4:{b=1065353216;a=0;e=0;break}case 5:{b=-1082130432;a=0;e=0;break}default:return}c[d>>2]=e;c[d+4>>2]=a;c[d+8>>2]=b;g[d+12>>2]=0.0;return}function $l(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;c[b+4>>2]=c[d>>2];c[b+4+4>>2]=c[d+4>>2];c[b+4+8>>2]=c[d+8>>2];c[b+4+12>>2]=c[d+12>>2];c[b+20>>2]=c[e>>2];c[b+20+4>>2]=c[e+4>>2];c[b+20+8>>2]=c[e+8>>2];c[b+20+12>>2]=c[e+12>>2];g[b+36>>2]=f;a[b+40>>0]=1;return}function am(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+20>>2]=c[b+20>>2];c[a+24>>2]=c[b+24>>2];xm(a+28|0,b+28|0);c[a+76>>2]=c[b+76>>2];c[a+76+4>>2]=c[b+76+4>>2];c[a+76+8>>2]=c[b+76+8>>2];c[a+76+12>>2]=c[b+76+12>>2];c[a+76+16>>2]=c[b+76+16>>2];return}function bm(a,b){a=a|0;b=b|0;var c=0.0,d=0;d=l;l=l+32|0;c=+g[b+12>>2];if(1.0-c*c<1.1920928955078125e-06){g[d+20>>2]=1.0;g[d+16>>2]=0.0;g[d+12>>2]=0.0;ps(a,d+20|0,d+16|0,d+12|0);l=d;return}else{c=1.0/+RH(1.0-c*c);g[d+8>>2]=+g[b>>2]*c;g[d+4>>2]=+g[b+4>>2]*c;g[d>>2]=+g[b+8>>2]*c;ps(a,d+8|0,d+4|0,d);l=d;return}}function cm(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=h|0;d=l;l=l+16|0;c[d>>2]=9168;c[d+4>>2]=e;me(a+4|0,c[a+4>>2]|0,b,e+4|0,e+20|0,+g[e+32>>2],f,h,d);me(a+64|0,c[a+64>>2]|0,b,e+4|0,e+20|0,+g[e+32>>2],f,h,d);l=d;return}function dm(b){b=b|0;var d=0;c[b>>2]=7448;d=c[b+104>>2]|0;if(d|0){if(a[b+108>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+104>>2]=0}a[b+108>>0]=1;c[b+104>>2]=0;c[b+96>>2]=0;c[b+100>>2]=0;c[b>>2]=7316;d=c[b+52>>2]|0;if(!d)return;Ab[c[c[d>>2]>>2]&511](d);d=c[b+52>>2]|0;if(!d)return;c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);return}function em(a,b){a=+a;b=b|0;var d=0,e=0,f=0;h[j>>3]=a;d=c[j>>2]|0;e=c[j+4>>2]|0;f=$t(d|0,e|0,52)|0;switch(f&2047){case 0:{if(a!=0.0){a=+em(a*18446744073709551616.0,b);d=(c[b>>2]|0)+-64|0}else d=0;c[b>>2]=d;break}case 2047:break;default:{c[b>>2]=(f&2047)+-1022;c[j>>2]=d;c[j+4>>2]=e&-2146435073|1071644672;a=+h[j>>3]}}return +a}function fm(a,b){a=+a;b=+b;var d=0;d=Zs()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;c[d+16>>2]=1065353216;c[d+20>>2]=1065353216;g[d+24>>2]=0.0;g[d+44>>2]=.03999999910593033;g[d+56>>2]=a;g[d+60>>2]=b;c[d+4>>2]=11;g[d+52>>2]=a/+C(+(a*a+b*b));c[d>>2]=6664;c[d+64>>2]=0;c[d+68>>2]=2;c[d+72>>2]=1;g[d+28>>2]=a;g[d+36>>2]=b;g[d+32>>2]=a;return d|0}function gm(a,b){a=+a;b=+b;var d=0;d=Zs()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;c[d+16>>2]=1065353216;c[d+20>>2]=1065353216;g[d+24>>2]=0.0;g[d+44>>2]=.03999999910593033;g[d+56>>2]=a;g[d+60>>2]=b;c[d+4>>2]=11;g[d+52>>2]=a/+C(+(a*a+b*b));c[d>>2]=6764;c[d+64>>2]=1;c[d+68>>2]=0;c[d+72>>2]=2;g[d+32>>2]=a;g[d+28>>2]=b;g[d+36>>2]=a;return d|0}function hm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=bI(c[a+4>>2]|0)|0;if((e|0)>(b|0)){c[a+4>>2]=b;return}if((e|0)<(b|0))Fn(a,b);while(1){if((e|0)>=(b|0))break;f=(c[a+12>>2]|0)+(e*104|0)|0;g=d;h=f+104|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));e=e+1|0}c[a+4>>2]=b;return}function im(a,b){a=+a;b=+b;var d=0;d=Zs()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;c[d+16>>2]=1065353216;c[d+20>>2]=1065353216;g[d+24>>2]=0.0;g[d+44>>2]=.03999999910593033;c[d>>2]=6564;g[d+56>>2]=a;g[d+60>>2]=b;c[d+4>>2]=11;c[d+64>>2]=0;c[d+68>>2]=1;c[d+72>>2]=2;g[d+28>>2]=a;g[d+32>>2]=b;g[d+36>>2]=a;g[d+52>>2]=a/+C(+(a*a+b*b));return d|0}function jm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0;e=l;l=l+16|0;c[e>>2]=-1;c[e+4>>2]=c[a+16>>2];if(!(c[b+4>>2]|0))c[b+4>>2]=e;g=c[a+12>>2]|0;f=+jb[c[(c[g>>2]|0)+12>>2]&15](g,b,d);c[a+4>>2]=c[(c[a+12>>2]|0)+4>>2];l=e;return +f}function km(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[a+348>>2]=c[b>>2];c[a+348+4>>2]=c[b+4>>2];c[a+348+8>>2]=c[b+8>>2];c[a+348+12>>2]=c[b+12>>2];kq(d,+g[a+348>>2],+g[a+352>>2],+g[a+356>>2],+g[a+344>>2]);c[a+560>>2]=c[d>>2];c[a+560+4>>2]=c[d+4>>2];c[a+560+8>>2]=c[d+8>>2];c[a+560+12>>2]=c[d+12>>2];l=d;return}function lm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[a+268>>2]|0;if((g|0)<=0)return;b=c[b>>2]|0;f=c[a+276>>2]|0;d=0;while(1){e=f+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(g|0)){h=7;break}}if((h|0)==7)return;if((d|0)>=(g|0))return;c[e>>2]=c[f+(g+-1<<2)>>2];c[a+268>>2]=g+-1;return}function mm(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0,f=0.0,h=0.0,i=0.0;e=l;l=l+16|0;f=+TH(b*.5);b=+SH(b*.5);h=+TH(c*.5);c=+SH(c*.5);i=+TH(d*.5);d=+SH(d*.5);g[e+12>>2]=d*h*f-i*c*b;g[e+8>>2]=i*c*f+d*h*b;g[e+4>>2]=i*h*b-d*c*f;g[e>>2]=i*h*f+d*c*b;Ar(a,e+12|0,e+8|0,e+4|0,e);l=e;return}function nm(a){a=a|0;var b=0;b=l;l=l+32|0;g[a>>2]=1.2000000476837158;g[a+4>>2]=0.0;g[a+8>>2]=0.0;g[a+12>>2]=1.0e3;g[b+20>>2]=0.0;g[b+16>>2]=0.0;g[b+12>>2]=0.0;ps(a+16|0,b+20|0,b+16|0,b+12|0);c[a+32>>2]=0;c[a+36>>2]=0;g[b+8>>2]=0.0;g[b+4>>2]=-10.0;g[b>>2]=0.0;ps(a+40|0,b+8|0,b+4|0,b);DB(a+56|0);l=b;return}function om(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[20133+f>>0]|0)==(b|0)){g=2;break}f=f+1|0;if((f|0)==87){f=87;b=20221;g=5;break}}if((g|0)==2)if(!f)f=20221;else{b=20221;g=5}if((g|0)==5)while(1){do{g=b;b=b+1|0}while((a[g>>0]|0)!=0);f=f+-1|0;if(!f){f=b;break}else g=5}return nG(f,c[e+20>>2]|0)|0}function pm(a,b,d,e,f,h){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;h=+h;c[a>>2]=b;c[a+4>>2]=d;c[a+8>>2]=c[e>>2];c[a+8+4>>2]=c[e+4>>2];c[a+8+8>>2]=c[e+8>>2];c[a+8+12>>2]=c[e+12>>2];c[a+24>>2]=c[f>>2];c[a+24+4>>2]=c[f+4>>2];c[a+24+8>>2]=c[f+8>>2];c[a+24+12>>2]=c[f+12>>2];g[a+40>>2]=h;return}function qm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;f=c[a+280>>2]|0;if((f|0)<=0)return;g=c[a+288>>2]|0;d=0;while(1){e=g+(d<<2)|0;if((c[e>>2]|0)==(b|0))break;d=d+1|0;if((d|0)>=(f|0)){h=7;break}}if((h|0)==7)return;if((d|0)>=(f|0))return;c[e>>2]=c[g+(f+-1<<2)>>2];c[(c[a+288>>2]|0)+(f+-1<<2)>>2]=b;c[a+280>>2]=f+-1;return}function rm(){var b=0;b=l;l=l+48|0;if(a[22672]|0){l=b;return}if(!(Yy(22672)|0)){l=b;return}g[b+32>>2]=1.0;g[b+28>>2]=0.0;g[b+24>>2]=0.0;g[b+20>>2]=0.0;g[b+16>>2]=1.0;g[b+12>>2]=0.0;g[b+8>>2]=0.0;g[b+4>>2]=0.0;g[b>>2]=1.0;nq(23072,b+32|0,b+28|0,b+24|0,b+20|0,b+16|0,b+12|0,b+8|0,b+4|0,b);l=b;return}function sm(){var b=0,e=0,f=0;f=l;l=l+16|0;a[f>>0]=10;b=c[2411]|0;if(!b)if(!(xo(9628)|0)){b=c[2411]|0;e=4}else b=-1;else e=4;do if((e|0)==4){e=c[2412]|0;if(!(e>>>0>=b>>>0|(a[9703]|0)==10)){c[2412]=e+1;a[e>>0]=10;b=10;break}if((ub[c[9664>>2]&63](9628,f,1)|0)==1)b=d[f>>0]|0;else b=-1}while(0);l=f;return b|0}function tm(b){b=b|0;var d=0;d=c[b>>2]|0;if(d|0)dn(b,d);d=c[b+4>>2]|0;if(d|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+4>>2]=0;c[b+8>>2]=-1;d=c[b+32>>2]|0;if(d|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;c[b+16>>2]=0;return}function um(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=c[a+712>>2]|0;if((e|0)<=0)return;a=c[a+720>>2]|0;d=0;do{if(+g[a+(d*104|0)+88>>2]>0.0){f=a+(d*104|0)+56|0;g[f>>2]=+g[b>>2]+ +g[f>>2];f=a+(d*104|0)+60|0;g[f>>2]=+g[b+4>>2]+ +g[f>>2];f=a+(d*104|0)+64|0;g[f>>2]=+g[b+8>>2]+ +g[f>>2]}d=d+1|0}while((d|0)!=(e|0));return}function vm(a,b,c){a=a|0;b=b|0;c=+c;var d=0,e=0.0;d=l;l=l+16|0;e=+Tz(+g[b>>2],+g[b+4>>2],+g[b+8>>2]);e=+SH(c*.5)/e;g[d+12>>2]=+g[(bI(b)|0)>>2]*e;g[d+8>>2]=+g[(KH(b)|0)>>2]*e;g[d+4>>2]=+g[(JH(b)|0)>>2]*e;g[d>>2]=+TH(c*.5);Ar(a,d+12|0,d+8|0,d+4|0,d);l=d;return}function wm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0,g=0;e=l;l=l+16|0;c[e>>2]=-1;c[e+4>>2]=c[a+24>>2];if(!(c[b+4>>2]|0))c[b+4>>2]=e;g=c[a+20>>2]|0;f=+jb[c[(c[g>>2]|0)+12>>2]&15](g,b,d);c[a+4>>2]=c[(c[a+20>>2]|0)+4>>2];l=e;return +f}function xm(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];c[a+16>>2]=c[b+16>>2];c[a+16+4>>2]=c[b+16+4>>2];c[a+16+8>>2]=c[b+16+8>>2];c[a+16+12>>2]=c[b+16+12>>2];c[a+32>>2]=c[b+32>>2];c[a+32+4>>2]=c[b+32+4>>2];c[a+32+8>>2]=c[b+32+8>>2];c[a+32+12>>2]=c[b+32+12>>2];return}function ym(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do switch(b|0){case 2:case 1:{if(c>>>0<3){d=+g[a+600>>2];break a}if((c+-3|0)>>>0<3)d=+g[a+432>>2];else d=0.0;break}case 4:case 3:{if(c>>>0<3){d=+g[a+596>>2];break a}if((c+-3|0)>>>0<3)d=+g[a+604>>2];else d=0.0;break}default:d=0.0}while(0);return +d}function zm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;b=c[d>>2]|0;b=sb[c[(c[b>>2]|0)+56>>2]&31](b,16)|0;d=c[d>>2]|0;c[b+4>>2]=d;c[b>>2]=9448;a[b+8>>0]=0;c[b+12>>2]=0;c[b+12>>2]=ub[c[(c[d>>2]|0)+12>>2]&63](d,c[e+8>>2]|0,c[f+8>>2]|0)|0;a[b+8>>0]=1;return b|0}function Am(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if(c>>>0>0|(c|0)==0&b>>>0>4294967295)while(1){e=Rr(b|0,c|0,10,0)|0;d=d+-1|0;a[d>>0]=e&255|48;e=b;b=AA(b|0,c|0,10,0)|0;if(!(c>>>0>9|(c|0)==9&e>>>0>4294967295))break;else c=z}if(b)while(1){d=d+-1|0;a[d>>0]=(b>>>0)%10|0|48;if(b>>>0<10)break;else b=(b>>>0)/10|0}return d|0}function Bm(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+56>>2]|0;if(!d)return;e=qb[c[(c[d>>2]|0)+8>>2]&127](d)|0;e=ub[c[(c[b>>2]|0)+16>>2]&63](b,e,1)|0;d=c[a+56>>2]|0;d=ub[c[(c[d>>2]|0)+12>>2]&63](d,c[e+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,d,1346456916,c[a+56>>2]|0);return}function Cm(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;switch(b|0){case 2:case 1:if(e>>>0<3){g[a+600>>2]=d;c[a+592>>2]=c[a+592>>2]|2;return}else{g[a+432>>2]=d;return}case 4:case 3:if(e>>>0<3){g[a+596>>2]=d;c[a+592>>2]=c[a+592>>2]|1;return}else{g[a+604>>2]=d;c[a+592>>2]=c[a+592>>2]|4;return}default:return}}function Dm(a,d){a=a|0;d=d|0;var e=0,f=0,g=0;d=c[a+56>>2]|0;if((d&65535)<<16>>16)return;b[a+64>>1]=1;g=c[a+60>>2]|0;if((d>>>16&65535)>1){e=1;d=1;while(1){b[g+(e<<6)+48>>1]=e+1;f=d+1<<16>>16;d=b[a+58>>1]|0;if((f&65535)<(d&65535)){e=f&65535;d=f}else break}}else d=d>>>16&65535;b[g+((d&65535)+-1<<6)+48>>1]=0;return}function Em(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+52>>2]|0;if(!d)return;e=qb[c[(c[d>>2]|0)+12>>2]&127](d)|0;e=ub[c[(c[b>>2]|0)+16>>2]&63](b,e,1)|0;d=c[a+52>>2]|0;d=ub[c[(c[d>>2]|0)+16>>2]&63](d,c[e+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,d,1213612625,c[a+52>>2]|0);return}function Fm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;k=+g[b+28>>2];e=+g[b+36>>2];h=+g[c>>2];i=+g[c+4>>2];j=+C(+(h*h+i*i));d=+g[c+8>>2];if(j!=0.0){f=d<0.0?-e:e;e=h*(k/j);d=i*(k/j)}else{f=d<0.0?-e:e;e=k;d=0.0}g[a>>2]=e;g[a+8>>2]=f;g[a+4>>2]=d;return}function Gm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0,k=0.0;k=+g[b+28>>2];e=+g[b+32>>2];h=+g[c>>2];i=+g[c+8>>2];j=+C(+(h*h+i*i));d=+g[c+4>>2];if(j!=0.0){f=d<0.0?-e:e;e=h*(k/j);d=i*(k/j)}else{f=d<0.0?-e:e;e=k;d=0.0}g[a>>2]=e;g[a+4>>2]=f;g[a+8>>2]=d;return}function Hm(a){a=a|0;var b=0.0,d=0.0,e=0.0,f=0.0;b=+g[(c[a+28>>2]|0)+344>>2];d=+g[(c[a+32>>2]|0)+344>>2];if(d==0.0)b=1.0;else b=b/(b+d);f=1.0-b;e=b*+g[a+1116>>2]+f*+g[a+1180>>2];d=b*+g[a+1120>>2]+f*+g[a+1184>>2];g[a+1284>>2]=b*+g[a+1112>>2]+f*+g[a+1176>>2];g[a+1288>>2]=e;g[a+1292>>2]=d;g[a+1296>>2]=0.0;return}function Im(a,b,c,d,e,f,h,i,j,k,m,n,o){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;i=+i;j=+j;k=+k;m=+m;n=+n;o=+o;var p=0;p=l;l=l+16|0;g[p+8>>2]=+Sx(b,c,d,e,f,h);g[p+4>>2]=+Sx(b,c,d,i,j,k);g[p>>2]=+Sx(b,c,d,m,n,o);ps(a,p+8|0,p+4|0,p);l=p;return}function Jm(a,b,c){a=a|0;b=b|0;c=+c;var d=0.0,e=0.0,f=0.0,h=0.0;e=+g[a+28>>2];f=+g[a+32>>2];h=+g[a+36>>2];d=+g[b>>2];if(!(d<=e+c)){b=0;return b|0}if(!(d>=-e-c)){b=0;return b|0}d=+g[b+4>>2];if(!(d<=f+c)){b=0;return b|0}if(!(d>=-f-c)){b=0;return b|0}d=+g[b+8>>2];if(!(d<=h+c)){b=0;return b|0}b=d>=-h-c;return b|0}function Km(a,b,d){a=a|0;b=b|0;d=d|0;Mv(a);c[a>>2]=3092;c[a+12>>2]=c[b>>2];c[a+12+4>>2]=c[b+4>>2];c[a+12+8>>2]=c[b+8>>2];c[a+12+12>>2]=c[b+12>>2];c[a+28>>2]=c[d>>2];c[a+28+4>>2]=c[d+4>>2];c[a+28+8>>2]=c[d+8>>2];c[a+28+12>>2]=c[d+12>>2];c[a+76>>2]=0;return}function Lm(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0,h=0.0,i=0.0,j=0.0;j=+g[b+32>>2];d=+g[b+28>>2];e=+g[c+4>>2];h=+g[c+8>>2];i=+C(+(e*e+h*h));if(i!=0.0){f=+g[c>>2]<0.0?-d:d;e=e*(j/i);d=h*(j/i)}else{f=+g[c>>2]<0.0?-d:d;e=j;d=0.0}g[a+4>>2]=e;g[a>>2]=f;g[a+8>>2]=d;return}function Mm(b,d,e,f){b=b|0;d=d|0;e=e|0;f=+f;if(!(+g[b+36>>2]>f))return;a[b+40>>0]=1;c[b+4>>2]=c[d>>2];c[b+4+4>>2]=c[d+4>>2];c[b+4+8>>2]=c[d+8>>2];c[b+4+12>>2]=c[d+12>>2];c[b+20>>2]=c[e>>2];c[b+20+4>>2]=c[e+4>>2];c[b+20+8>>2]=c[e+8>>2];c[b+20+12>>2]=c[e+12>>2];g[b+36>>2]=f;return}function Nm(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[d>>2]|0;f=c[a+80>>2]|0;if((e|0)==(f|0)){a=0;return a|0}d=c[d+4>>2]|0;if(!((b[a+10>>1]&(d&65535))<<16>>16)){a=0;return a|0}if(!((b[a+8>>1]&(d>>>16&65535))<<16>>16)){a=0;return a|0}a=c[a+92>>2]|0;a=ub[c[(c[a>>2]|0)+28>>2]&63](a,f,e)|0;return a|0}function Om(a,b){a=a|0;b=+b;var c=0,d=0.0;c=l;l=l+16|0;if(!(+g[a+68>>2]>0.0)){l=c;return}d=-+g[a+92>>2];b=-+g[a+96>>2];g[c>>2]=-+g[a+88>>2];g[c+4>>2]=d;g[c+8>>2]=b;g[c+12>>2]=0.0;Pi(a+4|0,c,a+164|0);Pi(a+16|0,a+88|0,a+180|0);l=c;return}function Pm(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0.0,f=0,g=0;if((d|0)>-1|(d|0)==-1&c>>>0>4294967295){e=(+(c>>>0)+4294967296.0*+(d>>>0))*18446744073709551616.0+(+(a>>>0)+4294967296.0*+(b>>>0));return +e}else{g=Nv(0,0,a|0,b|0)|0;f=z;d=cw((a|0)==0&(b|0)==0&1|0,0,~c|0,~d|0)|0;e=-+Pm(g,f,d,z);return +e}return 0.0}function Qm(a,b){a=a|0;b=b|0;var d=0.0,e=0.0,f=0.0;d=+g[a+344>>2];if(d!=0.0){f=1.0/d*+g[b+4>>2];e=1.0/d*+g[b+8>>2];g[a+364>>2]=1.0/d*+g[b>>2];g[a+368>>2]=f;g[a+372>>2]=e;g[a+376>>2]=0.0}c[a+380>>2]=c[b>>2];c[a+380+4>>2]=c[b+4>>2];c[a+380+8>>2]=c[b+8>>2];c[a+380+12>>2]=c[b+12>>2];return}function Rm(b,d,e){b=b|0;d=d|0;e=e|0;var f=0;f=c[b+16>>2]|0;do if(f){if((f|0)!=(d|0)){c[b+36>>2]=(c[b+36>>2]|0)+1;c[b+24>>2]=2;a[b+54>>0]=1;break}if((c[b+24>>2]|0)==2)c[b+24>>2]=e}else{c[b+16>>2]=d;c[b+24>>2]=e;c[b+36>>2]=1}while(0);return}function Sm(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a+8>>2]|0;a=c[f+8>>2]|0;if((a|0)<=0)return;e=0;do{d=c[(c[f+16>>2]|0)+(e*12|0)+8>>2]|0;if(d){Gb[c[(c[d>>2]|0)+16>>2]&127](d,b);a=c[f+8>>2]|0}e=e+1|0}while((e|0)<(a|0));return}function Tm(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;switch(e|0){case 5:case -1:break;default:return}switch(b|0){case 2:{g[a+760>>2]=d;c[a+748>>2]=c[a+748>>2]|2;return}case 4:{g[a+756>>2]=d;c[a+748>>2]=c[a+748>>2]|1;return}case 3:{g[a+752>>2]=d;c[a+748>>2]=c[a+748>>2]|4;return}default:return}}function Um(a,b,d){a=a|0;b=b|0;d=d|0;ht(a);c[a>>2]=2920;c[a+20>>2]=c[b>>2];c[a+20+4>>2]=c[b+4>>2];c[a+20+8>>2]=c[b+8>>2];c[a+20+12>>2]=c[b+12>>2];c[a+36>>2]=c[d>>2];c[a+36+4>>2]=c[d+4>>2];c[a+36+8>>2]=c[d+8>>2];c[a+36+12>>2]=c[d+12>>2];return}function Vm(){var b=0,d=0,e=0;do if((c[2426]|0)>=0?(gI()|0)!=0:0){if((a[9703]|0)!=10?(d=c[2412]|0,d>>>0<(c[2411]|0)>>>0):0){c[2412]=d+1;a[d>>0]=10;break}sm()|0}else e=3;while(0);do if((e|0)==3){if((a[9703]|0)!=10?(b=c[2412]|0,b>>>0<(c[2411]|0)>>>0):0){c[2412]=b+1;a[b>>0]=10;break}sm()|0}while(0);return}function Wm(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[d>>2]|0;a=px(c[b>>2]|0)|0;f=px(f)|0;if(a|0)Nb[c[(c[a>>2]|0)+32>>2]&127](a,d,e,b);if(!f)return 0;Nb[c[(c[f>>2]|0)+32>>2]&127](f,b,e,d);return 0}function Xm(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=l;l=l+48|0;f=c[b+192>>2]|0;Nb[c[(c[f>>2]|0)+8>>2]&127](f,b+4|0,e+32|0,e+16|0);c[e>>2]=6148;c[e+4>>2]=b;c[e+8>>2]=a;c[e+12>>2]=d;a=c[a+68>>2]|0;Nb[c[(c[a>>2]|0)+28>>2]&127](a,e+32|0,e+16|0,e);l=e;return}function Ym(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+112|0;d=bI(c[b+4>>2]|0)|0;e=f;g=e+104|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(g|0));OF(f);hm(a,d,f);go(b,d,c[a+12>>2]|0);l=f;return}function Zm(a,b,d){a=a|0;b=b|0;d=d|0;a:do switch(c[b+216>>2]|0){case 2:case 5:{switch(c[d+216>>2]|0){case 2:case 5:{b=0;break}default:break a}return b|0}default:{}}while(0);if(c[b+256>>2]|0?!(sb[c[c[b>>2]>>2]&31](b,d)|0):0){a=0;return a|0}a=1;return a|0}function _m(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=l;l=l+256|0;if((c|0)>(d|0)&(e&73728|0)==0){Nk(f|0,b|0,((c-d|0)>>>0<256?c-d|0:256)|0)|0;if((c-d|0)>>>0>255){b=c-d|0;do{jz(a,f,256);b=b+-256|0}while(b>>>0>255);b=c-d&255}else b=c-d|0;jz(a,f,b)}l=f;return}function $m(a,b,d){a=a|0;b=b|0;d=d|0;Zh(a,b,d)|0;c[b+52>>2]=c[a+300>>2];c[b+56>>2]=c[a+304>>2];c[b+60>>2]=c[a+308>>2];c[b+64>>2]=c[a+312>>2];c[b+68>>2]=c[a+316>>2];c[b+72>>2]=c[a+320>>2];c[b+76>>2]=c[a+324>>2];c[b+80>>2]=c[a+328>>2];return 12777}function an(a){a=a|0;c[5720]=c[a>>2];c[5721]=c[a+4>>2];c[5722]=c[a+8>>2];c[5723]=c[a+12>>2];c[5724]=c[a+16>>2];c[5725]=c[a+20>>2];c[5726]=c[a+24>>2];xm(22908,a+28|0);c[5739]=c[a+76>>2];c[5740]=c[a+76+4>>2];c[5741]=c[a+76+8>>2];c[5742]=c[a+76+12>>2];c[5743]=c[a+76+16>>2];return}function bn(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=bI(b)|0;i=bI(b+16|0)|0;h=bI(b+32|0)|0;g=KH(b)|0;f=KH(b+16|0)|0;e=KH(b+32|0)|0;d=JH(b)|0;c=JH(b+16|0)|0;nq(a,j,i,h,g,f,e,d,c,JH(b+32|0)|0);return}function cn(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a+4>>2]|0;e=bI(d)|0;if((e|0)==(bI(c[a+8>>2]|0)|0)){Bn(a,jB(e)|0);d=c[a+4>>2]|0}am((c[a+12>>2]|0)+(d*96|0)|0,b);c[a+4>>2]=(c[a+4>>2]|0)+1;return}function dn(a,b){a=a|0;b=b|0;var d=0;if(c[b+40>>2]|0){dn(a,c[b+36>>2]|0);dn(a,c[b+40>>2]|0)}if((c[a>>2]|0)==(b|0))c[a>>2]=0;d=c[a+4>>2]|0;if(!d){c[a+4>>2]=b;return}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);c[a+4>>2]=b;return}function en(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0;g=c[a+32>>2]|0;c[g>>2]=(c[g>>2]|0)+1;ig(a,Dd(a,b,f)|0);ig(a,Dd(a,d,f)|0);ig(a,Dd(a,e,f)|0);return}function fn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(GC(a,c[b+8>>2]|0)|0)al(b,d,e,f);else{a=c[a+8>>2]|0;Tb[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e,f,g)}return}function gn(a){a=a|0;var b=0;b=l;l=l+48|0;g[b+32>>2]=1.0;g[b+28>>2]=0.0;g[b+24>>2]=0.0;g[b+20>>2]=0.0;g[b+16>>2]=1.0;g[b+12>>2]=0.0;g[b+8>>2]=0.0;g[b+4>>2]=0.0;g[b>>2]=1.0;dp(a,b+32|0,b+28|0,b+24|0,b+20|0,b+16|0,b+12|0,b+8|0,b+4|0,b);l=b;return}function hn(a,b){a=a|0;b=b|0;var d=0,e=0;c[a+68>>2]=(c[a+68>>2]|0)+1;d=c[a+16>>2]|0;if((d|0)>0)do{e=d;d=d+-1|0;if((c[(c[a+24>>2]|0)+(d*80|0)+64>>2]|0)==(b|0))je(a,d)}while((e|0)>1);Ab[c[(c[a>>2]|0)+68>>2]&511](a);return}function jn(a,b){a=+a;b=+b;var d=0;d=ct()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;c[d+16>>2]=1065353216;c[d+20>>2]=1065353216;g[d+24>>2]=0.0;g[d+44>>2]=.03999999910593033;c[d+4>>2]=10;c[d>>2]=7784;c[d+52>>2]=2;g[d+28>>2]=a;g[d+32>>2]=a;g[d+36>>2]=b*.5;g[d+40>>2]=0.0;return d|0}function kn(a,b){a=+a;b=+b;var d=0;d=ct()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;c[d+16>>2]=1065353216;c[d+20>>2]=1065353216;g[d+24>>2]=0.0;g[d+44>>2]=.03999999910593033;c[d+4>>2]=10;c[d>>2]=7684;c[d+52>>2]=0;g[d+28>>2]=b*.5;g[d+32>>2]=a;g[d+36>>2]=a;g[d+40>>2]=0.0;return d|0}function ln(a,b){a=+a;b=+b;var d=0;d=ct()|0;c[d+8>>2]=0;c[d+12>>2]=1065353216;c[d+16>>2]=1065353216;c[d+20>>2]=1065353216;g[d+24>>2]=0.0;g[d+44>>2]=.03999999910593033;c[d>>2]=7584;c[d+4>>2]=10;c[d+52>>2]=1;g[d+28>>2]=a;g[d+32>>2]=b*.5;g[d+36>>2]=a;g[d+40>>2]=0.0;return d|0}function mn(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do switch(c|0){case 5:case -1:switch(b|0){case 2:{d=+g[a+760>>2];break a}case 4:{d=+g[a+756>>2];break a}case 3:{d=+g[a+752>>2];break a}default:{d=0.0;break a}}default:d=0.0}while(0);return +d}function nn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+16|0;c[f>>2]=a;c[f+4>>2]=e;a=c[a+72+((c[(c[b+4>>2]|0)+4>>2]|0)*144|0)+(c[(c[d+4>>2]|0)+4>>2]<<2)>>2]|0;a=vb[c[(c[a>>2]|0)+8>>2]&31](a,f,b,d)|0;l=f;return a|0}function on(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=bI(c[a+4>>2]|0)|0;if((e|0)>(b|0)){c[a+4>>2]=b;return}if((e|0)<(b|0))Bn(a,b);while(1){if((e|0)>=(b|0))break;am((c[a+12>>2]|0)+(e*96|0)|0,d);e=e+1|0}c[a+4>>2]=b;return}function pn(a,b){a=a|0;b=b|0;var d=0;a=c[a+64>>2]|0;if(!b)return;d=c[a+16>>2]|0;if(d>>>0<=b>>>0?(d+(O(c[a>>2]|0,c[a+4>>2]|0)|0)|0)>>>0>b>>>0:0){c[b>>2]=c[a+12>>2];c[a+12>>2]=b;c[a+8>>2]=(c[a+8>>2]|0)+1;return}c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function qn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=l;l=l+96|0;d=bI(c[b+4>>2]|0)|0;e=f;g=e+96|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(g|0));on(a,d,f);sq(b,d,c[a+12>>2]|0);l=f;return}function rn(a){a=a|0;var b=0,d=0;if((c[a+232>>2]|0)<=0)return;b=0;do{d=(c[(c[a+240>>2]|0)+(b<<2)>>2]|0)+412|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;c[d+16>>2]=0;c[d+20>>2]=0;c[d+24>>2]=0;c[d+28>>2]=0;b=b+1|0}while((b|0)<(c[a+232>>2]|0));return}function sn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=c[a+12>>2]|0;if((d|0)<=0)return;f=0;do{e=c[(c[a+20>>2]|0)+(f<<2)>>2]|0;if(e){Gb[c[(c[e>>2]|0)+16>>2]&127](e,b);d=c[a+12>>2]|0}f=f+1|0}while((f|0)<(d|0));return}function tn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=bI(c[a+4>>2]|0)|0;if((e|0)>(b|0)){c[a+4>>2]=b;return}if((e|0)<(b|0))xn(a,b);while(1){if((e|0)>=(b|0))break;c[(c[a+12>>2]|0)+(e<<2)>>2]=c[d>>2];e=e+1|0}c[a+4>>2]=b;return}function un(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=c[a+32>>2]|0;c[f>>2]=(c[f>>2]|0)+1;ig(a,Dd(a,b,0)|0);ig(a,Dd(a,d,0)|0);ig(a,Dd(a,e,0)|0);return}function vn(a,b,d){a=a|0;b=b|0;d=d|0;c[a+52>>2]=c[b>>2];c[a+52+4>>2]=c[b+4>>2];c[a+52+8>>2]=c[b+8>>2];c[a+52+12>>2]=c[b+12>>2];c[a+68>>2]=c[d>>2];c[a+68+4>>2]=c[d+4>>2];c[a+68+8>>2]=c[d+8>>2];c[a+68+12>>2]=c[d+12>>2];c[a+48>>2]=1;return}function wn(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[d>>2]|0;a=px(c[b>>2]|0)|0;e=px(e)|0;if(a|0)Kb[c[(c[a>>2]|0)+28>>2]&127](a,d,b);if(!e)return 0;Kb[c[(c[e>>2]|0)+28>>2]&127](e,b,d);return 0}function xn(b,d){b=b|0;d=d|0;var e=0;if((bI(c[b+8>>2]|0)|0)>=(d|0))return;e=Ys(d)|0;Rq(b,bI(c[b+4>>2]|0)|0,e);ts(b);a[b+16>>0]=1;c[b+12>>2]=e;c[b+8>>2]=d;return}function yn(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;d=a;e=b;f=d+104|0;do{c[d>>2]=c[e>>2];d=d+4|0;e=e+4|0}while((d|0)<(f|0));fv(a+104|0,b+104|0);gv(a+124|0,b+124|0);gv(a+144|0,b+144|0);return}function zn(a,b,c){a=+a;b=b|0;c=c|0;var d=0,e=0;e=l;l=l+32|0;d=Vr(140)|0;g[e+8>>2]=0.0;g[e+4>>2]=0.0;g[e>>2]=0.0;ps(e+16|0,e+8|0,e+4|0,e);Vk(d,a,b,c,e+16|0);l=e;return d|0}function An(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=c[b+16>>2];c[d+4>>2]=c[b+16+4>>2];c[d+8>>2]=c[b+16+8>>2];c[d+12>>2]=c[b+16+12>>2];c[e>>2]=c[b+32>>2];c[e+4>>2]=c[b+32+4>>2];c[e+8>>2]=c[b+32+8>>2];c[e+12>>2]=c[b+32+12>>2];return}function Bn(b,d){b=b|0;d=d|0;var e=0;if((bI(c[b+8>>2]|0)|0)>=(d|0))return;e=ot(d)|0;sq(b,bI(c[b+4>>2]|0)|0,e);ts(b);a[b+16>>0]=1;c[b+12>>2]=e;c[b+8>>2]=d;return}function Cn(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=c[a+4>>2]|0;if(!(h&1))i=h>>8;else i=c[(c[e>>2]|0)+(h>>8)>>2]|0;a=c[a>>2]|0;Tb[c[(c[a>>2]|0)+20>>2]&7](a,b,d,e+i|0,h&2|0?f:2,g);return}function Dn(a,b){a=a|0;b=b|0;var d=0;a=c[a+64>>2]|0;d=c[a+8>>2]|0;if(d|0){b=c[a+12>>2]|0;c[a+12>>2]=c[b>>2];c[a+8>>2]=d+-1;return b|0}c[6472]=(c[6472]|0)+1;a=ic(b+19|0)|0;if(!a){b=0;return b|0}c[(a+4+15&-16)+-4>>2]=a;b=a+4+15&-16;return b|0}function En(a,b,d){a=a|0;b=b|0;d=d|0;a=c[a+720>>2]|0;if(!(+g[a+(d*104|0)+88>>2]>0.0))return;g[a+(d*104|0)+56>>2]=+g[b>>2]+ +g[a+(d*104|0)+56>>2];g[a+(d*104|0)+60>>2]=+g[b+4>>2]+ +g[a+(d*104|0)+60>>2];g[a+(d*104|0)+64>>2]=+g[b+8>>2]+ +g[a+(d*104|0)+64>>2];return}function Fn(b,d){b=b|0;d=d|0;var e=0;if((bI(c[b+8>>2]|0)|0)>=(d|0))return;e=tt(d)|0;go(b,bI(c[b+4>>2]|0)|0,e);ts(b);a[b+16>>0]=1;c[b+12>>2]=e;c[b+8>>2]=d;return}function Gn(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;g[a+692>>2]=(c-b)*.5;c=+bh((c-b)*.5+b,6.2831854820251465);if(!(c<-3.1415927410125732)){if(c>3.1415927410125732)c=c+-6.2831854820251465}else c=c+6.2831854820251465;g[a+688>>2]=c;g[a+696>>2]=d;g[a+700>>2]=e;g[a+704>>2]=f;return}function Hn(a,b,d){a=a|0;b=+b;d=+d;var e=0;e=l;l=l+16|0;g[e+12>>2]=b;g[e+8>>2]=d;g[e+4>>2]=0.0;g[e>>2]=1.0;c[a+444>>2]=c[(b<0.0?e+4|0:b>1.0?e:e+12|0)>>2];g[e+4>>2]=0.0;g[e>>2]=1.0;c[a+448>>2]=c[(d<0.0?e+4|0:d>1.0?e:e+8|0)>>2];l=e;return}function In(){var b=0;b=l;l=l+32|0;if(a[22664]|0){l=b;return}if(!(Yy(22664)|0)){l=b;return}rm();g[b+8>>2]=0.0;g[b+4>>2]=0.0;g[b>>2]=0.0;ps(b+16|0,b+8|0,b+4|0,b);qq(23008,23072,b+16|0);l=b;return}function Jn(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[(c[b>>2]|0)+16>>2]|0;e=qb[c[(c[a>>2]|0)+16>>2]&127](a)|0;e=ub[d&63](b,e,1)|0;d=ub[c[(c[a>>2]|0)+20>>2]&63](a,c[e+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,d,1497645650,a);return}function Kn(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;Pl(e,bI(a+4|0)|0,b,c,d);Ip(e+16|0,+g[e>>2],+g[e+4>>2],+g[e+8>>2],+g[a+348>>2],+g[a+352>>2],+g[a+356>>2]);Or(a+412|0,e+16|0)|0;l=e;return}function Ln(a,b,c){a=a|0;b=b|0;c=+c;var d=0;d=l;l=l+16|0;g[d+12>>2]=+g[(bI(b)|0)>>2]*c;g[d+8>>2]=+g[(KH(b)|0)>>2]*c;g[d+4>>2]=+g[(JH(b)|0)>>2]*c;g[d>>2]=+g[b+12>>2]*c;yv(a,d+12|0,d+8|0,d+4|0,d);l=d;return}function Mn(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=c[a+52>>2];c[b+4>>2]=c[a+52+4>>2];c[b+8>>2]=c[a+52+8>>2];c[b+12>>2]=c[a+52+12>>2];c[d>>2]=c[a+68>>2];c[d+4>>2]=c[a+68+4>>2];c[d+8>>2]=c[a+68+8>>2];c[d+12>>2]=c[a+68+12>>2];return}function Nn(a){a=a|0;var b=0,d=0,e=0;b=c[a+24>>2]|0;if((b|0)<=0)return;e=0;do{d=c[(c[a+32>>2]|0)+(e<<2)>>2]|0;switch(c[d+216>>2]|0){case 2:case 5:break;default:{lg(d);b=c[a+24>>2]|0}}e=e+1|0}while((e|0)<(b|0));return}function On(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;Pl(e,bI(a+4|0)|0,b,c,d);Ip(e+16|0,+g[e>>2],+g[e+4>>2],+g[e+8>>2],+g[a+544>>2],+g[a+548>>2],+g[a+552>>2]);Or(a+428|0,e+16|0)|0;l=e;return}function Pn(a,b){a=a|0;b=b|0;var d=0,e=0;e=qb[c[(c[a>>2]|0)+16>>2]&127](a)|0;e=ub[c[(c[b>>2]|0)+16>>2]&63](b,e,1)|0;d=ub[c[(c[a>>2]|0)+20>>2]&63](a,c[e+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,d,1245859651,a);return}function Qn(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(GC(a,c[b+8>>2]|0)|0)Rm(b,d,e);else{a=c[a+8>>2]|0;Nb[c[(c[a>>2]|0)+28>>2]&127](a,b,d,e)}return}function Rn(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=c[a+8>>2];c[b+4>>2]=c[a+8+4>>2];c[b+8>>2]=c[a+8+8>>2];c[b+12>>2]=c[a+8+12>>2];c[d>>2]=c[a+24>>2];c[d+4>>2]=c[a+24+4>>2];c[d+8>>2]=c[a+24+8>>2];c[d+12>>2]=c[a+24+12>>2];return}function Sn(a,b){a=a|0;b=b|0;var d=0,e=0;e=qb[c[(c[a>>2]|0)+52>>2]&127](a)|0;e=ub[c[(c[b>>2]|0)+16>>2]&63](b,e,1)|0;d=ub[c[(c[a>>2]|0)+56>>2]&63](a,c[e+8>>2]|0,b)|0;Rb[c[(c[b>>2]|0)+20>>2]&31](b,e,d,1346455635,a);return}function Tn(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+80|0;bn(c+32|0,b);Yq(c,+g[b+48>>2],+g[b+52>>2],+g[b+56>>2]);Pl(c+16|0,c+32|0,+g[c>>2],+g[c+4>>2],+g[c+8>>2]);qq(a,c+32|0,c+16|0);l=c;return}function Un(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;g=c[a+4>>2]|0;if(!(g&1))h=g>>8;else h=c[(c[d>>2]|0)+(g>>8)>>2]|0;a=c[a>>2]|0;Rb[c[(c[a>>2]|0)+24>>2]&31](a,b,d+h|0,g&2|0?e:2,f);return}function Vn(a,b,d){a=a|0;b=b|0;d=d|0;c[a+164>>2]=c[b>>2];c[a+164+4>>2]=c[b+4>>2];c[a+164+8>>2]=c[b+8>>2];c[a+164+12>>2]=c[b+12>>2];b=bI(b)|0;if((!(+g[b>>2]!=1.0)?!(+g[b+4>>2]!=1.0):0)?!(+g[b+8>>2]!=1.0):0)d=0;c[a+180>>2]=d;return}function Wn(b){b=b|0;var d=0;c[b>>2]=5236;d=c[b+276>>2]|0;if(d|0){if(a[b+280>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+276>>2]=0}a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;c[b+272>>2]=0;c[b>>2]=5200;c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function Xn(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;Ip(e,b,c,d,+g[a+348>>2],+g[a+352>>2],+g[a+356>>2]);kq(e+16|0,+g[e>>2],+g[e+4>>2],+g[e+8>>2],+g[a+344>>2]);Or(a+312|0,e+16|0)|0;l=e;return}function Yn(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+32|0;Pl(e,a+264|0,b,c,d);Ip(e+16|0,+g[e>>2],+g[e+4>>2],+g[e+8>>2],+g[a+544>>2],+g[a+548>>2],+g[a+552>>2]);Or(a+328|0,e+16|0)|0;l=e;return}function Zn(b){b=b|0;var d=0;c[b>>2]=4252;d=c[b+496>>2]|0;if(d|0){if(a[b+500>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+496>>2]=0}a[b+500>>0]=1;c[b+496>>2]=0;c[b+488>>2]=0;c[b+492>>2]=0;c[b>>2]=5200;c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function _n(a,b,d){a=a|0;b=b|0;d=d|0;c[b>>2]=c[a+892>>2];c[b+4>>2]=c[a+892+4>>2];c[b+8>>2]=c[a+892+8>>2];c[b+12>>2]=c[a+892+12>>2];c[d>>2]=c[a+908>>2];c[d+4>>2]=c[a+908+4>>2];c[d+8>>2]=c[a+908+8>>2];c[d+12>>2]=c[a+908+12>>2];return}function $n(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0;a:do if((c|0)==-1)switch(b|0){case 2:case 1:{d=+g[a+336>>2];break a}case 4:case 3:{d=+g[a+340>>2];break a}default:{d=3402823466385288598117041.0e14;break a}}else d=3402823466385288598117041.0e14;while(0);return +d}function ao(a,b,c){a=a|0;b=b|0;c=c|0;var d=0.0,e=0.0,f=0.0;f=+g[b+28>>2];e=+g[b+32>>2];e=+g[c+4>>2]>=0.0?e:-e;d=+g[b+36>>2];d=+g[c+8>>2]>=0.0?d:-d;g[a>>2]=+g[c>>2]>=0.0?f:-f;g[a+4>>2]=e;g[a+8>>2]=d;g[a+12>>2]=0.0;return}function bo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a+4>>2]|0;if(!(f&1))g=f>>8;else g=c[(c[d>>2]|0)+(f>>8)>>2]|0;a=c[a>>2]|0;Nb[c[(c[a>>2]|0)+28>>2]&127](a,b,d+g|0,f&2|0?e:2);return}function co(b){b=b|0;var d=0;c[b>>2]=5068;d=c[b+140>>2]|0;if(d|0){if(a[b+144>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+140>>2]=0}a[b+144>>0]=1;c[b+140>>2]=0;c[b+132>>2]=0;c[b+136>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function eo(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22648]|0))Yy(22648)|0;Go(d,c[b+116>>2]|0,c[b+128>>2]|0);c[5744]=c[d>>2];c[5745]=c[d+4>>2];c[5746]=c[d+8>>2];c[5747]=c[d+12>>2];l=d;return 22976}function fo(a,b){a=a|0;b=b|0;var d=0;d=c[a+4>>2]|0;if((c[b>>2]|0)!=(d|0)?(c[b+4>>2]|0)!=(d|0):0)return 0;d=c[a+8>>2]|0;Kb[c[(c[d>>2]|0)+32>>2]&127](d,b,c[a+12>>2]|0);return 0}function go(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=0;while(1){if((e|0)>=(b|0))break;f=d+(e*104|0)|0;g=(c[a+12>>2]|0)+(e*104|0)|0;h=f+104|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));e=e+1|0}return}function ho(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+16|0;g[c+12>>2]=-+g[(bI(b)|0)>>2];g[c+8>>2]=-+g[(KH(b)|0)>>2];g[c+4>>2]=-+g[(JH(b)|0)>>2];g[c>>2]=-+g[b+12>>2];yv(a,c+12|0,c+8|0,c+4|0,c);l=c;return}function io(b){b=b|0;var d=0;c[b>>2]=9560;d=c[b+32>>2]|0;if(d|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function jo(a){a=a|0;var b=0.0,d=0.0;if(c[a+204>>2]&3|0)return;d=+g[a+368>>2]*+g[a+352>>2];b=+g[a+372>>2]*+g[a+356>>2];g[a+412>>2]=+g[a+364>>2]*+g[a+348>>2]+ +g[a+412>>2];g[a+416>>2]=d+ +g[a+416>>2];g[a+420>>2]=b+ +g[a+420>>2];return}function ko(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=sb[c[(c[d>>2]|0)+40>>2]&31](d,a)|0;f=sb[c[(c[d>>2]|0)+28>>2]&31](d,e)|0;c[b>>2]=f;if(f|0)Gb[c[(c[d>>2]|0)+48>>2]&127](d,e);c[b+4>>2]=c[a+4>>2];return 17407}function lo(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0;e=l;l=l+16|0;d=+HE(a);d=+RH(d*+HE(b));c=+Vo(a,b);if(c<0.0){ho(e,b);c=+Vo(a,e)}d=+fA(c/d)*2.0;l=e;return +d}function mo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0;h=c[a+104>>2]|0;f=+g[h+(b<<4)+4>>2]*+g[a+16>>2];e=+g[h+(b<<4)+8>>2]*+g[a+20>>2];g[d>>2]=+g[h+(b<<4)>>2]*+g[a+12>>2];g[d+4>>2]=f;g[d+8>>2]=e;g[d+12>>2]=0.0;return}function no(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+32|0;c[e>>2]=c[a+60>>2];c[e+4>>2]=0;c[e+8>>2]=b;c[e+12>>2]=e+20;c[e+16>>2]=d;if((aC(Ta(140,e|0)|0)|0)<0){c[e+20>>2]=-1;a=-1}else a=c[e+20>>2]|0;l=e;return a|0}function oo(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;f=c[d>>2]|0;f=sb[c[(c[f>>2]|0)+56>>2]&31](f,20)|0;b=a[b+4>>0]|0;c[f+4>>2]=c[d>>2];c[f>>2]=3756;a[f+16>>0]=b;return f|0}function po(a,b){a=a|0;b=b|0;var c=0.0;c=+g[(bI(b)|0)>>2];g[a>>2]=+g[a>>2]+c;c=+g[(KH(b)|0)>>2];g[a+4>>2]=+g[a+4>>2]+c;c=+g[(JH(b)|0)>>2];g[a+8>>2]=+g[a+8>>2]+c;g[a+12>>2]=+g[a+12>>2]+ +g[b+12>>2];return a|0}function qo(a,b){a=a|0;b=b|0;var c=0.0;c=+g[(bI(b)|0)>>2];g[a>>2]=+g[a>>2]-c;c=+g[(KH(b)|0)>>2];g[a+4>>2]=+g[a+4>>2]-c;c=+g[(JH(b)|0)>>2];g[a+8>>2]=+g[a+8>>2]-c;g[a+12>>2]=+g[a+12>>2]-+g[b+12>>2];return a|0}function ro(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22632]|0))Yy(22632)|0;Gb[c[(c[b>>2]|0)+76>>2]&127](d,b);c[5716]=c[d>>2];c[5717]=c[d+4>>2];c[5718]=c[d+8>>2];c[5719]=c[d+12>>2];l=d;return 22864}function so(a,b){a=a|0;b=b|0;var d=0,e=0;d=l;l=l+16|0;e=bI(c[b+4>>2]|0)|0;c[d>>2]=0;tn(a,e,d);Rq(b,e,c[a+12>>2]|0);l=d;return}function to(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22688]|0))Yy(22688)|0;Gb[c[(c[b>>2]|0)+76>>2]&127](d,b);c[5784]=c[d>>2];c[5785]=c[d+4>>2];c[5786]=c[d+8>>2];c[5787]=c[d+12>>2];l=d;return 23136}function uo(a){a=a|0;var b=0,d=0;d=a+15&-16|0;b=c[i>>2]|0;a=b+d|0;if((d|0)>0&(a|0)<(b|0)|(a|0)<0){W()|0;Sa(12);return -1}c[i>>2]=a;if((a|0)>(V()|0)?(U()|0)==0:0){c[i>>2]=b;Sa(12);return -1}return b|0}function vo(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[(JH(a)|0)>>2];c=c*+g[(bI(b)|0)>>2];d=+g[(JH(a+16|0)|0)>>2];d=c+d*+g[(KH(b)|0)>>2];c=+g[(JH(a+32|0)|0)>>2];return +(d+c*+g[(JH(b)|0)>>2])}function wo(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[(KH(a)|0)>>2];c=c*+g[(bI(b)|0)>>2];d=+g[(KH(a+16|0)|0)>>2];d=c+d*+g[(KH(b)|0)>>2];c=+g[(KH(a+32|0)|0)>>2];return +(d+c*+g[(JH(b)|0)>>2])}function xo(b){b=b|0;var d=0;d=a[b+74>>0]|0;a[b+74>>0]=d+255|d;d=c[b>>2]|0;if(!(d&8)){c[b+8>>2]=0;c[b+4>>2]=0;d=c[b+44>>2]|0;c[b+28>>2]=d;c[b+20>>2]=d;c[b+16>>2]=d+(c[b+48>>2]|0);d=0}else{c[b>>2]=d|32;d=-1}return d|0}function yo(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;if((e|0)!=-1)return;switch(b|0){case 2:case 1:{g[a+336>>2]=d;c[a+332>>2]=c[a+332>>2]|1;return}case 4:case 3:{g[a+340>>2]=d;c[a+332>>2]=c[a+332>>2]|2;return}default:return}}function zo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if((b|0)==(d|0))return;e=c[(c[a+4>>2]|0)+136>>2]|0;ub[c[(c[e>>2]|0)+8>>2]&63](e,c[b+36>>2]|0,c[d+36>>2]|0)|0;a=(c[a+4>>2]|0)+160|0;c[a>>2]=(c[a>>2]|0)+1;return}function Ao(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=l;l=l+16|0;if(!(a[22656]|0))Yy(22656)|0;Oi(f,b,d,e);c[5748]=c[f>>2];c[5749]=c[f+4>>2];c[5750]=c[f+8>>2];c[5751]=c[f+12>>2];l=f;return 22992}function Bo(b,d,e){b=b|0;d=d|0;e=+e;var f=0;f=l;l=l+16|0;if(!(a[22696]|0))Yy(22696)|0;Oi(f,b,d,e);c[5788]=c[f>>2];c[5789]=c[f+4>>2];c[5790]=c[f+8>>2];c[5791]=c[f+12>>2];l=f;return 23152}function Co(a){a=a|0;var b=0,d=0.0,e=0.0,f=0.0;b=l;l=l+32|0;Kb[c[(c[a>>2]|0)+12>>2]&127](a,b+8|0,b);f=+g[b+8>>2];e=+g[b+8+4>>2];d=+g[b+8+8>>2];d=+C(+(f*f+e*e+d*d));l=b;return +(d+ +g[b>>2])}function Do(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+16|0;c[f>>2]=5396;c[f+4>>2]=d;c[f+8>>2]=a;Kb[c[(c[b>>2]|0)+48>>2]&127](b,f,e);l=f;return}function Eo(b,c){b=b|0;c=c|0;var d=0,e=0;d=a[b>>0]|0;e=a[c>>0]|0;if(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24))do{b=b+1|0;c=c+1|0;d=a[b>>0]|0;e=a[c>>0]|0}while(!(d<<24>>24==0?1:d<<24>>24!=e<<24>>24));return (d&255)-(e&255)|0}function Fo(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+8>>2]|0;if(!((d|0)!=0&(a|0)!=0))return;Ab[c[c[a>>2]>>2]&511](a);Gb[c[(c[d>>2]|0)+60>>2]&127](d,c[b+8>>2]|0);c[b+8>>2]=0;return}function Go(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;b=bI(b+4|0)|0;e=(bI(ZF(b,0)|0)|0)+(c<<2)|0;d=(bI(ZF(b,1)|0)|0)+(c<<2)|0;ps(a,e,d,(bI(ZF(b,2)|0)|0)+(c<<2)|0);return}function Ho(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[(bI(a)|0)>>2];c=c*+g[(bI(b)|0)>>2];d=+g[(bI(a+16|0)|0)>>2];d=c+d*+g[(KH(b)|0)>>2];c=+g[(bI(a+32|0)|0)>>2];return +(d+c*+g[(JH(b)|0)>>2])}function Io(b){b=b|0;var d=0;c[b>>2]=5236;d=c[b+276>>2]|0;if(d|0){if(a[b+280>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+276>>2]=0}a[b+280>>0]=1;c[b+276>>2]=0;c[b+268>>2]=0;c[b+272>>2]=0;c[b>>2]=5200;return}function Jo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;c[e>>2]=8992;c[e+4>>2]=b;c[e+8>>2]=a;c[e+12>>2]=d;Kb[c[(c[a>>2]|0)+48>>2]&127](a,e,d);l=e;return}function Ko(b){b=b|0;var d=0;c[b>>2]=6964;if(a[b+61>>0]|0?(d=c[b+52>>2]|0,Ab[c[c[d>>2]>>2]&511](d),d=c[b+52>>2]|0,d|0):0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function Lo(b){b=b|0;var d=0;c[b>>2]=4252;d=c[b+496>>2]|0;if(d|0){if(a[b+500>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+496>>2]=0}a[b+500>>0]=1;c[b+496>>2]=0;c[b+488>>2]=0;c[b+492>>2]=0;c[b>>2]=5200;return}function Mo(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0,f=0;f=l;l=l+16|0;g[f+12>>2]=a;g[f+8>>2]=b;g[f+4>>2]=c;g[f>>2]=d;e=dt()|0;eu(e,f+12|0,f+8|0,f+4|0,f);l=f;return e|0}function No(a,b,c,d){a=+a;b=+b;c=+c;d=+d;var e=0,f=0;f=l;l=l+16|0;g[f+12>>2]=a;g[f+8>>2]=b;g[f+4>>2]=c;g[f>>2]=d;e=Vr(16)|0;yv(e,f+12|0,f+8|0,f+4|0,f);l=f;return e|0}function Oo(a,b,d,e,f,g){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;if(GC(a,c[b+8>>2]|0)|0)al(b,d,e,f);return}function Po(a){a=a|0;var b=0.0,d=0,e=0,f=0.0;e=c[a+712>>2]|0;if((e|0)<=0){b=0.0;return +b}a=c[a+720>>2]|0;d=0;b=0.0;do{f=+g[a+(d*104|0)+88>>2];b=b+(f>0.0?1.0/f:0.0);d=d+1|0}while((d|0)!=(e|0));return +b}function Qo(a){a=a|0;var b=0;c[a>>2]=5700;c[a+12>>2]=5748;b=c[a+60>>2]|0;Gb[c[(c[b>>2]|0)+20>>2]&127](b,c[a+76>>2]|0);b=c[a+60>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,c[a+76>>2]|0);_H(a);return}function Ro(b){b=b|0;var d=0;c[b>>2]=5068;d=c[b+140>>2]|0;if(d|0){if(a[b+144>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+140>>2]=0}a[b+144>>0]=1;c[b+140>>2]=0;c[b+132>>2]=0;c[b+136>>2]=0;return}function So(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22624]|0))Yy(22624)|0;Iz(d,b);c[5712]=c[d>>2];c[5713]=c[d+4>>2];c[5714]=c[d+8>>2];c[5715]=c[d+12>>2];l=d;return 22848}function To(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22616]|0))Yy(22616)|0;sy(d,b);c[5708]=c[d>>2];c[5709]=c[d+4>>2];c[5710]=c[d+8>>2];c[5711]=c[d+12>>2];l=d;return 22832}function Uo(a,b,d){a=a|0;b=+b;d=d|0;b=b*.4000000059604645*+gb[c[(c[a>>2]|0)+48>>2]&15](a);b=b*+gb[c[(c[a>>2]|0)+48>>2]&15](a);g[d>>2]=b;g[d+4>>2]=b;g[d+8>>2]=b;g[d+12>>2]=0.0;return}function Vo(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;c=+g[a>>2];c=c*+g[(bI(b)|0)>>2];d=+g[a+4>>2];d=c+d*+g[(KH(b)|0)>>2];c=+g[a+8>>2];c=d+c*+g[(JH(b)|0)>>2];return +(c+ +g[a+12>>2]*+g[b+12>>2])}function Wo(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;a=sb[c[(c[a>>2]|0)+56>>2]&31](a,24)|0;c[a+4>>2]=c[b>>2];c[a>>2]=4224;return a|0}function Xo(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i=l;l=l+16|0;g[i+8>>2]=c*h-d*f;g[i+4>>2]=d*e-b*h;g[i>>2]=b*f-c*e;ps(a,i+8|0,i+4|0,i);l=i;return}function Yo(){}function Zo(a,b){a=a|0;b=b|0;var c=0,d=0,e=0;c=O(b&65535,a&65535)|0;e=(c>>>16)+(O(b&65535,a>>>16)|0)|0;d=O(b>>>16,a&65535)|0;return (z=(e>>>16)+(O(b>>>16,a>>>16)|0)+(((e&65535)+d|0)>>>16)|0,e+d<<16|c&65535|0)|0}function _o(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=-581039253;c[d+4>>2]=-581039253;c[d+8>>2]=-581039253;g[d+12>>2]=0.0;c[e>>2]=1566444395;c[e+4>>2]=1566444395;c[e+8>>2]=1566444395;g[e+12>>2]=0.0;return}function $o(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22600]|0))Yy(22600)|0;Kp(d,b);c[5700]=c[d>>2];c[5701]=c[d+4>>2];c[5702]=c[d+8>>2];c[5703]=c[d+12>>2];l=d;return 22800}function ap(b){b=b|0;var d=0;d=l;l=l+16|0;if(!(a[22608]|0))Yy(22608)|0;bm(d,b);c[5704]=c[d>>2];c[5705]=c[d+4>>2];c[5706]=c[d+8>>2];c[5707]=c[d+12>>2];l=d;return 22816}function bp(b){b=b|0;var d=0;c[b>>2]=9032;if(a[b+192>>0]|0?(d=c[b+136>>2]|0,Ab[c[c[d>>2]>>2]&511](d),d=c[b+136>>2]|0,d|0):0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}Vh(b+64|0);Vh(b+4|0);return}function cp(b){b=b|0;var d=0;c[b>>2]=9560;d=c[b+32>>2]|0;if(d|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}function dp(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;ps(a,b,c,d);ps(a+16|0,e,f,g);ps(a+32|0,h,i,j);return}function ep(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=l;l=l+64|0;qk(d+16|0,b,c);Tl(d,b,+g[c+48>>2],+g[c+52>>2],+g[c+56>>2]);qq(a,d+16|0,d);l=d;return}function fp(a){a=a|0;var b=0;c[a>>2]=5700;c[a+12>>2]=5748;b=c[a+60>>2]|0;Gb[c[(c[b>>2]|0)+20>>2]&127](b,c[a+76>>2]|0);b=c[a+60>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,c[a+76>>2]|0);return}function gp(b){b=b|0;var d=0;c[b>>2]=3140;d=c[b+32>>2]|0;if(d|0){if(a[b+36>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+32>>2]=0}a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;return}function hp(a){a=a|0;var b=0,d=0;c[a>>2]=7316;b=c[a+52>>2]|0;if(b|0?(Ab[c[c[b>>2]>>2]&511](b),d=c[a+52>>2]|0,d|0):0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function ip(a,b){a=a|0;b=b|0;var d=0;d=(c[a+92>>2]|0)+4|0;c[d>>2]=c[b>>2];c[d+4>>2]=c[b+4>>2];c[d+8>>2]=c[b+8>>2];c[d+12>>2]=c[b+12>>2];jj(a);return}function jp(b,d){b=b|0;d=d|0;var e=0;if(a[b+273>>0]|0?(e=c[b+200>>2]|0,e|0):0){c[6473]=(c[6473]|0)+1;nd(c[e+-4>>2]|0)}a[b+273>>0]=0;c[b+200>>2]=d;c[(c[b+196>>2]|0)+8>>2]=d;return}function kp(b){b=b|0;var d=0;c[b>>2]=5324;d=c[b+20>>2]|0;if(d|0){if(a[b+24>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+20>>2]=0}a[b+24>>0]=1;c[b+20>>2]=0;c[b+12>>2]=0;c[b+16>>2]=0;return}function lp(a,b){a=a|0;b=+b;c[a+8>>2]=0;c[a+12>>2]=1065353216;c[a+16>>2]=1065353216;c[a+20>>2]=1065353216;g[a+24>>2]=0.0;g[a+44>>2]=.03999999910593033;c[a>>2]=6864;c[a+4>>2]=8;LF(a+28|0,b);g[a+44>>2]=b;return}function mp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;a=c[b>>2]|0;a=sb[c[(c[a>>2]|0)+56>>2]&31](a,8)|0;c[a+4>>2]=c[b>>2];c[a>>2]=9420;return a|0}function np(b){b=b|0;var d=0;c[b>>2]=8840;d=c[b+16>>2]|0;if(d|0){if(a[b+20>>0]|0){c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0)}c[b+16>>2]=0}a[b+20>>0]=1;c[b+16>>2]=0;c[b+8>>2]=0;c[b+12>>2]=0;return}function op(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0;f=l;l=l+16|0;g[f+12>>2]=b;g[f+8>>2]=c;g[f+4>>2]=d;g[f>>2]=e;Ar(a,f+12|0,f+8|0,f+4|0,f);l=f;return}function pp(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;a=c[b+8>>2]|0;b=c[a+284>>2]|0;Kb[c[(c[b>>2]|0)+40>>2]&127](b,a,c[d+8>>2]|0);return}function qp(b){b=b|0;var d=0,e=0;c[b>>2]=6196;if(!(a[b+8>>0]|0)){_H(b);return}d=c[b+12>>2]|0;if(!d){_H(b);return}e=c[b+4>>2]|0;Gb[c[(c[e>>2]|0)+16>>2]&127](e,d);_H(b);return}function rp(b){b=b|0;var d=0,e=0;c[b>>2]=9448;if(!(a[b+8>>0]|0)){_H(b);return}d=c[b+12>>2]|0;if(!d){_H(b);return}e=c[b+4>>2]|0;Gb[c[(c[e>>2]|0)+16>>2]&127](e,d);_H(b);return}function sp(b){b=b|0;var d=0,e=0;c[b>>2]=5672;if(!(a[b+8>>0]|0)){_H(b);return}d=c[b+12>>2]|0;if(!d){_H(b);return}e=c[b+4>>2]|0;Gb[c[(c[e>>2]|0)+16>>2]&127](e,d);_H(b);return}function tp(b){b=b|0;var d=0;c[b>>2]=6964;if(!(a[b+61>>0]|0))return;d=c[b+52>>2]|0;Ab[c[c[d>>2]>>2]&511](d);b=c[b+52>>2]|0;if(!b)return;c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function up(a,b,d){a=a|0;b=b|0;d=d|0;a=c[b+204>>2]|0;if(a&4|0){d=0;return d|0}b=c[d+204>>2]|0;if(b&4|0){d=0;return d|0}if(!(a&3)){d=1;return d|0}d=(b&3|0)==0;return d|0}function vp(b){b=b|0;var d=0,e=0,f=0;d=c[b>>2]|0;e=(a[d>>0]|0)+-48|0;if(e>>>0<10){f=d;d=0;do{d=e+(d*10|0)|0;f=f+1|0;c[b>>2]=f;e=(a[f>>0]|0)+-48|0}while(e>>>0<10)}else d=0;return d|0}function wp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;c[e>>2]=9012;c[e+4>>2]=b;Kb[c[(c[a>>2]|0)+48>>2]&127](a,e,d);l=e;return}function xp(b){b=b|0;var d=0,e=0;c[b>>2]=5768;if(!(a[b+8>>0]|0)){_H(b);return}d=c[b+12>>2]|0;if(!d){_H(b);return}e=c[b+4>>2]|0;Gb[c[(c[e>>2]|0)+16>>2]&127](e,d);_H(b);return}function yp(b,c,d){b=b|0;c=c|0;d=d|0;var e=0;if((c|0)<(b|0)&(b|0)<(c+d|0)){e=b;c=c+d|0;b=b+d|0;while((d|0)>0){b=b-1|0;c=c-1|0;d=d-1|0;a[b>>0]=a[c>>0]|0}b=e}else _h(b,c,d)|0;return b|0}function zp(){var a=0,b=0;b=l;l=l+32|0;a=Vr(112)|0;kt(b);eg(a,b);l=b;return a|0}function Ap(b){b=b|0;var d=0,e=0;c[b>>2]=6244;if(!(a[b+16>>0]|0)){_H(b);return}d=c[b+20>>2]|0;if(!d){_H(b);return}e=c[b+4>>2]|0;Gb[c[(c[e>>2]|0)+16>>2]&127](e,d);_H(b);return}function Bp(a,b){a=a|0;b=b|0;var c=0.0,d=0.0,e=0.0;e=+B(+(+g[b>>2]));d=+B(+(+g[b+4>>2]));c=+B(+(+g[b+8>>2]));g[a+12>>2]=e;g[a+16>>2]=d;g[a+20>>2]=c;g[a+24>>2]=0.0;return}function Cp(a,b){a=a|0;b=b|0;If(a,c[b+36>>2]|0);return}function Dp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if(GC(a,c[b+8>>2]|0)|0)Rm(b,d,e);return}function Ep(a){a=a|0;var b=0;c[a>>2]=5748;b=c[a+48>>2]|0;Gb[c[(c[b>>2]|0)+20>>2]&127](b,c[a+64>>2]|0);b=c[a+48>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,c[a+64>>2]|0);_H(a);return}function Fp(a,b,c,d,e,f,g,h,i,j,k,l,m){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=+i;j=+j;k=k|0;l=+l;m=m|0;Pb[a&0](b|0,c|0,d|0,e|0,+f,+g,+h,+i,+j,k|0,+l,m|0)}function Gp(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;g[a>>2]=(1.0-d)*+g[b>>2]+ +g[c>>2]*d;g[a+4>>2]=(1.0-d)*+g[b+4>>2]+ +g[c+4>>2]*d;g[a+8>>2]=(1.0-d)*+g[b+8>>2]+ +g[c+8>>2]*d;return}function Hp(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i=l;l=l+16|0;g[i+8>>2]=b+e;g[i+4>>2]=c+f;g[i>>2]=d+h;ps(a,i+8|0,i+4|0,i);l=i;return}function Ip(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i=l;l=l+16|0;g[i+8>>2]=b*e;g[i+4>>2]=c*f;g[i>>2]=d*h;ps(a,i+8|0,i+4|0,i);l=i;return}function Jp(a,b,c,d,e,f,h){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;h=+h;var i=0;i=l;l=l+16|0;g[i+8>>2]=b-e;g[i+4>>2]=c-f;g[i>>2]=d-h;ps(a,i+8|0,i+4|0,i);l=i;return}function Kp(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+16|0;g[c+8>>2]=-+g[b>>2];g[c+4>>2]=-+g[b+4>>2];g[c>>2]=-+g[b+8>>2];yv(a,c+8|0,c+4|0,c,b+12|0);l=c;return}function Lp(a){a=a|0;var b=0;c[a>>2]=7316;b=c[a+52>>2]|0;if(!b)return;Ab[c[c[b>>2]>>2]&511](b);b=c[a+52>>2]|0;if(!b)return;c[6473]=(c[6473]|0)+1;nd(c[b+-4>>2]|0);return}function Mp(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;return +(+Xa(0,a|0,b|0,c|0,d|0,e|0,f|0,g|0,h|0))}function Np(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;if(!((b|0)==0&(c|0)==0))do{e=e+-1|0;a[e>>0]=d[20115+(b&15)>>0]|0|f;b=$t(b|0,c|0,4)|0;c=z}while(!((b|0)==0&(c|0)==0));return e|0}function Op(a){a=a|0;var b=0;c[a>>2]=5748;b=c[a+48>>2]|0;Gb[c[(c[b>>2]|0)+20>>2]&127](b,c[a+64>>2]|0);b=c[a+48>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,c[a+64>>2]|0);return}function Pp(){var b=0;b=Vr(40)|0;g[b+12>>2]=1.0;c[b+8>>2]=0;c[b+4>>2]=5;c[b>>2]=3140;a[b+36>>0]=1;c[b+32>>2]=0;c[b+24>>2]=0;c[b+28>>2]=0;a[b+16>>0]=1;return b|0}function Qp(b){b=b|0;var c=0;c=a[n+(b&255)>>0]|0;if((c|0)<8)return c|0;c=a[n+(b>>8&255)>>0]|0;if((c|0)<8)return c+8|0;c=a[n+(b>>16&255)>>0]|0;if((c|0)<8)return c+16|0;return (a[n+(b>>>24)>>0]|0)+24|0}function Rp(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;Ip(e,b,c,d,+g[a+348>>2],+g[a+352>>2],+g[a+356>>2]);Or(a+412|0,e)|0;l=e;return}function Sp(a,b,c){a=+a;b=+b;c=+c;var d=0,e=0;e=l;l=l+16|0;g[e+8>>2]=a;g[e+4>>2]=b;g[e>>2]=c;d=dt()|0;ps(d,e+8|0,e+4|0,e);l=e;return d|0}function Tp(a,b){a=a|0;b=b|0;c[a+12>>2]=c[b>>2];c[a+12+4>>2]=c[b+4>>2];c[a+12+8>>2]=c[b+8>>2];c[a+12+12>>2]=c[b+12>>2];jj(a);return}function Up(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return yb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)|0}function Vp(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;return sb[c[(c[a>>2]|0)+8>>2]&31](a,b)|0}function Wp(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;Ip(e,b,c,d,+g[a+544>>2],+g[a+548>>2],+g[a+552>>2]);Or(a+428|0,e)|0;l=e;return}function Xp(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;return +pb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function Yp(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=Is()|0;re(h,a,b,c,d,e,f,g);return h|0}function Zp(){var a=0,b=0;b=Nr()|0;if((b|0?(a=c[b>>2]|0,a|0):0)?((c[a+48>>2]&-256|0)==1126902528?(c[a+48+4>>2]|0)==1129074247:0):0)Bx(c[a+12>>2]|0);Bx(tE()|0)}function _p(a,b,d){a=a|0;b=b|0;d=d|0;pz(a,b);c[a+48>>2]=c[d>>2];c[a+48+4>>2]=c[d+4>>2];c[a+48+8>>2]=c[d+8>>2];c[a+48+12>>2]=c[d+12>>2];return}function $p(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+328>>2]=c[b>>2];c[a+328+4>>2]=c[b+4>>2];c[a+328+8>>2]=c[b+8>>2];c[a+328+12>>2]=c[b+12>>2];return}function aq(){var a=0,b=0;b=l;l=l+32|0;a=Vr(92)|0;kt(b);Yd(a,b);l=b;return a|0}function bq(a,b,d){a=a|0;b=b|0;d=d|0;c[d>>2]=c[a+56+(b<<4)>>2];c[d+4>>2]=c[a+56+(b<<4)+4>>2];c[d+8>>2]=c[a+56+(b<<4)+8>>2];c[d+12>>2]=c[a+56+(b<<4)+12>>2];return}function cq(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+312>>2]=c[b>>2];c[a+312+4>>2]=c[b+4>>2];c[a+312+8>>2]=c[b+8>>2];c[a+312+12>>2]=c[b+12>>2];return}function dq(b,d){b=b|0;d=d|0;if(!(a[22680]|0))Yy(22680)|0;b=ZF(b,d)|0;c[5780]=c[b>>2];c[5781]=c[b+4>>2];c[5782]=c[b+8>>2];c[5783]=c[b+12>>2];return 23120}function eq(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+544>>2]=c[b>>2];c[a+544+4>>2]=c[b+4>>2];c[a+544+8>>2]=c[b+8>>2];c[a+544+12>>2]=c[b+12>>2];return}function fq(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;g=+g;h=+h;i=+i;j=j|0;k=k|0;l=+l;Qb[a&0](b|0,c|0,d|0,e|0,+f,+g,+h,+i,j|0,k|0,+l)}function gq(a){a=a|0;var b=0.0,d=0.0;d=+g[a+32>>2];+gb[c[(c[a>>2]|0)+48>>2]&15](a);b=+gb[c[(c[a>>2]|0)+48>>2]&15](a);+gb[c[(c[a>>2]|0)+48>>2]&15](a);return +(d+b)}function hq(a){a=a|0;var b=0.0,d=0.0;d=+g[a+28>>2];b=+gb[c[(c[a>>2]|0)+48>>2]&15](a);+gb[c[(c[a>>2]|0)+48>>2]&15](a);+gb[c[(c[a>>2]|0)+48>>2]&15](a);return +(d+b)}function iq(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;Wb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0,k|0)}function jq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=l;l=l+16|0;c[e>>2]=c[d>>2];a=ub[c[(c[a>>2]|0)+16>>2]&63](a,b,e)|0;if(a)c[d>>2]=c[e>>2];l=e;return a&1|0}function kq(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;var f=0;f=l;l=l+16|0;g[f+8>>2]=b*e;g[f+4>>2]=c*e;g[f>>2]=d*e;ps(a,f+8|0,f+4|0,f);l=f;return}function lq(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]*+g[b>>2];g[a+4>>2]=+g[a+4>>2]*+g[b>>2];g[a+8>>2]=+g[a+8>>2]*+g[b>>2];g[a+12>>2]=+g[a+12>>2]*+g[b>>2];return a|0}function mq(){var a=0;a=Vr(8)|0;c[6471]=a;Za(a|0,0)|0;c[6461]=19594;c[6462]=0;c[6463]=0;c[6464]=0;c[6465]=0;c[6466]=0;c[6467]=0;c[6468]=0;c[6469]=0;or(25844);return}function nq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;dp(a,b,c,d,e,f,g,h,i,j);return}function oq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=js(324)|0;Sd(d,a,b,c);return d|0}function pq(b){b=b|0;var d=0;c[b>>2]=3140;d=c[b+32>>2]|0;if(!d){_H(b);return}if(!(a[b+36>>0]|0)){_H(b);return}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);_H(b);return}function qq(a,b,d){a=a|0;b=b|0;d=d|0;xm(a,b);c[a+48>>2]=c[d>>2];c[a+48+4>>2]=c[d+4>>2];c[a+48+8>>2]=c[d+8>>2];c[a+48+12>>2]=c[d+12>>2];return}function rq(b){b=b|0;var d=0;c[b>>2]=6196;if(!(a[b+8>>0]|0))return;d=c[b+12>>2]|0;if(!d)return;b=c[b+4>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,d);return}function sq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(b|0))break;am(d+(e*96|0)|0,(c[a+12>>2]|0)+(e*96|0)|0);e=e+1|0}return}function tq(b){b=b|0;var d=0;c[b>>2]=5324;d=c[b+20>>2]|0;if(!d){_H(b);return}if(!(a[b+24>>0]|0)){_H(b);return}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);_H(b);return}function uq(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+128|0;Tn(c,a+68|0);ep(c+64|0,c,a+4|0);Sq(b,c+64|0);l=c;return}function vq(b){b=b|0;var d=0;c[b>>2]=9448;if(!(a[b+8>>0]|0))return;d=c[b+12>>2]|0;if(!d)return;b=c[b+4>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,d);return}function wq(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0;g=Is()|0;re(g,a,b,c,d,e,f,0);return g|0}function xq(b){b=b|0;var d=0;c[b>>2]=5672;if(!(a[b+8>>0]|0))return;d=c[b+12>>2]|0;if(!d)return;b=c[b+4>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,d);return}function yq(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;return ((c[b>>2]|0)==(a|0)?1:(c[b+4>>2]|0)==(a|0))|0}function zq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=ss()|0;ve(f,a,b,c,d,e);return f|0}function Aq(a,b){a=a|0;b=b|0;a=c[a+20>>2]|0;return sb[c[(c[a>>2]|0)+8>>2]&31](a,b)|0}function Bq(b){b=b|0;var d=0;c[b>>2]=8840;d=c[b+16>>2]|0;if(!d){_H(b);return}if(!(a[b+20>>0]|0)){_H(b);return}c[6473]=(c[6473]|0)+1;nd(c[d+-4>>2]|0);_H(b);return}function Cq(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;g[e+8>>2]=b;g[e+4>>2]=c;g[e>>2]=d;ps(a,e+8|0,e+4|0,e);l=e;return}function Dq(b){b=b|0;var d=0;c[b>>2]=5768;if(!(a[b+8>>0]|0))return;d=c[b+12>>2]|0;if(!d)return;b=c[b+4>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,d);return}function Eq(a,b,d){a=a|0;b=b|0;d=d|0;PG(a);c[a>>2]=3024;Sq(a+4|0,b);Sq(a+68|0,d);Sq(a+132|0,b);c[a+196>>2]=0;return}function Fq(b){b=b|0;var d=0;c[b>>2]=6244;if(!(a[b+16>>0]|0))return;d=c[b+20>>2]|0;if(!d)return;b=c[b+4>>2]|0;Gb[c[(c[b>>2]|0)+16>>2]&127](b,d);return}function Gq(a){a=a|0;var b=0;b=l;l=l+16|0;gn(a);g[b+8>>2]=0.0;g[b+4>>2]=0.0;g[b>>2]=0.0;ps(a+48|0,b+8|0,b+4|0,b);l=b;return}function Hq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return xb[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)|0}function Iq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;var f=0;f=Vr(44)|0;pm(f,a,b,c,d,e);return f|0}function Jq(a,b,c){a=a|0;b=b|0;c=+c;switch(b|0){case 3:{b=a+452|0;break}case 4:{b=a+448|0;break}case 5:{b=a+444|0;break}default:return}g[b>>2]=c;return}function Kq(a,b){a=a|0;b=b|0;var c=0;c=0;while(1){if((c|0)==3)break;g[a+868+(c<<6)+4>>2]=+Gs(+g[(bI(b)|0)+(c<<2)>>2]);c=c+1|0}return}function Lq(a,b){a=a|0;b=b|0;b=c[b+36>>2]|0;Fe(a,c[(c[(c[(c[a+4>>2]|0)+4>>2]|0)+24>>2]|0)+(b*80|0)+64>>2]|0,b);return}function Mq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;return +ob[a&3](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function Nq(a,b){a=a|0;b=b|0;var c=0;c=0;while(1){if((c|0)==3)break;g[a+868+(c<<6)>>2]=+Gs(+g[(bI(b)|0)+(c<<2)>>2]);c=c+1|0}return}function Oq(a,b,c,d){a=+a;b=b|0;c=c|0;d=d|0;var e=0;e=Vr(140)|0;Vk(e,a,b,c,d);return e|0}function Pq(a,b,d,e,f,g,h,i){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return +(+nb[c[(c[a>>2]|0)+12>>2]&1](a,b,d,e,f,g,h,i))}function Qq(b,c,d){b=b|0;c=c|0;d=d|0;if(!((b|0)==0&(c|0)==0))do{d=d+-1|0;a[d>>0]=b&7|48;b=$t(b|0,c|0,3)|0;c=z}while(!((b|0)==0&(c|0)==0));return d|0}function Rq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=0;while(1){if((e|0)>=(b|0))break;c[d+(e<<2)>>2]=c[(c[a+12>>2]|0)+(e<<2)>>2];e=e+1|0}return}function Sq(a,b){a=a|0;b=b|0;xm(a,b);c[a+48>>2]=c[b+48>>2];c[a+48+4>>2]=c[b+48+4>>2];c[a+48+8>>2]=c[b+48+8>>2];c[a+48+12>>2]=c[b+48+12>>2];return}function Tq(a,b){a=a|0;b=b|0;ps(a,b,b+16|0,b+32|0);ps(a+16|0,b+4|0,b+20|0,b+36|0);ps(a+32|0,b+8|0,b+24|0,b+40|0);return}function Uq(a){a=a|0;c[6472]=(c[6472]|0)+1;a=ic((a<<2|3)+16|0)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Vq(a,b){a=a|0;b=b|0;Ab[c[(c[b>>2]|0)+32>>2]&511](b);cd(a,b);Ab[c[(c[b>>2]|0)+36>>2]&511](b);return}function Wq(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;Vb[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0,j|0)}function Xq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Kb[c[(c[a>>2]|0)+108>>2]&127](a,b,d);Kb[c[(c[a>>2]|0)+108>>2]&127](a,(b+1|0)%3|0,e);return}function Yq(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;var e=0;e=l;l=l+16|0;g[e+8>>2]=-b;g[e+4>>2]=-c;g[e>>2]=-d;ps(a,e+8|0,e+4|0,e);l=e;return}function Zq(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;var f=0;f=xs()|0;$d(f,a,b,c&65535,d,e);return f|0}function _q(a){a=a|0;c[6472]=(c[6472]|0)+1;a=ic((a*104|3)+16|0)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function $q(a,b){a=a|0;b=b|0;c[a+12>>2]=c[b>>2];c[a+12+4>>2]=c[b+4>>2];c[a+12+8>>2]=c[b+8>>2];c[a+12+12>>2]=c[b+12>>2];return}function ar(a,b){a=a|0;b=b|0;c[a+44>>2]=c[b>>2];c[a+44+4>>2]=c[b+4>>2];c[a+44+8>>2]=c[b+8>>2];c[a+44+12>>2]=c[b+12>>2];return}function br(a,c){a=a|0;c=c|0;if(!((b[c+4>>1]&b[a+6>>1])<<16>>16)){a=0;return a|0}a=(b[a+4>>1]&b[c+6>>1])<<16>>16!=0;return a|0}function cr(a,c){a=a|0;c=c|0;if(!((b[c+4>>1]&b[a+10>>1])<<16>>16)){a=0;return a|0}a=(b[a+8>>1]&b[c+6>>1])<<16>>16!=0;return a|0}function dr(a,b){a=a|0;b=b|0;c[a+696>>2]=c[b>>2];c[a+696+4>>2]=c[b+4>>2];c[a+696+8>>2]=c[b+8>>2];c[a+696+12>>2]=c[b+12>>2];return}function er(a,b){a=a|0;b=b|0;c[a+680>>2]=c[b>>2];c[a+680+4>>2]=c[b+4>>2];c[a+680+8>>2]=c[b+8>>2];c[a+680+12>>2]=c[b+12>>2];return}function fr(a,b){a=a|0;b=b|0;c[a+60>>2]=c[b>>2];c[a+60+4>>2]=c[b+4>>2];c[a+60+8>>2]=c[b+8>>2];c[a+60+12>>2]=c[b+12>>2];return}function gr(a,b){a=a|0;b=b|0;c[a+28>>2]=c[b>>2];c[a+28+4>>2]=c[b+4>>2];c[a+28+8>>2]=c[b+8>>2];c[a+28+12>>2]=c[b+12>>2];return}function hr(a,b){a=a|0;b=b|0;c[a+156>>2]=c[b>>2];c[a+156+4>>2]=c[b+4>>2];c[a+156+8>>2]=c[b+8>>2];c[a+156+12>>2]=c[b+12>>2];return}function ir(b,c,d){b=b|0;c=c|0;d=d|0;a[b+1309+c>>0]=d&1;if((c|0)<3){a[b+788+c>>0]=d&1;return}else{a[b+868+(c+-3<<6)+44>>0]=d&1;return}}function jr(a,c){a=a|0;c=c|0;if(!((b[c+4>>1]&b[a+14>>1])<<16>>16)){a=0;return a|0}a=(b[a+12>>1]&b[c+6>>1])<<16>>16!=0;return a|0}function kr(a,b){a=a|0;b=b|0;c[a+108>>2]=c[b>>2];c[a+108+4>>2]=c[b+4>>2];c[a+108+8>>2]=c[b+8>>2];c[a+108+12>>2]=c[b+12>>2];return}function lr(b){b=b|0;if(a[22720]|0)return 23280;if(!(Yy(22720)|0))return 23280;c[5820]=1065353216;c[5821]=1065353216;c[5822]=1065353216;g[5823]=0.0;return 23280}function mr(a){a=a|0;c[6472]=(c[6472]|0)+1;a=ic(a*96|19)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function nr(a,b){a=a|0;b=b|0;c[a+20>>2]=c[b>>2];c[a+20+4>>2]=c[b+4>>2];c[a+20+8>>2]=c[b+8>>2];c[a+20+12>>2]=c[b+12>>2];return}function or(a){a=a|0;var b=0;do{c[a+4>>2]=0;g[a+8>>2]=0.0;b=c[a+24>>2]|0;if(b|0)or(b);a=c[a+28>>2]|0}while((a|0)!=0);return}function pr(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;zd(a,b,c,d,e,f);return}function qr(a,b){a=a|0;b=b|0;c[a+172>>2]=c[b>>2];c[a+172+4>>2]=c[b+4>>2];c[a+172+8>>2]=c[b+8>>2];c[a+172+12>>2]=c[b+12>>2];return}function rr(a,b){a=a|0;b=b|0;c[a+32>>2]=c[b>>2];c[a+32+4>>2]=c[b+4>>2];c[a+32+8>>2]=c[b+8>>2];c[a+32+12>>2]=c[b+12>>2];return}function sr(a){a=a|0;g[a>>2]=5.880000114440918;g[a+4>>2]=.8299999833106995;g[a+8>>2]=.8799999952316284;g[a+12>>2]=500.0;g[a+16>>2]=10.5;g[a+20>>2]=6.0e3;return}function tr(a,b){a=a|0;b=b|0;c[a+24>>2]=c[b>>2];c[a+24+4>>2]=c[b+4>>2];c[a+24+8>>2]=c[b+8>>2];c[a+24+12>>2]=c[b+12>>2];return}function ur(a,b){a=a|0;b=b|0;c[a+316>>2]=c[b>>2];c[a+316+4>>2]=c[b+4>>2];c[a+316+8>>2]=c[b+8>>2];c[a+316+12>>2]=c[b+12>>2];return}function vr(a,b){a=a|0;b=b|0;c[a+300>>2]=c[b>>2];c[a+300+4>>2]=c[b+4>>2];c[a+300+8>>2]=c[b+8>>2];c[a+300+12>>2]=c[b+12>>2];return}function wr(a,b){a=a|0;b=b|0;c[a+64>>2]=c[b>>2];c[a+64+4>>2]=c[b+4>>2];c[a+64+8>>2]=c[b+8>>2];c[a+64+12>>2]=c[b+12>>2];return}function xr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=xs()|0;$d(e,a,b,c&65535,d,0);return e|0}function yr(a,b){a=a|0;b=b|0;c[a+52>>2]=c[b>>2];c[a+52+4>>2]=c[b+4>>2];c[a+52+8>>2]=c[b+8>>2];c[a+52+12>>2]=c[b+12>>2];return}function zr(a,b){a=a|0;b=b|0;c[a+188>>2]=c[b>>2];c[a+188+4>>2]=c[b+4>>2];c[a+188+8>>2]=c[b+8>>2];c[a+188+12>>2]=c[b+12>>2];return}function Ar(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[d>>2];c[a+8>>2]=c[e>>2];c[a+12>>2]=c[f>>2];return}function Br(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return +nb[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0,i|0)}function Cr(a,b){a=a|0;b=b|0;c[a+16>>2]=c[b>>2];c[a+16+4>>2]=c[b+4>>2];c[a+16+8>>2]=c[b+8>>2];c[a+16+12>>2]=c[b+12>>2];return}function Dr(a,b,d){a=a|0;b=b|0;d=+d;Gb[c[(c[a>>2]|0)+32>>2]&127](a,b);Hb[c[(c[a>>2]|0)+36>>2]&7](a,b,d);return}function Er(a,b){a=a|0;b=b|0;c[a+68>>2]=c[b>>2];c[a+68+4>>2]=c[b+4>>2];c[a+68+8>>2]=c[b+8>>2];c[a+68+12>>2]=c[b+12>>2];return}function Fr(a,b){a=a|0;b=b|0;c[a+36>>2]=c[b>>2];c[a+36+4>>2]=c[b+4>>2];c[a+36+8>>2]=c[b+8>>2];c[a+36+12>>2]=c[b+12>>2];return}function Gr(a,b){a=a|0;b=b|0;c[a>>2]=c[b+248>>2];c[a+4>>2]=c[b+248+4>>2];c[a+8>>2]=c[b+248+8>>2];c[a+12>>2]=c[b+248+12>>2];return}function Hr(b,d){b=b|0;d=d|0;if(!(a[22640]|0))Yy(22640)|0;an(kB(c[b+12>>2]|0,d)|0);return 22880}function Ir(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=ss()|0;Nd(d,a,b,c);return d|0}function Jr(){var a=0;a=Cs()|0;In();In();Eq(a,23008,23008);return a|0}function Kr(a,b,d){a=a|0;b=b|0;d=d|0;if((c[a+4>>2]|0)==(b|0)?(c[a+28>>2]|0)!=1:0)c[a+28>>2]=d;return}function Lr(){var a=0,b=0;b=rs(c[5698]|0,c[5699]|0,1284865837,1481765933)|0;b=cw(b|0,z|0,1,0)|0;a=z;c[5698]=b;c[5699]=a;a=$t(b|0,a|0,33)|0;return a|0}function Mr(a,b){a=a|0;b=b|0;c[a+48>>2]=c[b>>2];c[a+48+4>>2]=c[b+4>>2];c[a+48+8>>2]=c[b+8>>2];c[a+48+12>>2]=c[b+12>>2];return}function Nr(){var a=0,b=0;a=l;l=l+16|0;if(!(cb(26460,3)|0)){b=ab(c[6616]|0)|0;l=a;return b|0}else jw(22300,a);return 0}function Or(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]+ +g[b>>2];g[a+4>>2]=+g[a+4>>2]+ +g[b+4>>2];g[a+8>>2]=+g[a+8>>2]+ +g[b+8>>2];return a|0}function Pr(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]-+g[b>>2];g[a+4>>2]=+g[a+4>>2]-+g[b+4>>2];g[a+8>>2]=+g[a+8>>2]-+g[b+8>>2];return a|0}function Qr(a,b){a=a|0;b=b|0;var c=0;c=l;l=l+64|0;ep(c,b,a+68|0);Sq(a+4|0,c);l=c;return}function Rr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=l;l=l+16|0;Ne(a,b,d,e,f|0)|0;l=f;return (z=c[f+4>>2]|0,c[f>>2]|0)|0}function Sr(a){a=a|0;var b=0;b=Vr(112)|0;eg(b,a);return b|0}function Tr(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=xs()|0;$d(d,a,b,c&65535,0,0);return d|0}function Ur(a,b){a=a|0;b=b|0;c[a+76>>2]=c[b>>2];c[a+76+4>>2]=c[b+4>>2];c[a+76+8>>2]=c[b+8>>2];c[a+76+12>>2]=c[b+12>>2];return}function Vr(a){a=a|0;var b=0;b=(a|0)==0?1:a;while(1){a=ic(b)|0;if(a|0)break;a=lE()|0;if(!a){a=0;break}zb[a&3]()}return a|0}function Wr(a,b){a=a|0;b=b|0;c[a+4>>2]=c[b>>2];c[a+4+4>>2]=c[b+4>>2];c[a+4+8>>2]=c[b+8>>2];c[a+4+12>>2]=c[b+12>>2];return}function Xr(a,b){a=a|0;b=b|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[b+4>>2];c[a+8>>2]=c[b+8>>2];c[a+12>>2]=c[b+12>>2];return}function Yr(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0;e=js(1252)|0;qc(e,a,b,c,d);return e|0}function Zr(a,b){a=a|0;b=b|0;c[a+40>>2]=c[b>>2];c[a+40+4>>2]=c[b+4>>2];c[a+40+8>>2]=c[b+8>>2];c[a+40+12>>2]=c[b+12>>2];return}function _r(a,b){a=a|0;b=b|0;c[a+72>>2]=c[b>>2];c[a+72+4>>2]=c[b+4>>2];c[a+72+8>>2]=c[b+8>>2];c[a+72+12>>2]=c[b+12>>2];return}function $r(a,b){a=a|0;b=b|0;c[a+56>>2]=c[b>>2];c[a+56+4>>2]=c[b+4>>2];c[a+56+8>>2]=c[b+8>>2];c[a+56+12>>2]=c[b+12>>2];return}function as(a,b){a=a|0;b=b|0;g[a>>2]=+g[a>>2]*+g[b>>2];g[a+4>>2]=+g[a+4>>2]*+g[b>>2];g[a+8>>2]=+g[a+8>>2]*+g[b>>2];return a|0}function bs(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;g[a+(c[b+52>>2]<<2)>>2]=1.0;return}function cs(a){a=a|0;var b=0;b=l;l=l+16|0;nd(a);if(!(db(c[6616]|0,0)|0)){l=b;return}else jw(22399,b)}function ds(a,b){a=a|0;b=b|0;c[a+8>>2]=c[b>>2];c[a+8+4>>2]=c[b+4>>2];c[a+8+8>>2]=c[b+8>>2];c[a+8+12>>2]=c[b+12>>2];return}function es(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(215)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function fs(a,b,c){a=a|0;b=b|0;c=c|0;var d=0;d=Zs()|0;Me(d,a,b,c);return d|0}function gs(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return _b(b,c,d,e)|0}function hs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(203)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function is(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(1407)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function js(a){a=a|0;c[6472]=(c[6472]|0)+1;a=ic(a+19|0)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function ks(a){a=a|0;var b=0;b=Cs()|0;In();Eq(b,a,23008);return b|0}function ls(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(191)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function ms(a,b){a=a|0;b=b|0;if(!b?c[a+204>>2]&3|0:0)return;if((c[a+216>>2]&-2|0)!=4)c[a+216>>2]=1;g[a+220>>2]=0.0;return}function ns(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a+-4>>2]|0)+8>>2]&127](a+-4|0,b,d,e);return}function os(a,b){a=a|0;b=b|0;var c=0.0;c=+HE(a);c=+RH(c*+HE(b));return +(+fA(+Vo(a,b)/c))}function ps(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a>>2]=c[b>>2];c[a+4>>2]=c[d>>2];c[a+8>>2]=c[e>>2];g[a+12>>2]=0.0;return}function qs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(143)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function rs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0;e=Zo(a,c)|0;f=z;return (z=(O(b,c)|0)+(O(d,a)|0)+f|f&0,e|0|0)|0}function ss(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(1331)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function ts(b){b=b|0;var d=0;d=c[b+12>>2]|0;if(!d)return;if(a[b+16>>0]&1)Px(d);c[b+12>>2]=0;return}function us(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;Ub[a&1](b|0,c|0,d|0,e|0,f|0,g|0,h|0)}function vs(a){a=a|0;c[a>>2]=3784;c[a+12>>2]=3996;Rf(a+12|0);Zi(a+72|0);_H(a);return}function ws(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(379)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function xs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(135)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function ys(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return}function zs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(627)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function As(a,b){a=a|0;b=b|0;var c=0;c=xs()|0;$d(c,a,b,16384,0,0);return c|0}function Bs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(791)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Cs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(219)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Ds(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(1147)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Es(a,b){a=a|0;b=b|0;var c=0;c=Vr(80)|0;Km(c,a,b);return c|0}function Fs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(103)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Gs(a){a=+a;a=+WG(a);if(a<-3.1415927410125732){a=a+6.2831854820251465;return +a}if(!(a>3.1415927410125732))return +a;a=a+-6.2831854820251465;return +a}function Hs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(115)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Is(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(783)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Js(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(131)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Ks(a,b){a=a|0;b=b|0;c[a+348>>2]=c[b>>2];c[a+348+4>>2]=c[b+4>>2];c[a+348+8>>2]=c[b+8>>2];return}function Ls(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((d|0)<=0)return;Nk(c|0,0,d<<4|0)|0;return}function Ms(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(111)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Ns(a,b){a=a|0;b=b|0;c[a+480>>2]=b;if(!b)return;Gb[c[(c[b>>2]|0)+8>>2]&127](b,a+4|0);return}function Os(a,b){a=a|0;b=b|0;var c=0;c=Zs()|0;Me(c,a,b,1);return c|0}function Ps(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;e=c[a+192>>2]|0;Nb[c[(c[e>>2]|0)+8>>2]&127](e,a+4|0,b,d);return}function Qs(a){a=a|0;var b=0;b=Vr(92)|0;Yd(b,a);return b|0}function Rs(a,b){a=a|0;b=b|0;c[a>>2]=1065353216;c[a+4>>2]=1065353216;c[a+8>>2]=1065353216;g[a+12>>2]=0.0;return}function Ss(b){b=b|0;if(!(qb[c[(c[b>>2]|0)+40>>2]&127](b)|0))return;c[b+16>>2]=c[b+28>>2];a[b+169>>0]=1;return}function Ts(a){a=a|0;var b=0;b=l;l=l+16|0;c[b>>2]=bI(c[a+60>>2]|0)|0;a=aC(Va(6,b|0)|0)|0;l=b;return a|0}function Us(a,b){a=a|0;b=b|0;var d=0;d=c[a+8>>2]|0;Kb[c[d+60>>2]&127](b,d,c[a+4>>2]|0);return 0}function Vs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(71)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function Ws(a,b){a=a|0;b=b|0;var d=0;d=a+92|0;do{c[a>>2]=c[b>>2];a=a+4|0;b=b+4|0}while((a|0)<(d|0));return}function Xs(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Bg(a,b,c,d);return}function Ys(a){a=a|0;if(!a){a=0;return a|0}a=Uq(a)|0;return a|0}function Zs(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(95)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function _s(a,b){a=a|0;b=b|0;return +(+Sx(+g[a>>2],+g[a+4>>2],+g[a+8>>2],+g[b>>2],+g[b+4>>2],+g[b+8>>2]))}function $s(a,b){a=a|0;b=b|0;var c=0;c=Vr(84)|0;Um(c,a,b);return c|0}function at(a,b,d){a=a|0;b=b|0;d=d|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=0;c[a+12>>2]=0;return}function bt(a){a=a|0;c[a>>2]=3784;c[a+12>>2]=3996;Rf(a+12|0);Zi(a+72|0);return}function ct(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(75)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function dt(){var a=0;c[6472]=(c[6472]|0)+1;a=ic(35)|0;if(!a){a=0;return a|0}c[(a+4+15&-16)+-4>>2]=a;a=a+4+15&-16;return a|0}function et(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;return wb[a&3](b|0,c|0,d|0,e|0,f|0,g|0)|0}function ft(a){a=a|0;ag(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function gt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a>>2]|0)+8>>2]&127](a,b,d,e);return}function ht(a){a=a|0;c[a>>2]=2944;g[a+4>>2]=1.0;c[a+8>>2]=0;b[a+12>>1]=1;b[a+14>>1]=-1;c[a+16>>2]=0;return}function it(a){a=a|0;var b=0;b=ct()|0;Ph(b,a);c[b>>2]=8540;c[b+52>>2]=2;return b|0}function jt(a){a=a|0;var b=0;b=ct()|0;Ph(b,a);c[b>>2]=8436;c[b+52>>2]=0;return b|0}function kt(a){a=a|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=4096;c[a+12>>2]=4096;c[a+16>>2]=0;c[a+20>>2]=1;return}function lt(a,b,d){a=a|0;b=b|0;d=d|0;le(c[a+116>>2]|0,c[a+144>>2]|0,b,d);return}function mt(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=b;a=lq(a,c)|0;l=c;return a|0}function nt(a,b){a=a|0;b=b|0;var c=0;c=Cs()|0;Eq(c,a,b);return c|0}function ot(a){a=a|0;if(!a){a=0;return a|0}a=mr(a)|0;return a|0}function pt(a,b,d){a=a|0;b=b|0;d=d|0;Kb[c[(c[b>>2]|0)+64>>2]&127](a,b,d);return}function qt(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 0.0}function rt(a,b,d){a=a|0;b=+b;d=d|0;c[d>>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;return}function st(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a>>2]|0)+80>>2]&127](a,b,d,e);return}function tt(a){a=a|0;if(!a){a=0;return a|0}a=_q(a)|0;return a|0}function ut(){var a=0;a=l;l=l+16|0;if(!(bb(26464,263)|0)){l=a;return}else jw(22349,a)}function vt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;return +kb[a&3](b|0,c|0,d|0,+e,f|0,g|0)}function wt(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=b;a=as(a,c)|0;l=c;return a|0}function xt(a){a=a|0;if(c[a+204>>2]&3|0)return;if((c[a+216>>2]&-2|0)!=4)c[a+216>>2]=1;g[a+220>>2]=0.0;return}function yt(a,b){a=a|0;b=b|0;Kn(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}function zt(){var a=0;a=Vr(8)|0;c[a>>2]=0;c[a+4>>2]=0;Iy(a);return a|0}function At(a,b){a=a|0;b=b|0;a=c[a+4>>2]|0;sb[c[(c[a>>2]|0)+8>>2]&31](a,c[b+36>>2]|0)|0;return}function Bt(a,b){a=a|0;b=b|0;Tq(a,b);ps(a+48|0,b+48|0,b+52|0,b+56|0);return}function Ct(a,b,d){a=a|0;b=b|0;d=d|0;Eg(c[a+116>>2]|0,b,d);return}function Dt(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;c[a+192>>2]=b;c[a+200>>2]=b;return}function Et(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;Tb[a&7](b|0,c|0,d|0,e|0,f|0,g|0)}function Ft(a,b,c,d,e,f,g,h,i,j,k,l){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=+h;i=+i;j=j|0;k=+k;l=l|0;S(35)}function Gt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a>>2]|0)+24>>2]&127](a,b,d,e);return}function Ht(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a>>2]|0)+88>>2]&127](a,b,d,e);return}function It(a,b,d){a=a|0;b=b|0;d=d|0;Kb[c[(c[b>>2]|0)+68>>2]&127](a,b,d);return}function Jt(b,d){b=b|0;d=d|0;b=(a[b+344>>0]|0)==0?3:0;c[d>>2]=b;c[d+4>>2]=b;return}function Kt(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=1.0/b;a=lq(a,c)|0;l=c;return a|0}function Lt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a>>2]|0)+36>>2]&127](a,b,d,e);return}function Mt(a,b,d){a=a|0;b=+b;d=d|0;return rb[c[(c[a>>2]|0)+52>>2]&1](a,b,d,.01666666753590107)|0}function Nt(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b<>>32-c;return a<>2]=0;c[d+4>>2]=0;c[d+8>>2]=0;c[d+12>>2]=0;return}function Pt(a,b){a=a|0;b=b|0;Xn(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}function Qt(a,b,d,e){a=a|0;b=+b;d=d|0;e=+e;return rb[c[(c[a>>2]|0)+52>>2]&1](a,b,d,e)|0}function Rt(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=0;c[a+8>>2]=1065353216;g[a+12>>2]=0.0;return}function St(a,b){a=a|0;b=b|0;c[a>>2]=1065353216;c[a+4>>2]=0;c[a+8>>2]=0;g[a+12>>2]=0.0;return}function Tt(a,b){a=a|0;b=b|0;c[a>>2]=0;c[a+4>>2]=1065353216;c[a+8>>2]=0;g[a+12>>2]=0.0;return}function Ut(a,b){a=a|0;b=b|0;Kb[c[(c[a>>2]|0)+8>>2]&127](a,b,c[(c[a+8>>2]|0)+48>>2]|0);return}function Vt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=+g;Sb[a&0](b|0,c|0,d|0,e|0,f|0,+g)}function Wt(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=f|0;g=g|0;Mb[a&0](b|0,c|0,d|0,+e,f|0,g|0)}function Xt(a,b){a=a|0;b=b|0;Yn(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}function Yt(a){a=a|0;xB(a+144|0);xB(a+124|0);xB(a+104|0);return}function Zt(b,d,e){b=b|0;d=d|0;e=+e;g[(c[b+720>>2]|0)+(d*104|0)+88>>2]=e>0.0?1.0/e:0.0;a[b+924>>0]=1;return}function _t(a,b,d){a=a|0;b=b|0;d=+d;Hb[c[(c[a>>2]|0)+20>>2]&7](a,b,d);return}function $t(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){z=b>>>c;return a>>>c|(b&(1<>>c-32|0}function au(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a>>2]|0)+124>>2]&127](a,e,b,d);return}function bu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[a+120>>2]=b;c[a+124>>2]=d;c[a+128>>2]=e;return}function cu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;vb[c[(c[a>>2]|0)+8>>2]&31](a,b,d,e)|0;return}function du(a,b){a=a|0;b=b|0;Rp(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}function eu(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;ps(a,b,d,e);c[a+12>>2]=c[f>>2];return}function fu(b,c,d,e){b=b|0;c=c|0;d=+d;e=+e;a[b+737>>0]=c&1;g[b+680>>2]=d;g[b+684>>2]=e;return}function gu(a,b){a=a|0;b=b|0;On(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}function hu(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=+d;e=+e;f=+f;Gn(a,b,c,d,e,f);return}function iu(a){a=a|0;Sj(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function ju(a){a=a|0;ul(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function ku(a,b,c,d,e,f,g){a=a|0;b=b|0;c=+c;d=+d;e=e|0;f=f|0;g=g|0;Db[a&0](b|0,+c,+d,e|0,f|0,g|0)}function lu(a,b,d){a=a|0;b=b|0;d=d|0;Nb[c[(c[a>>2]|0)+36>>2]&127](a,b,d,-3);return}function mu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return 1.0}function nu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return}function ou(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;S(18);return 0}function pu(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;Nb[c[(c[a>>2]|0)+32>>2]&127](a,b,d,e);return}function qu(a){a=a|0;Cg(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function ru(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;S(9);return 0.0}function su(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ki(a,b,c,d,e);return}function tu(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Qf(a,b,c,d,e);return}function uu(a){a=a|0;var b=0.0,c=0;c=+Vo(a,a)<0.0;b=+g[a+12>>2];return +(+fA(c?b:-b)*2.0)}function vu(a,b,d,e){a=a|0;b=b|0;d=+d;e=e|0;Ib[c[(c[a>>2]|0)+28>>2]&7](a,b,d,e);return}function wu(a,b){a=a|0;b=b|0;Je(a,b);return}function xu(a,b,c,d,e,f,g,h,i,j,k){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;f=+f;g=+g;h=+h;i=i|0;j=j|0;k=+k;S(36)}function yu(a,b){a=a|0;b=b|0;Eg(c[a+116>>2]|0,b,1);return}function zu(a,b){a=a|0;b=b|0;c[a+260>>2]=(c[a+260>>2]|0)+1;Sq(a+4|0,b);return}function Au(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;return +mb[a&15](b|0,c|0,d|0,e|0,f|0)}function Bu(a,b){a=a|0;b=b|0;var c=0;c=ls()|0;Sf(c,a,b);return c|0}function Cu(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Gi(c[b>>2]|0,c[b+4>>2]|0,a)|0;return (b|0?b:a)|0}function Du(a,b){a=a|0;b=b|0;Wp(a,+g[b>>2],+g[b+4>>2],+g[b+8>>2]);return}function Eu(a,b,d){a=a|0;b=b|0;d=d|0;Nb[c[(c[a>>2]|0)+36>>2]&127](a,b,d,-1);return}function Fu(a,b){a=a|0;b=+b;var c=0;c=l;l=l+16|0;g[c>>2]=1.0/b;as(a,c)|0;l=c;return}function Gu(a){a=a|0;c[a>>2]=3996;Rf(a);Zi(a+60|0);_H(a);return}function Hu(a,b){a=a|0;b=+b;return rb[c[(c[a>>2]|0)+52>>2]&1](a,b,1,.01666666753590107)|0}function Iu(a){a=a|0;var b=0;b=Vr(8)|0;Dv(b,a);return b|0}function Ju(a,b,d){a=a|0;b=b|0;d=d|0;Kb[c[(c[a>>2]|0)+56>>2]&127](a,b,d);return}function Ku(a,b,d){a=a|0;b=b|0;d=+d;Hb[c[(c[a>>2]|0)+36>>2]&7](a,b,d);return}function Lu(a){a=a|0;bi(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function Mu(a,b,c,d,e,f,g,h,i,j){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;S(42)}function Nu(a){a=a|0;ij(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function Ou(a,b,c,d,e){a=a|0;b=+b;c=+c;d=+d;e=+e;Gn(a,b,c,d,e,1.0);return}function Pu(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;return +ib[a&3](b|0,c|0,+d,e|0,f|0)}function Qu(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;fu(a,b,c,d);return}function Ru(a){a=a|0;c[a>>2]=8252;if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function Su(a,b){a=a|0;b=b|0;return c[(lB(c[a+24>>2]|0,b)|0)+64>>2]|0}function Tu(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;Rb[a&31](b|0,c|0,d|0,e|0,f|0)}function Uu(a){a=a|0;if(!(c[a+12>>2]|0)){a=0;return a|0}a=c[a+20>>2]|0;return a|0}function Vu(a){a=a|0;ts(a);Xv(a);return}function Wu(a){a=a|0;Wl(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function Xu(a,b){a=a|0;b=b|0;var c=0;c=Vr(64)|0;_p(c,a,b);return c|0}function Yu(){var a=0;a=Vr(24)|0;kt(a);return a|0}function Zu(a,b,d){a=a|0;b=b|0;d=+d;Bb[c[(c[a>>2]|0)+16>>2]&31](a,d);return}function _u(a,b,c){a=a|0;b=b|0;c=c|0;Vn(a,b,c);return}function $u(a,b){a=a|0;b=b|0;Nb[c[(c[a>>2]|0)+36>>2]&127](a,b,2,-3);return}function av(a,b,d){a=a|0;b=+b;d=d|0;Eb[c[(c[a>>2]|0)+32>>2]&15](a,b,d);return}function bv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;return}function cv(a){a=a|0;ci(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function dv(a){a=a|0;fi(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function ev(a,b,d){a=a|0;b=b|0;d=d|0;return +(+jb[c[(c[a>>2]|0)+32>>2]&15](a,b,d))}function fv(a,b){a=a|0;b=b|0;so(a,b);return}function gv(a,b){a=a|0;b=b|0;so(a,b);return}function hv(a,b){a=a|0;b=b|0;so(a,b);return}function iv(a,b){a=a|0;b=b|0;return c[(hD(c[a+276>>2]|0,b)|0)>>2]|0}function jv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;Ob[a&1](b|0,c|0,d|0,e|0,+f)}function kv(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;Jb[a&0](b|0,c|0,+d,e|0,f|0)}function lv(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;S(17);return 0}function mv(a){a=a|0;if(!(+g[a+16>>2]==0.0)){a=0;return a|0}a=+g[a+20>>2]==0.0;return a|0}function nv(a){a=a|0;c[a>>2]=3996;Rf(a);Zi(a+60|0);return}function ov(a){a=a|0;c[a>>2]=4572;if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function pv(a){a=a|0;c[a>>2]=5200;if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function qv(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;S(8);return 0.0}function rv(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+16>>2]&127](a,b);return}function sv(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+52>>2]&127](a,b);return}function tv(a,b,d){a=a|0;b=b|0;d=+d;Hb[c[(c[a>>2]|0)+8>>2]&7](a,b,d);return}function uv(a,b){a=a|0;b=b|0;Cz(a,b);return}function vv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Hc(a,b,c,d)|0;return 1}function wv(a){a=a|0;var b=0;b=((c[a+52>>2]|0)+2|0)%3|0;return +(+g[(bI(a+28|0)|0)+(b<<2)>>2])}function xv(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+68>>2]&127](a,b);return}function yv(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Ar(a,b,c,d,e);return}function zv(a){a=a|0;var b=0;b=ls()|0;Sf(b,a,1);return b|0}function Av(a,b,d){a=a|0;b=+b;d=d|0;g[(c[a+144>>2]|0)+(d*284|0)+232>>2]=b;return}function Bv(a,b,d){a=a|0;b=+b;d=d|0;g[(c[a+144>>2]|0)+(d*284|0)+252>>2]=b;return}function Cv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function Dv(a,b){a=a|0;b=b|0;zG(a);c[a>>2]=5048;c[a+4>>2]=b;return}function Ev(a,b){a=a|0;b=b|0;Kq(a,b);return}function Fv(a,b){a=a|0;b=b|0;Nq(a,b);return}function Gv(a,b){a=a|0;b=b|0;Nb[c[(c[a>>2]|0)+36>>2]&127](a,b,1,-1);return}function Hv(a){a=+a;var b=0;h[j>>3]=a;b=c[j>>2]|0;z=c[j+4>>2]|0;return b|0}function Iv(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+64>>2]&127](a,b);return}function Jv(a,b,c){a=a|0;b=b|0;c=c|0;Nh(b,c);return}function Kv(a,b){a=a|0;b=b|0;qn(a,b);return}function Lv(a){a=a|0;ld(a);if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function Mv(a){a=a|0;c[a>>2]=3116;g[a+4>>2]=1.0;b[a+8>>1]=1;b[a+10>>1]=-1;return}function Nv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;d=b-d-(c>>>0>a>>>0|0)>>>0;return (z=d,a-c>>>0|0)|0}function Ov(a,b){a=a|0;b=b|0;return c[(hD(c[a+12>>2]|0,b)|0)>>2]|0}function Pv(a,b){a=a|0;b=b|0;if((c[a+216>>2]&-2|0)==4)return;c[a+216>>2]=b;return}function Qv(a,b){a=a|0;b=b|0;dr(a,b);return}function Rv(a,b){a=a|0;b=b|0;er(a,b);return}function Sv(a,b){a=a|0;b=b|0;Kb[c[(c[a>>2]|0)+56>>2]&127](a,b,0);return}function Tv(a,b){a=a|0;b=+b;Cx(a,b);return}function Uv(a,b){a=a|0;b=b|0;return sb[c[(c[a>>2]|0)+40>>2]&31](a,b)|0}function Vv(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+60>>2]&127](a,b);return}function Wv(a,b,d){a=a|0;b=b|0;d=+d;Gb[c[(c[a>>2]|0)+12>>2]&127](a,b);return}function Xv(b){b=b|0;a[b+16>>0]=1;c[b+12>>2]=0;c[b+4>>2]=0;c[b+8>>2]=0;return}function Yv(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+92>>2]&127](a,b);return}function Zv(a,b){a=a|0;b=b|0;Ym(a,b);return}function _v(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return vb[a&31](b|0,c|0,d|0,e|0)|0}function $v(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+32>>2]&127](a,b);return}function aw(a){a=a|0;var b=0;b=ct()|0;Ph(b,a);return b|0}function bw(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;S(41)}function cw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return (z=b+d+(a+c>>>0>>>0>>0|0)>>>0,a+c>>>0|0)|0}function dw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+40>>2]&127](a,b);return}function ew(a,b,c){a=a|0;b=b|0;c=c|0;Ce(a,b,c);return}function fw(a,b,d){a=a|0;b=+b;d=d|0;g[(c[a+144>>2]|0)+(d*284|0)+256>>2]=b;return}function gw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+84>>2]&127](a,b);return}function hw(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;mm(a,b,c,d);return}function iw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+28>>2]&127](a,b);return}function jw(a,b){a=a|0;b=b|0;var d=0;d=l;l=l+16|0;c[d>>2]=b;Bk(a,d);Vm();Wa()}function kw(a,b){a=a|0;b=+b;c[a+260>>2]=(c[a+260>>2]|0)+1;g[a+232>>2]=b;return}function lw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return +lb[a&1](b|0,c|0,d|0,e|0)}function mw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+72>>2]&127](a,b);return}function nw(){var a=0;a=Js()|0;$f(a,0,0,16);return a|0}function ow(a){a=a|0;var b=0;b=Vr(284)|0;uj(b,a);return b|0}function pw(a){a=a|0;if(!a)return;Ab[c[(c[a>>2]|0)+8>>2]&511](a);return}function qw(a,b){a=a|0;b=+b;g[a+36>>2]=b;g[a+40>>2]=+E(+b);return}function rw(a){a=a|0;if(!a)return;Ab[c[(c[a>>2]|0)+4>>2]&511](a);return}function sw(a,b){a=a|0;b=+b;return +(+gb[c[(c[a>>2]|0)+16>>2]&15](a)*b)}function tw(a){a=a|0;Fu(a,+Tz(+g[a>>2],+g[a+4>>2],+g[a+8>>2]));return}function uw(a,b){a=a|0;b=+b;MA(a,b);return}function vw(a,b){a=a|0;b=b|0;hv(a+868|0,b);return}function ww(a,b){a=a|0;b=+b;c[a+260>>2]=(c[a+260>>2]|0)+1;g[a+228>>2]=b;return}function xw(a,b){a=a|0;b=b|0;Ee(a,b);return}function yw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+8>>2]&127](a,b);return}function zw(a,b,c,d,e,f,g,h){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;S(7);return 0.0}function Aw(a,b,c){a=a|0;b=b|0;c=c|0;ni(a,b,c);return}function Bw(a){a=a|0;var b=0;b=((bI(c[a+236>>2]|0)|0)&2|0)==0;return (b?0:a)|0}function Cw(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;Nb[a&127](b|0,c|0,d|0,e|0)}function Dw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+12>>2]&127](a,b);return}function Ew(a,b,c){a=a|0;b=b|0;c=c|0;Zk(a,b,c);return}function Fw(a,b){a=a|0;b=b|0;pf(a,b);return}function Gw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+68>>2]&127](a,b);return}function Hw(a,b){a=a|0;b=+b;c[a+260>>2]=(c[a+260>>2]|0)+1;g[a+224>>2]=b;return}function Iw(){var a=0;a=ls()|0;Sf(a,1,1);return a|0}function Jw(a){a=a|0;return nE(c[a+204>>2]|0)|0}function Kw(a,b,c){a=a|0;b=+b;c=+c;yx(a,b,c);return}function Lw(a,b){a=a|0;b=+b;Bb[c[(c[a>>2]|0)+20>>2]&31](a,b);return}function Mw(a,b,c,d){a=a|0;b=+b;c=+c;d=+d;pl(a,b,c,d);return}function Nw(a,b){a=a|0;b=b|0;c[b>>2]=6;c[b+4>>2]=6;return}function Ow(a,b){a=a|0;b=b|0;Kv(a+788|0,b);return}function Pw(a,b){a=a|0;b=+b;Bb[c[(c[a>>2]|0)+16>>2]&31](a,b);return}function Qw(a,b){a=a|0;b=b|0;return +(+g[(c[a+144>>2]|0)+(b*284|0)+232>>2])}function Rw(){var a=0;a=Vr(196)|0;Fh(a,0);return a|0}function Sw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+24>>2]&127](a,b);return}function Tw(a,b,d){a=a|0;b=b|0;d=d|0;c[a+20>>2]=b;c[a+28>>2]=d;return}function Uw(a,b,d){a=a|0;b=b|0;d=d|0;c[a+16>>2]=b;c[a+24>>2]=d;return}function Vw(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function Ww(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=+e;return rb[a&1](b|0,+c,d|0,+e)|0}function Xw(a,b,c){a=a|0;b=b|0;c=+c;vm(a,b,c);return}function Yw(a,b){a=a|0;b=b|0;Gb[c[(c[a>>2]|0)+64>>2]&127](a,b);return}function Zw(a,b){a=a|0;b=b|0;return uB(c[a+12>>2]|0,b)|0}function _w(a,b,c){a=a|0;b=b|0;c=c|0;Nl(a,b,c);return}function $w(a,b,c){a=a|0;b=b|0;c=+c;g[a+1340+(b<<2)>>2]=c;return}function ax(a){a=a|0;var b=0;b=bI(a+28|0)|0;return +(+g[b+(c[a+52>>2]<<2)>>2])}function bx(a,b,c){a=a|0;b=b|0;c=c|0;return $b(a,b,c)|0}function cx(a,b){a=a|0;b=b|0;wx(a,b);return}function dx(a,b,c){a=a|0;b=b|0;c=+c;Jq(a,b,c);return}function ex(a,b){a=a|0;b=b|0;cn(a,b);return}function fx(a,b){a=a|0;b=b|0;Zv(a+708|0,b);return}function gx(a){a=a|0;if(!a)return;CE(a);_H(a);return}function hx(a,b,c){a=a|0;b=b|0;c=+c;g[a+1364+(b<<2)>>2]=c;return}function ix(a,b){a=a|0;b=b|0;je(a,b);return}function jx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;Lb[a&15](b|0,c|0,d|0,+e)}function kx(a){a=a|0;if(!a)return;xB(a);_H(a);return}function lx(a){a=+a;var b=0;b=Vs()|0;lp(b,a);return b|0}function mx(a,b){a=a|0;b=b|0;zu(a,b);return}function nx(a,b){a=a|0;b=+b;g[a+132>>2]=b;return}function ox(a,b){a=a|0;b=+b;Ay(a,b);return}function px(a){a=a|0;var b=0;b=(bI(c[a+236>>2]|0)|0)==4;return (b?a:0)|0}function qx(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;Ib[a&7](b|0,c|0,+d,e|0)}function rx(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;Fb[a&0](b|0,+c,d|0,e|0)}function sx(a,b){a=a|0;b=+b;g[a+128>>2]=b;return}function tx(a,b){a=a|0;b=b|0;CB(a,b);return}function ux(a,b){a=a|0;b=b|0;ur(a,b);return}function vx(a,b){a=a|0;b=b|0;vr(a,b);return}function wx(a,b){a=a|0;b=b|0;c[a+176>>2]=(b|0)<0?0:(b|0)<2?b:2;return}function xx(a,b){a=a|0;b=b|0;c[a+24>>2]=b;return}function yx(a,b,c){a=a|0;b=+b;c=+c;g[a+472>>2]=b;g[a+476>>2]=c;return}function zx(a,b){a=a|0;b=b|0;return LB(a,b)|0}function Ax(a,b){a=a|0;b=b|0;g[a+48>>2]=+(b|0);return}function Bx(a){a=a|0;var b=0;b=l;l=l+16|0;zb[a&3]();jw(22452,b)}function Cx(b,c){b=b|0;c=+c;g[b+572>>2]=c;a[b+553>>0]=1;return}function Dx(a,b){a=a|0;b=b|0;return c[(c[a+20>>2]|0)+(b<<2)>>2]|0}function Ex(a){a=a|0;var b=0;b=(bI(c[a+236>>2]|0)|0)==8;return (b?a:0)|0}function Fx(a){a=a|0;return +(+oH(+g[a+16>>2]))}function Gx(a){a=a|0;return qb[c[(c[a>>2]|0)+40>>2]&127](a)|0}function Hx(a){a=a|0;return +(+Tz(+g[a>>2],+g[a+4>>2],+g[a+8>>2]))}function Ix(a,b){a=a|0;b=+b;mB(a,b);return}function Jx(a,b){a=a|0;b=b|0;OB(a,b);return}function Kx(a,b){a=a|0;b=b|0;iB(a,b);return}function Lx(a,b){a=a|0;b=+b;Bb[c[(c[a>>2]|0)+44>>2]&31](a,b);return}function Mx(a,b){a=a|0;b=b|0;$p(a,b);return}function Nx(a,b){a=a|0;b=+b;g[a+136>>2]=b;return}function Ox(a){a=a|0;return sF(+g[a+4>>2])|0}function Px(a){a=a|0;if(!a)return;c[6473]=(c[6473]|0)+1;nd(c[a+-4>>2]|0);return}function Qx(a,b){a=a|0;b=b|0;return (c[a+144>>2]|0)+(b*284|0)+92|0}function Rx(a,b){a=a|0;b=b|0;return iv(a,b)|0}function Sx(a,b,c,d,e,f){a=+a;b=+b;c=+c;d=+d;e=+e;f=+f;return +(a*d+b*e+c*f)}function Tx(a){a=a|0;c[a>>2]=2896;b[a+4>>1]=1;b[a+6>>1]=-1;return}function Ux(){var a=0;a=Vr(24)|0;sr(a);return a|0}function Vx(a,b){a=a|0;b=b|0;cq(a,b);return}function Wx(a,b){a=a|0;b=+b;dC(a,b);return}function Xx(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function Yx(a){a=a|0;g[a>>2]=.30000001192092896;g[a+4>>2]=1.0;g[a+8>>2]=0.0;return}function Zx(a,b){a=a|0;b=+b;yB(a,b);return}function _x(a){a=a|0;Ab[c[(c[a>>2]|0)+44>>2]&511](a);return}function $x(a,b){a=a|0;b=b|0;Sq(a+4|0,b);return}function ay(a){a=a|0;return TE(c[a+204>>2]|0)|0}function by(a,b){a=a|0;b=+b;iC(a,b);return}function cy(a,b){a=a|0;b=+b;gz(a,b);return}function dy(a,b){a=a|0;b=+b;jC(a,b);return}function ey(a,b){a=a|0;b=+b;hz(a,b);return}function fy(a,b){a=a|0;b=b|0;Ns(a,b);return}function gy(a,b){a=a|0;b=b|0;eq(a,b);return}function hy(a){a=a|0;return +(+oH(+g[a+112>>2]))}function iy(b,c){b=b|0;c=c|0;a[b+32>>0]=c&1;return}function jy(a){a=a|0;return ME(c[a+8>>2]|0)|0}function ky(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return ub[a&63](b|0,c|0,d|0)|0}function ly(a,b){a=a|0;b=b|0;return +(+lo(a,b))}function my(a,b){a=a|0;b=b|0;ni(a,b,1);return}function ny(a,b){a=a|0;b=b|0;GB(a,b);return}function oy(a){a=a|0;if(!a)a=0;else a=(Vi(a,2832)|0)!=0;return a&1|0}function py(a){a=a|0;wj(a);_H(a);return}function qy(a,b){a=a|0;b=b|0;km(a,b);return}function ry(a,b){a=a|0;b=+b;g[a+116>>2]=b;return}function sy(a,b){a=a|0;b=b|0;sA(a,b,+AD(b));return}function ty(a,b){a=a|0;b=b|0;cC(a,b);return}function uy(a,b){a=a|0;b=b|0;Bt(a,b);return}function vy(){var a=0;a=Vr(100)|0;nm(a);return a|0}function wy(a,b){a=a|0;b=+b;g[a+112>>2]=b;return}function xy(a,b){a=a|0;b=+b;g[a+124>>2]=b;return}function yy(a,b){a=a|0;b=b|0;MB(a,b);return}function zy(a,b){a=a|0;b=b|0;return c[(c[a+220>>2]|0)+(b<<2)>>2]|0}function Ay(b,c){b=b|0;c=+c;g[b+572>>2]=c;a[b+553>>0]=0;return}function By(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return +jb[a&15](b|0,c|0,d|0)}function Cy(a,b){a=a|0;b=b|0;NB(a,b);return}function Dy(a,b){a=a|0;b=b|0;return $b(a,b,8192)|0}function Ey(b,c){b=b|0;c=c|0;a[b+120>>0]=c&1;return}function Fy(){var a=0;a=Vr(12)|0;Yx(a);return a|0}function Gy(a){a=a|0;if(!a)return;Yt(a);_H(a);return}function Hy(a){a=a|0;return qb[c[(c[a>>2]|0)+48>>2]&127](a)|0}function Iy(a){a=a|0;Tx(a);c[a>>2]=2872;return}function Jy(a){a=a|0;return uF(a)|0}function Ky(a,b){a=a|0;b=+b;kw(a,b);return}function Ly(a,b){a=a|0;b=b|0;return +(+ef(a,b))}function My(a){a=a|0;return +(+oH(+g[a+120>>2]))}function Ny(){var a=0;a=Vr(4)|0;$A(a);return a|0}function Oy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return}function Py(a){a=a|0;return oF(c[a+204>>2]|0)|0}function Qy(a,b){a=a|0;b=+b;OC(a,b);return}function Ry(a,b){a=a|0;b=b|0;lh(a,b);return}function Sy(a,b){a=a|0;b=+b;MC(a,b);return}function Ty(a){a=a|0;return qb[c[(c[a>>2]|0)+28>>2]&127](a)|0}function Uy(a,b){a=a|0;b=b|0;return Su(a,b)|0}function Vy(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;return tb[a&7](b|0,c|0,+d)|0}function Wy(a){a=a|0;return +(+g[a+132>>2])}function Xy(a){a=a|0;return wz(c[a+68>>2]|0)|0}function Yy(b){b=b|0;if((a[b>>0]|0)==1)b=0;else{a[b>>0]=1;b=1}return b|0}function Zy(b,c){b=b|0;c=c|0;a[b+80>>0]=c&1;return}function _y(a,b){a=a|0;b=b|0;kC(a,b);return}function $y(a){a=a|0;return +(+g[a+128>>2])}function az(a,b){a=a|0;b=b|0;return (c[a+144>>2]|0)+(b*284|0)|0}function bz(a,b){a=a|0;b=b|0;pC(a,b);return}function cz(a){a=a|0;c[a+4>>2]=(c[a+4>>2]|0)+-1;return}function dz(a,b,c,d,e,f,g){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;S(40)}function ez(a){a=a|0;return bC(a)|0}function fz(a){a=a|0;Xv(a);return}function gz(a,b){a=a|0;b=+b;g[a+196>>2]=+Gs(b);return}function hz(a,b){a=a|0;b=+b;g[a+192>>2]=+Gs(b);return}function iz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;Kb[a&127](b|0,c|0,d|0)}function jz(a,b,d){a=a|0;b=b|0;d=d|0;if(!(c[a>>2]&32))ok(b,d,a);return}function kz(a,b){a=a|0;b=b|0;Sq(a+92|0,b);return}function lz(a){a=a|0;tj(a);_H(a);return}function mz(a,b){a=a|0;b=+b;g[a+268>>2]=b;return}function nz(a){a=a|0;return +(+oH(+g[a+80>>2]))}function oz(a,b){a=a|0;b=b|0;c[b+748>>2]=0;return}function pz(a,b){a=a|0;b=b|0;lk(a,b);return}function qz(a){a=a|0;return _F(a)|0}function rz(a,b){a=a|0;b=+b;ww(a,b);return}function sz(a,b){a=a|0;b=+b;g[a+96>>2]=b;return}function tz(a){a=a|0;return +(+gb[c[(c[a>>2]|0)+48>>2]&15](a))}function uz(a,c){a=a|0;c=c|0;b[a+10>>1]=c;return}function vz(a,c){a=a|0;c=c|0;b[a+8>>1]=c;return}function wz(a){a=a|0;return qb[c[(c[a>>2]|0)+36>>2]&127](a)|0}function xz(a){a=a|0;var b=0;b=l;l=l+a|0;l=l+15&-16;return b|0}function yz(a,b){a=a|0;b=b|0;Bd(a,b);return}function zz(a,b){a=a|0;b=b|0;NC(a,b);return}function Az(a){a=a|0;return +(+g[a+136>>2])}function Bz(b){b=b|0;return (a[b+32>>0]&1)!=0|0}function Cz(b,c){b=b|0;c=c|0;a[b+170>>0]=c&1;return}function Dz(a,b){a=a|0;b=b|0;Mr(a,b);return}function Ez(a,b){a=a|0;b=b|0;yn(a+288|0,b);return}function Fz(a,b){a=a|0;b=b|0;return Bw(b)|0}function Gz(a,b){a=a|0;b=+b;g[a+108>>2]=b;return}function Hz(a,c){a=a|0;c=c|0;b[a+12>>1]=c;return}function Iz(a,b){a=a|0;b=b|0;lh(b,a);return}function Jz(a,b){a=a|0;b=+b;g[a+272>>2]=b;return}function Kz(a){a=a|0;return cG(a)|0}function Lz(a){a=a|0;return dG(a)|0}function Mz(a){a=a|0;return iG(a)|0}function Nz(a,c){a=a|0;c=c|0;b[a+14>>1]=c;return}function Oz(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(16);return 0}function Pz(a){a=a|0;cz(a);return}function Qz(a,b){a=a|0;b=b|0;pz(a,b);return}function Rz(a,b){a=a|0;b=b|0;return Ex(b)|0}function Sz(a,b){a=a|0;b=b|0;c[a+44>>2]=b&1;return}function Tz(a,b,c){a=+a;b=+b;c=+c;return +(+RH(+eA(a,b,c)))}function Uz(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;Eb[a&15](b|0,+c,d|0)}function Vz(a,b){a=a|0;b=b|0;if(!a)a=0;else a=Ck(a,b)|0;return a|0}function Wz(a,b){a=a|0;b=+b;g[a+220>>2]=b;return}function Xz(a,b){a=a|0;b=+b;g[a+100>>2]=b;return}function Yz(b){b=b|0;return (a[b+120>>0]&1)!=0|0}function Zz(b,c){b=b|0;c=c|0;a[b+24>>0]=c&1;return}function _z(a){a=a|0;return ~~+g[a+48>>2]|0}function $z(b,c){b=b|0;c=c|0;a[b+180>>0]=c&1;return}function aA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;Hb[a&7](b|0,c|0,+d)}function bA(a,b){a=a|0;b=+b;g[a+224>>2]=b;return}function cA(a,b){a=a|0;b=+b;Hw(a,b);return}function dA(a){a=a|0;return gB(c[a+216>>2]|0)|0}function eA(a,b,c){a=+a;b=+b;c=+c;return +(+Sx(a,b,c,a,b,c))}function fA(a){a=+a;if(!(a<-1.0)){if(a>1.0)a=1.0}else a=-1.0;return +(+H(+a))}function gA(a){a=a|0;return +(+g[a+116>>2])}function hA(a){a=a|0;return +(+uu(a))}function iA(b,c){b=b|0;c=c|0;a[b+16>>0]=c&1;return}function jA(a){a=a|0;return $C(a)|0}function kA(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(4);return 0.0}function lA(a,b){a=a|0;b=+b;g[a+276>>2]=b;return}function mA(a,b){a=a|0;b=+b;g[a+204>>2]=b;return}function nA(a,b){a=a|0;b=+b;g[a+208>>2]=b;return}function oA(a){a=a|0;return +(+g[a+112>>2])}function pA(a){a=a|0;return +(+g[a+124>>2])}function qA(a,b,c){a=a|0;b=+b;c=c|0;return}function rA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return}function sA(a,b,c){a=a|0;b=b|0;c=+c;Ln(a,b,1.0/c);return}function tA(a){a=a|0;Ye(a);_H(a);return}function uA(a,b){a=a|0;b=b|0;var c=0;c=TA(a|0)|0;return ((b|0)==0?a:c)|0}function vA(a,b){a=a|0;b=+b;g[a+216>>2]=b;return}function wA(b){b=b|0;return (a[b+80>>0]&1)!=0|0}function xA(a){a=a|0;if(!a)return;Px(a);return}function yA(a,b){a=a|0;b=b|0;c[a+36>>2]=b;return}function zA(a,b){a=a|0;b=b|0;c[a+32>>2]=b;return}function AA(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ne(a,b,c,d,0)|0}function BA(b,c){b=b|0;c=c|0;a[b+260>>0]=c&1;return}function CA(b,c){b=b|0;c=c|0;a[b+25>>0]=c&1;return}function DA(a,b,c){a=a|0;b=+b;c=c|0;return}function EA(a,b){a=a|0;b=b|0;c[a+72>>2]=b;return}function FA(a){a=a|0;Kt(a,+AD(a))|0;return}function GA(a,b,c,d){a=a|0;b=b|0;c=+c;d=+d;Cb[a&7](b|0,+c,+d)}function HA(a){a=a|0;return +(+DG(+g[a+12>>2]))}function IA(a,b){a=a|0;b=b|0;c[a+8>>2]=b;return}function JA(a){a=a|0;return wG(a)|0}function KA(a){a=a|0;return bI(c[a+84>>2]|0)|0}function LA(a,b){a=a|0;b=b|0;return +(+os(a,b))}function MA(a,b){a=a|0;b=+b;g[a+16>>2]=b;return}function NA(a,b){a=a|0;b=b|0;c[a+216>>2]=b;return}function OA(b,c){b=b|0;c=c|0;a[b+26>>0]=c&1;return}function PA(b,c){b=b|0;c=c|0;a[b+84>>0]=c&1;return}function QA(a){a=a|0;dk(a);_H(a);return}function RA(a){a=a|0;Dk(a);_H(a);return}function SA(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;S(39)}function TA(a){a=a|0;return (a&255)<<24|(a>>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function UA(a){a=a|0;return EG(a)|0}function VA(a){a=a|0;return bI(c[a+88>>2]|0)|0}function WA(a){a=a|0;return sD(a)|0}function XA(a){a=a|0;return (c[a+116>>2]|0)+4|0}function YA(a){a=a|0;return bI(c[a+748>>2]|0)|0}function ZA(a,b){a=a|0;b=b|0;c[a+4>>2]=b;return}function _A(a,b){a=a|0;b=b|0;xm(a+28|0,b);return}function $A(a){a=a|0;MF(a);c[a>>2]=2968;return}function aB(a,b,c){a=a|0;b=b|0;c=c|0;return sb[a&31](b|0,c|0)|0}function bB(a,b){a=a|0;b=+b;g[a+244>>2]=b;return}function cB(a,b){a=a|0;b=+b;g[a+240>>2]=b;return}function dB(a){a=a|0;return +(+g[a+104>>2])}function eB(a,b){a=a|0;b=b|0;return wl(a,b)|0}function fB(a){a=a|0;return KG(a)|0}function gB(a){a=a|0;a=bI(a)|0;return (a|0)!=5&(a|0)!=2|0}function hB(a){a=a|0;ck(a);_H(a);return}function iB(b,c){b=b|0;c=c|0;a[b+524>>0]=c&1;return}function jB(a){a=a|0;return ((a|0)==0?1:a<<1)|0}function kB(a,b){a=a|0;b=b|0;return a+(b*96|0)|0}function lB(a,b){a=a|0;b=b|0;return a+(b*80|0)|0}function mB(a,b){a=a|0;b=+b;g[a+248>>2]=b;return}function nB(a,b){a=a|0;b=+b;g[a+212>>2]=b;return}function oB(a,b){a=a|0;b=+b;g[a+228>>2]=b;return}function pB(a){a=a|0;return +(+g[a+268>>2])}function qB(a,b){a=a|0;b=b|0;return qo(a,b)|0}function rB(a,b){a=a|0;b=b|0;return po(a,b)|0}function sB(a,b){a=a|0;b=b|0;return +(+Vo(a,b))}function tB(a){a=a|0;return +(+ax(a))}function uB(a,b){a=a|0;b=b|0;return a+(b*104|0)|0}function vB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=+f;S(38)}function wB(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=+d;e=e|0;f=f|0;S(32)}function xB(a){a=a|0;Vu(a);return}function yB(a,b){a=a|0;b=+b;g[a+252>>2]=b;return}function zB(a){a=a|0;return +(+g[a+96>>2])}function AB(a){a=a|0;return TG(a)|0}function BB(a){a=a|0;return (c[a+44>>2]|0)!=0|0}function CB(a,b){a=a|0;b=b|0;c[a+84>>2]=b;return}function DB(a){a=a|0;fz(a);return}function EB(a){a=a|0;return bI(c[a+128>>2]|0)|0}function FB(b){b=b|0;return (a[b+24>>0]&1)!=0|0}function GB(b,c){b=b|0;c=c|0;a[b+552>>0]=c&1;return}function HB(a,b,c){a=a|0;b=b|0;c=c|0;return 0}function IB(a){a=a|0;return $E(a)|0}function JB(a){a=a|0;return +(+g[a+108>>2])}function KB(a){a=a|0;ek(a);_H(a);return}function LB(a,b){a=a|0;b=b|0;return a+4+(b*184|0)|0}function MB(b,c){b=b|0;c=c|0;a[b+736>>0]=c&1;return}function NB(a,b){a=a|0;b=b|0;c[a+204>>2]=b;return}function OB(a,b){a=a|0;b=b|0;c[a+88>>2]=b;return}function PB(a,b,c,d,e,f){a=a|0;b=+b;c=+c;d=d|0;e=e|0;f=f|0;S(23)}function QB(a,b){a=a|0;b=+b;g[a+232>>2]=b;return}function RB(a,b){a=a|0;b=+b;g[a+280>>2]=b;return}function SB(a,b){a=a|0;b=+b;g[a+236>>2]=b;return}function TB(a){a=a|0;return +(+g[a+272>>2])}function UB(a){a=a|0;return bI(c[a+116>>2]|0)|0}function VB(a){a=a|0;return bI(c[a+120>>2]|0)|0}function WB(a,b){a=a|0;b=+b;return Kt(a,b)|0}function XB(a){a=a|0;return bI(c[a+744>>2]|0)|0}function YB(a){a=a|0;return bI(c[a+740>>2]|0)|0}function ZB(b){b=b|0;return (a[b+16>>0]&1)!=0|0}function _B(a){a=a|0;return b[a+10>>1]|0}function $B(a){a=a|0;return b[a+8>>1]|0}function aC(a){a=a|0;if(a>>>0>4294963200){c[6614]=0-a;a=-1}return a|0}function bC(a){a=a|0;return bI(c[a+268>>2]|0)|0}function cC(b,c){b=b|0;c=c|0;a[b+21>>0]=c&1;return}function dC(a,b){a=a|0;b=+b;g[a+684>>2]=b;return}function eC(a){a=a|0;return bI(c[a+192>>2]|0)|0}function fC(a){a=a|0;return bI(c[a+204>>2]|0)|0}function gC(a){a=a|0;return bI(c[a+24>>2]|0)|0}function hC(a){a=a|0;return bI(c[a+68>>2]|0)|0}function iC(a,b){a=a|0;b=+b;g[a+188>>2]=b;return}function jC(a,b){a=a|0;b=+b;g[a+184>>2]=b;return}function kC(a,b){a=a|0;b=b|0;c[a+240>>2]=b;return}function lC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(6);return 0.0}function mC(a){a=a|0;return +(+g[a+220>>2])}function nC(a){a=a|0;return +(+g[a+100>>2])}function oC(a){a=a|0;return b[a+12>>1]|0}function pC(b,c){b=b|0;c=c|0;a[b+737>>0]=c&1;return}function qC(a,b){a=a|0;b=+b;g[a+256>>2]=b;return}function rC(a){a=a|0;return +(+g[a+224>>2])}function sC(a,b){a=a|0;b=b|0;return Pr(a,b)|0}function tC(a,b){a=a|0;b=b|0;return Or(a,b)|0}function uC(a){a=a|0;return Yg(a)|0}function vC(a){a=a|0;return bI(c[a+480>>2]|0)|0}function wC(a){a=a|0;return bI(c[a+124>>2]|0)|0}function xC(a){a=a|0;return b[a+14>>1]|0}function yC(a,b){a=a|0;b=b|0;c[a+84>>2]=b;return}function zC(a,b){a=a|0;b=b|0;c[a+88>>2]=b;return}function AC(a,b){a=a|0;b=b|0;c[a+92>>2]=b;return}function BC(a,b){a=a|0;b=b|0;c[a+100>>2]=b;return}function CC(a,b){a=a|0;b=b|0;c[a+96>>2]=b;return}function DC(a){a=a|0;return (c[a+48>>2]|0)==1|0}function EC(a){a=a|0;fk(a);_H(a);return}function FC(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;return}function GC(a,b){a=a|0;b=b|0;return (a|0)==(b|0)|0}function HC(a,b){a=a|0;b=b|0;if(!o){o=a;p=b}}function IC(b){b=b|0;return (a[b+260>>0]&1)!=0|0}function JC(a){a=a|0;return bI(c[a+240>>2]|0)|0}function KC(b){b=b|0;return (a[b+25>>0]&1)!=0|0}function LC(a){a=a|0;return (c[a+92>>2]|0)+4|0}function MC(a,b){a=a|0;b=+b;g[a+440>>2]=b;return}function NC(a,b){a=a|0;b=b|0;c[a+240>>2]=b;return}function OC(a,b){a=a|0;b=+b;g[a+104>>2]=b;return}function PC(a,b,c){a=a|0;b=b|0;c=c|0;Gb[a&127](b|0,c|0)}function QC(a,b,c){a=a|0;b=b|0;c=+c;return +hb[a&1](b|0,+c)}function RC(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(2);return 0.0}function SC(a){a=a|0;return +(+g[a+276>>2])}function TC(a){a=a|0;return +(+g[a+208>>2])}function UC(a){a=a|0;return +(+wv(a))}function VC(a,b){a=a|0;b=b|0;c[a+16>>2]=b;return}function WC(a,b){a=a|0;b=+b;g[a+64>>2]=b;return}function XC(a,b){a=a|0;b=+b;g[a+68>>2]=b;return}function YC(a){a=+a;return (g[j>>2]=a,c[j>>2]|0)|0}function ZC(a){a=a|0;return bI(c[a+52>>2]|0)|0}function _C(a){a=a|0;if(!a)return;_H(a);return}function $C(a){a=a|0;return bI(c[a+16>>2]|0)|0}function aD(a){a=a|0;return +(+g[a+216>>2])}function bD(a,b){a=a|0;b=+b;UE(a,b);return}function cD(b){b=b|0;return (a[b+26>>0]&1)!=0|0}function dD(b){b=b|0;return (a[b+84>>0]&1)!=0|0}function eD(a,b){a=a|0;b=+b;g[a+80>>2]=b;return}function fD(a,b){a=a|0;b=+b;g[a+76>>2]=b;return}function gD(a){a=a|0;return +(+g[a+28>>2]*+g[a+12>>2])}function hD(a,b){a=a|0;b=b|0;return a+(b<<2)|0}function iD(a,b,c){a=a|0;b=b|0;c=c|0;return}function jD(a){a=a|0;return +(+g[a+248>>2])}function kD(a){a=a|0;return VG(a)|0}function lD(a,b){a=a|0;b=+b;g[a+60>>2]=b;return}function mD(a,b){a=a|0;b=+b;g[a+52>>2]=b;return}function nD(a,b){a=a|0;b=+b;g[a+56>>2]=b;return}function oD(a,b){a=a|0;b=b|0;c[a+20>>2]=b;return}function pD(a,b,c){a=a|0;b=b|0;c=+c;return 0}function qD(a){a=a|0;return +(+g[a+204>>2])}function rD(a){a=a|0;Gq(a);return}function sD(a){a=a|0;return bI(c[a+136>>2]|0)|0}function tD(a,b){a=a|0;b=b|0;return}function uD(a,b){a=a|0;b=+b;pF(a,b);return}function vD(a,b){a=a|0;b=+b;qF(a,b);return}function wD(a,b){a=a|0;b=+b;LF(a,b);return}function xD(a){a=a|0;return c[a+36>>2]|0}function yD(a){a=a|0;return c[a+32>>2]|0}function zD(a){a=a|0;return (c[a+48>>2]|0)+4|0}function AD(a){a=a|0;return +(+RH(+HE(a)))}function BD(a){a=a|0;return a+44|0}function CD(a){a=a|0;return c[a+68>>2]|0}function DD(a,b,c){a=a|0;b=b|0;c=+c;Bb[a&31](b|0,+c)}function ED(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;S(37)}function FD(a){a=a|0;return +(+g[(JH(a)|0)>>2])}function GD(a){a=a|0;return +(+g[(KH(a)|0)>>2])}function HD(a){a=a|0;return +(+g[(IH(a)|0)>>2])}function ID(a){a=a|0;return eH(a)|0}function JD(a){a=a|0;FA(a);return}function KD(a){a=a|0;return c[a+8>>2]|0}function LD(a,b){a=a|0;b=+b;g[a+40>>2]=b;return}function MD(a,b){a=a|0;b=+b;g[a+36>>2]=b;return}function ND(a,b){a=a|0;b=+b;g[a+48>>2]=b;return}function OD(a){a=a|0;return a+60|0}function PD(a,b){a=a|0;b=+b;g[a+92>>2]=b;return}function QD(a){a=a|0;return c[a+200>>2]|0}function RD(a){a=a|0;return +(+g[a+244>>2])}function SD(a){a=a|0;return +(+g[a+240>>2])}function TD(a){a=a|0;return +(+HE(a))}function UD(a,b){a=a|0;b=+b;g[a+24>>2]=b;return}function VD(a,b){a=a|0;b=+b;g[a+20>>2]=b;return}function WD(a,b){a=a|0;b=+b;g[a+32>>2]=b;return}function XD(a,b){a=a|0;b=+b;g[a+16>>2]=b;return}function YD(a,b){a=a|0;b=+b;g[a+28>>2]=b;return}function ZD(a,b){a=a|0;b=b|0;c[a>>2]=b;return}function _D(a){a=a|0;return c[a+212>>2]|0}function $D(a){a=a|0;c[a+192>>2]=0;return}function aE(a,b,c){a=a|0;b=b|0;c=c|0;return}function bE(a,b){a=a|0;b=+b;g[a+72>>2]=b;return}function cE(a){a=a|0;return +(+g[a+212>>2])}function dE(a){a=a|0;return +(+g[a+228>>2])}function eE(a){a=a|0;return c[a+24>>2]|0}function fE(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=+e;S(34)}function gE(a,b,c,d,e){a=a|0;b=b|0;c=+c;d=d|0;e=e|0;S(29)}function hE(a){a=a|0;return +(+g[a+252>>2])}function iE(a){a=a|0;return KH(a)|0}function jE(a){a=a|0;return +(+AD(a))}function kE(a){a=a|0;return c[a+4>>2]|0}function lE(){var a=0;a=c[6617]|0;c[6617]=a+0;return a|0}function mE(a,b,c){a=a|0;b=b|0;c=c|0;return 0.0}function nE(a){a=a|0;return (a&3|0)!=0|0}function oE(a){a=a|0;return c[a+136>>2]|0}function pE(a,b){a=a|0;b=+b;g[a+44>>2]=b;return}function qE(a){a=a|0;return bI(c[a+4>>2]|0)|0}function rE(a){a=a|0;return a+156|0}function sE(a){a=a|0;return a+20|0}function tE(){var a=0;a=c[2438]|0;c[2438]=a+0;return a|0}function uE(a){a=a|0;gi(a);_H(a);return}function vE(a){a=a|0;bp(a);_H(a);return}function wE(a){a=a|0;Aj(a);_H(a);return}function xE(a){a=a|0;return +(+g[a+232>>2])}function yE(a){a=a|0;return +(+g[a+280>>2])}function zE(a){a=a|0;return +(+g[a+236>>2])}function AE(a){a=a|0;return 348}function BE(a){a=a|0;return c[a+12>>2]|0}function CE(a){a=a|0;FE(a+56|0);return}function DE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(15);return 0}function EE(a){a=a|0;tw(a);return}function FE(a){a=a|0;xB(a);return}function GE(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(5);return 0.0}function HE(a){a=a|0;return +(+Vo(a,a))}function IE(a){a=a|0;return +(+g[a+256>>2])}function JE(a){a=a|0;return +(+g[(bI(a)|0)>>2])}function KE(a){a=a|0;return a+348|0}function LE(a){a=a|0;return +(+g[a>>2])}function ME(a){a=a|0;return (a|0)!=0|0}function NE(a,b){a=a|0;b=b|0;return qb[a&127](b|0)|0}function OE(a){a=a|0;return a+24|0}function PE(a){a=a|0;Na(a|0)|0;Zp()}function QE(a){a=a|0;return a+64|0}function RE(a){a=a|0;return +(+g[a+64>>2])}function SE(a){a=a|0;return +(+g[a+68>>2])}function TE(a){a=a|0;return (a&2|0)!=0|0}function UE(a,b){a=a|0;b=+b;g[a+12>>2]=b;return}function VE(a){a=a|0;return a+172|0}function WE(a){a=a|0;return c[a+84>>2]|0}function XE(a){a=a|0;return c[a+88>>2]|0}function YE(a){a=a|0;return c[a+92>>2]|0}function ZE(a){a=a|0;return c[a+100>>2]|0}function _E(a){a=a|0;return 252}function $E(a){a=a|0;return c[a+240>>2]|0}function aF(a,b,c,d){a=a|0;b=+b;c=c|0;d=+d;S(11);return 0}function bF(a){a=a|0;return a+52|0}function cF(a){a=a|0;return +(+g[a+80>>2])}function dF(a){a=a|0;return +(+g[a+76>>2])}function eF(a){a=a|0;return 28}function fF(a){a=a|0;return c[a+72>>2]|0}function gF(a,b){a=a|0;b=b|0;return +gb[a&15](b|0)}function hF(a){a=a|0;return c[a+16>>2]|0}function iF(a){a=a|0;return +(+g[a+60>>2])}function jF(a){a=a|0;return +(+g[a+52>>2])}function kF(a){a=a|0;return +(+g[a+56>>2])}function lF(a){a=a|0;return a+108|0}function mF(a){a=a|0;return 212}function nF(a){a=a|0;return c[a+96>>2]|0}function oF(a){a=a|0;return (a&1|0)!=0|0}function pF(a,b){a=a|0;b=+b;g[a+8>>2]=b;return}function qF(a,b){a=a|0;b=+b;g[a+4>>2]=b;return}function rF(a){a=a|0;return a+16|0}function sF(a){a=+a;return a<1.0|0}function tF(a,b){a=a|0;b=b|0;return 1}function uF(a){a=a|0;return a+324|0}function vF(a){a=a|0;LG(a);return}function wF(a,b){a=a|0;b=b|0;l=a;m=b}function xF(a){a=a|0;return a+188|0}function yF(a){a=a|0;return c[a+20>>2]|0}function zF(a){a=a|0;return 204}function AF(a,b){a=a|0;b=b|0;return}function BF(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;S(33)}function CF(a){a=a|0;return a+36|0}function DF(a){a=a|0;return +(+g[a+44>>2])}function EF(a){a=a|0;return +(+g[a+40>>2])}function FF(a){a=a|0;return +(+g[a+36>>2])}function GF(a){a=a|0;return +(+g[a+48>>2])}function HF(a){a=a|0;return +(+g[a+92>>2])}function IF(a){a=a|0;return 220}function JF(a){a=a|0;return 256}function KF(a){a=a|0;return +(+g[a+72>>2])}function LF(a,b){a=a|0;b=+b;g[a>>2]=b;return}function MF(a){a=a|0;c[a>>2]=2996;return}function NF(a){a=a|0;c[a>>2]=8252;return}function OF(a){a=a|0;vF(a);return}function PF(a){a=a|0;return +(+g[a+24>>2])}function QF(a){a=a|0;return +(+g[a+4>>2])}function RF(a){a=a|0;return +(+g[a+20>>2])}function SF(a){a=a|0;return +(+g[a+32>>2])}function TF(a){a=a|0;return +(+g[a+16>>2])}function UF(a){a=a|0;return +(+g[a+12>>2])}function VF(a){a=a|0;return +(+g[a+28>>2])}function WF(a){a=a|0;return 52}function XF(a){a=a|0;return 68}function YF(a){a=a|0;return 84}function ZF(a,b){a=a|0;b=b|0;return a+(b<<4)|0}function _F(a){a=a|0;return a+352|0}function $F(a){a=a|0;return bI(a)|0}function aG(a){a=a|0;return a+868|0}function bG(a){a=a|0;return +(+g[a+8>>2])}function cG(a){a=a|0;return a+316|0}function dG(a){a=a|0;return a+300|0}function eG(a,b){a=a|0;b=b|0;Ab[a&511](b|0)}function fG(a,b,c,d){a=a|0;b=b|0;c=c|0;d=+d;S(31)}function gG(a,b,c,d){a=a|0;b=b|0;c=+c;d=d|0;S(28)}function hG(a,b,c,d){a=a|0;b=+b;c=c|0;d=d|0;S(25)}function iG(a){a=a|0;return a+32|0}function jG(a){a=a|0;return 24}function kG(a,b){a=a|0;b=+b;return}function lG(a){a=a|0;return a+788|0}function mG(a){a=a|0;return c[a>>2]|0}function nG(a,b){a=a|0;b=b|0;return Cu(a,b)|0}function oG(a){a=a|0;return a+68|0}function pG(a){a=a|0;Px(a);return}function qG(a){a=a|0;_H(a+-4|0);return}function rG(a){a=a|0;fi(a);return}function sG(a){a=a|0;return a+708|0}function tG(a){a=a|0;return 488}function uG(a,b,c){a=a|0;b=b|0;c=c|0;S(14);return 0}function vG(a){a=a|0;return 32}function wG(a){a=a|0;return a+328|0}function xG(a){a=a|0;return 60}function yG(a){a=a|0;return 428}function zG(a){a=a|0;c[a>>2]=3072;return}function AG(a,b,c){a=a|0;b=b|0;c=c|0;S(3);return 0.0}function BG(a){a=a|0;return a+288|0}function CG(){return Vr(1)|0}function DG(a){a=+a;return +(+fA(a)*2.0)}function EG(a){a=a|0;return a+312|0}function FG(a){a=a|0;c[a>>2]=4572;return}function GG(a){a=a|0;c[a>>2]=5200;return}function HG(a){a=a|0;return (a&255)<<8|a>>8&255|0}function IG(a,b,c){a=a|0;b=b|0;c=+c;S(13);return 0}function JG(a){a=a|0;return 11278}function KG(a){a=a|0;return a+92|0}function LG(a){a=a|0;c[a>>2]=0;return}function MG(a){a=a|0;return 4}function NG(a){a=a|0;return 18007}function OG(a){a=a|0;return 17723}function PG(a){a=a|0;c[a>>2]=3048;return}function QG(){return dt()|0}function RG(a){a=a|0;return 11166}function SG(a){a=a|0;return a+76|0}function TG(a){a=a|0;return a+28|0}function UG(a){a=a|0;return 16869}function VG(a){a=a|0;return a+380|0}function WG(a){a=+a;return +(+bh(a,6.2831854820251465))}function XG(a){a=a|0;return a+40|0}function YG(a){a=a|0;return a+72|0}function ZG(a){a=a|0;return a+56|0}function _G(a,b,c){a=a|0;b=b|0;c=c|0;S(30)}function $G(a){a=a|0;return 17253}function aH(a){a=a|0;return 0}function bH(a,b){a=+a;b=b|0;return +(+em(a,b))}function cH(){return Vr(64)|0}function dH(a){a=a|0;return 17311}function eH(a){a=a|0;return a+48|0}function fH(a){a=a|0;return 17509}function gH(a){a=a|0;return 1}function hH(a,b,c){a=a|0;b=b|0;c=+c;S(27)}function iH(a,b,c){a=a|0;b=+b;c=c|0;S(24)}function jH(a){a=a|0;return 18124}function kH(a){a=a|0;return 18095}function lH(a){a=a|0;return 3}function mH(a){a=a|0;return om(a,26432)|0}function nH(a){a=a|0;return 11545}function oH(a){a=+a;return +a}function pH(a){a=a|0;return 18067}function qH(a){a=a|0;return 16584}function rH(a){a=a|0;return 17667}function sH(a){a=a|0;return 17640}function tH(a){a=a|0;return 17610}function uH(a){a=a|0;return 8}function vH(a,b,c){a=a|0;b=+b;c=+c;S(22)}function wH(a){a=a|0;return 16688}function xH(a,b){a=a|0;b=b|0;S(12);return 0}function yH(a){a=a|0;return 16646}function zH(a){a=a|0;return 16667}function AH(a){a=a|0;return 6}function BH(a){a=a|0;return 12}function CH(){return 4}function DH(a){a=a|0;return 16627}function EH(a){a=a|0;return 2}function FH(a){a=a|0;return 17782}function GH(a,b){a=a|0;b=+b;S(1);return 0.0}function HH(){c[5698]=1805;c[5699]=0;return}function IH(a){a=a|0;return a+12|0}function JH(a){a=a|0;return a+8|0}function KH(a){a=a|0;return a+4|0}function LH(a){a=a|0;zb[a&3]()}function MH(){return 2}function NH(){return 1}function OH(){return 5}function PH(){return 3}function QH(){Pa()}function RH(a){a=+a;return +(+C(+a))}function SH(a){a=+a;return +(+F(+a))}function TH(a){a=+a;return +(+E(+a))}function UH(a,b){a=a|0;b=b|0;S(26)}function VH(a){a=a|0;return}function WH(a,b){a=a|0;b=+b;S(21)}function XH(a){a=a|0;return Vr(a)|0}function YH(a){a=a|0;_H(a);return}function ZH(a){a=a|0;l=a}function _H(a){a=a|0;nd(a);return}function $H(a){a=a|0;z=a}function aI(a){a=a|0;S(10);return 0}function bI(a){a=a|0;return a|0}function cI(a){a=a|0;S(0);return 0.0}function dI(){return z|0}function eI(){return l|0}function fI(a){a=a|0;S(20)}function gI(){return 0}function hI(){S(19)} + +// EMSCRIPTEN_END_FUNCS +var gb=[cI,Co,UF,tz,DF,KF,gD,hq,gq,hq,cI,cI,cI,cI,cI,cI];var hb=[GH,sw];var ib=[RC,Zj,Zj,RC];var jb=[AG,sj,Yj,ki,mE,Qk,$n,Pj,ym,mn,Gh,wm,jm,Yl,AG,AG];var kb=[kA,jk,ik,kA];var lb=[GE,Mc];var mb=[lC,mu,ae,mu,mu,be,mu,mu,Hf,mf,qt,mu,mu,lC,lC,lC];var nb=[zw,Mp];var ob=[qv,kc,xi,qv];var pb=[ru,Ni,Lc,ru];var qb=[aI,aH,gH,kE,KD,KD,hF,eE,yG,EH,lr,RG,BH,IH,JG,WF,aH,vG,nH,EH,lH,lH,gH,fF,QD,_D,MG,tG,EH,WF,_E,AE,YF,zF,mF,IF,gH,Hy,mv,JF,BE,Uu,CD,CD,SG,qH,jG,DH,xG,yH,zH,wH,zD,UG,xG,$G,oG,dH,WF,fH,XF,nF,nF,aH,tH,xG,sH,rH,LC,OG,aH,aH,aH,FH,AH,uH,BH,AH,YF,lF,NG,pH,xG,kH,jH,eE,DC,eF,YE,YE,hF,hF,KH,aH,gH,hF,hF,KH,KD,aH,oE,oE,hF,Ts,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI,aI];var rb=[aF,mg];var sb=[xH,br,jr,cr,tF,tF,tF,Xb,zy,zy,td,Ql,Nm,Dx,Dn,Us,il,Aq,Vp,Hk,pi,fo,yq,xH,xH,xH,xH,xH,xH,xH,xH,xH];var tb=[IG,zh,pD,pD,Jm,IG,IG,IG];var ub=[uG,wn,ti,bc,ko,jl,cg,Zh,Wg,sf,$m,Ih,yh,uf,$e,qf,Zm,up,Xj,Af,$k,ug,kl,Sh,_k,xe,Yk,Ad,HB,HB,ff,Rj,jg,sg,ii,no,dl,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG,uG];var vb=[DE,Wm,Wo,oo,kk,hk,Kh,nn,tl,rl,Il,fg,Hl,mp,zm,Gl,Bl,Di,Ml,Hc,vv,Vw,lf,DE,DE,DE,DE,DE,DE,DE,DE,DE];var wb=[Oz,_c,od,Jd];var xb=[lv,qd,Gf,lv];var yb=[ou,Ic,ch,ou];var zb=[hI,QH,gk,ut];var Ab=[fI,VH,YH,VH,YH,VH,YH,VH,YH,VH,YH,VH,YH,VH,pG,VH,YH,VH,YH,VH,YH,VH,YH,gp,pq,Nn,wj,py,VH,YH,YH,YH,YH,ld,Lv,VH,YH,VH,YH,VH,Px,YH,YH,VH,Px,YH,YH,VH,YH,bt,vs,VH,YH,VH,YH,Lp,hp,nv,Gu,Sj,iu,Si,Jk,Zb,Eh,Zf,rn,Qe,vl,VH,YH,VH,YH,Lo,Zn,Cg,qu,ac,YH,ck,hB,FG,ov,VH,FG,ov,ov,Fd,Hm,ov,ov,Be,ov,ov,ie,ov,Ec,ag,ft,$D,gi,uE,YH,Ro,co,Ss,YH,VH,YH,GG,pv,Io,Wn,ul,ju,kp,tq,VH,YH,Ye,tA,YH,YH,YH,YH,YH,YH,YH,YH,YH,YH,ek,KB,xq,sp,fp,Qo,YH,Op,Ep,Dq,xp,VH,YH,Aj,wE,Xd,YH,YH,YH,YH,YH,VH,YH,VH,qG,YH,YH,YH,YH,YH,YH,rq,qp,VH,YH,Fq,Ap,YH,YH,YH,Dk,RA,YH,tj,lz,YH,Wl,Wu,Ui,Px,Px,Px,Px,tp,Ko,VH,YH,YH,YH,VH,Px,YH,VH,YH,VH,Px,hp,dm,Zl,Px,Px,Px,hp,YH,hp,rG,dv,YH,YH,NF,Ru,Px,Px,Px,ci,cv,ij,Nu,VH,Nu,np,Bq,dk,QA,YH,YH,bp,vE,VH,YH,YH,YH,fi,dv,YH,VH,YH,YH,YH,YH,YH,YH,VH,YH,VH,YH,vq,rp,YH,YH,fk,EC,bi,Lu,cp,io,VH,YH,VH,VH,YH,YH,cs,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI,fI];var Bb=[WH,gc,Qc,Om,UE,pE,kG,pE,yk,Rc,Mf,qe,hg,Vj,We,Jc,oe,vc,bE,pE,zl,zl,zl,_i,WH,WH,WH,WH,WH,WH,WH,WH];var Cb=[vH,Ud,kg,lj,Uf,yf,vH,vH];var Db=[PB];var Eb=[iH,Lg,DA,qA,Ot,Ij,Ji,Uo,Ot,Ot,Yi,bl,Kl,rt,Uj,iH];var Fb=[hG];var Gb=[UH,uq,Qr,AF,ZA,IA,AF,Pn,Pk,AF,Rs,Sn,xc,de,Bp,AF,AF,AF,tD,EA,di,gg,mh,Jj,qm,Cj,Gr,fh,yi,jp,Iv,xv,Yw,Gw,yc,AF,Wi,Dt,Jn,Ej,Lh,Nw,Ed,Ae,Tf,oh,Jt,kf,ph,nc,Mk,ed,qj,mc,Hi,AF,ll,sk,Ik,zk,$z,tk,oz,pn,uk,Wi,dj,Wi,rk,Vq,Cp,Wi,Xi,sn,Lq,Sm,_d,hn,ml,Tt,Rt,St,nh,Em,Bm,Kg,Er,Tp,Lk,bs,ip,Lk,kd,id,kr,Lk,bs,AF,AF,vh,xh,ee,Dm,AF,AF,AF,xx,EA,of,dd,Sl,Ut,At,At,AF,Wi,AF,AF,UH,UH,UH,UH,UH,UH,UH,UH,UH,UH];var Hb=[hH,Wv,Zu,Dr,Sk,pc,hH,hH];var Ib=[gG,FC,$j,yo,Ii,Cm,Tm,gG];var Jb=[gE];var Kb=[_G,aE,oi,ue,Jv,ai,_n,aE,mj,Bj,pt,aE,Hd,jd,aE,Rk,Fl,Ek,bq,Qi,gf,Uh,aE,aE,Ai,$h,df,Uw,Tw,iD,iD,iD,iD,pd,Th,Hj,pk,at,qh,It,bf,Ke,Ke,dh,Rk,Oj,mo,rh,Rk,Qh,aE,Ul,ao,_l,Rl,sl,Mj,Gm,Lm,Fm,vn,Mn,hf,Rn,aE,aE,aE,aE,wp,Fo,Jo,Al,yj,Wh,zo,iD,iD,iD,iD,qi,wd,Oh,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G,_G];var Lb=[fG,Oy,fc,Zd,Le,ys,rj,pe,$l,Mm,fG,fG,fG,fG,fG,fG];var Mb=[wB];var Nb=[BF,Pe,rA,Xx,Cv,Jf,Ff,st,xk,Xq,au,Ak,zc,tc,Ve,Xs,hh,Bf,dc,bu,lm,el,Do,Ff,Se,Bg,Nf,te,gt,ns,og,jh,st,ei,Cl,Ls,ih,Qd,Jl,gj,pj,_o,bg,Gg,Bh,vi,Gk,rA,Ch,zg,li,rA,rA,$i,fj,Vl,Kk,_j,sd,ne,hi,uc,fj,gl,cl,fl,Yc,An,oj,An,nl,Dp,Qn,Uk,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF,BF];var Ob=[fE,bv];var Pb=[Ft];var Qb=[xu];var Rb=[ED,Og,xl,_f,pp,Fc,Re,Of,Kf,Yb,Wc,sc,Td,Wd,Bc,nu,rg,ec,Md,Tk,Bi,Ze,ED,ED,ED,ED,ED,ED,ED,ED,ED,ED];var Sb=[vB];var Tb=[SA,Pd,ql,cm,Oo,fn,Ei,SA];var Ub=[dz,Jg];var Vb=[bw,wh];var Wb=[Mu,Xl,Xl,Mu];return{__GLOBAL__sub_I_btQuickprof_cpp:mq,___cxa_can_catch:jq,___cxa_is_pointer_type:oy,___muldi3:rs,___udivdi3:AA,___uremdi3:Rr,_bitshift64Lshr:$t,_bitshift64Shl:Nt,_emscripten_bind_Anchor___destroy___0:_C,_emscripten_bind_Anchor_get_m_body_0:yF,_emscripten_bind_Anchor_get_m_c0_0:TG,_emscripten_bind_Anchor_get_m_c1_0:SG,_emscripten_bind_Anchor_get_m_c2_0:HF,_emscripten_bind_Anchor_get_m_influence_0:PF,_emscripten_bind_Anchor_get_m_local_0:KH,_emscripten_bind_Anchor_get_m_node_0:mG,_emscripten_bind_Anchor_set_m_body_1:oD,_emscripten_bind_Anchor_set_m_c0_1:_A,_emscripten_bind_Anchor_set_m_c1_1:Ur,_emscripten_bind_Anchor_set_m_c2_1:PD,_emscripten_bind_Anchor_set_m_influence_1:UD,_emscripten_bind_Anchor_set_m_local_1:Wr,_emscripten_bind_Anchor_set_m_node_1:ZD,_emscripten_bind_ClosestConvexResultCallback_ClosestConvexResultCallback_2:Es,_emscripten_bind_ClosestConvexResultCallback___destroy___0:rw,_emscripten_bind_ClosestConvexResultCallback_get_m_closestHitFraction_0:QF,_emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterGroup_0:$B,_emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterMask_0:_B,_emscripten_bind_ClosestConvexResultCallback_get_m_convexFromWorld_0:IH,_emscripten_bind_ClosestConvexResultCallback_get_m_convexToWorld_0:TG,_emscripten_bind_ClosestConvexResultCallback_get_m_hitNormalWorld_0:BD,_emscripten_bind_ClosestConvexResultCallback_get_m_hitPointWorld_0:OD,_emscripten_bind_ClosestConvexResultCallback_hasHit_0:Ox,_emscripten_bind_ClosestConvexResultCallback_set_m_closestHitFraction_1:qF,_emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterGroup_1:vz,_emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterMask_1:uz,_emscripten_bind_ClosestConvexResultCallback_set_m_convexFromWorld_1:$q,_emscripten_bind_ClosestConvexResultCallback_set_m_convexToWorld_1:gr,_emscripten_bind_ClosestConvexResultCallback_set_m_hitNormalWorld_1:ar,_emscripten_bind_ClosestConvexResultCallback_set_m_hitPointWorld_1:fr,_emscripten_bind_ClosestRayResultCallback_ClosestRayResultCallback_2:$s,_emscripten_bind_ClosestRayResultCallback___destroy___0:rw,_emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterGroup_0:oC,_emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterMask_0:xC,_emscripten_bind_ClosestRayResultCallback_get_m_collisionObject_0:KD,_emscripten_bind_ClosestRayResultCallback_get_m_hitNormalWorld_0:bF,_emscripten_bind_ClosestRayResultCallback_get_m_hitPointWorld_0:oG,_emscripten_bind_ClosestRayResultCallback_get_m_rayFromWorld_0:sE,_emscripten_bind_ClosestRayResultCallback_get_m_rayToWorld_0:CF,_emscripten_bind_ClosestRayResultCallback_hasHit_0:jy,_emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterGroup_1:Hz,_emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterMask_1:Nz,_emscripten_bind_ClosestRayResultCallback_set_m_collisionObject_1:IA,_emscripten_bind_ClosestRayResultCallback_set_m_hitNormalWorld_1:yr,_emscripten_bind_ClosestRayResultCallback_set_m_hitPointWorld_1:Er,_emscripten_bind_ClosestRayResultCallback_set_m_rayFromWorld_1:nr,_emscripten_bind_ClosestRayResultCallback_set_m_rayToWorld_1:Fr,_emscripten_bind_ConcreteContactResultCallback_ConcreteContactResultCallback_0:zt,_emscripten_bind_ConcreteContactResultCallback___destroy___0:rw,_emscripten_bind_ConcreteContactResultCallback_addSingleResult_7:Pq,_emscripten_bind_Config___destroy___0:Gy,_emscripten_bind_Config_get_citerations_0:nF,_emscripten_bind_Config_get_collisions_0:ZE,_emscripten_bind_Config_get_diterations_0:YE,_emscripten_bind_Config_get_kAHR_0:GF,_emscripten_bind_Config_get_kCHR_0:FF,_emscripten_bind_Config_get_kDF_0:VF,_emscripten_bind_Config_get_kDG_0:UF,_emscripten_bind_Config_get_kDP_0:bG,_emscripten_bind_Config_get_kKHR_0:EF,_emscripten_bind_Config_get_kLF_0:TF,_emscripten_bind_Config_get_kMT_0:SF,_emscripten_bind_Config_get_kPR_0:RF,_emscripten_bind_Config_get_kSHR_0:DF,_emscripten_bind_Config_get_kSKHR_CL_0:kF,_emscripten_bind_Config_get_kSK_SPLT_CL_0:SE,_emscripten_bind_Config_get_kSRHR_CL_0:jF,_emscripten_bind_Config_get_kSR_SPLT_CL_0:RE,_emscripten_bind_Config_get_kSSHR_CL_0:iF,_emscripten_bind_Config_get_kSS_SPLT_CL_0:KF,_emscripten_bind_Config_get_kVCF_0:QF,_emscripten_bind_Config_get_kVC_0:PF,_emscripten_bind_Config_get_maxvolume_0:dF,_emscripten_bind_Config_get_piterations_0:XE,_emscripten_bind_Config_get_timescale_0:cF,_emscripten_bind_Config_get_viterations_0:WE,_emscripten_bind_Config_set_citerations_1:CC,_emscripten_bind_Config_set_collisions_1:BC,_emscripten_bind_Config_set_diterations_1:AC,_emscripten_bind_Config_set_kAHR_1:ND,_emscripten_bind_Config_set_kCHR_1:MD,_emscripten_bind_Config_set_kDF_1:YD,_emscripten_bind_Config_set_kDG_1:UE,_emscripten_bind_Config_set_kDP_1:pF,_emscripten_bind_Config_set_kKHR_1:LD,_emscripten_bind_Config_set_kLF_1:XD,_emscripten_bind_Config_set_kMT_1:WD,_emscripten_bind_Config_set_kPR_1:VD,_emscripten_bind_Config_set_kSHR_1:pE,_emscripten_bind_Config_set_kSKHR_CL_1:nD,_emscripten_bind_Config_set_kSK_SPLT_CL_1:XC,_emscripten_bind_Config_set_kSRHR_CL_1:mD,_emscripten_bind_Config_set_kSR_SPLT_CL_1:WC,_emscripten_bind_Config_set_kSSHR_CL_1:lD,_emscripten_bind_Config_set_kSS_SPLT_CL_1:bE,_emscripten_bind_Config_set_kVCF_1:qF,_emscripten_bind_Config_set_kVC_1:UD,_emscripten_bind_Config_set_maxvolume_1:fD,_emscripten_bind_Config_set_piterations_1:zC,_emscripten_bind_Config_set_timescale_1:eD,_emscripten_bind_Config_set_viterations_1:yC,_emscripten_bind_ContactResultCallback___destroy___0:rw,_emscripten_bind_ContactResultCallback_addSingleResult_7:Pq,_emscripten_bind_ConvexResultCallback___destroy___0:rw,_emscripten_bind_ConvexResultCallback_get_m_closestHitFraction_0:QF,_emscripten_bind_ConvexResultCallback_get_m_collisionFilterGroup_0:$B,_emscripten_bind_ConvexResultCallback_get_m_collisionFilterMask_0:_B,_emscripten_bind_ConvexResultCallback_hasHit_0:Ox,_emscripten_bind_ConvexResultCallback_set_m_closestHitFraction_1:qF,_emscripten_bind_ConvexResultCallback_set_m_collisionFilterGroup_1:vz,_emscripten_bind_ConvexResultCallback_set_m_collisionFilterMask_1:uz,_emscripten_bind_LocalConvexResult_LocalConvexResult_5:Iq,_emscripten_bind_LocalConvexResult___destroy___0:_C,_emscripten_bind_LocalConvexResult_get_m_hitCollisionObject_0:mG,_emscripten_bind_LocalConvexResult_get_m_hitFraction_0:EF,_emscripten_bind_LocalConvexResult_get_m_hitNormalLocal_0:JH,_emscripten_bind_LocalConvexResult_get_m_hitPointLocal_0:OE,_emscripten_bind_LocalConvexResult_get_m_localShapeInfo_0:kE,_emscripten_bind_LocalConvexResult_set_m_hitCollisionObject_1:ZD,_emscripten_bind_LocalConvexResult_set_m_hitFraction_1:LD,_emscripten_bind_LocalConvexResult_set_m_hitNormalLocal_1:ds,_emscripten_bind_LocalConvexResult_set_m_hitPointLocal_1:tr,_emscripten_bind_LocalConvexResult_set_m_localShapeInfo_1:ZA,_emscripten_bind_LocalShapeInfo___destroy___0:_C,_emscripten_bind_LocalShapeInfo_get_m_shapePart_0:mG,_emscripten_bind_LocalShapeInfo_get_m_triangleIndex_0:kE,_emscripten_bind_LocalShapeInfo_set_m_shapePart_1:ZD,_emscripten_bind_LocalShapeInfo_set_m_triangleIndex_1:ZA,_emscripten_bind_Material___destroy___0:_C,_emscripten_bind_Material_get_m_flags_0:hF,_emscripten_bind_Material_get_m_kAST_0:bG,_emscripten_bind_Material_get_m_kLST_0:QF,_emscripten_bind_Material_get_m_kVST_0:UF,_emscripten_bind_Material_set_m_flags_1:VC,_emscripten_bind_Material_set_m_kAST_1:pF,_emscripten_bind_Material_set_m_kLST_1:qF,_emscripten_bind_Material_set_m_kVST_1:UE,_emscripten_bind_Node___destroy___0:_C,_emscripten_bind_Node_get_m_f_0:ZG,_emscripten_bind_Node_get_m_n_0:YG,_emscripten_bind_Node_get_m_v_0:XG,_emscripten_bind_Node_get_m_x_0:JH,_emscripten_bind_Node_set_m_f_1:$r,_emscripten_bind_Node_set_m_n_1:_r,_emscripten_bind_Node_set_m_v_1:Zr,_emscripten_bind_Node_set_m_x_1:ds,_emscripten_bind_RayResultCallback___destroy___0:rw,_emscripten_bind_RayResultCallback_get_m_collisionFilterGroup_0:oC,_emscripten_bind_RayResultCallback_get_m_collisionFilterMask_0:xC,_emscripten_bind_RayResultCallback_get_m_collisionObject_0:KD,_emscripten_bind_RayResultCallback_hasHit_0:jy,_emscripten_bind_RayResultCallback_set_m_collisionFilterGroup_1:Hz,_emscripten_bind_RayResultCallback_set_m_collisionFilterMask_1:Nz,_emscripten_bind_RayResultCallback_set_m_collisionObject_1:IA,_emscripten_bind_RaycastInfo___destroy___0:_C,_emscripten_bind_RaycastInfo_get_m_contactNormalWS_0:bI,_emscripten_bind_RaycastInfo_get_m_contactPointWS_0:rF,_emscripten_bind_RaycastInfo_get_m_groundObject_0:XE,_emscripten_bind_RaycastInfo_get_m_hardPointWS_0:CF,_emscripten_bind_RaycastInfo_get_m_isInContact_0:dD,_emscripten_bind_RaycastInfo_get_m_suspensionLength_0:SF,_emscripten_bind_RaycastInfo_get_m_wheelAxleWS_0:oG,_emscripten_bind_RaycastInfo_get_m_wheelDirectionWS_0:bF,_emscripten_bind_RaycastInfo_set_m_contactNormalWS_1:Xr,_emscripten_bind_RaycastInfo_set_m_contactPointWS_1:Cr,_emscripten_bind_RaycastInfo_set_m_groundObject_1:zC,_emscripten_bind_RaycastInfo_set_m_hardPointWS_1:Fr,_emscripten_bind_RaycastInfo_set_m_isInContact_1:PA,_emscripten_bind_RaycastInfo_set_m_suspensionLength_1:WD,_emscripten_bind_RaycastInfo_set_m_wheelAxleWS_1:Er,_emscripten_bind_RaycastInfo_set_m_wheelDirectionWS_1:yr,_emscripten_bind_VoidPtr___destroy___0:_C,_emscripten_bind_btActionInterface___destroy___0:rw,_emscripten_bind_btActionInterface_updateAction_2:tv,_emscripten_bind_btAxisSweep3___destroy___0:rw,_emscripten_bind_btAxisSweep3_btAxisSweep3_2:As,_emscripten_bind_btAxisSweep3_btAxisSweep3_3:Tr,_emscripten_bind_btAxisSweep3_btAxisSweep3_4:xr,_emscripten_bind_btAxisSweep3_btAxisSweep3_5:Zq,_emscripten_bind_btBoxShape___destroy___0:rw,_emscripten_bind_btBoxShape_btBoxShape_1:Mh,_emscripten_bind_btBoxShape_calculateLocalInertia_2:av,_emscripten_bind_btBoxShape_getLocalScaling_0:Ty,_emscripten_bind_btBoxShape_getMargin_0:tz,_emscripten_bind_btBoxShape_setLocalScaling_1:Sw,_emscripten_bind_btBoxShape_setMargin_1:Lx,_emscripten_bind_btBroadphaseInterface___destroy___0:rw,_emscripten_bind_btBvhTriangleMeshShape___destroy___0:rw,_emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_2:Os,_emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_3:fs,_emscripten_bind_btBvhTriangleMeshShape_calculateLocalInertia_2:av,_emscripten_bind_btBvhTriangleMeshShape_getLocalScaling_0:Ty,_emscripten_bind_btBvhTriangleMeshShape_setLocalScaling_1:Sw,_emscripten_bind_btCapsuleShapeX___destroy___0:rw,_emscripten_bind_btCapsuleShapeX_btCapsuleShapeX_2:kn,_emscripten_bind_btCapsuleShapeX_calculateLocalInertia_2:av,_emscripten_bind_btCapsuleShapeX_getHalfHeight_0:tB,_emscripten_bind_btCapsuleShapeX_getLocalScaling_0:Ty,_emscripten_bind_btCapsuleShapeX_getMargin_0:tz,_emscripten_bind_btCapsuleShapeX_getRadius_0:UC,_emscripten_bind_btCapsuleShapeX_getUpAxis_0:ZC,_emscripten_bind_btCapsuleShapeX_setLocalScaling_1:Sw,_emscripten_bind_btCapsuleShapeX_setMargin_1:Lx,_emscripten_bind_btCapsuleShapeZ___destroy___0:rw,_emscripten_bind_btCapsuleShapeZ_btCapsuleShapeZ_2:jn,_emscripten_bind_btCapsuleShapeZ_calculateLocalInertia_2:av,_emscripten_bind_btCapsuleShapeZ_getHalfHeight_0:tB,_emscripten_bind_btCapsuleShapeZ_getLocalScaling_0:Ty,_emscripten_bind_btCapsuleShapeZ_getMargin_0:tz,_emscripten_bind_btCapsuleShapeZ_getRadius_0:UC,_emscripten_bind_btCapsuleShapeZ_getUpAxis_0:ZC,_emscripten_bind_btCapsuleShapeZ_setLocalScaling_1:Sw,_emscripten_bind_btCapsuleShapeZ_setMargin_1:Lx,_emscripten_bind_btCapsuleShape___destroy___0:rw,_emscripten_bind_btCapsuleShape_btCapsuleShape_2:ln,_emscripten_bind_btCapsuleShape_calculateLocalInertia_2:av,_emscripten_bind_btCapsuleShape_getHalfHeight_0:tB,_emscripten_bind_btCapsuleShape_getLocalScaling_0:Ty,_emscripten_bind_btCapsuleShape_getMargin_0:tz,_emscripten_bind_btCapsuleShape_getRadius_0:UC,_emscripten_bind_btCapsuleShape_getUpAxis_0:ZC,_emscripten_bind_btCapsuleShape_setLocalScaling_1:Sw,_emscripten_bind_btCapsuleShape_setMargin_1:Lx,_emscripten_bind_btCollisionConfiguration___destroy___0:rw,_emscripten_bind_btCollisionDispatcher___destroy___0:rw,_emscripten_bind_btCollisionDispatcher_btCollisionDispatcher_1:Xk,_emscripten_bind_btCollisionDispatcher_getManifoldByIndexInternal_1:Uv,_emscripten_bind_btCollisionDispatcher_getNumManifolds_0:wz,_emscripten_bind_btCollisionObject___destroy___0:pw,_emscripten_bind_btCollisionObject_activate_0:xt,_emscripten_bind_btCollisionObject_activate_1:ms,_emscripten_bind_btCollisionObject_forceActivationState_1:NA,_emscripten_bind_btCollisionObject_getCollisionFlags_0:fC,_emscripten_bind_btCollisionObject_getCollisionShape_0:eC,_emscripten_bind_btCollisionObject_getUserIndex_0:IB,_emscripten_bind_btCollisionObject_getUserPointer_0:JC,_emscripten_bind_btCollisionObject_getWorldTransform_0:iE,_emscripten_bind_btCollisionObject_isActive_0:dA,_emscripten_bind_btCollisionObject_isKinematicObject_0:ay,_emscripten_bind_btCollisionObject_isStaticObject_0:Py,_emscripten_bind_btCollisionObject_isStaticOrKinematicObject_0:Jw,_emscripten_bind_btCollisionObject_setActivationState_1:Pv,_emscripten_bind_btCollisionObject_setAnisotropicFriction_2:_u,_emscripten_bind_btCollisionObject_setCcdMotionThreshold_1:Zx,_emscripten_bind_btCollisionObject_setCcdSweptSphereRadius_1:Ix,_emscripten_bind_btCollisionObject_setCollisionFlags_1:Cy,_emscripten_bind_btCollisionObject_setCollisionShape_1:Dw,_emscripten_bind_btCollisionObject_setContactProcessingThreshold_1:dy,_emscripten_bind_btCollisionObject_setFriction_1:cA,_emscripten_bind_btCollisionObject_setRestitution_1:rz,_emscripten_bind_btCollisionObject_setRollingFriction_1:Ky,_emscripten_bind_btCollisionObject_setUserIndex_1:zz,_emscripten_bind_btCollisionObject_setUserPointer_1:_y,_emscripten_bind_btCollisionObject_setWorldTransform_1:mx,_emscripten_bind_btCollisionShape___destroy___0:rw,_emscripten_bind_btCollisionShape_calculateLocalInertia_2:av,_emscripten_bind_btCollisionShape_getLocalScaling_0:Ty,_emscripten_bind_btCollisionShape_getMargin_0:tz,_emscripten_bind_btCollisionShape_setLocalScaling_1:Sw,_emscripten_bind_btCollisionShape_setMargin_1:Lx,_emscripten_bind_btCollisionWorld___destroy___0:rw,_emscripten_bind_btCollisionWorld_addCollisionObject_1:Gv,_emscripten_bind_btCollisionWorld_addCollisionObject_2:Eu,_emscripten_bind_btCollisionWorld_addCollisionObject_3:Lt,_emscripten_bind_btCollisionWorld_contactPairTest_3:Dj,_emscripten_bind_btCollisionWorld_contactTest_2:Xm,_emscripten_bind_btCollisionWorld_convexSweepTest_5:pr,_emscripten_bind_btCollisionWorld_getBroadphase_0:hC,_emscripten_bind_btCollisionWorld_getDispatchInfo_0:AB,_emscripten_bind_btCollisionWorld_getDispatcher_0:gC,_emscripten_bind_btCollisionWorld_getPairCache_0:Xy,_emscripten_bind_btCollisionWorld_rayTest_3:pu,_emscripten_bind_btCollisionWorld_removeCollisionObject_1:dw,_emscripten_bind_btCollisionWorld_updateSingleAabb_1:Fw,_emscripten_bind_btCompoundShape___destroy___0:rw,_emscripten_bind_btCompoundShape_addChildShape_2:Gd,_emscripten_bind_btCompoundShape_btCompoundShape_0:nj,_emscripten_bind_btCompoundShape_btCompoundShape_1:cj,_emscripten_bind_btCompoundShape_calculateLocalInertia_2:av,_emscripten_bind_btCompoundShape_getChildShape_1:Uy,_emscripten_bind_btCompoundShape_getLocalScaling_0:Ty,_emscripten_bind_btCompoundShape_getMargin_0:tz,_emscripten_bind_btCompoundShape_getNumChildShapes_0:jA,_emscripten_bind_btCompoundShape_removeChildShapeByIndex_1:ix,_emscripten_bind_btCompoundShape_setLocalScaling_1:Sw,_emscripten_bind_btCompoundShape_setMargin_1:Lx,_emscripten_bind_btConcaveShape___destroy___0:rw,_emscripten_bind_btConcaveShape_calculateLocalInertia_2:av,_emscripten_bind_btConcaveShape_getLocalScaling_0:Ty,_emscripten_bind_btConcaveShape_setLocalScaling_1:Sw,_emscripten_bind_btConeShapeX___destroy___0:rw,_emscripten_bind_btConeShapeX_btConeShapeX_2:gm,_emscripten_bind_btConeShapeX_calculateLocalInertia_2:av,_emscripten_bind_btConeShapeX_getLocalScaling_0:Ty,_emscripten_bind_btConeShapeX_setLocalScaling_1:Sw,_emscripten_bind_btConeShapeZ___destroy___0:rw,_emscripten_bind_btConeShapeZ_btConeShapeZ_2:fm,_emscripten_bind_btConeShapeZ_calculateLocalInertia_2:av,_emscripten_bind_btConeShapeZ_getLocalScaling_0:Ty,_emscripten_bind_btConeShapeZ_setLocalScaling_1:Sw,_emscripten_bind_btConeShape___destroy___0:rw,_emscripten_bind_btConeShape_btConeShape_2:im,_emscripten_bind_btConeShape_calculateLocalInertia_2:av,_emscripten_bind_btConeShape_getLocalScaling_0:Ty,_emscripten_bind_btConeShape_setLocalScaling_1:Sw,_emscripten_bind_btConeTwistConstraint___destroy___0:rw,_emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_2:Hg,_emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_4:ng,_emscripten_bind_btConeTwistConstraint_enableFeedback_1:ty,_emscripten_bind_btConeTwistConstraint_enableMotor_1:ny,_emscripten_bind_btConeTwistConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btConeTwistConstraint_getParam_2:ev,_emscripten_bind_btConeTwistConstraint_setAngularOnly_1:Kx,_emscripten_bind_btConeTwistConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btConeTwistConstraint_setDamping_1:Sy,_emscripten_bind_btConeTwistConstraint_setLimit_2:dx,_emscripten_bind_btConeTwistConstraint_setMaxMotorImpulseNormalized_1:Tv,_emscripten_bind_btConeTwistConstraint_setMaxMotorImpulse_1:ox,_emscripten_bind_btConeTwistConstraint_setMotorTargetInConstraintSpace_1:wu,_emscripten_bind_btConeTwistConstraint_setMotorTarget_1:Xh,_emscripten_bind_btConeTwistConstraint_setParam_3:vu,_emscripten_bind_btConstraintSetting___destroy___0:_C,_emscripten_bind_btConstraintSetting_btConstraintSetting_0:Fy,_emscripten_bind_btConstraintSetting_get_m_damping_0:QF,_emscripten_bind_btConstraintSetting_get_m_impulseClamp_0:bG,_emscripten_bind_btConstraintSetting_get_m_tau_0:LE,_emscripten_bind_btConstraintSetting_set_m_damping_1:qF,_emscripten_bind_btConstraintSetting_set_m_impulseClamp_1:pF,_emscripten_bind_btConstraintSetting_set_m_tau_1:LF,_emscripten_bind_btConstraintSolver___destroy___0:rw,_emscripten_bind_btContactSolverInfo___destroy___0:_C,_emscripten_bind_btContactSolverInfo_get_m_numIterations_0:yF,_emscripten_bind_btContactSolverInfo_get_m_splitImpulsePenetrationThreshold_0:_z,_emscripten_bind_btContactSolverInfo_get_m_splitImpulse_0:BB,_emscripten_bind_btContactSolverInfo_set_m_numIterations_1:oD,_emscripten_bind_btContactSolverInfo_set_m_splitImpulsePenetrationThreshold_1:Ax,_emscripten_bind_btContactSolverInfo_set_m_splitImpulse_1:Sz,_emscripten_bind_btConvexHullShape___destroy___0:rw,_emscripten_bind_btConvexHullShape_addPoint_1:my,_emscripten_bind_btConvexHullShape_addPoint_2:Aw,_emscripten_bind_btConvexHullShape_btConvexHullShape_0:nw,_emscripten_bind_btConvexHullShape_calculateLocalInertia_2:av,_emscripten_bind_btConvexHullShape_getLocalScaling_0:Ty,_emscripten_bind_btConvexHullShape_getMargin_0:tz,_emscripten_bind_btConvexHullShape_setLocalScaling_1:Sw,_emscripten_bind_btConvexHullShape_setMargin_1:Lx,_emscripten_bind_btConvexShape___destroy___0:rw,_emscripten_bind_btConvexShape_calculateLocalInertia_2:av,_emscripten_bind_btConvexShape_getLocalScaling_0:Ty,_emscripten_bind_btConvexShape_getMargin_0:tz,_emscripten_bind_btConvexShape_setLocalScaling_1:Sw,_emscripten_bind_btConvexShape_setMargin_1:Lx,_emscripten_bind_btConvexTriangleMeshShape___destroy___0:rw,_emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_1:yl,_emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_2:hl,_emscripten_bind_btConvexTriangleMeshShape_calculateLocalInertia_2:av,_emscripten_bind_btConvexTriangleMeshShape_getLocalScaling_0:Ty,_emscripten_bind_btConvexTriangleMeshShape_getMargin_0:tz,_emscripten_bind_btConvexTriangleMeshShape_setLocalScaling_1:Sw,_emscripten_bind_btConvexTriangleMeshShape_setMargin_1:Lx,_emscripten_bind_btCylinderShapeX___destroy___0:rw,_emscripten_bind_btCylinderShapeX_btCylinderShapeX_1:jt,_emscripten_bind_btCylinderShapeX_calculateLocalInertia_2:av,_emscripten_bind_btCylinderShapeX_getLocalScaling_0:Ty,_emscripten_bind_btCylinderShapeX_getMargin_0:tz,_emscripten_bind_btCylinderShapeX_setLocalScaling_1:Sw,_emscripten_bind_btCylinderShapeX_setMargin_1:Lx,_emscripten_bind_btCylinderShapeZ___destroy___0:rw,_emscripten_bind_btCylinderShapeZ_btCylinderShapeZ_1:it,_emscripten_bind_btCylinderShapeZ_calculateLocalInertia_2:av,_emscripten_bind_btCylinderShapeZ_getLocalScaling_0:Ty,_emscripten_bind_btCylinderShapeZ_getMargin_0:tz,_emscripten_bind_btCylinderShapeZ_setLocalScaling_1:Sw,_emscripten_bind_btCylinderShapeZ_setMargin_1:Lx,_emscripten_bind_btCylinderShape___destroy___0:rw,_emscripten_bind_btCylinderShape_btCylinderShape_1:aw,_emscripten_bind_btCylinderShape_calculateLocalInertia_2:av,_emscripten_bind_btCylinderShape_getLocalScaling_0:Ty,_emscripten_bind_btCylinderShape_getMargin_0:tz,_emscripten_bind_btCylinderShape_setLocalScaling_1:Sw,_emscripten_bind_btCylinderShape_setMargin_1:Lx,_emscripten_bind_btDbvtBroadphase___destroy___0:rw,_emscripten_bind_btDbvtBroadphase_btDbvtBroadphase_0:Rw,_emscripten_bind_btDefaultCollisionConfiguration___destroy___0:rw,_emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_0:aq,_emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_1:Qs,_emscripten_bind_btDefaultCollisionConstructionInfo___destroy___0:_C,_emscripten_bind_btDefaultCollisionConstructionInfo_btDefaultCollisionConstructionInfo_0:Yu,_emscripten_bind_btDefaultMotionState___destroy___0:rw,_emscripten_bind_btDefaultMotionState_btDefaultMotionState_0:Jr,_emscripten_bind_btDefaultMotionState_btDefaultMotionState_1:ks,_emscripten_bind_btDefaultMotionState_btDefaultMotionState_2:nt,_emscripten_bind_btDefaultMotionState_getWorldTransform_1:yw,_emscripten_bind_btDefaultMotionState_get_m_graphicsWorldTrans_0:KH,_emscripten_bind_btDefaultMotionState_setWorldTransform_1:Dw,_emscripten_bind_btDefaultMotionState_set_m_graphicsWorldTrans_1:$x,_emscripten_bind_btDefaultSoftBodySolver___destroy___0:rw,_emscripten_bind_btDefaultSoftBodySolver_btDefaultSoftBodySolver_0:Pp,_emscripten_bind_btDefaultVehicleRaycaster___destroy___0:rw,_emscripten_bind_btDefaultVehicleRaycaster_btDefaultVehicleRaycaster_1:Iu,_emscripten_bind_btDefaultVehicleRaycaster_castRay_3:cu,_emscripten_bind_btDiscreteDynamicsWorld___destroy___0:rw,_emscripten_bind_btDiscreteDynamicsWorld_addAction_1:Yw,_emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_1:$u,_emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_2:lu,_emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_3:Lt,_emscripten_bind_btDiscreteDynamicsWorld_addConstraint_1:Sv,_emscripten_bind_btDiscreteDynamicsWorld_addConstraint_2:Ju,_emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_1:gw,_emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_3:Ht,_emscripten_bind_btDiscreteDynamicsWorld_btDiscreteDynamicsWorld_4:oq,_emscripten_bind_btDiscreteDynamicsWorld_contactPairTest_3:Dj,_emscripten_bind_btDiscreteDynamicsWorld_contactTest_2:Xm,_emscripten_bind_btDiscreteDynamicsWorld_convexSweepTest_5:pr,_emscripten_bind_btDiscreteDynamicsWorld_getBroadphase_0:hC,_emscripten_bind_btDiscreteDynamicsWorld_getDispatchInfo_0:AB,_emscripten_bind_btDiscreteDynamicsWorld_getDispatcher_0:gC,_emscripten_bind_btDiscreteDynamicsWorld_getGravity_0:to,_emscripten_bind_btDiscreteDynamicsWorld_getPairCache_0:Xy,_emscripten_bind_btDiscreteDynamicsWorld_getSolverInfo_0:fB,_emscripten_bind_btDiscreteDynamicsWorld_rayTest_3:pu,_emscripten_bind_btDiscreteDynamicsWorld_removeAction_1:Gw,_emscripten_bind_btDiscreteDynamicsWorld_removeCollisionObject_1:dw,_emscripten_bind_btDiscreteDynamicsWorld_removeConstraint_1:Vv,_emscripten_bind_btDiscreteDynamicsWorld_removeRigidBody_1:Yv,_emscripten_bind_btDiscreteDynamicsWorld_setGravity_1:mw,_emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_1:Hu,_emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_2:Mt,_emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_3:Qt,_emscripten_bind_btDiscreteDynamicsWorld_updateSingleAabb_1:Fw,_emscripten_bind_btDispatcherInfo___destroy___0:_C,_emscripten_bind_btDispatcherInfo_get_m_allowedCcdPenetration_0:VF,_emscripten_bind_btDispatcherInfo_get_m_convexConservativeDistanceThreshold_0:FF,_emscripten_bind_btDispatcherInfo_get_m_dispatchFunc_0:KD,_emscripten_bind_btDispatcherInfo_get_m_enableSPU_0:KC,_emscripten_bind_btDispatcherInfo_get_m_enableSatConvex_0:FB,_emscripten_bind_btDispatcherInfo_get_m_stepCount_0:kE,_emscripten_bind_btDispatcherInfo_get_m_timeOfImpact_0:UF,_emscripten_bind_btDispatcherInfo_get_m_timeStep_0:LE,_emscripten_bind_btDispatcherInfo_get_m_useContinuous_0:ZB,_emscripten_bind_btDispatcherInfo_get_m_useConvexConservativeDistanceUtil_0:Bz,_emscripten_bind_btDispatcherInfo_get_m_useEpa_0:cD,_emscripten_bind_btDispatcherInfo_set_m_allowedCcdPenetration_1:YD,_emscripten_bind_btDispatcherInfo_set_m_convexConservativeDistanceThreshold_1:MD,_emscripten_bind_btDispatcherInfo_set_m_dispatchFunc_1:IA,_emscripten_bind_btDispatcherInfo_set_m_enableSPU_1:CA,_emscripten_bind_btDispatcherInfo_set_m_enableSatConvex_1:Zz,_emscripten_bind_btDispatcherInfo_set_m_stepCount_1:ZA,_emscripten_bind_btDispatcherInfo_set_m_timeOfImpact_1:UE,_emscripten_bind_btDispatcherInfo_set_m_timeStep_1:LF,_emscripten_bind_btDispatcherInfo_set_m_useContinuous_1:iA,_emscripten_bind_btDispatcherInfo_set_m_useConvexConservativeDistanceUtil_1:iy,_emscripten_bind_btDispatcherInfo_set_m_useEpa_1:OA,_emscripten_bind_btDispatcher___destroy___0:rw,_emscripten_bind_btDispatcher_getManifoldByIndexInternal_1:Uv,_emscripten_bind_btDispatcher_getNumManifolds_0:wz,_emscripten_bind_btDynamicsWorld___destroy___0:rw,_emscripten_bind_btDynamicsWorld_addAction_1:Yw,_emscripten_bind_btDynamicsWorld_addCollisionObject_1:Gv,_emscripten_bind_btDynamicsWorld_addCollisionObject_2:Eu,_emscripten_bind_btDynamicsWorld_addCollisionObject_3:Lt,_emscripten_bind_btDynamicsWorld_contactPairTest_3:Dj,_emscripten_bind_btDynamicsWorld_contactTest_2:Xm,_emscripten_bind_btDynamicsWorld_convexSweepTest_5:pr,_emscripten_bind_btDynamicsWorld_getBroadphase_0:hC,_emscripten_bind_btDynamicsWorld_getDispatchInfo_0:AB,_emscripten_bind_btDynamicsWorld_getDispatcher_0:gC,_emscripten_bind_btDynamicsWorld_getPairCache_0:Xy,_emscripten_bind_btDynamicsWorld_getSolverInfo_0:fB,_emscripten_bind_btDynamicsWorld_rayTest_3:pu,_emscripten_bind_btDynamicsWorld_removeAction_1:Gw,_emscripten_bind_btDynamicsWorld_removeCollisionObject_1:dw,_emscripten_bind_btDynamicsWorld_updateSingleAabb_1:Fw,_emscripten_bind_btFixedConstraint___destroy___0:rw,_emscripten_bind_btFixedConstraint_btFixedConstraint_4:Yh,_emscripten_bind_btFixedConstraint_enableFeedback_1:ty,_emscripten_bind_btFixedConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btFixedConstraint_getParam_2:ev,_emscripten_bind_btFixedConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btFixedConstraint_setParam_3:vu,_emscripten_bind_btGeneric6DofConstraint___destroy___0:rw,_emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_3:Ir,_emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_5:zq,_emscripten_bind_btGeneric6DofConstraint_enableFeedback_1:ty,_emscripten_bind_btGeneric6DofConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btGeneric6DofConstraint_getParam_2:ev,_emscripten_bind_btGeneric6DofConstraint_setAngularLowerLimit_1:Fv,_emscripten_bind_btGeneric6DofConstraint_setAngularUpperLimit_1:Ev,_emscripten_bind_btGeneric6DofConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btGeneric6DofConstraint_setLinearLowerLimit_1:Rv,_emscripten_bind_btGeneric6DofConstraint_setLinearUpperLimit_1:Qv,_emscripten_bind_btGeneric6DofConstraint_setParam_3:vu,_emscripten_bind_btGeneric6DofSpringConstraint___destroy___0:rw,_emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_3:wk,_emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_5:nk,_emscripten_bind_btGeneric6DofSpringConstraint_enableFeedback_1:ty,_emscripten_bind_btGeneric6DofSpringConstraint_enableSpring_2:ir,_emscripten_bind_btGeneric6DofSpringConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btGeneric6DofSpringConstraint_getParam_2:ev,_emscripten_bind_btGeneric6DofSpringConstraint_setAngularLowerLimit_1:Fv,_emscripten_bind_btGeneric6DofSpringConstraint_setAngularUpperLimit_1:Ev,_emscripten_bind_btGeneric6DofSpringConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btGeneric6DofSpringConstraint_setDamping_2:hx,_emscripten_bind_btGeneric6DofSpringConstraint_setLinearLowerLimit_1:Rv,_emscripten_bind_btGeneric6DofSpringConstraint_setLinearUpperLimit_1:Qv,_emscripten_bind_btGeneric6DofSpringConstraint_setParam_3:vu,_emscripten_bind_btGeneric6DofSpringConstraint_setStiffness_2:$w,_emscripten_bind_btGhostObject___destroy___0:pw,_emscripten_bind_btGhostObject_activate_0:xt,_emscripten_bind_btGhostObject_activate_1:ms,_emscripten_bind_btGhostObject_btGhostObject_0:Fi,_emscripten_bind_btGhostObject_forceActivationState_1:NA,_emscripten_bind_btGhostObject_getCollisionFlags_0:fC,_emscripten_bind_btGhostObject_getCollisionShape_0:eC,_emscripten_bind_btGhostObject_getNumOverlappingObjects_0:ez,_emscripten_bind_btGhostObject_getOverlappingObject_1:Rx,_emscripten_bind_btGhostObject_getUserIndex_0:IB,_emscripten_bind_btGhostObject_getUserPointer_0:JC,_emscripten_bind_btGhostObject_getWorldTransform_0:iE,_emscripten_bind_btGhostObject_isActive_0:dA,_emscripten_bind_btGhostObject_isKinematicObject_0:ay,_emscripten_bind_btGhostObject_isStaticObject_0:Py,_emscripten_bind_btGhostObject_isStaticOrKinematicObject_0:Jw,_emscripten_bind_btGhostObject_setActivationState_1:Pv,_emscripten_bind_btGhostObject_setAnisotropicFriction_2:_u,_emscripten_bind_btGhostObject_setCcdMotionThreshold_1:Zx,_emscripten_bind_btGhostObject_setCcdSweptSphereRadius_1:Ix,_emscripten_bind_btGhostObject_setCollisionFlags_1:Cy,_emscripten_bind_btGhostObject_setCollisionShape_1:Dw,_emscripten_bind_btGhostObject_setContactProcessingThreshold_1:dy,_emscripten_bind_btGhostObject_setFriction_1:cA,_emscripten_bind_btGhostObject_setRestitution_1:rz,_emscripten_bind_btGhostObject_setRollingFriction_1:Ky,_emscripten_bind_btGhostObject_setUserIndex_1:zz,_emscripten_bind_btGhostObject_setUserPointer_1:_y,_emscripten_bind_btGhostObject_setWorldTransform_1:mx,_emscripten_bind_btGhostPairCallback___destroy___0:rw,_emscripten_bind_btGhostPairCallback_btGhostPairCallback_0:Ny,_emscripten_bind_btHeightfieldTerrainShape___destroy___0:rw,_emscripten_bind_btHeightfieldTerrainShape_btHeightfieldTerrainShape_9:Dg,_emscripten_bind_btHeightfieldTerrainShape_calculateLocalInertia_2:av,_emscripten_bind_btHeightfieldTerrainShape_getLocalScaling_0:Ty,_emscripten_bind_btHeightfieldTerrainShape_getMargin_0:tz,_emscripten_bind_btHeightfieldTerrainShape_setLocalScaling_1:Sw,_emscripten_bind_btHeightfieldTerrainShape_setMargin_1:Lx,_emscripten_bind_btHingeConstraint___destroy___0:rw,_emscripten_bind_btHingeConstraint_btHingeConstraint_2:Yf,_emscripten_bind_btHingeConstraint_btHingeConstraint_3:Wf,_emscripten_bind_btHingeConstraint_btHingeConstraint_4:vg,_emscripten_bind_btHingeConstraint_btHingeConstraint_5:tg,_emscripten_bind_btHingeConstraint_btHingeConstraint_6:wq,_emscripten_bind_btHingeConstraint_btHingeConstraint_7:Yp,_emscripten_bind_btHingeConstraint_enableAngularMotor_3:Qu,_emscripten_bind_btHingeConstraint_enableFeedback_1:ty,_emscripten_bind_btHingeConstraint_enableMotor_1:bz,_emscripten_bind_btHingeConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btHingeConstraint_getParam_2:ev,_emscripten_bind_btHingeConstraint_setAngularOnly_1:yy,_emscripten_bind_btHingeConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btHingeConstraint_setLimit_4:Ou,_emscripten_bind_btHingeConstraint_setLimit_5:hu,_emscripten_bind_btHingeConstraint_setMaxMotorImpulse_1:Wx,_emscripten_bind_btHingeConstraint_setMotorTarget_2:Nj,_emscripten_bind_btHingeConstraint_setParam_3:vu,_emscripten_bind_btKinematicCharacterController___destroy___0:rw,_emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_3:ak,_emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_4:Wj,_emscripten_bind_btKinematicCharacterController_canJump_0:Gx,_emscripten_bind_btKinematicCharacterController_getGhostObject_0:KD,_emscripten_bind_btKinematicCharacterController_getGravity_0:DF,_emscripten_bind_btKinematicCharacterController_getMaxSlope_0:FF,_emscripten_bind_btKinematicCharacterController_jump_0:_x,_emscripten_bind_btKinematicCharacterController_onGround_0:Hy,_emscripten_bind_btKinematicCharacterController_playerStep_2:Ku,_emscripten_bind_btKinematicCharacterController_preStep_1:$v,_emscripten_bind_btKinematicCharacterController_setFallSpeed_1:UD,_emscripten_bind_btKinematicCharacterController_setGravity_1:pE,_emscripten_bind_btKinematicCharacterController_setJumpSpeed_1:YD,_emscripten_bind_btKinematicCharacterController_setMaxJumpHeight_1:WD,_emscripten_bind_btKinematicCharacterController_setMaxSlope_1:qw,_emscripten_bind_btKinematicCharacterController_setUpAxis_1:cx,_emscripten_bind_btKinematicCharacterController_setUpInterpolate_1:sv,_emscripten_bind_btKinematicCharacterController_setUseGhostSweepTest_1:uv,_emscripten_bind_btKinematicCharacterController_setVelocityForTimeInterval_2:_t,_emscripten_bind_btKinematicCharacterController_setWalkDirection_1:rv,_emscripten_bind_btKinematicCharacterController_updateAction_2:tv,_emscripten_bind_btKinematicCharacterController_warp_1:iw,_emscripten_bind_btManifoldPoint___destroy___0:_C,_emscripten_bind_btManifoldPoint_getAppliedImpulse_0:My,_emscripten_bind_btManifoldPoint_getDistance_0:nz,_emscripten_bind_btManifoldPoint_getPositionWorldOnA_0:ID,_emscripten_bind_btManifoldPoint_getPositionWorldOnB_0:Mz,_emscripten_bind_btManifoldPoint_get_m_localPointA_0:bI,_emscripten_bind_btManifoldPoint_get_m_localPointB_0:rF,_emscripten_bind_btManifoldPoint_get_m_normalWorldOnB_0:QE,_emscripten_bind_btManifoldPoint_get_m_positionWorldOnA_0:eH,_emscripten_bind_btManifoldPoint_get_m_positionWorldOnB_0:iG,_emscripten_bind_btManifoldPoint_set_m_localPointA_1:Xr,_emscripten_bind_btManifoldPoint_set_m_localPointB_1:Cr,_emscripten_bind_btManifoldPoint_set_m_normalWorldOnB_1:wr,_emscripten_bind_btManifoldPoint_set_m_positionWorldOnA_1:Mr,_emscripten_bind_btManifoldPoint_set_m_positionWorldOnB_1:rr,_emscripten_bind_btMatrix3x3___destroy___0:_C,_emscripten_bind_btMatrix3x3_getRotation_1:Ry,_emscripten_bind_btMatrix3x3_getRow_1:dq,_emscripten_bind_btMatrix3x3_setEulerZYX_3:Mw,_emscripten_bind_btMotionState___destroy___0:rw,_emscripten_bind_btMotionState_getWorldTransform_1:yw,_emscripten_bind_btMotionState_setWorldTransform_1:Dw,_emscripten_bind_btOverlappingPairCache___destroy___0:rw,_emscripten_bind_btOverlappingPairCache_setInternalGhostPairCallback_1:Vv,_emscripten_bind_btOverlappingPairCallback___destroy___0:rw,_emscripten_bind_btPairCachingGhostObject___destroy___0:pw,_emscripten_bind_btPairCachingGhostObject_activate_0:xt,_emscripten_bind_btPairCachingGhostObject_activate_1:ms,_emscripten_bind_btPairCachingGhostObject_btPairCachingGhostObject_0:Jh,_emscripten_bind_btPairCachingGhostObject_forceActivationState_1:NA,_emscripten_bind_btPairCachingGhostObject_getCollisionFlags_0:fC,_emscripten_bind_btPairCachingGhostObject_getCollisionShape_0:eC,_emscripten_bind_btPairCachingGhostObject_getNumOverlappingObjects_0:ez,_emscripten_bind_btPairCachingGhostObject_getOverlappingObject_1:Rx,_emscripten_bind_btPairCachingGhostObject_getUserIndex_0:IB,_emscripten_bind_btPairCachingGhostObject_getUserPointer_0:JC,_emscripten_bind_btPairCachingGhostObject_getWorldTransform_0:iE,_emscripten_bind_btPairCachingGhostObject_isActive_0:dA,_emscripten_bind_btPairCachingGhostObject_isKinematicObject_0:ay,_emscripten_bind_btPairCachingGhostObject_isStaticObject_0:Py,_emscripten_bind_btPairCachingGhostObject_isStaticOrKinematicObject_0:Jw,_emscripten_bind_btPairCachingGhostObject_setActivationState_1:Pv,_emscripten_bind_btPairCachingGhostObject_setAnisotropicFriction_2:_u,_emscripten_bind_btPairCachingGhostObject_setCcdMotionThreshold_1:Zx,_emscripten_bind_btPairCachingGhostObject_setCcdSweptSphereRadius_1:Ix,_emscripten_bind_btPairCachingGhostObject_setCollisionFlags_1:Cy,_emscripten_bind_btPairCachingGhostObject_setCollisionShape_1:Dw,_emscripten_bind_btPairCachingGhostObject_setContactProcessingThreshold_1:dy,_emscripten_bind_btPairCachingGhostObject_setFriction_1:cA,_emscripten_bind_btPairCachingGhostObject_setRestitution_1:rz,_emscripten_bind_btPairCachingGhostObject_setRollingFriction_1:Ky,_emscripten_bind_btPairCachingGhostObject_setUserIndex_1:zz,_emscripten_bind_btPairCachingGhostObject_setUserPointer_1:_y,_emscripten_bind_btPairCachingGhostObject_setWorldTransform_1:mx,_emscripten_bind_btPersistentManifold___destroy___0:xA,_emscripten_bind_btPersistentManifold_btPersistentManifold_0:Li,_emscripten_bind_btPersistentManifold_getBody0_0:YB,_emscripten_bind_btPersistentManifold_getBody1_0:XB,_emscripten_bind_btPersistentManifold_getContactPoint_1:zx,_emscripten_bind_btPersistentManifold_getNumContacts_0:YA,_emscripten_bind_btPoint2PointConstraint___destroy___0:rw,_emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_2:Kj,_emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_4:bk,_emscripten_bind_btPoint2PointConstraint_enableFeedback_1:ty,_emscripten_bind_btPoint2PointConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btPoint2PointConstraint_getParam_2:ev,_emscripten_bind_btPoint2PointConstraint_getPivotInA_0:Lz,_emscripten_bind_btPoint2PointConstraint_getPivotInB_0:Kz,_emscripten_bind_btPoint2PointConstraint_get_m_setting_0:KE,_emscripten_bind_btPoint2PointConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btPoint2PointConstraint_setParam_3:vu,_emscripten_bind_btPoint2PointConstraint_setPivotA_1:vx,_emscripten_bind_btPoint2PointConstraint_setPivotB_1:ux,_emscripten_bind_btPoint2PointConstraint_set_m_setting_1:Ks,_emscripten_bind_btQuadWord___destroy___0:_C,_emscripten_bind_btQuadWord_setW_1:bD,_emscripten_bind_btQuadWord_setX_1:wD,_emscripten_bind_btQuadWord_setY_1:vD,_emscripten_bind_btQuadWord_setZ_1:uD,_emscripten_bind_btQuadWord_w_0:HD,_emscripten_bind_btQuadWord_x_0:JE,_emscripten_bind_btQuadWord_y_0:GD,_emscripten_bind_btQuadWord_z_0:FD,_emscripten_bind_btQuaternion___destroy___0:_C,_emscripten_bind_btQuaternion_angleShortestPath_1:ly,_emscripten_bind_btQuaternion_angle_1:LA,_emscripten_bind_btQuaternion_btQuaternion_4:No,_emscripten_bind_btQuaternion_dot_1:sB,_emscripten_bind_btQuaternion_getAngleShortestPath_0:hA,_emscripten_bind_btQuaternion_getAngle_0:HA,_emscripten_bind_btQuaternion_getAxis_0:ap,_emscripten_bind_btQuaternion_inverse_0:$o,_emscripten_bind_btQuaternion_length2_0:TD,_emscripten_bind_btQuaternion_length_0:jE,_emscripten_bind_btQuaternion_normalize_0:JD,_emscripten_bind_btQuaternion_normalized_0:To,_emscripten_bind_btQuaternion_op_add_1:rB,_emscripten_bind_btQuaternion_op_div_1:WB,_emscripten_bind_btQuaternion_op_mul_1:mt,_emscripten_bind_btQuaternion_op_mulq_1:eB,_emscripten_bind_btQuaternion_op_sub_1:qB,_emscripten_bind_btQuaternion_setEulerZYX_3:hw,_emscripten_bind_btQuaternion_setRotation_2:Xw,_emscripten_bind_btQuaternion_setValue_4:op,_emscripten_bind_btQuaternion_setW_1:bD,_emscripten_bind_btQuaternion_setX_1:wD,_emscripten_bind_btQuaternion_setY_1:vD,_emscripten_bind_btQuaternion_setZ_1:uD,_emscripten_bind_btQuaternion_w_0:HD,_emscripten_bind_btQuaternion_x_0:JE,_emscripten_bind_btQuaternion_y_0:GD,_emscripten_bind_btQuaternion_z_0:FD,_emscripten_bind_btRaycastVehicle___destroy___0:rw,_emscripten_bind_btRaycastVehicle_addWheel_7:Od,_emscripten_bind_btRaycastVehicle_applyEngineForce_2:Bv,_emscripten_bind_btRaycastVehicle_btRaycastVehicle_3:Wk,_emscripten_bind_btRaycastVehicle_getChassisWorldTransform_0:XA,_emscripten_bind_btRaycastVehicle_getCurrentSpeedKmHour_0:hy,_emscripten_bind_btRaycastVehicle_getForwardAxis_0:EB,_emscripten_bind_btRaycastVehicle_getForwardVector_0:eo,_emscripten_bind_btRaycastVehicle_getNumWheels_0:WA,_emscripten_bind_btRaycastVehicle_getRightAxis_0:VB,_emscripten_bind_btRaycastVehicle_getRigidBody_0:UB,_emscripten_bind_btRaycastVehicle_getSteeringValue_1:Qw,_emscripten_bind_btRaycastVehicle_getUpAxis_0:wC,_emscripten_bind_btRaycastVehicle_getUserConstraintId_0:VA,_emscripten_bind_btRaycastVehicle_getUserConstraintType_0:KA,_emscripten_bind_btRaycastVehicle_getWheelInfo_1:az,_emscripten_bind_btRaycastVehicle_getWheelTransformWS_1:Qx,_emscripten_bind_btRaycastVehicle_rayCast_1:Ly,_emscripten_bind_btRaycastVehicle_resetSuspension_0:El,_emscripten_bind_btRaycastVehicle_setBrake_2:fw,_emscripten_bind_btRaycastVehicle_setCoordinateSystem_3:Gt,_emscripten_bind_btRaycastVehicle_setPitchControl_1:Qy,_emscripten_bind_btRaycastVehicle_setSteeringValue_2:Av,_emscripten_bind_btRaycastVehicle_setUserConstraintId_1:Jx,_emscripten_bind_btRaycastVehicle_setUserConstraintType_1:tx,_emscripten_bind_btRaycastVehicle_updateAction_2:tv,_emscripten_bind_btRaycastVehicle_updateFriction_1:Lw,_emscripten_bind_btRaycastVehicle_updateSuspension_1:ol,_emscripten_bind_btRaycastVehicle_updateVehicle_1:Pw,_emscripten_bind_btRaycastVehicle_updateWheelTransform_2:lt,_emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_1:yu,_emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_2:Ct,_emscripten_bind_btRigidBodyConstructionInfo___destroy___0:_C,_emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_3:zn,_emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_4:Oq,_emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingFactor_0:Az,_emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingThresholdSqr_0:Wy,_emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDampingFactor_0:pA,_emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDamping_0:Yz,_emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalLinearDampingThresholdSqr_0:$y,_emscripten_bind_btRigidBodyConstructionInfo_get_m_angularDamping_0:zB,_emscripten_bind_btRigidBodyConstructionInfo_get_m_angularSleepingThreshold_0:gA,_emscripten_bind_btRigidBodyConstructionInfo_get_m_friction_0:nC,_emscripten_bind_btRigidBodyConstructionInfo_get_m_linearDamping_0:HF,_emscripten_bind_btRigidBodyConstructionInfo_get_m_linearSleepingThreshold_0:oA,_emscripten_bind_btRigidBodyConstructionInfo_get_m_restitution_0:JB,_emscripten_bind_btRigidBodyConstructionInfo_get_m_rollingFriction_0:dB,_emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingFactor_1:Nx,_emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingThresholdSqr_1:nx,_emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDampingFactor_1:xy,_emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDamping_1:Ey,_emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalLinearDampingThresholdSqr_1:sx,_emscripten_bind_btRigidBodyConstructionInfo_set_m_angularDamping_1:sz,_emscripten_bind_btRigidBodyConstructionInfo_set_m_angularSleepingThreshold_1:ry,_emscripten_bind_btRigidBodyConstructionInfo_set_m_friction_1:Xz,_emscripten_bind_btRigidBodyConstructionInfo_set_m_linearDamping_1:PD,_emscripten_bind_btRigidBodyConstructionInfo_set_m_linearSleepingThreshold_1:wy,_emscripten_bind_btRigidBodyConstructionInfo_set_m_restitution_1:Gz,_emscripten_bind_btRigidBodyConstructionInfo_set_m_rollingFriction_1:OC,_emscripten_bind_btRigidBody___destroy___0:pw,_emscripten_bind_btRigidBody_activate_0:xt,_emscripten_bind_btRigidBody_activate_1:ms,_emscripten_bind_btRigidBody_applyCentralForce_1:du,_emscripten_bind_btRigidBody_applyCentralImpulse_1:Pt,_emscripten_bind_btRigidBody_applyCentralLocalForce_1:yt,_emscripten_bind_btRigidBody_applyForce_2:_w,_emscripten_bind_btRigidBody_applyGravity_0:jo,_emscripten_bind_btRigidBody_applyImpulse_2:Ew,_emscripten_bind_btRigidBody_applyLocalTorque_1:gu,_emscripten_bind_btRigidBody_applyTorqueImpulse_1:Xt,_emscripten_bind_btRigidBody_applyTorque_1:Du,_emscripten_bind_btRigidBody_btRigidBody_1:wi,_emscripten_bind_btRigidBody_forceActivationState_1:NA,_emscripten_bind_btRigidBody_getAabb_2:Ps,_emscripten_bind_btRigidBody_getAngularVelocity_0:JA,_emscripten_bind_btRigidBody_getCenterOfMassTransform_0:iE,_emscripten_bind_btRigidBody_getCollisionFlags_0:fC,_emscripten_bind_btRigidBody_getCollisionShape_0:eC,_emscripten_bind_btRigidBody_getGravity_0:kD,_emscripten_bind_btRigidBody_getLinearVelocity_0:UA,_emscripten_bind_btRigidBody_getMotionState_0:vC,_emscripten_bind_btRigidBody_getUserIndex_0:IB,_emscripten_bind_btRigidBody_getUserPointer_0:JC,_emscripten_bind_btRigidBody_getWorldTransform_0:iE,_emscripten_bind_btRigidBody_isActive_0:dA,_emscripten_bind_btRigidBody_isKinematicObject_0:ay,_emscripten_bind_btRigidBody_isStaticObject_0:Py,_emscripten_bind_btRigidBody_isStaticOrKinematicObject_0:Jw,_emscripten_bind_btRigidBody_setActivationState_1:Pv,_emscripten_bind_btRigidBody_setAngularFactor_1:gy,_emscripten_bind_btRigidBody_setAngularVelocity_1:Mx,_emscripten_bind_btRigidBody_setAnisotropicFriction_2:_u,_emscripten_bind_btRigidBody_setCcdMotionThreshold_1:Zx,_emscripten_bind_btRigidBody_setCcdSweptSphereRadius_1:Ix,_emscripten_bind_btRigidBody_setCenterOfMassTransform_1:xw,_emscripten_bind_btRigidBody_setCollisionFlags_1:Cy,_emscripten_bind_btRigidBody_setCollisionShape_1:Dw,_emscripten_bind_btRigidBody_setContactProcessingThreshold_1:dy,_emscripten_bind_btRigidBody_setDamping_2:Hn,_emscripten_bind_btRigidBody_setFriction_1:cA,_emscripten_bind_btRigidBody_setGravity_1:Qm,_emscripten_bind_btRigidBody_setLinearFactor_1:qy,_emscripten_bind_btRigidBody_setLinearVelocity_1:Vx,_emscripten_bind_btRigidBody_setMassProps_2:Fj,_emscripten_bind_btRigidBody_setMotionState_1:fy,_emscripten_bind_btRigidBody_setRestitution_1:rz,_emscripten_bind_btRigidBody_setRollingFriction_1:Ky,_emscripten_bind_btRigidBody_setSleepingThresholds_2:Kw,_emscripten_bind_btRigidBody_setUserIndex_1:zz,_emscripten_bind_btRigidBody_setUserPointer_1:_y,_emscripten_bind_btRigidBody_setWorldTransform_1:mx,_emscripten_bind_btRigidBody_upcast_1:Fz,_emscripten_bind_btRigidBody_updateInertiaTensor_0:zj,_emscripten_bind_btSequentialImpulseConstraintSolver___destroy___0:rw,_emscripten_bind_btSequentialImpulseConstraintSolver_btSequentialImpulseConstraintSolver_0:Qj,_emscripten_bind_btSliderConstraint___destroy___0:rw,_emscripten_bind_btSliderConstraint_btSliderConstraint_3:fe,_emscripten_bind_btSliderConstraint_btSliderConstraint_5:nf,_emscripten_bind_btSliderConstraint_enableFeedback_1:ty,_emscripten_bind_btSliderConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btSliderConstraint_getParam_2:ev,_emscripten_bind_btSliderConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btSliderConstraint_setLowerAngLimit_1:ey,_emscripten_bind_btSliderConstraint_setLowerLinLimit_1:dy,_emscripten_bind_btSliderConstraint_setParam_3:vu,_emscripten_bind_btSliderConstraint_setUpperAngLimit_1:cy,_emscripten_bind_btSliderConstraint_setUpperLinLimit_1:by,_emscripten_bind_btSoftBodyArray___destroy___0:kx,_emscripten_bind_btSoftBodyArray_at_1:Ov,_emscripten_bind_btSoftBodyArray_size_0:qE,_emscripten_bind_btSoftBodyHelpers_CreateEllipsoid_4:Ng,_emscripten_bind_btSoftBodyHelpers_CreateFromConvexHull_4:gs,_emscripten_bind_btSoftBodyHelpers_CreateFromTriMesh_5:Cd,_emscripten_bind_btSoftBodyHelpers_CreatePatchUV_10:ad,_emscripten_bind_btSoftBodyHelpers_CreatePatch_9:fd,_emscripten_bind_btSoftBodyHelpers_CreateRope_5:wg,_emscripten_bind_btSoftBodyHelpers___destroy___0:_C,_emscripten_bind_btSoftBodyHelpers_btSoftBodyHelpers_0:CG,_emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration___destroy___0:rw,_emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_0:zp,_emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_1:Sr,_emscripten_bind_btSoftBodySolver___destroy___0:rw,_emscripten_bind_btSoftBodyWorldInfo___destroy___0:gx,_emscripten_bind_btSoftBodyWorldInfo_btSoftBodyWorldInfo_0:vy,_emscripten_bind_btSoftBodyWorldInfo_get_air_density_0:LE,_emscripten_bind_btSoftBodyWorldInfo_get_m_broadphase_0:yD,_emscripten_bind_btSoftBodyWorldInfo_get_m_dispatcher_0:xD,_emscripten_bind_btSoftBodyWorldInfo_get_m_gravity_0:XG,_emscripten_bind_btSoftBodyWorldInfo_get_m_maxDisplacement_0:UF,_emscripten_bind_btSoftBodyWorldInfo_get_water_density_0:QF,_emscripten_bind_btSoftBodyWorldInfo_get_water_normal_0:rF,_emscripten_bind_btSoftBodyWorldInfo_get_water_offset_0:bG,_emscripten_bind_btSoftBodyWorldInfo_set_air_density_1:LF,_emscripten_bind_btSoftBodyWorldInfo_set_m_broadphase_1:zA,_emscripten_bind_btSoftBodyWorldInfo_set_m_dispatcher_1:yA,_emscripten_bind_btSoftBodyWorldInfo_set_m_gravity_1:Zr,_emscripten_bind_btSoftBodyWorldInfo_set_m_maxDisplacement_1:UE,_emscripten_bind_btSoftBodyWorldInfo_set_water_density_1:qF,_emscripten_bind_btSoftBodyWorldInfo_set_water_normal_1:Cr,_emscripten_bind_btSoftBodyWorldInfo_set_water_offset_1:pF,_emscripten_bind_btSoftBody___destroy___0:pw,_emscripten_bind_btSoftBody_activate_0:xt,_emscripten_bind_btSoftBody_activate_1:ms,_emscripten_bind_btSoftBody_addAeroForceToNode_2:ew,_emscripten_bind_btSoftBody_addForce_1:um,_emscripten_bind_btSoftBody_addForce_2:En,_emscripten_bind_btSoftBody_appendAnchor_4:Ld,_emscripten_bind_btSoftBody_appendFace_4:tu,_emscripten_bind_btSoftBody_appendLink_4:su,_emscripten_bind_btSoftBody_appendMaterial_0:uC,_emscripten_bind_btSoftBody_appendNode_2:Uc,_emscripten_bind_btSoftBody_appendTetra_5:Ef,_emscripten_bind_btSoftBody_btSoftBody_4:Yr,_emscripten_bind_btSoftBody_checkFace_3:Fk,_emscripten_bind_btSoftBody_checkLink_2:Dl,_emscripten_bind_btSoftBody_forceActivationState_1:NA,_emscripten_bind_btSoftBody_generateBendingConstraints_2:Sc,_emscripten_bind_btSoftBody_generateClusters_1:Dy,_emscripten_bind_btSoftBody_generateClusters_2:bx,_emscripten_bind_btSoftBody_getCollisionFlags_0:fC,_emscripten_bind_btSoftBody_getCollisionShape_0:eC,_emscripten_bind_btSoftBody_getTotalMass_0:Po,_emscripten_bind_btSoftBody_getUserIndex_0:IB,_emscripten_bind_btSoftBody_getUserPointer_0:JC,_emscripten_bind_btSoftBody_getWorldTransform_0:iE,_emscripten_bind_btSoftBody_get_m_anchors_0:lG,_emscripten_bind_btSoftBody_get_m_cfg_0:BG,_emscripten_bind_btSoftBody_get_m_materials_0:aG,_emscripten_bind_btSoftBody_get_m_nodes_0:sG,_emscripten_bind_btSoftBody_isActive_0:dA,_emscripten_bind_btSoftBody_isKinematicObject_0:ay,_emscripten_bind_btSoftBody_isStaticObject_0:Py,_emscripten_bind_btSoftBody_isStaticOrKinematicObject_0:Jw,_emscripten_bind_btSoftBody_rotate_1:Tj,_emscripten_bind_btSoftBody_scale_1:Ie,_emscripten_bind_btSoftBody_setActivationState_1:Pv,_emscripten_bind_btSoftBody_setAnisotropicFriction_2:_u,_emscripten_bind_btSoftBody_setCcdMotionThreshold_1:Zx,_emscripten_bind_btSoftBody_setCcdSweptSphereRadius_1:Ix,_emscripten_bind_btSoftBody_setCollisionFlags_1:Cy,_emscripten_bind_btSoftBody_setCollisionShape_1:Dw,_emscripten_bind_btSoftBody_setContactProcessingThreshold_1:dy,_emscripten_bind_btSoftBody_setFriction_1:cA,_emscripten_bind_btSoftBody_setMass_2:Zt,_emscripten_bind_btSoftBody_setRestitution_1:rz,_emscripten_bind_btSoftBody_setRollingFriction_1:Ky,_emscripten_bind_btSoftBody_setTotalMass_2:$g,_emscripten_bind_btSoftBody_setUserIndex_1:zz,_emscripten_bind_btSoftBody_setUserPointer_1:_y,_emscripten_bind_btSoftBody_setWorldTransform_1:mx,_emscripten_bind_btSoftBody_set_m_anchors_1:Ow,_emscripten_bind_btSoftBody_set_m_cfg_1:Ez,_emscripten_bind_btSoftBody_set_m_materials_1:vw,_emscripten_bind_btSoftBody_set_m_nodes_1:fx,_emscripten_bind_btSoftBody_transform_1:yz,_emscripten_bind_btSoftBody_translate_1:Ol,_emscripten_bind_btSoftBody_upcast_1:Rz,_emscripten_bind_btSoftRigidDynamicsWorld___destroy___0:rw,_emscripten_bind_btSoftRigidDynamicsWorld_addAction_1:Yw,_emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_1:$u,_emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_2:lu,_emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_3:Lt,_emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_1:Sv,_emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_2:Ju,_emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_1:gw,_emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_3:Ht,_emscripten_bind_btSoftRigidDynamicsWorld_addSoftBody_3:aj,_emscripten_bind_btSoftRigidDynamicsWorld_btSoftRigidDynamicsWorld_5:rf,_emscripten_bind_btSoftRigidDynamicsWorld_contactPairTest_3:Dj,_emscripten_bind_btSoftRigidDynamicsWorld_contactTest_2:Xm,_emscripten_bind_btSoftRigidDynamicsWorld_convexSweepTest_5:pr,_emscripten_bind_btSoftRigidDynamicsWorld_getBroadphase_0:hC,_emscripten_bind_btSoftRigidDynamicsWorld_getDispatchInfo_0:AB,_emscripten_bind_btSoftRigidDynamicsWorld_getDispatcher_0:gC,_emscripten_bind_btSoftRigidDynamicsWorld_getGravity_0:ro,_emscripten_bind_btSoftRigidDynamicsWorld_getPairCache_0:Xy,_emscripten_bind_btSoftRigidDynamicsWorld_getSoftBodyArray_0:Jy,_emscripten_bind_btSoftRigidDynamicsWorld_getSolverInfo_0:fB,_emscripten_bind_btSoftRigidDynamicsWorld_getWorldInfo_0:qz,_emscripten_bind_btSoftRigidDynamicsWorld_rayTest_3:pu,_emscripten_bind_btSoftRigidDynamicsWorld_removeAction_1:Gw,_emscripten_bind_btSoftRigidDynamicsWorld_removeCollisionObject_1:dw,_emscripten_bind_btSoftRigidDynamicsWorld_removeConstraint_1:Vv,_emscripten_bind_btSoftRigidDynamicsWorld_removeRigidBody_1:Yv,_emscripten_bind_btSoftRigidDynamicsWorld_removeSoftBody_1:zi,_emscripten_bind_btSoftRigidDynamicsWorld_setGravity_1:mw,_emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_1:Hu,_emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_2:Mt,_emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_3:Qt,_emscripten_bind_btSoftRigidDynamicsWorld_updateSingleAabb_1:Fw,_emscripten_bind_btSphereShape___destroy___0:rw,_emscripten_bind_btSphereShape_btSphereShape_1:lx,_emscripten_bind_btSphereShape_calculateLocalInertia_2:av,_emscripten_bind_btSphereShape_getLocalScaling_0:Ty,_emscripten_bind_btSphereShape_getMargin_0:tz,_emscripten_bind_btSphereShape_setLocalScaling_1:Sw,_emscripten_bind_btSphereShape_setMargin_1:Lx,_emscripten_bind_btStaticPlaneShape___destroy___0:rw,_emscripten_bind_btStaticPlaneShape_btStaticPlaneShape_2:Ll,_emscripten_bind_btStaticPlaneShape_calculateLocalInertia_2:av,_emscripten_bind_btStaticPlaneShape_getLocalScaling_0:Ty,_emscripten_bind_btStaticPlaneShape_setLocalScaling_1:Sw,_emscripten_bind_btStridingMeshInterface___destroy___0:rw,_emscripten_bind_btTransform___destroy___0:_C,_emscripten_bind_btTransform_btTransform_0:cH,_emscripten_bind_btTransform_btTransform_2:Xu,_emscripten_bind_btTransform_getBasis_0:$F,_emscripten_bind_btTransform_getOrigin_0:ID,_emscripten_bind_btTransform_getRotation_0:So,_emscripten_bind_btTransform_setFromOpenGLMatrix_1:uy,_emscripten_bind_btTransform_setIdentity_0:rD,_emscripten_bind_btTransform_setOrigin_1:Dz,_emscripten_bind_btTransform_setRotation_1:Qz,_emscripten_bind_btTriangleMeshShape___destroy___0:rw,_emscripten_bind_btTriangleMeshShape_calculateLocalInertia_2:av,_emscripten_bind_btTriangleMeshShape_getLocalScaling_0:Ty,_emscripten_bind_btTriangleMeshShape_setLocalScaling_1:Sw,_emscripten_bind_btTriangleMesh___destroy___0:rw,_emscripten_bind_btTriangleMesh_addTriangle_3:un,_emscripten_bind_btTriangleMesh_addTriangle_4:en,_emscripten_bind_btTriangleMesh_btTriangleMesh_0:Iw,_emscripten_bind_btTriangleMesh_btTriangleMesh_1:zv,_emscripten_bind_btTriangleMesh_btTriangleMesh_2:Bu,_emscripten_bind_btTypedConstraint___destroy___0:rw,_emscripten_bind_btTypedConstraint_enableFeedback_1:ty,_emscripten_bind_btTypedConstraint_getBreakingImpulseThreshold_0:Fx,_emscripten_bind_btTypedConstraint_getParam_2:ev,_emscripten_bind_btTypedConstraint_setBreakingImpulseThreshold_1:uw,_emscripten_bind_btTypedConstraint_setParam_3:vu,_emscripten_bind_btVector3___destroy___0:xA,_emscripten_bind_btVector3_btVector3_0:QG,_emscripten_bind_btVector3_btVector3_3:Sp,_emscripten_bind_btVector3_dot_1:_s,_emscripten_bind_btVector3_length_0:Hx,_emscripten_bind_btVector3_normalize_0:EE,_emscripten_bind_btVector3_op_add_1:tC,_emscripten_bind_btVector3_op_mul_1:wt,_emscripten_bind_btVector3_op_sub_1:sC,_emscripten_bind_btVector3_rotate_2:Bo,_emscripten_bind_btVector3_setValue_3:Cq,_emscripten_bind_btVector3_setX_1:wD,_emscripten_bind_btVector3_setY_1:vD,_emscripten_bind_btVector3_setZ_1:uD,_emscripten_bind_btVector3_x_0:JE,_emscripten_bind_btVector3_y_0:GD,_emscripten_bind_btVector3_z_0:FD,_emscripten_bind_btVector4___destroy___0:xA,_emscripten_bind_btVector4_btVector4_0:QG,_emscripten_bind_btVector4_btVector4_4:Mo,_emscripten_bind_btVector4_dot_1:_s,_emscripten_bind_btVector4_length_0:Hx,_emscripten_bind_btVector4_normalize_0:EE,_emscripten_bind_btVector4_op_add_1:tC,_emscripten_bind_btVector4_op_mul_1:wt,_emscripten_bind_btVector4_op_sub_1:sC,_emscripten_bind_btVector4_rotate_2:Ao,_emscripten_bind_btVector4_setValue_4:op,_emscripten_bind_btVector4_setX_1:wD,_emscripten_bind_btVector4_setY_1:vD,_emscripten_bind_btVector4_setZ_1:uD,_emscripten_bind_btVector4_w_0:HD,_emscripten_bind_btVector4_x_0:JE,_emscripten_bind_btVector4_y_0:GD,_emscripten_bind_btVector4_z_0:FD,_emscripten_bind_btVehicleRaycasterResult___destroy___0:_C,_emscripten_bind_btVehicleRaycasterResult_get_m_distFraction_0:SF,_emscripten_bind_btVehicleRaycasterResult_get_m_hitNormalInWorld_0:rF,_emscripten_bind_btVehicleRaycasterResult_get_m_hitPointInWorld_0:bI,_emscripten_bind_btVehicleRaycasterResult_set_m_distFraction_1:WD,_emscripten_bind_btVehicleRaycasterResult_set_m_hitNormalInWorld_1:Cr,_emscripten_bind_btVehicleRaycasterResult_set_m_hitPointInWorld_1:Xr,_emscripten_bind_btVehicleRaycaster___destroy___0:rw,_emscripten_bind_btVehicleRaycaster_castRay_3:cu,_emscripten_bind_btVehicleTuning_btVehicleTuning_0:Ux,_emscripten_bind_btVehicleTuning_get_m_frictionSlip_0:TF,_emscripten_bind_btVehicleTuning_get_m_maxSuspensionForce_0:RF,_emscripten_bind_btVehicleTuning_get_m_maxSuspensionTravelCm_0:UF,_emscripten_bind_btVehicleTuning_get_m_suspensionCompression_0:QF,_emscripten_bind_btVehicleTuning_get_m_suspensionDamping_0:bG,_emscripten_bind_btVehicleTuning_get_m_suspensionStiffness_0:LE,_emscripten_bind_btVehicleTuning_set_m_frictionSlip_1:XD,_emscripten_bind_btVehicleTuning_set_m_maxSuspensionForce_1:VD,_emscripten_bind_btVehicleTuning_set_m_maxSuspensionTravelCm_1:UE,_emscripten_bind_btVehicleTuning_set_m_suspensionCompression_1:qF,_emscripten_bind_btVehicleTuning_set_m_suspensionDamping_1:pF,_emscripten_bind_btVehicleTuning_set_m_suspensionStiffness_1:LF,_emscripten_bind_btWheelInfoConstructionInfo___destroy___0:_C,_emscripten_bind_btWheelInfoConstructionInfo_get_m_bIsFrontWheel_0:wA,_emscripten_bind_btWheelInfoConstructionInfo_get_m_chassisConnectionCS_0:bI,_emscripten_bind_btWheelInfoConstructionInfo_get_m_frictionSlip_0:KF,_emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionForce_0:dF,_emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionTravelCm_0:jF,_emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionRestLength_0:GF,_emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionStiffness_0:iF,_emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelAxleCS_0:iG,_emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelDirectionCS_0:rF,_emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelRadius_0:kF,_emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingCompression_0:RE,_emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingRelaxation_0:SE,_emscripten_bind_btWheelInfoConstructionInfo_set_m_bIsFrontWheel_1:Zy,_emscripten_bind_btWheelInfoConstructionInfo_set_m_chassisConnectionCS_1:Xr,_emscripten_bind_btWheelInfoConstructionInfo_set_m_frictionSlip_1:bE,_emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionForce_1:fD,_emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionTravelCm_1:mD,_emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionRestLength_1:ND,_emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionStiffness_1:lD,_emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelAxleCS_1:rr,_emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelDirectionCS_1:Cr,_emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelRadius_1:nD,_emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingCompression_1:WC,_emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingRelaxation_1:XC,_emscripten_bind_btWheelInfo___destroy___0:_C,_emscripten_bind_btWheelInfo_btWheelInfo_1:ow,_emscripten_bind_btWheelInfo_getSuspensionRestLength_0:qD,_emscripten_bind_btWheelInfo_get_m_bIsFrontWheel_0:IC,_emscripten_bind_btWheelInfo_get_m_brake_0:IE,_emscripten_bind_btWheelInfo_get_m_chassisConnectionPointCS_0:rE,_emscripten_bind_btWheelInfo_get_m_clippedInvContactDotSuspension_0:pB,_emscripten_bind_btWheelInfo_get_m_deltaRotation_0:SD,_emscripten_bind_btWheelInfo_get_m_engineForce_0:hE,_emscripten_bind_btWheelInfo_get_m_frictionSlip_0:dE,_emscripten_bind_btWheelInfo_get_m_maxSuspensionForce_0:jD,_emscripten_bind_btWheelInfo_get_m_maxSuspensionTravelCm_0:TC,_emscripten_bind_btWheelInfo_get_m_raycastInfo_0:bI,_emscripten_bind_btWheelInfo_get_m_rollInfluence_0:RD,_emscripten_bind_btWheelInfo_get_m_rotation_0:zE,_emscripten_bind_btWheelInfo_get_m_skidInfo_0:yE,_emscripten_bind_btWheelInfo_get_m_steering_0:xE,_emscripten_bind_btWheelInfo_get_m_suspensionRelativeVelocity_0:TB,_emscripten_bind_btWheelInfo_get_m_suspensionRestLength1_0:qD,_emscripten_bind_btWheelInfo_get_m_suspensionStiffness_0:aD,_emscripten_bind_btWheelInfo_get_m_wheelAxleCS_0:xF,_emscripten_bind_btWheelInfo_get_m_wheelDirectionCS_0:VE,_emscripten_bind_btWheelInfo_get_m_wheelsDampingCompression_0:mC,_emscripten_bind_btWheelInfo_get_m_wheelsDampingRelaxation_0:rC,_emscripten_bind_btWheelInfo_get_m_wheelsRadius_0:cE,_emscripten_bind_btWheelInfo_get_m_wheelsSuspensionForce_0:SC,_emscripten_bind_btWheelInfo_get_m_worldTransform_0:KG,_emscripten_bind_btWheelInfo_set_m_bIsFrontWheel_1:BA,_emscripten_bind_btWheelInfo_set_m_brake_1:qC,_emscripten_bind_btWheelInfo_set_m_chassisConnectionPointCS_1:hr,_emscripten_bind_btWheelInfo_set_m_clippedInvContactDotSuspension_1:mz,_emscripten_bind_btWheelInfo_set_m_deltaRotation_1:cB,_emscripten_bind_btWheelInfo_set_m_engineForce_1:yB,_emscripten_bind_btWheelInfo_set_m_frictionSlip_1:oB,_emscripten_bind_btWheelInfo_set_m_maxSuspensionForce_1:mB,_emscripten_bind_btWheelInfo_set_m_maxSuspensionTravelCm_1:nA,_emscripten_bind_btWheelInfo_set_m_raycastInfo_1:Ws,_emscripten_bind_btWheelInfo_set_m_rollInfluence_1:bB,_emscripten_bind_btWheelInfo_set_m_rotation_1:SB,_emscripten_bind_btWheelInfo_set_m_skidInfo_1:RB,_emscripten_bind_btWheelInfo_set_m_steering_1:QB,_emscripten_bind_btWheelInfo_set_m_suspensionRelativeVelocity_1:Jz,_emscripten_bind_btWheelInfo_set_m_suspensionRestLength1_1:mA,_emscripten_bind_btWheelInfo_set_m_suspensionStiffness_1:vA,_emscripten_bind_btWheelInfo_set_m_wheelAxleCS_1:zr,_emscripten_bind_btWheelInfo_set_m_wheelDirectionCS_1:qr,_emscripten_bind_btWheelInfo_set_m_wheelsDampingCompression_1:Wz,_emscripten_bind_btWheelInfo_set_m_wheelsDampingRelaxation_1:bA,_emscripten_bind_btWheelInfo_set_m_wheelsRadius_1:nB,_emscripten_bind_btWheelInfo_set_m_wheelsSuspensionForce_1:lA,_emscripten_bind_btWheelInfo_set_m_worldTransform_1:kz,_emscripten_bind_btWheelInfo_updateWheel_2:Mi,_emscripten_bind_tAnchorArray___destroy___0:kx,_emscripten_bind_tAnchorArray_at_1:Hr,_emscripten_bind_tAnchorArray_clear_0:xB,_emscripten_bind_tAnchorArray_pop_back_0:Pz,_emscripten_bind_tAnchorArray_push_back_1:ex,_emscripten_bind_tAnchorArray_size_0:qE,_emscripten_bind_tMaterialArray___destroy___0:kx,_emscripten_bind_tMaterialArray_at_1:Ov,_emscripten_bind_tMaterialArray_size_0:qE,_emscripten_bind_tNodeArray___destroy___0:kx,_emscripten_bind_tNodeArray_at_1:Zw,_emscripten_bind_tNodeArray_size_0:qE,_emscripten_enum_PHY_ScalarType_PHY_DOUBLE:NH,_emscripten_enum_PHY_ScalarType_PHY_FIXEDPOINT88:CH,_emscripten_enum_PHY_ScalarType_PHY_FLOAT:gI,_emscripten_enum_PHY_ScalarType_PHY_INTEGER:MH,_emscripten_enum_PHY_ScalarType_PHY_SHORT:PH,_emscripten_enum_PHY_ScalarType_PHY_UCHAR:OH,_emscripten_enum_btConstraintParams_BT_CONSTRAINT_CFM:PH,_emscripten_enum_btConstraintParams_BT_CONSTRAINT_ERP:NH,_emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_CFM:CH,_emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_ERP:MH,_free:nd,_i64Add:cw,_i64Subtract:Nv,_llvm_bswap_i16:HG,_llvm_bswap_i32:TA,_malloc:ic,_memcpy:_h,_memmove:yp,_memset:Nk,_sbrk:uo,dynCall_di:gF,dynCall_did:QC,dynCall_diidii:Pu,dynCall_diii:By,dynCall_diiidii:vt,dynCall_diiii:lw,dynCall_diiiii:Au,dynCall_diiiiiiii:Br,dynCall_diiiiiiiii:Mq,dynCall_diiiiiiiiii:Xp,dynCall_ii:NE,dynCall_iidid:Ww,dynCall_iii:aB,dynCall_iiid:Vy,dynCall_iiii:ky,dynCall_iiiii:_v,dynCall_iiiiiii:et,dynCall_iiiiiiiiii:Hq,dynCall_iiiiiiiiiii:Up,dynCall_v:LH,dynCall_vi:eG,dynCall_vid:DD,dynCall_vidd:GA,dynCall_viddiii:ku,dynCall_vidi:Uz,dynCall_vidii:rx,dynCall_vii:PC,dynCall_viid:aA,dynCall_viidi:qx,dynCall_viidii:kv,dynCall_viii:iz,dynCall_viiid:jx,dynCall_viiidii:Wt,dynCall_viiii:Cw,dynCall_viiiid:jv,dynCall_viiiidddddidi:Fp,dynCall_viiiiddddiid:fq,dynCall_viiiii:Tu,dynCall_viiiiid:Vt,dynCall_viiiiii:Et,dynCall_viiiiiii:us,dynCall_viiiiiiiii:Wq,dynCall_viiiiiiiiii:iq,establishStackSpace:wF,getTempRet0:dI,runPostSets:Yo,setTempRet0:$H,setThrew:HC,stackAlloc:xz,stackRestore:ZH,stackSave:eI}}) + + +// EMSCRIPTEN_END_ASM +(c.o,c.s,buffer),Xa=c.__GLOBAL__sub_I_btQuickprof_cpp=d.__GLOBAL__sub_I_btQuickprof_cpp;c.___cxa_can_catch=d.___cxa_can_catch;c.___cxa_is_pointer_type=d.___cxa_is_pointer_type;c.___muldi3=d.___muldi3;c.___udivdi3=d.___udivdi3;c.___uremdi3=d.___uremdi3;c._bitshift64Lshr=d._bitshift64Lshr;c._bitshift64Shl=d._bitshift64Shl; +var ub=c._emscripten_bind_Anchor___destroy___0=d._emscripten_bind_Anchor___destroy___0,vb=c._emscripten_bind_Anchor_get_m_body_0=d._emscripten_bind_Anchor_get_m_body_0,wb=c._emscripten_bind_Anchor_get_m_c0_0=d._emscripten_bind_Anchor_get_m_c0_0,xb=c._emscripten_bind_Anchor_get_m_c1_0=d._emscripten_bind_Anchor_get_m_c1_0,yb=c._emscripten_bind_Anchor_get_m_c2_0=d._emscripten_bind_Anchor_get_m_c2_0,zb=c._emscripten_bind_Anchor_get_m_influence_0=d._emscripten_bind_Anchor_get_m_influence_0,Ab=c._emscripten_bind_Anchor_get_m_local_0= +d._emscripten_bind_Anchor_get_m_local_0,Bb=c._emscripten_bind_Anchor_get_m_node_0=d._emscripten_bind_Anchor_get_m_node_0,Cb=c._emscripten_bind_Anchor_set_m_body_1=d._emscripten_bind_Anchor_set_m_body_1,Db=c._emscripten_bind_Anchor_set_m_c0_1=d._emscripten_bind_Anchor_set_m_c0_1,Eb=c._emscripten_bind_Anchor_set_m_c1_1=d._emscripten_bind_Anchor_set_m_c1_1,Fb=c._emscripten_bind_Anchor_set_m_c2_1=d._emscripten_bind_Anchor_set_m_c2_1,Gb=c._emscripten_bind_Anchor_set_m_influence_1=d._emscripten_bind_Anchor_set_m_influence_1, +Hb=c._emscripten_bind_Anchor_set_m_local_1=d._emscripten_bind_Anchor_set_m_local_1,Ib=c._emscripten_bind_Anchor_set_m_node_1=d._emscripten_bind_Anchor_set_m_node_1,Jb=c._emscripten_bind_ClosestConvexResultCallback_ClosestConvexResultCallback_2=d._emscripten_bind_ClosestConvexResultCallback_ClosestConvexResultCallback_2,Kb=c._emscripten_bind_ClosestConvexResultCallback___destroy___0=d._emscripten_bind_ClosestConvexResultCallback___destroy___0,Lb=c._emscripten_bind_ClosestConvexResultCallback_get_m_closestHitFraction_0= +d._emscripten_bind_ClosestConvexResultCallback_get_m_closestHitFraction_0,Mb=c._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterGroup_0=d._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterGroup_0,Ob=c._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterMask_0=d._emscripten_bind_ClosestConvexResultCallback_get_m_collisionFilterMask_0,Pb=c._emscripten_bind_ClosestConvexResultCallback_get_m_convexFromWorld_0=d._emscripten_bind_ClosestConvexResultCallback_get_m_convexFromWorld_0, +Qb=c._emscripten_bind_ClosestConvexResultCallback_get_m_convexToWorld_0=d._emscripten_bind_ClosestConvexResultCallback_get_m_convexToWorld_0,Rb=c._emscripten_bind_ClosestConvexResultCallback_get_m_hitNormalWorld_0=d._emscripten_bind_ClosestConvexResultCallback_get_m_hitNormalWorld_0,Sb=c._emscripten_bind_ClosestConvexResultCallback_get_m_hitPointWorld_0=d._emscripten_bind_ClosestConvexResultCallback_get_m_hitPointWorld_0,Tb=c._emscripten_bind_ClosestConvexResultCallback_hasHit_0=d._emscripten_bind_ClosestConvexResultCallback_hasHit_0, +Ub=c._emscripten_bind_ClosestConvexResultCallback_set_m_closestHitFraction_1=d._emscripten_bind_ClosestConvexResultCallback_set_m_closestHitFraction_1,Vb=c._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterGroup_1=d._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterGroup_1,Wb=c._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterMask_1=d._emscripten_bind_ClosestConvexResultCallback_set_m_collisionFilterMask_1,Xb=c._emscripten_bind_ClosestConvexResultCallback_set_m_convexFromWorld_1= +d._emscripten_bind_ClosestConvexResultCallback_set_m_convexFromWorld_1,Yb=c._emscripten_bind_ClosestConvexResultCallback_set_m_convexToWorld_1=d._emscripten_bind_ClosestConvexResultCallback_set_m_convexToWorld_1,Zb=c._emscripten_bind_ClosestConvexResultCallback_set_m_hitNormalWorld_1=d._emscripten_bind_ClosestConvexResultCallback_set_m_hitNormalWorld_1,$b=c._emscripten_bind_ClosestConvexResultCallback_set_m_hitPointWorld_1=d._emscripten_bind_ClosestConvexResultCallback_set_m_hitPointWorld_1,ac=c._emscripten_bind_ClosestRayResultCallback_ClosestRayResultCallback_2= +d._emscripten_bind_ClosestRayResultCallback_ClosestRayResultCallback_2,bc=c._emscripten_bind_ClosestRayResultCallback___destroy___0=d._emscripten_bind_ClosestRayResultCallback___destroy___0,cc=c._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterGroup_0=d._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterGroup_0,dc=c._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterMask_0=d._emscripten_bind_ClosestRayResultCallback_get_m_collisionFilterMask_0,ec=c._emscripten_bind_ClosestRayResultCallback_get_m_collisionObject_0= +d._emscripten_bind_ClosestRayResultCallback_get_m_collisionObject_0,fc=c._emscripten_bind_ClosestRayResultCallback_get_m_hitNormalWorld_0=d._emscripten_bind_ClosestRayResultCallback_get_m_hitNormalWorld_0,hc=c._emscripten_bind_ClosestRayResultCallback_get_m_hitPointWorld_0=d._emscripten_bind_ClosestRayResultCallback_get_m_hitPointWorld_0,ic=c._emscripten_bind_ClosestRayResultCallback_get_m_rayFromWorld_0=d._emscripten_bind_ClosestRayResultCallback_get_m_rayFromWorld_0,jc=c._emscripten_bind_ClosestRayResultCallback_get_m_rayToWorld_0= +d._emscripten_bind_ClosestRayResultCallback_get_m_rayToWorld_0,kc=c._emscripten_bind_ClosestRayResultCallback_hasHit_0=d._emscripten_bind_ClosestRayResultCallback_hasHit_0,lc=c._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterGroup_1=d._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterGroup_1,mc=c._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterMask_1=d._emscripten_bind_ClosestRayResultCallback_set_m_collisionFilterMask_1,oc=c._emscripten_bind_ClosestRayResultCallback_set_m_collisionObject_1= +d._emscripten_bind_ClosestRayResultCallback_set_m_collisionObject_1,pc=c._emscripten_bind_ClosestRayResultCallback_set_m_hitNormalWorld_1=d._emscripten_bind_ClosestRayResultCallback_set_m_hitNormalWorld_1,qc=c._emscripten_bind_ClosestRayResultCallback_set_m_hitPointWorld_1=d._emscripten_bind_ClosestRayResultCallback_set_m_hitPointWorld_1,rc=c._emscripten_bind_ClosestRayResultCallback_set_m_rayFromWorld_1=d._emscripten_bind_ClosestRayResultCallback_set_m_rayFromWorld_1,sc=c._emscripten_bind_ClosestRayResultCallback_set_m_rayToWorld_1= +d._emscripten_bind_ClosestRayResultCallback_set_m_rayToWorld_1,tc=c._emscripten_bind_ConcreteContactResultCallback_ConcreteContactResultCallback_0=d._emscripten_bind_ConcreteContactResultCallback_ConcreteContactResultCallback_0,uc=c._emscripten_bind_ConcreteContactResultCallback___destroy___0=d._emscripten_bind_ConcreteContactResultCallback___destroy___0,vc=c._emscripten_bind_ConcreteContactResultCallback_addSingleResult_7=d._emscripten_bind_ConcreteContactResultCallback_addSingleResult_7,wc=c._emscripten_bind_Config___destroy___0= +d._emscripten_bind_Config___destroy___0,xc=c._emscripten_bind_Config_get_citerations_0=d._emscripten_bind_Config_get_citerations_0,yc=c._emscripten_bind_Config_get_collisions_0=d._emscripten_bind_Config_get_collisions_0,zc=c._emscripten_bind_Config_get_diterations_0=d._emscripten_bind_Config_get_diterations_0,Ac=c._emscripten_bind_Config_get_kAHR_0=d._emscripten_bind_Config_get_kAHR_0,Bc=c._emscripten_bind_Config_get_kCHR_0=d._emscripten_bind_Config_get_kCHR_0,Cc=c._emscripten_bind_Config_get_kDF_0= +d._emscripten_bind_Config_get_kDF_0,Dc=c._emscripten_bind_Config_get_kDG_0=d._emscripten_bind_Config_get_kDG_0,Ec=c._emscripten_bind_Config_get_kDP_0=d._emscripten_bind_Config_get_kDP_0,Fc=c._emscripten_bind_Config_get_kKHR_0=d._emscripten_bind_Config_get_kKHR_0,Gc=c._emscripten_bind_Config_get_kLF_0=d._emscripten_bind_Config_get_kLF_0,Hc=c._emscripten_bind_Config_get_kMT_0=d._emscripten_bind_Config_get_kMT_0,Ic=c._emscripten_bind_Config_get_kPR_0=d._emscripten_bind_Config_get_kPR_0,Jc=c._emscripten_bind_Config_get_kSHR_0= +d._emscripten_bind_Config_get_kSHR_0,Kc=c._emscripten_bind_Config_get_kSKHR_CL_0=d._emscripten_bind_Config_get_kSKHR_CL_0,Lc=c._emscripten_bind_Config_get_kSK_SPLT_CL_0=d._emscripten_bind_Config_get_kSK_SPLT_CL_0,Mc=c._emscripten_bind_Config_get_kSRHR_CL_0=d._emscripten_bind_Config_get_kSRHR_CL_0,Nc=c._emscripten_bind_Config_get_kSR_SPLT_CL_0=d._emscripten_bind_Config_get_kSR_SPLT_CL_0,Oc=c._emscripten_bind_Config_get_kSSHR_CL_0=d._emscripten_bind_Config_get_kSSHR_CL_0,Pc=c._emscripten_bind_Config_get_kSS_SPLT_CL_0= +d._emscripten_bind_Config_get_kSS_SPLT_CL_0,Qc=c._emscripten_bind_Config_get_kVCF_0=d._emscripten_bind_Config_get_kVCF_0,Rc=c._emscripten_bind_Config_get_kVC_0=d._emscripten_bind_Config_get_kVC_0,Sc=c._emscripten_bind_Config_get_maxvolume_0=d._emscripten_bind_Config_get_maxvolume_0,Tc=c._emscripten_bind_Config_get_piterations_0=d._emscripten_bind_Config_get_piterations_0,Uc=c._emscripten_bind_Config_get_timescale_0=d._emscripten_bind_Config_get_timescale_0,Vc=c._emscripten_bind_Config_get_viterations_0= +d._emscripten_bind_Config_get_viterations_0,Wc=c._emscripten_bind_Config_set_citerations_1=d._emscripten_bind_Config_set_citerations_1,Xc=c._emscripten_bind_Config_set_collisions_1=d._emscripten_bind_Config_set_collisions_1,Yc=c._emscripten_bind_Config_set_diterations_1=d._emscripten_bind_Config_set_diterations_1,Zc=c._emscripten_bind_Config_set_kAHR_1=d._emscripten_bind_Config_set_kAHR_1,$c=c._emscripten_bind_Config_set_kCHR_1=d._emscripten_bind_Config_set_kCHR_1,ad=c._emscripten_bind_Config_set_kDF_1= +d._emscripten_bind_Config_set_kDF_1,bd=c._emscripten_bind_Config_set_kDG_1=d._emscripten_bind_Config_set_kDG_1,cd=c._emscripten_bind_Config_set_kDP_1=d._emscripten_bind_Config_set_kDP_1,dd=c._emscripten_bind_Config_set_kKHR_1=d._emscripten_bind_Config_set_kKHR_1,ed=c._emscripten_bind_Config_set_kLF_1=d._emscripten_bind_Config_set_kLF_1,fd=c._emscripten_bind_Config_set_kMT_1=d._emscripten_bind_Config_set_kMT_1,gd=c._emscripten_bind_Config_set_kPR_1=d._emscripten_bind_Config_set_kPR_1,hd=c._emscripten_bind_Config_set_kSHR_1= +d._emscripten_bind_Config_set_kSHR_1,id=c._emscripten_bind_Config_set_kSKHR_CL_1=d._emscripten_bind_Config_set_kSKHR_CL_1,jd=c._emscripten_bind_Config_set_kSK_SPLT_CL_1=d._emscripten_bind_Config_set_kSK_SPLT_CL_1,kd=c._emscripten_bind_Config_set_kSRHR_CL_1=d._emscripten_bind_Config_set_kSRHR_CL_1,ld=c._emscripten_bind_Config_set_kSR_SPLT_CL_1=d._emscripten_bind_Config_set_kSR_SPLT_CL_1,md=c._emscripten_bind_Config_set_kSSHR_CL_1=d._emscripten_bind_Config_set_kSSHR_CL_1,nd=c._emscripten_bind_Config_set_kSS_SPLT_CL_1= +d._emscripten_bind_Config_set_kSS_SPLT_CL_1,od=c._emscripten_bind_Config_set_kVCF_1=d._emscripten_bind_Config_set_kVCF_1,pd=c._emscripten_bind_Config_set_kVC_1=d._emscripten_bind_Config_set_kVC_1,qd=c._emscripten_bind_Config_set_maxvolume_1=d._emscripten_bind_Config_set_maxvolume_1,rd=c._emscripten_bind_Config_set_piterations_1=d._emscripten_bind_Config_set_piterations_1,sd=c._emscripten_bind_Config_set_timescale_1=d._emscripten_bind_Config_set_timescale_1,td=c._emscripten_bind_Config_set_viterations_1= +d._emscripten_bind_Config_set_viterations_1,ud=c._emscripten_bind_ContactResultCallback___destroy___0=d._emscripten_bind_ContactResultCallback___destroy___0,vd=c._emscripten_bind_ContactResultCallback_addSingleResult_7=d._emscripten_bind_ContactResultCallback_addSingleResult_7,wd=c._emscripten_bind_ConvexResultCallback___destroy___0=d._emscripten_bind_ConvexResultCallback___destroy___0,xd=c._emscripten_bind_ConvexResultCallback_get_m_closestHitFraction_0=d._emscripten_bind_ConvexResultCallback_get_m_closestHitFraction_0, +yd=c._emscripten_bind_ConvexResultCallback_get_m_collisionFilterGroup_0=d._emscripten_bind_ConvexResultCallback_get_m_collisionFilterGroup_0,zd=c._emscripten_bind_ConvexResultCallback_get_m_collisionFilterMask_0=d._emscripten_bind_ConvexResultCallback_get_m_collisionFilterMask_0,Ad=c._emscripten_bind_ConvexResultCallback_hasHit_0=d._emscripten_bind_ConvexResultCallback_hasHit_0,Bd=c._emscripten_bind_ConvexResultCallback_set_m_closestHitFraction_1=d._emscripten_bind_ConvexResultCallback_set_m_closestHitFraction_1, +Cd=c._emscripten_bind_ConvexResultCallback_set_m_collisionFilterGroup_1=d._emscripten_bind_ConvexResultCallback_set_m_collisionFilterGroup_1,Dd=c._emscripten_bind_ConvexResultCallback_set_m_collisionFilterMask_1=d._emscripten_bind_ConvexResultCallback_set_m_collisionFilterMask_1,Ed=c._emscripten_bind_LocalConvexResult_LocalConvexResult_5=d._emscripten_bind_LocalConvexResult_LocalConvexResult_5,Fd=c._emscripten_bind_LocalConvexResult___destroy___0=d._emscripten_bind_LocalConvexResult___destroy___0, +Gd=c._emscripten_bind_LocalConvexResult_get_m_hitCollisionObject_0=d._emscripten_bind_LocalConvexResult_get_m_hitCollisionObject_0,Hd=c._emscripten_bind_LocalConvexResult_get_m_hitFraction_0=d._emscripten_bind_LocalConvexResult_get_m_hitFraction_0,Id=c._emscripten_bind_LocalConvexResult_get_m_hitNormalLocal_0=d._emscripten_bind_LocalConvexResult_get_m_hitNormalLocal_0,Jd=c._emscripten_bind_LocalConvexResult_get_m_hitPointLocal_0=d._emscripten_bind_LocalConvexResult_get_m_hitPointLocal_0,Kd=c._emscripten_bind_LocalConvexResult_get_m_localShapeInfo_0= +d._emscripten_bind_LocalConvexResult_get_m_localShapeInfo_0,Ld=c._emscripten_bind_LocalConvexResult_set_m_hitCollisionObject_1=d._emscripten_bind_LocalConvexResult_set_m_hitCollisionObject_1,Md=c._emscripten_bind_LocalConvexResult_set_m_hitFraction_1=d._emscripten_bind_LocalConvexResult_set_m_hitFraction_1,Nd=c._emscripten_bind_LocalConvexResult_set_m_hitNormalLocal_1=d._emscripten_bind_LocalConvexResult_set_m_hitNormalLocal_1,Od=c._emscripten_bind_LocalConvexResult_set_m_hitPointLocal_1=d._emscripten_bind_LocalConvexResult_set_m_hitPointLocal_1, +Pd=c._emscripten_bind_LocalConvexResult_set_m_localShapeInfo_1=d._emscripten_bind_LocalConvexResult_set_m_localShapeInfo_1,Qd=c._emscripten_bind_LocalShapeInfo___destroy___0=d._emscripten_bind_LocalShapeInfo___destroy___0,Rd=c._emscripten_bind_LocalShapeInfo_get_m_shapePart_0=d._emscripten_bind_LocalShapeInfo_get_m_shapePart_0,Sd=c._emscripten_bind_LocalShapeInfo_get_m_triangleIndex_0=d._emscripten_bind_LocalShapeInfo_get_m_triangleIndex_0,Td=c._emscripten_bind_LocalShapeInfo_set_m_shapePart_1=d._emscripten_bind_LocalShapeInfo_set_m_shapePart_1, +Ud=c._emscripten_bind_LocalShapeInfo_set_m_triangleIndex_1=d._emscripten_bind_LocalShapeInfo_set_m_triangleIndex_1,Vd=c._emscripten_bind_Material___destroy___0=d._emscripten_bind_Material___destroy___0,Wd=c._emscripten_bind_Material_get_m_flags_0=d._emscripten_bind_Material_get_m_flags_0,Xd=c._emscripten_bind_Material_get_m_kAST_0=d._emscripten_bind_Material_get_m_kAST_0,Yd=c._emscripten_bind_Material_get_m_kLST_0=d._emscripten_bind_Material_get_m_kLST_0,Zd=c._emscripten_bind_Material_get_m_kVST_0= +d._emscripten_bind_Material_get_m_kVST_0,$d=c._emscripten_bind_Material_set_m_flags_1=d._emscripten_bind_Material_set_m_flags_1,ae=c._emscripten_bind_Material_set_m_kAST_1=d._emscripten_bind_Material_set_m_kAST_1,be=c._emscripten_bind_Material_set_m_kLST_1=d._emscripten_bind_Material_set_m_kLST_1,ce=c._emscripten_bind_Material_set_m_kVST_1=d._emscripten_bind_Material_set_m_kVST_1,de=c._emscripten_bind_Node___destroy___0=d._emscripten_bind_Node___destroy___0,ee=c._emscripten_bind_Node_get_m_f_0=d._emscripten_bind_Node_get_m_f_0, +fe=c._emscripten_bind_Node_get_m_n_0=d._emscripten_bind_Node_get_m_n_0,ge=c._emscripten_bind_Node_get_m_v_0=d._emscripten_bind_Node_get_m_v_0,he=c._emscripten_bind_Node_get_m_x_0=d._emscripten_bind_Node_get_m_x_0,ie=c._emscripten_bind_Node_set_m_f_1=d._emscripten_bind_Node_set_m_f_1,je=c._emscripten_bind_Node_set_m_n_1=d._emscripten_bind_Node_set_m_n_1,ke=c._emscripten_bind_Node_set_m_v_1=d._emscripten_bind_Node_set_m_v_1,le=c._emscripten_bind_Node_set_m_x_1=d._emscripten_bind_Node_set_m_x_1,me=c._emscripten_bind_RayResultCallback___destroy___0= +d._emscripten_bind_RayResultCallback___destroy___0,ne=c._emscripten_bind_RayResultCallback_get_m_collisionFilterGroup_0=d._emscripten_bind_RayResultCallback_get_m_collisionFilterGroup_0,oe=c._emscripten_bind_RayResultCallback_get_m_collisionFilterMask_0=d._emscripten_bind_RayResultCallback_get_m_collisionFilterMask_0,pe=c._emscripten_bind_RayResultCallback_get_m_collisionObject_0=d._emscripten_bind_RayResultCallback_get_m_collisionObject_0,qe=c._emscripten_bind_RayResultCallback_hasHit_0=d._emscripten_bind_RayResultCallback_hasHit_0, +re=c._emscripten_bind_RayResultCallback_set_m_collisionFilterGroup_1=d._emscripten_bind_RayResultCallback_set_m_collisionFilterGroup_1,se=c._emscripten_bind_RayResultCallback_set_m_collisionFilterMask_1=d._emscripten_bind_RayResultCallback_set_m_collisionFilterMask_1,te=c._emscripten_bind_RayResultCallback_set_m_collisionObject_1=d._emscripten_bind_RayResultCallback_set_m_collisionObject_1,ue=c._emscripten_bind_RaycastInfo___destroy___0=d._emscripten_bind_RaycastInfo___destroy___0,ve=c._emscripten_bind_RaycastInfo_get_m_contactNormalWS_0= +d._emscripten_bind_RaycastInfo_get_m_contactNormalWS_0,we=c._emscripten_bind_RaycastInfo_get_m_contactPointWS_0=d._emscripten_bind_RaycastInfo_get_m_contactPointWS_0,xe=c._emscripten_bind_RaycastInfo_get_m_groundObject_0=d._emscripten_bind_RaycastInfo_get_m_groundObject_0,ye=c._emscripten_bind_RaycastInfo_get_m_hardPointWS_0=d._emscripten_bind_RaycastInfo_get_m_hardPointWS_0,ze=c._emscripten_bind_RaycastInfo_get_m_isInContact_0=d._emscripten_bind_RaycastInfo_get_m_isInContact_0,Ae=c._emscripten_bind_RaycastInfo_get_m_suspensionLength_0= +d._emscripten_bind_RaycastInfo_get_m_suspensionLength_0,Be=c._emscripten_bind_RaycastInfo_get_m_wheelAxleWS_0=d._emscripten_bind_RaycastInfo_get_m_wheelAxleWS_0,Ce=c._emscripten_bind_RaycastInfo_get_m_wheelDirectionWS_0=d._emscripten_bind_RaycastInfo_get_m_wheelDirectionWS_0,De=c._emscripten_bind_RaycastInfo_set_m_contactNormalWS_1=d._emscripten_bind_RaycastInfo_set_m_contactNormalWS_1,Ee=c._emscripten_bind_RaycastInfo_set_m_contactPointWS_1=d._emscripten_bind_RaycastInfo_set_m_contactPointWS_1,Fe= +c._emscripten_bind_RaycastInfo_set_m_groundObject_1=d._emscripten_bind_RaycastInfo_set_m_groundObject_1,Ge=c._emscripten_bind_RaycastInfo_set_m_hardPointWS_1=d._emscripten_bind_RaycastInfo_set_m_hardPointWS_1,He=c._emscripten_bind_RaycastInfo_set_m_isInContact_1=d._emscripten_bind_RaycastInfo_set_m_isInContact_1,Ie=c._emscripten_bind_RaycastInfo_set_m_suspensionLength_1=d._emscripten_bind_RaycastInfo_set_m_suspensionLength_1,Je=c._emscripten_bind_RaycastInfo_set_m_wheelAxleWS_1=d._emscripten_bind_RaycastInfo_set_m_wheelAxleWS_1, +Ke=c._emscripten_bind_RaycastInfo_set_m_wheelDirectionWS_1=d._emscripten_bind_RaycastInfo_set_m_wheelDirectionWS_1,Le=c._emscripten_bind_VoidPtr___destroy___0=d._emscripten_bind_VoidPtr___destroy___0,Me=c._emscripten_bind_btActionInterface___destroy___0=d._emscripten_bind_btActionInterface___destroy___0,Ne=c._emscripten_bind_btActionInterface_updateAction_2=d._emscripten_bind_btActionInterface_updateAction_2,Oe=c._emscripten_bind_btAxisSweep3___destroy___0=d._emscripten_bind_btAxisSweep3___destroy___0, +Pe=c._emscripten_bind_btAxisSweep3_btAxisSweep3_2=d._emscripten_bind_btAxisSweep3_btAxisSweep3_2,Qe=c._emscripten_bind_btAxisSweep3_btAxisSweep3_3=d._emscripten_bind_btAxisSweep3_btAxisSweep3_3,Re=c._emscripten_bind_btAxisSweep3_btAxisSweep3_4=d._emscripten_bind_btAxisSweep3_btAxisSweep3_4,Se=c._emscripten_bind_btAxisSweep3_btAxisSweep3_5=d._emscripten_bind_btAxisSweep3_btAxisSweep3_5,Te=c._emscripten_bind_btBoxShape___destroy___0=d._emscripten_bind_btBoxShape___destroy___0,Ue=c._emscripten_bind_btBoxShape_btBoxShape_1= +d._emscripten_bind_btBoxShape_btBoxShape_1,Ve=c._emscripten_bind_btBoxShape_calculateLocalInertia_2=d._emscripten_bind_btBoxShape_calculateLocalInertia_2,We=c._emscripten_bind_btBoxShape_getLocalScaling_0=d._emscripten_bind_btBoxShape_getLocalScaling_0,Xe=c._emscripten_bind_btBoxShape_getMargin_0=d._emscripten_bind_btBoxShape_getMargin_0,Ye=c._emscripten_bind_btBoxShape_setLocalScaling_1=d._emscripten_bind_btBoxShape_setLocalScaling_1,Ze=c._emscripten_bind_btBoxShape_setMargin_1=d._emscripten_bind_btBoxShape_setMargin_1, +$e=c._emscripten_bind_btBroadphaseInterface___destroy___0=d._emscripten_bind_btBroadphaseInterface___destroy___0,af=c._emscripten_bind_btBvhTriangleMeshShape___destroy___0=d._emscripten_bind_btBvhTriangleMeshShape___destroy___0,bf=c._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_2=d._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_2,cf=c._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_3=d._emscripten_bind_btBvhTriangleMeshShape_btBvhTriangleMeshShape_3, +df=c._emscripten_bind_btBvhTriangleMeshShape_calculateLocalInertia_2=d._emscripten_bind_btBvhTriangleMeshShape_calculateLocalInertia_2,ef=c._emscripten_bind_btBvhTriangleMeshShape_getLocalScaling_0=d._emscripten_bind_btBvhTriangleMeshShape_getLocalScaling_0,ff=c._emscripten_bind_btBvhTriangleMeshShape_setLocalScaling_1=d._emscripten_bind_btBvhTriangleMeshShape_setLocalScaling_1,gf=c._emscripten_bind_btCapsuleShapeX___destroy___0=d._emscripten_bind_btCapsuleShapeX___destroy___0,hf=c._emscripten_bind_btCapsuleShapeX_btCapsuleShapeX_2= +d._emscripten_bind_btCapsuleShapeX_btCapsuleShapeX_2,jf=c._emscripten_bind_btCapsuleShapeX_calculateLocalInertia_2=d._emscripten_bind_btCapsuleShapeX_calculateLocalInertia_2,kf=c._emscripten_bind_btCapsuleShapeX_getHalfHeight_0=d._emscripten_bind_btCapsuleShapeX_getHalfHeight_0,lf=c._emscripten_bind_btCapsuleShapeX_getLocalScaling_0=d._emscripten_bind_btCapsuleShapeX_getLocalScaling_0,mf=c._emscripten_bind_btCapsuleShapeX_getMargin_0=d._emscripten_bind_btCapsuleShapeX_getMargin_0,nf=c._emscripten_bind_btCapsuleShapeX_getRadius_0= +d._emscripten_bind_btCapsuleShapeX_getRadius_0,of=c._emscripten_bind_btCapsuleShapeX_getUpAxis_0=d._emscripten_bind_btCapsuleShapeX_getUpAxis_0,pf=c._emscripten_bind_btCapsuleShapeX_setLocalScaling_1=d._emscripten_bind_btCapsuleShapeX_setLocalScaling_1,qf=c._emscripten_bind_btCapsuleShapeX_setMargin_1=d._emscripten_bind_btCapsuleShapeX_setMargin_1,rf=c._emscripten_bind_btCapsuleShapeZ___destroy___0=d._emscripten_bind_btCapsuleShapeZ___destroy___0,sf=c._emscripten_bind_btCapsuleShapeZ_btCapsuleShapeZ_2= +d._emscripten_bind_btCapsuleShapeZ_btCapsuleShapeZ_2,tf=c._emscripten_bind_btCapsuleShapeZ_calculateLocalInertia_2=d._emscripten_bind_btCapsuleShapeZ_calculateLocalInertia_2,uf=c._emscripten_bind_btCapsuleShapeZ_getHalfHeight_0=d._emscripten_bind_btCapsuleShapeZ_getHalfHeight_0,vf=c._emscripten_bind_btCapsuleShapeZ_getLocalScaling_0=d._emscripten_bind_btCapsuleShapeZ_getLocalScaling_0,wf=c._emscripten_bind_btCapsuleShapeZ_getMargin_0=d._emscripten_bind_btCapsuleShapeZ_getMargin_0,xf=c._emscripten_bind_btCapsuleShapeZ_getRadius_0= +d._emscripten_bind_btCapsuleShapeZ_getRadius_0,yf=c._emscripten_bind_btCapsuleShapeZ_getUpAxis_0=d._emscripten_bind_btCapsuleShapeZ_getUpAxis_0,zf=c._emscripten_bind_btCapsuleShapeZ_setLocalScaling_1=d._emscripten_bind_btCapsuleShapeZ_setLocalScaling_1,Af=c._emscripten_bind_btCapsuleShapeZ_setMargin_1=d._emscripten_bind_btCapsuleShapeZ_setMargin_1,Bf=c._emscripten_bind_btCapsuleShape___destroy___0=d._emscripten_bind_btCapsuleShape___destroy___0,Cf=c._emscripten_bind_btCapsuleShape_btCapsuleShape_2= +d._emscripten_bind_btCapsuleShape_btCapsuleShape_2,Df=c._emscripten_bind_btCapsuleShape_calculateLocalInertia_2=d._emscripten_bind_btCapsuleShape_calculateLocalInertia_2,Ef=c._emscripten_bind_btCapsuleShape_getHalfHeight_0=d._emscripten_bind_btCapsuleShape_getHalfHeight_0,Ff=c._emscripten_bind_btCapsuleShape_getLocalScaling_0=d._emscripten_bind_btCapsuleShape_getLocalScaling_0,Gf=c._emscripten_bind_btCapsuleShape_getMargin_0=d._emscripten_bind_btCapsuleShape_getMargin_0,Hf=c._emscripten_bind_btCapsuleShape_getRadius_0= +d._emscripten_bind_btCapsuleShape_getRadius_0,If=c._emscripten_bind_btCapsuleShape_getUpAxis_0=d._emscripten_bind_btCapsuleShape_getUpAxis_0,Jf=c._emscripten_bind_btCapsuleShape_setLocalScaling_1=d._emscripten_bind_btCapsuleShape_setLocalScaling_1,Kf=c._emscripten_bind_btCapsuleShape_setMargin_1=d._emscripten_bind_btCapsuleShape_setMargin_1,Lf=c._emscripten_bind_btCollisionConfiguration___destroy___0=d._emscripten_bind_btCollisionConfiguration___destroy___0,Mf=c._emscripten_bind_btCollisionDispatcher___destroy___0= +d._emscripten_bind_btCollisionDispatcher___destroy___0,Nf=c._emscripten_bind_btCollisionDispatcher_btCollisionDispatcher_1=d._emscripten_bind_btCollisionDispatcher_btCollisionDispatcher_1,Of=c._emscripten_bind_btCollisionDispatcher_getManifoldByIndexInternal_1=d._emscripten_bind_btCollisionDispatcher_getManifoldByIndexInternal_1,Pf=c._emscripten_bind_btCollisionDispatcher_getNumManifolds_0=d._emscripten_bind_btCollisionDispatcher_getNumManifolds_0,Qf=c._emscripten_bind_btCollisionObject___destroy___0= +d._emscripten_bind_btCollisionObject___destroy___0,Rf=c._emscripten_bind_btCollisionObject_activate_0=d._emscripten_bind_btCollisionObject_activate_0,Sf=c._emscripten_bind_btCollisionObject_activate_1=d._emscripten_bind_btCollisionObject_activate_1,Tf=c._emscripten_bind_btCollisionObject_forceActivationState_1=d._emscripten_bind_btCollisionObject_forceActivationState_1,Uf=c._emscripten_bind_btCollisionObject_getCollisionFlags_0=d._emscripten_bind_btCollisionObject_getCollisionFlags_0,Vf=c._emscripten_bind_btCollisionObject_getCollisionShape_0= +d._emscripten_bind_btCollisionObject_getCollisionShape_0,Wf=c._emscripten_bind_btCollisionObject_getUserIndex_0=d._emscripten_bind_btCollisionObject_getUserIndex_0,Xf=c._emscripten_bind_btCollisionObject_getUserPointer_0=d._emscripten_bind_btCollisionObject_getUserPointer_0,Yf=c._emscripten_bind_btCollisionObject_getWorldTransform_0=d._emscripten_bind_btCollisionObject_getWorldTransform_0,Zf=c._emscripten_bind_btCollisionObject_isActive_0=d._emscripten_bind_btCollisionObject_isActive_0,$f=c._emscripten_bind_btCollisionObject_isKinematicObject_0= +d._emscripten_bind_btCollisionObject_isKinematicObject_0,ag=c._emscripten_bind_btCollisionObject_isStaticObject_0=d._emscripten_bind_btCollisionObject_isStaticObject_0,bg=c._emscripten_bind_btCollisionObject_isStaticOrKinematicObject_0=d._emscripten_bind_btCollisionObject_isStaticOrKinematicObject_0,cg=c._emscripten_bind_btCollisionObject_setActivationState_1=d._emscripten_bind_btCollisionObject_setActivationState_1,dg=c._emscripten_bind_btCollisionObject_setAnisotropicFriction_2=d._emscripten_bind_btCollisionObject_setAnisotropicFriction_2, +eg=c._emscripten_bind_btCollisionObject_setCcdMotionThreshold_1=d._emscripten_bind_btCollisionObject_setCcdMotionThreshold_1,fg=c._emscripten_bind_btCollisionObject_setCcdSweptSphereRadius_1=d._emscripten_bind_btCollisionObject_setCcdSweptSphereRadius_1,gg=c._emscripten_bind_btCollisionObject_setCollisionFlags_1=d._emscripten_bind_btCollisionObject_setCollisionFlags_1,hg=c._emscripten_bind_btCollisionObject_setCollisionShape_1=d._emscripten_bind_btCollisionObject_setCollisionShape_1,ig=c._emscripten_bind_btCollisionObject_setContactProcessingThreshold_1= +d._emscripten_bind_btCollisionObject_setContactProcessingThreshold_1,jg=c._emscripten_bind_btCollisionObject_setFriction_1=d._emscripten_bind_btCollisionObject_setFriction_1,kg=c._emscripten_bind_btCollisionObject_setRestitution_1=d._emscripten_bind_btCollisionObject_setRestitution_1,lg=c._emscripten_bind_btCollisionObject_setRollingFriction_1=d._emscripten_bind_btCollisionObject_setRollingFriction_1,mg=c._emscripten_bind_btCollisionObject_setUserIndex_1=d._emscripten_bind_btCollisionObject_setUserIndex_1, +ng=c._emscripten_bind_btCollisionObject_setUserPointer_1=d._emscripten_bind_btCollisionObject_setUserPointer_1,og=c._emscripten_bind_btCollisionObject_setWorldTransform_1=d._emscripten_bind_btCollisionObject_setWorldTransform_1,pg=c._emscripten_bind_btCollisionShape___destroy___0=d._emscripten_bind_btCollisionShape___destroy___0,qg=c._emscripten_bind_btCollisionShape_calculateLocalInertia_2=d._emscripten_bind_btCollisionShape_calculateLocalInertia_2,rg=c._emscripten_bind_btCollisionShape_getLocalScaling_0= +d._emscripten_bind_btCollisionShape_getLocalScaling_0,sg=c._emscripten_bind_btCollisionShape_getMargin_0=d._emscripten_bind_btCollisionShape_getMargin_0,tg=c._emscripten_bind_btCollisionShape_setLocalScaling_1=d._emscripten_bind_btCollisionShape_setLocalScaling_1,ug=c._emscripten_bind_btCollisionShape_setMargin_1=d._emscripten_bind_btCollisionShape_setMargin_1,vg=c._emscripten_bind_btCollisionWorld___destroy___0=d._emscripten_bind_btCollisionWorld___destroy___0,wg=c._emscripten_bind_btCollisionWorld_addCollisionObject_1= +d._emscripten_bind_btCollisionWorld_addCollisionObject_1,xg=c._emscripten_bind_btCollisionWorld_addCollisionObject_2=d._emscripten_bind_btCollisionWorld_addCollisionObject_2,yg=c._emscripten_bind_btCollisionWorld_addCollisionObject_3=d._emscripten_bind_btCollisionWorld_addCollisionObject_3,zg=c._emscripten_bind_btCollisionWorld_contactPairTest_3=d._emscripten_bind_btCollisionWorld_contactPairTest_3,Ag=c._emscripten_bind_btCollisionWorld_contactTest_2=d._emscripten_bind_btCollisionWorld_contactTest_2, +Bg=c._emscripten_bind_btCollisionWorld_convexSweepTest_5=d._emscripten_bind_btCollisionWorld_convexSweepTest_5,Cg=c._emscripten_bind_btCollisionWorld_getBroadphase_0=d._emscripten_bind_btCollisionWorld_getBroadphase_0,Dg=c._emscripten_bind_btCollisionWorld_getDispatchInfo_0=d._emscripten_bind_btCollisionWorld_getDispatchInfo_0,Eg=c._emscripten_bind_btCollisionWorld_getDispatcher_0=d._emscripten_bind_btCollisionWorld_getDispatcher_0,Fg=c._emscripten_bind_btCollisionWorld_getPairCache_0=d._emscripten_bind_btCollisionWorld_getPairCache_0, +Gg=c._emscripten_bind_btCollisionWorld_rayTest_3=d._emscripten_bind_btCollisionWorld_rayTest_3,Hg=c._emscripten_bind_btCollisionWorld_removeCollisionObject_1=d._emscripten_bind_btCollisionWorld_removeCollisionObject_1,Ig=c._emscripten_bind_btCollisionWorld_updateSingleAabb_1=d._emscripten_bind_btCollisionWorld_updateSingleAabb_1,Jg=c._emscripten_bind_btCompoundShape___destroy___0=d._emscripten_bind_btCompoundShape___destroy___0,Kg=c._emscripten_bind_btCompoundShape_addChildShape_2=d._emscripten_bind_btCompoundShape_addChildShape_2, +Lg=c._emscripten_bind_btCompoundShape_btCompoundShape_0=d._emscripten_bind_btCompoundShape_btCompoundShape_0,Mg=c._emscripten_bind_btCompoundShape_btCompoundShape_1=d._emscripten_bind_btCompoundShape_btCompoundShape_1,Ng=c._emscripten_bind_btCompoundShape_calculateLocalInertia_2=d._emscripten_bind_btCompoundShape_calculateLocalInertia_2,Og=c._emscripten_bind_btCompoundShape_getChildShape_1=d._emscripten_bind_btCompoundShape_getChildShape_1,Pg=c._emscripten_bind_btCompoundShape_getLocalScaling_0=d._emscripten_bind_btCompoundShape_getLocalScaling_0, +Qg=c._emscripten_bind_btCompoundShape_getMargin_0=d._emscripten_bind_btCompoundShape_getMargin_0,Rg=c._emscripten_bind_btCompoundShape_getNumChildShapes_0=d._emscripten_bind_btCompoundShape_getNumChildShapes_0,Sg=c._emscripten_bind_btCompoundShape_removeChildShapeByIndex_1=d._emscripten_bind_btCompoundShape_removeChildShapeByIndex_1,Tg=c._emscripten_bind_btCompoundShape_setLocalScaling_1=d._emscripten_bind_btCompoundShape_setLocalScaling_1,Ug=c._emscripten_bind_btCompoundShape_setMargin_1=d._emscripten_bind_btCompoundShape_setMargin_1, +Vg=c._emscripten_bind_btConcaveShape___destroy___0=d._emscripten_bind_btConcaveShape___destroy___0,Wg=c._emscripten_bind_btConcaveShape_calculateLocalInertia_2=d._emscripten_bind_btConcaveShape_calculateLocalInertia_2,Xg=c._emscripten_bind_btConcaveShape_getLocalScaling_0=d._emscripten_bind_btConcaveShape_getLocalScaling_0,Yg=c._emscripten_bind_btConcaveShape_setLocalScaling_1=d._emscripten_bind_btConcaveShape_setLocalScaling_1,Zg=c._emscripten_bind_btConeShapeX___destroy___0=d._emscripten_bind_btConeShapeX___destroy___0, +$g=c._emscripten_bind_btConeShapeX_btConeShapeX_2=d._emscripten_bind_btConeShapeX_btConeShapeX_2,ah=c._emscripten_bind_btConeShapeX_calculateLocalInertia_2=d._emscripten_bind_btConeShapeX_calculateLocalInertia_2,bh=c._emscripten_bind_btConeShapeX_getLocalScaling_0=d._emscripten_bind_btConeShapeX_getLocalScaling_0,ch=c._emscripten_bind_btConeShapeX_setLocalScaling_1=d._emscripten_bind_btConeShapeX_setLocalScaling_1,dh=c._emscripten_bind_btConeShapeZ___destroy___0=d._emscripten_bind_btConeShapeZ___destroy___0, +eh=c._emscripten_bind_btConeShapeZ_btConeShapeZ_2=d._emscripten_bind_btConeShapeZ_btConeShapeZ_2,fh=c._emscripten_bind_btConeShapeZ_calculateLocalInertia_2=d._emscripten_bind_btConeShapeZ_calculateLocalInertia_2,gh=c._emscripten_bind_btConeShapeZ_getLocalScaling_0=d._emscripten_bind_btConeShapeZ_getLocalScaling_0,hh=c._emscripten_bind_btConeShapeZ_setLocalScaling_1=d._emscripten_bind_btConeShapeZ_setLocalScaling_1,ih=c._emscripten_bind_btConeShape___destroy___0=d._emscripten_bind_btConeShape___destroy___0, +jh=c._emscripten_bind_btConeShape_btConeShape_2=d._emscripten_bind_btConeShape_btConeShape_2,kh=c._emscripten_bind_btConeShape_calculateLocalInertia_2=d._emscripten_bind_btConeShape_calculateLocalInertia_2,lh=c._emscripten_bind_btConeShape_getLocalScaling_0=d._emscripten_bind_btConeShape_getLocalScaling_0,mh=c._emscripten_bind_btConeShape_setLocalScaling_1=d._emscripten_bind_btConeShape_setLocalScaling_1,nh=c._emscripten_bind_btConeTwistConstraint___destroy___0=d._emscripten_bind_btConeTwistConstraint___destroy___0, +oh=c._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_2=d._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_2,ph=c._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_4=d._emscripten_bind_btConeTwistConstraint_btConeTwistConstraint_4,qh=c._emscripten_bind_btConeTwistConstraint_enableFeedback_1=d._emscripten_bind_btConeTwistConstraint_enableFeedback_1,rh=c._emscripten_bind_btConeTwistConstraint_enableMotor_1=d._emscripten_bind_btConeTwistConstraint_enableMotor_1,sh= +c._emscripten_bind_btConeTwistConstraint_getBreakingImpulseThreshold_0=d._emscripten_bind_btConeTwistConstraint_getBreakingImpulseThreshold_0,th=c._emscripten_bind_btConeTwistConstraint_getParam_2=d._emscripten_bind_btConeTwistConstraint_getParam_2,uh=c._emscripten_bind_btConeTwistConstraint_setAngularOnly_1=d._emscripten_bind_btConeTwistConstraint_setAngularOnly_1,vh=c._emscripten_bind_btConeTwistConstraint_setBreakingImpulseThreshold_1=d._emscripten_bind_btConeTwistConstraint_setBreakingImpulseThreshold_1, +wh=c._emscripten_bind_btConeTwistConstraint_setDamping_1=d._emscripten_bind_btConeTwistConstraint_setDamping_1,xh=c._emscripten_bind_btConeTwistConstraint_setLimit_2=d._emscripten_bind_btConeTwistConstraint_setLimit_2,yh=c._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulseNormalized_1=d._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulseNormalized_1,zh=c._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulse_1=d._emscripten_bind_btConeTwistConstraint_setMaxMotorImpulse_1,Ah=c._emscripten_bind_btConeTwistConstraint_setMotorTargetInConstraintSpace_1= +d._emscripten_bind_btConeTwistConstraint_setMotorTargetInConstraintSpace_1,Bh=c._emscripten_bind_btConeTwistConstraint_setMotorTarget_1=d._emscripten_bind_btConeTwistConstraint_setMotorTarget_1,Ch=c._emscripten_bind_btConeTwistConstraint_setParam_3=d._emscripten_bind_btConeTwistConstraint_setParam_3,Dh=c._emscripten_bind_btConstraintSetting___destroy___0=d._emscripten_bind_btConstraintSetting___destroy___0,Eh=c._emscripten_bind_btConstraintSetting_btConstraintSetting_0=d._emscripten_bind_btConstraintSetting_btConstraintSetting_0, +Fh=c._emscripten_bind_btConstraintSetting_get_m_damping_0=d._emscripten_bind_btConstraintSetting_get_m_damping_0,Gh=c._emscripten_bind_btConstraintSetting_get_m_impulseClamp_0=d._emscripten_bind_btConstraintSetting_get_m_impulseClamp_0,Hh=c._emscripten_bind_btConstraintSetting_get_m_tau_0=d._emscripten_bind_btConstraintSetting_get_m_tau_0,Ih=c._emscripten_bind_btConstraintSetting_set_m_damping_1=d._emscripten_bind_btConstraintSetting_set_m_damping_1,Jh=c._emscripten_bind_btConstraintSetting_set_m_impulseClamp_1= +d._emscripten_bind_btConstraintSetting_set_m_impulseClamp_1,Kh=c._emscripten_bind_btConstraintSetting_set_m_tau_1=d._emscripten_bind_btConstraintSetting_set_m_tau_1,Lh=c._emscripten_bind_btConstraintSolver___destroy___0=d._emscripten_bind_btConstraintSolver___destroy___0,Mh=c._emscripten_bind_btContactSolverInfo___destroy___0=d._emscripten_bind_btContactSolverInfo___destroy___0,Nh=c._emscripten_bind_btContactSolverInfo_get_m_numIterations_0=d._emscripten_bind_btContactSolverInfo_get_m_numIterations_0, +Oh=c._emscripten_bind_btContactSolverInfo_get_m_splitImpulsePenetrationThreshold_0=d._emscripten_bind_btContactSolverInfo_get_m_splitImpulsePenetrationThreshold_0,Ph=c._emscripten_bind_btContactSolverInfo_get_m_splitImpulse_0=d._emscripten_bind_btContactSolverInfo_get_m_splitImpulse_0,Qh=c._emscripten_bind_btContactSolverInfo_set_m_numIterations_1=d._emscripten_bind_btContactSolverInfo_set_m_numIterations_1,Rh=c._emscripten_bind_btContactSolverInfo_set_m_splitImpulsePenetrationThreshold_1=d._emscripten_bind_btContactSolverInfo_set_m_splitImpulsePenetrationThreshold_1, +Sh=c._emscripten_bind_btContactSolverInfo_set_m_splitImpulse_1=d._emscripten_bind_btContactSolverInfo_set_m_splitImpulse_1,Th=c._emscripten_bind_btConvexHullShape___destroy___0=d._emscripten_bind_btConvexHullShape___destroy___0,Uh=c._emscripten_bind_btConvexHullShape_addPoint_1=d._emscripten_bind_btConvexHullShape_addPoint_1,Vh=c._emscripten_bind_btConvexHullShape_addPoint_2=d._emscripten_bind_btConvexHullShape_addPoint_2,Wh=c._emscripten_bind_btConvexHullShape_btConvexHullShape_0=d._emscripten_bind_btConvexHullShape_btConvexHullShape_0, +Xh=c._emscripten_bind_btConvexHullShape_calculateLocalInertia_2=d._emscripten_bind_btConvexHullShape_calculateLocalInertia_2,Yh=c._emscripten_bind_btConvexHullShape_getLocalScaling_0=d._emscripten_bind_btConvexHullShape_getLocalScaling_0,Zh=c._emscripten_bind_btConvexHullShape_getMargin_0=d._emscripten_bind_btConvexHullShape_getMargin_0,$h=c._emscripten_bind_btConvexHullShape_setLocalScaling_1=d._emscripten_bind_btConvexHullShape_setLocalScaling_1,ai=c._emscripten_bind_btConvexHullShape_setMargin_1= +d._emscripten_bind_btConvexHullShape_setMargin_1,bi=c._emscripten_bind_btConvexShape___destroy___0=d._emscripten_bind_btConvexShape___destroy___0,ci=c._emscripten_bind_btConvexShape_calculateLocalInertia_2=d._emscripten_bind_btConvexShape_calculateLocalInertia_2,di=c._emscripten_bind_btConvexShape_getLocalScaling_0=d._emscripten_bind_btConvexShape_getLocalScaling_0,ei=c._emscripten_bind_btConvexShape_getMargin_0=d._emscripten_bind_btConvexShape_getMargin_0,fi=c._emscripten_bind_btConvexShape_setLocalScaling_1= +d._emscripten_bind_btConvexShape_setLocalScaling_1,gi=c._emscripten_bind_btConvexShape_setMargin_1=d._emscripten_bind_btConvexShape_setMargin_1,hi=c._emscripten_bind_btConvexTriangleMeshShape___destroy___0=d._emscripten_bind_btConvexTriangleMeshShape___destroy___0,ii=c._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_1=d._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_1,ji=c._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_2=d._emscripten_bind_btConvexTriangleMeshShape_btConvexTriangleMeshShape_2, +ki=c._emscripten_bind_btConvexTriangleMeshShape_calculateLocalInertia_2=d._emscripten_bind_btConvexTriangleMeshShape_calculateLocalInertia_2,li=c._emscripten_bind_btConvexTriangleMeshShape_getLocalScaling_0=d._emscripten_bind_btConvexTriangleMeshShape_getLocalScaling_0,mi=c._emscripten_bind_btConvexTriangleMeshShape_getMargin_0=d._emscripten_bind_btConvexTriangleMeshShape_getMargin_0,ni=c._emscripten_bind_btConvexTriangleMeshShape_setLocalScaling_1=d._emscripten_bind_btConvexTriangleMeshShape_setLocalScaling_1, +oi=c._emscripten_bind_btConvexTriangleMeshShape_setMargin_1=d._emscripten_bind_btConvexTriangleMeshShape_setMargin_1,pi=c._emscripten_bind_btCylinderShapeX___destroy___0=d._emscripten_bind_btCylinderShapeX___destroy___0,qi=c._emscripten_bind_btCylinderShapeX_btCylinderShapeX_1=d._emscripten_bind_btCylinderShapeX_btCylinderShapeX_1,ri=c._emscripten_bind_btCylinderShapeX_calculateLocalInertia_2=d._emscripten_bind_btCylinderShapeX_calculateLocalInertia_2,si=c._emscripten_bind_btCylinderShapeX_getLocalScaling_0= +d._emscripten_bind_btCylinderShapeX_getLocalScaling_0,ti=c._emscripten_bind_btCylinderShapeX_getMargin_0=d._emscripten_bind_btCylinderShapeX_getMargin_0,ui=c._emscripten_bind_btCylinderShapeX_setLocalScaling_1=d._emscripten_bind_btCylinderShapeX_setLocalScaling_1,vi=c._emscripten_bind_btCylinderShapeX_setMargin_1=d._emscripten_bind_btCylinderShapeX_setMargin_1,wi=c._emscripten_bind_btCylinderShapeZ___destroy___0=d._emscripten_bind_btCylinderShapeZ___destroy___0,xi=c._emscripten_bind_btCylinderShapeZ_btCylinderShapeZ_1= +d._emscripten_bind_btCylinderShapeZ_btCylinderShapeZ_1,yi=c._emscripten_bind_btCylinderShapeZ_calculateLocalInertia_2=d._emscripten_bind_btCylinderShapeZ_calculateLocalInertia_2,zi=c._emscripten_bind_btCylinderShapeZ_getLocalScaling_0=d._emscripten_bind_btCylinderShapeZ_getLocalScaling_0,Ai=c._emscripten_bind_btCylinderShapeZ_getMargin_0=d._emscripten_bind_btCylinderShapeZ_getMargin_0,Bi=c._emscripten_bind_btCylinderShapeZ_setLocalScaling_1=d._emscripten_bind_btCylinderShapeZ_setLocalScaling_1,Ci= +c._emscripten_bind_btCylinderShapeZ_setMargin_1=d._emscripten_bind_btCylinderShapeZ_setMargin_1,Di=c._emscripten_bind_btCylinderShape___destroy___0=d._emscripten_bind_btCylinderShape___destroy___0,Ei=c._emscripten_bind_btCylinderShape_btCylinderShape_1=d._emscripten_bind_btCylinderShape_btCylinderShape_1,Fi=c._emscripten_bind_btCylinderShape_calculateLocalInertia_2=d._emscripten_bind_btCylinderShape_calculateLocalInertia_2,Gi=c._emscripten_bind_btCylinderShape_getLocalScaling_0=d._emscripten_bind_btCylinderShape_getLocalScaling_0, +Hi=c._emscripten_bind_btCylinderShape_getMargin_0=d._emscripten_bind_btCylinderShape_getMargin_0,Ii=c._emscripten_bind_btCylinderShape_setLocalScaling_1=d._emscripten_bind_btCylinderShape_setLocalScaling_1,Ji=c._emscripten_bind_btCylinderShape_setMargin_1=d._emscripten_bind_btCylinderShape_setMargin_1,Ki=c._emscripten_bind_btDbvtBroadphase___destroy___0=d._emscripten_bind_btDbvtBroadphase___destroy___0,Li=c._emscripten_bind_btDbvtBroadphase_btDbvtBroadphase_0=d._emscripten_bind_btDbvtBroadphase_btDbvtBroadphase_0, +Mi=c._emscripten_bind_btDefaultCollisionConfiguration___destroy___0=d._emscripten_bind_btDefaultCollisionConfiguration___destroy___0,Ni=c._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_0=d._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_0,Oi=c._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_1=d._emscripten_bind_btDefaultCollisionConfiguration_btDefaultCollisionConfiguration_1,Pi=c._emscripten_bind_btDefaultCollisionConstructionInfo___destroy___0= +d._emscripten_bind_btDefaultCollisionConstructionInfo___destroy___0,Qi=c._emscripten_bind_btDefaultCollisionConstructionInfo_btDefaultCollisionConstructionInfo_0=d._emscripten_bind_btDefaultCollisionConstructionInfo_btDefaultCollisionConstructionInfo_0,Ri=c._emscripten_bind_btDefaultMotionState___destroy___0=d._emscripten_bind_btDefaultMotionState___destroy___0,Si=c._emscripten_bind_btDefaultMotionState_btDefaultMotionState_0=d._emscripten_bind_btDefaultMotionState_btDefaultMotionState_0,Ti=c._emscripten_bind_btDefaultMotionState_btDefaultMotionState_1= +d._emscripten_bind_btDefaultMotionState_btDefaultMotionState_1,Ui=c._emscripten_bind_btDefaultMotionState_btDefaultMotionState_2=d._emscripten_bind_btDefaultMotionState_btDefaultMotionState_2,Vi=c._emscripten_bind_btDefaultMotionState_getWorldTransform_1=d._emscripten_bind_btDefaultMotionState_getWorldTransform_1,Wi=c._emscripten_bind_btDefaultMotionState_get_m_graphicsWorldTrans_0=d._emscripten_bind_btDefaultMotionState_get_m_graphicsWorldTrans_0,Xi=c._emscripten_bind_btDefaultMotionState_setWorldTransform_1= +d._emscripten_bind_btDefaultMotionState_setWorldTransform_1,Yi=c._emscripten_bind_btDefaultMotionState_set_m_graphicsWorldTrans_1=d._emscripten_bind_btDefaultMotionState_set_m_graphicsWorldTrans_1,Zi=c._emscripten_bind_btDefaultSoftBodySolver___destroy___0=d._emscripten_bind_btDefaultSoftBodySolver___destroy___0,$i=c._emscripten_bind_btDefaultSoftBodySolver_btDefaultSoftBodySolver_0=d._emscripten_bind_btDefaultSoftBodySolver_btDefaultSoftBodySolver_0,aj=c._emscripten_bind_btDefaultVehicleRaycaster___destroy___0= +d._emscripten_bind_btDefaultVehicleRaycaster___destroy___0,bj=c._emscripten_bind_btDefaultVehicleRaycaster_btDefaultVehicleRaycaster_1=d._emscripten_bind_btDefaultVehicleRaycaster_btDefaultVehicleRaycaster_1,cj=c._emscripten_bind_btDefaultVehicleRaycaster_castRay_3=d._emscripten_bind_btDefaultVehicleRaycaster_castRay_3,dj=c._emscripten_bind_btDiscreteDynamicsWorld___destroy___0=d._emscripten_bind_btDiscreteDynamicsWorld___destroy___0,ej=c._emscripten_bind_btDiscreteDynamicsWorld_addAction_1=d._emscripten_bind_btDiscreteDynamicsWorld_addAction_1, +fj=c._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_1=d._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_1,gj=c._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_2=d._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_2,hj=c._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_3=d._emscripten_bind_btDiscreteDynamicsWorld_addCollisionObject_3,ij=c._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_1=d._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_1, +jj=c._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_2=d._emscripten_bind_btDiscreteDynamicsWorld_addConstraint_2,kj=c._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_1=d._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_1,lj=c._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_3=d._emscripten_bind_btDiscreteDynamicsWorld_addRigidBody_3,mj=c._emscripten_bind_btDiscreteDynamicsWorld_btDiscreteDynamicsWorld_4=d._emscripten_bind_btDiscreteDynamicsWorld_btDiscreteDynamicsWorld_4,nj= +c._emscripten_bind_btDiscreteDynamicsWorld_contactPairTest_3=d._emscripten_bind_btDiscreteDynamicsWorld_contactPairTest_3,oj=c._emscripten_bind_btDiscreteDynamicsWorld_contactTest_2=d._emscripten_bind_btDiscreteDynamicsWorld_contactTest_2,pj=c._emscripten_bind_btDiscreteDynamicsWorld_convexSweepTest_5=d._emscripten_bind_btDiscreteDynamicsWorld_convexSweepTest_5,qj=c._emscripten_bind_btDiscreteDynamicsWorld_getBroadphase_0=d._emscripten_bind_btDiscreteDynamicsWorld_getBroadphase_0,rj=c._emscripten_bind_btDiscreteDynamicsWorld_getDispatchInfo_0= +d._emscripten_bind_btDiscreteDynamicsWorld_getDispatchInfo_0,sj=c._emscripten_bind_btDiscreteDynamicsWorld_getDispatcher_0=d._emscripten_bind_btDiscreteDynamicsWorld_getDispatcher_0,tj=c._emscripten_bind_btDiscreteDynamicsWorld_getGravity_0=d._emscripten_bind_btDiscreteDynamicsWorld_getGravity_0,uj=c._emscripten_bind_btDiscreteDynamicsWorld_getPairCache_0=d._emscripten_bind_btDiscreteDynamicsWorld_getPairCache_0,vj=c._emscripten_bind_btDiscreteDynamicsWorld_getSolverInfo_0=d._emscripten_bind_btDiscreteDynamicsWorld_getSolverInfo_0, +wj=c._emscripten_bind_btDiscreteDynamicsWorld_rayTest_3=d._emscripten_bind_btDiscreteDynamicsWorld_rayTest_3,xj=c._emscripten_bind_btDiscreteDynamicsWorld_removeAction_1=d._emscripten_bind_btDiscreteDynamicsWorld_removeAction_1,yj=c._emscripten_bind_btDiscreteDynamicsWorld_removeCollisionObject_1=d._emscripten_bind_btDiscreteDynamicsWorld_removeCollisionObject_1,zj=c._emscripten_bind_btDiscreteDynamicsWorld_removeConstraint_1=d._emscripten_bind_btDiscreteDynamicsWorld_removeConstraint_1,Aj=c._emscripten_bind_btDiscreteDynamicsWorld_removeRigidBody_1= +d._emscripten_bind_btDiscreteDynamicsWorld_removeRigidBody_1,Bj=c._emscripten_bind_btDiscreteDynamicsWorld_setGravity_1=d._emscripten_bind_btDiscreteDynamicsWorld_setGravity_1,Cj=c._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_1=d._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_1,Dj=c._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_2=d._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_2,Ej=c._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_3=d._emscripten_bind_btDiscreteDynamicsWorld_stepSimulation_3, +Fj=c._emscripten_bind_btDiscreteDynamicsWorld_updateSingleAabb_1=d._emscripten_bind_btDiscreteDynamicsWorld_updateSingleAabb_1,Gj=c._emscripten_bind_btDispatcherInfo___destroy___0=d._emscripten_bind_btDispatcherInfo___destroy___0,Hj=c._emscripten_bind_btDispatcherInfo_get_m_allowedCcdPenetration_0=d._emscripten_bind_btDispatcherInfo_get_m_allowedCcdPenetration_0,Ij=c._emscripten_bind_btDispatcherInfo_get_m_convexConservativeDistanceThreshold_0=d._emscripten_bind_btDispatcherInfo_get_m_convexConservativeDistanceThreshold_0, +Jj=c._emscripten_bind_btDispatcherInfo_get_m_dispatchFunc_0=d._emscripten_bind_btDispatcherInfo_get_m_dispatchFunc_0,Kj=c._emscripten_bind_btDispatcherInfo_get_m_enableSPU_0=d._emscripten_bind_btDispatcherInfo_get_m_enableSPU_0,Lj=c._emscripten_bind_btDispatcherInfo_get_m_enableSatConvex_0=d._emscripten_bind_btDispatcherInfo_get_m_enableSatConvex_0,Mj=c._emscripten_bind_btDispatcherInfo_get_m_stepCount_0=d._emscripten_bind_btDispatcherInfo_get_m_stepCount_0,Nj=c._emscripten_bind_btDispatcherInfo_get_m_timeOfImpact_0= +d._emscripten_bind_btDispatcherInfo_get_m_timeOfImpact_0,Oj=c._emscripten_bind_btDispatcherInfo_get_m_timeStep_0=d._emscripten_bind_btDispatcherInfo_get_m_timeStep_0,Pj=c._emscripten_bind_btDispatcherInfo_get_m_useContinuous_0=d._emscripten_bind_btDispatcherInfo_get_m_useContinuous_0,Qj=c._emscripten_bind_btDispatcherInfo_get_m_useConvexConservativeDistanceUtil_0=d._emscripten_bind_btDispatcherInfo_get_m_useConvexConservativeDistanceUtil_0,Rj=c._emscripten_bind_btDispatcherInfo_get_m_useEpa_0=d._emscripten_bind_btDispatcherInfo_get_m_useEpa_0, +Sj=c._emscripten_bind_btDispatcherInfo_set_m_allowedCcdPenetration_1=d._emscripten_bind_btDispatcherInfo_set_m_allowedCcdPenetration_1,Tj=c._emscripten_bind_btDispatcherInfo_set_m_convexConservativeDistanceThreshold_1=d._emscripten_bind_btDispatcherInfo_set_m_convexConservativeDistanceThreshold_1,Uj=c._emscripten_bind_btDispatcherInfo_set_m_dispatchFunc_1=d._emscripten_bind_btDispatcherInfo_set_m_dispatchFunc_1,Vj=c._emscripten_bind_btDispatcherInfo_set_m_enableSPU_1=d._emscripten_bind_btDispatcherInfo_set_m_enableSPU_1, +Wj=c._emscripten_bind_btDispatcherInfo_set_m_enableSatConvex_1=d._emscripten_bind_btDispatcherInfo_set_m_enableSatConvex_1,Xj=c._emscripten_bind_btDispatcherInfo_set_m_stepCount_1=d._emscripten_bind_btDispatcherInfo_set_m_stepCount_1,Yj=c._emscripten_bind_btDispatcherInfo_set_m_timeOfImpact_1=d._emscripten_bind_btDispatcherInfo_set_m_timeOfImpact_1,Zj=c._emscripten_bind_btDispatcherInfo_set_m_timeStep_1=d._emscripten_bind_btDispatcherInfo_set_m_timeStep_1,ak=c._emscripten_bind_btDispatcherInfo_set_m_useContinuous_1= +d._emscripten_bind_btDispatcherInfo_set_m_useContinuous_1,bk=c._emscripten_bind_btDispatcherInfo_set_m_useConvexConservativeDistanceUtil_1=d._emscripten_bind_btDispatcherInfo_set_m_useConvexConservativeDistanceUtil_1,ck=c._emscripten_bind_btDispatcherInfo_set_m_useEpa_1=d._emscripten_bind_btDispatcherInfo_set_m_useEpa_1,dk=c._emscripten_bind_btDispatcher___destroy___0=d._emscripten_bind_btDispatcher___destroy___0,ek=c._emscripten_bind_btDispatcher_getManifoldByIndexInternal_1=d._emscripten_bind_btDispatcher_getManifoldByIndexInternal_1, +fk=c._emscripten_bind_btDispatcher_getNumManifolds_0=d._emscripten_bind_btDispatcher_getNumManifolds_0,gk=c._emscripten_bind_btDynamicsWorld___destroy___0=d._emscripten_bind_btDynamicsWorld___destroy___0,hk=c._emscripten_bind_btDynamicsWorld_addAction_1=d._emscripten_bind_btDynamicsWorld_addAction_1,ik=c._emscripten_bind_btDynamicsWorld_addCollisionObject_1=d._emscripten_bind_btDynamicsWorld_addCollisionObject_1,jk=c._emscripten_bind_btDynamicsWorld_addCollisionObject_2=d._emscripten_bind_btDynamicsWorld_addCollisionObject_2, +kk=c._emscripten_bind_btDynamicsWorld_addCollisionObject_3=d._emscripten_bind_btDynamicsWorld_addCollisionObject_3,lk=c._emscripten_bind_btDynamicsWorld_contactPairTest_3=d._emscripten_bind_btDynamicsWorld_contactPairTest_3,mk=c._emscripten_bind_btDynamicsWorld_contactTest_2=d._emscripten_bind_btDynamicsWorld_contactTest_2,nk=c._emscripten_bind_btDynamicsWorld_convexSweepTest_5=d._emscripten_bind_btDynamicsWorld_convexSweepTest_5,ok=c._emscripten_bind_btDynamicsWorld_getBroadphase_0=d._emscripten_bind_btDynamicsWorld_getBroadphase_0, +pk=c._emscripten_bind_btDynamicsWorld_getDispatchInfo_0=d._emscripten_bind_btDynamicsWorld_getDispatchInfo_0,qk=c._emscripten_bind_btDynamicsWorld_getDispatcher_0=d._emscripten_bind_btDynamicsWorld_getDispatcher_0,rk=c._emscripten_bind_btDynamicsWorld_getPairCache_0=d._emscripten_bind_btDynamicsWorld_getPairCache_0,sk=c._emscripten_bind_btDynamicsWorld_getSolverInfo_0=d._emscripten_bind_btDynamicsWorld_getSolverInfo_0,tk=c._emscripten_bind_btDynamicsWorld_rayTest_3=d._emscripten_bind_btDynamicsWorld_rayTest_3, +uk=c._emscripten_bind_btDynamicsWorld_removeAction_1=d._emscripten_bind_btDynamicsWorld_removeAction_1,vk=c._emscripten_bind_btDynamicsWorld_removeCollisionObject_1=d._emscripten_bind_btDynamicsWorld_removeCollisionObject_1,wk=c._emscripten_bind_btDynamicsWorld_updateSingleAabb_1=d._emscripten_bind_btDynamicsWorld_updateSingleAabb_1,xk=c._emscripten_bind_btFixedConstraint___destroy___0=d._emscripten_bind_btFixedConstraint___destroy___0,yk=c._emscripten_bind_btFixedConstraint_btFixedConstraint_4=d._emscripten_bind_btFixedConstraint_btFixedConstraint_4, +zk=c._emscripten_bind_btFixedConstraint_enableFeedback_1=d._emscripten_bind_btFixedConstraint_enableFeedback_1,Ak=c._emscripten_bind_btFixedConstraint_getBreakingImpulseThreshold_0=d._emscripten_bind_btFixedConstraint_getBreakingImpulseThreshold_0,Bk=c._emscripten_bind_btFixedConstraint_getParam_2=d._emscripten_bind_btFixedConstraint_getParam_2,Ck=c._emscripten_bind_btFixedConstraint_setBreakingImpulseThreshold_1=d._emscripten_bind_btFixedConstraint_setBreakingImpulseThreshold_1,Dk=c._emscripten_bind_btFixedConstraint_setParam_3= +d._emscripten_bind_btFixedConstraint_setParam_3,Ek=c._emscripten_bind_btGeneric6DofConstraint___destroy___0=d._emscripten_bind_btGeneric6DofConstraint___destroy___0,Fk=c._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_3=d._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_3,Gk=c._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_5=d._emscripten_bind_btGeneric6DofConstraint_btGeneric6DofConstraint_5,Hk=c._emscripten_bind_btGeneric6DofConstraint_enableFeedback_1= +d._emscripten_bind_btGeneric6DofConstraint_enableFeedback_1,Ik=c._emscripten_bind_btGeneric6DofConstraint_getBreakingImpulseThreshold_0=d._emscripten_bind_btGeneric6DofConstraint_getBreakingImpulseThreshold_0,Jk=c._emscripten_bind_btGeneric6DofConstraint_getParam_2=d._emscripten_bind_btGeneric6DofConstraint_getParam_2,Kk=c._emscripten_bind_btGeneric6DofConstraint_setAngularLowerLimit_1=d._emscripten_bind_btGeneric6DofConstraint_setAngularLowerLimit_1,Lk=c._emscripten_bind_btGeneric6DofConstraint_setAngularUpperLimit_1= +d._emscripten_bind_btGeneric6DofConstraint_setAngularUpperLimit_1,Mk=c._emscripten_bind_btGeneric6DofConstraint_setBreakingImpulseThreshold_1=d._emscripten_bind_btGeneric6DofConstraint_setBreakingImpulseThreshold_1,Nk=c._emscripten_bind_btGeneric6DofConstraint_setLinearLowerLimit_1=d._emscripten_bind_btGeneric6DofConstraint_setLinearLowerLimit_1,Ok=c._emscripten_bind_btGeneric6DofConstraint_setLinearUpperLimit_1=d._emscripten_bind_btGeneric6DofConstraint_setLinearUpperLimit_1,Pk=c._emscripten_bind_btGeneric6DofConstraint_setParam_3= +d._emscripten_bind_btGeneric6DofConstraint_setParam_3,Qk=c._emscripten_bind_btGeneric6DofSpringConstraint___destroy___0=d._emscripten_bind_btGeneric6DofSpringConstraint___destroy___0,Rk=c._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_3=d._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_3,Sk=c._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_5=d._emscripten_bind_btGeneric6DofSpringConstraint_btGeneric6DofSpringConstraint_5, +Tk=c._emscripten_bind_btGeneric6DofSpringConstraint_enableFeedback_1=d._emscripten_bind_btGeneric6DofSpringConstraint_enableFeedback_1,Uk=c._emscripten_bind_btGeneric6DofSpringConstraint_enableSpring_2=d._emscripten_bind_btGeneric6DofSpringConstraint_enableSpring_2,Vk=c._emscripten_bind_btGeneric6DofSpringConstraint_getBreakingImpulseThreshold_0=d._emscripten_bind_btGeneric6DofSpringConstraint_getBreakingImpulseThreshold_0,Wk=c._emscripten_bind_btGeneric6DofSpringConstraint_getParam_2=d._emscripten_bind_btGeneric6DofSpringConstraint_getParam_2, +Xk=c._emscripten_bind_btGeneric6DofSpringConstraint_setAngularLowerLimit_1=d._emscripten_bind_btGeneric6DofSpringConstraint_setAngularLowerLimit_1,Yk=c._emscripten_bind_btGeneric6DofSpringConstraint_setAngularUpperLimit_1=d._emscripten_bind_btGeneric6DofSpringConstraint_setAngularUpperLimit_1,Zk=c._emscripten_bind_btGeneric6DofSpringConstraint_setBreakingImpulseThreshold_1=d._emscripten_bind_btGeneric6DofSpringConstraint_setBreakingImpulseThreshold_1,$k=c._emscripten_bind_btGeneric6DofSpringConstraint_setDamping_2= +d._emscripten_bind_btGeneric6DofSpringConstraint_setDamping_2,al=c._emscripten_bind_btGeneric6DofSpringConstraint_setLinearLowerLimit_1=d._emscripten_bind_btGeneric6DofSpringConstraint_setLinearLowerLimit_1,bl=c._emscripten_bind_btGeneric6DofSpringConstraint_setLinearUpperLimit_1=d._emscripten_bind_btGeneric6DofSpringConstraint_setLinearUpperLimit_1,cl=c._emscripten_bind_btGeneric6DofSpringConstraint_setParam_3=d._emscripten_bind_btGeneric6DofSpringConstraint_setParam_3,dl=c._emscripten_bind_btGeneric6DofSpringConstraint_setStiffness_2= +d._emscripten_bind_btGeneric6DofSpringConstraint_setStiffness_2,el=c._emscripten_bind_btGhostObject___destroy___0=d._emscripten_bind_btGhostObject___destroy___0,fl=c._emscripten_bind_btGhostObject_activate_0=d._emscripten_bind_btGhostObject_activate_0,gl=c._emscripten_bind_btGhostObject_activate_1=d._emscripten_bind_btGhostObject_activate_1,hl=c._emscripten_bind_btGhostObject_btGhostObject_0=d._emscripten_bind_btGhostObject_btGhostObject_0,il=c._emscripten_bind_btGhostObject_forceActivationState_1= +d._emscripten_bind_btGhostObject_forceActivationState_1,jl=c._emscripten_bind_btGhostObject_getCollisionFlags_0=d._emscripten_bind_btGhostObject_getCollisionFlags_0,kl=c._emscripten_bind_btGhostObject_getCollisionShape_0=d._emscripten_bind_btGhostObject_getCollisionShape_0,ll=c._emscripten_bind_btGhostObject_getNumOverlappingObjects_0=d._emscripten_bind_btGhostObject_getNumOverlappingObjects_0,ml=c._emscripten_bind_btGhostObject_getOverlappingObject_1=d._emscripten_bind_btGhostObject_getOverlappingObject_1, +nl=c._emscripten_bind_btGhostObject_getUserIndex_0=d._emscripten_bind_btGhostObject_getUserIndex_0,ol=c._emscripten_bind_btGhostObject_getUserPointer_0=d._emscripten_bind_btGhostObject_getUserPointer_0,pl=c._emscripten_bind_btGhostObject_getWorldTransform_0=d._emscripten_bind_btGhostObject_getWorldTransform_0,ql=c._emscripten_bind_btGhostObject_isActive_0=d._emscripten_bind_btGhostObject_isActive_0,rl=c._emscripten_bind_btGhostObject_isKinematicObject_0=d._emscripten_bind_btGhostObject_isKinematicObject_0, +sl=c._emscripten_bind_btGhostObject_isStaticObject_0=d._emscripten_bind_btGhostObject_isStaticObject_0,tl=c._emscripten_bind_btGhostObject_isStaticOrKinematicObject_0=d._emscripten_bind_btGhostObject_isStaticOrKinematicObject_0,ul=c._emscripten_bind_btGhostObject_setActivationState_1=d._emscripten_bind_btGhostObject_setActivationState_1,vl=c._emscripten_bind_btGhostObject_setAnisotropicFriction_2=d._emscripten_bind_btGhostObject_setAnisotropicFriction_2,wl=c._emscripten_bind_btGhostObject_setCcdMotionThreshold_1= +d._emscripten_bind_btGhostObject_setCcdMotionThreshold_1,xl=c._emscripten_bind_btGhostObject_setCcdSweptSphereRadius_1=d._emscripten_bind_btGhostObject_setCcdSweptSphereRadius_1,yl=c._emscripten_bind_btGhostObject_setCollisionFlags_1=d._emscripten_bind_btGhostObject_setCollisionFlags_1,zl=c._emscripten_bind_btGhostObject_setCollisionShape_1=d._emscripten_bind_btGhostObject_setCollisionShape_1,Al=c._emscripten_bind_btGhostObject_setContactProcessingThreshold_1=d._emscripten_bind_btGhostObject_setContactProcessingThreshold_1, +Bl=c._emscripten_bind_btGhostObject_setFriction_1=d._emscripten_bind_btGhostObject_setFriction_1,Cl=c._emscripten_bind_btGhostObject_setRestitution_1=d._emscripten_bind_btGhostObject_setRestitution_1,Dl=c._emscripten_bind_btGhostObject_setRollingFriction_1=d._emscripten_bind_btGhostObject_setRollingFriction_1,El=c._emscripten_bind_btGhostObject_setUserIndex_1=d._emscripten_bind_btGhostObject_setUserIndex_1,Fl=c._emscripten_bind_btGhostObject_setUserPointer_1=d._emscripten_bind_btGhostObject_setUserPointer_1, +Gl=c._emscripten_bind_btGhostObject_setWorldTransform_1=d._emscripten_bind_btGhostObject_setWorldTransform_1,Hl=c._emscripten_bind_btGhostPairCallback___destroy___0=d._emscripten_bind_btGhostPairCallback___destroy___0,Il=c._emscripten_bind_btGhostPairCallback_btGhostPairCallback_0=d._emscripten_bind_btGhostPairCallback_btGhostPairCallback_0,Jl=c._emscripten_bind_btHeightfieldTerrainShape___destroy___0=d._emscripten_bind_btHeightfieldTerrainShape___destroy___0,Kl=c._emscripten_bind_btHeightfieldTerrainShape_btHeightfieldTerrainShape_9= +d._emscripten_bind_btHeightfieldTerrainShape_btHeightfieldTerrainShape_9,Ll=c._emscripten_bind_btHeightfieldTerrainShape_calculateLocalInertia_2=d._emscripten_bind_btHeightfieldTerrainShape_calculateLocalInertia_2,Ml=c._emscripten_bind_btHeightfieldTerrainShape_getLocalScaling_0=d._emscripten_bind_btHeightfieldTerrainShape_getLocalScaling_0,Nl=c._emscripten_bind_btHeightfieldTerrainShape_getMargin_0=d._emscripten_bind_btHeightfieldTerrainShape_getMargin_0,Ol=c._emscripten_bind_btHeightfieldTerrainShape_setLocalScaling_1= +d._emscripten_bind_btHeightfieldTerrainShape_setLocalScaling_1,Pl=c._emscripten_bind_btHeightfieldTerrainShape_setMargin_1=d._emscripten_bind_btHeightfieldTerrainShape_setMargin_1,Ql=c._emscripten_bind_btHingeConstraint___destroy___0=d._emscripten_bind_btHingeConstraint___destroy___0,Rl=c._emscripten_bind_btHingeConstraint_btHingeConstraint_2=d._emscripten_bind_btHingeConstraint_btHingeConstraint_2,Sl=c._emscripten_bind_btHingeConstraint_btHingeConstraint_3=d._emscripten_bind_btHingeConstraint_btHingeConstraint_3, +Tl=c._emscripten_bind_btHingeConstraint_btHingeConstraint_4=d._emscripten_bind_btHingeConstraint_btHingeConstraint_4,Ul=c._emscripten_bind_btHingeConstraint_btHingeConstraint_5=d._emscripten_bind_btHingeConstraint_btHingeConstraint_5,Vl=c._emscripten_bind_btHingeConstraint_btHingeConstraint_6=d._emscripten_bind_btHingeConstraint_btHingeConstraint_6,Wl=c._emscripten_bind_btHingeConstraint_btHingeConstraint_7=d._emscripten_bind_btHingeConstraint_btHingeConstraint_7,Xl=c._emscripten_bind_btHingeConstraint_enableAngularMotor_3= +d._emscripten_bind_btHingeConstraint_enableAngularMotor_3,Yl=c._emscripten_bind_btHingeConstraint_enableFeedback_1=d._emscripten_bind_btHingeConstraint_enableFeedback_1,Zl=c._emscripten_bind_btHingeConstraint_enableMotor_1=d._emscripten_bind_btHingeConstraint_enableMotor_1,$l=c._emscripten_bind_btHingeConstraint_getBreakingImpulseThreshold_0=d._emscripten_bind_btHingeConstraint_getBreakingImpulseThreshold_0,am=c._emscripten_bind_btHingeConstraint_getParam_2=d._emscripten_bind_btHingeConstraint_getParam_2, +bm=c._emscripten_bind_btHingeConstraint_setAngularOnly_1=d._emscripten_bind_btHingeConstraint_setAngularOnly_1,cm=c._emscripten_bind_btHingeConstraint_setBreakingImpulseThreshold_1=d._emscripten_bind_btHingeConstraint_setBreakingImpulseThreshold_1,dm=c._emscripten_bind_btHingeConstraint_setLimit_4=d._emscripten_bind_btHingeConstraint_setLimit_4,em=c._emscripten_bind_btHingeConstraint_setLimit_5=d._emscripten_bind_btHingeConstraint_setLimit_5,fm=c._emscripten_bind_btHingeConstraint_setMaxMotorImpulse_1= +d._emscripten_bind_btHingeConstraint_setMaxMotorImpulse_1,gm=c._emscripten_bind_btHingeConstraint_setMotorTarget_2=d._emscripten_bind_btHingeConstraint_setMotorTarget_2,hm=c._emscripten_bind_btHingeConstraint_setParam_3=d._emscripten_bind_btHingeConstraint_setParam_3,im=c._emscripten_bind_btKinematicCharacterController___destroy___0=d._emscripten_bind_btKinematicCharacterController___destroy___0,jm=c._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_3=d._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_3, +km=c._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_4=d._emscripten_bind_btKinematicCharacterController_btKinematicCharacterController_4,lm=c._emscripten_bind_btKinematicCharacterController_canJump_0=d._emscripten_bind_btKinematicCharacterController_canJump_0,mm=c._emscripten_bind_btKinematicCharacterController_getGhostObject_0=d._emscripten_bind_btKinematicCharacterController_getGhostObject_0,nm=c._emscripten_bind_btKinematicCharacterController_getGravity_0=d._emscripten_bind_btKinematicCharacterController_getGravity_0, +om=c._emscripten_bind_btKinematicCharacterController_getMaxSlope_0=d._emscripten_bind_btKinematicCharacterController_getMaxSlope_0,pm=c._emscripten_bind_btKinematicCharacterController_jump_0=d._emscripten_bind_btKinematicCharacterController_jump_0,qm=c._emscripten_bind_btKinematicCharacterController_onGround_0=d._emscripten_bind_btKinematicCharacterController_onGround_0,rm=c._emscripten_bind_btKinematicCharacterController_playerStep_2=d._emscripten_bind_btKinematicCharacterController_playerStep_2, +sm=c._emscripten_bind_btKinematicCharacterController_preStep_1=d._emscripten_bind_btKinematicCharacterController_preStep_1,tm=c._emscripten_bind_btKinematicCharacterController_setFallSpeed_1=d._emscripten_bind_btKinematicCharacterController_setFallSpeed_1,um=c._emscripten_bind_btKinematicCharacterController_setGravity_1=d._emscripten_bind_btKinematicCharacterController_setGravity_1,wm=c._emscripten_bind_btKinematicCharacterController_setJumpSpeed_1=d._emscripten_bind_btKinematicCharacterController_setJumpSpeed_1, +xm=c._emscripten_bind_btKinematicCharacterController_setMaxJumpHeight_1=d._emscripten_bind_btKinematicCharacterController_setMaxJumpHeight_1,ym=c._emscripten_bind_btKinematicCharacterController_setMaxSlope_1=d._emscripten_bind_btKinematicCharacterController_setMaxSlope_1,zm=c._emscripten_bind_btKinematicCharacterController_setUpAxis_1=d._emscripten_bind_btKinematicCharacterController_setUpAxis_1,Am=c._emscripten_bind_btKinematicCharacterController_setUpInterpolate_1=d._emscripten_bind_btKinematicCharacterController_setUpInterpolate_1, +Bm=c._emscripten_bind_btKinematicCharacterController_setUseGhostSweepTest_1=d._emscripten_bind_btKinematicCharacterController_setUseGhostSweepTest_1,Cm=c._emscripten_bind_btKinematicCharacterController_setVelocityForTimeInterval_2=d._emscripten_bind_btKinematicCharacterController_setVelocityForTimeInterval_2,Dm=c._emscripten_bind_btKinematicCharacterController_setWalkDirection_1=d._emscripten_bind_btKinematicCharacterController_setWalkDirection_1,Em=c._emscripten_bind_btKinematicCharacterController_updateAction_2= +d._emscripten_bind_btKinematicCharacterController_updateAction_2,Fm=c._emscripten_bind_btKinematicCharacterController_warp_1=d._emscripten_bind_btKinematicCharacterController_warp_1,Gm=c._emscripten_bind_btManifoldPoint___destroy___0=d._emscripten_bind_btManifoldPoint___destroy___0,Hm=c._emscripten_bind_btManifoldPoint_getAppliedImpulse_0=d._emscripten_bind_btManifoldPoint_getAppliedImpulse_0,Im=c._emscripten_bind_btManifoldPoint_getDistance_0=d._emscripten_bind_btManifoldPoint_getDistance_0,Jm=c._emscripten_bind_btManifoldPoint_getPositionWorldOnA_0= +d._emscripten_bind_btManifoldPoint_getPositionWorldOnA_0,Km=c._emscripten_bind_btManifoldPoint_getPositionWorldOnB_0=d._emscripten_bind_btManifoldPoint_getPositionWorldOnB_0,Lm=c._emscripten_bind_btManifoldPoint_get_m_localPointA_0=d._emscripten_bind_btManifoldPoint_get_m_localPointA_0,Mm=c._emscripten_bind_btManifoldPoint_get_m_localPointB_0=d._emscripten_bind_btManifoldPoint_get_m_localPointB_0,Nm=c._emscripten_bind_btManifoldPoint_get_m_normalWorldOnB_0=d._emscripten_bind_btManifoldPoint_get_m_normalWorldOnB_0, +Om=c._emscripten_bind_btManifoldPoint_get_m_positionWorldOnA_0=d._emscripten_bind_btManifoldPoint_get_m_positionWorldOnA_0,Pm=c._emscripten_bind_btManifoldPoint_get_m_positionWorldOnB_0=d._emscripten_bind_btManifoldPoint_get_m_positionWorldOnB_0,Qm=c._emscripten_bind_btManifoldPoint_set_m_localPointA_1=d._emscripten_bind_btManifoldPoint_set_m_localPointA_1,Rm=c._emscripten_bind_btManifoldPoint_set_m_localPointB_1=d._emscripten_bind_btManifoldPoint_set_m_localPointB_1,Sm=c._emscripten_bind_btManifoldPoint_set_m_normalWorldOnB_1= +d._emscripten_bind_btManifoldPoint_set_m_normalWorldOnB_1,Tm=c._emscripten_bind_btManifoldPoint_set_m_positionWorldOnA_1=d._emscripten_bind_btManifoldPoint_set_m_positionWorldOnA_1,Um=c._emscripten_bind_btManifoldPoint_set_m_positionWorldOnB_1=d._emscripten_bind_btManifoldPoint_set_m_positionWorldOnB_1,Vm=c._emscripten_bind_btMatrix3x3___destroy___0=d._emscripten_bind_btMatrix3x3___destroy___0,Wm=c._emscripten_bind_btMatrix3x3_getRotation_1=d._emscripten_bind_btMatrix3x3_getRotation_1,Xm=c._emscripten_bind_btMatrix3x3_getRow_1= +d._emscripten_bind_btMatrix3x3_getRow_1,Ym=c._emscripten_bind_btMatrix3x3_setEulerZYX_3=d._emscripten_bind_btMatrix3x3_setEulerZYX_3,Zm=c._emscripten_bind_btMotionState___destroy___0=d._emscripten_bind_btMotionState___destroy___0,$m=c._emscripten_bind_btMotionState_getWorldTransform_1=d._emscripten_bind_btMotionState_getWorldTransform_1,an=c._emscripten_bind_btMotionState_setWorldTransform_1=d._emscripten_bind_btMotionState_setWorldTransform_1,bn=c._emscripten_bind_btOverlappingPairCache___destroy___0= +d._emscripten_bind_btOverlappingPairCache___destroy___0,cn=c._emscripten_bind_btOverlappingPairCache_setInternalGhostPairCallback_1=d._emscripten_bind_btOverlappingPairCache_setInternalGhostPairCallback_1,dn=c._emscripten_bind_btOverlappingPairCallback___destroy___0=d._emscripten_bind_btOverlappingPairCallback___destroy___0,en=c._emscripten_bind_btPairCachingGhostObject___destroy___0=d._emscripten_bind_btPairCachingGhostObject___destroy___0,fn=c._emscripten_bind_btPairCachingGhostObject_activate_0= +d._emscripten_bind_btPairCachingGhostObject_activate_0,gn=c._emscripten_bind_btPairCachingGhostObject_activate_1=d._emscripten_bind_btPairCachingGhostObject_activate_1,hn=c._emscripten_bind_btPairCachingGhostObject_btPairCachingGhostObject_0=d._emscripten_bind_btPairCachingGhostObject_btPairCachingGhostObject_0,jn=c._emscripten_bind_btPairCachingGhostObject_forceActivationState_1=d._emscripten_bind_btPairCachingGhostObject_forceActivationState_1,kn=c._emscripten_bind_btPairCachingGhostObject_getCollisionFlags_0= +d._emscripten_bind_btPairCachingGhostObject_getCollisionFlags_0,ln=c._emscripten_bind_btPairCachingGhostObject_getCollisionShape_0=d._emscripten_bind_btPairCachingGhostObject_getCollisionShape_0,mn=c._emscripten_bind_btPairCachingGhostObject_getNumOverlappingObjects_0=d._emscripten_bind_btPairCachingGhostObject_getNumOverlappingObjects_0,nn=c._emscripten_bind_btPairCachingGhostObject_getOverlappingObject_1=d._emscripten_bind_btPairCachingGhostObject_getOverlappingObject_1,on=c._emscripten_bind_btPairCachingGhostObject_getUserIndex_0= +d._emscripten_bind_btPairCachingGhostObject_getUserIndex_0,pn=c._emscripten_bind_btPairCachingGhostObject_getUserPointer_0=d._emscripten_bind_btPairCachingGhostObject_getUserPointer_0,qn=c._emscripten_bind_btPairCachingGhostObject_getWorldTransform_0=d._emscripten_bind_btPairCachingGhostObject_getWorldTransform_0,rn=c._emscripten_bind_btPairCachingGhostObject_isActive_0=d._emscripten_bind_btPairCachingGhostObject_isActive_0,sn=c._emscripten_bind_btPairCachingGhostObject_isKinematicObject_0=d._emscripten_bind_btPairCachingGhostObject_isKinematicObject_0, +tn=c._emscripten_bind_btPairCachingGhostObject_isStaticObject_0=d._emscripten_bind_btPairCachingGhostObject_isStaticObject_0,un=c._emscripten_bind_btPairCachingGhostObject_isStaticOrKinematicObject_0=d._emscripten_bind_btPairCachingGhostObject_isStaticOrKinematicObject_0,vn=c._emscripten_bind_btPairCachingGhostObject_setActivationState_1=d._emscripten_bind_btPairCachingGhostObject_setActivationState_1,wn=c._emscripten_bind_btPairCachingGhostObject_setAnisotropicFriction_2=d._emscripten_bind_btPairCachingGhostObject_setAnisotropicFriction_2, +xn=c._emscripten_bind_btPairCachingGhostObject_setCcdMotionThreshold_1=d._emscripten_bind_btPairCachingGhostObject_setCcdMotionThreshold_1,yn=c._emscripten_bind_btPairCachingGhostObject_setCcdSweptSphereRadius_1=d._emscripten_bind_btPairCachingGhostObject_setCcdSweptSphereRadius_1,zn=c._emscripten_bind_btPairCachingGhostObject_setCollisionFlags_1=d._emscripten_bind_btPairCachingGhostObject_setCollisionFlags_1,An=c._emscripten_bind_btPairCachingGhostObject_setCollisionShape_1=d._emscripten_bind_btPairCachingGhostObject_setCollisionShape_1, +Bn=c._emscripten_bind_btPairCachingGhostObject_setContactProcessingThreshold_1=d._emscripten_bind_btPairCachingGhostObject_setContactProcessingThreshold_1,Cn=c._emscripten_bind_btPairCachingGhostObject_setFriction_1=d._emscripten_bind_btPairCachingGhostObject_setFriction_1,Dn=c._emscripten_bind_btPairCachingGhostObject_setRestitution_1=d._emscripten_bind_btPairCachingGhostObject_setRestitution_1,En=c._emscripten_bind_btPairCachingGhostObject_setRollingFriction_1=d._emscripten_bind_btPairCachingGhostObject_setRollingFriction_1, +Fn=c._emscripten_bind_btPairCachingGhostObject_setUserIndex_1=d._emscripten_bind_btPairCachingGhostObject_setUserIndex_1,Gn=c._emscripten_bind_btPairCachingGhostObject_setUserPointer_1=d._emscripten_bind_btPairCachingGhostObject_setUserPointer_1,Hn=c._emscripten_bind_btPairCachingGhostObject_setWorldTransform_1=d._emscripten_bind_btPairCachingGhostObject_setWorldTransform_1,In=c._emscripten_bind_btPersistentManifold___destroy___0=d._emscripten_bind_btPersistentManifold___destroy___0,Jn=c._emscripten_bind_btPersistentManifold_btPersistentManifold_0= +d._emscripten_bind_btPersistentManifold_btPersistentManifold_0,Kn=c._emscripten_bind_btPersistentManifold_getBody0_0=d._emscripten_bind_btPersistentManifold_getBody0_0,Ln=c._emscripten_bind_btPersistentManifold_getBody1_0=d._emscripten_bind_btPersistentManifold_getBody1_0,Mn=c._emscripten_bind_btPersistentManifold_getContactPoint_1=d._emscripten_bind_btPersistentManifold_getContactPoint_1,Nn=c._emscripten_bind_btPersistentManifold_getNumContacts_0=d._emscripten_bind_btPersistentManifold_getNumContacts_0, +On=c._emscripten_bind_btPoint2PointConstraint___destroy___0=d._emscripten_bind_btPoint2PointConstraint___destroy___0,Pn=c._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_2=d._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_2,Qn=c._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_4=d._emscripten_bind_btPoint2PointConstraint_btPoint2PointConstraint_4,Rn=c._emscripten_bind_btPoint2PointConstraint_enableFeedback_1=d._emscripten_bind_btPoint2PointConstraint_enableFeedback_1, +Sn=c._emscripten_bind_btPoint2PointConstraint_getBreakingImpulseThreshold_0=d._emscripten_bind_btPoint2PointConstraint_getBreakingImpulseThreshold_0,Tn=c._emscripten_bind_btPoint2PointConstraint_getParam_2=d._emscripten_bind_btPoint2PointConstraint_getParam_2,Un=c._emscripten_bind_btPoint2PointConstraint_getPivotInA_0=d._emscripten_bind_btPoint2PointConstraint_getPivotInA_0,Vn=c._emscripten_bind_btPoint2PointConstraint_getPivotInB_0=d._emscripten_bind_btPoint2PointConstraint_getPivotInB_0,Wn=c._emscripten_bind_btPoint2PointConstraint_get_m_setting_0= +d._emscripten_bind_btPoint2PointConstraint_get_m_setting_0,Xn=c._emscripten_bind_btPoint2PointConstraint_setBreakingImpulseThreshold_1=d._emscripten_bind_btPoint2PointConstraint_setBreakingImpulseThreshold_1,Yn=c._emscripten_bind_btPoint2PointConstraint_setParam_3=d._emscripten_bind_btPoint2PointConstraint_setParam_3,Zn=c._emscripten_bind_btPoint2PointConstraint_setPivotA_1=d._emscripten_bind_btPoint2PointConstraint_setPivotA_1,$n=c._emscripten_bind_btPoint2PointConstraint_setPivotB_1=d._emscripten_bind_btPoint2PointConstraint_setPivotB_1, +ao=c._emscripten_bind_btPoint2PointConstraint_set_m_setting_1=d._emscripten_bind_btPoint2PointConstraint_set_m_setting_1,bo=c._emscripten_bind_btQuadWord___destroy___0=d._emscripten_bind_btQuadWord___destroy___0,co=c._emscripten_bind_btQuadWord_setW_1=d._emscripten_bind_btQuadWord_setW_1,eo=c._emscripten_bind_btQuadWord_setX_1=d._emscripten_bind_btQuadWord_setX_1,fo=c._emscripten_bind_btQuadWord_setY_1=d._emscripten_bind_btQuadWord_setY_1,go=c._emscripten_bind_btQuadWord_setZ_1=d._emscripten_bind_btQuadWord_setZ_1, +ho=c._emscripten_bind_btQuadWord_w_0=d._emscripten_bind_btQuadWord_w_0,io=c._emscripten_bind_btQuadWord_x_0=d._emscripten_bind_btQuadWord_x_0,jo=c._emscripten_bind_btQuadWord_y_0=d._emscripten_bind_btQuadWord_y_0,ko=c._emscripten_bind_btQuadWord_z_0=d._emscripten_bind_btQuadWord_z_0,lo=c._emscripten_bind_btQuaternion___destroy___0=d._emscripten_bind_btQuaternion___destroy___0,mo=c._emscripten_bind_btQuaternion_angleShortestPath_1=d._emscripten_bind_btQuaternion_angleShortestPath_1,no=c._emscripten_bind_btQuaternion_angle_1= +d._emscripten_bind_btQuaternion_angle_1,oo=c._emscripten_bind_btQuaternion_btQuaternion_4=d._emscripten_bind_btQuaternion_btQuaternion_4,po=c._emscripten_bind_btQuaternion_dot_1=d._emscripten_bind_btQuaternion_dot_1,qo=c._emscripten_bind_btQuaternion_getAngleShortestPath_0=d._emscripten_bind_btQuaternion_getAngleShortestPath_0,ro=c._emscripten_bind_btQuaternion_getAngle_0=d._emscripten_bind_btQuaternion_getAngle_0,so=c._emscripten_bind_btQuaternion_getAxis_0=d._emscripten_bind_btQuaternion_getAxis_0, +to=c._emscripten_bind_btQuaternion_inverse_0=d._emscripten_bind_btQuaternion_inverse_0,uo=c._emscripten_bind_btQuaternion_length2_0=d._emscripten_bind_btQuaternion_length2_0,vo=c._emscripten_bind_btQuaternion_length_0=d._emscripten_bind_btQuaternion_length_0,wo=c._emscripten_bind_btQuaternion_normalize_0=d._emscripten_bind_btQuaternion_normalize_0,xo=c._emscripten_bind_btQuaternion_normalized_0=d._emscripten_bind_btQuaternion_normalized_0,yo=c._emscripten_bind_btQuaternion_op_add_1=d._emscripten_bind_btQuaternion_op_add_1, +zo=c._emscripten_bind_btQuaternion_op_div_1=d._emscripten_bind_btQuaternion_op_div_1,Ao=c._emscripten_bind_btQuaternion_op_mul_1=d._emscripten_bind_btQuaternion_op_mul_1,Bo=c._emscripten_bind_btQuaternion_op_mulq_1=d._emscripten_bind_btQuaternion_op_mulq_1,Co=c._emscripten_bind_btQuaternion_op_sub_1=d._emscripten_bind_btQuaternion_op_sub_1,Do=c._emscripten_bind_btQuaternion_setEulerZYX_3=d._emscripten_bind_btQuaternion_setEulerZYX_3,Eo=c._emscripten_bind_btQuaternion_setRotation_2=d._emscripten_bind_btQuaternion_setRotation_2, +Fo=c._emscripten_bind_btQuaternion_setValue_4=d._emscripten_bind_btQuaternion_setValue_4,Go=c._emscripten_bind_btQuaternion_setW_1=d._emscripten_bind_btQuaternion_setW_1,Ho=c._emscripten_bind_btQuaternion_setX_1=d._emscripten_bind_btQuaternion_setX_1,Io=c._emscripten_bind_btQuaternion_setY_1=d._emscripten_bind_btQuaternion_setY_1,Jo=c._emscripten_bind_btQuaternion_setZ_1=d._emscripten_bind_btQuaternion_setZ_1,Ko=c._emscripten_bind_btQuaternion_w_0=d._emscripten_bind_btQuaternion_w_0,Lo=c._emscripten_bind_btQuaternion_x_0= +d._emscripten_bind_btQuaternion_x_0,Mo=c._emscripten_bind_btQuaternion_y_0=d._emscripten_bind_btQuaternion_y_0,No=c._emscripten_bind_btQuaternion_z_0=d._emscripten_bind_btQuaternion_z_0,Oo=c._emscripten_bind_btRaycastVehicle___destroy___0=d._emscripten_bind_btRaycastVehicle___destroy___0,Po=c._emscripten_bind_btRaycastVehicle_addWheel_7=d._emscripten_bind_btRaycastVehicle_addWheel_7,Qo=c._emscripten_bind_btRaycastVehicle_applyEngineForce_2=d._emscripten_bind_btRaycastVehicle_applyEngineForce_2,Ro= +c._emscripten_bind_btRaycastVehicle_btRaycastVehicle_3=d._emscripten_bind_btRaycastVehicle_btRaycastVehicle_3,So=c._emscripten_bind_btRaycastVehicle_getChassisWorldTransform_0=d._emscripten_bind_btRaycastVehicle_getChassisWorldTransform_0,To=c._emscripten_bind_btRaycastVehicle_getCurrentSpeedKmHour_0=d._emscripten_bind_btRaycastVehicle_getCurrentSpeedKmHour_0,Uo=c._emscripten_bind_btRaycastVehicle_getForwardAxis_0=d._emscripten_bind_btRaycastVehicle_getForwardAxis_0,Vo=c._emscripten_bind_btRaycastVehicle_getForwardVector_0= +d._emscripten_bind_btRaycastVehicle_getForwardVector_0,Wo=c._emscripten_bind_btRaycastVehicle_getNumWheels_0=d._emscripten_bind_btRaycastVehicle_getNumWheels_0,Xo=c._emscripten_bind_btRaycastVehicle_getRightAxis_0=d._emscripten_bind_btRaycastVehicle_getRightAxis_0,Yo=c._emscripten_bind_btRaycastVehicle_getRigidBody_0=d._emscripten_bind_btRaycastVehicle_getRigidBody_0,Zo=c._emscripten_bind_btRaycastVehicle_getSteeringValue_1=d._emscripten_bind_btRaycastVehicle_getSteeringValue_1,$o=c._emscripten_bind_btRaycastVehicle_getUpAxis_0= +d._emscripten_bind_btRaycastVehicle_getUpAxis_0,ap=c._emscripten_bind_btRaycastVehicle_getUserConstraintId_0=d._emscripten_bind_btRaycastVehicle_getUserConstraintId_0,bp=c._emscripten_bind_btRaycastVehicle_getUserConstraintType_0=d._emscripten_bind_btRaycastVehicle_getUserConstraintType_0,cp=c._emscripten_bind_btRaycastVehicle_getWheelInfo_1=d._emscripten_bind_btRaycastVehicle_getWheelInfo_1,dp=c._emscripten_bind_btRaycastVehicle_getWheelTransformWS_1=d._emscripten_bind_btRaycastVehicle_getWheelTransformWS_1, +ep=c._emscripten_bind_btRaycastVehicle_rayCast_1=d._emscripten_bind_btRaycastVehicle_rayCast_1,fp=c._emscripten_bind_btRaycastVehicle_resetSuspension_0=d._emscripten_bind_btRaycastVehicle_resetSuspension_0,gp=c._emscripten_bind_btRaycastVehicle_setBrake_2=d._emscripten_bind_btRaycastVehicle_setBrake_2,hp=c._emscripten_bind_btRaycastVehicle_setCoordinateSystem_3=d._emscripten_bind_btRaycastVehicle_setCoordinateSystem_3,ip=c._emscripten_bind_btRaycastVehicle_setPitchControl_1=d._emscripten_bind_btRaycastVehicle_setPitchControl_1, +jp=c._emscripten_bind_btRaycastVehicle_setSteeringValue_2=d._emscripten_bind_btRaycastVehicle_setSteeringValue_2,kp=c._emscripten_bind_btRaycastVehicle_setUserConstraintId_1=d._emscripten_bind_btRaycastVehicle_setUserConstraintId_1,lp=c._emscripten_bind_btRaycastVehicle_setUserConstraintType_1=d._emscripten_bind_btRaycastVehicle_setUserConstraintType_1,mp=c._emscripten_bind_btRaycastVehicle_updateAction_2=d._emscripten_bind_btRaycastVehicle_updateAction_2,np=c._emscripten_bind_btRaycastVehicle_updateFriction_1= +d._emscripten_bind_btRaycastVehicle_updateFriction_1,op=c._emscripten_bind_btRaycastVehicle_updateSuspension_1=d._emscripten_bind_btRaycastVehicle_updateSuspension_1,pp=c._emscripten_bind_btRaycastVehicle_updateVehicle_1=d._emscripten_bind_btRaycastVehicle_updateVehicle_1,qp=c._emscripten_bind_btRaycastVehicle_updateWheelTransform_2=d._emscripten_bind_btRaycastVehicle_updateWheelTransform_2,rp=c._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_1=d._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_1, +sp=c._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_2=d._emscripten_bind_btRaycastVehicle_updateWheelTransformsWS_2,tp=c._emscripten_bind_btRigidBodyConstructionInfo___destroy___0=d._emscripten_bind_btRigidBodyConstructionInfo___destroy___0,up=c._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_3=d._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_3,vp=c._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_4=d._emscripten_bind_btRigidBodyConstructionInfo_btRigidBodyConstructionInfo_4, +wp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingFactor_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingFactor_0,xp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingThresholdSqr_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalAngularDampingThresholdSqr_0,yp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDampingFactor_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDampingFactor_0, +zp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDamping_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalDamping_0,Ap=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalLinearDampingThresholdSqr_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_additionalLinearDampingThresholdSqr_0,Bp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularDamping_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularDamping_0,Cp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularSleepingThreshold_0= +d._emscripten_bind_btRigidBodyConstructionInfo_get_m_angularSleepingThreshold_0,Dp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_friction_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_friction_0,Ep=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearDamping_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearDamping_0,Fp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearSleepingThreshold_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_linearSleepingThreshold_0, +Gp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_restitution_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_restitution_0,Hp=c._emscripten_bind_btRigidBodyConstructionInfo_get_m_rollingFriction_0=d._emscripten_bind_btRigidBodyConstructionInfo_get_m_rollingFriction_0,Ip=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingFactor_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingFactor_1,Jp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingThresholdSqr_1= +d._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalAngularDampingThresholdSqr_1,Kp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDampingFactor_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDampingFactor_1,Lp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDamping_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalDamping_1,Mp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalLinearDampingThresholdSqr_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_additionalLinearDampingThresholdSqr_1, +Np=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularDamping_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularDamping_1,Op=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularSleepingThreshold_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_angularSleepingThreshold_1,Pp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_friction_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_friction_1,Qp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearDamping_1= +d._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearDamping_1,Rp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearSleepingThreshold_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_linearSleepingThreshold_1,Sp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_restitution_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_restitution_1,Tp=c._emscripten_bind_btRigidBodyConstructionInfo_set_m_rollingFriction_1=d._emscripten_bind_btRigidBodyConstructionInfo_set_m_rollingFriction_1, +Up=c._emscripten_bind_btRigidBody___destroy___0=d._emscripten_bind_btRigidBody___destroy___0,Vp=c._emscripten_bind_btRigidBody_activate_0=d._emscripten_bind_btRigidBody_activate_0,Wp=c._emscripten_bind_btRigidBody_activate_1=d._emscripten_bind_btRigidBody_activate_1,Xp=c._emscripten_bind_btRigidBody_applyCentralForce_1=d._emscripten_bind_btRigidBody_applyCentralForce_1,Yp=c._emscripten_bind_btRigidBody_applyCentralImpulse_1=d._emscripten_bind_btRigidBody_applyCentralImpulse_1,Zp=c._emscripten_bind_btRigidBody_applyCentralLocalForce_1= +d._emscripten_bind_btRigidBody_applyCentralLocalForce_1,$p=c._emscripten_bind_btRigidBody_applyForce_2=d._emscripten_bind_btRigidBody_applyForce_2,aq=c._emscripten_bind_btRigidBody_applyGravity_0=d._emscripten_bind_btRigidBody_applyGravity_0,bq=c._emscripten_bind_btRigidBody_applyImpulse_2=d._emscripten_bind_btRigidBody_applyImpulse_2,cq=c._emscripten_bind_btRigidBody_applyLocalTorque_1=d._emscripten_bind_btRigidBody_applyLocalTorque_1,dq=c._emscripten_bind_btRigidBody_applyTorqueImpulse_1=d._emscripten_bind_btRigidBody_applyTorqueImpulse_1, +eq=c._emscripten_bind_btRigidBody_applyTorque_1=d._emscripten_bind_btRigidBody_applyTorque_1,fq=c._emscripten_bind_btRigidBody_btRigidBody_1=d._emscripten_bind_btRigidBody_btRigidBody_1,gq=c._emscripten_bind_btRigidBody_forceActivationState_1=d._emscripten_bind_btRigidBody_forceActivationState_1,hq=c._emscripten_bind_btRigidBody_getAabb_2=d._emscripten_bind_btRigidBody_getAabb_2,iq=c._emscripten_bind_btRigidBody_getAngularVelocity_0=d._emscripten_bind_btRigidBody_getAngularVelocity_0,jq=c._emscripten_bind_btRigidBody_getCenterOfMassTransform_0= +d._emscripten_bind_btRigidBody_getCenterOfMassTransform_0,kq=c._emscripten_bind_btRigidBody_getCollisionFlags_0=d._emscripten_bind_btRigidBody_getCollisionFlags_0,lq=c._emscripten_bind_btRigidBody_getCollisionShape_0=d._emscripten_bind_btRigidBody_getCollisionShape_0,mq=c._emscripten_bind_btRigidBody_getGravity_0=d._emscripten_bind_btRigidBody_getGravity_0,nq=c._emscripten_bind_btRigidBody_getLinearVelocity_0=d._emscripten_bind_btRigidBody_getLinearVelocity_0,oq=c._emscripten_bind_btRigidBody_getMotionState_0= +d._emscripten_bind_btRigidBody_getMotionState_0,pq=c._emscripten_bind_btRigidBody_getUserIndex_0=d._emscripten_bind_btRigidBody_getUserIndex_0,qq=c._emscripten_bind_btRigidBody_getUserPointer_0=d._emscripten_bind_btRigidBody_getUserPointer_0,rq=c._emscripten_bind_btRigidBody_getWorldTransform_0=d._emscripten_bind_btRigidBody_getWorldTransform_0,sq=c._emscripten_bind_btRigidBody_isActive_0=d._emscripten_bind_btRigidBody_isActive_0,tq=c._emscripten_bind_btRigidBody_isKinematicObject_0=d._emscripten_bind_btRigidBody_isKinematicObject_0, +uq=c._emscripten_bind_btRigidBody_isStaticObject_0=d._emscripten_bind_btRigidBody_isStaticObject_0,vq=c._emscripten_bind_btRigidBody_isStaticOrKinematicObject_0=d._emscripten_bind_btRigidBody_isStaticOrKinematicObject_0,wq=c._emscripten_bind_btRigidBody_setActivationState_1=d._emscripten_bind_btRigidBody_setActivationState_1,xq=c._emscripten_bind_btRigidBody_setAngularFactor_1=d._emscripten_bind_btRigidBody_setAngularFactor_1,yq=c._emscripten_bind_btRigidBody_setAngularVelocity_1=d._emscripten_bind_btRigidBody_setAngularVelocity_1, +zq=c._emscripten_bind_btRigidBody_setAnisotropicFriction_2=d._emscripten_bind_btRigidBody_setAnisotropicFriction_2,Aq=c._emscripten_bind_btRigidBody_setCcdMotionThreshold_1=d._emscripten_bind_btRigidBody_setCcdMotionThreshold_1,Bq=c._emscripten_bind_btRigidBody_setCcdSweptSphereRadius_1=d._emscripten_bind_btRigidBody_setCcdSweptSphereRadius_1,Cq=c._emscripten_bind_btRigidBody_setCenterOfMassTransform_1=d._emscripten_bind_btRigidBody_setCenterOfMassTransform_1,Dq=c._emscripten_bind_btRigidBody_setCollisionFlags_1= +d._emscripten_bind_btRigidBody_setCollisionFlags_1,Eq=c._emscripten_bind_btRigidBody_setCollisionShape_1=d._emscripten_bind_btRigidBody_setCollisionShape_1,Fq=c._emscripten_bind_btRigidBody_setContactProcessingThreshold_1=d._emscripten_bind_btRigidBody_setContactProcessingThreshold_1,Gq=c._emscripten_bind_btRigidBody_setDamping_2=d._emscripten_bind_btRigidBody_setDamping_2,Hq=c._emscripten_bind_btRigidBody_setFriction_1=d._emscripten_bind_btRigidBody_setFriction_1,Iq=c._emscripten_bind_btRigidBody_setGravity_1= +d._emscripten_bind_btRigidBody_setGravity_1,Jq=c._emscripten_bind_btRigidBody_setLinearFactor_1=d._emscripten_bind_btRigidBody_setLinearFactor_1,Kq=c._emscripten_bind_btRigidBody_setLinearVelocity_1=d._emscripten_bind_btRigidBody_setLinearVelocity_1,Lq=c._emscripten_bind_btRigidBody_setMassProps_2=d._emscripten_bind_btRigidBody_setMassProps_2,Mq=c._emscripten_bind_btRigidBody_setMotionState_1=d._emscripten_bind_btRigidBody_setMotionState_1,Nq=c._emscripten_bind_btRigidBody_setRestitution_1=d._emscripten_bind_btRigidBody_setRestitution_1, +Oq=c._emscripten_bind_btRigidBody_setRollingFriction_1=d._emscripten_bind_btRigidBody_setRollingFriction_1,Pq=c._emscripten_bind_btRigidBody_setSleepingThresholds_2=d._emscripten_bind_btRigidBody_setSleepingThresholds_2,Qq=c._emscripten_bind_btRigidBody_setUserIndex_1=d._emscripten_bind_btRigidBody_setUserIndex_1,Rq=c._emscripten_bind_btRigidBody_setUserPointer_1=d._emscripten_bind_btRigidBody_setUserPointer_1,Sq=c._emscripten_bind_btRigidBody_setWorldTransform_1=d._emscripten_bind_btRigidBody_setWorldTransform_1, +Tq=c._emscripten_bind_btRigidBody_upcast_1=d._emscripten_bind_btRigidBody_upcast_1,Uq=c._emscripten_bind_btRigidBody_updateInertiaTensor_0=d._emscripten_bind_btRigidBody_updateInertiaTensor_0,Vq=c._emscripten_bind_btSequentialImpulseConstraintSolver___destroy___0=d._emscripten_bind_btSequentialImpulseConstraintSolver___destroy___0,Wq=c._emscripten_bind_btSequentialImpulseConstraintSolver_btSequentialImpulseConstraintSolver_0=d._emscripten_bind_btSequentialImpulseConstraintSolver_btSequentialImpulseConstraintSolver_0, +Xq=c._emscripten_bind_btSliderConstraint___destroy___0=d._emscripten_bind_btSliderConstraint___destroy___0,Yq=c._emscripten_bind_btSliderConstraint_btSliderConstraint_3=d._emscripten_bind_btSliderConstraint_btSliderConstraint_3,Zq=c._emscripten_bind_btSliderConstraint_btSliderConstraint_5=d._emscripten_bind_btSliderConstraint_btSliderConstraint_5,$q=c._emscripten_bind_btSliderConstraint_enableFeedback_1=d._emscripten_bind_btSliderConstraint_enableFeedback_1,ar=c._emscripten_bind_btSliderConstraint_getBreakingImpulseThreshold_0= +d._emscripten_bind_btSliderConstraint_getBreakingImpulseThreshold_0,br=c._emscripten_bind_btSliderConstraint_getParam_2=d._emscripten_bind_btSliderConstraint_getParam_2,cr=c._emscripten_bind_btSliderConstraint_setBreakingImpulseThreshold_1=d._emscripten_bind_btSliderConstraint_setBreakingImpulseThreshold_1,dr=c._emscripten_bind_btSliderConstraint_setLowerAngLimit_1=d._emscripten_bind_btSliderConstraint_setLowerAngLimit_1,er=c._emscripten_bind_btSliderConstraint_setLowerLinLimit_1=d._emscripten_bind_btSliderConstraint_setLowerLinLimit_1, +fr=c._emscripten_bind_btSliderConstraint_setParam_3=d._emscripten_bind_btSliderConstraint_setParam_3,gr=c._emscripten_bind_btSliderConstraint_setUpperAngLimit_1=d._emscripten_bind_btSliderConstraint_setUpperAngLimit_1,hr=c._emscripten_bind_btSliderConstraint_setUpperLinLimit_1=d._emscripten_bind_btSliderConstraint_setUpperLinLimit_1,ir=c._emscripten_bind_btSoftBodyArray___destroy___0=d._emscripten_bind_btSoftBodyArray___destroy___0,jr=c._emscripten_bind_btSoftBodyArray_at_1=d._emscripten_bind_btSoftBodyArray_at_1, +kr=c._emscripten_bind_btSoftBodyArray_size_0=d._emscripten_bind_btSoftBodyArray_size_0,lr=c._emscripten_bind_btSoftBodyHelpers_CreateEllipsoid_4=d._emscripten_bind_btSoftBodyHelpers_CreateEllipsoid_4,mr=c._emscripten_bind_btSoftBodyHelpers_CreateFromConvexHull_4=d._emscripten_bind_btSoftBodyHelpers_CreateFromConvexHull_4,nr=c._emscripten_bind_btSoftBodyHelpers_CreateFromTriMesh_5=d._emscripten_bind_btSoftBodyHelpers_CreateFromTriMesh_5,or=c._emscripten_bind_btSoftBodyHelpers_CreatePatchUV_10=d._emscripten_bind_btSoftBodyHelpers_CreatePatchUV_10, +pr=c._emscripten_bind_btSoftBodyHelpers_CreatePatch_9=d._emscripten_bind_btSoftBodyHelpers_CreatePatch_9,qr=c._emscripten_bind_btSoftBodyHelpers_CreateRope_5=d._emscripten_bind_btSoftBodyHelpers_CreateRope_5,rr=c._emscripten_bind_btSoftBodyHelpers___destroy___0=d._emscripten_bind_btSoftBodyHelpers___destroy___0,sr=c._emscripten_bind_btSoftBodyHelpers_btSoftBodyHelpers_0=d._emscripten_bind_btSoftBodyHelpers_btSoftBodyHelpers_0,tr=c._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration___destroy___0= +d._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration___destroy___0,ur=c._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_0=d._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_0,vr=c._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_1=d._emscripten_bind_btSoftBodyRigidBodyCollisionConfiguration_btSoftBodyRigidBodyCollisionConfiguration_1, +wr=c._emscripten_bind_btSoftBodySolver___destroy___0=d._emscripten_bind_btSoftBodySolver___destroy___0,xr=c._emscripten_bind_btSoftBodyWorldInfo___destroy___0=d._emscripten_bind_btSoftBodyWorldInfo___destroy___0,yr=c._emscripten_bind_btSoftBodyWorldInfo_btSoftBodyWorldInfo_0=d._emscripten_bind_btSoftBodyWorldInfo_btSoftBodyWorldInfo_0,zr=c._emscripten_bind_btSoftBodyWorldInfo_get_air_density_0=d._emscripten_bind_btSoftBodyWorldInfo_get_air_density_0,Ar=c._emscripten_bind_btSoftBodyWorldInfo_get_m_broadphase_0= +d._emscripten_bind_btSoftBodyWorldInfo_get_m_broadphase_0,Br=c._emscripten_bind_btSoftBodyWorldInfo_get_m_dispatcher_0=d._emscripten_bind_btSoftBodyWorldInfo_get_m_dispatcher_0,Cr=c._emscripten_bind_btSoftBodyWorldInfo_get_m_gravity_0=d._emscripten_bind_btSoftBodyWorldInfo_get_m_gravity_0,Dr=c._emscripten_bind_btSoftBodyWorldInfo_get_m_maxDisplacement_0=d._emscripten_bind_btSoftBodyWorldInfo_get_m_maxDisplacement_0,Er=c._emscripten_bind_btSoftBodyWorldInfo_get_water_density_0=d._emscripten_bind_btSoftBodyWorldInfo_get_water_density_0, +Fr=c._emscripten_bind_btSoftBodyWorldInfo_get_water_normal_0=d._emscripten_bind_btSoftBodyWorldInfo_get_water_normal_0,Gr=c._emscripten_bind_btSoftBodyWorldInfo_get_water_offset_0=d._emscripten_bind_btSoftBodyWorldInfo_get_water_offset_0,Hr=c._emscripten_bind_btSoftBodyWorldInfo_set_air_density_1=d._emscripten_bind_btSoftBodyWorldInfo_set_air_density_1,Ir=c._emscripten_bind_btSoftBodyWorldInfo_set_m_broadphase_1=d._emscripten_bind_btSoftBodyWorldInfo_set_m_broadphase_1,Jr=c._emscripten_bind_btSoftBodyWorldInfo_set_m_dispatcher_1= +d._emscripten_bind_btSoftBodyWorldInfo_set_m_dispatcher_1,Kr=c._emscripten_bind_btSoftBodyWorldInfo_set_m_gravity_1=d._emscripten_bind_btSoftBodyWorldInfo_set_m_gravity_1,Lr=c._emscripten_bind_btSoftBodyWorldInfo_set_m_maxDisplacement_1=d._emscripten_bind_btSoftBodyWorldInfo_set_m_maxDisplacement_1,Mr=c._emscripten_bind_btSoftBodyWorldInfo_set_water_density_1=d._emscripten_bind_btSoftBodyWorldInfo_set_water_density_1,Nr=c._emscripten_bind_btSoftBodyWorldInfo_set_water_normal_1=d._emscripten_bind_btSoftBodyWorldInfo_set_water_normal_1, +Or=c._emscripten_bind_btSoftBodyWorldInfo_set_water_offset_1=d._emscripten_bind_btSoftBodyWorldInfo_set_water_offset_1,Pr=c._emscripten_bind_btSoftBody___destroy___0=d._emscripten_bind_btSoftBody___destroy___0,Qr=c._emscripten_bind_btSoftBody_activate_0=d._emscripten_bind_btSoftBody_activate_0,Rr=c._emscripten_bind_btSoftBody_activate_1=d._emscripten_bind_btSoftBody_activate_1,Sr=c._emscripten_bind_btSoftBody_addAeroForceToNode_2=d._emscripten_bind_btSoftBody_addAeroForceToNode_2,Tr=c._emscripten_bind_btSoftBody_addForce_1= +d._emscripten_bind_btSoftBody_addForce_1,Ur=c._emscripten_bind_btSoftBody_addForce_2=d._emscripten_bind_btSoftBody_addForce_2,Vr=c._emscripten_bind_btSoftBody_appendAnchor_4=d._emscripten_bind_btSoftBody_appendAnchor_4,Wr=c._emscripten_bind_btSoftBody_appendFace_4=d._emscripten_bind_btSoftBody_appendFace_4,Xr=c._emscripten_bind_btSoftBody_appendLink_4=d._emscripten_bind_btSoftBody_appendLink_4,Yr=c._emscripten_bind_btSoftBody_appendMaterial_0=d._emscripten_bind_btSoftBody_appendMaterial_0,Zr=c._emscripten_bind_btSoftBody_appendNode_2= +d._emscripten_bind_btSoftBody_appendNode_2,$r=c._emscripten_bind_btSoftBody_appendTetra_5=d._emscripten_bind_btSoftBody_appendTetra_5,as=c._emscripten_bind_btSoftBody_btSoftBody_4=d._emscripten_bind_btSoftBody_btSoftBody_4,bs=c._emscripten_bind_btSoftBody_checkFace_3=d._emscripten_bind_btSoftBody_checkFace_3,cs=c._emscripten_bind_btSoftBody_checkLink_2=d._emscripten_bind_btSoftBody_checkLink_2,ds=c._emscripten_bind_btSoftBody_forceActivationState_1=d._emscripten_bind_btSoftBody_forceActivationState_1, +es=c._emscripten_bind_btSoftBody_generateBendingConstraints_2=d._emscripten_bind_btSoftBody_generateBendingConstraints_2,gs=c._emscripten_bind_btSoftBody_generateClusters_1=d._emscripten_bind_btSoftBody_generateClusters_1,hs=c._emscripten_bind_btSoftBody_generateClusters_2=d._emscripten_bind_btSoftBody_generateClusters_2,is=c._emscripten_bind_btSoftBody_getCollisionFlags_0=d._emscripten_bind_btSoftBody_getCollisionFlags_0,js=c._emscripten_bind_btSoftBody_getCollisionShape_0=d._emscripten_bind_btSoftBody_getCollisionShape_0, +ks=c._emscripten_bind_btSoftBody_getTotalMass_0=d._emscripten_bind_btSoftBody_getTotalMass_0,ls=c._emscripten_bind_btSoftBody_getUserIndex_0=d._emscripten_bind_btSoftBody_getUserIndex_0,ms=c._emscripten_bind_btSoftBody_getUserPointer_0=d._emscripten_bind_btSoftBody_getUserPointer_0,ns=c._emscripten_bind_btSoftBody_getWorldTransform_0=d._emscripten_bind_btSoftBody_getWorldTransform_0,ps=c._emscripten_bind_btSoftBody_get_m_anchors_0=d._emscripten_bind_btSoftBody_get_m_anchors_0,qs=c._emscripten_bind_btSoftBody_get_m_cfg_0= +d._emscripten_bind_btSoftBody_get_m_cfg_0,rs=c._emscripten_bind_btSoftBody_get_m_materials_0=d._emscripten_bind_btSoftBody_get_m_materials_0,ss=c._emscripten_bind_btSoftBody_get_m_nodes_0=d._emscripten_bind_btSoftBody_get_m_nodes_0,ts=c._emscripten_bind_btSoftBody_isActive_0=d._emscripten_bind_btSoftBody_isActive_0,us=c._emscripten_bind_btSoftBody_isKinematicObject_0=d._emscripten_bind_btSoftBody_isKinematicObject_0,vs=c._emscripten_bind_btSoftBody_isStaticObject_0=d._emscripten_bind_btSoftBody_isStaticObject_0, +xs=c._emscripten_bind_btSoftBody_isStaticOrKinematicObject_0=d._emscripten_bind_btSoftBody_isStaticOrKinematicObject_0,ys=c._emscripten_bind_btSoftBody_rotate_1=d._emscripten_bind_btSoftBody_rotate_1,zs=c._emscripten_bind_btSoftBody_scale_1=d._emscripten_bind_btSoftBody_scale_1,As=c._emscripten_bind_btSoftBody_setActivationState_1=d._emscripten_bind_btSoftBody_setActivationState_1,Bs=c._emscripten_bind_btSoftBody_setAnisotropicFriction_2=d._emscripten_bind_btSoftBody_setAnisotropicFriction_2,Cs=c._emscripten_bind_btSoftBody_setCcdMotionThreshold_1= +d._emscripten_bind_btSoftBody_setCcdMotionThreshold_1,Ds=c._emscripten_bind_btSoftBody_setCcdSweptSphereRadius_1=d._emscripten_bind_btSoftBody_setCcdSweptSphereRadius_1,Es=c._emscripten_bind_btSoftBody_setCollisionFlags_1=d._emscripten_bind_btSoftBody_setCollisionFlags_1,Fs=c._emscripten_bind_btSoftBody_setCollisionShape_1=d._emscripten_bind_btSoftBody_setCollisionShape_1,Gs=c._emscripten_bind_btSoftBody_setContactProcessingThreshold_1=d._emscripten_bind_btSoftBody_setContactProcessingThreshold_1, +Hs=c._emscripten_bind_btSoftBody_setFriction_1=d._emscripten_bind_btSoftBody_setFriction_1,Is=c._emscripten_bind_btSoftBody_setMass_2=d._emscripten_bind_btSoftBody_setMass_2,Js=c._emscripten_bind_btSoftBody_setRestitution_1=d._emscripten_bind_btSoftBody_setRestitution_1,Ks=c._emscripten_bind_btSoftBody_setRollingFriction_1=d._emscripten_bind_btSoftBody_setRollingFriction_1,Ls=c._emscripten_bind_btSoftBody_setTotalMass_2=d._emscripten_bind_btSoftBody_setTotalMass_2,Ms=c._emscripten_bind_btSoftBody_setUserIndex_1= +d._emscripten_bind_btSoftBody_setUserIndex_1,Ns=c._emscripten_bind_btSoftBody_setUserPointer_1=d._emscripten_bind_btSoftBody_setUserPointer_1,Os=c._emscripten_bind_btSoftBody_setWorldTransform_1=d._emscripten_bind_btSoftBody_setWorldTransform_1,Ps=c._emscripten_bind_btSoftBody_set_m_anchors_1=d._emscripten_bind_btSoftBody_set_m_anchors_1,Qs=c._emscripten_bind_btSoftBody_set_m_cfg_1=d._emscripten_bind_btSoftBody_set_m_cfg_1,Rs=c._emscripten_bind_btSoftBody_set_m_materials_1=d._emscripten_bind_btSoftBody_set_m_materials_1, +Ss=c._emscripten_bind_btSoftBody_set_m_nodes_1=d._emscripten_bind_btSoftBody_set_m_nodes_1,Ts=c._emscripten_bind_btSoftBody_transform_1=d._emscripten_bind_btSoftBody_transform_1,Us=c._emscripten_bind_btSoftBody_translate_1=d._emscripten_bind_btSoftBody_translate_1,Vs=c._emscripten_bind_btSoftBody_upcast_1=d._emscripten_bind_btSoftBody_upcast_1,Ws=c._emscripten_bind_btSoftRigidDynamicsWorld___destroy___0=d._emscripten_bind_btSoftRigidDynamicsWorld___destroy___0,Xs=c._emscripten_bind_btSoftRigidDynamicsWorld_addAction_1= +d._emscripten_bind_btSoftRigidDynamicsWorld_addAction_1,Ys=c._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_1=d._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_1,Zs=c._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_2=d._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_2,$s=c._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_3=d._emscripten_bind_btSoftRigidDynamicsWorld_addCollisionObject_3,at=c._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_1= +d._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_1,bt=c._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_2=d._emscripten_bind_btSoftRigidDynamicsWorld_addConstraint_2,ct=c._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_1=d._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_1,dt=c._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_3=d._emscripten_bind_btSoftRigidDynamicsWorld_addRigidBody_3,et=c._emscripten_bind_btSoftRigidDynamicsWorld_addSoftBody_3=d._emscripten_bind_btSoftRigidDynamicsWorld_addSoftBody_3, +ft=c._emscripten_bind_btSoftRigidDynamicsWorld_btSoftRigidDynamicsWorld_5=d._emscripten_bind_btSoftRigidDynamicsWorld_btSoftRigidDynamicsWorld_5,gt=c._emscripten_bind_btSoftRigidDynamicsWorld_contactPairTest_3=d._emscripten_bind_btSoftRigidDynamicsWorld_contactPairTest_3,ht=c._emscripten_bind_btSoftRigidDynamicsWorld_contactTest_2=d._emscripten_bind_btSoftRigidDynamicsWorld_contactTest_2,it=c._emscripten_bind_btSoftRigidDynamicsWorld_convexSweepTest_5=d._emscripten_bind_btSoftRigidDynamicsWorld_convexSweepTest_5, +jt=c._emscripten_bind_btSoftRigidDynamicsWorld_getBroadphase_0=d._emscripten_bind_btSoftRigidDynamicsWorld_getBroadphase_0,kt=c._emscripten_bind_btSoftRigidDynamicsWorld_getDispatchInfo_0=d._emscripten_bind_btSoftRigidDynamicsWorld_getDispatchInfo_0,lt=c._emscripten_bind_btSoftRigidDynamicsWorld_getDispatcher_0=d._emscripten_bind_btSoftRigidDynamicsWorld_getDispatcher_0,mt=c._emscripten_bind_btSoftRigidDynamicsWorld_getGravity_0=d._emscripten_bind_btSoftRigidDynamicsWorld_getGravity_0,nt=c._emscripten_bind_btSoftRigidDynamicsWorld_getPairCache_0= +d._emscripten_bind_btSoftRigidDynamicsWorld_getPairCache_0,ot=c._emscripten_bind_btSoftRigidDynamicsWorld_getSoftBodyArray_0=d._emscripten_bind_btSoftRigidDynamicsWorld_getSoftBodyArray_0,pt=c._emscripten_bind_btSoftRigidDynamicsWorld_getSolverInfo_0=d._emscripten_bind_btSoftRigidDynamicsWorld_getSolverInfo_0,qt=c._emscripten_bind_btSoftRigidDynamicsWorld_getWorldInfo_0=d._emscripten_bind_btSoftRigidDynamicsWorld_getWorldInfo_0,rt=c._emscripten_bind_btSoftRigidDynamicsWorld_rayTest_3=d._emscripten_bind_btSoftRigidDynamicsWorld_rayTest_3, +st=c._emscripten_bind_btSoftRigidDynamicsWorld_removeAction_1=d._emscripten_bind_btSoftRigidDynamicsWorld_removeAction_1,tt=c._emscripten_bind_btSoftRigidDynamicsWorld_removeCollisionObject_1=d._emscripten_bind_btSoftRigidDynamicsWorld_removeCollisionObject_1,ut=c._emscripten_bind_btSoftRigidDynamicsWorld_removeConstraint_1=d._emscripten_bind_btSoftRigidDynamicsWorld_removeConstraint_1,vt=c._emscripten_bind_btSoftRigidDynamicsWorld_removeRigidBody_1=d._emscripten_bind_btSoftRigidDynamicsWorld_removeRigidBody_1, +wt=c._emscripten_bind_btSoftRigidDynamicsWorld_removeSoftBody_1=d._emscripten_bind_btSoftRigidDynamicsWorld_removeSoftBody_1,xt=c._emscripten_bind_btSoftRigidDynamicsWorld_setGravity_1=d._emscripten_bind_btSoftRigidDynamicsWorld_setGravity_1,yt=c._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_1=d._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_1,zt=c._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_2=d._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_2,At=c._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_3= +d._emscripten_bind_btSoftRigidDynamicsWorld_stepSimulation_3,Bt=c._emscripten_bind_btSoftRigidDynamicsWorld_updateSingleAabb_1=d._emscripten_bind_btSoftRigidDynamicsWorld_updateSingleAabb_1,Ct=c._emscripten_bind_btSphereShape___destroy___0=d._emscripten_bind_btSphereShape___destroy___0,Dt=c._emscripten_bind_btSphereShape_btSphereShape_1=d._emscripten_bind_btSphereShape_btSphereShape_1,Et=c._emscripten_bind_btSphereShape_calculateLocalInertia_2=d._emscripten_bind_btSphereShape_calculateLocalInertia_2, +Ft=c._emscripten_bind_btSphereShape_getLocalScaling_0=d._emscripten_bind_btSphereShape_getLocalScaling_0,Gt=c._emscripten_bind_btSphereShape_getMargin_0=d._emscripten_bind_btSphereShape_getMargin_0,Ht=c._emscripten_bind_btSphereShape_setLocalScaling_1=d._emscripten_bind_btSphereShape_setLocalScaling_1,It=c._emscripten_bind_btSphereShape_setMargin_1=d._emscripten_bind_btSphereShape_setMargin_1,Jt=c._emscripten_bind_btStaticPlaneShape___destroy___0=d._emscripten_bind_btStaticPlaneShape___destroy___0, +Kt=c._emscripten_bind_btStaticPlaneShape_btStaticPlaneShape_2=d._emscripten_bind_btStaticPlaneShape_btStaticPlaneShape_2,Lt=c._emscripten_bind_btStaticPlaneShape_calculateLocalInertia_2=d._emscripten_bind_btStaticPlaneShape_calculateLocalInertia_2,Mt=c._emscripten_bind_btStaticPlaneShape_getLocalScaling_0=d._emscripten_bind_btStaticPlaneShape_getLocalScaling_0,Nt=c._emscripten_bind_btStaticPlaneShape_setLocalScaling_1=d._emscripten_bind_btStaticPlaneShape_setLocalScaling_1,Ot=c._emscripten_bind_btStridingMeshInterface___destroy___0= +d._emscripten_bind_btStridingMeshInterface___destroy___0,Pt=c._emscripten_bind_btTransform___destroy___0=d._emscripten_bind_btTransform___destroy___0,Qt=c._emscripten_bind_btTransform_btTransform_0=d._emscripten_bind_btTransform_btTransform_0,Rt=c._emscripten_bind_btTransform_btTransform_2=d._emscripten_bind_btTransform_btTransform_2,St=c._emscripten_bind_btTransform_getBasis_0=d._emscripten_bind_btTransform_getBasis_0,Tt=c._emscripten_bind_btTransform_getOrigin_0=d._emscripten_bind_btTransform_getOrigin_0, +Ut=c._emscripten_bind_btTransform_getRotation_0=d._emscripten_bind_btTransform_getRotation_0,Vt=c._emscripten_bind_btTransform_setFromOpenGLMatrix_1=d._emscripten_bind_btTransform_setFromOpenGLMatrix_1,Wt=c._emscripten_bind_btTransform_setIdentity_0=d._emscripten_bind_btTransform_setIdentity_0,Xt=c._emscripten_bind_btTransform_setOrigin_1=d._emscripten_bind_btTransform_setOrigin_1,Yt=c._emscripten_bind_btTransform_setRotation_1=d._emscripten_bind_btTransform_setRotation_1,Zt=c._emscripten_bind_btTriangleMeshShape___destroy___0= +d._emscripten_bind_btTriangleMeshShape___destroy___0,$t=c._emscripten_bind_btTriangleMeshShape_calculateLocalInertia_2=d._emscripten_bind_btTriangleMeshShape_calculateLocalInertia_2,au=c._emscripten_bind_btTriangleMeshShape_getLocalScaling_0=d._emscripten_bind_btTriangleMeshShape_getLocalScaling_0,bu=c._emscripten_bind_btTriangleMeshShape_setLocalScaling_1=d._emscripten_bind_btTriangleMeshShape_setLocalScaling_1,cu=c._emscripten_bind_btTriangleMesh___destroy___0=d._emscripten_bind_btTriangleMesh___destroy___0, +du=c._emscripten_bind_btTriangleMesh_addTriangle_3=d._emscripten_bind_btTriangleMesh_addTriangle_3,eu=c._emscripten_bind_btTriangleMesh_addTriangle_4=d._emscripten_bind_btTriangleMesh_addTriangle_4,fu=c._emscripten_bind_btTriangleMesh_btTriangleMesh_0=d._emscripten_bind_btTriangleMesh_btTriangleMesh_0,gu=c._emscripten_bind_btTriangleMesh_btTriangleMesh_1=d._emscripten_bind_btTriangleMesh_btTriangleMesh_1,hu=c._emscripten_bind_btTriangleMesh_btTriangleMesh_2=d._emscripten_bind_btTriangleMesh_btTriangleMesh_2, +iu=c._emscripten_bind_btTypedConstraint___destroy___0=d._emscripten_bind_btTypedConstraint___destroy___0,ju=c._emscripten_bind_btTypedConstraint_enableFeedback_1=d._emscripten_bind_btTypedConstraint_enableFeedback_1,ku=c._emscripten_bind_btTypedConstraint_getBreakingImpulseThreshold_0=d._emscripten_bind_btTypedConstraint_getBreakingImpulseThreshold_0,lu=c._emscripten_bind_btTypedConstraint_getParam_2=d._emscripten_bind_btTypedConstraint_getParam_2,mu=c._emscripten_bind_btTypedConstraint_setBreakingImpulseThreshold_1= +d._emscripten_bind_btTypedConstraint_setBreakingImpulseThreshold_1,nu=c._emscripten_bind_btTypedConstraint_setParam_3=d._emscripten_bind_btTypedConstraint_setParam_3,ou=c._emscripten_bind_btVector3___destroy___0=d._emscripten_bind_btVector3___destroy___0,pu=c._emscripten_bind_btVector3_btVector3_0=d._emscripten_bind_btVector3_btVector3_0,qu=c._emscripten_bind_btVector3_btVector3_3=d._emscripten_bind_btVector3_btVector3_3,ru=c._emscripten_bind_btVector3_dot_1=d._emscripten_bind_btVector3_dot_1,su= +c._emscripten_bind_btVector3_length_0=d._emscripten_bind_btVector3_length_0,tu=c._emscripten_bind_btVector3_normalize_0=d._emscripten_bind_btVector3_normalize_0,uu=c._emscripten_bind_btVector3_op_add_1=d._emscripten_bind_btVector3_op_add_1,vu=c._emscripten_bind_btVector3_op_mul_1=d._emscripten_bind_btVector3_op_mul_1,wu=c._emscripten_bind_btVector3_op_sub_1=d._emscripten_bind_btVector3_op_sub_1,xu=c._emscripten_bind_btVector3_rotate_2=d._emscripten_bind_btVector3_rotate_2,yu=c._emscripten_bind_btVector3_setValue_3= +d._emscripten_bind_btVector3_setValue_3,zu=c._emscripten_bind_btVector3_setX_1=d._emscripten_bind_btVector3_setX_1,Au=c._emscripten_bind_btVector3_setY_1=d._emscripten_bind_btVector3_setY_1,Bu=c._emscripten_bind_btVector3_setZ_1=d._emscripten_bind_btVector3_setZ_1,Cu=c._emscripten_bind_btVector3_x_0=d._emscripten_bind_btVector3_x_0,Du=c._emscripten_bind_btVector3_y_0=d._emscripten_bind_btVector3_y_0,Eu=c._emscripten_bind_btVector3_z_0=d._emscripten_bind_btVector3_z_0,Fu=c._emscripten_bind_btVector4___destroy___0= +d._emscripten_bind_btVector4___destroy___0,Gu=c._emscripten_bind_btVector4_btVector4_0=d._emscripten_bind_btVector4_btVector4_0,Hu=c._emscripten_bind_btVector4_btVector4_4=d._emscripten_bind_btVector4_btVector4_4,Iu=c._emscripten_bind_btVector4_dot_1=d._emscripten_bind_btVector4_dot_1,Ju=c._emscripten_bind_btVector4_length_0=d._emscripten_bind_btVector4_length_0,Ku=c._emscripten_bind_btVector4_normalize_0=d._emscripten_bind_btVector4_normalize_0,Lu=c._emscripten_bind_btVector4_op_add_1=d._emscripten_bind_btVector4_op_add_1, +Mu=c._emscripten_bind_btVector4_op_mul_1=d._emscripten_bind_btVector4_op_mul_1,Nu=c._emscripten_bind_btVector4_op_sub_1=d._emscripten_bind_btVector4_op_sub_1,Ou=c._emscripten_bind_btVector4_rotate_2=d._emscripten_bind_btVector4_rotate_2,Pu=c._emscripten_bind_btVector4_setValue_4=d._emscripten_bind_btVector4_setValue_4,Qu=c._emscripten_bind_btVector4_setX_1=d._emscripten_bind_btVector4_setX_1,Ru=c._emscripten_bind_btVector4_setY_1=d._emscripten_bind_btVector4_setY_1,Su=c._emscripten_bind_btVector4_setZ_1= +d._emscripten_bind_btVector4_setZ_1,Tu=c._emscripten_bind_btVector4_w_0=d._emscripten_bind_btVector4_w_0,Uu=c._emscripten_bind_btVector4_x_0=d._emscripten_bind_btVector4_x_0,Vu=c._emscripten_bind_btVector4_y_0=d._emscripten_bind_btVector4_y_0,Wu=c._emscripten_bind_btVector4_z_0=d._emscripten_bind_btVector4_z_0,Xu=c._emscripten_bind_btVehicleRaycasterResult___destroy___0=d._emscripten_bind_btVehicleRaycasterResult___destroy___0,Yu=c._emscripten_bind_btVehicleRaycasterResult_get_m_distFraction_0=d._emscripten_bind_btVehicleRaycasterResult_get_m_distFraction_0, +Zu=c._emscripten_bind_btVehicleRaycasterResult_get_m_hitNormalInWorld_0=d._emscripten_bind_btVehicleRaycasterResult_get_m_hitNormalInWorld_0,$u=c._emscripten_bind_btVehicleRaycasterResult_get_m_hitPointInWorld_0=d._emscripten_bind_btVehicleRaycasterResult_get_m_hitPointInWorld_0,av=c._emscripten_bind_btVehicleRaycasterResult_set_m_distFraction_1=d._emscripten_bind_btVehicleRaycasterResult_set_m_distFraction_1,bv=c._emscripten_bind_btVehicleRaycasterResult_set_m_hitNormalInWorld_1=d._emscripten_bind_btVehicleRaycasterResult_set_m_hitNormalInWorld_1, +cv=c._emscripten_bind_btVehicleRaycasterResult_set_m_hitPointInWorld_1=d._emscripten_bind_btVehicleRaycasterResult_set_m_hitPointInWorld_1,dv=c._emscripten_bind_btVehicleRaycaster___destroy___0=d._emscripten_bind_btVehicleRaycaster___destroy___0,ev=c._emscripten_bind_btVehicleRaycaster_castRay_3=d._emscripten_bind_btVehicleRaycaster_castRay_3,fv=c._emscripten_bind_btVehicleTuning_btVehicleTuning_0=d._emscripten_bind_btVehicleTuning_btVehicleTuning_0,gv=c._emscripten_bind_btVehicleTuning_get_m_frictionSlip_0= +d._emscripten_bind_btVehicleTuning_get_m_frictionSlip_0,hv=c._emscripten_bind_btVehicleTuning_get_m_maxSuspensionForce_0=d._emscripten_bind_btVehicleTuning_get_m_maxSuspensionForce_0,iv=c._emscripten_bind_btVehicleTuning_get_m_maxSuspensionTravelCm_0=d._emscripten_bind_btVehicleTuning_get_m_maxSuspensionTravelCm_0,jv=c._emscripten_bind_btVehicleTuning_get_m_suspensionCompression_0=d._emscripten_bind_btVehicleTuning_get_m_suspensionCompression_0,kv=c._emscripten_bind_btVehicleTuning_get_m_suspensionDamping_0= +d._emscripten_bind_btVehicleTuning_get_m_suspensionDamping_0,lv=c._emscripten_bind_btVehicleTuning_get_m_suspensionStiffness_0=d._emscripten_bind_btVehicleTuning_get_m_suspensionStiffness_0,mv=c._emscripten_bind_btVehicleTuning_set_m_frictionSlip_1=d._emscripten_bind_btVehicleTuning_set_m_frictionSlip_1,nv=c._emscripten_bind_btVehicleTuning_set_m_maxSuspensionForce_1=d._emscripten_bind_btVehicleTuning_set_m_maxSuspensionForce_1,ov=c._emscripten_bind_btVehicleTuning_set_m_maxSuspensionTravelCm_1=d._emscripten_bind_btVehicleTuning_set_m_maxSuspensionTravelCm_1, +pv=c._emscripten_bind_btVehicleTuning_set_m_suspensionCompression_1=d._emscripten_bind_btVehicleTuning_set_m_suspensionCompression_1,qv=c._emscripten_bind_btVehicleTuning_set_m_suspensionDamping_1=d._emscripten_bind_btVehicleTuning_set_m_suspensionDamping_1,rv=c._emscripten_bind_btVehicleTuning_set_m_suspensionStiffness_1=d._emscripten_bind_btVehicleTuning_set_m_suspensionStiffness_1,sv=c._emscripten_bind_btWheelInfoConstructionInfo___destroy___0=d._emscripten_bind_btWheelInfoConstructionInfo___destroy___0, +tv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_bIsFrontWheel_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_bIsFrontWheel_0,uv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_chassisConnectionCS_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_chassisConnectionCS_0,vv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_frictionSlip_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_frictionSlip_0,wv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionForce_0= +d._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionForce_0,xv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionTravelCm_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_maxSuspensionTravelCm_0,yv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionRestLength_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionRestLength_0,zv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionStiffness_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_suspensionStiffness_0, +Av=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelAxleCS_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelAxleCS_0,Bv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelDirectionCS_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelDirectionCS_0,Cv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelRadius_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelRadius_0,Dv=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingCompression_0= +d._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingCompression_0,Ev=c._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingRelaxation_0=d._emscripten_bind_btWheelInfoConstructionInfo_get_m_wheelsDampingRelaxation_0,Fv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_bIsFrontWheel_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_bIsFrontWheel_1,Gv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_chassisConnectionCS_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_chassisConnectionCS_1, +Hv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_frictionSlip_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_frictionSlip_1,Iv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionForce_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionForce_1,Jv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionTravelCm_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_maxSuspensionTravelCm_1,Kv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionRestLength_1= +d._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionRestLength_1,Lv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionStiffness_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_suspensionStiffness_1,Mv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelAxleCS_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelAxleCS_1,Nv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelDirectionCS_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelDirectionCS_1, +Ov=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelRadius_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelRadius_1,Pv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingCompression_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingCompression_1,Qv=c._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingRelaxation_1=d._emscripten_bind_btWheelInfoConstructionInfo_set_m_wheelsDampingRelaxation_1,Rv=c._emscripten_bind_btWheelInfo___destroy___0= +d._emscripten_bind_btWheelInfo___destroy___0,Sv=c._emscripten_bind_btWheelInfo_btWheelInfo_1=d._emscripten_bind_btWheelInfo_btWheelInfo_1,Tv=c._emscripten_bind_btWheelInfo_getSuspensionRestLength_0=d._emscripten_bind_btWheelInfo_getSuspensionRestLength_0,Uv=c._emscripten_bind_btWheelInfo_get_m_bIsFrontWheel_0=d._emscripten_bind_btWheelInfo_get_m_bIsFrontWheel_0,Vv=c._emscripten_bind_btWheelInfo_get_m_brake_0=d._emscripten_bind_btWheelInfo_get_m_brake_0,Wv=c._emscripten_bind_btWheelInfo_get_m_chassisConnectionPointCS_0= +d._emscripten_bind_btWheelInfo_get_m_chassisConnectionPointCS_0,Xv=c._emscripten_bind_btWheelInfo_get_m_clippedInvContactDotSuspension_0=d._emscripten_bind_btWheelInfo_get_m_clippedInvContactDotSuspension_0,Yv=c._emscripten_bind_btWheelInfo_get_m_deltaRotation_0=d._emscripten_bind_btWheelInfo_get_m_deltaRotation_0,Zv=c._emscripten_bind_btWheelInfo_get_m_engineForce_0=d._emscripten_bind_btWheelInfo_get_m_engineForce_0,$v=c._emscripten_bind_btWheelInfo_get_m_frictionSlip_0=d._emscripten_bind_btWheelInfo_get_m_frictionSlip_0, +aw=c._emscripten_bind_btWheelInfo_get_m_maxSuspensionForce_0=d._emscripten_bind_btWheelInfo_get_m_maxSuspensionForce_0,bw=c._emscripten_bind_btWheelInfo_get_m_maxSuspensionTravelCm_0=d._emscripten_bind_btWheelInfo_get_m_maxSuspensionTravelCm_0,cw=c._emscripten_bind_btWheelInfo_get_m_raycastInfo_0=d._emscripten_bind_btWheelInfo_get_m_raycastInfo_0,dw=c._emscripten_bind_btWheelInfo_get_m_rollInfluence_0=d._emscripten_bind_btWheelInfo_get_m_rollInfluence_0,ew=c._emscripten_bind_btWheelInfo_get_m_rotation_0= +d._emscripten_bind_btWheelInfo_get_m_rotation_0,fw=c._emscripten_bind_btWheelInfo_get_m_skidInfo_0=d._emscripten_bind_btWheelInfo_get_m_skidInfo_0,gw=c._emscripten_bind_btWheelInfo_get_m_steering_0=d._emscripten_bind_btWheelInfo_get_m_steering_0,hw=c._emscripten_bind_btWheelInfo_get_m_suspensionRelativeVelocity_0=d._emscripten_bind_btWheelInfo_get_m_suspensionRelativeVelocity_0,iw=c._emscripten_bind_btWheelInfo_get_m_suspensionRestLength1_0=d._emscripten_bind_btWheelInfo_get_m_suspensionRestLength1_0, +jw=c._emscripten_bind_btWheelInfo_get_m_suspensionStiffness_0=d._emscripten_bind_btWheelInfo_get_m_suspensionStiffness_0,kw=c._emscripten_bind_btWheelInfo_get_m_wheelAxleCS_0=d._emscripten_bind_btWheelInfo_get_m_wheelAxleCS_0,lw=c._emscripten_bind_btWheelInfo_get_m_wheelDirectionCS_0=d._emscripten_bind_btWheelInfo_get_m_wheelDirectionCS_0,mw=c._emscripten_bind_btWheelInfo_get_m_wheelsDampingCompression_0=d._emscripten_bind_btWheelInfo_get_m_wheelsDampingCompression_0,nw=c._emscripten_bind_btWheelInfo_get_m_wheelsDampingRelaxation_0= +d._emscripten_bind_btWheelInfo_get_m_wheelsDampingRelaxation_0,ow=c._emscripten_bind_btWheelInfo_get_m_wheelsRadius_0=d._emscripten_bind_btWheelInfo_get_m_wheelsRadius_0,pw=c._emscripten_bind_btWheelInfo_get_m_wheelsSuspensionForce_0=d._emscripten_bind_btWheelInfo_get_m_wheelsSuspensionForce_0,qw=c._emscripten_bind_btWheelInfo_get_m_worldTransform_0=d._emscripten_bind_btWheelInfo_get_m_worldTransform_0,rw=c._emscripten_bind_btWheelInfo_set_m_bIsFrontWheel_1=d._emscripten_bind_btWheelInfo_set_m_bIsFrontWheel_1, +sw=c._emscripten_bind_btWheelInfo_set_m_brake_1=d._emscripten_bind_btWheelInfo_set_m_brake_1,tw=c._emscripten_bind_btWheelInfo_set_m_chassisConnectionPointCS_1=d._emscripten_bind_btWheelInfo_set_m_chassisConnectionPointCS_1,uw=c._emscripten_bind_btWheelInfo_set_m_clippedInvContactDotSuspension_1=d._emscripten_bind_btWheelInfo_set_m_clippedInvContactDotSuspension_1,vw=c._emscripten_bind_btWheelInfo_set_m_deltaRotation_1=d._emscripten_bind_btWheelInfo_set_m_deltaRotation_1,ww=c._emscripten_bind_btWheelInfo_set_m_engineForce_1= +d._emscripten_bind_btWheelInfo_set_m_engineForce_1,xw=c._emscripten_bind_btWheelInfo_set_m_frictionSlip_1=d._emscripten_bind_btWheelInfo_set_m_frictionSlip_1,yw=c._emscripten_bind_btWheelInfo_set_m_maxSuspensionForce_1=d._emscripten_bind_btWheelInfo_set_m_maxSuspensionForce_1,zw=c._emscripten_bind_btWheelInfo_set_m_maxSuspensionTravelCm_1=d._emscripten_bind_btWheelInfo_set_m_maxSuspensionTravelCm_1,Aw=c._emscripten_bind_btWheelInfo_set_m_raycastInfo_1=d._emscripten_bind_btWheelInfo_set_m_raycastInfo_1, +Bw=c._emscripten_bind_btWheelInfo_set_m_rollInfluence_1=d._emscripten_bind_btWheelInfo_set_m_rollInfluence_1,Cw=c._emscripten_bind_btWheelInfo_set_m_rotation_1=d._emscripten_bind_btWheelInfo_set_m_rotation_1,Dw=c._emscripten_bind_btWheelInfo_set_m_skidInfo_1=d._emscripten_bind_btWheelInfo_set_m_skidInfo_1,Ew=c._emscripten_bind_btWheelInfo_set_m_steering_1=d._emscripten_bind_btWheelInfo_set_m_steering_1,Fw=c._emscripten_bind_btWheelInfo_set_m_suspensionRelativeVelocity_1=d._emscripten_bind_btWheelInfo_set_m_suspensionRelativeVelocity_1, +Gw=c._emscripten_bind_btWheelInfo_set_m_suspensionRestLength1_1=d._emscripten_bind_btWheelInfo_set_m_suspensionRestLength1_1,Hw=c._emscripten_bind_btWheelInfo_set_m_suspensionStiffness_1=d._emscripten_bind_btWheelInfo_set_m_suspensionStiffness_1,Iw=c._emscripten_bind_btWheelInfo_set_m_wheelAxleCS_1=d._emscripten_bind_btWheelInfo_set_m_wheelAxleCS_1,Jw=c._emscripten_bind_btWheelInfo_set_m_wheelDirectionCS_1=d._emscripten_bind_btWheelInfo_set_m_wheelDirectionCS_1,Kw=c._emscripten_bind_btWheelInfo_set_m_wheelsDampingCompression_1= +d._emscripten_bind_btWheelInfo_set_m_wheelsDampingCompression_1,Lw=c._emscripten_bind_btWheelInfo_set_m_wheelsDampingRelaxation_1=d._emscripten_bind_btWheelInfo_set_m_wheelsDampingRelaxation_1,Mw=c._emscripten_bind_btWheelInfo_set_m_wheelsRadius_1=d._emscripten_bind_btWheelInfo_set_m_wheelsRadius_1,Nw=c._emscripten_bind_btWheelInfo_set_m_wheelsSuspensionForce_1=d._emscripten_bind_btWheelInfo_set_m_wheelsSuspensionForce_1,Ow=c._emscripten_bind_btWheelInfo_set_m_worldTransform_1=d._emscripten_bind_btWheelInfo_set_m_worldTransform_1, +Pw=c._emscripten_bind_btWheelInfo_updateWheel_2=d._emscripten_bind_btWheelInfo_updateWheel_2,Qw=c._emscripten_bind_tAnchorArray___destroy___0=d._emscripten_bind_tAnchorArray___destroy___0,Rw=c._emscripten_bind_tAnchorArray_at_1=d._emscripten_bind_tAnchorArray_at_1,Sw=c._emscripten_bind_tAnchorArray_clear_0=d._emscripten_bind_tAnchorArray_clear_0,Tw=c._emscripten_bind_tAnchorArray_pop_back_0=d._emscripten_bind_tAnchorArray_pop_back_0,Uw=c._emscripten_bind_tAnchorArray_push_back_1=d._emscripten_bind_tAnchorArray_push_back_1, +Vw=c._emscripten_bind_tAnchorArray_size_0=d._emscripten_bind_tAnchorArray_size_0,Ww=c._emscripten_bind_tMaterialArray___destroy___0=d._emscripten_bind_tMaterialArray___destroy___0,Xw=c._emscripten_bind_tMaterialArray_at_1=d._emscripten_bind_tMaterialArray_at_1,Yw=c._emscripten_bind_tMaterialArray_size_0=d._emscripten_bind_tMaterialArray_size_0,Zw=c._emscripten_bind_tNodeArray___destroy___0=d._emscripten_bind_tNodeArray___destroy___0,$w=c._emscripten_bind_tNodeArray_at_1=d._emscripten_bind_tNodeArray_at_1, +ax=c._emscripten_bind_tNodeArray_size_0=d._emscripten_bind_tNodeArray_size_0,bx=c._emscripten_enum_PHY_ScalarType_PHY_DOUBLE=d._emscripten_enum_PHY_ScalarType_PHY_DOUBLE,cx=c._emscripten_enum_PHY_ScalarType_PHY_FIXEDPOINT88=d._emscripten_enum_PHY_ScalarType_PHY_FIXEDPOINT88,dx=c._emscripten_enum_PHY_ScalarType_PHY_FLOAT=d._emscripten_enum_PHY_ScalarType_PHY_FLOAT,ex=c._emscripten_enum_PHY_ScalarType_PHY_INTEGER=d._emscripten_enum_PHY_ScalarType_PHY_INTEGER,fx=c._emscripten_enum_PHY_ScalarType_PHY_SHORT= +d._emscripten_enum_PHY_ScalarType_PHY_SHORT,gx=c._emscripten_enum_PHY_ScalarType_PHY_UCHAR=d._emscripten_enum_PHY_ScalarType_PHY_UCHAR,hx=c._emscripten_enum_btConstraintParams_BT_CONSTRAINT_CFM=d._emscripten_enum_btConstraintParams_BT_CONSTRAINT_CFM,ix=c._emscripten_enum_btConstraintParams_BT_CONSTRAINT_ERP=d._emscripten_enum_btConstraintParams_BT_CONSTRAINT_ERP,jx=c._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_CFM=d._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_CFM,kx=c._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_ERP= +d._emscripten_enum_btConstraintParams_BT_CONSTRAINT_STOP_ERP;c._free=d._free;c._i64Add=d._i64Add;c._i64Subtract=d._i64Subtract;c._llvm_bswap_i16=d._llvm_bswap_i16;c._llvm_bswap_i32=d._llvm_bswap_i32;var eb=c._malloc=d._malloc;c._memcpy=d._memcpy;c._memmove=d._memmove;c._memset=d._memset;c._sbrk=d._sbrk;c.establishStackSpace=d.establishStackSpace;c.getTempRet0=d.getTempRet0;c.runPostSets=d.runPostSets;var db=c.setTempRet0=d.setTempRet0;c.setThrew=d.setThrew;c.stackAlloc=d.stackAlloc; +c.stackRestore=d.stackRestore;c.stackSave=d.stackSave;c.dynCall_di=d.dynCall_di;c.dynCall_did=d.dynCall_did;c.dynCall_diidii=d.dynCall_diidii;c.dynCall_diii=d.dynCall_diii;c.dynCall_diiidii=d.dynCall_diiidii;c.dynCall_diiii=d.dynCall_diiii;c.dynCall_diiiii=d.dynCall_diiiii;c.dynCall_diiiiiiii=d.dynCall_diiiiiiii;c.dynCall_diiiiiiiii=d.dynCall_diiiiiiiii;c.dynCall_diiiiiiiiii=d.dynCall_diiiiiiiiii;c.dynCall_ii=d.dynCall_ii;c.dynCall_iidid=d.dynCall_iidid;c.dynCall_iii=d.dynCall_iii; +c.dynCall_iiid=d.dynCall_iiid;c.dynCall_iiii=d.dynCall_iiii;c.dynCall_iiiii=d.dynCall_iiiii;c.dynCall_iiiiiii=d.dynCall_iiiiiii;c.dynCall_iiiiiiiiii=d.dynCall_iiiiiiiiii;c.dynCall_iiiiiiiiiii=d.dynCall_iiiiiiiiiii;c.dynCall_v=d.dynCall_v;c.dynCall_vi=d.dynCall_vi;c.dynCall_vid=d.dynCall_vid;c.dynCall_vidd=d.dynCall_vidd;c.dynCall_viddiii=d.dynCall_viddiii;c.dynCall_vidi=d.dynCall_vidi;c.dynCall_vidii=d.dynCall_vidii;c.dynCall_vii=d.dynCall_vii;c.dynCall_viid=d.dynCall_viid;c.dynCall_viidi=d.dynCall_viidi; +c.dynCall_viidii=d.dynCall_viidii;c.dynCall_viii=d.dynCall_viii;c.dynCall_viiid=d.dynCall_viiid;c.dynCall_viiidii=d.dynCall_viiidii;c.dynCall_viiii=d.dynCall_viiii;c.dynCall_viiiid=d.dynCall_viiiid;c.dynCall_viiiidddddidi=d.dynCall_viiiidddddidi;c.dynCall_viiiiddddiid=d.dynCall_viiiiddddiid;c.dynCall_viiiii=d.dynCall_viiiii;c.dynCall_viiiiid=d.dynCall_viiiiid;c.dynCall_viiiiii=d.dynCall_viiiiii;c.dynCall_viiiiiii=d.dynCall_viiiiiii;c.dynCall_viiiiiiiii=d.dynCall_viiiiiiiii;c.dynCall_viiiiiiiiii=d.dynCall_viiiiiiiiii; +c.asm=d; +if(Ua)if((String.prototype.startsWith?Ua.startsWith(Va):0===Ua.indexOf(Va))||("function"===typeof c.locateFile?Ua=c.locateFile(Ua):c.memoryInitializerPrefixURL&&(Ua=c.memoryInitializerPrefixURL+Ua)),ea||fa){var lx=c.readBinary(Ua);va.set(lx,8)}else{var nx=function(){c.readAsync(Ua,mx,function(){throw"could not load memory initializer "+Ua;})};Ra++;c.monitorRunDependencies&&c.monitorRunDependencies(Ra);var mx=function(a){a.byteLength&&(a=new Uint8Array(a));va.set(a,8);c.memoryInitializerRequest&&delete c.memoryInitializerRequest.response; +Ra--;c.monitorRunDependencies&&c.monitorRunDependencies(Ra);0==Ra&&(null!==Sa&&(clearInterval(Sa),Sa=null),Ta&&(a=Ta,Ta=null,a()))},ox=ja(Ua);if(ox)mx(ox.buffer);else if(c.memoryInitializerRequest){var px=function(){var a=c.memoryInitializerRequest,b=a.response;if(200!==a.status&&0!==a.status)if(b=ja(c.memoryInitializerRequestURL))b=b.buffer;else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+a.status+", retrying "+Ua);nx();return}mx(b)};c.memoryInitializerRequest.response? +setTimeout(px,0):c.memoryInitializerRequest.addEventListener("load",px)}else nx()}c.then=function(a){if(c.calledRun)a(c);else{var b=c.onRuntimeInitialized;c.onRuntimeInitialized=function(){b&&b();a(c)}}return c};function ka(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}ka.prototype=Error();ka.prototype.constructor=ka;var qx=null;Ta=function rx(){c.calledRun||sx();c.calledRun||(Ta=rx)}; +function sx(){function a(){if(!c.calledRun&&(c.calledRun=!0,!ra)){Oa||(Oa=!0,Ia(Ka));Ia(La);if(c.onRuntimeInitialized)c.onRuntimeInitialized();if(c.postRun)for("function"==typeof c.postRun&&(c.postRun=[c.postRun]);c.postRun.length;){var a=c.postRun.shift();Na.unshift(a)}Ia(Na)}}null===qx&&(qx=Date.now());if(!(0=ux?(assert(0>=1;break;case 4:e>>=2;break;case 8:e>>=3}for(var f=0;f ('+ file.type + ') - '+ + file.size+ ' bytes, last modified: '+ file.lastModifiedDate + + ''; + document.getElementById('list').innerHTML += fileitem; + + var extension = file.name.split('.').pop(); + if ( extension === "gltf") + { + glbfilename=file.name.substr(file.name.lastIndexOf('/')+1,file.name.lastIndexOf('.')); + var reader = new FileReader(); + reader.readAsText(file); + reader.onload = function(event) { + gltf = JSON.parse(event.target.result); + checkRemaining(); + }; + } + else{ + var reader = new FileReader(); + reader.onload = (function(theFile) { + return function(e) { + fileblobs[theFile.name.toLowerCase()]=(e.target.result); + checkRemaining(); + }; + })(file); + reader.readAsArrayBuffer(file); + } + },function(error){ + console.log(error); + }); + } else if (item.isDirectory) { + var dirReader = item.createReader(); + dirReader.readEntries(function(entries) { + remainingfilestoprocess+=entries.length; + checkRemaining(); + for (var i=0; i' + }, + { + name: 'skeleton', + alias: 'S', + type: Boolean, + description: 'if this gltf file is a skeleton file' + }, + { + name: 'skin', + alias: 's', + type: Boolean, + defaultValue: true, + description: 'if this gltf file is a skin file' + }, + { + name: 'outputFilename', + alias: 'o', + type: String, + description: 'output filename' + } +]; +const options = commandLineArgs(optionDefinitions); + +if (options.help) { + const usage = commandLineUsage([ + { + header: 'glAvatar Pipeline', + content: 'Handful tool to modify glTF files with ones with glAvatar extensions' + }, + { + header: 'Options', + optionList: optionDefinitions + } + ]); + console.log(usage); +} else { + let gltf = JSON.parse(fs.readFileSync(options.gltf)); + + if (Array.isArray(gltf.extensionsUsed)) { + gltf.extensionsUsed.push('gl_avatar'); + } else { + gltf.extensionsUsed = ['gl_avatar']; + } + + + let outputFilename = options.outputFilename || 'output.gltf'; + + if (options.skeleton) { + + // console.log('skeleton'); + + gltf.extensionsUsed = gltf.extensionsUsed || {}; + gltf.extensionsUsed.push('gl_avatar'); + + gltf.extensions = gltf.extensions || {}; + // sort of hard coded + gltf.extensions.gl_avatar = { + type: 'skeleton', + skins: { + main: 0 + } + }; + + // add bodyidlut + + } else if (options.skin) { + // console.log('skin'); + + // gltf.extensionsUsed = gltf.extensionsUsed || {}; + // gltf.extensionsUsed.push('gl_avatar'); + + // root extensions + gltf.extensions = gltf.extensions || {}; + gltf.extensions.gl_avatar = { + visibility: [ + 0, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1 + ], + type: 'skin' + }; + + + // parse mesh and primitive, move JOINT and WEIGHT to extensions + for (let i = 0, leni = gltf.meshes.length; i < leni; i++) { + let mesh = gltf.meshes[i]; + for (let j = 0, lenj = mesh.primitives.length; j < lenj; j++) { + let primitive = mesh.primitives[j]; + if (primitive.attributes.JOINTS_0 !== undefined) { + if (!primitive.extensions) { + primitive.extensions = {}; + } + primitive.extensions.gl_avatar = { + 'attributes': { + 'JOINTS_0': primitive.attributes.JOINTS_0 + } + }; + + delete primitive.attributes.JOINTS_0; + + if (primitive.attributes.WEIGHTS_0 !== undefined) { + primitive.extensions.gl_avatar.attributes.WEIGHTS_0 = primitive.attributes.WEIGHTS_0; + delete primitive.attributes.WEIGHTS_0; + } + + if (primitive.attributes.JOINTS_1 !== undefined) { + primitive.extensions.gl_avatar.attributes.JOINTS_1 = primitive.attributes.JOINTS_1; + delete primitive.attributes.JOINTS_1; + } + + if (primitive.attributes.WEIGHTS_1 !== undefined) { + primitive.extensions.gl_avatar.attributes.WEIGHTS_1 = primitive.attributes.WEIGHTS_1; + delete primitive.attributes.WEIGHTS_1; + } + } + } + } + + + // parse nodes, move skin to extensions + // assume only one joint array (skeleton) + for (let i = 0, leni = gltf.nodes.length; i < leni; i++) { + let node = gltf.nodes[i]; + if (node.skin !== undefined) { + if (!node.extensions) { + node.extensions = {}; + } + node.extensions.gl_avatar = { + // 'skin': { + // 'name': 'main', //temp + // 'inverseBindMatrices': gltf.skins[node.skin].inverseBindMatrices + // } + 'skin': 0 //temp + } + + delete node.skin; + } + } + + + // put skin info in root extensions + var ls = gltf.extensions.gl_avatar.linkedSkeletons = gltf.skins; + // for (let i = 0, leni = ls.length; i < leni; i++) { + var i = 0; + ls[i].skeleton = 'main'; + // } + + // TODO: remove skin related nodes + delete gltf.skins; + + + // delete ls.joints; + + + fs.writeFileSync(outputFilename, JSON.stringify(gltf)); + } else { + console.error('A glTF file must either be a skeleton file or skin file.'); + } +} + + +// console.log(gltf); diff --git a/tools/gltf-avatar-merge.js b/tools/gltf-avatar-merge.js new file mode 100644 index 0000000000000000000000000000000000000000..ac6ecfe0962f2893f4c321b043b62bfca432440a --- /dev/null +++ b/tools/gltf-avatar-merge.js @@ -0,0 +1,409 @@ +const commandLineArgs = require('command-line-args'); +const commandLineUsage = require('command-line-usage'); +// const fs = require('fs'); +const fs = require('fs-extra'); +const path = require('path'); + +const PNG = require('pngjs').PNG; + +// node .\tools\gltf-avatar-merge.js -s .\models\gltf\saber-body-walk\saber-body-walk.gltf -a .\models\gltf\saber-maid-hair\saber-maid-hair.gltf .\models\gltf\saber-maid-dress\saber-maid-dress.gltf -f models/merge +// node .\tools\gltf-avatar-merge.js -s .\models\gltf\saber-body-mixamo-animations\saber-body-animations.gltf -a .\models\gltf\saber-maid-hair-mixamo\saber-maid-hair.gltf .\models\gltf\saber-dress-mixamo\saber-dress.gltf -f models/merge +// node .\tools\gltf-avatar-merge.js -s .\models\gltf\saber-stand-pose\saber-stand-pose.gltf -a .\models\gltf\saber-maid-hair-mixamo\saber-maid-hair.gltf .\models\gltf\saber-dress-mixamo\saber-dress.gltf -f models/merge + + +const optionDefinitions = [ + { + name: 'help', + alias: 'h', + type: Boolean, + description: 'Display this usage guide.' + }, + { + name: 'skeletonFilePath', + alias: 's', + type: String, + description: '/path/to/accessory-file/skeleton-gltf-file' + }, + { + name: 'accessoriesFilePath', + alias: 'a', + type: String, + multiple: true, + // defaultValue: true, + description: '/path/to/accessory-gltf-file [multiple]' + }, + { + name: 'outputFolder', + alias: 'f', + type: String, + defaultValue: './', + description: '/path/to/outputFolder' + }, + { + name: 'outputFilename', + alias: 'o', + type: String, + defaultValue: 'output.gltf', + description: 'output filename' + } +]; + +const options = commandLineArgs(optionDefinitions); + +if (options.help) { + const usage = commandLineUsage([ + { + header: 'glAvatar Merge test', + content: 'Merge skeleton and accessories gltf into one gltf file' + }, + { + header: 'Options', + optionList: optionDefinitions + } + ]); + console.log(usage); + return; +} + + +// // temp +// // TODO: cmd line arg +// var skeletonGltfPath = 'demo/models/saber-body-walk/'; +// var skeletonGltfFilename = 'saber-body-walk.gltf'; +// var accessoryGltfPath = 'demo/models/saber-maid-hair/'; +// var accessoryGltfFilename = 'saber-maid-hair.gltf'; +// var outputFilename = 'models/merged/output.gltf'; +// var skeleton = JSON.parse(fs.readFileSync(skeletonGltfPath + skeletonGltfFilename)); +// var accessory = JSON.parse(fs.readFileSync(accessoryGltfPath + accessoryGltfFilename)); + + +// preprocess +// TODO: all sanity checks should happen here + + +var skeletonGltfDir = path.dirname(options.skeletonFilePath); +var accessoryFilepaths = options.accessoriesFilePath; + +console.log('skeleton filename: ', options.skeletonFilePath); +console.log('skin filenames: '); +for (var i = 0, len = accessoryFilepaths.length; i < len; i++) { + console.log(accessoryFilepaths[i]); +} + + +var skeleton = JSON.parse(fs.readFileSync(options.skeletonFilePath)); +if(!skeleton.extensions) { + skeleton.extensions = {}; +} + +if (!skeleton.extensions.gl_avatar) { + skeleton.extensions.gl_avatar = {}; +} + + +if (!skeleton.extensions.gl_avatar.visibility) { + skeleton.extensions.gl_avatar.visibility = []; +} + + +var textureWithVisibility = null; +var bodyIdLUTTexture = null; + +var visiblityMaterial = null; + + +// bake visibility +// modify body texture, let its alpha = 0 +// look at alphaMode: Mask, alphaCutOff +// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#alpha-coverage + +function visibilityAndOperation(vi) { + if (skeleton.extensions.gl_avatar.visibility.length === 0) { + skeleton.extensions.gl_avatar.visibility = vi.slice(0); + return; + } + + var v = skeleton.extensions.gl_avatar.visibility; + var vl = v.length; + for (var i = 0, len = vi.length; i < len; i++) { + if (vl <= i) { + v[i] = vi[i]; + } else { + v[i] = v[i] && vi[i]; + } + } +} + + +/** + * + * @param {*} skeleton gltf json + * @param {*} skin gltf json + */ +function merge(skeleton, skin) { + var i, len, j, lenj; + + var linkedSkeletons = skin.extensions.gl_avatar.linkedSkeletons || []; + + + // buffers + var bufferBaseId = skeleton.buffers.length; + // for (i = 0, len = skin.buffers.length; i < len; i++) { + // skeleton.buffers.push(skin.buffers[i]); + // } + skeleton.buffers = skeleton.buffers.concat(skin.buffers); + + + // bufferViews + var bufferViewBaseId = skeleton.bufferViews.length; + for (i = 0, len = skin.bufferViews.length; i < len; i++) { + skeleton.bufferViews.push(skin.bufferViews[i]); + skeleton.bufferViews[i + bufferViewBaseId].buffer += bufferBaseId; + } + + // accessors + var accessorBaseId = skeleton.accessors.length; + for (i = 0, len = skin.accessors.length; i < len; i++) { + skeleton.accessors.push(skin.accessors[i]); + skeleton.accessors[i + accessorBaseId].bufferView += bufferViewBaseId; + } + + + // images + var imageBaseId = skeleton.images.length; + skeleton.images = skeleton.images.concat(skin.images); + + // samplers + var samplerBaseId = skeleton.samplers.length; + skeleton.samplers = skeleton.samplers.concat(skin.samplers); + + // textures + var textureBaseId = skeleton.textures.length; + skeleton.textures = skeleton.textures.concat(skin.textures); + for (i = 0, len = skin.textures.length; i < len; i++) { + var t = skeleton.textures[i + textureBaseId]; + if (t.sampler !== undefined) { + t.sampler += samplerBaseId; + } + if (t.source !== undefined) { + t.source += imageBaseId; + } + } + + // materials + var materialBaseId = skeleton.materials.length; + + // find texture with bodyIdLUT + for (i = 0, len = skeleton.materials.length; i < len; i++) { + var m = skeleton.materials[i]; + if (m.extensions && m.extensions.gl_avatar && m.extensions.gl_avatar.bodyIdLUT !== undefined) { + // m has pbr related texture + visiblityMaterial = m; + bodyIdLUTTexture = skeleton.textures[m.extensions.gl_avatar.bodyIdLUT]; + textureWithVisibility = skeleton.textures[m.pbrMetallicRoughness.baseColorTexture.index]; + } + } + + + for (i = 0, len = skin.materials.length; i < len; i++) { + skeleton.materials.push(skin.materials[i]); + var m = skeleton.materials[i + materialBaseId]; + if (m.pbrMetallicRoughness !== undefined) { + if (m.pbrMetallicRoughness.baseColorTexture !== undefined) { + var bt = m.pbrMetallicRoughness.baseColorTexture; + for (var tt in bt) { + bt[tt] += imageBaseId; + } + } + } + } + + + + // meshes + var meshBaseId = skeleton.meshes.length; + for (i = 0, len = skin.meshes.length; i < len; i++) { + skeleton.meshes.push(skin.meshes[i]); + var m = skeleton.meshes[i + meshBaseId]; + if (m.primitives !== undefined) { + + for (j = 0, lenj = m.primitives.length; j < lenj; j++) { + var p = m.primitives[j]; + + if (p.indices !== undefined) { + p.indices += accessorBaseId; + } + + if (p.material !== undefined) { + p.material += materialBaseId; + } + + if (p.attributes !== undefined) { + var a = p.attributes; + for (var att in a) { + a[att] += accessorBaseId; + } + } + + if (p.extensions !== undefined) { + if (p.extensions.gl_avatar.attributes) { + var ea = p.extensions.gl_avatar.attributes; + if (!p.attributes) { + p.attributes = {}; + } + for (var att2 in ea) { + p.attributes[att2] = ea[att2] + accessorBaseId; + } + } + + delete p.extensions; + } + } + + } + } + + // nodes + var nodeBaseId = skeleton.nodes.length; + // var numLinkedSkin = 0; + for (i = 0, len = skin.nodes.length; i < len; i++) { + skeleton.nodes.push(skin.nodes[i]); + var n = skeleton.nodes[i + nodeBaseId]; + if (n.children !== undefined) { + var c = n.children; + for (j = 0, lenj = c.length; j < lenj; j++) { + c[j] += nodeBaseId; + } + } + + if (n.mesh !== undefined) { + n.mesh += meshBaseId; + } + + // skins link + if (n.extensions) { + // create a new skin copy of skin linked + // replace inverseBindMatrices + if (n.extensions.gl_avatar && n.extensions.gl_avatar.skin !== undefined) { + // linked skin + // assume linkedSkeletons exists + var linkedSkinInfo = linkedSkeletons[n.extensions.gl_avatar.skin]; + var skinKey = linkedSkinInfo.skeleton; + var newSkin = Object.assign({}, skeleton.skins[skeleton.extensions.gl_avatar.skins[skinKey]]); + skeleton.skins.push(newSkin); + // numLinkedSkin++; + n.skin = skeleton.skins.length - 1; + newSkin.inverseBindMatrices = linkedSkinInfo.inverseBindMatrices + accessorBaseId; + } + + delete n.extensions; + } + + } + + // scenes (assume only one scene) + var sceneNodeBaseId = skeleton.scenes[0].nodes.length; + skeleton.scenes[0].nodes = skeleton.scenes[0].nodes.concat(skin.scenes[0].nodes); + for (i = 0, len = skin.scenes[0].nodes.length; i < len; i++) { + skeleton.scenes[0].nodes[i + sceneNodeBaseId] += nodeBaseId; + } + + + // TODO: animations, cameras... + + + // extensions: visibility array + visibilityAndOperation(skin.extensions.gl_avatar.visibility); + +} + + +function ensureDirectoryExistence(filePath) { + var dirname = path.dirname(filePath); + if (fs.existsSync(dirname)) { + return true; + } + ensureDirectoryExistence(dirname); + fs.mkdirSync(dirname); +} + +function copyAssets(inputFolder, outputFolder) { + // TODO: copy recursively using ncp + + var assets = fs.readdirSync(inputFolder); + for (var i = 0, len = assets.length; i < len; i++) { + if (path.extname(assets[i]) !== '.gltf') { + fs.copySync( path.join(inputFolder, assets[i]), path.join(outputFolder, assets[i]) ); + } + } +} + + + +function bakeVisibility(texPath, bodyIdLUTPath, visibilty) { + console.log('Texture with visibility path: ', texPath); + console.log('body Id LUT texture path: ', bodyIdLUTPath); + + visiblityMaterial.alphaMode = "MASK"; + visiblityMaterial.alphaCutOff = 0.5; + + fs.createReadStream(texPath) + .pipe(new PNG({filterType: 4})) + .on('parsed', function() { + + var tex = this; + + fs.createReadStream(bodyIdLUTPath) + .pipe(new PNG({filterType: 0})) + .on('parsed', function() { + var lut = this; + + // temp assume same size + for (var y = 0; y < this.height; y++) { + for (var x = 0; x < this.width; x++) { + var idx = (this.width * y + x) << 2; + + var bodyId = lut.data[idx]; + + if (visibilty[bodyId] === 0) { + tex.data[idx + 3] = 0; + } + } + } + + + + tex.pack().pipe(fs.createWriteStream(texPath)); + + }); + + + + }); +} + + + + + + +var outputFilename = path.join(options.outputFolder, options.outputFilename); +ensureDirectoryExistence(outputFilename); + +copyAssets(skeletonGltfDir, options.outputFolder); +for (var i = 0, len = accessoryFilepaths.length; i < len; i++) { + merge(skeleton, JSON.parse(fs.readFileSync(accessoryFilepaths[i]))); + + copyAssets( path.dirname(accessoryFilepaths[i]), options.outputFolder ); +} + + +// modify body texture to reflect visibility +if (textureWithVisibility && bodyIdLUTTexture){ + var textureWithVisibilityPath = path.join(options.outputFolder, skeleton.images[textureWithVisibility.source].uri); + var textureBodyIdLUTPath = path.join(options.outputFolder, skeleton.images[bodyIdLUTTexture.source].uri); + bakeVisibility(textureWithVisibilityPath, textureBodyIdLUTPath, skeleton.extensions.gl_avatar.visibility); +} + +// TODO: delete gltf extensions +fs.writeFileSync(outputFilename, JSON.stringify(skeleton)); \ No newline at end of file diff --git a/webpack-viewer.config.js b/webpack-viewer.config.js new file mode 100644 index 0000000000000000000000000000000000000000..e8e101e8ab4af687c825aefb757b54b34512c5cd --- /dev/null +++ b/webpack-viewer.config.js @@ -0,0 +1,59 @@ +var path = require('path'); +var webpack = require('webpack'); +var HtmlWebpackPlugin = require('html-webpack-plugin'); +// const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); + +module.exports = { + entry: { + // app: './index.js' + app: './src/GLTFAvatarViewer.js' + }, +// resolve: { +// alias: { +// // Lib: path.resolve(__dirname, 'demo/lib/'), +// // Shaders: path.resolve(__dirname, 'demo/lib/src/shaders') +// } +// }, + output: { + filename: 'AvatarViewer.js', + library: 'AvatarViewer', + // libraryTarget: 'umd', + libraryTarget: 'var', + // path: path.resolve(__dirname, 'build') + path: path.resolve(__dirname, 'build-viewer') + }, + module: { + rules: [ + // { + // test: /\.css$/, + // use: [ + // 'style-loader', + // 'css-loader' + // ] + // } + // { + // test: /\.(png|jpg|gif)$/, + // use: [ + // 'file-loader' + // ] + // }, + // { + // test: /\.(glsl|vs|fs)$/, + // use: [ + // 'shader-loader' + // ] + // } + ] + }, + plugins: [ + // new HtmlWebpackPlugin({ + // title: "gl-avatar-three-js", + // template: "html/test-template.html" + // }) + ], + devServer: { + // contentBase: path.join(__dirname, "demo"), + contentBase: __dirname, + port: 7000 + } +}; \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 0000000000000000000000000000000000000000..d40266db85d86d34c693513204754e8181c82c75 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,56 @@ +var path = require('path'); +var webpack = require('webpack'); +var HtmlWebpackPlugin = require('html-webpack-plugin'); +// const UglifyJSPlugin = require('uglifyjs-webpack-plugin'); + +module.exports = { + entry: { + // app: './index.js' + app: './src/app.js' + }, + resolve: { + alias: { + // Lib: path.resolve(__dirname, 'demo/lib/'), + // Shaders: path.resolve(__dirname, 'demo/lib/src/shaders') + } + }, + output: { + filename: '[name].js', + // path: path.resolve(__dirname, 'build') + path: path.resolve(__dirname, '.') + }, + module: { + rules: [ + { + test: /\.css$/, + use: [ + 'style-loader', + 'css-loader' + ] + } + // { + // test: /\.(png|jpg|gif)$/, + // use: [ + // 'file-loader' + // ] + // }, + // { + // test: /\.(glsl|vs|fs)$/, + // use: [ + // 'shader-loader' + // ] + // } + ] + }, + plugins: [ + new HtmlWebpackPlugin({ + title: "gl-avatar-three-js", + template: "html/test-template.html" + }) + ], + devServer: { + // contentBase: path.join(__dirname, "demo"), + contentBase: __dirname, + port: 7000 + } +}; \ No newline at end of file