@ifiwas/standard-view 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +67 -0
- package/.prettierrc +12 -0
- package/CHANGELOG.md +42 -0
- package/LICENSE +8 -0
- package/README.md +199 -0
- package/debug-storybook.log +179 -0
- package/declarations.d.ts +17 -0
- package/dist/standard-view.es.js +9522 -0
- package/dist/standard-view.es.js.map +1 -0
- package/dist/standard-view.umd.js +41 -0
- package/dist/standard-view.umd.js.map +1 -0
- package/fonts/gentilis.bold.typeface.json +1 -0
- package/fonts/gentilis.typeface.json +1 -0
- package/fonts/helvetiker.bold.typeface.json +1 -0
- package/fonts/helvetiker.typeface.json +1 -0
- package/fonts/optimer.bold.typeface.json +1 -0
- package/fonts/optimer.typeface.json +1 -0
- package/images.d.ts +7 -0
- package/index.js +10 -0
- package/lib/controls/OrbitControls.d.ts +9 -0
- package/lib/controls/OrbitControls.js +761 -0
- package/lib/controls/index.d.ts +1 -0
- package/lib/controls/index.js +18 -0
- package/lib/groups/Arrow.d.ts +19 -0
- package/lib/groups/Arrow.js +134 -0
- package/lib/groups/Axis.d.ts +20 -0
- package/lib/groups/Axis.js +147 -0
- package/lib/groups/BoundingBox.d.ts +9 -0
- package/lib/groups/BoundingBox.js +143 -0
- package/lib/groups/Camera.d.ts +32 -0
- package/lib/groups/Camera.js +477 -0
- package/lib/groups/Capsule.d.ts +9 -0
- package/lib/groups/Capsule.js +112 -0
- package/lib/groups/FBX.d.ts +9 -0
- package/lib/groups/FBX.js +213 -0
- package/lib/groups/GLTF.d.ts +9 -0
- package/lib/groups/GLTF.js +198 -0
- package/lib/groups/Group.d.ts +63 -0
- package/lib/groups/Group.js +426 -0
- package/lib/groups/OBJ.d.ts +11 -0
- package/lib/groups/OBJ.js +252 -0
- package/lib/groups/PCD.d.ts +9 -0
- package/lib/groups/PCD.js +82 -0
- package/lib/groups/Path.d.ts +19 -0
- package/lib/groups/Path.js +160 -0
- package/lib/groups/index.d.ts +11 -0
- package/lib/groups/index.js +91 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +298 -0
- package/lib/lights/AmbientLight.d.ts +8 -0
- package/lib/lights/AmbientLight.js +37 -0
- package/lib/lights/DirectionalLight.d.ts +8 -0
- package/lib/lights/DirectionalLight.js +43 -0
- package/lib/lights/HemisphereLight.d.ts +13 -0
- package/lib/lights/HemisphereLight.js +108 -0
- package/lib/lights/LightWithShadows.d.ts +24 -0
- package/lib/lights/LightWithShadows.js +188 -0
- package/lib/lights/PointLight.d.ts +9 -0
- package/lib/lights/PointLight.js +47 -0
- package/lib/lights/RectAreaLight.d.ts +13 -0
- package/lib/lights/RectAreaLight.js +177 -0
- package/lib/lights/SpotLight.d.ts +10 -0
- package/lib/lights/SpotLight.js +49 -0
- package/lib/lights/index.d.ts +6 -0
- package/lib/lights/index.js +48 -0
- package/lib/primitives/Box.d.ts +6 -0
- package/lib/primitives/Box.js +43 -0
- package/lib/primitives/Circle.d.ts +10 -0
- package/lib/primitives/Circle.js +85 -0
- package/lib/primitives/Cylinder.d.ts +15 -0
- package/lib/primitives/Cylinder.js +180 -0
- package/lib/primitives/Label.d.ts +18 -0
- package/lib/primitives/Label.js +189 -0
- package/lib/primitives/Line.d.ts +19 -0
- package/lib/primitives/Line.js +173 -0
- package/lib/primitives/Mesh.d.ts +72 -0
- package/lib/primitives/Mesh.js +642 -0
- package/lib/primitives/Plane.d.ts +7 -0
- package/lib/primitives/Plane.js +47 -0
- package/lib/primitives/Polygon.d.ts +8 -0
- package/lib/primitives/Polygon.js +75 -0
- package/lib/primitives/Quad.d.ts +9 -0
- package/lib/primitives/Quad.js +110 -0
- package/lib/primitives/Sphere.d.ts +14 -0
- package/lib/primitives/Sphere.js +92 -0
- package/lib/primitives/Text.d.ts +20 -0
- package/lib/primitives/Text.js +285 -0
- package/lib/primitives/Triangle.d.ts +8 -0
- package/lib/primitives/Triangle.js +83 -0
- package/lib/primitives/index.d.ts +12 -0
- package/lib/primitives/index.js +90 -0
- package/lib/shaders/index.d.ts +0 -0
- package/lib/shaders/index.js +2 -0
- package/lib/types/three-jsx.d.js +5 -0
- package/lib/utils/constants.js +181 -0
- package/lib/utils/events.d.ts +22 -0
- package/lib/utils/events.js +98 -0
- package/lib/utils/hooks.d.ts +8 -0
- package/lib/utils/hooks.js +96 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +110 -0
- package/lib/utils/interfaces.d.ts +9 -0
- package/lib/utils/interfaces.js +5 -0
- package/lib/utils/math.d.ts +12 -0
- package/lib/utils/math.js +31 -0
- package/lib/utils/performance.d.ts +7 -0
- package/lib/utils/performance.js +114 -0
- package/lib/utils/styles.js +10 -0
- package/lib/utils/util.d.ts +76 -0
- package/lib/utils/util.js +290 -0
- package/lib/views/ContextBridge.d.ts +23 -0
- package/lib/views/ContextBridge.js +98 -0
- package/lib/views/SceneCamera.d.ts +7 -0
- package/lib/views/SceneCamera.js +52 -0
- package/lib/views/SetBackground.d.ts +9 -0
- package/lib/views/SetBackground.js +90 -0
- package/lib/views/SetControls.d.ts +19 -0
- package/lib/views/SetControls.js +173 -0
- package/lib/views/SetRenderer.d.ts +25 -0
- package/lib/views/SetRenderer.js +66 -0
- package/lib/views/SetShadows.d.ts +7 -0
- package/lib/views/SetShadows.js +48 -0
- package/lib/views/View3D.d.ts +21 -0
- package/lib/views/View3D.js +289 -0
- package/lib/views/ViewContext.d.ts +23 -0
- package/lib/views/ViewContext.js +55 -0
- package/lib/views/index.d.ts +2 -0
- package/lib/views/index.js +20 -0
- package/netlify.toml +15 -0
- package/package.json +110 -0
- package/tsconfig.json +42 -0
- package/tsconfig.prod.json +3 -0
- package/tsconfig.test.json +6 -0
- package/vite.config.ts +37 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-view.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/views/ViewContext.tsx","../src/utils/hooks.tsx","../src/views/SetRenderer.tsx","../node_modules/three/examples/jsm/loaders/RGBELoader.js","../src/utils/constants.js","../node_modules/stats.js/build/stats.min.js","../node_modules/@react-three/drei/helpers/useEffectfulState.js","../node_modules/@react-three/drei/core/Stats.js","../src/utils/util.tsx","../src/views/SetBackground.tsx","../node_modules/three/examples/jsm/lights/RectAreaLightTexturesLib.js","../node_modules/three/examples/jsm/lights/RectAreaLightUniformsLib.js","../src/views/SetShadows.tsx","../node_modules/three/examples/jsm/controls/TrackballControls.js","../node_modules/three/examples/jsm/controls/OrbitControls.js","../node_modules/three/examples/jsm/controls/MapControls.js","../src/utils/math.ts","../src/views/SetControls.tsx","../src/views/ContextBridge.tsx","../src/views/View3D.tsx","../src/utils/styles.js","../src/utils/events.tsx","../src/utils/performance.tsx","../src/primitives/Mesh.tsx","../src/primitives/Box.tsx","../src/primitives/Circle.tsx","../src/primitives/Cylinder.tsx","../src/primitives/Plane.tsx","../src/primitives/Label.tsx","../src/primitives/Line.tsx","../src/primitives/Triangle.tsx","../src/primitives/Quad.tsx","../src/primitives/Sphere.tsx","../node_modules/three/examples/jsm/geometries/TextGeometry.js","../node_modules/three/examples/jsm/loaders/FontLoader.js","../src/primitives/Text.tsx","../src/primitives/Polygon.tsx","../src/groups/Group.tsx","../src/groups/Axis.tsx","../src/groups/Arrow.tsx","../src/groups/Camera.tsx","../src/groups/BoundingBox.tsx","../src/groups/Capsule.tsx","../node_modules/three/examples/jsm/libs/fflate.module.js","../node_modules/three/examples/jsm/curves/NURBSUtils.js","../node_modules/three/examples/jsm/curves/NURBSCurve.js","../node_modules/three/examples/jsm/loaders/FBXLoader.js","../src/groups/FBX.tsx","../node_modules/three/examples/jsm/utils/BufferGeometryUtils.js","../node_modules/three/examples/jsm/loaders/GLTFLoader.js","../node_modules/three/examples/jsm/loaders/DRACOLoader.js","../src/groups/GLTF.tsx","../node_modules/three/examples/jsm/loaders/OBJLoader.js","../node_modules/three/examples/jsm/loaders/MTLLoader.js","../src/groups/OBJ.tsx","../src/groups/Path.tsx","../node_modules/three/examples/jsm/loaders/PCDLoader.js","../src/groups/PCD.tsx","../src/lights/AmbientLight.tsx","../src/lights/LightWithShadows.tsx","../src/lights/DirectionalLight.tsx","../src/lights/HemisphereLight.tsx","../src/lights/PointLight.tsx","../src/lights/RectAreaLight.tsx","../src/lights/SpotLight.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","// ViewContext.tsx\nimport * as React from \"react\";\n\nconst { useState, createContext, memo } = React;\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport const ViewContext: React.Context<any> = createContext([]);\n\ntype ViewContextProviderProps = {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n canvasProps: React.MutableRefObject<any>;\n children?: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n\n/**\n * ViewContextProvider\n *\n * Placing <ViewContext.Provider value={canvasProps.current}>\n * directly into the return statement of View3D does not wait for\n * canvasProps to be set by SetCanvasProps, and instead the\n * context value is set to null.\n *\n * Encapsulating <ViewContext.Provider> in a component delays the\n * creation of the provider, hence delays setting value until\n * after SetCanvasProps has been created.\n *\n * Cannot add ViewContext to contextListeners and apply in GenerateContexts\n * because canvasProps do not exist at that time.\n */\nexport const ViewContextProvider = memo(function ViewContextProvider({\n canvasProps,\n children\n}: ViewContextProviderProps) {\n const [viewContextValue, setViewContextValue] = useState(canvasProps.current);\n const value = {\n setViewContextValue,\n ...viewContextValue\n };\n return <ViewContext.Provider value={value}>{children}</ViewContext.Provider>;\n});\nViewContextProvider.displayName = \"ViewContextProvider\";\n","// hooks.ts\nimport {\n useState,\n useMemo,\n useCallback,\n useContext,\n useRef,\n useEffect\n} from \"react\";\nimport { useFrame as r3rUseFrame, RenderCallback } from \"@react-three/fiber\";\nimport { ViewContext } from \"../views/ViewContext\";\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function useToggle(initialValue: any, alternate?: any): [any, Function] {\n const [value, setValue] = useState(initialValue);\n const alternateValue = useMemo(\n function initAlternateValue() {\n return alternate != null ? alternate : !initialValue;\n },\n [alternate, initialValue]\n );\n\n function toggleValue(): void {\n const newValue = value === initialValue ? alternateValue : initialValue;\n setValue(newValue);\n }\n\n return [value, toggleValue];\n}\n\nexport function useFrame(\n f: RenderCallback,\n priority = 2,\n override = false\n): void {\n let p = priority;\n if (!override) {\n p = p >= 2 ? p : 2;\n }\n r3rUseFrame(f, p);\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function useViewContext(): any {\n const { setViewContextValue, ...canvasProps } = useContext(ViewContext);\n\n const setViewContext = useCallback(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n function updateSetViewContext(props: any): void {\n Object.entries(props).map(([key, value]) => {\n // Replace Existing Key-Value or Add New Key-Value\n canvasProps[key] = value;\n return null;\n });\n\n setViewContextValue(canvasProps);\n },\n [setViewContextValue, canvasProps]\n );\n\n return { setViewContext, ...canvasProps };\n}\n\n/**\n * useAnimationFrame\n */\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport const useAnimationFrame = (callback, dependencies?: any[]): void => {\n // Use useRef for mutable variables that we want to persist\n // without triggering a re-render on their change\n const requestRef = useRef<number | undefined>(undefined);\n\n function animate(): void {\n callback();\n requestRef.current = requestAnimationFrame(animate);\n }\n\n useEffect(() => {\n animate();\n return (): void => {\n if (requestRef.current != null) {\n cancelAnimationFrame(requestRef.current);\n }\n };\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, dependencies); // Make sure the effect runs only once\n};\n","// SetRenderer.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { useFrame, useViewContext } from '../utils/hooks';\n\nconst { useEffect, memo } = React;\n\ninterface GLProps {\n autoClear?: boolean;\n autoClearColor?: boolean;\n autoClearDepth?: boolean;\n autoClearStencil?: boolean;\n clippingPlanes?: Array<THREE.Plane>;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n domElement?: React.DOMElement<any, any>;\n gammaFactor?: number;\n outputEncoding?: number;\n localClippingEnabled?: boolean;\n maxMorphTargets?: number;\n maxMorphNormals?: number;\n physicallyCorrectLights?: boolean;\n sortObjects?: boolean;\n toneMapping?: number;\n toneMappingExposure?: number;\n toneMappingWhitePoint?: number;\n antialias?: boolean;\n preserveDrawingBuffer?: boolean;\n}\n\nfunction SetRenderer(glProps: GLProps): null {\n const { gl } = useViewContext();\n\n useEffect(\n function initRenderer() {\n gl.autoClear = false;\n gl.autoClearColor = false;\n gl.autoClearDepth = false;\n gl.autoClearStencil = false;\n\n Object.entries(glProps).map(([key, value]) => {\n gl[key] = value;\n return null;\n });\n },\n [glProps, gl]\n );\n\n // Render Loop Head\n useFrame(\n /* eslint-disable no-shadow */\n function renderLoopHead({ gl, scene }) {\n /* eslint-enable no-shadow */\n /* eslint-disable no-param-reassign */\n scene.overrideMaterial = null;\n // @ts-ignore:TS2339 cancelTailRender does not exist\n scene.cancelTailRender = false;\n gl.clear();\n gl.clippingPlanes = [];\n /* eslint-enable no-param-reassign */\n },\n 1,\n true\n );\n\n // Render Loop Tail\n useFrame(\n /* eslint-disable-next-line no-shadow */\n function renderLoopTall({ gl, scene, camera }) {\n // @ts-ignore:TS2339 cancelTailRender does not exist\n if (!scene.cancelTailRender) {\n gl.render(scene, camera);\n }\n },\n 1000,\n true\n );\n\n return null;\n}\n\nconst SetRendererMemo = memo(SetRenderer);\nSetRendererMemo.displayName = 'SetRenderer';\nexport default SetRendererMemo;\n","import {\n\tDataTextureLoader,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tLinearSRGBColorSpace\n} from 'three';\n\n/**\n * A loader for the RGBE HDR texture format.\n *\n * ```js\n * const loader = new RGBELoader();\n * const envMap = await loader.loadAsync( 'textures/equirectangular/blouberg_sunrise_2_1k.hdr' );\n * envMap.mapping = THREE.EquirectangularReflectionMapping;\n *\n * scene.environment = envMap;\n * ```\n *\n * @augments DataTextureLoader\n * @three_import import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';\n */\nclass RGBELoader extends DataTextureLoader {\n\n\t/**\n\t * Constructs a new RGBE loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * The texture type.\n\t\t *\n\t\t * @type {(HalfFloatType|FloatType)}\n\t\t * @default HalfFloatType\n\t\t */\n\t\tthis.type = HalfFloatType;\n\n\t}\n\n\t/**\n\t * Parses the given RGBE texture data.\n\t *\n\t * @param {ArrayBuffer} buffer - The raw texture data.\n\t * @return {DataTextureLoader~TexData} An object representing the parsed texture data.\n\t */\n\tparse( buffer ) {\n\n\t\t// adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n\n\t\tconst\n\t\t\t/* default error routine. change this to change error handling */\n\t\t\trgbe_read_error = 1,\n\t\t\trgbe_write_error = 2,\n\t\t\trgbe_format_error = 3,\n\t\t\trgbe_memory_error = 4,\n\t\t\trgbe_error = function ( rgbe_error_code, msg ) {\n\n\t\t\t\tswitch ( rgbe_error_code ) {\n\n\t\t\t\t\tcase rgbe_read_error: throw new Error( 'THREE.RGBELoader: Read Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_write_error: throw new Error( 'THREE.RGBELoader: Write Error: ' + ( msg || '' ) );\n\t\t\t\t\tcase rgbe_format_error: throw new Error( 'THREE.RGBELoader: Bad File Format: ' + ( msg || '' ) );\n\t\t\t\t\tdefault:\n\t\t\t\t\tcase rgbe_memory_error: throw new Error( 'THREE.RGBELoader: Memory Error: ' + ( msg || '' ) );\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\t/* offsets to red, green, and blue components in a data (float) pixel */\n\t\t\t//RGBE_DATA_RED = 0,\n\t\t\t//RGBE_DATA_GREEN = 1,\n\t\t\t//RGBE_DATA_BLUE = 2,\n\n\t\t\t/* number of floats per pixel, use 4 since stored in rgba image format */\n\t\t\t//RGBE_DATA_SIZE = 4,\n\n\t\t\t/* flags indicating which fields in an rgbe_header_info are valid */\n\t\t\tRGBE_VALID_PROGRAMTYPE = 1,\n\t\t\tRGBE_VALID_FORMAT = 2,\n\t\t\tRGBE_VALID_DIMENSIONS = 4,\n\n\t\t\tNEWLINE = '\\n',\n\n\t\t\tfgets = function ( buffer, lineLimit, consume ) {\n\n\t\t\t\tconst chunkSize = 128;\n\n\t\t\t\tlineLimit = ! lineLimit ? 1024 : lineLimit;\n\t\t\t\tlet p = buffer.pos,\n\t\t\t\t\ti = - 1, len = 0, s = '',\n\t\t\t\t\tchunk = String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\twhile ( ( 0 > ( i = chunk.indexOf( NEWLINE ) ) ) && ( len < lineLimit ) && ( p < buffer.byteLength ) ) {\n\n\t\t\t\t\ts += chunk; len += chunk.length;\n\t\t\t\t\tp += chunkSize;\n\t\t\t\t\tchunk += String.fromCharCode.apply( null, new Uint16Array( buffer.subarray( p, p + chunkSize ) ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( - 1 < i ) {\n\n\t\t\t\t\t/*for (i=l-1; i>=0; i--) {\n\t\t\t\t\t\tbyteCode = m.charCodeAt(i);\n\t\t\t\t\t\tif (byteCode > 0x7f && byteCode <= 0x7ff) byteLen++;\n\t\t\t\t\t\telse if (byteCode > 0x7ff && byteCode <= 0xffff) byteLen += 2;\n\t\t\t\t\t\tif (byteCode >= 0xDC00 && byteCode <= 0xDFFF) i--; //trail surrogate\n\t\t\t\t\t}*/\n\t\t\t\t\tif ( false !== consume ) buffer.pos += len + i + 1;\n\t\t\t\t\treturn s + chunk.slice( 0, i );\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\t/* minimal header reading. modify if you want to parse more information */\n\t\t\tRGBE_ReadHeader = function ( buffer ) {\n\n\n\t\t\t\t// regexes to parse header info fields\n\t\t\t\tconst magic_token_re = /^#\\?(\\S+)/,\n\t\t\t\t\tgamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\texposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/,\n\t\t\t\t\tformat_re = /^\\s*FORMAT=(\\S+)\\s*$/,\n\t\t\t\t\tdimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/,\n\n\t\t\t\t\t// RGBE format header struct\n\t\t\t\t\theader = {\n\n\t\t\t\t\t\tvalid: 0, /* indicate which fields are valid */\n\n\t\t\t\t\t\tstring: '', /* the actual header string */\n\n\t\t\t\t\t\tcomments: '', /* comments found in header */\n\n\t\t\t\t\t\tprogramtype: 'RGBE', /* listed at beginning of file to identify it after \"#?\". defaults to \"RGBE\" */\n\n\t\t\t\t\t\tformat: '', /* RGBE format, default 32-bit_rle_rgbe */\n\n\t\t\t\t\t\tgamma: 1.0, /* image has already been gamma corrected with given gamma. defaults to 1.0 (no correction) */\n\n\t\t\t\t\t\texposure: 1.0, /* a value of 1.0 in an image corresponds to <exposure> watts/steradian/m^2. defaults to 1.0 */\n\n\t\t\t\t\t\twidth: 0, height: 0 /* image dimensions, width/height */\n\n\t\t\t\t\t};\n\n\t\t\t\tlet line, match;\n\n\t\t\t\tif ( buffer.pos >= buffer.byteLength || ! ( line = fgets( buffer ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_read_error, 'no header found' );\n\n\t\t\t\t}\n\n\t\t\t\t/* if you want to require the magic token then uncomment the next line */\n\t\t\t\tif ( ! ( match = line.match( magic_token_re ) ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'bad initial token' );\n\n\t\t\t\t}\n\n\t\t\t\theader.valid |= RGBE_VALID_PROGRAMTYPE;\n\t\t\t\theader.programtype = match[ 1 ];\n\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\twhile ( true ) {\n\n\t\t\t\t\tline = fgets( buffer );\n\t\t\t\t\tif ( false === line ) break;\n\t\t\t\t\theader.string += line + '\\n';\n\n\t\t\t\t\tif ( '#' === line.charAt( 0 ) ) {\n\n\t\t\t\t\t\theader.comments += line + '\\n';\n\t\t\t\t\t\tcontinue; // comment line\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( gamma_re ) ) {\n\n\t\t\t\t\t\theader.gamma = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( exposure_re ) ) {\n\n\t\t\t\t\t\theader.exposure = parseFloat( match[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( format_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_FORMAT;\n\t\t\t\t\t\theader.format = match[ 1 ];//'32-bit_rle_rgbe';\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( match = line.match( dimensions_re ) ) {\n\n\t\t\t\t\t\theader.valid |= RGBE_VALID_DIMENSIONS;\n\t\t\t\t\t\theader.height = parseInt( match[ 1 ], 10 );\n\t\t\t\t\t\theader.width = parseInt( match[ 2 ], 10 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( header.valid & RGBE_VALID_FORMAT ) && ( header.valid & RGBE_VALID_DIMENSIONS ) ) break;\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_FORMAT ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing format specifier' );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! ( header.valid & RGBE_VALID_DIMENSIONS ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'missing image size specifier' );\n\n\t\t\t\t}\n\n\t\t\t\treturn header;\n\n\t\t\t},\n\n\t\t\tRGBE_ReadPixels_RLE = function ( buffer, w, h ) {\n\n\t\t\t\tconst scanline_width = w;\n\n\t\t\t\tif (\n\t\t\t\t\t// run length encoding is not allowed so read flat\n\t\t\t\t\t( ( scanline_width < 8 ) || ( scanline_width > 0x7fff ) ) ||\n\t\t\t\t\t// this file is not run length encoded\n\t\t\t\t\t( ( 2 !== buffer[ 0 ] ) || ( 2 !== buffer[ 1 ] ) || ( buffer[ 2 ] & 0x80 ) )\n\t\t\t\t) {\n\n\t\t\t\t\t// return the flat buffer\n\t\t\t\t\treturn new Uint8Array( buffer );\n\n\t\t\t\t}\n\n\t\t\t\tif ( scanline_width !== ( ( buffer[ 2 ] << 8 ) | buffer[ 3 ] ) ) {\n\n\t\t\t\t\trgbe_error( rgbe_format_error, 'wrong scanline width' );\n\n\t\t\t\t}\n\n\t\t\t\tconst data_rgba = new Uint8Array( 4 * w * h );\n\n\t\t\t\tif ( ! data_rgba.length ) {\n\n\t\t\t\t\trgbe_error( rgbe_memory_error, 'unable to allocate buffer space' );\n\n\t\t\t\t}\n\n\t\t\t\tlet offset = 0, pos = 0;\n\n\t\t\t\tconst ptr_end = 4 * scanline_width;\n\t\t\t\tconst rgbeStart = new Uint8Array( 4 );\n\t\t\t\tconst scanline_buffer = new Uint8Array( ptr_end );\n\t\t\t\tlet num_scanlines = h;\n\n\t\t\t\t// read in each successive scanline\n\t\t\t\twhile ( ( num_scanlines > 0 ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\tif ( pos + 4 > buffer.byteLength ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_read_error );\n\n\t\t\t\t\t}\n\n\t\t\t\t\trgbeStart[ 0 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 1 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 2 ] = buffer[ pos ++ ];\n\t\t\t\t\trgbeStart[ 3 ] = buffer[ pos ++ ];\n\n\t\t\t\t\tif ( ( 2 != rgbeStart[ 0 ] ) || ( 2 != rgbeStart[ 1 ] ) || ( ( ( rgbeStart[ 2 ] << 8 ) | rgbeStart[ 3 ] ) != scanline_width ) ) {\n\n\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad rgbe scanline format' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// read each of the four channels for the scanline into the buffer\n\t\t\t\t\t// first red, then green, then blue, then exponent\n\t\t\t\t\tlet ptr = 0, count;\n\n\t\t\t\t\twhile ( ( ptr < ptr_end ) && ( pos < buffer.byteLength ) ) {\n\n\t\t\t\t\t\tcount = buffer[ pos ++ ];\n\t\t\t\t\t\tconst isEncodedRun = count > 128;\n\t\t\t\t\t\tif ( isEncodedRun ) count -= 128;\n\n\t\t\t\t\t\tif ( ( 0 === count ) || ( ptr + count > ptr_end ) ) {\n\n\t\t\t\t\t\t\trgbe_error( rgbe_format_error, 'bad scanline data' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( isEncodedRun ) {\n\n\t\t\t\t\t\t\t// a (encoded) run of the same value\n\t\t\t\t\t\t\tconst byteValue = buffer[ pos ++ ];\n\t\t\t\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\t\t\t\tscanline_buffer[ ptr ++ ] = byteValue;\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//ptr += count;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// a literal-run\n\t\t\t\t\t\t\tscanline_buffer.set( buffer.subarray( pos, pos + count ), ptr );\n\t\t\t\t\t\t\tptr += count; pos += count;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\t// now convert data from buffer into rgba\n\t\t\t\t\t// first red, then green, then blue, then exponent (alpha)\n\t\t\t\t\tconst l = scanline_width; //scanline_buffer.byteLength;\n\t\t\t\t\tfor ( let i = 0; i < l; i ++ ) {\n\n\t\t\t\t\t\tlet off = 0;\n\t\t\t\t\t\tdata_rgba[ offset ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 1 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 2 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toff += scanline_width; //1;\n\t\t\t\t\t\tdata_rgba[ offset + 3 ] = scanline_buffer[ i + off ];\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tnum_scanlines --;\n\n\t\t\t\t}\n\n\t\t\t\treturn data_rgba;\n\n\t\t\t};\n\n\t\tconst RGBEByteToRGBFloat = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\tdestArray[ destOffset + 0 ] = sourceArray[ sourceOffset + 0 ] * scale;\n\t\t\tdestArray[ destOffset + 1 ] = sourceArray[ sourceOffset + 1 ] * scale;\n\t\t\tdestArray[ destOffset + 2 ] = sourceArray[ sourceOffset + 2 ] * scale;\n\t\t\tdestArray[ destOffset + 3 ] = 1;\n\n\t\t};\n\n\t\tconst RGBEByteToRGBHalf = function ( sourceArray, sourceOffset, destArray, destOffset ) {\n\n\t\t\tconst e = sourceArray[ sourceOffset + 3 ];\n\t\t\tconst scale = Math.pow( 2.0, e - 128.0 ) / 255.0;\n\n\t\t\t// clamping to 65504, the maximum representable value in float16\n\t\t\tdestArray[ destOffset + 0 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 0 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 1 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 1 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 2 ] = DataUtils.toHalfFloat( Math.min( sourceArray[ sourceOffset + 2 ] * scale, 65504 ) );\n\t\t\tdestArray[ destOffset + 3 ] = DataUtils.toHalfFloat( 1 );\n\n\t\t};\n\n\t\tconst byteArray = new Uint8Array( buffer );\n\t\tbyteArray.pos = 0;\n\t\tconst rgbe_header_info = RGBE_ReadHeader( byteArray );\n\n\t\tconst w = rgbe_header_info.width,\n\t\t\th = rgbe_header_info.height,\n\t\t\timage_rgba_data = RGBE_ReadPixels_RLE( byteArray.subarray( byteArray.pos ), w, h );\n\n\n\t\tlet data, type;\n\t\tlet numElements;\n\n\t\tswitch ( this.type ) {\n\n\t\t\tcase FloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst floatArray = new Float32Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBFloat( image_rgba_data, j * 4, floatArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = floatArray;\n\t\t\t\ttype = FloatType;\n\t\t\t\tbreak;\n\n\t\t\tcase HalfFloatType:\n\n\t\t\t\tnumElements = image_rgba_data.length / 4;\n\t\t\t\tconst halfArray = new Uint16Array( numElements * 4 );\n\n\t\t\t\tfor ( let j = 0; j < numElements; j ++ ) {\n\n\t\t\t\t\tRGBEByteToRGBHalf( image_rgba_data, j * 4, halfArray, j * 4 );\n\n\t\t\t\t}\n\n\t\t\t\tdata = halfArray;\n\t\t\t\ttype = HalfFloatType;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tthrow new Error( 'THREE.RGBELoader: Unsupported type: ' + this.type );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\treturn {\n\t\t\twidth: w, height: h,\n\t\t\tdata: data,\n\t\t\theader: rgbe_header_info.string,\n\t\t\tgamma: rgbe_header_info.gamma,\n\t\t\texposure: rgbe_header_info.exposure,\n\t\t\ttype: type\n\t\t};\n\n\t}\n\n\t/**\n\t * Sets the texture type.\n\t *\n\t * @param {(HalfFloatType|FloatType)} value - The texture type to set.\n\t * @return {RGBELoader} A reference to this loader.\n\t */\n\tsetDataType( value ) {\n\n\t\tthis.type = value;\n\t\treturn this;\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tfunction onLoadCallback( texture, texData ) {\n\n\t\t\tswitch ( texture.type ) {\n\n\t\t\t\tcase FloatType:\n\t\t\t\tcase HalfFloatType:\n\n\t\t\t\t\ttexture.colorSpace = LinearSRGBColorSpace;\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\t\t\t\t\ttexture.magFilter = LinearFilter;\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttexture.flipY = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}\n\n\t\treturn super.load( url, onLoadCallback, onProgress, onError );\n\n\t}\n\n}\n\nexport { RGBELoader };\n","// constants.js\nimport * as THREE from \"three\";\n\nexport const Z_AXIS = new THREE.Vector3(0, 0, 1);\nexport const Y_AXIS = new THREE.Vector3(0, 1, 0);\nexport const X_AXIS = new THREE.Vector3(1, 0, 0);\nexport const DEFAULT_UP_VEC3 = Y_AXIS.clone();\nexport const DEFAULT_NORMAL_VEC3 = Z_AXIS.clone();\nexport const DEFAULT_RIGHT_VEC3 = X_AXIS.clone();\nexport const DEFAULT_NORMAL = [0, 0, 1];\nexport const DEFAULT_UP = [0, 1, 0];\nexport const DEFAULT_RIGHT = [1, 0, 0];\n\n// Side Types\nexport const SIDE_TYPES = {\n front: THREE.FrontSide,\n back: THREE.BackSide,\n double: THREE.DoubleSide\n};\n\n// Euler Orders\nexport const EULER_ORDERS = {\n XYZ: \"XYZ\",\n XZY: \"XZY\",\n YXZ: \"YXZ\",\n YZX: \"YZX\",\n ZXY: \"ZXY\",\n ZYX: \"ZYX\"\n};\n\n// Control Types\nexport const CONTROLS_TYPES = {\n ORBIT_CONTROLS: \"orbitControls\",\n TRACKBALL_CONTROLS: \"trackballControls\",\n MAP_CONTROLS: \"mapControls\"\n};\n\nexport const CAMERA_TYPES = {\n ORTHOGRAPHIC: \"orthographic\",\n PERSPECTIVE: \"perspective\"\n};\n\nexport const SYNONYMOUS_CONTROLS_PROPS = [\n {\n orbitControls: \"dampingFactor\",\n mapControls: \"dampingFactor\",\n trackballControls: \"dynamicDampingFactor\"\n }\n];\n\nexport const ANTONYMOUS_CONTROLS_PROPS = [\n {\n orbitControls: \"enableZoom\",\n mapControls: \"enableZoom\",\n trackballControls: \"noZoom\"\n },\n {\n orbitControls: \"enableRotate\",\n mapControls: \"enableRotate\",\n trackballControls: \"noRotate\"\n },\n {\n orbitControls: \"enablePan\",\n mapControls: \"enablePan\",\n trackballControls: \"noPan\"\n },\n {\n orbitControls: \"enableDamping\",\n mapControls: \"enableDamping\",\n trackballControls: \"staticMoving\"\n }\n];\n\nexport const SYNONYMOUS_CAMERA_PROPS = [\n { perspective: \"minDistance\", orthographic: \"minZoom\" },\n { perspective: \"maxDistance\", orthographic: \"maxZoom\" }\n];\n\n// Material Types\nexport const MATERIAL_TYPES = {\n material: \"material\",\n basic: \"meshBasicMaterial\",\n linebasic: \"lineBasicMaterial\",\n linedashed: \"lineDashedMaterial\",\n depth: \"meshDepthMaterial\",\n distance: \"meshDistanceMaterial\",\n lambert: \"meshLambertMaterial\",\n matcap: \"meshMatcapMaterial\",\n normal: \"meshNormalMaterial\",\n phong: \"meshPhongMaterial\",\n physical: \"meshPhysicalMaterial\",\n standard: \"meshStandardMaterial\",\n toon: \"meshToonMaterial\",\n points: \"pointsMaterial\",\n rawshader: \"rawShaderMaterial\",\n shader: \"shaderMaterial\",\n shadow: \"shadowMaterial\",\n sprite: \"spriteMaterial\"\n};\n\n// Simple, Distinct Colors\nexport const COLORS = [\n \"#e6194b\",\n \"#3cb44b\",\n \"#ffe119\",\n \"#4363d8\",\n \"#f58231\",\n \"#911eb4\",\n \"#46f0f0\",\n \"#f032e6\",\n \"#bcf60c\",\n \"#fabebe\",\n \"#008080\",\n \"#e6beff\",\n \"#9a6324\",\n \"#fffac8\",\n \"#800000\",\n \"#aaffc3\",\n \"#808000\",\n \"#ffd8b1\",\n \"#000075\",\n \"#808080\",\n \"#ffffff\",\n \"#000000\"\n];\n\n/**\n * BASE_ANCHORS\n *\n * The ◼'s represent the anchor points.\n *\n * ◼----◼----◼\n * | |\n * ◼ ◼ ◼\n * | |\n * ◼----◼----◼\n */\nexport const ANCHORS = {\n \"top-left\": new THREE.Vector3(-0.5, 0.5, 0),\n top: new THREE.Vector3(0, 0.5, 0),\n \"top-right\": new THREE.Vector3(0.5, 0.5, 0),\n left: new THREE.Vector3(-0.5, 0, 0),\n center: new THREE.Vector3(0, 0, 0),\n right: new THREE.Vector3(0.5, 0, 0),\n \"bottom-left\": new THREE.Vector3(-0.5, -0.5, 0),\n bottom: new THREE.Vector3(0, -0.5, 0),\n \"bottom-right\": new THREE.Vector3(0.5, -0.5, 0)\n};\n\n/**\n * ANCHOR_SYNONYMS\n *\n * Synonym map of anchor locations for aligmment positions.\n */\nexport const ANCHOR_SYNONYMS = {\n \"top-left\": \"top-left\",\n \"up-left\": \"top-left\",\n \"left-top\": \"top-left\",\n \"left-up\": \"top-left\",\n top: \"top\",\n up: \"top\",\n \"top-center\": \"top\",\n \"top-middle\": \"top\",\n \"up-center\": \"top\",\n \"up-middle\": \"top\",\n \"center-top\": \"top\",\n \"center-up\": \"top\",\n \"middle-top\": \"top\",\n \"middle-up\": \"top\",\n \"top-right\": \"top-right\",\n \"up-right\": \"top-right\",\n \"right-top\": \"top-right\",\n \"right-up\": \"top-right\",\n left: \"left\",\n \"center-left\": \"left\",\n \"middle-left\": \"left\",\n \"left-center\": \"left\",\n \"left-middle\": \"left\",\n center: \"center\",\n middle: \"center\",\n right: \"right\",\n \"center-right\": \"right\",\n \"middle-right\": \"right\",\n \"right-center\": \"right\",\n \"right-middle\": \"right\",\n \"bottom-left\": \"bottom-left\",\n \"down-left\": \"bottom-left\",\n \"left-bottom\": \"bottom-left\",\n \"left-down\": \"bottom-left\",\n bottom: \"bottom\",\n down: \"bottom\",\n \"bottom-center\": \"bottom\",\n \"bottom-middle\": \"bottom\",\n \"down-center\": \"bottom\",\n \"down-middle\": \"bottom\",\n \"center-bottom\": \"bottom\",\n \"center-down\": \"bottom\",\n \"middle-bottom\": \"bottom\",\n \"middle-down\": \"bottom\",\n \"bottom-right\": \"bottom-right\",\n \"down-right\": \"bottom-right\",\n \"right-bottom\": \"bottom-right\",\n \"right-down\": \"bottom-right\"\n};\n","// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n","import * as React from 'react';\n\nfunction call(ref, value) {\n if (typeof ref === 'function') ref(value);else if (ref != null) ref.current = value;\n}\nfunction useEffectfulState(fn, deps = [], cb) {\n const [state, set] = React.useState();\n React.useLayoutEffect(() => {\n const value = fn();\n set(value);\n call(cb, value);\n return () => call(cb, null);\n }, deps);\n return state;\n}\n\nexport { useEffectfulState };\n","import * as React from 'react';\nimport { addEffect, addAfterEffect } from '@react-three/fiber';\nimport StatsImpl from 'stats.js';\nimport { useEffectfulState } from '../helpers/useEffectfulState.js';\n\nfunction Stats({\n showPanel = 0,\n className,\n parent\n}) {\n const stats = useEffectfulState(() => new StatsImpl(), []);\n React.useEffect(() => {\n if (stats) {\n const node = parent && parent.current || document.body;\n stats.showPanel(showPanel);\n node == null || node.appendChild(stats.dom);\n const classNames = (className !== null && className !== void 0 ? className : '').split(' ').filter(cls => cls);\n if (classNames.length) stats.dom.classList.add(...classNames);\n const begin = addEffect(() => stats.begin());\n const end = addAfterEffect(() => stats.end());\n return () => {\n if (classNames.length) stats.dom.classList.remove(...classNames);\n node == null || node.removeChild(stats.dom);\n begin();\n end();\n };\n }\n }, [parent, stats, className, showPanel]);\n return null;\n}\n\nexport { Stats };\n","// util.ts\nimport * as THREE from 'three';\nimport { memo } from 'react';\nimport { Stats } from '@react-three/drei';\nimport { ANCHORS, ANCHOR_SYNONYMS } from './constants';\n\n/**\n * getAlignmentOffset\n *\n * Given an old anchor position and new anchor position as strings,\n * for example, oldAnchor: \"right\" and newAnchor: \"center\",\n * and also optional current position, diagonal, and scale,\n * getAlignmentOffset will provide the new position.\n *\n * diagonal is the displacement between the boundingBox.min\n * and boundingBox.max or any other displacement between\n * the min and max corners. This is necessary for Labels and Text,\n * where the fundamental geometry is not to unit scale of [1, 1, 1].\n *\n * In general, it is better to apply getAlignmentOffset on\n * unit geometry before scaling.\n */\nexport function getAlignmentOffset(\n oldAnchor: string,\n newAnchor: string,\n diagonal: Array<number> = [1, 1, 1]\n): Array<number> {\n const posVec = new THREE.Vector3();\n diagonal.map((val, index) => {\n /* eslint-disable-next-line no-param-reassign */\n diagonal[index] = Math.abs(val);\n return null;\n });\n const diagonalVec = new THREE.Vector3(...diagonal);\n const oldAnchorVec = ANCHORS[ANCHOR_SYNONYMS[oldAnchor]];\n const newAnchorVec = ANCHORS[ANCHOR_SYNONYMS[newAnchor]];\n const offset = oldAnchorVec.clone().sub(newAnchorVec);\n posVec.add(offset.multiply(diagonalVec));\n return [posVec.x, posVec.y, posVec.z];\n}\n\n/**\n * reconcileSynonymousProps\n *\n * Given the correct type, synonymous prop key value pairs are removed.\n * If correctly named prop does not exist, value is extracted from\n * synonymous props and assigned to the correctly named prop, then\n * synonymous props are removed.\n *\n * This functions mutates props!\n */\nexport function reconcileSynonymousProps(\n /* eslint-disable @typescript-eslint/no-explicit-any */\n props: any,\n synonymousProps: Record<string, string>[],\n /* eslint-enable @typescript-eslint/no-explicit-any */\n correctType: string,\n opposite = false\n): void {\n // Ensure props is an object\n if (!props || typeof props !== 'object') {\n return;\n }\n\n synonymousProps.map(propNames => {\n const correctName = propNames[correctType];\n const synnonyms: string[] = Object.values(propNames).filter(\n name => name !== correctName\n );\n\n // Assign Synnonymous Prop\n if (props[correctName] == null) {\n /* eslint-disable no-restricted-syntax */ // loop\n for (const synnonym of synnonyms) {\n if (props[synnonym] != null) {\n /* eslint-disable-next-line no-param-reassign */\n props[correctName] = opposite ? !props[synnonym] : props[synnonym];\n break;\n }\n }\n /* eslint-enable no-restricted-syntax */\n }\n // Delete Synnonymous Props\n /* eslint-disable no-restricted-syntax */\n for (const synnonym of synnonyms) {\n /* eslint-disable-next-line no-param-reassign */\n delete props[synnonym];\n }\n /* eslint-enable no-restricted-syntax */\n\n return null;\n });\n}\n\nexport function areArraysEqual(array1, array2): boolean {\n return (\n Array.isArray(array1) &&\n Array.isArray(array2) &&\n array1.length === array2.length &&\n array1[0] === array2[0] &&\n array1[1] === array2[1] &&\n array1[2] === array2[2]\n );\n}\n\n/**\n * FPS\n */\nexport const FPS = memo(function FPS() {\n return <Stats showPanel={0} className=\"fps-stats\" />;\n});\n\nFPS.displayName = 'FPS';\n\n/**\n * RGBStringToNumber\n */\nexport function RGBStringToNumber(rgbString): {\n r: number;\n g: number;\n b: number;\n} {\n let [, r, g, b] = rgbString.split(/[,()]/);\n r = parseInt(r, 10);\n g = parseInt(g, 10);\n b = parseInt(b, 10);\n return { r, g, b };\n}\n\n/**\n * numberToRGBString\n */\nexport function numberToRGBString(r, g, b): string {\n return `RGB(${r}, ${g}, ${b})`;\n}\n\n/**\n * objectToArray\n * returns obj if already an array\n * default is [0, 0, 0]\n * default is array of all zeros for custom order with more than 3 components\n */\nexport function objectToArray(obj, order = 'xyz'): Array<number> {\n // Object is an Array\n if (Array.isArray(obj)) {\n return obj;\n }\n\n // Convert object to array of numbers\n const array: Array<number> = [];\n /* eslint-disable no-restricted-syntax */\n for (const component of order.split('')) {\n // Object with any missing components yields default\n if (Number.isNaN(obj[component])) {\n return Array(order.length).fill(0);\n }\n\n array.push(obj[component]);\n }\n /* eslint-enable no-restricted-syntax */\n\n return array;\n}\n\n/**\n * arrayToObject\n * returns array if already an object with fields x, y, and z\n * default is { x: 0, y: 0, z: 0 }\n * default is an object with all zero value components for custom order\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function arrayToObject(array, order = 'xyz'): any {\n const obj: any = {};\n /* eslint-enable @typescript-eslint/no-explicit-any */\n\n // Not an Array or does not have enough elements\n if (!Array.isArray(array) || array.length < order.length) {\n order.split('').map(component => {\n obj[component] = 0;\n\n return null;\n });\n\n return obj;\n }\n\n // Convert array to object\n order.split('').map((component, index) => {\n obj[component] = array[index];\n\n return null;\n });\n return obj;\n}\n\n/**\n * arrayToQuaternion\n * return THREE.Quaternion if already THREE.Quaternion\n */\nexport function toQuaternion(obj, order = 'xyzw'): THREE.Quaternion {\n const quaternion = { x: 0, y: 0, z: 0, w: 1 };\n\n if (Array.isArray(obj) && obj.length === 4) {\n // Array\n order.split('').map((component, i) => {\n quaternion[component] = obj[i];\n return null;\n });\n } else {\n // Object\n order.split('').map(component => {\n if (obj[component] == null) {\n console.warn(\n `[toQuaternion] argument does not have component: ${component}. Default Quaternion(0, 0, 0, 1) returned.`\n );\n return new THREE.Quaternion();\n }\n quaternion[component] = obj[component];\n\n return null;\n });\n }\n\n return new THREE.Quaternion(\n quaternion.x,\n quaternion.y,\n quaternion.z,\n quaternion.w\n );\n}\n\n/**\n * filterArrayLength\n */\nexport function filterArrayLength(\n array,\n length = 3,\n defaultArray = [0, 0, 0]\n): Array<number> | undefined {\n return Array.isArray(array) && array.length === length ? array : defaultArray;\n}\n\n/**\n * billboard\n */\nexport function billboard({ mesh, camera }): void {\n mesh.current.lookAt(camera.position);\n /* eslint-disable-next-line no-param-reassign */\n mesh.current.up = camera.up;\n}\n","// SetBackground.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';\nimport { PMREMGenerator } from 'three';\nimport { useViewContext } from '../utils';\n\nconst { useEffect, memo } = React;\n\nfunction SetBackground({\n backgroundColor,\n backgroundTextureURL,\n backgroundEquirectangularTextureURL,\n backgroundEquirectangularRGBEURL,\n}): null {\n const { gl, scene, setViewContext } = useViewContext();\n\n useEffect(\n function updateBackground() {\n const pmremGenerator = new PMREMGenerator(gl);\n pmremGenerator.compileEquirectangularShader();\n\n if (backgroundEquirectangularRGBEURL) {\n // HDR\n // RGBE Equirectangular Skybox\n const path = backgroundEquirectangularRGBEURL;\n\n new RGBELoader().setDataType(THREE.FloatType).load(path, texture => {\n // Mark as equirectangular\n texture.mapping = THREE.EquirectangularReflectionMapping;\n // For HDR normally keep colorSpace as Linear\n texture.colorSpace = THREE.LinearSRGBColorSpace;\n scene.background = texture;\n\n // Using Prefiltered Mipmapped Radiance Environment Map for much smoother envmaps\n const envMap = pmremGenerator.fromEquirectangular(texture).texture;\n\n scene.environment = envMap;\n setViewContext({ envMap });\n\n texture.dispose();\n pmremGenerator.dispose();\n });\n } else if (backgroundEquirectangularTextureURL) {\n // LDR\n // Equirectangular Skybox\n const path = backgroundEquirectangularTextureURL;\n\n new THREE.TextureLoader().load(path, texture => {\n texture.mapping = THREE.EquirectangularReflectionMapping;\n texture.colorSpace = THREE.SRGBColorSpace;\n scene.background = texture;\n\n const envMap = pmremGenerator.fromEquirectangular(texture).texture;\n\n scene.environment = envMap;\n setViewContext({ envMap });\n\n texture.dispose();\n pmremGenerator.dispose();\n });\n } else if (backgroundTextureURL) {\n // 2D Background\n // Background Image\n const path = backgroundTextureURL;\n new THREE.TextureLoader().load(path, texture => {\n texture.colorSpace = THREE.SRGBColorSpace;\n scene.background = texture;\n });\n } else if (backgroundColor != null) {\n // Solid Color\n // Background Color\n gl.setClearColor(backgroundColor);\n scene.background = null;\n }\n },\n // setViewContext causes useState to update setViewContexValue\n // in ViewContextProvider this triggers an update in useViewContext,\n // hence a endless update cycle will occur if updateBackground depended on setViewContext\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n [\n gl,\n scene,\n backgroundEquirectangularRGBEURL,\n backgroundEquirectangularTextureURL,\n backgroundTextureURL,\n backgroundColor,\n ]\n );\n\n return null;\n}\n\nconst SetBackgroundMemo = memo(SetBackground);\nSetBackgroundMemo.displayName = 'SetBackground';\nexport default SetBackgroundMemo;\n","import {\n\tClampToEdgeWrapping,\n\tDataTexture,\n\tDataUtils,\n\tFloatType,\n\tHalfFloatType,\n\tLinearFilter,\n\tNearestFilter,\n\tRGBAFormat,\n\tUVMapping\n} from 'three';\n\n/**\n * Texture library for {@link RectAreaLight}. This class holds the LTC BRDF data\n * in data textures for further use in the renderer.\n *\n * Reference: Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\n * by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt. [Code]{@link https://github.com/selfshadow/ltc_code/}.\n *\n * NOTE: This is a temporary location for the BRDF approximation texture data\n * based off of Eric Heitz's work (see citation). BRDF data for\n * `RectAreaLight` is currently approximated using a precomputed texture\n * of roughly 80kb in size. The hope is to find a better way to include\n * the large texture data before including the full RectAreaLight implementation\n * in the main build files.\n *\n * @hideconstructor\n * @three_import import { RectAreaLightTexturesLib } from 'three/addons/lights/RectAreaLightTexturesLib.js';\n */\nclass RectAreaLightTexturesLib {\n\n\t/**\n\t * Inits the texture library.\n\t *\n\t * @return {RectAreaLightTexturesLib}\n\t */\n\tstatic init() {\n\n\t\t// source: https://github.com/selfshadow/ltc_code/tree/master/fit/results/ltc.js\n\n\t\tconst LTC_MAT_1 = [ 1, 0, 0, 2e-05, 1, 0, 0, 0.000503905, 1, 0, 0, 0.00201562, 1, 0, 0, 0.00453516, 1, 0, 0, 0.00806253, 1, 0, 0, 0.0125978, 1, 0, 0, 0.018141, 1, 0, 0, 0.0246924, 1, 0, 0, 0.0322525, 1, 0, 0, 0.0408213, 1, 0, 0, 0.0503999, 1, 0, 0, 0.0609894, 1, 0, 0, 0.0725906, 1, 0, 0, 0.0852058, 1, 0, 0, 0.0988363, 1, 0, 0, 0.113484, 1, 0, 0, 0.129153, 1, 0, 0, 0.145839, 1, 0, 0, 0.163548, 1, 0, 0, 0.182266, 1, 0, 0, 0.201942, 1, 0, 0, 0.222314, 1, 0, 0, 0.241906, 1, 0, 0, 0.262314, 1, 0, 0, 0.285754, 1, 0, 0, 0.310159, 1, 0, 0, 0.335426, 1, 0, 0, 0.361341, 1, 0, 0, 0.387445, 1, 0, 0, 0.412784, 1, 0, 0, 0.438197, 1, 0, 0, 0.466966, 1, 0, 0, 0.49559, 1, 0, 0, 0.523448, 1, 0, 0, 0.549938, 1, 0, 0, 0.57979, 1, 0, 0, 0.608746, 1, 0, 0, 0.636185, 1, 0, 0, 0.664748, 1, 0, 0, 0.69313, 1, 0, 0, 0.71966, 1, 0, 0, 0.747662, 1, 0, 0, 0.774023, 1, 0, 0, 0.799775, 1, 0, 0, 0.825274, 1, 0, 0, 0.849156, 1, 0, 0, 0.873248, 1, 0, 0, 0.89532, 1, 0, 0, 0.917565, 1, 0, 0, 0.937863, 1, 0, 0, 0.958139, 1, 0, 0, 0.976563, 1, 0, 0, 0.994658, 1, 0, 0, 1.0112, 1, 0, 0, 1.02712, 1, 0, 0, 1.04189, 1, 0, 0, 1.05568, 1, 0, 0, 1.06877, 1, 0, 0, 1.08058, 1, 0, 0, 1.09194, 1, 0, 0, 1.10191, 1, 0, 0, 1.11161, 1, 0, 0, 1.1199, 1, 0, 0, 1.12813, 0.999547, - 4.48815e-07, 0.0224417, 1.99902e-05, 0.999495, - 1.13079e-05, 0.0224406, 0.000503651, 0.999496, - 4.52317e-05, 0.0224406, 0.00201461, 0.999496, - 0.000101772, 0.0224406, 0.00453287, 0.999495, - 0.000180928, 0.0224406, 0.00805845, 0.999497, - 0.000282702, 0.0224406, 0.0125914, 0.999496, - 0.000407096, 0.0224406, 0.0181319, 0.999498, - 0.000554114, 0.0224406, 0.02468, 0.999499, - 0.000723768, 0.0224406, 0.0322363, 0.999495, - 0.000916058, 0.0224405, 0.0408009, 0.999499, - 0.00113101, 0.0224408, 0.050375, 0.999494, - 0.00136863, 0.0224405, 0.0609586, 0.999489, - 0.00162896, 0.0224401, 0.0725537, 0.999489, - 0.00191201, 0.0224414, 0.0851619, 0.999498, - 0.00221787, 0.0224413, 0.0987867, 0.999492, - 0.00254642, 0.0224409, 0.113426, 0.999507, - 0.00289779, 0.0224417, 0.129088, 0.999494, - 0.0032716, 0.0224386, 0.145767, 0.999546, - 0.0036673, 0.0224424, 0.163472, 0.999543, - 0.00408166, 0.0224387, 0.182182, 0.999499, - 0.00450056, 0.0224338, 0.201843, 0.999503, - 0.00483661, 0.0224203, 0.222198, 0.999546, - 0.00452928, 0.022315, 0.241714, 0.999508, - 0.00587403, 0.0224329, 0.262184, 0.999509, - 0.00638806, 0.0224271, 0.285609, 0.999501, - 0.00691028, 0.0224166, 0.309998, 0.999539, - 0.00741979, 0.0223989, 0.335262, 0.999454, - 0.00786282, 0.0223675, 0.361154, 0.999529, - 0.00811928, 0.0222828, 0.387224, 0.999503, - 0.00799941, 0.0221063, 0.41252, 0.999561, - 0.00952753, 0.0223057, 0.438006, 0.999557, - 0.0099134, 0.0222065, 0.466735, 0.999541, - 0.0100935, 0.0220402, 0.495332, 0.999562, - 0.00996821, 0.0218067, 0.523197, 0.999556, - 0.0105031, 0.0217096, 0.550223, 0.999561, - 0.0114191, 0.0217215, 0.579498, 0.999588, - 0.0111818, 0.0213357, 0.608416, 0.999633, - 0.0107725, 0.0208689, 0.635965, 0.999527, - 0.0121671, 0.0210149, 0.664476, 0.999508, - 0.0116005, 0.020431, 0.692786, 0.999568, - 0.0115604, 0.0199791, 0.719709, 0.999671, - 0.0121117, 0.0197415, 0.74737, 0.999688, - 0.0110769, 0.0188846, 0.773692, 0.99962, - 0.0122368, 0.0188452, 0.799534, 0.999823, - 0.0110325, 0.0178001, 0.825046, 0.999599, - 0.0114923, 0.0174221, 0.849075, 0.999619, - 0.0105923, 0.0164345, 0.872999, 0.999613, - 0.0105988, 0.0158227, 0.895371, 0.99964, - 0.00979861, 0.0148131, 0.917364, 0.99977, - 0.00967238, 0.0140721, 0.938002, 0.999726, - 0.00869175, 0.0129543, 0.957917, 0.99973, - 0.00866872, 0.0122329, 0.976557, 0.999773, - 0.00731956, 0.0108958, 0.994459, 0.999811, - 0.00756027, 0.0102715, 1.01118, 0.999862, - 0.00583732, 0.00878781, 1.02701, 0.999835, - 0.00631438, 0.00827529, 1.04186, 0.999871, - 0.00450785, 0.00674583, 1.05569, 0.999867, - 0.00486079, 0.00621041, 1.06861, 0.999939, - 0.00322072, 0.00478301, 1.08064, 0.999918, - 0.00318199, 0.00406395, 1.09181, 1.00003, - 0.00193348, 0.00280682, 1.10207, 0.999928, - 0.00153729, 0.00198741, 1.11152, 0.999933, - 0.000623666, 0.000917714, 1.12009, 1, - 1.02387e-06, 9.07581e-07, 1.12813, 0.997866, - 8.96716e-07, 0.0448334, 1.99584e-05, 0.997987, - 2.25945e-05, 0.0448389, 0.000502891, 0.997987, - 9.03781e-05, 0.0448388, 0.00201156, 0.997985, - 0.000203351, 0.0448388, 0.00452602, 0.997986, - 0.000361514, 0.0448388, 0.00804629, 0.997987, - 0.00056487, 0.0448389, 0.0125724, 0.997988, - 0.000813423, 0.0448389, 0.0181045, 0.997984, - 0.00110718, 0.0448387, 0.0246427, 0.997985, - 0.00144616, 0.0448388, 0.0321875, 0.997987, - 0.00183038, 0.044839, 0.0407392, 0.997983, - 0.00225987, 0.0448387, 0.0502986, 0.997991, - 0.00273467, 0.0448389, 0.0608667, 0.997984, - 0.00325481, 0.0448384, 0.0724444, 0.998002, - 0.00382043, 0.044839, 0.0850348, 0.997997, - 0.00443145, 0.0448396, 0.0986372, 0.998007, - 0.00508796, 0.0448397, 0.113255, 0.998008, - 0.00578985, 0.04484, 0.128891, 0.998003, - 0.00653683, 0.0448384, 0.145548, 0.997983, - 0.00732713, 0.0448358, 0.163221, 0.997985, - 0.00815454, 0.0448358, 0.181899, 0.998005, - 0.00898985, 0.0448286, 0.201533, 0.998026, - 0.00964404, 0.0447934, 0.221821, 0.998055, - 0.00922677, 0.044611, 0.241282, 0.99804, - 0.0117361, 0.0448245, 0.261791, 0.998048, - 0.0127628, 0.0448159, 0.285181, 0.998088, - 0.0138055, 0.0447996, 0.30954, 0.998058, - 0.0148206, 0.0447669, 0.334751, 0.998099, - 0.0156998, 0.044697, 0.36061, 0.998116, - 0.0161976, 0.0445122, 0.386603, 0.998195, - 0.015945, 0.0441711, 0.411844, 0.998168, - 0.0183947, 0.0444255, 0.43773, 0.998184, - 0.0197913, 0.0443809, 0.466009, 0.998251, - 0.0201426, 0.0440689, 0.494574, 0.998305, - 0.0198847, 0.0435632, 0.522405, 0.998273, - 0.0210577, 0.043414, 0.549967, 0.998254, - 0.0227901, 0.0433943, 0.578655, 0.998349, - 0.0223108, 0.0426529, 0.60758, 0.99843, - 0.0223088, 0.042, 0.635524, 0.998373, - 0.0241141, 0.0418987, 0.663621, 0.998425, - 0.0231446, 0.0408118, 0.691906, 0.998504, - 0.0233684, 0.0400565, 0.719339, 0.998443, - 0.0241652, 0.0394634, 0.74643, 0.99848, - 0.0228715, 0.0380002, 0.773086, 0.998569, - 0.023519, 0.0372322, 0.798988, 0.998619, - 0.0223108, 0.0356468, 0.824249, 0.998594, - 0.0223105, 0.034523, 0.848808, 0.998622, - 0.0213426, 0.0328887, 0.87227, 0.998669, - 0.0207912, 0.0314374, 0.895157, 0.998705, - 0.0198416, 0.0296925, 0.916769, 0.998786, - 0.0189168, 0.0279634, 0.937773, 0.998888, - 0.0178811, 0.0261597, 0.957431, 0.99906, - 0.0166845, 0.0242159, 0.976495, 0.999038, - 0.0155464, 0.0222638, 0.994169, 0.999237, - 0.0141349, 0.0201967, 1.01112, 0.999378, - 0.0129324, 0.0181744, 1.02692, 0.999433, - 0.0113192, 0.0159898, 1.04174, 0.999439, - 0.0101244, 0.0140385, 1.05559, 0.999614, - 0.00837456, 0.0117826, 1.06852, 0.999722, - 0.00721769, 0.00983745, 1.08069, 0.999817, - 0.00554067, 0.00769002, 1.09176, 0.99983, - 0.00426961, 0.005782, 1.10211, 0.999964, - 0.00273904, 0.00374503, 1.11152, 1.00001, - 0.00136739, 0.00187176, 1.12031, 0.999946, 3.93227e-05, - 2.8919e-05, 1.12804, 0.995847, - 1.3435e-06, 0.0671785, 1.9916e-05, 0.995464, - 3.38387e-05, 0.0671527, 0.000501622, 0.99547, - 0.000135355, 0.0671531, 0.00200649, 0.995471, - 0.00030455, 0.0671532, 0.00451461, 0.99547, - 0.000541423, 0.0671531, 0.008026, 0.995471, - 0.00084598, 0.0671531, 0.0125407, 0.99547, - 0.00121823, 0.0671531, 0.0180589, 0.99547, - 0.00165817, 0.0671531, 0.0245806, 0.995463, - 0.00216583, 0.0671526, 0.0321062, 0.995468, - 0.00274127, 0.0671527, 0.0406366, 0.995474, - 0.00338447, 0.0671534, 0.0501717, 0.995473, - 0.00409554, 0.0671533, 0.0607131, 0.995478, - 0.00487451, 0.0671531, 0.0722618, 0.995476, - 0.00572148, 0.0671532, 0.0848191, 0.995477, - 0.00663658, 0.0671539, 0.0983882, 0.995498, - 0.00761986, 0.0671541, 0.112972, 0.995509, - 0.00867094, 0.0671542, 0.128568, 0.995509, - 0.00978951, 0.0671531, 0.145183, 0.995503, - 0.0109725, 0.0671491, 0.162808, 0.995501, - 0.012211, 0.0671465, 0.181441, 0.99553, - 0.0134565, 0.0671371, 0.201015, 0.99555, - 0.014391, 0.0670831, 0.221206, 0.99558, - 0.014351, 0.0668883, 0.240813, 0.995577, - 0.0173997, 0.0671055, 0.261257, 0.995602, - 0.0191111, 0.0671178, 0.284467, 0.995623, - 0.0206705, 0.0670946, 0.308765, 0.995658, - 0.022184, 0.0670472, 0.333905, 0.995705, - 0.0234832, 0.0669417, 0.359677, 0.995719, - 0.0241933, 0.0666714, 0.385554, 0.995786, - 0.0243539, 0.066266, 0.410951, 0.995887, - 0.0271866, 0.0664367, 0.437163, 0.995944, - 0.0296012, 0.0664931, 0.464842, 0.996004, - 0.0301045, 0.0660105, 0.49332, 0.996128, - 0.0298311, 0.0652694, 0.521131, 0.996253, - 0.0316426, 0.0650739, 0.549167, 0.996244, - 0.0339043, 0.0649433, 0.57737, 0.996309, - 0.033329, 0.0638926, 0.606073, 0.996417, - 0.0338935, 0.0630849, 0.634527, 0.996372, - 0.0353104, 0.0625083, 0.66256, 0.996542, - 0.0348942, 0.0611986, 0.690516, 0.996568, - 0.0351614, 0.060069, 0.718317, 0.996711, - 0.0354317, 0.0588522, 0.74528, 0.996671, - 0.0349513, 0.0571902, 0.772061, 0.996865, - 0.0345622, 0.0555321, 0.798089, 0.996802, - 0.0342566, 0.0537816, 0.823178, 0.996992, - 0.0330862, 0.0516095, 0.847949, 0.996944, - 0.0324666, 0.0495537, 0.871431, 0.997146, - 0.0309544, 0.0470302, 0.894357, 0.997189, - 0.0299372, 0.0446043, 0.916142, 0.997471, - 0.0281389, 0.0418812, 0.937193, 0.997515, - 0.0268702, 0.0391823, 0.957, 0.997812, - 0.0247166, 0.0361338, 0.975936, 0.998027, - 0.0233525, 0.0333945, 0.99391, 0.998233, - 0.0209839, 0.0301917, 1.01075, 0.998481, - 0.0194309, 0.027271, 1.02669, 0.998859, - 0.0169728, 0.0240162, 1.04173, 0.99894, - 0.0152322, 0.0210517, 1.05551, 0.999132, - 0.0127497, 0.0178632, 1.06856, 0.999369, - 0.0108282, 0.014787, 1.08054, 0.999549, - 0.00845886, 0.0116185, 1.09185, 0.999805, - 0.0063937, 0.00867209, 1.10207, 0.99985, - 0.00414582, 0.00566823, 1.1117, 0.999912, - 0.00207443, 0.00277562, 1.12022, 1.00001, 8.70226e-05, - 5.3766e-05, 1.12832, 0.991943, - 1.78672e-06, 0.0893382, 1.98384e-05, 0.991952, - 4.50183e-05, 0.089339, 0.000499849, 0.991956, - 0.000180074, 0.0893394, 0.0019994, 0.991955, - 0.000405167, 0.0893393, 0.00449867, 0.991953, - 0.000720298, 0.0893391, 0.00799764, 0.991955, - 0.00112548, 0.0893393, 0.0124964, 0.991957, - 0.0016207, 0.0893395, 0.0179951, 0.991958, - 0.00220601, 0.0893396, 0.0244939, 0.991947, - 0.00288137, 0.0893385, 0.0319929, 0.991962, - 0.00364693, 0.0893399, 0.0404933, 0.991965, - 0.00450264, 0.0893399, 0.049995, 0.99198, - 0.00544862, 0.0893411, 0.0604995, 0.99197, - 0.00648491, 0.0893397, 0.0720074, 0.991976, - 0.00761164, 0.089341, 0.0845207, 0.99198, - 0.00882891, 0.0893405, 0.0980413, 0.991982, - 0.0101367, 0.0893396, 0.112571, 0.992008, - 0.011535, 0.0893415, 0.128115, 0.992026, - 0.0130228, 0.0893414, 0.144672, 0.992064, - 0.0145966, 0.0893418, 0.162241, 0.992041, - 0.0162421, 0.0893359, 0.180801, 0.992086, - 0.0178888, 0.0893214, 0.200302, 0.992157, - 0.0190368, 0.0892401, 0.220332, 0.992181, - 0.0195584, 0.0890525, 0.240144, 0.992175, - 0.0227257, 0.0892153, 0.260728, 0.99221, - 0.0254195, 0.089304, 0.283473, 0.99222, - 0.0274883, 0.0892703, 0.307673, 0.992317, - 0.0294905, 0.0892027, 0.332729, 0.992374, - 0.0311861, 0.0890577, 0.358387, 0.992505, - 0.0320656, 0.0886994, 0.384102, 0.992568, - 0.0329715, 0.0883198, 0.409767, 0.992675, - 0.036006, 0.0883602, 0.436145, 0.992746, - 0.0392897, 0.0884591, 0.463217, 0.992873, - 0.0399337, 0.0878287, 0.491557, 0.992934, - 0.040231, 0.0870108, 0.519516, 0.993091, - 0.0422013, 0.0865857, 0.547741, 0.993259, - 0.0443503, 0.0861937, 0.575792, 0.993455, - 0.0446368, 0.0851187, 0.604233, 0.993497, - 0.0454299, 0.0840576, 0.632925, 0.993694, - 0.0463296, 0.0829671, 0.660985, 0.993718, - 0.0470619, 0.0817185, 0.688714, 0.993973, - 0.0468838, 0.0800294, 0.716743, 0.994207, - 0.046705, 0.0781286, 0.74377, 0.994168, - 0.0469698, 0.0763337, 0.77042, 0.9945, - 0.0456816, 0.0738184, 0.796659, 0.994356, - 0.0455518, 0.0715545, 0.821868, 0.994747, - 0.0439488, 0.0686085, 0.846572, 0.994937, - 0.0430056, 0.065869, 0.870435, 0.995142, - 0.0413414, 0.0626446, 0.893272, 0.995451, - 0.0396521, 0.05929, 0.915376, 0.995445, - 0.0378453, 0.0558503, 0.936196, 0.995967, - 0.0355219, 0.0520949, 0.956376, 0.996094, - 0.0335146, 0.048377, 0.975327, 0.996622, - 0.030682, 0.0442575, 0.993471, 0.996938, - 0.0285504, 0.0404693, 1.01052, 0.997383, - 0.0253399, 0.0360903, 1.02637, 0.997714, - 0.0231651, 0.0322176, 1.04139, 0.998249, - 0.0198138, 0.0278433, 1.05542, 0.998596, - 0.0174337, 0.0238759, 1.06846, 0.998946, - 0.0141349, 0.0195944, 1.08056, 0.99928, - 0.0115603, 0.0156279, 1.09181, 0.999507, - 0.00839065, 0.0114607, 1.10213, 0.999697, - 0.005666, 0.00763325, 1.11169, 0.999869, - 0.00269902, 0.00364946, 1.12042, 1.00001, 6.23836e-05, - 3.19288e-05, 1.12832, 0.987221, - 2.22675e-06, 0.111332, 1.97456e-05, 0.98739, - 5.61116e-05, 0.111351, 0.000497563, 0.987448, - 0.000224453, 0.111357, 0.00199031, 0.987441, - 0.000505019, 0.111357, 0.0044782, 0.987442, - 0.000897816, 0.111357, 0.00796129, 0.987442, - 0.00140284, 0.111357, 0.0124396, 0.987444, - 0.00202012, 0.111357, 0.0179132, 0.987442, - 0.00274964, 0.111357, 0.0243824, 0.987446, - 0.00359147, 0.111357, 0.0318474, 0.987435, - 0.00454562, 0.111356, 0.0403086, 0.987461, - 0.00561225, 0.111358, 0.0497678, 0.987458, - 0.00679125, 0.111358, 0.0602239, 0.987443, - 0.0080828, 0.111356, 0.0716792, 0.987476, - 0.0094872, 0.111358, 0.0841364, 0.98749, - 0.0110044, 0.111361, 0.097597, 0.987508, - 0.0126344, 0.111362, 0.112062, 0.987494, - 0.0143767, 0.111357, 0.127533, 0.987526, - 0.0162307, 0.111359, 0.144015, 0.987558, - 0.0181912, 0.111361, 0.161502, 0.987602, - 0.0202393, 0.111355, 0.179979, 0.987692, - 0.022273, 0.111346, 0.199386, 0.987702, - 0.0235306, 0.111215, 0.219183, 0.987789, - 0.0247628, 0.111061, 0.239202, 0.987776, - 0.0280668, 0.111171, 0.259957, 0.987856, - 0.0316751, 0.111327, 0.282198, 0.987912, - 0.0342468, 0.111282, 0.306294, 0.988, - 0.0367205, 0.111198, 0.331219, 0.988055, - 0.0387766, 0.110994, 0.356708, 0.988241, - 0.0397722, 0.110547, 0.382234, 0.988399, - 0.0416076, 0.110198, 0.408227, 0.988539, - 0.0448192, 0.110137, 0.434662, 0.988661, - 0.0483793, 0.110143, 0.461442, 0.988967, - 0.0495895, 0.109453, 0.489318, 0.989073, - 0.0506797, 0.108628, 0.517516, 0.989274, - 0.0526953, 0.108003, 0.545844, 0.989528, - 0.054578, 0.107255, 0.573823, 0.989709, - 0.0561503, 0.106294, 0.601944, 0.989991, - 0.056866, 0.104896, 0.630855, 0.990392, - 0.0572914, 0.103336, 0.658925, 0.990374, - 0.0586224, 0.10189, 0.686661, 0.990747, - 0.0584764, 0.099783, 0.714548, 0.991041, - 0.0582662, 0.0974309, 0.74186, 0.991236, - 0.0584118, 0.0951678, 0.768422, 0.991585, - 0.0573055, 0.0921581, 0.794817, 0.991984, - 0.0564241, 0.0891167, 0.820336, 0.9921, - 0.0553608, 0.085805, 0.84493, 0.992749, - 0.0533816, 0.0820354, 0.868961, 0.99288, - 0.0518661, 0.0782181, 0.891931, 0.993511, - 0.0492492, 0.0738935, 0.914186, 0.993617, - 0.0471956, 0.0696402, 0.93532, 0.99411, - 0.044216, 0.0649659, 0.95543, 0.994595, - 0.0416654, 0.0603177, 0.974685, 0.994976, - 0.0384314, 0.0553493, 0.992807, 0.995579, - 0.0353491, 0.0503942, 1.00996, 0.996069, - 0.0319787, 0.0452123, 1.02606, 0.996718, - 0.028472, 0.0400112, 1.04114, 0.997173, - 0.0250789, 0.0349456, 1.05517, 0.997818, - 0.0213326, 0.029653, 1.0683, 0.998318, - 0.0178509, 0.024549, 1.0805, 0.998853, - 0.0141118, 0.0194197, 1.09177, 0.999218, - 0.0105914, 0.0143869, 1.1022, 0.999594, - 0.00693474, 0.00943517, 1.11175, 0.99975, - 0.00340478, 0.00464051, 1.12056, 1.00001, 0.000109172, - 0.000112821, 1.12853, 0.983383, - 2.66524e-06, 0.133358, 1.96534e-05, 0.981942, - 6.71009e-05, 0.133162, 0.000494804, 0.981946, - 0.000268405, 0.133163, 0.00197923, 0.981944, - 0.000603912, 0.133163, 0.00445326, 0.981941, - 0.00107362, 0.133162, 0.00791693, 0.981946, - 0.00167755, 0.133163, 0.0123703, 0.981944, - 0.00241569, 0.133162, 0.0178135, 0.981945, - 0.00328807, 0.133163, 0.0242466, 0.981945, - 0.00429472, 0.133162, 0.03167, 0.981955, - 0.00543573, 0.133164, 0.0400846, 0.981951, - 0.00671105, 0.133163, 0.0494901, 0.981968, - 0.00812092, 0.133165, 0.0598886, 0.981979, - 0.00966541, 0.133166, 0.0712811, 0.981996, - 0.0113446, 0.133168, 0.083669, 0.982014, - 0.0131585, 0.133169, 0.0970533, 0.982011, - 0.0151073, 0.133167, 0.111438, 0.982062, - 0.0171906, 0.133172, 0.126826, 0.9821, - 0.0194067, 0.133175, 0.143215, 0.982149, - 0.0217502, 0.133176, 0.160609, 0.982163, - 0.0241945, 0.133173, 0.178981, 0.982247, - 0.0265907, 0.133148, 0.198249, 0.982291, - 0.027916, 0.132974, 0.217795, 0.982396, - 0.0299663, 0.132868, 0.238042, 0.982456, - 0.0334544, 0.132934, 0.258901, 0.982499, - 0.0378636, 0.133137, 0.280639, 0.982617, - 0.0409274, 0.133085, 0.304604, 0.98274, - 0.0438523, 0.132985, 0.329376, 0.982944, - 0.0462288, 0.132728, 0.354697, 0.98308, - 0.0475995, 0.132228, 0.380102, 0.983391, - 0.0501901, 0.131924, 0.406256, 0.983514, - 0.0535899, 0.131737, 0.432735, 0.98373, - 0.0571858, 0.131567, 0.459359, 0.984056, - 0.0592353, 0.130932, 0.486637, 0.984234, - 0.0610488, 0.130092, 0.51509, 0.984748, - 0.0630758, 0.12923, 0.543461, 0.985073, - 0.0647398, 0.128174, 0.571376, 0.985195, - 0.0671941, 0.127133, 0.599414, 0.985734, - 0.0681345, 0.125576, 0.628134, 0.986241, - 0.0686089, 0.123639, 0.656399, 0.986356, - 0.0698511, 0.121834, 0.684258, 0.986894, - 0.0700931, 0.119454, 0.711818, 0.987382, - 0.0698321, 0.116718, 0.739511, 0.988109, - 0.0693975, 0.113699, 0.766267, 0.988363, - 0.0689584, 0.110454, 0.792456, 0.989112, - 0.0672353, 0.106602, 0.81813, 0.989241, - 0.0662034, 0.10267, 0.842889, 0.990333, - 0.0638938, 0.0981381, 0.867204, 0.990591, - 0.0618534, 0.0935388, 0.89038, 0.991106, - 0.0593117, 0.088553, 0.912576, 0.991919, - 0.0562676, 0.0832187, 0.934118, 0.992111, - 0.0534085, 0.0778302, 0.954254, 0.992997, - 0.0495459, 0.0720453, 0.973722, 0.993317, - 0.0463707, 0.0663458, 0.991949, 0.994133, - 0.0421245, 0.0601883, 1.00936, 0.994705, - 0.0384977, 0.0542501, 1.02559, 0.995495, - 0.0340956, 0.0479862, 1.04083, 0.996206, - 0.030105, 0.041887, 1.05497, 0.996971, - 0.0256095, 0.0355355, 1.06824, 0.997796, - 0.0213932, 0.0293655, 1.08056, 0.998272, - 0.0169612, 0.0232926, 1.09182, 0.998857, - 0.0126756, 0.0172786, 1.10219, 0.99939, - 0.00832486, 0.0113156, 1.11192, 0.999752, - 0.00410826, 0.00557892, 1.12075, 1, 0.000150957, - 0.000119101, 1.12885, 0.975169, - 3.09397e-06, 0.154669, 1.95073e-05, 0.975439, - 7.79608e-05, 0.154712, 0.000491534, 0.975464, - 0.000311847, 0.154716, 0.00196617, 0.975464, - 0.000701656, 0.154716, 0.00442387, 0.975462, - 0.0012474, 0.154715, 0.0078647, 0.975461, - 0.00194906, 0.154715, 0.0122886, 0.975464, - 0.00280667, 0.154715, 0.0176959, 0.975468, - 0.00382025, 0.154716, 0.0240867, 0.975471, - 0.00498985, 0.154716, 0.0314612, 0.975472, - 0.00631541, 0.154717, 0.0398199, 0.975486, - 0.00779719, 0.154718, 0.0491639, 0.975489, - 0.00943505, 0.154718, 0.0594932, 0.975509, - 0.0112295, 0.154721, 0.0708113, 0.97554, - 0.0131802, 0.154724, 0.0831176, 0.975557, - 0.0152876, 0.154726, 0.096415, 0.975585, - 0.0175512, 0.154728, 0.110705, 0.975605, - 0.0199713, 0.154729, 0.125992, 0.975645, - 0.0225447, 0.154729, 0.142272, 0.975711, - 0.0252649, 0.154735, 0.159549, 0.975788, - 0.0280986, 0.154736, 0.177805, 0.975872, - 0.0308232, 0.154704, 0.196911, 0.975968, - 0.0324841, 0.154525, 0.216324, 0.976063, - 0.0351281, 0.154432, 0.236628, 0.976157, - 0.0388618, 0.15446, 0.257539, 0.976204, - 0.0437704, 0.154665, 0.278975, 0.976358, - 0.047514, 0.154652, 0.302606, 0.976571, - 0.0508638, 0.154535, 0.327204, 0.976725, - 0.0534995, 0.154221, 0.352276, 0.977013, - 0.0555547, 0.153737, 0.377696, 0.977294, - 0.0586728, 0.153403, 0.403855, 0.977602, - 0.0622715, 0.15312, 0.430333, 0.977932, - 0.0658166, 0.152755, 0.456855, 0.978241, - 0.0689877, 0.152233, 0.483668, 0.978602, - 0.0712805, 0.15132, 0.512097, 0.979234, - 0.0732775, 0.150235, 0.540455, 0.97977, - 0.075163, 0.148978, 0.568486, 0.979995, - 0.0778026, 0.147755, 0.596524, 0.98078, - 0.0791854, 0.146019, 0.624825, 0.981628, - 0.0799666, 0.143906, 0.653403, 0.982067, - 0.0808532, 0.141561, 0.681445, 0.98271, - 0.0816024, 0.139025, 0.708918, 0.983734, - 0.0812511, 0.135764, 0.736594, 0.98431, - 0.0806201, 0.132152, 0.763576, 0.985071, - 0.0801605, 0.12846, 0.789797, 0.98618, - 0.0784208, 0.124084, 0.815804, 0.986886, - 0.0766643, 0.1193, 0.840869, 0.987485, - 0.0747744, 0.114236, 0.864952, 0.988431, - 0.0716701, 0.108654, 0.888431, 0.988886, - 0.0691609, 0.102994, 0.910963, 0.990024, - 0.0654048, 0.0967278, 0.932629, 0.990401, - 0.0619765, 0.090384, 0.95313, 0.991093, - 0.0579296, 0.0837885, 0.972587, 0.992018, - 0.0536576, 0.0770171, 0.991184, 0.992536, - 0.0493719, 0.0701486, 1.00863, 0.993421, - 0.0444813, 0.062953, 1.02494, 0.993928, - 0.040008, 0.0560455, 1.04017, 0.994994, - 0.0347982, 0.04856, 1.05463, 0.995866, - 0.0301017, 0.0416152, 1.06807, 0.996916, - 0.0248225, 0.0342597, 1.08039, 0.997766, - 0.0199229, 0.0271668, 1.09177, 0.998479, - 0.0147422, 0.0201387, 1.10235, 0.99921, - 0.00980173, 0.0131944, 1.11206, 0.999652, - 0.0047426, 0.00640712, 1.12104, 0.999998, 8.91673e-05, - 0.00010379, 1.12906, 0.967868, - 3.51885e-06, 0.175947, 1.93569e-05, 0.968001, - 8.86733e-05, 0.175972, 0.000487782, 0.96801, - 0.000354697, 0.175973, 0.00195115, 0.968012, - 0.000798063, 0.175974, 0.00439006, 0.968011, - 0.00141879, 0.175973, 0.00780461, 0.968011, - 0.00221686, 0.175973, 0.0121948, 0.968016, - 0.00319231, 0.175974, 0.0175607, 0.968019, - 0.00434515, 0.175974, 0.0239027, 0.968018, - 0.00567538, 0.175974, 0.0312208, 0.968033, - 0.00718308, 0.175977, 0.0395158, 0.968049, - 0.00886836, 0.175979, 0.0487885, 0.968047, - 0.0107312, 0.175978, 0.0590394, 0.968072, - 0.0127719, 0.175981, 0.0702705, 0.968108, - 0.0149905, 0.175986, 0.0824836, 0.968112, - 0.0173866, 0.175985, 0.0956783, 0.968173, - 0.0199611, 0.175993, 0.109862, 0.96827, - 0.0227128, 0.176008, 0.125033, 0.968292, - 0.025639, 0.17601, 0.141193, 0.968339, - 0.0287299, 0.176007, 0.158336, 0.968389, - 0.0319399, 0.176001, 0.176441, 0.968501, - 0.034941, 0.175962, 0.195359, 0.968646, - 0.0370812, 0.175793, 0.214686, 0.968789, - 0.0402329, 0.175708, 0.234973, 0.96886, - 0.0442601, 0.1757, 0.255871, 0.969013, - 0.049398, 0.175876, 0.277238, 0.969242, - 0.0539932, 0.17594, 0.300326, 0.969419, - 0.0577299, 0.175781, 0.324702, 0.969763, - 0.0605643, 0.175432, 0.349527, 0.970093, - 0.0634488, 0.174992, 0.374976, 0.970361, - 0.0670589, 0.174611, 0.401097, 0.970825, - 0.0708246, 0.174226, 0.427496, 0.971214, - 0.0742871, 0.173684, 0.453858, 0.971622, - 0.0782608, 0.173186, 0.480637, 0.972175, - 0.0813151, 0.172288, 0.508655, 0.972944, - 0.0832678, 0.170979, 0.536973, 0.973595, - 0.0855964, 0.169573, 0.565138, 0.974345, - 0.0882163, 0.168152, 0.593222, 0.975233, - 0.0901671, 0.166314, 0.621201, 0.976239, - 0.0912111, 0.163931, 0.649919, 0.977289, - 0.0916959, 0.161106, 0.678011, 0.978076, - 0.0927061, 0.158272, 0.705717, 0.979533, - 0.0925562, 0.15475, 0.733228, 0.980335, - 0.0918159, 0.150638, 0.760454, 0.981808, - 0.0908508, 0.146201, 0.786918, 0.983061, - 0.0896172, 0.141386, 0.812953, 0.984148, - 0.0871588, 0.135837, 0.838281, 0.985047, - 0.0850624, 0.130135, 0.862594, 0.986219, - 0.0818541, 0.123882, 0.88633, 0.987043, - 0.0784523, 0.117126, 0.908952, 0.988107, - 0.0749601, 0.110341, 0.930744, 0.988955, - 0.0703548, 0.102885, 0.951728, 0.989426, - 0.0662798, 0.0954167, 0.971166, 0.990421, - 0.0610834, 0.0876331, 0.989984, 0.991032, - 0.0562936, 0.0797785, 1.00765, 0.992041, - 0.0508154, 0.0718166, 1.02434, 0.992794, - 0.0454045, 0.0637125, 1.03976, 0.993691, - 0.0398194, 0.0555338, 1.05418, 0.994778, - 0.0341482, 0.0473388, 1.06772, 0.995915, - 0.028428, 0.0391016, 1.08028, 0.997109, - 0.022642, 0.0309953, 1.09185, 0.998095, - 0.0168738, 0.0230288, 1.10247, 0.998985, - 0.0111274, 0.0150722, 1.11229, 0.999581, - 0.00543881, 0.00740605, 1.12131, 1.00003, 0.000162239, - 0.000105549, 1.12946, 0.959505, - 3.93734e-06, 0.196876, 1.91893e-05, 0.959599, - 9.92157e-05, 0.196895, 0.000483544, 0.959641, - 0.000396868, 0.196903, 0.0019342, 0.959599, - 0.000892948, 0.196895, 0.00435193, 0.959603, - 0.00158747, 0.196896, 0.0077368, 0.959604, - 0.00248042, 0.196896, 0.0120888, 0.959605, - 0.00357184, 0.196896, 0.0174082, 0.959605, - 0.00486169, 0.196896, 0.0236949, 0.959613, - 0.00635008, 0.196897, 0.0309497, 0.959619, - 0.00803696, 0.196898, 0.0391725, 0.959636, - 0.00992255, 0.196901, 0.0483649, 0.959634, - 0.0120067, 0.1969, 0.0585266, 0.959675, - 0.0142898, 0.196906, 0.0696609, 0.959712, - 0.0167717, 0.196911, 0.0817678, 0.959752, - 0.0194524, 0.196918, 0.0948494, 0.959807, - 0.0223321, 0.196925, 0.10891, 0.959828, - 0.0254091, 0.196924, 0.123947, 0.959906, - 0.0286815, 0.196934, 0.139968, 0.960005, - 0.0321371, 0.196944, 0.156968, 0.960071, - 0.0357114, 0.196936, 0.17491, 0.960237, - 0.0389064, 0.196882, 0.193597, 0.960367, - 0.041623, 0.196731, 0.21285, 0.960562, - 0.0452655, 0.196654, 0.233075, 0.960735, - 0.0496207, 0.196643, 0.253941, 0.960913, - 0.0549379, 0.196774, 0.275278, 0.961121, - 0.0603414, 0.196893, 0.297733, 0.96139, - 0.0644244, 0.196717, 0.321877, 0.961818, - 0.067556, 0.196314, 0.346476, 0.962175, - 0.0712709, 0.195917, 0.371907, 0.96255, - 0.0752848, 0.1955, 0.397916, 0.963164, - 0.0792073, 0.195026, 0.424229, 0.963782, - 0.0828225, 0.194424, 0.450637, 0.964306, - 0.0873119, 0.193831, 0.477288, 0.964923, - 0.0911051, 0.192973, 0.504716, 0.966048, - 0.093251, 0.19151, 0.533053, 0.967024, - 0.0958983, 0.190013, 0.561366, 0.968038, - 0.09835, 0.188253, 0.589464, 0.969152, - 0.100754, 0.186257, 0.617433, 0.970557, - 0.102239, 0.183775, 0.645801, 0.972104, - 0.102767, 0.180645, 0.674278, 0.973203, - 0.103492, 0.177242, 0.702004, 0.975123, - 0.103793, 0.17345, 0.729529, 0.97641, - 0.102839, 0.168886, 0.756712, 0.978313, - 0.101687, 0.163892, 0.783801, 0.980036, - 0.100314, 0.158439, 0.809671, 0.981339, - 0.097836, 0.152211, 0.835402, 0.982794, - 0.0950006, 0.145679, 0.860081, 0.984123, - 0.0920994, 0.138949, 0.883757, 0.984918, - 0.0878641, 0.131283, 0.90685, 0.985999, - 0.083939, 0.123464, 0.928786, 0.987151, - 0.0791234, 0.115324, 0.94983, 0.987827, - 0.0739332, 0.106854, 0.96962, 0.988806, - 0.0688088, 0.0982691, 0.98861, 0.989588, - 0.0628962, 0.0893456, 1.00667, 0.990438, - 0.0573146, 0.0805392, 1.02344, 0.991506, - 0.0509433, 0.0713725, 1.03933, 0.992492, - 0.0448724, 0.0623732, 1.05378, 0.993663, - 0.0383497, 0.0530838, 1.06747, 0.994956, - 0.0319593, 0.0439512, 1.08007, 0.99634, - 0.025401, 0.0347803, 1.09182, 0.99761, - 0.0189687, 0.0257954, 1.1025, 0.99863, - 0.0124441, 0.0169893, 1.11247, 0.99947, - 0.00614003, 0.00829498, 1.12151, 1.00008, 0.000216624, - 0.000146107, 1.12993, 0.950129, - 4.34955e-06, 0.217413, 1.90081e-05, 0.950264, - 0.00010957, 0.217444, 0.00047884, 0.9503, - 0.000438299, 0.217451, 0.00191543, 0.950246, - 0.000986124, 0.21744, 0.00430951, 0.950246, - 0.00175311, 0.21744, 0.00766137, 0.950245, - 0.00273923, 0.21744, 0.011971, 0.950253, - 0.00394453, 0.217441, 0.0172385, 0.950258, - 0.00536897, 0.217442, 0.0234641, 0.950267, - 0.00701262, 0.217444, 0.030648, 0.950277, - 0.00887551, 0.217446, 0.038791, 0.950284, - 0.0109576, 0.217446, 0.0478931, 0.950312, - 0.0132591, 0.217451, 0.0579568, 0.950334, - 0.01578, 0.217454, 0.0689821, 0.950378, - 0.0185204, 0.217462, 0.0809714, 0.950417, - 0.0214803, 0.217467, 0.0939265, 0.950488, - 0.0246594, 0.217479, 0.10785, 0.950534, - 0.0280565, 0.217483, 0.122743, 0.950633, - 0.0316685, 0.217498, 0.138611, 0.950698, - 0.0354787, 0.217499, 0.155442, 0.950844, - 0.0394003, 0.217507, 0.173208, 0.950999, - 0.0426812, 0.217419, 0.191605, 0.951221, - 0.0461302, 0.217317, 0.21084, 0.951412, - 0.0502131, 0.217238, 0.230945, 0.951623, - 0.0549183, 0.21722, 0.251745, 0.951867, - 0.0604493, 0.217306, 0.273001, 0.952069, - 0.0665189, 0.217466, 0.294874, 0.952459, - 0.0709179, 0.217266, 0.318732, 0.952996, - 0.0746112, 0.216891, 0.34318, 0.953425, - 0.0789252, 0.216503, 0.36849, 0.953885, - 0.0833293, 0.216042, 0.394373, 0.954617, - 0.087371, 0.215469, 0.420505, 0.955429, - 0.0914054, 0.214802, 0.446907, 0.956068, - 0.0961671, 0.214146, 0.473522, 0.957094, - 0.10048, 0.213286, 0.50052, 0.958372, - 0.103248, 0.211796, 0.528715, 0.959654, - 0.106033, 0.21016, 0.557065, 0.961305, - 0.108384, 0.208149, 0.585286, 0.962785, - 0.111122, 0.206024, 0.613334, 0.964848, - 0.112981, 0.203442, 0.641334, 0.966498, - 0.113717, 0.19996, 0.669955, 0.968678, - 0.114121, 0.196105, 0.698094, 0.970489, - 0.114524, 0.191906, 0.725643, 0.972903, - 0.113792, 0.186963, 0.752856, 0.974701, - 0.112406, 0.181343, 0.780013, 0.976718, - 0.110685, 0.175185, 0.806268, 0.978905, - 0.108468, 0.168535, 0.832073, 0.980267, - 0.105061, 0.161106, 0.857149, 0.981967, - 0.101675, 0.153387, 0.881145, 0.983063, - 0.0974492, 0.145199, 0.904255, 0.984432, - 0.0925815, 0.136527, 0.926686, 0.985734, - 0.0877983, 0.127584, 0.947901, 0.986228, - 0.081884, 0.118125, 0.968111, 0.98719, - 0.0761208, 0.108594, 0.98719, 0.988228, - 0.0698196, 0.0989996, 1.00559, 0.989046, - 0.0632739, 0.0890074, 1.02246, 0.990242, - 0.056522, 0.0790832, 1.03841, 0.991252, - 0.0495272, 0.0689182, 1.05347, 0.992542, - 0.0425373, 0.0588592, 1.06724, 0.994096, - 0.0353198, 0.0486833, 1.08009, 0.995593, - 0.028235, 0.0385977, 1.09177, 0.99711, - 0.0209511, 0.0286457, 1.10274, 0.998263, - 0.0139289, 0.0188497, 1.11262, 0.999254, - 0.0067359, 0.009208, 1.12191, 0.999967, 0.000141846, - 6.57764e-05, 1.13024, 0.935608, - 4.74692e-06, 0.236466, 1.87817e-05, 0.93996, - 0.00011971, 0.237568, 0.000473646, 0.939959, - 0.000478845, 0.237567, 0.0018946, 0.939954, - 0.0010774, 0.237566, 0.00426284, 0.939956, - 0.00191538, 0.237566, 0.00757842, 0.939954, - 0.00299277, 0.237566, 0.0118413, 0.93996, - 0.00430961, 0.237567, 0.0170518, 0.939969, - 0.00586589, 0.237569, 0.02321, 0.939982, - 0.00766166, 0.237572, 0.0303164, 0.939987, - 0.00969686, 0.237572, 0.0383711, 0.939997, - 0.0119715, 0.237574, 0.0473751, 0.940031, - 0.0144858, 0.237581, 0.0573298, 0.940073, - 0.0172399, 0.237589, 0.0682366, 0.94012, - 0.0202335, 0.237598, 0.080097, 0.940162, - 0.0234663, 0.237604, 0.0929116, 0.940237, - 0.0269387, 0.237615, 0.106686, 0.940328, - 0.0306489, 0.237632, 0.121421, 0.940419, - 0.0345917, 0.237645, 0.137115, 0.940522, - 0.0387481, 0.237654, 0.153766, 0.940702, - 0.0429906, 0.237661, 0.17133, 0.940871, - 0.0465089, 0.237561, 0.189502, 0.941103, - 0.050531, 0.23748, 0.208616, 0.941369, - 0.0550657, 0.237423, 0.228595, 0.941641, - 0.0601337, 0.237399, 0.249287, 0.941903, - 0.0658804, 0.237443, 0.270467, 0.942224, - 0.0722674, 0.237597, 0.292024, 0.942633, - 0.0771788, 0.237419, 0.315272, 0.943172, - 0.0815623, 0.237068, 0.339579, 0.943691, - 0.0863973, 0.236682, 0.364717, 0.944382, - 0.0911536, 0.236213, 0.390435, 0.945392, - 0.0952967, 0.235562, 0.416425, 0.946185, - 0.0998948, 0.234832, 0.442772, 0.947212, - 0.104796, 0.234114, 0.469347, 0.948778, - 0.10928, 0.233222, 0.496162, 0.950149, - 0.113081, 0.231845, 0.523978, 0.951989, - 0.115893, 0.230005, 0.552295, 0.953921, - 0.11846, 0.227862, 0.580569, 0.955624, - 0.12115, 0.225439, 0.608698, 0.958234, - 0.123373, 0.222635, 0.636696, 0.960593, - 0.124519, 0.219093, 0.665208, 0.963201, - 0.124736, 0.214749, 0.693557, 0.965642, - 0.125012, 0.210059, 0.721334, 0.968765, - 0.124661, 0.204935, 0.748613, 0.971753, - 0.122996, 0.198661, 0.776224, 0.973751, - 0.120998, 0.191823, 0.802461, 0.976709, - 0.118583, 0.184359, 0.828399, 0.977956, - 0.115102, 0.176437, 0.853693, 0.979672, - 0.111077, 0.167681, 0.877962, 0.981816, - 0.10688, 0.158872, 0.901564, 0.98238, - 0.101469, 0.149398, 0.924057, 0.983964, - 0.0960013, 0.139436, 0.945751, 0.984933, - 0.0899626, 0.12943, 0.966272, 0.985694, - 0.0832973, 0.11894, 0.985741, 0.986822, - 0.0767082, 0.108349, 1.00407, 0.987725, - 0.0693614, 0.0976026, 1.02154, 0.98877, - 0.06211, 0.086652, 1.03757, 0.990129, - 0.0544143, 0.0756182, 1.05296, 0.991337, - 0.046744, 0.0645753, 1.06683, 0.992978, - 0.0387931, 0.0534683, 1.0798, 0.994676, - 0.030973, 0.0424137, 1.09181, 0.99645, - 0.0230311, 0.0314035, 1.10286, 0.997967, - 0.0152065, 0.0206869, 1.11291, 0.99922, - 0.00744837, 0.010155, 1.12237, 1.00002, 0.000240209, - 7.52767e-05, 1.13089, 0.922948, - 5.15351e-06, 0.255626, 1.86069e-05, 0.928785, - 0.000129623, 0.257244, 0.000468009, 0.928761, - 0.00051849, 0.257237, 0.00187202, 0.928751, - 0.0011666, 0.257235, 0.00421204, 0.928751, - 0.00207395, 0.257234, 0.0074881, 0.928754, - 0.00324055, 0.257235, 0.0117002, 0.92876, - 0.00466639, 0.257236, 0.0168486, 0.928763, - 0.00635149, 0.257237, 0.0229334, 0.928774, - 0.00829584, 0.257239, 0.029955, 0.928791, - 0.0104995, 0.257243, 0.0379139, 0.928804, - 0.0129623, 0.257245, 0.0468108, 0.928847, - 0.0156846, 0.257255, 0.0566473, 0.92889, - 0.0186661, 0.257263, 0.0674246, 0.928924, - 0.0219067, 0.257268, 0.0791433, 0.928989, - 0.0254066, 0.257282, 0.0918076, 0.92909, - 0.0291651, 0.257301, 0.105419, 0.92918, - 0.0331801, 0.257316, 0.119978, 0.92929, - 0.0374469, 0.257332, 0.135491, 0.929453, - 0.041939, 0.257357, 0.151948, 0.929586, - 0.0464612, 0.257347, 0.169275, 0.929858, - 0.0503426, 0.257269, 0.187257, 0.930125, - 0.0548409, 0.257199, 0.206204, 0.930403, - 0.0598063, 0.257149, 0.22601, 0.930726, - 0.0652437, 0.257122, 0.246561, 0.931098, - 0.0712376, 0.257153, 0.267618, 0.931396, - 0.0777506, 0.257237, 0.288993, 0.931947, - 0.0832374, 0.257124, 0.311527, 0.932579, - 0.0883955, 0.25683, 0.335697, 0.933194, - 0.0937037, 0.256444, 0.360634, 0.934013, - 0.0987292, 0.255939, 0.386126, 0.935307, - 0.103215, 0.255282, 0.412018, 0.936374, - 0.108234, 0.254538, 0.438292, 0.93776, - 0.113234, 0.253728, 0.464805, 0.939599, - 0.118013, 0.25275, 0.491464, 0.941036, - 0.122661, 0.251404, 0.518751, 0.94337, - 0.125477, 0.249435, 0.547133, 0.945318, - 0.128374, 0.247113, 0.575456, 0.947995, - 0.130996, 0.244441, 0.60372, 0.950818, - 0.133438, 0.241352, 0.63174, 0.954378, - 0.135004, 0.237849, 0.659971, 0.957151, - 0.135313, 0.233188, 0.688478, 0.960743, - 0.13521, 0.228001, 0.716767, 0.964352, - 0.135007, 0.222249, 0.744349, 0.967273, - 0.133523, 0.21542, 0.771786, 0.969767, - 0.131155, 0.208039, 0.798639, 0.973195, - 0.128492, 0.200076, 0.824774, 0.975557, - 0.125094, 0.191451, 0.850222, 0.977692, - 0.120578, 0.18184, 0.874761, 0.98026, - 0.115882, 0.172102, 0.898497, 0.981394, - 0.110372, 0.161859, 0.921636, 0.982386, - 0.10415, 0.15108, 0.943467, 0.983783, - 0.0978128, 0.140407, 0.964045, 0.98422, - 0.0906171, 0.129058, 0.98398, 0.985447, - 0.0832921, 0.117614, 1.00276, 0.986682, - 0.0754412, 0.10585, 1.02047, 0.987326, - 0.0673885, 0.0940943, 1.03678, 0.988707, - 0.0592565, 0.0822093, 1.05218, 0.990185, - 0.050717, 0.070192, 1.06652, 0.991866, - 0.0423486, 0.0582081, 1.07965, 0.993897, - 0.0336118, 0.0460985, 1.09188, 0.995841, - 0.0252178, 0.0342737, 1.10307, 0.997605, - 0.0164893, 0.0224829, 1.11324, 0.999037, - 0.00817112, 0.0110647, 1.12262, 1.00003, 0.000291686, - 0.000168673, 1.13139, 0.915304, - 5.52675e-06, 0.275999, 1.83285e-05, 0.91668, - 0.000139285, 0.276414, 0.000461914, 0.916664, - 0.00055713, 0.276409, 0.00184763, 0.916653, - 0.00125354, 0.276406, 0.00415715, 0.916651, - 0.00222851, 0.276405, 0.00739053, 0.916655, - 0.00348205, 0.276406, 0.0115478, 0.916653, - 0.00501414, 0.276405, 0.0166291, 0.916667, - 0.00682478, 0.276409, 0.0226346, 0.91668, - 0.00891398, 0.276412, 0.0295648, 0.91669, - 0.0112817, 0.276413, 0.0374199, 0.916727, - 0.013928, 0.276422, 0.0462016, 0.916759, - 0.0168528, 0.276429, 0.0559101, 0.916793, - 0.0200558, 0.276436, 0.0665466, 0.916849, - 0.0235373, 0.276448, 0.0781139, 0.916964, - 0.0272973, 0.276474, 0.0906156, 0.917047, - 0.0313344, 0.276491, 0.104051, 0.917152, - 0.0356465, 0.276511, 0.118424, 0.917286, - 0.0402271, 0.276533, 0.133736, 0.917469, - 0.0450408, 0.276564, 0.149978, 0.917686, - 0.0497872, 0.276563, 0.167057, 0.917953, - 0.0540937, 0.276493, 0.184846, 0.918228, - 0.0590709, 0.276437, 0.203614, 0.918572, - 0.0644277, 0.276398, 0.223212, 0.918918, - 0.0702326, 0.276362, 0.243584, 0.919356, - 0.076484, 0.276383, 0.264465, 0.919842, - 0.0830808, 0.276434, 0.285701, 0.920451, - 0.0892972, 0.276407, 0.307559, 0.921113, - 0.095016, 0.276128, 0.331501, 0.921881, - 0.100771, 0.275754, 0.356207, 0.923027, - 0.106029, 0.275254, 0.381477, 0.924364, - 0.111029, 0.274595, 0.40722, 0.925818, - 0.116345, 0.273841, 0.433385, 0.92746, - 0.121424, 0.272913, 0.459848, 0.929167, - 0.12657, 0.271837, 0.486493, 0.931426, - 0.131581, 0.270575, 0.513432, 0.934001, - 0.135038, 0.268512, 0.541502, 0.936296, - 0.138039, 0.266135, 0.569658, 0.939985, - 0.140687, 0.263271, 0.598375, 0.943516, - 0.143247, 0.260058, 0.626563, 0.94782, - 0.145135, 0.256138, 0.654711, 0.951023, - 0.145733, 0.251154, 0.683285, 0.955338, - 0.145554, 0.245562, 0.711831, 0.959629, - 0.145008, 0.239265, 0.739573, 0.963123, - 0.144003, 0.232064, 0.767027, 0.966742, - 0.141289, 0.224036, 0.794359, 0.969991, - 0.138247, 0.215305, 0.820361, 0.973403, - 0.134786, 0.206051, 0.846548, 0.975317, - 0.129966, 0.195914, 0.871541, 0.977647, - 0.12471, 0.185184, 0.895313, 0.980137, - 0.119086, 0.174161, 0.918398, 0.981031, - 0.112297, 0.162792, 0.940679, 0.982037, - 0.105372, 0.150952, 0.961991, 0.983164, - 0.097821, 0.138921, 0.981913, 0.983757, - 0.0897245, 0.126611, 1.00109, 0.985036, - 0.0815974, 0.114228, 1.01902, 0.986289, - 0.0727725, 0.101389, 1.03604, 0.987329, - 0.0639323, 0.0886476, 1.05149, 0.989193, - 0.0548109, 0.0756837, 1.06619, 0.990716, - 0.045687, 0.0627581, 1.07948, 0.992769, - 0.0364315, 0.0498337, 1.09172, 0.99524, - 0.0271761, 0.0370305, 1.1033, 0.997154, - 0.0179609, 0.0243959, 1.11353, 0.998845, - 0.00878063, 0.0119567, 1.12319, 1.00002, 0.000259038, - 0.000108146, 1.13177, 0.903945, - 5.91681e-06, 0.295126, 1.81226e-05, 0.903668, - 0.000148672, 0.295037, 0.000455367, 0.903677, - 0.000594683, 0.29504, 0.00182145, 0.903673, - 0.00133805, 0.295039, 0.00409831, 0.903666, - 0.00237872, 0.295036, 0.00728584, 0.903668, - 0.00371676, 0.295037, 0.0113842, 0.903679, - 0.00535212, 0.29504, 0.0163936, 0.903684, - 0.00728479, 0.295041, 0.0223141, 0.903698, - 0.00951473, 0.295044, 0.0291462, 0.903718, - 0.0120419, 0.295049, 0.0368904, 0.903754, - 0.0148664, 0.295058, 0.0455477, 0.903801, - 0.017988, 0.29507, 0.0551194, 0.903851, - 0.0214064, 0.295082, 0.0656058, 0.903921, - 0.0251219, 0.295097, 0.0770109, 0.904002, - 0.0291337, 0.295116, 0.0893354, 0.904111, - 0.033441, 0.29514, 0.102583, 0.904246, - 0.0380415, 0.295169, 0.116755, 0.904408, - 0.0429258, 0.295202, 0.131853, 0.904637, - 0.0480468, 0.295245, 0.147869, 0.904821, - 0.0529208, 0.295214, 0.164658, 0.905163, - 0.0577748, 0.295185, 0.182274, 0.905469, - 0.0631763, 0.295143, 0.200828, 0.905851, - 0.068917, 0.295112, 0.2202, 0.906322, - 0.0750861, 0.295104, 0.240372, 0.906761, - 0.0815855, 0.295086, 0.261082, 0.90735, - 0.0882138, 0.295095, 0.282123, 0.908087, - 0.095082, 0.295139, 0.303563, 0.908826, - 0.101488, 0.29492, 0.327028, 0.909832, - 0.107577, 0.294577, 0.351464, 0.911393, - 0.113033, 0.294115, 0.376497, 0.912804, - 0.118629, 0.293446, 0.402115, 0.914081, - 0.124232, 0.292581, 0.428111, 0.91637, - 0.129399, 0.29166, 0.454442, 0.91814, - 0.134892, 0.290422, 0.481024, 0.921179, - 0.140069, 0.289194, 0.507924, 0.924544, - 0.144431, 0.287421, 0.535557, 0.927995, - 0.147498, 0.284867, 0.563984, 0.931556, - 0.150197, 0.281722, 0.5923, 0.935777, - 0.152711, 0.278207, 0.620832, 0.940869, - 0.154836, 0.274148, 0.649069, 0.945994, - 0.155912, 0.269057, 0.677746, 0.949634, - 0.155641, 0.262799, 0.706293, 0.955032, - 0.154809, 0.256097, 0.734278, 0.95917, - 0.153678, 0.248618, 0.761751, 0.962931, - 0.151253, 0.239794, 0.789032, 0.966045, - 0.147625, 0.230281, 0.815422, 0.96971, - 0.143964, 0.220382, 0.841787, 0.972747, - 0.139464, 0.209846, 0.867446, 0.975545, - 0.133459, 0.198189, 0.892004, 0.978381, - 0.127424, 0.186362, 0.915458, 0.979935, - 0.120506, 0.173964, 0.937948, 0.980948, - 0.11282, 0.161429, 0.959732, 0.982234, - 0.104941, 0.148557, 0.980118, 0.982767, - 0.0962905, 0.135508, 0.999463, 0.983544, - 0.0873625, 0.122338, 1.01756, 0.984965, - 0.0783447, 0.108669, 1.03492, 0.986233, - 0.0684798, 0.0949911, 1.05087, 0.987796, - 0.0590867, 0.0811386, 1.0656, 0.989885, - 0.0489145, 0.0673099, 1.0794, 0.991821, - 0.0391, 0.0535665, 1.09174, 0.99448, - 0.029087, 0.0397529, 1.10341, 0.996769, - 0.019114, 0.0261463, 1.11383, 0.998641, - 0.00947007, 0.0128731, 1.1237, 0.999978, 0.000446316, - 0.000169093, 1.13253, 0.888362, - 6.27064e-06, 0.312578, 1.78215e-05, 0.889988, - 0.000157791, 0.313148, 0.000448451, 0.889825, - 0.000631076, 0.313092, 0.00179356, 0.88984, - 0.00141994, 0.313097, 0.00403554, 0.889828, - 0.0025243, 0.313092, 0.00717429, 0.889831, - 0.00394421, 0.313093, 0.0112099, 0.889831, - 0.00567962, 0.313093, 0.0161425, 0.889844, - 0.00773051, 0.313096, 0.0219724, 0.889858, - 0.0100968, 0.3131, 0.0286999, 0.889882, - 0.0127786, 0.313106, 0.0363256, 0.889918, - 0.0157757, 0.313116, 0.0448509, 0.889967, - 0.0190878, 0.313129, 0.0542758, 0.89003, - 0.022715, 0.313145, 0.0646032, 0.890108, - 0.0266566, 0.313165, 0.0758339, 0.890218, - 0.0309131, 0.313193, 0.0879729, 0.890351, - 0.0354819, 0.313226, 0.101019, 0.89051, - 0.0403613, 0.313263, 0.114979, 0.890672, - 0.0455385, 0.313294, 0.129848, 0.890882, - 0.0509444, 0.313333, 0.145616, 0.891189, - 0.0559657, 0.313324, 0.162122, 0.891457, - 0.0613123, 0.313281, 0.179524, 0.891856, - 0.0671488, 0.313281, 0.197855, 0.892312, - 0.0732732, 0.313268, 0.216991, 0.892819, - 0.0797865, 0.313263, 0.236924, 0.893369, - 0.0865269, 0.313247, 0.257433, 0.894045, - 0.0931592, 0.313205, 0.278215, 0.894884, - 0.100532, 0.313276, 0.299467, 0.895832, - 0.107716, 0.313205, 0.322276, 0.897043, - 0.114099, 0.312873, 0.34642, 0.898515, - 0.119941, 0.312331, 0.371187, 0.900191, - 0.126044, 0.311731, 0.396656, 0.90188, - 0.131808, 0.310859, 0.422488, 0.904359, - 0.137289, 0.309857, 0.448744, 0.906923, - 0.142991, 0.308714, 0.475239, 0.910634, - 0.148253, 0.307465, 0.501983, 0.914502, - 0.153332, 0.305774, 0.529254, 0.919046, - 0.156646, 0.303156, 0.557709, 0.923194, - 0.159612, 0.299928, 0.586267, 0.928858, - 0.162027, 0.296245, 0.614925, 0.934464, - 0.164203, 0.291832, 0.643187, 0.939824, - 0.165602, 0.286565, 0.671601, 0.944582, - 0.165383, 0.280073, 0.700213, 0.949257, - 0.164439, 0.272891, 0.728432, 0.954389, - 0.162953, 0.264771, 0.756082, 0.958595, - 0.161007, 0.255927, 0.78369, 0.962138, - 0.157243, 0.245769, 0.810769, 0.966979, - 0.152872, 0.235127, 0.836999, 0.969566, - 0.148209, 0.22347, 0.862684, 0.972372, - 0.142211, 0.211147, 0.887847, 0.975916, - 0.135458, 0.198606, 0.911843, 0.978026, - 0.128398, 0.185498, 0.934795, 0.979686, - 0.120313, 0.17171, 0.956787, 0.980748, - 0.11166, 0.158159, 0.978046, 0.981622, - 0.103035, 0.144399, 0.997693, 0.982356, - 0.0930328, 0.13001, 1.01642, 0.983308, - 0.0834627, 0.115778, 1.03366, 0.985037, - 0.0732249, 0.101327, 1.05014, 0.986493, - 0.0628145, 0.086554, 1.06507, 0.988484, - 0.0526556, 0.0720413, 1.07907, 0.991051, - 0.0415744, 0.0571151, 1.09189, 0.993523, - 0.0314275, 0.0426643, 1.10369, 0.99628, - 0.0203603, 0.0279325, 1.11423, 0.998344, - 0.0102446, 0.0138182, 1.12421, 0.999997, 0.00042612, - 0.000193628, 1.1333, 0.871555, - 6.60007e-06, 0.329176, 1.74749e-05, 0.875255, - 0.000166579, 0.330571, 0.000441051, 0.875644, - 0.000666394, 0.330718, 0.00176441, 0.875159, - 0.00149903, 0.330536, 0.00396899, 0.87516, - 0.00266493, 0.330536, 0.007056, 0.875158, - 0.00416393, 0.330535, 0.0110251, 0.87516, - 0.00599598, 0.330535, 0.0158764, 0.875163, - 0.00816108, 0.330536, 0.0216101, 0.875174, - 0.0106591, 0.330538, 0.0282266, 0.875199, - 0.0134899, 0.330545, 0.0357266, 0.875257, - 0.0166538, 0.330563, 0.0441117, 0.875304, - 0.0201501, 0.330575, 0.0533821, 0.875373, - 0.0239785, 0.330595, 0.0635395, 0.875464, - 0.0281389, 0.330619, 0.0745872, 0.875565, - 0.0326301, 0.330645, 0.0865255, 0.875691, - 0.0374516, 0.330676, 0.0993599, 0.875897, - 0.0425993, 0.330733, 0.113093, 0.876091, - 0.0480576, 0.330776, 0.127722, 0.876353, - 0.0537216, 0.330826, 0.143227, 0.876649, - 0.0589807, 0.330809, 0.159462, 0.877034, - 0.0647865, 0.330819, 0.176642, 0.877443, - 0.0709789, 0.330817, 0.194702, 0.877956, - 0.0774782, 0.330832, 0.213577, 0.878499, - 0.0843175, 0.330822, 0.233246, 0.879144, - 0.0912714, 0.330804, 0.253512, 0.879982, - 0.0980824, 0.330766, 0.274137, 0.88097, - 0.105823, 0.330864, 0.295209, 0.882051, - 0.113671, 0.330896, 0.317226, 0.883397, - 0.120303, 0.330545, 0.341068, 0.884987, - 0.12667, 0.330068, 0.365613, 0.886789, - 0.133118, 0.329418, 0.390807, 0.889311, - 0.139024, 0.328683, 0.416494, 0.891995, - 0.144971, 0.327729, 0.442618, 0.895106, - 0.150747, 0.326521, 0.469131, 0.899527, - 0.156283, 0.325229, 0.495921, 0.90504, - 0.161707, 0.32378, 0.523162, 0.909875, - 0.165661, 0.32122, 0.55092, 0.91561, - 0.168755, 0.317942, 0.579928, 0.921225, - 0.171193, 0.313983, 0.608539, 0.927308, - 0.17319, 0.309636, 0.636854, 0.933077, - 0.174819, 0.304262, 0.66523, 0.938766, - 0.175002, 0.297563, 0.693609, 0.943667, - 0.173946, 0.289613, 0.722157, 0.949033, - 0.172221, 0.281227, 0.750021, 0.953765, - 0.169869, 0.271545, 0.777466, 0.95804, - 0.166578, 0.261034, 0.804853, 0.962302, - 0.161761, 0.249434, 0.831569, 0.966544, - 0.156636, 0.237484, 0.857779, 0.969372, - 0.150784, 0.224395, 0.883051, 0.972486, - 0.143672, 0.210786, 0.907864, 0.975853, - 0.135772, 0.196556, 0.931223, 0.977975, - 0.127942, 0.182307, 0.954061, 0.979122, - 0.118347, 0.167607, 0.97531, 0.980719, - 0.109112, 0.152739, 0.995666, 0.981223, - 0.0991789, 0.137932, 1.01475, 0.98216, - 0.0883553, 0.122692, 1.03253, 0.983379, - 0.0780825, 0.107493, 1.04917, 0.985434, - 0.0665646, 0.0917791, 1.06464, 0.987332, - 0.0557714, 0.0764949, 1.07896, 0.990004, - 0.0442805, 0.060721, 1.09199, 0.992975, - 0.0331676, 0.0452284, 1.10393, 0.995811, - 0.0219547, 0.0297934, 1.11476, 0.9982, - 0.0107613, 0.0146415, 1.12484, 1.00002, 0.000248678, - 0.00014555, 1.13413, 0.859519, - 6.93595e-06, 0.347264, 1.71673e-05, 0.859843, - 0.00017503, 0.347394, 0.000433219, 0.859656, - 0.000700076, 0.347319, 0.00173277, 0.859671, - 0.00157517, 0.347325, 0.00389875, 0.859669, - 0.00280028, 0.347324, 0.00693112, 0.85967, - 0.0043754, 0.347324, 0.01083, 0.859665, - 0.00630049, 0.347321, 0.0155954, 0.859685, - 0.0085755, 0.347328, 0.0212278, 0.859694, - 0.0112003, 0.347329, 0.0277273, 0.859718, - 0.0141747, 0.347336, 0.0350946, 0.85976, - 0.0174988, 0.347348, 0.0433314, 0.85982, - 0.0211722, 0.347366, 0.0524384, 0.859892, - 0.0251941, 0.347387, 0.0624168, 0.860006, - 0.0295649, 0.347422, 0.0732708, 0.860122, - 0.0342825, 0.347453, 0.0849999, 0.860282, - 0.0393462, 0.347499, 0.0976102, 0.860482, - 0.0447513, 0.347554, 0.111104, 0.860719, - 0.0504775, 0.347614, 0.125479, 0.860998, - 0.0563577, 0.347666, 0.140703, 0.861322, - 0.0619473, 0.347662, 0.156681, 0.861724, - 0.0681277, 0.347684, 0.173597, 0.862198, - 0.0746567, 0.347709, 0.191371, 0.862733, - 0.0815234, 0.347727, 0.209976, 0.863371, - 0.0886643, 0.347744, 0.229351, 0.86414, - 0.0957908, 0.347734, 0.24934, 0.865138, - 0.102912, 0.34772, 0.269797, 0.866182, - 0.110924, 0.3478, 0.290654, 0.867436, - 0.119223, 0.347911, 0.312074, 0.869087, - 0.126197, 0.347649, 0.335438, 0.870859, - 0.133145, 0.347222, 0.359732, 0.872997, - 0.139869, 0.346645, 0.38467, 0.875939, - 0.146089, 0.345935, 0.41019, 0.879012, - 0.152334, 0.345012, 0.436218, 0.883353, - 0.15821, 0.343924, 0.462641, 0.888362, - 0.164097, 0.342636, 0.489449, 0.895026, - 0.169528, 0.341351, 0.516629, 0.900753, - 0.174408, 0.339115, 0.544109, 0.906814, - 0.17751, 0.335809, 0.572857, 0.912855, - 0.180101, 0.331597, 0.601554, 0.919438, - 0.182116, 0.32698, 0.630198, 0.925962, - 0.183494, 0.321449, 0.658404, 0.931734, - 0.184159, 0.314595, 0.686625, 0.93762, - 0.18304, 0.306462, 0.71531, 0.943858, - 0.181323, 0.297514, 0.744272, 0.948662, - 0.178683, 0.287447, 0.771462, 0.953299, - 0.175379, 0.276166, 0.798593, 0.957346, - 0.170395, 0.263758, 0.8256, 0.962565, - 0.165042, 0.251019, 0.852575, 0.966075, - 0.158655, 0.237011, 0.878316, 0.969048, - 0.151707, 0.222518, 0.90329, 0.972423, - 0.143271, 0.207848, 0.927745, 0.975833, - 0.134824, 0.192463, 0.950859, 0.977629, - 0.125444, 0.1768, 0.972947, 0.978995, - 0.114949, 0.161033, 0.993263, 0.980533, - 0.104936, 0.145523, 1.01337, 0.980745, - 0.0935577, 0.129799, 1.03128, 0.981814, - 0.0822956, 0.113486, 1.04825, 0.983943, - 0.0710082, 0.0972925, 1.06405, 0.986141, - 0.0587931, 0.0808138, 1.0785, 0.988878, - 0.0472755, 0.0644915, 1.09204, 0.992132, - 0.0349128, 0.0478128, 1.10413, 0.9953, - 0.0232407, 0.031621, 1.11527, 0.998117, - 0.0112713, 0.0154935, 1.12551, 1.00003, 0.000339743, - 0.000195763, 1.13504, 0.845441, - 7.29126e-06, 0.364305, 1.69208e-05, 0.843588, - 0.000183164, 0.363506, 0.000425067, 0.843412, - 0.00073253, 0.36343, 0.00169999, 0.843401, - 0.00164818, 0.363426, 0.00382495, 0.843399, - 0.00293008, 0.363425, 0.00679993, 0.843401, - 0.00457822, 0.363425, 0.010625, 0.843394, - 0.00659249, 0.363421, 0.0153002, 0.843398, - 0.00897282, 0.363421, 0.0208258, 0.843415, - 0.0117191, 0.363426, 0.0272024, 0.843438, - 0.0148312, 0.363432, 0.0344305, 0.843483, - 0.018309, 0.363447, 0.0425116, 0.84356, - 0.0221521, 0.363472, 0.0514471, 0.843646, - 0.0263597, 0.363499, 0.061238, 0.843743, - 0.0309315, 0.363527, 0.0718873, 0.84388, - 0.0358658, 0.363569, 0.0833969, 0.844079, - 0.0411624, 0.363631, 0.0957742, 0.844279, - 0.0468128, 0.363688, 0.109015, 0.844549, - 0.0527923, 0.363761, 0.123124, 0.844858, - 0.0588204, 0.363817, 0.138044, 0.84522, - 0.0647573, 0.36383, 0.153755, 0.845669, - 0.0713181, 0.363879, 0.170394, 0.846155, - 0.0781697, 0.363908, 0.187861, 0.846789, - 0.0853913, 0.363969, 0.206176, 0.847502, - 0.0928086, 0.363999, 0.225244, 0.8484, - 0.10005, 0.363997, 0.244926, 0.849461, - 0.107615, 0.364008, 0.265188, 0.850562, - 0.115814, 0.364055, 0.28587, 0.851962, - 0.124334, 0.364179, 0.306926, 0.854326, - 0.131995, 0.364233, 0.329605, 0.856295, - 0.139338, 0.363856, 0.35359, 0.858857, - 0.146346, 0.363347, 0.37831, 0.862428, - 0.152994, 0.362807, 0.403722, 0.866203, - 0.159463, 0.361963, 0.429537, 0.871629, - 0.165623, 0.36112, 0.456, 0.877365, - 0.171649, 0.359917, 0.482773, 0.883744, - 0.177151, 0.35848, 0.509705, 0.890693, - 0.182381, 0.356523, 0.537215, 0.897278, - 0.186076, 0.3533, 0.565493, 0.903958, - 0.188602, 0.349095, 0.594293, 0.910908, - 0.190755, 0.344215, 0.623165, 0.918117, - 0.192063, 0.338606, 0.651573, 0.924644, - 0.192758, 0.331544, 0.679869, 0.931054, - 0.192238, 0.323163, 0.708668, 0.937303, - 0.190035, 0.313529, 0.737201, 0.943387, - 0.187162, 0.303152, 0.764977, 0.948494, - 0.183876, 0.29146, 0.792683, 0.952546, - 0.178901, 0.277917, 0.819228, 0.958077, - 0.173173, 0.264753, 0.846559, 0.962462, - 0.16645, 0.25002, 0.872962, 0.966569, - 0.159452, 0.234873, 0.898729, 0.969108, - 0.15074, 0.218752, 0.923126, 0.973072, - 0.141523, 0.202673, 0.947278, 0.975452, - 0.132075, 0.186326, 0.969938, 0.977784, - 0.121257, 0.169396, 0.991325, 0.97899, - 0.110182, 0.153044, 1.01123, 0.979777, - 0.0989634, 0.136485, 1.0299, 0.980865, - 0.0865894, 0.119343, 1.04727, 0.982432, - 0.0746115, 0.102452, 1.06341, 0.984935, - 0.0621822, 0.0852423, 1.07834, 0.987776, - 0.0495694, 0.0678546, 1.092, 0.99103, - 0.0372386, 0.0506917, 1.1043, 0.99474, - 0.0244353, 0.0333316, 1.11576, 0.997768, - 0.0121448, 0.0164348, 1.12617, 1.00003, 0.00031774, - 0.000169504, 1.13598, 0.825551, - 7.56799e-06, 0.378425, 1.65099e-05, 0.82664, - 0.000190922, 0.378923, 0.000416504, 0.826323, - 0.000763495, 0.378779, 0.0016656, 0.826359, - 0.00171789, 0.378795, 0.00374768, 0.82636, - 0.00305402, 0.378795, 0.00666259, 0.826368, - 0.00477185, 0.378798, 0.0104104, 0.826364, - 0.00687131, 0.378795, 0.0149912, 0.826368, - 0.00935232, 0.378795, 0.0204054, 0.826376, - 0.0122146, 0.378797, 0.0266532, 0.826399, - 0.0154581, 0.378803, 0.0337355, 0.82646, - 0.0190825, 0.378824, 0.0416537, 0.826525, - 0.0230873, 0.378846, 0.0504091, 0.826614, - 0.0274719, 0.378876, 0.0600032, 0.82674, - 0.0322355, 0.378917, 0.0704393, 0.826888, - 0.0373766, 0.378964, 0.0817195, 0.827078, - 0.0428936, 0.379024, 0.0938492, 0.827318, - 0.0487778, 0.379099, 0.106828, 0.82764, - 0.0549935, 0.379199, 0.120659, 0.827926, - 0.0611058, 0.379227, 0.13526, 0.828325, - 0.0675054, 0.379275, 0.150713, 0.828801, - 0.0743455, 0.379332, 0.167034, 0.8294, - 0.0815523, 0.379415, 0.184209, 0.830094, - 0.0890779, 0.379495, 0.202203, 0.8309, - 0.096736, 0.379555, 0.220945, 0.831943, - 0.104135, 0.379577, 0.240306, 0.833037, - 0.112106, 0.379604, 0.260317, 0.834278, - 0.120554, 0.379668, 0.2808, 0.836192, - 0.129128, 0.3799, 0.301654, 0.838671, - 0.137541, 0.380109, 0.323502, 0.840939, - 0.14523, 0.379809, 0.347176, 0.844575, - 0.15248, 0.379593, 0.371706, 0.848379, - 0.159607, 0.37909, 0.39688, 0.853616, - 0.166267, 0.378617, 0.422702, 0.858921, - 0.172698, 0.377746, 0.448919, 0.865324, - 0.178823, 0.376749, 0.475661, 0.872207, - 0.184542, 0.375363, 0.502599, 0.880018, - 0.189836, 0.373657, 0.529914, 0.88694, - 0.194294, 0.370673, 0.557683, 0.894779, - 0.197022, 0.36662, 0.586848, 0.902242, - 0.199108, 0.36138, 0.615831, 0.909914, - 0.200398, 0.355434, 0.644478, 0.917088, - 0.20094, 0.348173, 0.672905, 0.923888, - 0.200671, 0.339482, 0.701327, 0.930495, - 0.198773, 0.32956, 0.730101, 0.937247, - 0.195394, 0.318363, 0.758383, 0.943108, - 0.191956, 0.306323, 0.786539, 0.948296, - 0.187227, 0.292576, 0.813637, 0.953472, - 0.181165, 0.278234, 0.840793, 0.958485, - 0.174119, 0.263054, 0.867712, 0.962714, - 0.166564, 0.246756, 0.893635, 0.966185, - 0.158181, 0.229945, 0.919028, 0.970146, - 0.148275, 0.212633, 0.943413, 0.973491, - 0.138157, 0.195229, 0.966627, 0.975741, - 0.127574, 0.178048, 0.988817, 0.977238, - 0.11554, 0.160312, 1.00924, 0.978411, - 0.10364, 0.142857, 1.02845, 0.979811, - 0.0913122, 0.125317, 1.04648, 0.98116, - 0.0782558, 0.107627, 1.06284, 0.983543, - 0.0655957, 0.0895862, 1.07798, 0.986789, - 0.0520411, 0.0713756, 1.092, 0.990292, - 0.0389727, 0.053228, 1.10484, 0.994187, - 0.025808, 0.0351945, 1.11642, 0.997499, - 0.0126071, 0.0173198, 1.12703, 0.999999, 0.000275604, - 0.000148602, 1.13674, 0.81075, - 7.8735e-06, 0.394456, 1.61829e-05, 0.808692, - 0.000198293, 0.393453, 0.000407564, 0.80846, - 0.000792877, 0.39334, 0.00162965, 0.808595, - 0.00178416, 0.393407, 0.00366711, 0.808597, - 0.00317182, 0.393408, 0.00651934, 0.808598, - 0.00495589, 0.393408, 0.0101866, 0.808591, - 0.00713627, 0.393403, 0.0146689, 0.808592, - 0.00971285, 0.393402, 0.0199667, 0.80861, - 0.0126855, 0.393407, 0.0260803, 0.808633, - 0.0160538, 0.393413, 0.0330107, 0.80868, - 0.0198175, 0.393429, 0.0407589, 0.808748, - 0.0239758, 0.393453, 0.0493264, 0.808854, - 0.0285286, 0.39349, 0.0587161, 0.808992, - 0.0334748, 0.39354, 0.0689304, 0.809141, - 0.0388116, 0.393588, 0.0799707, 0.809352, - 0.0445375, 0.39366, 0.0918432, 0.809608, - 0.0506427, 0.393742, 0.104549, 0.809915, - 0.0570708, 0.393834, 0.118085, 0.810253, - 0.0633526, 0.393885, 0.132377, 0.810687, - 0.0700966, 0.393953, 0.147537, 0.811233, - 0.0772274, 0.394047, 0.163543, 0.811865, - 0.0847629, 0.394148, 0.180394, 0.812648, - 0.0925663, 0.394265, 0.198051, 0.813583, - 0.100416, 0.394363, 0.216443, 0.814683, - 0.108119, 0.394402, 0.235502, 0.815948, - 0.11644, 0.394489, 0.255242, 0.817278, - 0.125036, 0.394542, 0.275441, 0.819605, - 0.133655, 0.39486, 0.296094, 0.822256, - 0.142682, 0.395248, 0.317309, 0.825349, - 0.150756, 0.395241, 0.340516, 0.829605, - 0.158392, 0.395285, 0.364819, 0.83391, - 0.165801, 0.394922, 0.389736, 0.839808, - 0.172677, 0.394691, 0.415409, 0.845708, - 0.179448, 0.394006, 0.441546, 0.853025, - 0.185746, 0.393279, 0.46832, 0.859666, - 0.191684, 0.391655, 0.495302, 0.86789, - 0.197146, 0.390068, 0.52262, 0.875845, - 0.201904, 0.38727, 0.550336, 0.882634, - 0.205023, 0.382688, 0.578825, 0.891076, - 0.207098, 0.377543, 0.608103, 0.900589, - 0.208474, 0.371752, 0.63723, 0.90791, - 0.209068, 0.364016, 0.665769, 0.915971, - 0.208655, 0.355593, 0.694428, 0.923455, - 0.20729, 0.345439, 0.723224, 0.931514, - 0.203821, 0.334099, 0.751925, 0.937885, - 0.19986, 0.321069, 0.780249, 0.943136, - 0.194993, 0.306571, 0.8077, 0.948818, - 0.189132, 0.291556, 0.83497, 0.954433, - 0.181617, 0.275745, 0.86188, 0.959078, - 0.173595, 0.258695, 0.888562, 0.962705, - 0.164855, 0.240825, 0.914008, 0.966753, - 0.155129, 0.22268, 0.939145, 0.970704, - 0.144241, 0.204542, 0.963393, 0.973367, - 0.133188, 0.185927, 0.985983, 0.975984, - 0.121146, 0.167743, 1.00704, 0.976994, - 0.108366, 0.149218, 1.02715, 0.978485, - 0.0956746, 0.13131, 1.0455, 0.980074, - 0.0820733, 0.112513, 1.06221, 0.98225, - 0.0684061, 0.0938323, 1.07782, 0.98553, - 0.0549503, 0.0749508, 1.09199, 0.989529, - 0.0407857, 0.055848, 1.10508, 0.993536, - 0.0271978, 0.0368581, 1.11684, 0.997247, - 0.0132716, 0.0181845, 1.12789, 1, 0.000431817, - 0.000198809, 1.13792, 0.785886, - 8.12608e-06, 0.405036, 1.57669e-05, 0.790388, - 0.000205278, 0.407355, 0.000398297, 0.790145, - 0.000820824, 0.407231, 0.00159263, 0.790135, - 0.00184681, 0.407226, 0.00358336, 0.790119, - 0.00328316, 0.407218, 0.00637039, 0.790126, - 0.00512988, 0.40722, 0.0099539, 0.79013, - 0.00738684, 0.407221, 0.0143339, 0.790135, - 0.0100538, 0.407221, 0.0195107, 0.790134, - 0.0131306, 0.407217, 0.0254848, 0.79016, - 0.0166169, 0.407224, 0.0322572, 0.790197, - 0.020512, 0.407236, 0.0398284, 0.790273, - 0.0248157, 0.407263, 0.0482014, 0.790381, - 0.029527, 0.407304, 0.0573777, 0.790521, - 0.0346446, 0.407355, 0.0673602, 0.790704, - 0.0401665, 0.40742, 0.0781522, 0.790925, - 0.0460896, 0.407499, 0.0897582, 0.791195, - 0.0524017, 0.407589, 0.10218, 0.791522, - 0.0590121, 0.407691, 0.11541, 0.791878, - 0.0654876, 0.407748, 0.12939, 0.792361, - 0.0725207, 0.407849, 0.144237, 0.792942, - 0.0799844, 0.407963, 0.159924, 0.79362, - 0.0877896, 0.408087, 0.176425, 0.794529, - 0.0958451, 0.408259, 0.193733, 0.795521, - 0.103827, 0.408362, 0.211756, 0.796778, - 0.111937, 0.408482, 0.230524, 0.798027, - 0.120521, 0.408547, 0.249967, 0.799813, - 0.129242, 0.408721, 0.269926, 0.802387, - 0.138048, 0.409148, 0.290338, 0.805279, - 0.147301, 0.409641, 0.311193, 0.809251, - 0.155895, 0.410154, 0.333611, 0.813733, - 0.163942, 0.410297, 0.357615, 0.819081, - 0.171666, 0.410373, 0.382339, 0.825427, - 0.178905, 0.410348, 0.407828, 0.83172, - 0.185812, 0.409486, 0.434034, 0.83877, - 0.192318, 0.408776, 0.460493, 0.845817, - 0.198249, 0.407176, 0.487346, 0.854664, - 0.204034, 0.405719, 0.514832, 0.863495, - 0.208908, 0.403282, 0.542401, 0.871883, - 0.212765, 0.399293, 0.570683, 0.88065, - 0.214911, 0.393803, 0.599947, 0.89004, - 0.216214, 0.387536, 0.62932, 0.898476, - 0.216745, 0.379846, 0.658319, 0.906738, - 0.216387, 0.370625, 0.687138, 0.914844, - 0.215053, 0.360139, 0.71601, 0.923877, - 0.212007, 0.348849, 0.745124, 0.931925, - 0.207481, 0.335639, 0.773366, 0.938054, - 0.202418, 0.320798, 0.801636, 0.943895, - 0.196507, 0.304772, 0.829055, 0.949468, - 0.189009, 0.288033, 0.856097, 0.955152, - 0.180539, 0.270532, 0.88301, 0.959403, - 0.171437, 0.251639, 0.909296, 0.963309, - 0.161661, 0.232563, 0.934868, 0.967399, - 0.150425, 0.213231, 0.959662, 0.972009, - 0.138659, 0.194247, 0.98302, 0.97433, - 0.126595, 0.174718, 1.00517, 0.975823, - 0.113205, 0.155518, 1.02566, 0.976371, - 0.0996096, 0.136709, 1.04418, 0.978705, - 0.0860754, 0.117571, 1.06146, 0.981477, - 0.0714438, 0.0980046, 1.07777, 0.984263, - 0.0572304, 0.0782181, 1.09214, 0.988423, - 0.0428875, 0.0584052, 1.10553, 0.993, - 0.0282442, 0.038522, 1.11758, 0.99704, - 0.0140183, 0.0190148, 1.12864, 0.999913, 0.000369494, - 0.000145203, 1.13901, 0.777662, - 8.4153e-06, 0.423844, 1.54403e-05, 0.770458, - 0.000211714, 0.419915, 0.00038845, 0.770716, - 0.000846888, 0.420055, 0.00155386, 0.770982, - 0.00190567, 0.420202, 0.00349653, 0.770981, - 0.00338782, 0.420201, 0.00621606, 0.77098, - 0.00529338, 0.4202, 0.00971274, 0.770983, - 0.00762223, 0.4202, 0.0139867, 0.770985, - 0.0103741, 0.420198, 0.0190381, 0.770996, - 0.0135489, 0.4202, 0.0248677, 0.771029, - 0.0171461, 0.420212, 0.0314764, 0.771052, - 0.0211647, 0.420215, 0.0388648, 0.771131, - 0.0256048, 0.420245, 0.047036, 0.771235, - 0.0304647, 0.420284, 0.0559911, 0.771383, - 0.0357436, 0.420341, 0.0657346, 0.771591, - 0.0414392, 0.420423, 0.0762694, 0.771819, - 0.0475462, 0.420506, 0.0875984, 0.772123, - 0.0540506, 0.420617, 0.099727, 0.772464, - 0.060797, 0.42072, 0.112637, 0.772855, - 0.0675393, 0.420799, 0.126313, 0.773317, - 0.0748323, 0.420893, 0.140824, 0.773981, - 0.0825681, 0.421058, 0.15617, 0.774746, - 0.0906307, 0.421226, 0.172322, 0.77566, - 0.0988982, 0.421397, 0.189253, 0.776837, - 0.106994, 0.421569, 0.206912, 0.778097, - 0.115528, 0.421704, 0.225359, 0.779588, - 0.124317, 0.421849, 0.24447, 0.781574, - 0.133139, 0.422097, 0.264156, 0.784451, - 0.142179, 0.422615, 0.284318, 0.787682, - 0.15165, 0.423269, 0.304902, 0.792433, - 0.160771, 0.424396, 0.3265, 0.797359, - 0.169166, 0.424772, 0.35014, 0.803986, - 0.177149, 0.425475, 0.374768, 0.809504, - 0.184745, 0.424996, 0.399928, 0.815885, - 0.19173, 0.424247, 0.425796, 0.823513, - 0.198525, 0.423515, 0.452287, 0.832549, - 0.204709, 0.422787, 0.479321, 0.841653, - 0.210447, 0.421187, 0.506718, 0.850401, - 0.215501, 0.418519, 0.53432, 0.859854, - 0.219752, 0.414715, 0.56242, 0.869364, - 0.222305, 0.409462, 0.591558, 0.878837, - 0.223744, 0.402926, 0.621074, 0.888636, - 0.224065, 0.395043, 0.650538, 0.898132, - 0.223742, 0.38564, 0.679538, 0.907181, - 0.222308, 0.375378, 0.708674, 0.915621, - 0.219837, 0.363212, 0.737714, 0.9239, - 0.215233, 0.349313, 0.767014, 0.931644, - 0.209592, 0.334162, 0.795133, 0.938887, - 0.203644, 0.317943, 0.823228, 0.945282, - 0.196349, 0.300581, 0.850822, 0.950758, - 0.18742, 0.282195, 0.877594, 0.956146, - 0.177879, 0.262481, 0.904564, 0.960355, - 0.167643, 0.242487, 0.930741, 0.965256, - 0.156671, 0.222668, 0.955868, 0.968029, - 0.144123, 0.201907, 0.979869, 0.97251, - 0.131305, 0.18202, 1.00291, 0.974925, - 0.118335, 0.161909, 1.02392, 0.975402, - 0.103714, 0.142129, 1.0433, 0.976987, - 0.089415, 0.122447, 1.06089, 0.979677, - 0.0748858, 0.102248, 1.07713, 0.983184, - 0.0596086, 0.0814851, 1.09218, 0.987466, - 0.0447671, 0.0609484, 1.10585, 0.992348, - 0.0295217, 0.0401835, 1.11829, 0.996674, - 0.0143917, 0.0198163, 1.12966, 1.00003, 0.000321364, - 0.000149983, 1.1402, 0.757901, - 8.69074e-06, 0.436176, 1.51011e-05, 0.751195, - 0.000217848, 0.432317, 0.000378533, 0.751178, - 0.000871373, 0.432307, 0.0015141, 0.751195, - 0.00196061, 0.432317, 0.0034068, 0.751198, - 0.00348552, 0.432318, 0.00605659, 0.751195, - 0.00544599, 0.432315, 0.00946353, 0.751207, - 0.00784203, 0.43232, 0.013628, 0.751213, - 0.0106732, 0.43232, 0.0185499, 0.751221, - 0.0139393, 0.432319, 0.0242302, 0.751244, - 0.0176398, 0.432325, 0.0306694, 0.7513, - 0.0217743, 0.432348, 0.0378698, 0.751358, - 0.0263412, 0.432367, 0.0458321, 0.751458, - 0.0313396, 0.432404, 0.0545587, 0.751608, - 0.0367682, 0.432464, 0.0640543, 0.7518, - 0.0426246, 0.43254, 0.0743222, 0.752065, - 0.0489031, 0.432645, 0.0853668, 0.752376, - 0.0555828, 0.432762, 0.0971911, 0.752715, - 0.0623861, 0.432859, 0.109768, 0.753137, - 0.069415, 0.432958, 0.123126, 0.753676, - 0.0770039, 0.433099, 0.137308, 0.754345, - 0.084971, 0.433272, 0.15229, 0.755235, - 0.0932681, 0.433504, 0.168075, 0.756186, - 0.10171, 0.433693, 0.184625, 0.757363, - 0.110019, 0.433857, 0.201897, 0.75884, - 0.11887, 0.434102, 0.220014, 0.760467, - 0.127881, 0.434306, 0.238778, 0.762969, - 0.136766, 0.434751, 0.258172, 0.765823, - 0.14612, 0.43529, 0.278062, 0.769676, - 0.15566, 0.436236, 0.298437, 0.774909, - 0.165177, 0.437754, 0.319532, 0.77994, - 0.17402, 0.438343, 0.342505, 0.785757, - 0.182201, 0.438609, 0.366693, 0.792487, - 0.190104, 0.438762, 0.391668, 0.80038, - 0.197438, 0.438795, 0.417494, 0.808494, - 0.204365, 0.438226, 0.443933, 0.817695, - 0.210714, 0.437283, 0.470929, 0.828111, - 0.216651, 0.436087, 0.498569, 0.837901, - 0.221804, 0.433717, 0.526165, 0.847813, - 0.226318, 0.430133, 0.554155, 0.858314, - 0.229297, 0.425213, 0.582822, 0.868891, - 0.230999, 0.418576, 0.612847, 0.878941, - 0.231155, 0.410405, 0.642445, 0.888809, - 0.230935, 0.400544, 0.672024, 0.898089, - 0.229343, 0.389613, 0.701366, 0.908081, - 0.226886, 0.377197, 0.730763, 0.916819, - 0.222676, 0.363397, 0.759642, 0.924968, - 0.216835, 0.347437, 0.788775, 0.932906, - 0.210245, 0.32995, 0.817135, 0.940025, - 0.202992, 0.312262, 0.844912, 0.946101, - 0.19436, 0.293313, 0.872164, 0.952835, - 0.184125, 0.273638, 0.899443, 0.957347, - 0.173657, 0.252385, 0.926389, 0.961434, - 0.162204, 0.231038, 0.951947, 0.965522, - 0.14979, 0.209834, 0.976751, 0.969412, - 0.136307, 0.188821, 1.00022, 0.973902, - 0.122527, 0.168013, 1.02229, 0.974045, - 0.108213, 0.147634, 1.04199, 0.975775, - 0.0927397, 0.12705, 1.06019, 0.978383, - 0.0778212, 0.106309, 1.07711, 0.98211, - 0.0621216, 0.0849279, 1.09245, 0.986517, - 0.0463847, 0.0633519, 1.10651, 0.991696, - 0.0309353, 0.0419698, 1.11903, 0.996349, - 0.0150914, 0.0206272, 1.13073, 1.00003, 0.000442449, - 0.000231396, 1.14146, 0.727498, - 8.85074e-06, 0.441528, 1.45832e-05, 0.730897, - 0.000223525, 0.443589, 0.000368298, 0.730796, - 0.000893996, 0.443528, 0.00147303, 0.730805, - 0.00201149, 0.443533, 0.00331433, 0.730814, - 0.00357596, 0.443538, 0.00589222, 0.730815, - 0.00558734, 0.443538, 0.00920678, 0.730822, - 0.00804544, 0.44354, 0.0132582, 0.730836, - 0.0109501, 0.443545, 0.0180468, 0.730848, - 0.0143008, 0.443546, 0.0235732, 0.730871, - 0.0180969, 0.443552, 0.0298382, 0.730915, - 0.022338, 0.443567, 0.0368438, 0.730982, - 0.0270225, 0.443591, 0.044591, 0.731076, - 0.0321491, 0.443627, 0.0530831, 0.731245, - 0.0377166, 0.443699, 0.0623243, 0.73144, - 0.0437216, 0.443777, 0.0723181, 0.7317, - 0.0501576, 0.443881, 0.0830691, 0.732034, - 0.0569942, 0.444014, 0.0945809, 0.732388, - 0.0638756, 0.444113, 0.106825, 0.732853, - 0.071203, 0.444247, 0.119859, 0.733473, - 0.0790076, 0.444442, 0.13369, 0.734195, - 0.0871937, 0.444645, 0.148304, 0.735069, - 0.095696, 0.444877, 0.163702, 0.736169, - 0.10426, 0.445133, 0.179861, 0.73747, - 0.112853, 0.44537, 0.196778, 0.738991, - 0.12199, 0.445651, 0.214496, 0.740865, - 0.131153, 0.445958, 0.232913, 0.743637, - 0.140245, 0.446548, 0.251977, 0.746797, - 0.149722, 0.447246, 0.271551, 0.751517, - 0.159341, 0.448656, 0.291774, 0.756156, - 0.169106, 0.449866, 0.312455, 0.761519, - 0.178436, 0.450919, 0.334552, 0.768295, - 0.186904, 0.451776, 0.358491, 0.776613, - 0.195117, 0.452832, 0.383446, 0.783966, - 0.202695, 0.45249, 0.408945, 0.793542, - 0.20985, 0.452587, 0.435364, 0.803192, - 0.216403, 0.451852, 0.462336, 0.813892, - 0.22251, 0.450708, 0.48987, 0.824968, - 0.227676, 0.4486, 0.517697, 0.835859, - 0.232443, 0.445156, 0.545975, 0.846825, - 0.235775, 0.440351, 0.574483, 0.858085, - 0.237897, 0.433641, 0.604246, 0.868825, - 0.238074, 0.425354, 0.634101, 0.879638, - 0.237661, 0.415383, 0.664201, 0.889966, - 0.236186, 0.404136, 0.693918, 0.899479, - 0.233599, 0.390917, 0.723481, 0.908769, - 0.229737, 0.376352, 0.75258, 0.917966, - 0.223836, 0.360372, 0.781764, 0.926304, - 0.217067, 0.342551, 0.811139, 0.934626, - 0.209309, 0.324238, 0.839585, 0.941841, - 0.20071, 0.304484, 0.867044, 0.94789, - 0.190602, 0.283607, 0.894579, 0.954196, - 0.179253, 0.262205, 0.921743, 0.958383, - 0.167646, 0.239847, 0.948026, 0.963119, - 0.155073, 0.218078, 0.973296, 0.966941, - 0.141426, 0.195899, 0.998135, 0.970836, - 0.126849, 0.174121, 1.02021, 0.973301, - 0.112296, 0.153052, 1.04085, 0.97448, - 0.0964965, 0.131733, 1.05946, 0.977045, - 0.080489, 0.10997, 1.07693, 0.980751, - 0.064844, 0.0881657, 1.09254, 0.985475, - 0.0481938, 0.0657987, 1.10697, 0.991089, - 0.0319185, 0.0435215, 1.12004, 0.996122, - 0.0158088, 0.0214779, 1.13173, 1.00001, 0.000372455, - 0.000200295, 1.14291, 0.708622, - 9.07597e-06, 0.45304, 1.41962e-05, 0.711162, - 0.000228911, 0.454662, 0.000358052, 0.709812, - 0.000914446, 0.453797, 0.00143034, 0.709865, - 0.00205819, 0.453834, 0.00321935, 0.709864, - 0.00365894, 0.453833, 0.00572331, 0.709855, - 0.00571692, 0.453826, 0.00894278, 0.709862, - 0.00823201, 0.453828, 0.012878, 0.709875, - 0.011204, 0.453832, 0.0175295, 0.709896, - 0.0146323, 0.453839, 0.0228978, 0.709925, - 0.0185163, 0.453847, 0.0289839, 0.709974, - 0.0228551, 0.453866, 0.0357894, 0.710045, - 0.0276473, 0.453892, 0.0433161, 0.710133, - 0.032891, 0.453924, 0.0515665, 0.710292, - 0.0385851, 0.453992, 0.0605458, 0.710485, - 0.0447254, 0.45407, 0.0702574, 0.710769, - 0.0513051, 0.454192, 0.0807077, 0.711106, - 0.0582733, 0.454329, 0.091896, 0.711516, - 0.0652866, 0.45446, 0.103814, 0.712071, - 0.0728426, 0.454653, 0.116508, 0.712676, - 0.0808307, 0.45484, 0.129968, 0.713476, - 0.0892216, 0.455096, 0.144206, 0.714377, - 0.0979047, 0.455346, 0.159212, 0.715579, - 0.106531, 0.455647, 0.174973, 0.716977, - 0.115492, 0.455961, 0.191504, 0.71862, - 0.124821, 0.456315, 0.208835, 0.72084, - 0.134079, 0.4568, 0.226869, 0.723786, - 0.143427, 0.457521, 0.245582, 0.727464, - 0.153061, 0.458475, 0.264957, 0.732771, - 0.162768, 0.460239, 0.284948, 0.736515, - 0.172627, 0.460899, 0.30522, 0.743519, - 0.182487, 0.463225, 0.326717, 0.750041, - 0.191295, 0.464027, 0.350113, 0.758589, - 0.199746, 0.465227, 0.374782, 0.767703, - 0.207584, 0.465877, 0.400226, 0.777484, - 0.214973, 0.465996, 0.426442, 0.788792, - 0.221796, 0.466019, 0.453688, 0.800194, - 0.228038, 0.465083, 0.481246, 0.811234, - 0.233346, 0.462506, 0.509086, 0.822859, - 0.238073, 0.459257, 0.537338, 0.835082, - 0.241764, 0.454863, 0.566108, 0.846332, - 0.244241, 0.448163, 0.595126, 0.858355, - 0.244736, 0.439709, 0.625574, 0.87034, - 0.244278, 0.429837, 0.65617, 0.881027, - 0.24255, 0.418002, 0.686029, 0.891007, - 0.239912, 0.404325, 0.716039, 0.900874, - 0.236133, 0.389222, 0.745518, 0.911072, - 0.230672, 0.373269, 0.775026, 0.920359, - 0.22356, 0.355083, 0.804521, 0.928604, - 0.215591, 0.335533, 0.834045, 0.937175, - 0.206503, 0.315278, 0.861612, 0.942825, - 0.196684, 0.293653, 0.889131, 0.949805, - 0.185116, 0.271503, 0.916853, 0.955535, - 0.172703, 0.248821, 0.943541, 0.959843, - 0.159978, 0.225591, 0.970132, 0.964393, - 0.146375, 0.202719, 0.994709, 0.968008, - 0.131269, 0.179928, 1.0186, 0.971013, - 0.11569, 0.158007, 1.03928, 0.973334, - 0.1003, 0.13624, 1.05887, 0.975775, - 0.0833352, 0.1138, 1.07652, 0.979579, - 0.0668981, 0.0913141, 1.09297, 0.984323, - 0.0500902, 0.0683051, 1.10734, 0.990351, - 0.0332377, 0.0451771, 1.12084, 0.995823, - 0.0161491, 0.0221705, 1.13296, 1.0001, 0.000234083, - 0.000108712, 1.14441, 0.683895, - 9.24677e-06, 0.46015, 1.37429e-05, 0.68833, - 0.000233383, 0.463134, 0.000346865, 0.688368, - 0.000933547, 0.463159, 0.00138748, 0.688367, - 0.00210049, 0.463159, 0.00312187, 0.688369, - 0.00373415, 0.463159, 0.00555004, 0.688377, - 0.00583449, 0.463163, 0.00867216, 0.688386, - 0.00840128, 0.463166, 0.0124884, 0.688398, - 0.0114343, 0.463169, 0.0169993, 0.688418, - 0.0149329, 0.463175, 0.0222054, 0.688453, - 0.0188964, 0.463188, 0.028108, 0.688515, - 0.0233239, 0.463214, 0.0347085, 0.68857, - 0.0282136, 0.463231, 0.0420091, 0.688679, - 0.033564, 0.463276, 0.0500132, 0.688854, - 0.0393733, 0.463356, 0.0587255, 0.689038, - 0.0456354, 0.46343, 0.0681476, 0.689321, - 0.0523433, 0.463553, 0.0782897, 0.689662, - 0.059412, 0.463693, 0.0891501, 0.690188, - 0.0665736, 0.4639, 0.100735, 0.690755, - 0.0743106, 0.464107, 0.113074, 0.691405, - 0.0824722, 0.464329, 0.126161, 0.692198, - 0.0910484, 0.464585, 0.140007, 0.693196, - 0.0998778, 0.464893, 0.154612, 0.69454, - 0.108651, 0.465285, 0.169984, 0.695921, - 0.117855, 0.465596, 0.186106, 0.697749, - 0.12734, 0.466056, 0.203034, 0.700375, - 0.136714, 0.466771, 0.220703, 0.703395, - 0.146386, 0.467579, 0.239062, 0.707904, - 0.156096, 0.469067, 0.258188, 0.711673, - 0.165904, 0.469851, 0.277759, 0.717489, - 0.175812, 0.471815, 0.297935, 0.724051, - 0.185931, 0.47389, 0.318916, 0.731965, - 0.195238, 0.47587, 0.341591, 0.741151, - 0.204021, 0.477523, 0.366062, 0.751416, - 0.212113, 0.478881, 0.391396, 0.761848, - 0.21979, 0.479226, 0.417599, 0.771886, - 0.2267, 0.478495, 0.444401, 0.783998, - 0.232991, 0.477622, 0.472084, 0.796523, - 0.238645, 0.475833, 0.500193, 0.808851, - 0.243396, 0.472568, 0.52865, 0.821191, - 0.247226, 0.467857, 0.557362, 0.834261, - 0.250102, 0.461871, 0.586768, 0.846762, - 0.251056, 0.453543, 0.617085, 0.859867, - 0.250604, 0.443494, 0.647659, 0.871948, - 0.248783, 0.431711, 0.678119, 0.882967, - 0.245855, 0.417911, 0.708399, 0.892826, - 0.242168, 0.401993, 0.738256, 0.90332, - 0.237062, 0.385371, 0.767999, 0.913633, - 0.22997, 0.366837, 0.798191, 0.922774, - 0.221687, 0.346372, 0.827756, 0.931371, - 0.212345, 0.325682, 0.856425, 0.938929, - 0.20206, 0.303665, 0.884299, 0.944821, - 0.190981, 0.280786, 0.912023, 0.951792, - 0.178065, 0.2573, 0.939669, 0.957712, - 0.164634, 0.233448, 0.96655, 0.961912, - 0.150863, 0.209504, 0.992366, 0.966382, - 0.13577, 0.18597, 1.01633, 0.969588, - 0.119593, 0.162905, 1.03843, 0.971777, - 0.103203, 0.14053, 1.05841, 0.97433, - 0.0865888, 0.117909, 1.07632, 0.978686, - 0.0690829, 0.0944101, 1.09326, 0.983281, - 0.0516568, 0.0705671, 1.10796, 0.989562, - 0.034558, 0.0468592, 1.12182, 0.995465, - 0.0167808, 0.0229846, 1.1342, 0.999991, 0.000373016, - 0.000235606, 1.1459, 0.662251, - 9.39016e-06, 0.468575, 1.32714e-05, 0.666634, - 0.000237624, 0.471675, 0.000335842, 0.666411, - 0.000950385, 0.471516, 0.00134321, 0.666399, - 0.00213833, 0.471509, 0.00302221, 0.666386, - 0.0038014, 0.471499, 0.00537283, 0.666405, - 0.00593958, 0.471511, 0.00839533, 0.666406, - 0.00855253, 0.471508, 0.0120898, 0.666428, - 0.0116401, 0.471519, 0.0164569, 0.666444, - 0.0152015, 0.471522, 0.0214971, 0.66649, - 0.0192362, 0.471543, 0.027212, 0.666537, - 0.0237428, 0.471558, 0.033603, 0.666617, - 0.0287198, 0.471591, 0.0406728, 0.666718, - 0.0341647, 0.471631, 0.0484238, 0.666889, - 0.0400759, 0.47171, 0.0568621, 0.667104, - 0.0464479, 0.471805, 0.0659915, 0.667374, - 0.0532677, 0.471923, 0.0758178, 0.667772, - 0.0603805, 0.472098, 0.0863425, 0.668371, - 0.0677392, 0.472363, 0.0975917, 0.668971, - 0.0756028, 0.472596, 0.109567, 0.669696, - 0.0839293, 0.472869, 0.122272, 0.670481, - 0.0926683, 0.473126, 0.135718, 0.6715, - 0.1016, 0.473442, 0.149914, 0.672911, - 0.110566, 0.47389, 0.164882, 0.674512, - 0.119984, 0.474354, 0.180602, 0.67651, - 0.129574, 0.474922, 0.19711, 0.679292, - 0.139106, 0.475764, 0.214371, 0.682798, - 0.148993, 0.476886, 0.232405, 0.686955, - 0.158737, 0.478179, 0.251153, 0.691406, - 0.168754, 0.479432, 0.270436, 0.697438, - 0.178703, 0.481481, 0.290374, 0.704761, - 0.188955, 0.484143, 0.311044, 0.713599, - 0.198814, 0.487007, 0.333003, 0.723194, - 0.207869, 0.488962, 0.357144, 0.732601, - 0.216189, 0.489815, 0.382169, 0.744193, - 0.22398, 0.490888, 0.408227, 0.754907, - 0.231156, 0.490355, 0.434928, 0.767403, - 0.23747, 0.489548, 0.462599, 0.78107, - 0.243503, 0.488274, 0.490908, 0.793893, - 0.248114, 0.484843, 0.519421, 0.807296, - 0.25222, 0.4803, 0.548561, 0.820529, - 0.255265, 0.474097, 0.577772, 0.833716, - 0.256741, 0.466041, 0.607782, 0.848403, - 0.25637, 0.456547, 0.638807, 0.860755, - 0.254804, 0.443946, 0.670058, 0.874012, - 0.251834, 0.430852, 0.700749, 0.885619, - 0.247867, 0.414903, 0.731446, 0.896069, - 0.242634, 0.397276, 0.761191, 0.906266, - 0.236093, 0.378535, 0.791053, 0.916759, - 0.227543, 0.358038, 0.821298, 0.92523, - 0.21783, 0.335705, 0.850747, 0.93436, - 0.207534, 0.313797, 0.879258, 0.941631, - 0.195983, 0.289671, 0.907734, 0.947564, - 0.183567, 0.265319, 0.935206, 0.953681, - 0.169345, 0.240815, 0.962739, 0.960008, - 0.154909, 0.216119, 0.989227, 0.964145, - 0.140161, 0.192096, 1.01465, 0.968171, - 0.123411, 0.167855, 1.03737, 0.969859, - 0.106525, 0.144817, 1.05767, 0.972666, - 0.0891023, 0.12149, 1.0761, 0.977055, - 0.0718094, 0.0975306, 1.09336, 0.982527, - 0.0534213, 0.0730217, 1.10878, 0.989001, - 0.0355579, 0.0483366, 1.12285, 0.99512, - 0.0176383, 0.023938, 1.13548, 1.00007, 0.000368831, - 0.000211581, 1.14744, 0.651047, - 9.60845e-06, 0.484101, 1.2922e-05, 0.644145, - 0.000241347, 0.478968, 0.000324578, 0.64396, - 0.000965142, 0.478831, 0.00129798, 0.64396, - 0.00217154, 0.47883, 0.00292046, 0.643968, - 0.00386049, 0.478835, 0.00519202, 0.643974, - 0.00603186, 0.478838, 0.0081128, 0.643977, - 0.0086854, 0.478836, 0.011683, 0.643982, - 0.0118207, 0.478834, 0.0159031, 0.644024, - 0.0154374, 0.478856, 0.0207743, 0.644059, - 0.0195343, 0.478868, 0.0262975, 0.644122, - 0.0241103, 0.478896, 0.0324747, 0.644207, - 0.0291638, 0.478933, 0.039309, 0.64432, - 0.0346919, 0.478981, 0.0468029, 0.644481, - 0.0406919, 0.479053, 0.0549614, 0.644722, - 0.047159, 0.479169, 0.0637909, 0.645013, - 0.0540748, 0.479302, 0.0732974, 0.645503, - 0.0612001, 0.479541, 0.0834898, 0.646117, - 0.0687303, 0.479829, 0.0943873, 0.646707, - 0.0767846, 0.480061, 0.105991, 0.647431, - 0.0852465, 0.480343, 0.11831, 0.64831, - 0.0940719, 0.48066, 0.131348, 0.649486, - 0.103056, 0.481083, 0.14514, 0.650864, - 0.112261, 0.481528, 0.159676, 0.652604, - 0.121852, 0.482102, 0.174979, 0.654825, - 0.131505, 0.482813, 0.191079, 0.657876, - 0.141189, 0.483876, 0.207927, 0.661339, - 0.151239, 0.48499, 0.225586, 0.665463, - 0.161091, 0.486279, 0.243947, 0.670542, - 0.171235, 0.487968, 0.262957, 0.677361, - 0.181347, 0.49053, 0.282781, 0.685672, - 0.191679, 0.493862, 0.303311, 0.694551, - 0.201781, 0.49699, 0.324607, 0.703753, - 0.211164, 0.498884, 0.347916, 0.713703, - 0.219675, 0.500086, 0.372628, 0.725911, - 0.227836, 0.501554, 0.398694, 0.73862, - 0.23533, 0.502193, 0.425529, 0.752118, - 0.241786, 0.501811, 0.453209, 0.76579, - 0.247865, 0.500185, 0.481381, 0.779568, - 0.252696, 0.497159, 0.51011, 0.793991, - 0.256802, 0.492765, 0.539322, 0.808182, - 0.259942, 0.486827, 0.569078, 0.821698, - 0.261703, 0.478386, 0.598818, 0.836009, - 0.262006, 0.468772, 0.629762, 0.849824, - 0.260333, 0.456352, 0.661366, 0.863888, - 0.257398, 0.442533, 0.69295, 0.876585, - 0.253264, 0.426573, 0.723608, 0.888665, - 0.248026, 0.408964, 0.754378, 0.899537, - 0.241487, 0.389677, 0.784761, 0.9094, - 0.233463, 0.368516, 0.814688, 0.920166, - 0.223397, 0.346624, 0.845009, 0.928899, - 0.21255, 0.322717, 0.874431, 0.937156, - 0.200869, 0.298698, 0.902922, 0.943861, - 0.188387, 0.273491, 0.931356, 0.949557, - 0.174341, 0.247866, 0.958854, 0.955862, - 0.158994, 0.222496, 0.986098, 0.961721, - 0.143664, 0.197522, 1.01229, 0.965976, - 0.127412, 0.17302, 1.03571, 0.968652, - 0.109798, 0.148954, 1.05699, 0.971084, - 0.0916787, 0.125044, 1.07587, 0.975584, - 0.0739634, 0.100577, 1.09372, 0.98122, - 0.055322, 0.0753666, 1.10948, 0.988253, - 0.0366825, 0.0498899, 1.12394, 0.99482, - 0.0180389, 0.024611, 1.13694, 1.00001, 0.000229839, - 0.000188283, 1.14919, 0.613867, - 9.64198e-06, 0.479449, 1.23452e-05, 0.621485, - 0.000244534, 0.485399, 0.000313091, 0.621429, - 0.000978202, 0.485353, 0.00125245, 0.62112, - 0.00220004, 0.485114, 0.00281687, 0.621119, - 0.0039111, 0.485112, 0.00500783, 0.621122, - 0.00611091, 0.485112, 0.00782498, 0.621133, - 0.00879922, 0.485117, 0.0112687, 0.621152, - 0.0119756, 0.485125, 0.0153394, 0.621183, - 0.0156396, 0.485139, 0.0200382, 0.621227, - 0.0197898, 0.485158, 0.0253663, 0.621298, - 0.0244253, 0.485192, 0.0313261, 0.621388, - 0.0295441, 0.485233, 0.0379204, 0.621507, - 0.0351432, 0.485286, 0.0451523, 0.621693, - 0.0412198, 0.485378, 0.0530277, 0.621933, - 0.0477673, 0.485495, 0.0615522, 0.622232, - 0.0547574, 0.485635, 0.0707316, 0.622809, - 0.0619417, 0.485943, 0.0805883, 0.623407, - 0.069625, 0.486232, 0.0911267, 0.62406, - 0.077796, 0.486516, 0.102354, 0.624835, - 0.0863731, 0.486838, 0.114279, 0.625758, - 0.095251, 0.487188, 0.126902, 0.627043, - 0.104299, 0.487695, 0.140285, 0.628438, - 0.113724, 0.488163, 0.154397, 0.630325, - 0.123417, 0.488858, 0.169267, 0.632801, - 0.133137, 0.489754, 0.184941, 0.635784, - 0.143052, 0.490815, 0.20136, 0.639406, - 0.153132, 0.492048, 0.218643, 0.643872, - 0.163143, 0.49363, 0.236615, 0.6499, - 0.17333, 0.496009, 0.255449, 0.657201, - 0.183622, 0.498994, 0.275006, 0.666221, - 0.194019, 0.502888, 0.295354, 0.674419, - 0.204192, 0.505459, 0.316244, 0.683729, - 0.21406, 0.507771, 0.33849, 0.695584, - 0.222854, 0.510245, 0.363166, 0.708583, - 0.231315, 0.512293, 0.389071, 0.721233, - 0.238911, 0.512747, 0.415737, 0.735134, - 0.245657, 0.512482, 0.443331, 0.750179, - 0.251879, 0.511526, 0.471891, 0.765073, - 0.256911, 0.508935, 0.500892, 0.779794, - 0.261144, 0.504341, 0.530294, 0.794801, - 0.264316, 0.498515, 0.560144, 0.810339, - 0.266276, 0.491015, 0.590213, 0.824818, - 0.266981, 0.481126, 0.620865, 0.839375, - 0.265778, 0.468685, 0.652687, 0.853043, - 0.262748, 0.453925, 0.684759, 0.867335, - 0.258474, 0.437912, 0.716209, 0.88037, - 0.253187, 0.419648, 0.747508, 0.891711, - 0.246476, 0.39982, 0.77797, 0.902896, - 0.238735, 0.37879, 0.808586, 0.913601, - 0.22885, 0.355891, 0.838843, 0.923019, - 0.217656, 0.331773, 0.869014, 0.933432, - 0.205539, 0.307356, 0.898512, 0.939691, - 0.192595, 0.281321, 0.9269, 0.946938, - 0.178945, 0.255441, 0.955297, 0.952372, - 0.163587, 0.229013, 0.983231, 0.95909, - 0.147214, 0.203179, 1.00971, 0.963675, - 0.13064, 0.17792, 1.03438, 0.968247, - 0.113121, 0.152898, 1.05625, 0.97001, - 0.0945824, 0.128712, 1.07598, 0.974458, - 0.0755648, 0.103349, 1.094, 0.980168, - 0.0571998, 0.0776731, 1.1104, 0.987295, - 0.0377994, 0.0514445, 1.12491, 0.994432, - 0.0186417, 0.025429, 1.13851, 0.999975, 0.000542714, - 0.000282356, 1.15108, 0.592656, - 9.80249e-06, 0.486018, 1.19532e-05, 0.598467, - 0.000247275, 0.490781, 0.000301531, 0.597934, - 0.000988317, 0.490343, 0.00120517, 0.597903, - 0.00222366, 0.490319, 0.0027116, 0.597913, - 0.00395315, 0.490327, 0.00482077, 0.597919, - 0.00617653, 0.490329, 0.00753264, 0.597936, - 0.00889375, 0.490339, 0.0108478, 0.597956, - 0.0121043, 0.490347, 0.0147668, 0.597992, - 0.0158073, 0.490365, 0.0192905, 0.598032, - 0.0200017, 0.490382, 0.0244204, 0.598109, - 0.0246865, 0.49042, 0.0301593, 0.598215, - 0.0298594, 0.490474, 0.03651, 0.59833, - 0.0355167, 0.490524, 0.0434757, 0.598525, - 0.0416559, 0.490624, 0.0510629, 0.598778, - 0.0482692, 0.490753, 0.0592781, 0.599135, - 0.0553114, 0.49094, 0.0681304, 0.599802, - 0.062542, 0.491328, 0.0776467, 0.600361, - 0.0703638, 0.491598, 0.0878184, 0.60101, - 0.0786256, 0.491882, 0.0986573, 0.601811, - 0.0872962, 0.492232, 0.11018, 0.602861, - 0.0962284, 0.492684, 0.1224, 0.604167, - 0.10538, 0.493213, 0.135354, 0.605693, - 0.114896, 0.493799, 0.149034, 0.607682, - 0.124654, 0.494576, 0.163469, 0.610672, - 0.13456, 0.4959, 0.178747, 0.613313, - 0.144581, 0.496713, 0.194723, 0.617603, - 0.154703, 0.498499, 0.211617, 0.622174, - 0.16489, 0.500188, 0.229183, 0.628855, - 0.175164, 0.503072, 0.247786, 0.636963, - 0.185565, 0.506798, 0.267116, 0.644866, - 0.195911, 0.509719, 0.28702, 0.653741, - 0.206104, 0.512776, 0.307763, 0.664942, - 0.216447, 0.516812, 0.329631, 0.67633, - 0.22552, 0.519181, 0.353515, 0.690012, - 0.234316, 0.521681, 0.379226, 0.704243, - 0.242032, 0.523129, 0.405901, 0.719396, - 0.249172, 0.523768, 0.433585, 0.734471, - 0.255543, 0.522541, 0.462085, 0.750539, - 0.260697, 0.520217, 0.491233, 0.766365, - 0.26501, 0.516293, 0.521094, 0.781677, - 0.268409, 0.509708, 0.551014, 0.797132, - 0.270399, 0.501944, 0.581463, 0.812655, - 0.271247, 0.492025, 0.612402, 0.828592, - 0.270708, 0.480424, 0.643798, 0.844044, - 0.268085, 0.465955, 0.67682, 0.857305, - 0.263459, 0.448425, 0.708496, 0.87114, - 0.258151, 0.430243, 0.74046, 0.884936, - 0.251171, 0.410578, 0.771583, 0.895772, - 0.243305, 0.38862, 0.802234, 0.906961, - 0.234037, 0.365214, 0.833179, 0.917775, - 0.222714, 0.34116, 0.86353, 0.927883, - 0.210175, 0.31572, 0.893557, 0.936617, - 0.196925, 0.289159, 0.922976, 0.943384, - 0.182788, 0.261996, 0.951606, 0.949713, - 0.167965, 0.235324, 0.979958, 0.955818, - 0.151109, 0.208408, 1.00765, 0.961344, - 0.133834, 0.182591, 1.03329, 0.965469, - 0.115987, 0.156958, 1.0557, 0.968693, - 0.09746, 0.132239, 1.07583, 0.973165, - 0.0778514, 0.106195, 1.09451, 0.979387, - 0.0585067, 0.0797669, 1.11137, 0.98671, - 0.0390409, 0.0530263, 1.12643, 0.994093, - 0.019408, 0.0263163, 1.14016, 1.00002, 0.000540029, - 0.000194487, 1.15299, 0.574483, - 9.89066e-06, 0.494533, 1.14896e-05, 0.574478, - 0.000249127, 0.494528, 0.000289403, 0.574607, - 0.000996811, 0.494637, 0.00115797, 0.574396, - 0.00224241, 0.494458, 0.00260498, 0.574377, - 0.00398632, 0.49444, 0.00463102, 0.574386, - 0.00622836, 0.494445, 0.00723623, 0.574401, - 0.0089683, 0.494453, 0.010421, 0.574419, - 0.0122056, 0.49446, 0.0141859, 0.574459, - 0.0159396, 0.494481, 0.0185322, 0.574525, - 0.0201692, 0.49452, 0.0234617, 0.574587, - 0.0248924, 0.494547, 0.0289762, 0.574697, - 0.0301074, 0.494604, 0.0350797, 0.574853, - 0.0358114, 0.494688, 0.0417767, 0.575027, - 0.041999, 0.494772, 0.0490718, 0.575294, - 0.0486618, 0.494915, 0.0569728, 0.575733, - 0.0557148, 0.495173, 0.0654955, 0.576356, - 0.0630489, 0.495537, 0.0746612, 0.576944, - 0.0709285, 0.495836, 0.0844615, 0.57765, - 0.0792723, 0.496177, 0.0949142, 0.578491, - 0.0880167, 0.496563, 0.10603, 0.579639, - 0.0969462, 0.497096, 0.117841, 0.580989, - 0.10622, 0.497684, 0.130367, 0.582587, - 0.115861, 0.498337, 0.143609, 0.584951, - 0.125605, 0.499414, 0.157625, 0.587602, - 0.135608, 0.500518, 0.172413, 0.59076, - 0.145742, 0.501767, 0.187999, 0.594992, - 0.155934, 0.503542, 0.20445, 0.600656, - 0.166303, 0.506135, 0.221764, 0.607816, - 0.176681, 0.509542, 0.24002, 0.61522, - 0.187071, 0.51263, 0.258992, 0.623702, - 0.197465, 0.516021, 0.278773, 0.634192, - 0.207816, 0.520422, 0.299377, 0.644936, - 0.218183, 0.524073, 0.320802, 0.657888, - 0.2278, 0.528049, 0.34384, 0.670666, - 0.236747, 0.52986, 0.36916, 0.685626, - 0.24484, 0.531892, 0.395867, 0.701304, - 0.252071, 0.532727, 0.423488, 0.717727, - 0.258714, 0.532146, 0.452201, 0.733914, - 0.264211, 0.529883, 0.481579, 0.750529, - 0.26859, 0.5259, 0.511558, 0.76747, - 0.272046, 0.51999, 0.542042, 0.785189, - 0.274225, 0.513083, 0.572799, 0.800954, - 0.275189, 0.502936, 0.603816, 0.816962, - 0.274946, 0.490921, 0.635461, 0.83336, - 0.272695, 0.47684, 0.6676, 0.848143, - 0.268223, 0.459405, 0.70051, 0.861818, - 0.262768, 0.440319, 0.732902, 0.876828, - 0.255872, 0.420123, 0.765084, 0.889312, - 0.247703, 0.398379, 0.796391, 0.900412, - 0.238381, 0.374496, 0.827333, 0.912251, - 0.227783, 0.349874, 0.858385, 0.921792, - 0.214832, 0.323181, 0.888652, 0.931273, - 0.200949, 0.296624, 0.917763, 0.940295, - 0.186537, 0.269211, 0.947878, 0.946812, - 0.171538, 0.241447, 0.977016, 0.953588, - 0.155254, 0.213829, 1.00501, 0.958841, - 0.137156, 0.186807, 1.03179, 0.963746, - 0.118699, 0.160706, 1.05502, 0.966468, - 0.0998358, 0.135504, 1.07568, 0.971178, - 0.0805186, 0.109131, 1.09479, 0.97831, - 0.0599348, 0.0818293, 1.1123, 0.985886, - 0.0399661, 0.0545872, 1.12771, 0.994021, - 0.0198682, 0.0269405, 1.14186, 1.00009, 0.000271022, - 0.00012989, 1.15514, 0.538716, - 9.90918e-06, 0.486732, 1.09675e-05, 0.550656, - 0.000250642, 0.497518, 0.000277412, 0.55057, - 0.00100265, 0.497441, 0.00110974, 0.550903, - 0.00225672, 0.497733, 0.00249779, 0.550568, - 0.00401046, 0.497438, 0.00443906, 0.550574, - 0.00626613, 0.49744, 0.00693637, 0.550591, - 0.0090226, 0.497449, 0.00998921, 0.550623, - 0.0122795, 0.497469, 0.0135984, 0.550667, - 0.0160361, 0.497495, 0.0177654, 0.550724, - 0.0202908, 0.497526, 0.0224915, 0.550792, - 0.0250421, 0.497557, 0.0277795, 0.550918, - 0.0302878, 0.49763, 0.0336334, 0.551058, - 0.0360241, 0.497701, 0.0400573, 0.551276, - 0.0422473, 0.497824, 0.0470585, 0.551551, - 0.0489441, 0.497977, 0.0546433, 0.552074, - 0.0559596, 0.498312, 0.0628367, 0.552681, - 0.0633978, 0.498679, 0.071646, 0.553324, - 0.0713176, 0.499031, 0.0810746, 0.554011, - 0.0797268, 0.499365, 0.091129, 0.55488, - 0.0885238, 0.499779, 0.101837, 0.556171, - 0.0974417, 0.500444, 0.113239, 0.557498, - 0.106841, 0.501025, 0.125316, 0.559299, - 0.116533, 0.501864, 0.138128, 0.561647, - 0.126298, 0.502967, 0.151695, 0.564347, - 0.136388, 0.504129, 0.16604, 0.567863, - 0.146576, 0.505713, 0.181207, 0.572569, - 0.156832, 0.507953, 0.197259, 0.578919, - 0.167323, 0.511186, 0.214258, 0.585387, - 0.177712, 0.514042, 0.232038, 0.593134, - 0.188184, 0.517484, 0.250733, 0.603295, - 0.198717, 0.522345, 0.270454, 0.613854, - 0.209177, 0.526751, 0.290807, 0.626092, - 0.219644, 0.531595, 0.312202, 0.637868, - 0.229494, 0.534721, 0.334435, 0.652458, - 0.238718, 0.538304, 0.359184, 0.666985, - 0.247061, 0.539875, 0.385637, 0.683301, - 0.254652, 0.541042, 0.41328, 0.69998, - 0.261376, 0.540735, 0.441903, 0.717824, - 0.267085, 0.539139, 0.471609, 0.734617, - 0.271465, 0.534958, 0.501446, 0.753663, - 0.27528, 0.53032, 0.532571, 0.770512, - 0.277617, 0.522134, 0.563641, 0.787356, - 0.278525, 0.51206, 0.595067, 0.806252, - 0.278512, 0.50119, 0.627226, 0.822061, - 0.277023, 0.486791, 0.659402, 0.838959, - 0.273175, 0.470467, 0.692874, 0.85379, - 0.267238, 0.450688, 0.725702, 0.868268, - 0.260327, 0.429741, 0.75832, 0.881994, - 0.251946, 0.407223, 0.790189, 0.893885, - 0.242432, 0.383214, 0.821625, 0.905118, - 0.231904, 0.357297, 0.853011, 0.916045, - 0.219545, 0.330733, 0.883773, 0.927614, - 0.205378, 0.303916, 0.914435, 0.936005, - 0.190388, 0.275941, 0.944502, 0.944533, - 0.1749, 0.247493, 0.974439, 0.950758, - 0.158588, 0.218996, 1.00286, 0.957078, - 0.141027, 0.191559, 1.0304, 0.962448, - 0.121507, 0.164457, 1.05466, 0.964993, - 0.102068, 0.138636, 1.0761, 0.970017, - 0.0822598, 0.111861, 1.09541, 0.97661, - 0.062033, 0.0843438, 1.11317, 0.985073, - 0.0409832, 0.0558496, 1.12911, 0.993515, - 0.020146, 0.0275331, 1.1438, 1.00006, 0.00027329, - 0.000107883, 1.15736, 0.525324, - 9.99341e-06, 0.498153, 1.05385e-05, 0.526513, - 0.000251605, 0.499277, 0.000265329, 0.526517, - 0.00100641, 0.499282, 0.0010613, 0.526588, - 0.00226466, 0.499337, 0.00238823, 0.526539, - 0.0040255, 0.499302, 0.00424535, 0.526547, - 0.00628954, 0.499306, 0.00663364, 0.526561, - 0.00905628, 0.499313, 0.00955337, 0.526593, - 0.0123253, 0.499334, 0.0130054, 0.526642, - 0.0160957, 0.499365, 0.0169911, 0.5267, - 0.0203661, 0.499396, 0.0215122, 0.526792, - 0.0251347, 0.499451, 0.0265718, 0.526904, - 0.0303985, 0.499511, 0.0321732, 0.527079, - 0.0361554, 0.499617, 0.0383231, 0.527285, - 0.0423982, 0.499731, 0.045026, 0.527602, - 0.0491121, 0.499924, 0.0522936, 0.528166, - 0.0561127, 0.500306, 0.0601528, 0.52879, - 0.0635988, 0.5007, 0.0686059, 0.529421, - 0.071581, 0.501048, 0.0776518, 0.530144, - 0.0799854, 0.501421, 0.0873148, 0.531062, - 0.0888032, 0.501884, 0.0976084, 0.532374, - 0.0977643, 0.50259, 0.108588, 0.533828, - 0.107197, 0.50329, 0.120234, 0.53581, - 0.116887, 0.504312, 0.132602, 0.538063, - 0.126755, 0.505365, 0.145721, 0.5409, - 0.136819, 0.506668, 0.159617, 0.544882, - 0.147117, 0.508731, 0.174369, 0.550238, - 0.157446, 0.511601, 0.190028, 0.556038, - 0.167988, 0.514431, 0.206587, 0.563031, - 0.178364, 0.517808, 0.224046, 0.571543, - 0.189007, 0.521937, 0.242503, 0.582255, - 0.199546, 0.527415, 0.261977, 0.59272, - 0.210084, 0.531682, 0.282162, 0.605648, - 0.220448, 0.537123, 0.303426, 0.61785, - 0.230593, 0.540664, 0.325323, 0.632223, - 0.240238, 0.544467, 0.348993, 0.648819, - 0.24887, 0.547594, 0.375462, 0.665825, - 0.256657, 0.54912, 0.403024, 0.683389, - 0.263711, 0.549294, 0.431773, 0.701495, - 0.269666, 0.547649, 0.461494, 0.719197, - 0.274169, 0.543786, 0.491623, 0.737906, - 0.278124, 0.538644, 0.522994, 0.756652, - 0.280632, 0.531057, 0.554775, 0.775279, - 0.281741, 0.521972, 0.586441, 0.792688, - 0.281652, 0.509613, 0.618596, 0.811894, - 0.280345, 0.496497, 0.651462, 0.827938, - 0.277128, 0.47968, 0.684023, 0.844837, - 0.271646, 0.460688, 0.718024, 0.859239, - 0.264397, 0.438872, 0.751207, 0.874088, - 0.256144, 0.41577, 0.784232, 0.887693, - 0.246311, 0.391369, 0.816191, 0.899402, - 0.235497, 0.365872, 0.847828, 0.910973, - 0.223631, 0.338618, 0.87934, 0.92204, - 0.209874, 0.310803, 0.910325, 0.930987, - 0.194265, 0.281802, 0.940695, 0.94, - 0.178125, 0.252836, 0.970958, 0.948018, - 0.161479, 0.224239, 1.00078, 0.955141, - 0.144038, 0.195857, 1.0288, 0.960513, - 0.124915, 0.168487, 1.05371, 0.963964, - 0.104284, 0.141495, 1.07596, 0.968713, - 0.0838732, 0.114437, 1.09628, 0.975524, - 0.0635579, 0.0863105, 1.11448, 0.98431, - 0.042291, 0.0574774, 1.13069, 0.992916, - 0.0209131, 0.0284343, 1.14568, 0.999926, 0.000743097, - 0.000379265, 1.15955, 0.501042, - 9.98428e-06, 0.498726, 1.00306e-05, 0.502992, - 0.000252112, 0.500665, 0.000253283, 0.502417, - 0.00100791, 0.500092, 0.00101259, 0.502965, - 0.00226919, 0.500621, 0.00227978, 0.502318, - 0.00403109, 0.499994, 0.00405011, 0.502333, - 0.00629832, 0.500005, 0.00632868, 0.502362, - 0.00906907, 0.500027, 0.00911446, 0.502369, - 0.0123423, 0.500023, 0.0124078, 0.50243, - 0.0161178, 0.500066, 0.016211, 0.502493, - 0.0203937, 0.500103, 0.0205256, 0.502592, - 0.0251684, 0.500166, 0.0253548, 0.502707, - 0.0304389, 0.50023, 0.0307029, 0.502881, - 0.0362015, 0.500335, 0.0365753, 0.503124, - 0.0424507, 0.500488, 0.0429798, 0.503443, - 0.0491582, 0.500686, 0.0499268, 0.504083, - 0.0561476, 0.501155, 0.0574541, 0.504668, - 0.0636846, 0.501524, 0.0655408, 0.505319, - 0.0716834, 0.501904, 0.0742072, 0.50609, - 0.0800925, 0.502321, 0.0834699, 0.507122, - 0.0888425, 0.502896, 0.0933603, 0.508414, - 0.097855, 0.503603, 0.10391, 0.509955, - 0.107304, 0.504416, 0.115113, 0.512061, - 0.116921, 0.505565, 0.127054, 0.514419, - 0.12689, 0.506732, 0.139709, 0.517529, - 0.136934, 0.508338, 0.153173, 0.522085, - 0.147327, 0.510987, 0.167528, 0.526986, - 0.157612, 0.513527, 0.182708, 0.533122, - 0.168213, 0.516717, 0.198881, 0.540807, - 0.178688, 0.520832, 0.215986, 0.550687, - 0.189511, 0.52632, 0.234335, 0.560567, - 0.199998, 0.531009, 0.253375, 0.571698, - 0.210652, 0.535839, 0.273499, 0.584364, - 0.220917, 0.541091, 0.294355, 0.599066, - 0.23137, 0.546875, 0.316525, 0.614148, - 0.241206, 0.551306, 0.339671, 0.631157, - 0.250379, 0.555187, 0.36531, 0.647919, - 0.258397, 0.556595, 0.392767, 0.666112, - 0.265528, 0.556949, 0.421397, 0.686158, - 0.271827, 0.556617, 0.451433, 0.704838, - 0.27674, 0.552975, 0.482131, 0.723957, - 0.280733, 0.547814, 0.513458, 0.74262, - 0.283359, 0.53997, 0.545446, 0.762009, - 0.284541, 0.530422, 0.57775, 0.781314, - 0.284507, 0.518546, 0.610434, 0.799116, - 0.283309, 0.504178, 0.643178, 0.817604, - 0.280378, 0.48843, 0.676248, 0.83459, - 0.275619, 0.469457, 0.709698, 0.850974, - 0.26856, 0.447698, 0.744245, 0.866747, - 0.260094, 0.424791, 0.777695, 0.881412, - 0.249929, 0.399913, 0.810392, 0.8936, - 0.239137, 0.37308, 0.842872, 0.905943, - 0.226818, 0.345705, 0.874677, 0.916408, - 0.213699, 0.31706, 0.906257, 0.927215, - 0.198428, 0.288444, 0.936881, 0.935625, - 0.181643, 0.258329, 0.96795, 0.944076, - 0.164386, 0.228488, 0.998216, 0.951229, - 0.146339, 0.199763, 1.02689, 0.958793, - 0.127709, 0.172153, 1.0535, 0.963219, - 0.107244, 0.144989, 1.07646, 0.967562, - 0.0857764, 0.11685, 1.09675, 0.974866, - 0.0645377, 0.0880571, 1.11576, 0.983353, - 0.0431732, 0.0587352, 1.13227, 0.992503, - 0.0218356, 0.0294181, 1.1478, 1.00003, 0.000605203, - 0.000231013, 1.16207, 0.482935, - 1.01177e-05, 0.504695, 9.68142e-06, 0.477554, - 0.000251521, 0.499071, 0.000240676, 0.477904, - 0.00100683, 0.499436, 0.00096342, 0.478368, - 0.00226636, 0.499899, 0.0021687, 0.477977, - 0.00402719, 0.499513, 0.00385384, 0.477993, - 0.00629226, 0.499525, 0.0060221, 0.478011, - 0.00906011, 0.499536, 0.00867289, 0.478051, - 0.0123305, 0.499566, 0.0118074, 0.478089, - 0.016102, 0.499587, 0.0154269, 0.478171, - 0.0203736, 0.499645, 0.0195341, 0.478254, - 0.025143, 0.499692, 0.0241318, 0.47839, - 0.0304071, 0.499779, 0.0292247, 0.478588, - 0.0361631, 0.499911, 0.0348196, 0.478812, - 0.0424023, 0.500046, 0.0409231, 0.479208, - 0.0490724, 0.500326, 0.047552, 0.479841, - 0.0560722, 0.500805, 0.0547377, 0.480392, - 0.0636125, 0.501152, 0.0624607, 0.481068, - 0.0716134, 0.501561, 0.0707473, 0.481898, - 0.0800062, 0.502054, 0.0796118, 0.483022, - 0.0886568, 0.502728, 0.0890974, 0.484332, - 0.0977553, 0.503479, 0.0992099, 0.486126, - 0.107173, 0.504546, 0.10999, 0.488066, - 0.11677, 0.50557, 0.121476, 0.490521, - 0.126725, 0.506849, 0.133672, 0.494232, - 0.136793, 0.50911, 0.146731, 0.498302, - 0.147116, 0.511345, 0.160577, 0.503565, - 0.157446, 0.514344, 0.175335, 0.510902, - 0.168121, 0.518824, 0.191207, 0.519263, - 0.178799, 0.523666, 0.208058, 0.528204, - 0.189407, 0.528296, 0.225875, 0.538854, - 0.200145, 0.533724, 0.244782, 0.551278, - 0.210701, 0.539833, 0.264753, 0.565222, - 0.221303, 0.546131, 0.285745, 0.579403, - 0.231688, 0.551496, 0.307592, 0.595469, - 0.241718, 0.556809, 0.330582, 0.610929, - 0.250992, 0.559641, 0.354995, 0.629433, - 0.259602, 0.562379, 0.382471, 0.648504, - 0.267038, 0.563676, 0.411126, 0.66756, - 0.273388, 0.562092, 0.440924, 0.689143, - 0.278788, 0.560807, 0.472118, 0.709056, - 0.282783, 0.555701, 0.503774, 0.729855, - 0.285836, 0.548698, 0.536364, 0.748954, - 0.287078, 0.538544, 0.56895, 0.768373, - 0.287133, 0.526711, 0.601991, 0.78827, - 0.285839, 0.512511, 0.635403, 0.807465, - 0.283238, 0.496323, 0.668797, 0.825194, - 0.27906, 0.477638, 0.702584, 0.842203, - 0.272286, 0.456253, 0.736393, 0.857749, - 0.263854, 0.432412, 0.77096, 0.874799, - 0.253943, 0.407806, 0.80489, 0.887497, - 0.24237, 0.38033, 0.83771, 0.89966, - 0.230278, 0.352446, 0.870376, 0.911753, - 0.21646, 0.323268, 0.902256, 0.923011, - 0.202071, 0.294314, 0.933306, 0.932375, - 0.185519, 0.264104, 0.965177, 0.940537, - 0.167604, 0.234035, 0.996303, 0.948904, - 0.149068, 0.20412, 1.0261, 0.955263, - 0.129539, 0.175431, 1.05304, 0.960303, - 0.109932, 0.148116, 1.07617, 0.965512, - 0.0880572, 0.119693, 1.09742, 0.973466, - 0.0660548, 0.0901619, 1.11721, 0.98284, - 0.0439228, 0.0599875, 1.13436, 0.992216, - 0.0219588, 0.0298975, 1.15006, 0.999946, 0.000119402, - 2.08547e-05, 1.16471, 0.447827, - 1.00414e-05, 0.491543, 9.14833e-06, 0.454778, - 0.000251257, 0.499172, 0.00022891, 0.453519, - 0.00100342, 0.497787, 0.000914184, 0.45357, - 0.00225776, 0.497847, 0.00205701, 0.453578, - 0.00401371, 0.497855, 0.00365705, 0.45357, - 0.00627107, 0.497841, 0.00571453, 0.453598, - 0.00902968, 0.497864, 0.00823019, 0.453627, - 0.0122888, 0.497882, 0.0112049, 0.453684, - 0.0160475, 0.497923, 0.0146405, 0.453764, - 0.0203044, 0.49798, 0.0185394, 0.453866, - 0.0250576, 0.498049, 0.0229054, 0.453996, - 0.0303028, 0.49813, 0.0277424, 0.454196, - 0.0360379, 0.498267, 0.0330587, 0.454457, - 0.0422521, 0.498445, 0.0388613, 0.454926, - 0.0488393, 0.498812, 0.0451767, 0.455525, - 0.0558653, 0.499272, 0.0520153, 0.456074, - 0.0633772, 0.499625, 0.0593754, 0.456752, - 0.0713606, 0.500049, 0.0672751, 0.457648, - 0.07971, 0.500615, 0.0757447, 0.458849, - 0.0883032, 0.501399, 0.0848231, 0.46029, - 0.0974095, 0.502293, 0.0945135, 0.462, - 0.106729, 0.503301, 0.104848, 0.464121, - 0.116354, 0.504533, 0.115884, 0.466889, - 0.126214, 0.506172, 0.127652, 0.470744, - 0.136324, 0.508667, 0.14024, 0.47488, - 0.146595, 0.510995, 0.153673, 0.480845, - 0.157027, 0.514832, 0.168053, 0.488262, - 0.167658, 0.519506, 0.183508, 0.496547, - 0.178343, 0.524347, 0.199948, 0.506254, - 0.188916, 0.52983, 0.217503, 0.517961, - 0.199975, 0.536357, 0.236272, 0.531484, - 0.210624, 0.543641, 0.256096, 0.545496, - 0.221227, 0.550048, 0.277085, 0.559497, - 0.231568, 0.555076, 0.298615, 0.575752, - 0.241698, 0.560541, 0.321547, 0.591999, - 0.251172, 0.564156, 0.345602, 0.610654, - 0.260178, 0.567607, 0.371851, 0.630484, - 0.268094, 0.56923, 0.40076, 0.651807, - 0.274661, 0.569779, 0.430801, 0.67239, - 0.280331, 0.566791, 0.461939, 0.693024, - 0.284501, 0.562007, 0.493854, 0.715473, - 0.287852, 0.555791, 0.526992, 0.736323, - 0.28929, 0.546345, 0.560102, 0.755771, - 0.289405, 0.534, 0.593543, 0.775424, - 0.2881, 0.519114, 0.627256, 0.795447, - 0.285562, 0.502543, 0.661464, 0.815319, - 0.281416, 0.484773, 0.695206, 0.831769, - 0.275523, 0.463445, 0.729044, 0.849464, - 0.267516, 0.440269, 0.764069, 0.866775, - 0.257584, 0.415049, 0.799089, 0.881252, - 0.245817, 0.388049, 0.831948, 0.894209, - 0.233127, 0.35889, 0.865526, 0.906922, - 0.219579, 0.329915, 0.89818, 0.919686, - 0.204491, 0.300441, 0.930013, 0.929044, - 0.188962, 0.269445, 0.962061, 0.938393, - 0.171079, 0.238402, 0.994214, 0.94661, - 0.15199, 0.208204, 1.02533, 0.953095, - 0.131953, 0.178653, 1.0529, 0.958644, - 0.111233, 0.150684, 1.0771, 0.963925, - 0.0903098, 0.122359, 1.09855, 0.971995, - 0.0680505, 0.0923342, 1.11874, 0.981658, - 0.0448512, 0.0614195, 1.13635, 0.991649, - 0.0221931, 0.0303582, 1.15238, 0.999985, 0.000393403, - 0.000111086, 1.16772, 0.396806, - 9.71563e-06, 0.457671, 8.42355e-06, 0.429186, - 0.000249421, 0.495017, 0.00021625, 0.429324, - 0.000998052, 0.495173, 0.000865322, 0.429175, - 0.00224487, 0.494999, 0.00194637, 0.429129, - 0.00399041, 0.494952, 0.00346004, 0.429153, - 0.00623476, 0.494974, 0.00540684, 0.429168, - 0.0089773, 0.494983, 0.00778714, 0.429207, - 0.0122175, 0.495012, 0.0106022, 0.429257, - 0.0159542, 0.495047, 0.0138535, 0.429338, - 0.0201864, 0.495106, 0.0175443, 0.429431, - 0.0249104, 0.495165, 0.0216774, 0.429587, - 0.0301252, 0.495279, 0.0262594, 0.429796, - 0.0358249, 0.495432, 0.0312968, 0.430065, - 0.0419972, 0.495621, 0.0367985, 0.430588, - 0.0485144, 0.496061, 0.042798, 0.43113, - 0.0555028, 0.496472, 0.0492914, 0.431743, - 0.0629852, 0.496904, 0.0562907, 0.432448, - 0.0709256, 0.497369, 0.0638056, 0.433414, - 0.0791942, 0.498032, 0.071885, 0.434638, - 0.0877346, 0.498854, 0.0805517, 0.43611, - 0.0968056, 0.499812, 0.0898047, 0.437859, - 0.106002, 0.500891, 0.0997142, 0.440017, - 0.115648, 0.502198, 0.110289, 0.443236, - 0.125427, 0.504389, 0.121644, 0.44697, - 0.135492, 0.506809, 0.133769, 0.451689, - 0.145746, 0.509858, 0.146787, 0.45811, - 0.156219, 0.514247, 0.160793, 0.465305, - 0.166834, 0.518816, 0.175791, 0.474085, - 0.177546, 0.524331, 0.191906, 0.484808, - 0.188262, 0.53104, 0.209199, 0.49732, - 0.199346, 0.538511, 0.227825, 0.509693, - 0.209951, 0.544554, 0.247269, 0.524367, - 0.220533, 0.551616, 0.267978, 0.539228, - 0.231082, 0.557368, 0.289672, 0.55644, - 0.241342, 0.563782, 0.31268, 0.574204, - 0.250964, 0.568851, 0.33651, 0.593388, - 0.260306, 0.57312, 0.362219, 0.613358, - 0.268667, 0.574916, 0.390322, 0.634512, - 0.275591, 0.575053, 0.420478, 0.65563, - 0.281328, 0.572404, 0.451614, 0.678265, - 0.285948, 0.568893, 0.484112, 0.70011, - 0.289408, 0.561878, 0.517348, 0.723005, - 0.291328, 0.55359, 0.551355, 0.743744, - 0.291418, 0.541099, 0.585109, 0.763949, - 0.290252, 0.526489, 0.619487, 0.784186, - 0.287648, 0.509496, 0.65404, 0.804304, - 0.283782, 0.491484, 0.688649, 0.823629, - 0.278067, 0.470517, 0.723133, 0.84094, - 0.270588, 0.44705, 0.757163, 0.857852, - 0.261188, 0.421252, 0.792816, 0.874934, - 0.249313, 0.394191, 0.827248, 0.888709, - 0.236492, 0.365359, 0.861074, 0.902589, - 0.222185, 0.336016, 0.894417, 0.914201, - 0.207314, 0.30527, 0.926825, 0.925978, - 0.191146, 0.274532, 0.9595, 0.93512, - 0.174135, 0.243393, 0.991583, 0.943656, - 0.155231, 0.212414, 1.02356, 0.951719, - 0.134403, 0.182005, 1.05239, 0.957164, - 0.113023, 0.153043, 1.07754, 0.962656, - 0.0914493, 0.124186, 1.09984, 0.970695, - 0.0694179, 0.0941654, 1.12, 0.980749, - 0.0466199, 0.0629671, 1.13849, 0.991205, - 0.0227032, 0.0311146, 1.15494, 0.999884, 0.000632388, - 0.000254483, 1.1706, 0.379821, - 9.57289e-06, 0.460637, 7.89337e-06, 0.405188, - 0.000247483, 0.491396, 0.000204064, 0.404796, - 0.000989434, 0.490914, 0.000815853, 0.40483, - 0.00222607, 0.490949, 0.00183559, 0.40473, - 0.00395723, 0.49084, 0.00326332, 0.404731, - 0.00618287, 0.490836, 0.00509945, 0.404768, - 0.00890258, 0.490871, 0.00734463, 0.404791, - 0.0121156, 0.490883, 0.00999992, 0.404857, - 0.0158214, 0.490938, 0.0130676, 0.404943, - 0.0200178, 0.491004, 0.0165503, 0.405059, - 0.0247027, 0.491093, 0.0204521, 0.405213, - 0.0298729, 0.491205, 0.0247788, 0.405399, - 0.0355226, 0.491333, 0.0295373, 0.405731, - 0.0416352, 0.491604, 0.034741, 0.406303, - 0.0480807, 0.492116, 0.0404255, 0.406814, - 0.0550458, 0.492506, 0.0465732, 0.407404, - 0.0624652, 0.492926, 0.0532058, 0.408149, - 0.0702958, 0.493442, 0.0603442, 0.409128, - 0.0784623, 0.494136, 0.0680297, 0.410408, - 0.087007, 0.495054, 0.0762786, 0.411813, - 0.0959639, 0.495962, 0.0851046, 0.413735, - 0.105075, 0.497257, 0.0945878, 0.416137, - 0.114646, 0.498882, 0.104725, 0.41934, - 0.124394, 0.501132, 0.11563, 0.423326, - 0.134328, 0.503883, 0.127325, 0.428419, - 0.14458, 0.50747, 0.139911, 0.43484, - 0.154979, 0.511964, 0.153481, 0.442641, - 0.165628, 0.517328, 0.168114, 0.452511, - 0.176365, 0.524258, 0.183995, 0.463473, - 0.187298, 0.531248, 0.200953, 0.475564, - 0.198244, 0.538367, 0.219176, 0.488664, - 0.208938, 0.545175, 0.238514, 0.504073, - 0.219599, 0.553227, 0.259129, 0.520832, - 0.230378, 0.560653, 0.280997, 0.538455, - 0.240703, 0.567523, 0.303821, 0.55709, - 0.250548, 0.573287, 0.327948, 0.576646, - 0.259964, 0.577795, 0.353362, 0.596705, - 0.268721, 0.580077, 0.380336, 0.618053, - 0.276054, 0.58018, 0.4101, 0.640303, - 0.282176, 0.578747, 0.44161, 0.662365, - 0.286931, 0.574294, 0.474106, 0.684542, - 0.290521, 0.567035, 0.507549, 0.707984, - 0.292672, 0.558687, 0.541853, 0.730913, - 0.293189, 0.547606, 0.576581, 0.752948, - 0.292199, 0.533471, 0.61172, 0.773452, - 0.289508, 0.516395, 0.646339, 0.794715, - 0.285716, 0.497873, 0.682131, 0.814251, - 0.280051, 0.476845, 0.716396, 0.833057, - 0.272873, 0.453449, 0.751503, 0.84959, - 0.263982, 0.427857, 0.786085, 0.867022, - 0.252745, 0.400335, 0.821355, 0.882277, - 0.239655, 0.371304, 0.85646, 0.895375, - 0.225386, 0.340397, 0.890828, 0.909347, - 0.209587, 0.310005, 0.923532, 0.921885, - 0.193433, 0.2796, 0.956419, 0.932127, - 0.176135, 0.247276, 0.989445, 0.941869, - 0.157872, 0.216186, 1.02221, 0.949735, - 0.137577, 0.185602, 1.05195, 0.956617, - 0.115285, 0.155767, 1.07822, 0.961974, - 0.0928418, 0.126103, 1.10149, 0.96972, - 0.0700592, 0.0956758, 1.12207, 0.98012, - 0.0474671, 0.0643269, 1.1408, 0.990825, - 0.0238113, 0.0320863, 1.1577, 0.999876, 0.000381574, - 8.12203e-05, 1.17403, 0.367636, - 9.61342e-06, 0.469176, 7.53287e-06, 0.380377, - 0.000244772, 0.485434, 0.000191797, 0.380416, - 0.000978857, 0.485475, 0.000767015, 0.380376, - 0.00220165, 0.485435, 0.00172522, 0.380419, - 0.00391408, 0.485487, 0.00306734, 0.380438, - 0.00611549, 0.485505, 0.00479332, 0.380462, - 0.00880558, 0.485525, 0.00690391, 0.380496, - 0.0119837, 0.485551, 0.00940039, 0.38056, - 0.0156487, 0.485605, 0.0122848, 0.38064, - 0.0197988, 0.485666, 0.0155601, 0.380767, - 0.0244324, 0.48577, 0.0192313, 0.380909, - 0.0295444, 0.485871, 0.0233032, 0.381142, - 0.0351321, 0.48606, 0.0277861, 0.381472, - 0.0411535, 0.486336, 0.0326939, 0.382015, - 0.0475408, 0.486833, 0.0380565, 0.382523, - 0.0544395, 0.487231, 0.0438615, 0.383129, - 0.061784, 0.487683, 0.0501332, 0.383952, - 0.0695085, 0.488313, 0.0568996, 0.38498, - 0.0775819, 0.489077, 0.0641952, 0.386331, - 0.0860443, 0.490113, 0.0720324, 0.387788, - 0.0948406, 0.491099, 0.0804379, 0.389808, - 0.103899, 0.492566, 0.0894899, 0.39252, - 0.113313, 0.494601, 0.0992098, 0.395493, - 0.123007, 0.496619, 0.109641, 0.399826, - 0.132859, 0.499912, 0.120919, 0.405341, - 0.143077, 0.504061, 0.133107, 0.411932, - 0.153465, 0.508905, 0.146263, 0.420591, - 0.164108, 0.515482, 0.160544, 0.43101, - 0.174893, 0.523191, 0.176123, 0.441881, - 0.185839, 0.53026, 0.192757, 0.453919, - 0.196633, 0.537295, 0.210535, 0.468715, - 0.207611, 0.546156, 0.229886, 0.485182, - 0.218517, 0.555173, 0.250543, 0.501926, - 0.229249, 0.562728, 0.27221, 0.51785, - 0.239481, 0.567494, 0.294892, 0.536947, - 0.249395, 0.573889, 0.318987, 0.557115, - 0.259, 0.578831, 0.344348, 0.577966, - 0.268075, 0.582055, 0.371223, 0.599489, - 0.276115, 0.583307, 0.399834, 0.62479, - 0.282523, 0.583902, 0.431415, 0.647504, - 0.287663, 0.57953, 0.464301, 0.670601, - 0.291538, 0.573103, 0.498123, 0.693539, - 0.293842, 0.563731, 0.532662, 0.717385, - 0.294681, 0.553169, 0.567925, 0.741533, - 0.293717, 0.539908, 0.603502, 0.762142, - 0.291156, 0.521902, 0.639074, 0.783014, - 0.28719, 0.502815, 0.674439, 0.805158, - 0.281773, 0.482598, 0.710497, 0.823646, - 0.274682, 0.458949, 0.7456, 0.841879, - 0.266184, 0.433129, 0.781085, 0.859515, - 0.255682, 0.406064, 0.816, 0.875335, - 0.242849, 0.376509, 0.851074, 0.890147, - 0.228329, 0.345502, 0.886473, 0.903144, - 0.212491, 0.31428, 0.920751, 0.916618, - 0.195695, 0.282994, 0.954606, 0.927953, - 0.178267, 0.251091, 0.988402, 0.937414, - 0.159549, 0.219107, 1.02141, 0.946823, - 0.140022, 0.18896, 1.05167, 0.954651, - 0.118154, 0.158667, 1.07819, 0.959955, - 0.0946636, 0.128808, 1.1025, 0.96858, - 0.0711792, 0.0973787, 1.12391, 0.97938, - 0.0475046, 0.0650965, 1.14322, 0.990498, - 0.024059, 0.0326267, 1.16077, 0.999844, - 5.12408e-05, 0.000112444, 1.17727, 0.316912, - 9.34977e-06, 0.425996, 6.95559e-06, 0.356423, - 0.000241372, 0.479108, 0.000179562, 0.356272, - 0.000965292, 0.478897, 0.00071811, 0.356262, - 0.00217182, 0.478894, 0.00161574, 0.356265, - 0.00386092, 0.478895, 0.00287261, 0.356278, - 0.0060324, 0.478905, 0.00448907, 0.356293, - 0.00868565, 0.478914, 0.00646572, 0.356346, - 0.0118207, 0.478965, 0.00880438, 0.356395, - 0.0154355, 0.479001, 0.0115066, 0.356484, - 0.019529, 0.479075, 0.0145762, 0.356609, - 0.0240991, 0.47918, 0.018018, 0.356766, - 0.0291413, 0.479305, 0.0218379, 0.357009, - 0.0346498, 0.479512, 0.0260454, 0.357424, - 0.0405462, 0.479909, 0.0306657, 0.357899, - 0.0468825, 0.480337, 0.0357054, 0.358424, - 0.0536887, 0.480771, 0.0411728, 0.359041, - 0.0609416, 0.481242, 0.0470841, 0.359903, - 0.0685239, 0.481943, 0.0534831, 0.360932, - 0.0764883, 0.482741, 0.0603795, 0.362196, - 0.0848364, 0.483688, 0.0678028, 0.363847, - 0.0935002, 0.484947, 0.0758086, 0.365972, - 0.102471, 0.486588, 0.0844173, 0.368741, - 0.111751, 0.488787, 0.0937199, 0.372146, - 0.121334, 0.491405, 0.103732, 0.377114, - 0.131147, 0.495604, 0.114608, 0.38226, - 0.141213, 0.499436, 0.126345, 0.389609, - 0.151632, 0.505334, 0.139116, 0.397925, - 0.162073, 0.51168, 0.152995, 0.407824, - 0.172819, 0.518876, 0.168071, 0.420014, - 0.183929, 0.527639, 0.184495, 0.434266, - 0.195032, 0.537588, 0.20232, 0.447352, - 0.205792, 0.544379, 0.221189, 0.463726, - 0.216704, 0.553422, 0.241616, 0.481406, - 0.227531, 0.562074, 0.263298, 0.498707, - 0.238017, 0.568227, 0.286116, 0.518039, - 0.247936, 0.574473, 0.3101, 0.538277, - 0.257437, 0.579191, 0.335401, 0.561166, - 0.266829, 0.584807, 0.362246, 0.583189, - 0.275329, 0.586476, 0.390609, 0.606024, - 0.28234, 0.585578, 0.420998, 0.632419, - 0.287924, 0.584496, 0.454357, 0.656128, - 0.291972, 0.577766, 0.488233, 0.679953, - 0.29456, 0.56875, 0.523248, 0.704654, - 0.295816, 0.558388, 0.559168, 0.729016, - 0.295157, 0.544826, 0.595326, 0.752062, - 0.292779, 0.528273, 0.631864, 0.773138, - 0.288681, 0.508482, 0.667793, 0.794869, - 0.283358, 0.487341, 0.704035, 0.815101, - 0.27608, 0.46354, 0.739925, 0.834212, - 0.26767, 0.438672, 0.775539, 0.852368, - 0.257397, 0.411239, 0.810895, 0.870207, - 0.245689, 0.3829, 0.846472, 0.884063, - 0.231452, 0.351496, 0.881788, 0.898284, - 0.215561, 0.31895, 0.917438, 0.912964, - 0.198208, 0.287367, 0.952422, 0.924666, - 0.180426, 0.254487, 0.987551, 0.934429, - 0.161525, 0.222226, 1.02142, 0.943485, - 0.141197, 0.191143, 1.05218, 0.9521, - 0.120085, 0.161112, 1.07937, 0.957876, - 0.0975881, 0.130982, 1.10403, 0.966943, - 0.0726842, 0.0990553, 1.12616, 0.978313, - 0.0483705, 0.0662818, 1.14619, 0.990048, - 0.0239072, 0.0329243, 1.16413, 0.999984, 0.000461885, - 7.72859e-05, 1.18099, 0.321287, - 9.35049e-06, 0.455413, 6.59662e-06, 0.332595, - 0.000237513, 0.471437, 0.000167562, 0.332729, - 0.000949964, 0.471618, 0.000670192, 0.332305, - 0.00213618, 0.471028, 0.00150712, 0.332326, - 0.00379765, 0.471055, 0.00267959, 0.332344, - 0.00593353, 0.471072, 0.00418751, 0.332356, - 0.00854349, 0.471077, 0.00603172, 0.332403, - 0.0116268, 0.471121, 0.00821362, 0.332461, - 0.0151824, 0.47117, 0.0107357, 0.332552, - 0.0192088, 0.471251, 0.0136014, 0.332657, - 0.0237024, 0.47133, 0.0168152, 0.332835, - 0.0286615, 0.471487, 0.0203853, 0.333083, - 0.0340765, 0.471708, 0.0243212, 0.333547, - 0.0398563, 0.47219, 0.0286518, 0.333989, - 0.0460916, 0.472587, 0.0333763, 0.334532, - 0.0527897, 0.473054, 0.0385084, 0.335167, - 0.0599284, 0.473568, 0.0440638, 0.33608, - 0.0673514, 0.474362, 0.0500962, 0.337146, - 0.0752237, 0.475231, 0.0566022, 0.338462, - 0.083418, 0.476282, 0.0636272, 0.34014, - 0.0919382, 0.477615, 0.0712153, 0.342341, - 0.100741, 0.479404, 0.079417, 0.345088, - 0.109905, 0.481618, 0.0882631, 0.349049, - 0.119369, 0.485081, 0.0978851, 0.353939, - 0.129033, 0.489317, 0.108336, 0.359893, - 0.139038, 0.494309, 0.119698, 0.366945, - 0.149411, 0.499983, 0.132024, 0.375814, - 0.159843, 0.507185, 0.145558, 0.387112, - 0.170664, 0.516392, 0.160433, 0.40023, - 0.181897, 0.526519, 0.176648, 0.412555, - 0.192785, 0.53423, 0.193922, 0.427023, - 0.203663, 0.542741, 0.212662, 0.443685, - 0.214695, 0.552066, 0.232944, 0.461499, - 0.225561, 0.560762, 0.254495, 0.480975, - 0.236257, 0.569421, 0.277531, 0.501, - 0.24639, 0.576101, 0.301724, 0.521691, - 0.256101, 0.581493, 0.327112, 0.543478, - 0.265289, 0.585221, 0.353917, 0.566094, - 0.273938, 0.587614, 0.381941, 0.589578, - 0.281679, 0.587991, 0.41172, 0.614583, - 0.287655, 0.585928, 0.444148, 0.641813, - 0.292228, 0.582092, 0.478617, 0.666189, - 0.295172, 0.57398, 0.51397, 0.690475, - 0.29648, 0.561676, 0.550118, 0.715543, - 0.296203, 0.548758, 0.586933, 0.740405, - 0.293999, 0.532792, 0.62384, 0.762183, - 0.28998, 0.512735, 0.660723, 0.786069, - 0.28478, 0.492402, 0.69807, 0.806812, - 0.277568, 0.469058, 0.734422, 0.826987, - 0.268951, 0.443017, 0.770946, 0.844588, - 0.259049, 0.415501, 0.80699, 0.863725, - 0.2471, 0.387328, 0.842107, 0.879137, - 0.234157, 0.356108, 0.878078, 0.894634, - 0.218719, 0.324315, 0.914058, 0.909162, - 0.201293, 0.291813, 0.949922, 0.92072, - 0.18267, 0.258474, 0.985337, 0.93158, - 0.163212, 0.225593, 1.0205, 0.941238, - 0.142771, 0.193986, 1.05273, 0.949293, - 0.120956, 0.163392, 1.08075, 0.956226, - 0.0985743, 0.132934, 1.10559, 0.96546, - 0.075118, 0.101255, 1.12823, 0.977403, - 0.0497921, 0.0675441, 1.149, 0.989648, - 0.0241574, 0.0334681, 1.16765, 1.00001, 0.0005762, - 0.000184807, 1.18519, 0.303474, - 9.16603e-06, 0.4542, 6.1243e-06, 0.308894, - 0.000232869, 0.462306, 0.000155592, 0.309426, - 0.000931661, 0.463093, 0.000622499, 0.308643, - 0.0020949, 0.461933, 0.00139979, 0.308651, - 0.0037242, 0.461941, 0.00248874, 0.308662, - 0.00581873, 0.46195, 0.00388933, 0.308687, - 0.00837818, 0.461974, 0.00560247, 0.308728, - 0.0114016, 0.462011, 0.00762948, 0.308789, - 0.0148884, 0.462067, 0.00997326, 0.308882, - 0.0188369, 0.462151, 0.0126375, 0.309007, - 0.0232436, 0.462263, 0.0156271, 0.30918, - 0.0281054, 0.462417, 0.0189498, 0.309442, - 0.0334065, 0.462667, 0.0226167, 0.309901, - 0.0390589, 0.463162, 0.0266614, 0.310331, - 0.0452042, 0.463555, 0.0310715, 0.310858, - 0.0517735, 0.464019, 0.0358698, 0.311576, - 0.0587359, 0.464669, 0.0410848, 0.312436, - 0.0660383, 0.465406, 0.0467453, 0.313526, - 0.0737266, 0.466339, 0.0528718, 0.314903, - 0.0817574, 0.467504, 0.0595039, 0.316814, - 0.090167, 0.469226, 0.0666888, 0.318965, - 0.0987555, 0.470981, 0.0744658, 0.322077, - 0.107792, 0.473814, 0.082912, 0.325947, - 0.117098, 0.477241, 0.0920846, 0.331008, - 0.126602, 0.48184, 0.102137, 0.337893, - 0.136619, 0.488334, 0.113135, 0.345106, - 0.146838, 0.494415, 0.12511, 0.355111, - 0.157357, 0.503275, 0.138356, 0.365095, - 0.167955, 0.510966, 0.152686, 0.378344, - 0.179157, 0.521508, 0.16856, 0.391599, - 0.190143, 0.530455, 0.18561, 0.407786, - 0.20123, 0.541275, 0.204308, 0.425294, - 0.212456, 0.551784, 0.224623, 0.444021, - 0.223568, 0.561493, 0.246172, 0.463418, - 0.234154, 0.569886, 0.268979, 0.484077, - 0.244546, 0.577116, 0.293411, 0.505513, - 0.254301, 0.582914, 0.318936, 0.527672, - 0.263564, 0.587208, 0.345856, 0.550565, - 0.272332, 0.589277, 0.374054, 0.573656, - 0.280011, 0.588426, 0.403276, 0.59827, - 0.286924, 0.587504, 0.43474, 0.624731, - 0.291994, 0.583401, 0.468767, 0.652396, - 0.295159, 0.576997, 0.504411, 0.67732, - 0.296954, 0.565863, 0.54114, 0.703147, - 0.296877, 0.552316, 0.57816, 0.728715, - 0.295147, 0.536773, 0.616124, 0.752448, - 0.291275, 0.51771, 0.653885, 0.775169, - 0.285905, 0.496087, 0.691537, 0.799307, - 0.279064, 0.474232, 0.729251, 0.819482, - 0.270294, 0.447676, 0.766267, 0.837659, - 0.260032, 0.419656, 0.802616, 0.856903, - 0.248497, 0.391328, 0.838583, 0.873325, - 0.235252, 0.360285, 0.874711, 0.889788, - 0.221126, 0.329215, 0.91077, 0.904486, - 0.204304, 0.296392, 0.94653, 0.917711, - 0.185562, 0.262159, 0.983828, 0.928969, - 0.165635, 0.229142, 1.01955, 0.939707, - 0.14442, 0.19673, 1.05317, 0.948167, - 0.122147, 0.165095, 1.0823, 0.955222, - 0.099098, 0.13451, 1.10791, 0.964401, - 0.0755332, 0.102476, 1.1312, 0.976605, - 0.0513817, 0.0689667, 1.15218, 0.989085, - 0.0258499, 0.034506, 1.17129, 0.999908, 0.000617773, - 0.000271268, 1.18961, 0.285803, - 9.05752e-06, 0.452348, 5.72272e-06, 0.284689, - 0.00022732, 0.450581, 0.000143626, 0.285263, - 0.000910214, 0.451482, 0.000575099, 0.285302, - 0.00204784, 0.451553, 0.00129395, 0.285318, - 0.00364057, 0.451574, 0.0023006, 0.28533, - 0.00568813, 0.451585, 0.00359547, 0.285361, - 0.00819001, 0.451618, 0.00517934, 0.285397, - 0.0111458, 0.45165, 0.007054, 0.285447, - 0.0145536, 0.451688, 0.00922167, 0.285527, - 0.0184127, 0.451758, 0.0116869, 0.285688, - 0.0227207, 0.451929, 0.0144555, 0.28584, - 0.0274712, 0.452055, 0.0175341, 0.286136, - 0.0326278, 0.452369, 0.0209406, 0.286574, - 0.0381792, 0.452853, 0.0246965, 0.287012, - 0.0441879, 0.453272, 0.0287996, 0.287542, - 0.0506096, 0.453752, 0.033268, 0.288299, - 0.0573634, 0.454488, 0.0381504, 0.289186, - 0.0645458, 0.455294, 0.0434447, 0.290302, - 0.0720405, 0.456301, 0.0491973, 0.291776, - 0.0799046, 0.457648, 0.0554453, 0.29372, - 0.088117, 0.459483, 0.0622311, 0.296052, - 0.0965328, 0.461571, 0.0695992, 0.299563, - 0.105409, 0.465085, 0.077658, 0.30335, - 0.114553, 0.468506, 0.0864176, 0.309167, - 0.123917, 0.474423, 0.0961078, 0.31529, - 0.13381, 0.47995, 0.106643, 0.324163, - 0.144021, 0.488592, 0.118322, 0.333272, - 0.154382, 0.496461, 0.131133, 0.344224, - 0.165015, 0.50562, 0.145208, 0.357733, - 0.176168, 0.516719, 0.16073, 0.373046, - 0.187468, 0.528513, 0.177807, 0.38788, - 0.198488, 0.537713, 0.196072, 0.405133, - 0.209545, 0.547999, 0.21605, 0.423845, - 0.220724, 0.55759, 0.237484, 0.443777, - 0.231518, 0.566246, 0.26039, 0.464824, - 0.242035, 0.574326, 0.284835, 0.486635, - 0.251898, 0.58037, 0.310518, 0.51012, - 0.261304, 0.58568, 0.337678, 0.535301, - 0.270384, 0.590197, 0.366242, 0.559193, - 0.27841, 0.590569, 0.395873, 0.583544, - 0.285325, 0.588161, 0.426857, 0.608834, - 0.291113, 0.584249, 0.459477, 0.635753, - 0.294882, 0.57763, 0.494734, 0.664367, - 0.297088, 0.569479, 0.532023, 0.689688, - 0.297364, 0.555064, 0.569629, 0.715732, - 0.295949, 0.539522, 0.608124, 0.741307, - 0.292259, 0.521613, 0.646231, 0.764949, - 0.287063, 0.49969, 0.684938, 0.788599, - 0.28012, 0.476747, 0.723548, 0.81048, - 0.27153, 0.45116, 0.761135, 0.831372, - 0.261289, 0.424101, 0.798916, 0.850092, - 0.249559, 0.39443, 0.835952, 0.867777, - 0.236348, 0.363849, 0.871606, 0.884632, - 0.221569, 0.332477, 0.907843, 0.90047, - 0.20618, 0.300667, 0.944187, 0.914524, - 0.188771, 0.266552, 0.981371, 0.926892, - 0.168362, 0.232349, 1.01841, 0.937951, - 0.146761, 0.199359, 1.05308, 0.947236, - 0.123813, 0.1675, 1.0839, 0.954367, - 0.099984, 0.136166, 1.11047, 0.963907, - 0.0759278, 0.103808, 1.13414, 0.976218, - 0.0511367, 0.0697061, 1.15575, 0.988772, - 0.0267415, 0.0352529, 1.17531, 0.999888, - 0.000520778, 0.000289926, 1.19389, 0.263546, - 8.83274e-06, 0.441896, 5.26783e-06, 0.262352, - 0.000221849, 0.439889, 0.000132311, 0.262325, - 0.000886683, 0.439848, 0.000528824, 0.26228, - 0.00199476, 0.439765, 0.00118975, 0.262372, - 0.00354671, 0.439922, 0.00211568, 0.26239, - 0.00554141, 0.439941, 0.00330652, 0.262412, - 0.00797888, 0.439961, 0.00476346, 0.262453, - 0.0108584, 0.440002, 0.00648818, 0.262528, - 0.0141788, 0.440085, 0.0084835, 0.262615, - 0.017938, 0.440166, 0.0107533, 0.262744, - 0.0221346, 0.440291, 0.0133044, 0.262939, - 0.026762, 0.440493, 0.0161445, 0.263277, - 0.0317573, 0.440889, 0.0192974, 0.26368, - 0.0371832, 0.441338, 0.0227699, 0.264106, - 0.0430371, 0.441753, 0.0265698, 0.264624, - 0.0493035, 0.442227, 0.0307178, 0.265378, - 0.0558669, 0.442985, 0.0352616, 0.266253, - 0.0628718, 0.443795, 0.0401968, 0.267478, - 0.0701569, 0.445008, 0.04559, 0.269062, - 0.077845, 0.446599, 0.0514539, 0.270926, - 0.0857941, 0.448349, 0.0578382, 0.273693, - 0.0940773, 0.451221, 0.0648363, 0.276746, - 0.102704, 0.454097, 0.0724389, 0.281693, - 0.111735, 0.459517, 0.0808744, 0.287335, - 0.121004, 0.46531, 0.0901551, 0.29448, - 0.130734, 0.472605, 0.100371, 0.30257, - 0.140777, 0.480251, 0.111644, 0.312465, - 0.15111, 0.489444, 0.124111, 0.324856, - 0.16189, 0.500919, 0.137979, 0.33774, - 0.172946, 0.511317, 0.153163, 0.35255, - 0.184152, 0.522684, 0.169817, 0.367786, - 0.19522, 0.53248, 0.187886, 0.385474, - 0.20632, 0.543326, 0.207634, 0.404976, - 0.217744, 0.554109, 0.229165, 0.425203, - 0.228691, 0.563395, 0.252068, 0.446704, - 0.239299, 0.571565, 0.276471, 0.468951, - 0.249348, 0.577935, 0.302323, 0.493487, - 0.258933, 0.584309, 0.329882, 0.517861, - 0.268009, 0.58773, 0.358525, 0.543309, - 0.276238, 0.589612, 0.388585, 0.569704, - 0.28356, 0.589294, 0.419787, 0.594871, - 0.289497, 0.585137, 0.452114, 0.622555, - 0.294452, 0.580356, 0.486466, 0.651167, - 0.296918, 0.57185, 0.523079, 0.677332, - 0.297647, 0.558428, 0.5611, 0.703718, - 0.296321, 0.542232, 0.599592, 0.730262, - 0.293339, 0.524541, 0.639138, 0.754304, - 0.288036, 0.502691, 0.677978, 0.778051, - 0.281018, 0.479212, 0.716537, 0.801557, - 0.272414, 0.454071, 0.75586, 0.822559, - 0.262419, 0.425952, 0.794477, 0.843051, - 0.250702, 0.397313, 0.832664, 0.86232, - 0.237264, 0.366534, 0.869876, 0.879044, - 0.222716, 0.334816, 0.906973, 0.896362, - 0.206827, 0.303143, 0.943558, 0.910342, - 0.189659, 0.269699, 0.979759, 0.924119, - 0.171108, 0.236411, 1.01718, 0.935374, - 0.149579, 0.202224, 1.05289, 0.944295, - 0.126295, 0.16989, 1.08496, 0.952227, - 0.101511, 0.138089, 1.11256, 0.962041, - 0.0766392, 0.105053, 1.1375, 0.97528, - 0.0511967, 0.070329, 1.15983, 0.988476, - 0.025463, 0.0351268, 1.17987, 0.999962, 2.86808e-05, 1.45564e-05, 1.19901, 0.227089, - 8.41413e-06, 0.404216, 4.72707e-06, 0.239725, - 0.000215083, 0.426708, 0.000120833, 0.239904, - 0.000860718, 0.427028, 0.000483555, 0.239911, - 0.00193661, 0.427039, 0.00108806, 0.239914, - 0.00344276, 0.42704, 0.00193457, 0.239933, - 0.00537907, 0.427064, 0.00302363, 0.239944, - 0.00774482, 0.427065, 0.00435604, 0.239993, - 0.01054, 0.427122, 0.00593398, 0.240052, - 0.0137626, 0.427179, 0.00775987, 0.240148, - 0.0174115, 0.427279, 0.00983854, 0.240278, - 0.021484, 0.42741, 0.0121763, 0.240472, - 0.0259729, 0.427618, 0.0147827, 0.240839, - 0.0308131, 0.428086, 0.0176837, 0.241201, - 0.0360893, 0.428482, 0.0208775, 0.241626, - 0.0417723, 0.428907, 0.0243821, 0.242207, - 0.0478337, 0.42952, 0.0282228, 0.24298, - 0.0542199, 0.430332, 0.0324333, 0.243881, - 0.0610015, 0.431222, 0.0370252, 0.245123, - 0.0680874, 0.432512, 0.0420535, 0.24667, - 0.0755482, 0.434088, 0.0475414, 0.248779, - 0.0832873, 0.436323, 0.0535542, 0.251665, - 0.0913546, 0.439509, 0.0601716, 0.255305, - 0.0998489, 0.443478, 0.0674282, 0.260049, - 0.108576, 0.448713, 0.0754673, 0.266192, - 0.117754, 0.455524, 0.084339, 0.273158, - 0.127294, 0.4627, 0.0941683, 0.282131, - 0.137311, 0.472068, 0.10515, 0.293332, - 0.147736, 0.483565, 0.117402, 0.304667, - 0.158357, 0.493702, 0.130824, 0.317785, - 0.169274, 0.504708, 0.145724, 0.333245, - 0.180595, 0.517107, 0.16215, 0.349843, - 0.191892, 0.528849, 0.180149, 0.367944, - 0.203168, 0.540301, 0.199746, 0.387579, - 0.214443, 0.551514, 0.221047, 0.408247, - 0.225624, 0.560906, 0.243981, 0.43014, - 0.236422, 0.56959, 0.268513, 0.452669, - 0.24654, 0.576098, 0.294409, 0.476196, - 0.256157, 0.580925, 0.322002, 0.501157, - 0.265289, 0.584839, 0.351052, 0.527632, - 0.273671, 0.587614, 0.3812, 0.555754, - 0.281254, 0.589119, 0.412994, 0.581682, - 0.287448, 0.585204, 0.445498, 0.608196, - 0.292614, 0.579006, 0.479505, 0.635661, - 0.296068, 0.571297, 0.514643, 0.664999, - 0.297395, 0.560855, 0.552213, 0.691039, - 0.296645, 0.544525, 0.591365, 0.7179, - 0.293785, 0.526535, 0.630883, 0.744059, - 0.289089, 0.50545, 0.670932, 0.76863, - 0.282239, 0.482514, 0.710904, 0.793273, - 0.273688, 0.457246, 0.750259, 0.814731, - 0.26328, 0.428872, 0.78948, 0.835603, - 0.251526, 0.399384, 0.828597, 0.85489, - 0.238339, 0.368811, 0.866892, 0.872828, - 0.223607, 0.336617, 0.90563, 0.889462, - 0.207538, 0.303997, 0.943538, 0.904929, - 0.190297, 0.270812, 0.980591, 0.919101, - 0.172034, 0.237453, 1.01935, 0.930536, - 0.152058, 0.204431, 1.05498, 0.941223, - 0.129515, 0.172495, 1.08717, 0.94982, - 0.104263, 0.140175, 1.11551, 0.960592, - 0.0781944, 0.106465, 1.14098, 0.974629, - 0.051688, 0.0711592, 1.16418, 0.98811, - 0.0253929, 0.0354432, 1.18465, 1.00004, 0.000804378, - 0.000330876, 1.20462, 0.214668, - 8.21282e-06, 0.406619, 4.33582e-06, 0.218053, - 0.000208144, 0.413025, 0.000109887, 0.217987, - 0.000832212, 0.412901, 0.000439362, 0.217971, - 0.00187246, 0.412876, 0.000988623, 0.217968, - 0.00332855, 0.41286, 0.00175772, 0.217985, - 0.00520055, 0.412882, 0.00274729, 0.218014, - 0.00748814, 0.412916, 0.00395842, 0.218054, - 0.0101901, 0.412957, 0.00539274, 0.218106, - 0.0133057, 0.413005, 0.00705348, 0.218217, - 0.0168342, 0.413139, 0.00894581, 0.218338, - 0.0207707, 0.413258, 0.0110754, 0.21855, - 0.0251001, 0.413509, 0.0134551, 0.218913, - 0.0297861, 0.413992, 0.0161081, 0.219265, - 0.0348956, 0.414383, 0.0190307, 0.219696, - 0.0403909, 0.414839, 0.0222458, 0.220329, - 0.0462003, 0.415567, 0.025792, 0.220989, - 0.0524208, 0.41621, 0.0296637, 0.222027, - 0.058948, 0.417385, 0.0339323, 0.223301, - 0.0658208, 0.418779, 0.0386055, 0.224988, - 0.0730347, 0.420665, 0.0437355, 0.227211, - 0.0805274, 0.423198, 0.0493844, 0.230131, - 0.088395, 0.426566, 0.0556135, 0.233908, - 0.0966208, 0.43091, 0.0624829, 0.239092, - 0.105223, 0.437148, 0.0701636, 0.245315, - 0.11424, 0.444302, 0.0786949, 0.253166, - 0.12368, 0.453262, 0.0882382, 0.262374, - 0.133569, 0.463211, 0.0988682, 0.273145, - 0.143836, 0.474271, 0.110727, 0.285512, - 0.154577, 0.4863, 0.123945, 0.299512, - 0.165501, 0.498817, 0.138581, 0.314287, - 0.176698, 0.510341, 0.154676, 0.331083, - 0.188066, 0.522583, 0.172459, 0.349615, - 0.199597, 0.534879, 0.191979, 0.369318, - 0.210843, 0.546083, 0.21309, 0.390377, - 0.222068, 0.5562, 0.235998, 0.412411, - 0.233059, 0.564704, 0.260518, 0.435715, - 0.24357, 0.572314, 0.286795, 0.461196, - 0.253356, 0.579395, 0.314559, 0.485587, - 0.262362, 0.581985, 0.343581, 0.511908, - 0.270895, 0.584347, 0.374367, 0.539798, - 0.278452, 0.58505, 0.406015, 0.567974, - 0.284877, 0.583344, 0.439168, 0.594303, - 0.290124, 0.577348, 0.473005, 0.622951, - 0.294183, 0.570751, 0.508534, 0.652404, - 0.296389, 0.561541, 0.544764, 0.679291, - 0.296605, 0.546426, 0.582927, 0.706437, - 0.294095, 0.528599, 0.622681, 0.734485, - 0.28978, 0.508676, 0.663567, 0.758841, - 0.283363, 0.484768, 0.704092, 0.78537, - 0.275015, 0.460434, 0.745101, 0.807315, - 0.264689, 0.432166, 0.784712, 0.8271, - 0.252597, 0.401807, 0.824241, 0.849191, - 0.239154, 0.371458, 0.863803, 0.867046, - 0.224451, 0.338873, 0.903063, 0.8852, - 0.208342, 0.306175, 0.942763, 0.901771, - 0.190684, 0.272759, 0.981559, 0.915958, - 0.172105, 0.239306, 1.02048, 0.928046, - 0.152214, 0.206071, 1.05765, 0.939961, - 0.130247, 0.17367, 1.08999, 0.948711, - 0.10672, 0.142201, 1.11829, 0.959305, - 0.0808688, 0.108454, 1.14467, 0.973009, - 0.0539145, 0.0728109, 1.16839, 0.987631, - 0.0262947, 0.0360625, 1.19004, 0.999978, 0.00132758, - 0.000559424, 1.21058, 0.193925, - 7.93421e-06, 0.391974, 3.92537e-06, 0.196746, - 0.000200315, 0.397675, 9.91033e-05, 0.19667, - 0.000801099, 0.397521, 0.000396342, 0.196633, - 0.00180246, 0.397445, 0.000891829, 0.196654, - 0.00320443, 0.397482, 0.00158582, 0.196659, - 0.00500647, 0.39748, 0.00247867, 0.196683, - 0.0072086, 0.397506, 0.00357167, 0.196728, - 0.00981001, 0.397562, 0.00486675, 0.196792, - 0.0128096, 0.397633, 0.00636707, 0.19689, - 0.0162055, 0.397746, 0.00807752, 0.197017, - 0.0199943, 0.397884, 0.0100052, 0.19729, - 0.024139, 0.39827, 0.0121691, 0.197583, - 0.0286671, 0.398639, 0.0145755, 0.197927, - 0.0335858, 0.399034, 0.0172355, 0.198383, - 0.0388806, 0.399554, 0.0201718, 0.199002, - 0.0444736, 0.400289, 0.0234194, 0.199739, - 0.0504583, 0.401111, 0.026984, 0.200784, - 0.056729, 0.402349, 0.0309217, 0.202075, - 0.0633643, 0.403841, 0.0352496, 0.203898, - 0.0703247, 0.406076, 0.0400313, 0.206199, - 0.0775565, 0.408841, 0.0453282, 0.209252, - 0.085184, 0.41259, 0.0511794, 0.213638, - 0.0931994, 0.418288, 0.0577459, 0.21881, - 0.101617, 0.424681, 0.0650508, 0.225642, - 0.11052, 0.433429, 0.0732759, 0.233717, - 0.119772, 0.442897, 0.0824683, 0.242823, - 0.129505, 0.452888, 0.0927484, 0.254772, - 0.139906, 0.466407, 0.104417, 0.266603, - 0.150402, 0.477413, 0.117211, 0.28073, - 0.161395, 0.490519, 0.131598, 0.295399, - 0.172465, 0.50201, 0.147407, 0.312705, - 0.183982, 0.515311, 0.165031, 0.331335, - 0.195532, 0.52786, 0.184336, 0.351037, - 0.206971, 0.5392, 0.205361, 0.372175, - 0.218117, 0.54941, 0.228043, 0.394548, - 0.229327, 0.558642, 0.25267, 0.419598, - 0.240052, 0.567861, 0.279071, 0.443922, - 0.249937, 0.573332, 0.306882, 0.471495, - 0.259407, 0.58013, 0.33661, 0.496769, - 0.267749, 0.580564, 0.367328, 0.524951, - 0.275524, 0.581696, 0.399753, 0.55318, - 0.282148, 0.579885, 0.433134, 0.581577, - 0.287533, 0.575471, 0.467534, 0.609231, - 0.291612, 0.567445, 0.502943, 0.637478, - 0.293911, 0.557657, 0.53871, 0.667795, - 0.295096, 0.546535, 0.576568, 0.694272, - 0.294073, 0.529561, 0.614929, 0.722937, - 0.290386, 0.510561, 0.655909, 0.749682, - 0.284481, 0.487846, 0.697663, 0.774754, - 0.276188, 0.462487, 0.738515, 0.799301, - 0.266215, 0.43481, 0.779802, 0.820762, - 0.254116, 0.404879, 0.820045, 0.843231, - 0.240393, 0.374559, 0.860294, 0.861857, - 0.225503, 0.341582, 0.900965, 0.880815, - 0.209382, 0.308778, 0.941727, 0.89766, - 0.19155, 0.275232, 0.980916, 0.912926, - 0.172346, 0.240938, 1.02162, 0.926391, - 0.151799, 0.207223, 1.0597, 0.938429, - 0.129968, 0.17484, 1.09291, 0.947834, - 0.10651, 0.142984, 1.12248, 0.958432, - 0.0824098, 0.109902, 1.149, 0.972402, - 0.0565242, 0.0744454, 1.1733, 0.987191, - 0.028427, 0.0373794, 1.19538, 0.999975, 3.85685e-05, - 4.203e-05, 1.21676, 0.178114, - 7.66075e-06, 0.385418, 3.54027e-06, 0.176074, - 0.000191966, 0.381002, 8.87135e-05, 0.17601, - 0.000767549, 0.380861, 0.000354715, 0.17598, - 0.00172696, 0.380798, 0.000798168, 0.175994, - 0.00307012, 0.380824, 0.00141928, 0.176017, - 0.00479684, 0.380858, 0.00221859, 0.176019, - 0.00690648, 0.380839, 0.00319714, 0.176072, - 0.00939888, 0.380913, 0.0043572, 0.176131, - 0.0122726, 0.380979, 0.005702, 0.176239, - 0.0155264, 0.38112, 0.00723689, 0.176371, - 0.0191551, 0.381272, 0.00896907, 0.176638, - 0.023117, 0.381669, 0.0109194, 0.176912, - 0.0274633, 0.382015, 0.0130903, 0.177279, - 0.032173, 0.382476, 0.0154949, 0.17774, - 0.0372219, 0.383041, 0.0181669, 0.178344, - 0.0426132, 0.38378, 0.0211209, 0.179153, - 0.0483309, 0.384773, 0.0243899, 0.180197, - 0.0543447, 0.386076, 0.0280062, 0.181581, - 0.0607122, 0.387809, 0.032004, 0.18344, - 0.0673855, 0.390205, 0.036453, 0.186139, - 0.0743989, 0.393944, 0.0414162, 0.189432, - 0.0817731, 0.39832, 0.0469394, 0.193795, - 0.0895464, 0.404188, 0.0531442, 0.199641, - 0.0978264, 0.4121, 0.0601374, 0.206679, - 0.106499, 0.421425, 0.0680078, 0.214865, - 0.115654, 0.431504, 0.076919, 0.224406, - 0.125268, 0.442526, 0.0868835, 0.235876, - 0.135475, 0.455465, 0.0981875, 0.248335, - 0.146023, 0.4681, 0.110759, 0.262868, - 0.157016, 0.482069, 0.124885, 0.278962, - 0.168245, 0.496182, 0.140645, 0.295082, - 0.17958, 0.507401, 0.157838, 0.313738, - 0.191227, 0.520252, 0.17695, 0.333573, - 0.202718, 0.531708, 0.197817, 0.356433, - 0.214424, 0.544509, 0.220785, 0.378853, - 0.225492, 0.55373, 0.245306, 0.402717, - 0.236236, 0.561348, 0.271593, 0.428375, - 0.246568, 0.568538, 0.299776, 0.454724, - 0.255941, 0.573462, 0.329433, 0.482291, - 0.264511, 0.576356, 0.360598, 0.509706, - 0.272129, 0.576446, 0.393204, 0.538805, - 0.278979, 0.575298, 0.427227, 0.568919, - 0.284528, 0.572154, 0.462157, 0.596804, - 0.288801, 0.564691, 0.497997, 0.625987, - 0.291334, 0.555134, 0.534467, 0.656414, - 0.292722, 0.545051, 0.571736, 0.683916, - 0.292185, 0.528813, 0.610158, 0.711809, - 0.290043, 0.51106, 0.649061, 0.739547, - 0.285246, 0.490103, 0.690081, 0.766914, - 0.277647, 0.465523, 0.732554, 0.791375, - 0.267603, 0.437718, 0.773982, 0.814772, - 0.256109, 0.40882, 0.81609, 0.836691, - 0.242281, 0.377823, 0.856849, 0.856984, - 0.227155, 0.34496, 0.898363, 0.876332, - 0.210395, 0.311335, 0.939471, 0.894988, - 0.192612, 0.277703, 0.980799, 0.911113, - 0.173236, 0.243019, 1.02215, 0.924092, - 0.152258, 0.209037, 1.06139, 0.936828, - 0.129575, 0.175909, 1.09635, 0.946869, - 0.10594, 0.143852, 1.12707, 0.958284, - 0.081318, 0.110289, 1.15419, 0.972325, - 0.0556133, 0.0747232, 1.17909, 0.986878, - 0.0297899, 0.0383149, 1.20163, 0.999936, - 0.00197169, 0.000912402, 1.22338, 0.151174, - 7.20365e-06, 0.351531, 3.09789e-06, 0.155594, - 0.00018279, 0.361806, 7.8608e-05, 0.156099, - 0.000731569, 0.362982, 0.000314615, 0.156053, - 0.00164578, 0.362869, 0.000707845, 0.156093, - 0.0029261, 0.362961, 0.00125884, 0.156099, - 0.00457155, 0.362959, 0.00196783, 0.15612, - 0.00658224, 0.362982, 0.00283622, 0.156168, - 0.00895774, 0.363048, 0.00386625, 0.156221, - 0.0116962, 0.363101, 0.00506109, 0.156324, - 0.0147973, 0.363241, 0.00642675, 0.156476, - 0.0182503, 0.363448, 0.00797175, 0.156731, - 0.0220266, 0.36384, 0.00971484, 0.156994, - 0.026176, 0.364179, 0.0116575, 0.157341, - 0.0306701, 0.36462, 0.0138207, 0.157867, - 0.0354591, 0.365364, 0.0162356, 0.15846, - 0.0406141, 0.366111, 0.0189092, 0.159308, - 0.0460519, 0.367248, 0.021885, 0.160426, - 0.0518096, 0.368767, 0.0252004, 0.161877, - 0.0578906, 0.370745, 0.0288825, 0.163995, - 0.0642812, 0.373831, 0.0330139, 0.16655, - 0.0710067, 0.377366, 0.0376283, 0.170237, - 0.0781522, 0.382799, 0.0428493, 0.175096, - 0.0857172, 0.389915, 0.0487324, 0.181069, - 0.0938025, 0.398487, 0.0554214, 0.188487, - 0.102363, 0.408799, 0.0630189, 0.197029, - 0.111343, 0.419991, 0.071634, 0.206684, - 0.120812, 0.431455, 0.0812797, 0.218698, - 0.131033, 0.445746, 0.0923651, 0.230726, - 0.141373, 0.457471, 0.104545, 0.245516, - 0.152387, 0.472388, 0.118449, 0.261551, - 0.163628, 0.486671, 0.133923, 0.277437, - 0.174814, 0.49762, 0.150849, 0.296662, - 0.186713, 0.51162, 0.169924, 0.31795, - 0.198513, 0.525435, 0.190848, 0.339422, - 0.210119, 0.536267, 0.213504, 0.362143, - 0.221354, 0.545982, 0.237947, 0.387198, - 0.23224, 0.555364, 0.264427, 0.412349, - 0.24257, 0.561489, 0.292519, 0.439274, - 0.252284, 0.566903, 0.322561, 0.466779, - 0.261023, 0.569614, 0.353952, 0.496011, - 0.26899, 0.571589, 0.387278, 0.524964, - 0.275498, 0.570325, 0.421356, 0.556518, - 0.281449, 0.568792, 0.457314, 0.584363, - 0.285526, 0.560268, 0.493199, 0.614214, - 0.28844, 0.55205, 0.530276, 0.645684, - 0.289777, 0.541906, 0.56855, 0.673446, - 0.289722, 0.526464, 0.606927, 0.701924, - 0.287792, 0.509872, 0.645945, 0.73037, - 0.284315, 0.490649, 0.685564, 0.757405, - 0.278804, 0.467964, 0.726511, 0.784025, - 0.269543, 0.441468, 0.768601, 0.808255, - 0.258117, 0.41216, 0.811321, 0.830739, - 0.244728, 0.380606, 0.853496, 0.851914, - 0.229428, 0.348111, 0.895374, 0.872586, - 0.212508, 0.314732, 0.937674, 0.891581, - 0.194025, 0.280338, 0.979869, 0.907641, - 0.174711, 0.245203, 1.02253, 0.922233, - 0.153509, 0.21077, 1.06371, 0.935878, - 0.130418, 0.177399, 1.09972, 0.946338, - 0.105558, 0.144507, 1.13124, 0.957265, - 0.080059, 0.110508, 1.15973, 0.971668, - 0.0539766, 0.0742311, 1.18515, 0.9866, - 0.0277101, 0.0375224, 1.20858, 1.00021, - 0.000515531, 0.000135226, 1.23135, 0.137468, - 6.86011e-06, 0.345041, 2.73315e-06, 0.13703, - 0.000173378, 0.343936, 6.90761e-05, 0.136986, - 0.000693048, 0.34383, 0.000276126, 0.136964, - 0.00155931, 0.343761, 0.000621337, 0.137003, - 0.00277211, 0.343863, 0.00110494, 0.137012, - 0.00433103, 0.343868, 0.00172744, 0.137043, - 0.00623606, 0.343916, 0.00249022, 0.13709, - 0.0084868, 0.343986, 0.00339559, 0.137145, - 0.0110814, 0.344045, 0.00444687, 0.137242, - 0.0140187, 0.344177, 0.00565007, 0.137431, - 0.0172713, 0.344491, 0.00701868, 0.137644, - 0.0208605, 0.344805, 0.00856042, 0.13791, - 0.024792, 0.345172, 0.0102863, 0.138295, - 0.0290461, 0.345734, 0.0122185, 0.138764, - 0.0335957, 0.346371, 0.0143771, 0.139415, - 0.038467, 0.347298, 0.0167894, 0.140272, - 0.0436176, 0.348527, 0.0194895, 0.141457, - 0.0491016, 0.350276, 0.0225043, 0.14303, - 0.0548764, 0.352646, 0.0258962, 0.145289, - 0.0610096, 0.356206, 0.0297168, 0.148502, - 0.0674777, 0.361488, 0.0340562, 0.152188, - 0.074345, 0.367103, 0.0389534, 0.157359, - 0.0817442, 0.375247, 0.0445541, 0.16379, - 0.0896334, 0.385064, 0.0509535, 0.171376, - 0.098005, 0.396082, 0.0582611, 0.179901, - 0.106817, 0.407418, 0.06654, 0.189892, - 0.116239, 0.420031, 0.075994, 0.201838, - 0.12627, 0.434321, 0.0867239, 0.214311, - 0.136701, 0.447631, 0.0987517, 0.228902, - 0.147616, 0.462046, 0.112353, 0.245107, - 0.158871, 0.476942, 0.127605, 0.262292, - 0.170261, 0.490285, 0.144469, 0.281215, - 0.182017, 0.503783, 0.163282, 0.301058, - 0.193729, 0.515505, 0.183873, 0.322752, - 0.205512, 0.52682, 0.206466, 0.347547, - 0.217214, 0.539473, 0.231194, 0.370969, - 0.227966, 0.546625, 0.257288, 0.397533, - 0.238555, 0.55472, 0.285789, 0.42398, - 0.248278, 0.559468, 0.315746, 0.452928, - 0.257422, 0.564095, 0.347724, 0.482121, - 0.265306, 0.565426, 0.380922, 0.510438, - 0.272043, 0.563205, 0.415639, 0.541188, - 0.277614, 0.561087, 0.451702, 0.571667, - 0.281927, 0.554922, 0.48845, 0.602432, - 0.285015, 0.546838, 0.526442, 0.634126, - 0.286512, 0.537415, 0.564896, 0.662816, - 0.286388, 0.522906, 0.604037, 0.692411, - 0.284734, 0.507003, 0.643795, 0.720946, - 0.281297, 0.488398, 0.68298, 0.748293, - 0.276262, 0.466353, 0.723466, 0.776931, - 0.269978, 0.443573, 0.764565, 0.801065, - 0.260305, 0.415279, 0.805838, 0.825843, - 0.247426, 0.384773, 0.849985, 0.84807, - 0.232437, 0.352555, 0.893174, 0.869122, - 0.215806, 0.318642, 0.936564, 0.888963, - 0.197307, 0.28381, 0.980253, 0.905547, - 0.177203, 0.247888, 1.02463, 0.918554, - 0.155542, 0.212904, 1.06714, 0.931395, - 0.131948, 0.1787, 1.10451, 0.941749, - 0.106723, 0.145902, 1.13694, 0.954551, - 0.0804939, 0.111193, 1.1666, 0.970279, - 0.0534239, 0.0744697, 1.19249, 0.986117, - 0.0257452, 0.0368788, 1.21665, 0.999938, 0.00190634, - 0.0010291, 1.23981, 0.118493, - 6.47439e-06, 0.32272, 2.3772e-06, 0.118765, - 0.000163023, 0.323456, 5.98573e-05, 0.118772, - 0.00065212, 0.323477, 0.000239447, 0.118843, - 0.00146741, 0.323657, 0.000538881, 0.118804, - 0.00260846, 0.323553, 0.00095826, 0.118826, - 0.00407576, 0.323595, 0.00149845, 0.118846, - 0.00586826, 0.323617, 0.00216047, 0.118886, - 0.00798578, 0.32367, 0.00294679, 0.118947, - 0.0104273, 0.323753, 0.00386124, 0.119055, - 0.0131909, 0.323922, 0.00490999, 0.119241, - 0.0162444, 0.324251, 0.00610804, 0.11944, - 0.0196339, 0.324544, 0.00745805, 0.119739, - 0.0233378, 0.325026, 0.00897805, 0.12011, - 0.0273179, 0.325586, 0.0106895, 0.120571, - 0.0316143, 0.326231, 0.0126073, 0.12124, - 0.0361939, 0.327264, 0.0147654, 0.122162, - 0.0410511, 0.328733, 0.0172001, 0.123378, - 0.0462233, 0.330659, 0.0199375, 0.125183, - 0.0517109, 0.333754, 0.0230498, 0.127832, - 0.0575652, 0.338507, 0.026597, 0.130909, - 0.0637441, 0.343666, 0.0306345, 0.135221, - 0.0704302, 0.351063, 0.035273, 0.14082, - 0.0776364, 0.360604, 0.0406137, 0.146781, - 0.0852293, 0.369638, 0.0466788, 0.155121, - 0.0935351, 0.3827, 0.0537628, 0.16398, - 0.102234, 0.39522, 0.0617985, 0.173926, - 0.111465, 0.40793, 0.07097, 0.185137, - 0.121296, 0.42105, 0.0813426, 0.19826, - 0.13169, 0.435735, 0.0931596, 0.212938, - 0.142614, 0.450932, 0.106547, 0.229046, - 0.153884, 0.465726, 0.121575, 0.246246, - 0.165382, 0.479461, 0.138286, 0.264637, - 0.176806, 0.492106, 0.15666, 0.284959, - 0.188793, 0.504774, 0.17728, 0.308157, - 0.200763, 0.518805, 0.19988, 0.330951, - 0.21239, 0.528231, 0.224293, 0.3549, - 0.223521, 0.536376, 0.250541, 0.381502, - 0.234169, 0.544846, 0.278902, 0.409529, - 0.244077, 0.551717, 0.309227, 0.437523, - 0.253363, 0.55517, 0.341426, 0.467624, - 0.261659, 0.557772, 0.37518, 0.497268, - 0.268498, 0.556442, 0.41007, 0.528294, - 0.274018, 0.553915, 0.446445, 0.559053, - 0.278169, 0.549153, 0.483779, 0.589329, - 0.281229, 0.539878, 0.522249, 0.622503, - 0.282902, 0.53162, 0.561754, 0.652382, - 0.282815, 0.518119, 0.601544, 0.681847, - 0.281247, 0.502187, 0.641574, 0.712285, - 0.277986, 0.484824, 0.682633, 0.740094, - 0.273017, 0.463483, 0.723426, 0.768478, - 0.266692, 0.441299, 0.763747, 0.794556, - 0.258358, 0.415238, 0.805565, 0.819408, - 0.248807, 0.386912, 0.847254, 0.843411, - 0.236214, 0.356165, 0.891091, 0.862397, - 0.219794, 0.320562, 0.936174, 0.883113, - 0.201768, 0.285322, 0.982562, 0.90023, - 0.181672, 0.249713, 1.02862, 0.915192, - 0.159279, 0.214546, 1.07163, 0.928458, - 0.134725, 0.180285, 1.10995, 0.94069, - 0.10913, 0.147119, 1.14354, 0.953409, - 0.0821315, 0.112492, 1.17372, 0.969537, - 0.0542677, 0.0752014, 1.20043, 0.985612, - 0.0259096, 0.0370361, 1.22528, 0.999835, 0.00298198, - 0.00151801, 1.24959, 0.10097, - 6.02574e-06, 0.300277, 2.02619e-06, 0.101577, - 0.000152164, 0.302077, 5.11662e-05, 0.101572, - 0.000608889, 0.302066, 0.000204751, 0.101566, - 0.00136997, 0.302047, 0.000460753, 0.101592, - 0.00243557, 0.302114, 0.000819497, 0.101608, - 0.0038053, 0.30214, 0.00128154, 0.101627, - 0.00547906, 0.30216, 0.0018483, 0.101669, - 0.00745647, 0.302224, 0.00252223, 0.101732, - 0.00973615, 0.302318, 0.00330716, 0.101844, - 0.0123097, 0.302513, 0.00421061, 0.102025, - 0.0151681, 0.30285, 0.00524481, 0.102224, - 0.0183334, 0.303166, 0.0064154, 0.102515, - 0.0217819, 0.303654, 0.00774063, 0.102886, - 0.0255067, 0.304243, 0.0092398, 0.103395, - 0.029514, 0.305089, 0.0109339, 0.104109, - 0.0337912, 0.306301, 0.0128561, 0.105074, - 0.0383565, 0.30798, 0.0150338, 0.10654, - 0.0432132, 0.310726, 0.0175228, 0.108478, - 0.0484244, 0.314351, 0.0203648, 0.111015, - 0.0539339, 0.319032, 0.0236325, 0.114682, - 0.0598885, 0.32605, 0.0274188, 0.11911, - 0.0663375, 0.334109, 0.0317905, 0.124736, - 0.0733011, 0.344013, 0.0368502, 0.131479, - 0.0807744, 0.355358, 0.0427104, 0.139283, - 0.0888204, 0.367614, 0.0494788, 0.148054, - 0.0973394, 0.380072, 0.0572367, 0.159037, - 0.10665, 0.395678, 0.0662704, 0.169794, - 0.116221, 0.40795, 0.0763192, 0.18314, - 0.126632, 0.423546, 0.087956, 0.197515, - 0.137383, 0.438213, 0.101042, 0.213514, - 0.148641, 0.453248, 0.115827, 0.23065, - 0.160117, 0.46688, 0.132283, 0.249148, - 0.171807, 0.479962, 0.150644, 0.270219, - 0.183695, 0.494618, 0.171073, 0.292338, - 0.195574, 0.506937, 0.193378, 0.314999, - 0.207205, 0.516463, 0.217585, 0.340991, - 0.218955, 0.528123, 0.24428, 0.367982, - 0.229917, 0.537025, 0.272784, 0.39432, - 0.239737, 0.541627, 0.302742, 0.423364, - 0.249048, 0.546466, 0.335112, 0.453751, - 0.257329, 0.549466, 0.369032, 0.48416, - 0.264623, 0.549503, 0.404577, 0.515262, - 0.270411, 0.547008, 0.441337, 0.547036, - 0.274581, 0.542249, 0.479162, 0.576614, - 0.277266, 0.533015, 0.517904, 0.611143, - 0.279144, 0.525512, 0.558508, 0.640989, - 0.279001, 0.51154, 0.598995, 0.671182, - 0.277324, 0.495641, 0.639935, 0.700848, - 0.273908, 0.477526, 0.681017, 0.729862, - 0.269063, 0.457955, 0.722764, 0.758273, - 0.262282, 0.434846, 0.764349, 0.784121, - 0.254281, 0.409203, 0.806206, 0.809798, - 0.24505, 0.382694, 0.848617, 0.834953, - 0.233861, 0.354034, 0.892445, 0.856817, - 0.221308, 0.321764, 0.936263, 0.877609, - 0.205996, 0.288118, 0.982401, 0.897489, - 0.186702, 0.253277, 1.02975, 0.913792, - 0.164618, 0.217963, 1.07488, 0.92785, - 0.140023, 0.183221, 1.11487, 0.940378, - 0.11328, 0.149385, 1.14947, 0.95273, - 0.0853958, 0.114152, 1.1807, 0.969059, - 0.0568698, 0.0769845, 1.20912, 0.985574, - 0.0276502, 0.0381186, 1.23498, 0.999943, 0.00239052, - 0.00126861, 1.25987, 0.0852715, - 5.60067e-06, 0.279021, 1.71162e-06, 0.0854143, - 0.000140871, 0.279483, 4.30516e-05, 0.0854191, - 0.000563385, 0.2795, 0.000172184, 0.0854188, - 0.00126753, 0.279493, 0.000387464, 0.0854229, - 0.00225337, 0.279501, 0.00068918, 0.0854443, - 0.00352086, 0.279549, 0.00107803, 0.0854697, - 0.00506962, 0.279591, 0.00155536, 0.0855093, - 0.00689873, 0.279652, 0.00212354, 0.0855724, - 0.00900821, 0.279752, 0.00278703, 0.0856991, - 0.0113799, 0.280011, 0.0035551, 0.085855, - 0.0140314, 0.280297, 0.00443449, 0.0860682, - 0.016963, 0.280682, 0.00543636, 0.086344, - 0.0201438, 0.281159, 0.0065788, 0.0867426, - 0.0235999, 0.281886, 0.00787977, 0.087239, - 0.0273069, 0.282745, 0.0093606, 0.0879815, - 0.031269, 0.284139, 0.011056, 0.0891258, - 0.035531, 0.28647, 0.0130065, 0.0906909, - 0.0400947, 0.289708, 0.0152495, 0.0927624, - 0.0449638, 0.293904, 0.0178454, 0.0958376, - 0.0502427, 0.300471, 0.0208915, 0.0995827, - 0.0559514, 0.30806, 0.0244247, 0.104526, - 0.0622152, 0.317874, 0.0285721, 0.110532, - 0.0690046, 0.329332, 0.0334227, 0.117385, - 0.0763068, 0.341217, 0.0390466, 0.12522, - 0.084184, 0.353968, 0.0455786, 0.134037, - 0.0925248, 0.366797, 0.0530773, 0.144014, - 0.101487, 0.380209, 0.0617424, 0.156013, - 0.111273, 0.395956, 0.071777, 0.168872, - 0.121431, 0.41053, 0.0830905, 0.183089, - 0.132105, 0.425073, 0.0959341, 0.198763, - 0.143286, 0.439833, 0.110448, 0.216159, - 0.154841, 0.454507, 0.126769, 0.234859, - 0.166588, 0.468368, 0.14495, 0.255879, - 0.178626, 0.482846, 0.165233, 0.27677, - 0.190218, 0.493489, 0.187217, 0.301184, - 0.202227, 0.506549, 0.211659, 0.325852, - 0.213764, 0.5158, 0.237922, 0.352824, - 0.22487, 0.525442, 0.26632, 0.380882, - 0.235246, 0.532487, 0.296691, 0.410137, - 0.244847, 0.537703, 0.329179, 0.439787, - 0.253122, 0.540361, 0.363135, 0.472291, - 0.260517, 0.542734, 0.399222, 0.501856, - 0.266519, 0.538826, 0.436352, 0.534816, - 0.270905, 0.535152, 0.474505, 0.565069, - 0.273826, 0.525979, 0.513988, 0.597154, - 0.275333, 0.516394, 0.554852, 0.630473, - 0.275314, 0.506206, 0.596592, 0.660574, - 0.273323, 0.489769, 0.638117, 0.692015, - 0.270008, 0.472578, 0.680457, 0.720647, - 0.265001, 0.452134, 0.723008, 0.750528, - 0.258311, 0.430344, 0.765954, 0.777568, - 0.250046, 0.405624, 0.809012, 0.80387, - 0.240114, 0.378339, 0.852425, 0.828439, - 0.228737, 0.349877, 0.895346, 0.851472, - 0.216632, 0.318968, 0.940695, 0.873906, - 0.202782, 0.287489, 0.987235, 0.89467, - 0.187059, 0.254394, 1.03348, 0.912281, - 0.168818, 0.221294, 1.07812, 0.927358, - 0.146494, 0.18675, 1.11928, 0.940385, - 0.120009, 0.152322, 1.15609, 0.952672, - 0.0917183, 0.117514, 1.18875, 0.968496, - 0.0620321, 0.0797405, 1.21821, 0.985236, - 0.0314945, 0.0402383, 1.24523, 0.99998, - 0.000575153, 0.000110644, 1.27133, 0.0702429, - 5.12222e-06, 0.255273, 1.40947e-06, 0.0702981, - 0.000128826, 0.255469, 3.54488e-05, 0.0703691, - 0.000515562, 0.255727, 0.000141874, 0.0703805, - 0.00116, 0.255754, 0.00031929, 0.0703961, - 0.00206224, 0.255813, 0.000567999, 0.0704102, - 0.00322223, 0.255839, 0.00088871, 0.0704298, - 0.00463928, 0.255863, 0.00128272, 0.0704759, - 0.00631375, 0.255953, 0.00175283, 0.0705434, - 0.00824317, 0.256079, 0.00230342, 0.0706693, - 0.010412, 0.25636, 0.0029443, 0.0708189, - 0.0128439, 0.256647, 0.00368031, 0.0710364, - 0.0155177, 0.257084, 0.00452614, 0.0713223, - 0.0184374, 0.257637, 0.00549706, 0.0717182, - 0.0216002, 0.258416, 0.00661246, 0.072321, - 0.0249966, 0.259699, 0.00790147, 0.0731446, - 0.0286566, 0.261475, 0.0093884, 0.0743352, - 0.0325888, 0.264132, 0.0111186, 0.0760676, - 0.036843, 0.26815, 0.013145, 0.078454, - 0.0414292, 0.273636, 0.0155251, 0.0818618, - 0.0464634, 0.281653, 0.0183525, 0.0857382, - 0.0519478, 0.289992, 0.0216642, 0.0908131, - 0.0579836, 0.30066, 0.0255956, 0.0967512, - 0.0645124, 0.312204, 0.0301954, 0.103717, - 0.0716505, 0.325001, 0.0356017, 0.111596, - 0.0793232, 0.338129, 0.041896, 0.120933, - 0.087645, 0.352853, 0.0492447, 0.130787, - 0.096492, 0.366192, 0.0576749, 0.142311, - 0.105973, 0.380864, 0.0673969, 0.155344, - 0.116182, 0.396575, 0.0785899, 0.169535, - 0.126815, 0.411443, 0.0912377, 0.185173, - 0.138015, 0.426256, 0.105607, 0.201755, - 0.149325, 0.439607, 0.121551, 0.221334, - 0.161207, 0.455467, 0.139608, 0.241461, - 0.173162, 0.469096, 0.159591, 0.26294, - 0.18504, 0.481014, 0.18156, 0.286776, - 0.196881, 0.493291, 0.205781, 0.311596, - 0.208311, 0.503556, 0.231819, 0.338667, - 0.219671, 0.513268, 0.260274, 0.366021, - 0.230451, 0.519414, 0.290862, 0.395875, - 0.240131, 0.526766, 0.323196, 0.425564, - 0.248566, 0.52905, 0.357071, 0.457094, - 0.256195, 0.530796, 0.393262, 0.488286, - 0.262331, 0.528703, 0.430797, 0.522291, - 0.267141, 0.52727, 0.470231, 0.554172, - 0.270411, 0.519848, 0.510477, 0.586427, - 0.271986, 0.510307, 0.551594, 0.619638, - 0.27192, 0.499158, 0.593849, 0.650656, - 0.269817, 0.483852, 0.636314, 0.68284, - 0.266267, 0.467515, 0.679679, 0.714356, - 0.26113, 0.44931, 0.723884, 0.742717, - 0.254067, 0.425789, 0.767245, 0.770894, - 0.245652, 0.401144, 0.811819, 0.797358, - 0.235554, 0.374224, 0.856315, 0.823377, - 0.223896, 0.346167, 0.901077, 0.847456, - 0.210865, 0.316056, 0.946502, 0.870697, - 0.196574, 0.284503, 0.993711, 0.891068, - 0.180814, 0.251628, 1.04134, 0.909267, - 0.163314, 0.219065, 1.08609, 0.925653, - 0.143304, 0.186446, 1.12702, 0.940017, - 0.121322, 0.153416, 1.16371, 0.952398, - 0.0973872, 0.120334, 1.19712, 0.967568, - 0.0698785, 0.08352, 1.22791, 0.984772, - 0.0390031, 0.0439209, 1.25672, 1.00026, - 0.0070087, 0.00315668, 1.28428, 0.0556653, - 4.59654e-06, 0.227325, 1.12556e-06, 0.0565238, - 0.000116382, 0.230826, 2.84985e-05, 0.0565717, - 0.000465666, 0.231026, 0.000114036, 0.0565859, - 0.00104773, 0.231079, 0.000256656, 0.0565761, - 0.00186255, 0.231025, 0.00045663, 0.0565913, - 0.00291002, 0.231058, 0.000714664, 0.0566108, - 0.00418998, 0.231085, 0.00103224, 0.0566532, - 0.00570206, 0.231169, 0.00141202, 0.0567473, - 0.00743666, 0.231417, 0.00186018, 0.0568567, - 0.00940298, 0.231661, 0.00238264, 0.0569859, - 0.0115991, 0.231895, 0.00298699, 0.0572221, - 0.0140096, 0.232456, 0.00368957, 0.057519, - 0.0166508, 0.233096, 0.00450303, 0.0579534, - 0.01951, 0.234094, 0.00544945, 0.0585922, - 0.0225991, 0.235629, 0.00655564, 0.0595647, - 0.0259416, 0.238106, 0.00785724, 0.0609109, - 0.0295661, 0.241557, 0.00939127, 0.0628751, - 0.0335126, 0.246652, 0.0112198, 0.0656908, - 0.0378604, 0.254091, 0.0134168, 0.0691347, - 0.0426543, 0.262666, 0.0160374, 0.0732165, - 0.0478967, 0.272029, 0.0191514, 0.0782863, - 0.0536716, 0.283007, 0.0228597, 0.0843973, - 0.0600683, 0.295732, 0.0272829, 0.0913598, - 0.0670095, 0.308779, 0.032484, 0.0994407, - 0.0745516, 0.322886, 0.0385886, 0.108189, - 0.082712, 0.336408, 0.0457133, 0.118574, - 0.0914927, 0.351692, 0.0539832, 0.129989, - 0.100854, 0.366502, 0.0635162, 0.142722, - 0.110837, 0.381675, 0.0744386, 0.156654, - 0.121353, 0.3963, 0.0868483, 0.172151, - 0.132414, 0.411477, 0.100963, 0.188712, - 0.143809, 0.42508, 0.116795, 0.208093, - 0.155765, 0.441328, 0.134715, 0.227936, - 0.167608, 0.454328, 0.154396, 0.249495, - 0.179579, 0.467235, 0.176179, 0.27362, - 0.191488, 0.480248, 0.200193, 0.296371, - 0.202618, 0.487886, 0.225775, 0.324234, - 0.214133, 0.499632, 0.25441, 0.353049, - 0.225212, 0.509532, 0.285077, 0.381785, - 0.234875, 0.514265, 0.317047, 0.414038, - 0.244205, 0.521282, 0.351874, 0.445251, - 0.252145, 0.522931, 0.388279, 0.476819, - 0.258433, 0.520947, 0.425825, 0.509209, - 0.263411, 0.517669, 0.465104, 0.542759, - 0.266732, 0.512841, 0.505741, 0.574822, - 0.268263, 0.503317, 0.547611, 0.609324, - 0.268489, 0.493035, 0.590953, 0.641772, - 0.266941, 0.478816, 0.63488, 0.674049, - 0.263297, 0.462863, 0.679072, 0.705071, - 0.257618, 0.442931, 0.723487, 0.734709, - 0.250625, 0.421299, 0.768708, 0.763704, - 0.24179, 0.397085, 0.814375, 0.791818, - 0.231115, 0.370577, 0.859907, 0.817439, - 0.21922, 0.34232, 0.906715, 0.843202, - 0.205658, 0.312627, 0.953943, 0.866639, - 0.190563, 0.280933, 1.00185, 0.888129, - 0.173978, 0.248393, 1.05105, 0.907239, - 0.155485, 0.216007, 1.09704, 0.923893, - 0.134782, 0.183233, 1.13857, 0.938882, - 0.11249, 0.150376, 1.17539, 0.952464, - 0.0890706, 0.117177, 1.20924, 0.968529, - 0.0646523, 0.0813095, 1.24055, 0.984763, - 0.038606, 0.0439378, 1.27018, 1.00053, - 0.01238, 0.00598668, 1.29873, 0.0437928, - 4.09594e-06, 0.204012, 8.79224e-07, 0.0440166, - 0.000103395, 0.205049, 2.21946e-05, 0.0440529, - 0.000413633, 0.205225, 8.87981e-05, 0.0440493, - 0.000930594, 0.2052, 0.000199858, 0.0439884, - 0.00165352, 0.204901, 0.000355495, 0.0440716, - 0.0025849, 0.205255, 0.000556983, 0.0440968, - 0.00372222, 0.205311, 0.000805326, 0.0441359, - 0.00506478, 0.205391, 0.00110333, 0.0442231, - 0.00660384, 0.205638, 0.00145768, 0.0443254, - 0.00835246, 0.205877, 0.00187275, 0.0444832, - 0.0102992, 0.20627, 0.00235938, 0.0447001, - 0.0124449, 0.206796, 0.0029299, 0.0450168, - 0.0147935, 0.207593, 0.0036005, 0.0454816, - 0.017336, 0.208819, 0.00439246, 0.0462446, - 0.0201156, 0.211036, 0.00533864, 0.0473694, - 0.0231568, 0.214388, 0.00646984, 0.0490191, - 0.0264941, 0.219357, 0.00783856, 0.0512776, - 0.030184, 0.226061, 0.00950182, 0.0541279, - 0.0342661, 0.234094, 0.0115156, 0.0578989, - 0.0388539, 0.244297, 0.0139687, 0.0620835, - 0.0438735, 0.254457, 0.0169015, 0.0673497, - 0.04951, 0.266706, 0.0204554, 0.0731759, - 0.0556263, 0.278753, 0.0246606, 0.0803937, - 0.0624585, 0.29309, 0.0297126, 0.0879287, - 0.0697556, 0.305856, 0.0355868, 0.0970669, - 0.0778795, 0.321059, 0.0425768, 0.106508, - 0.0863541, 0.333873, 0.05056, 0.11776, - 0.0955935, 0.349008, 0.0598972, 0.130081, - 0.105438, 0.363776, 0.0706314, 0.144454, - 0.115899, 0.380112, 0.0828822, 0.1596, - 0.126827, 0.394843, 0.0967611, 0.176097, - 0.138161, 0.409033, 0.112381, 0.194726, - 0.149904, 0.424257, 0.129952, 0.213944, - 0.161675, 0.436945, 0.149333, 0.235516, - 0.173659, 0.450176, 0.170892, 0.260564, - 0.185963, 0.466305, 0.194984, 0.285183, - 0.197582, 0.477328, 0.220805, 0.311095, - 0.208697, 0.486566, 0.248694, 0.338924, - 0.219519, 0.494811, 0.279015, 0.369757, - 0.229766, 0.504065, 0.311725, 0.3996, - 0.238879, 0.507909, 0.345844, 0.430484, - 0.246802, 0.509805, 0.381749, 0.46413, - 0.253924, 0.511436, 0.420251, 0.497077, - 0.259319, 0.508787, 0.459957, 0.530434, - 0.263297, 0.50394, 0.501356, 0.565725, - 0.265619, 0.49804, 0.544252, 0.599254, - 0.265842, 0.487346, 0.587856, 0.631251, - 0.263978, 0.472975, 0.631969, 0.663972, - 0.26043, 0.457135, 0.677471, 0.697724, - 0.255358, 0.439844, 0.723744, 0.727725, - 0.248308, 0.417872, 0.770653, 0.756417, - 0.239181, 0.39273, 0.817357, 0.785419, - 0.22814, 0.367839, 0.864221, 0.81266, - 0.215681, 0.339449, 0.912701, 0.839391, - 0.201623, 0.309279, 0.962419, 0.86366, - 0.185624, 0.278029, 1.0122, 0.885028, - 0.16797, 0.245294, 1.06186, 0.904639, - 0.148336, 0.212689, 1.10934, 0.922048, - 0.12637, 0.179616, 1.15063, 0.936952, - 0.102928, 0.146749, 1.18885, 0.951895, - 0.0785268, 0.112733, 1.22352, 0.967198, - 0.0530153, 0.0760056, 1.25681, 0.984405, - 0.02649, 0.0383183, 1.28762, 1.00021, 0.00070019, - 0.00020039, 1.31656, 0.0325964, - 3.55447e-06, 0.176706, 6.55682e-07, 0.0329333, - 8.99174e-05, 0.178527, 1.65869e-05, 0.0329181, - 0.000359637, 0.178453, 6.63498e-05, 0.0329085, - 0.000808991, 0.178383, 0.000149332, 0.0329181, - 0.00143826, 0.178394, 0.000265873, 0.0329425, - 0.00224678, 0.178517, 0.000416597, 0.0329511, - 0.00323575, 0.17849, 0.000603299, 0.033011, - 0.00439875, 0.178695, 0.000829422, 0.0330733, - 0.00574059, 0.178843, 0.00109908, 0.0331857, - 0.00725896, 0.179176, 0.00141933, 0.0333445, - 0.00895289, 0.179618, 0.0017999, 0.0335674, - 0.0108219, 0.180238, 0.00225316, 0.033939, - 0.0128687, 0.181417, 0.00279765, 0.0345239, - 0.015114, 0.183395, 0.0034564, 0.0354458, - 0.017596, 0.186616, 0.00425864, 0.0368313, - 0.0203524, 0.191547, 0.00524936, 0.0386115, - 0.0234105, 0.197508, 0.00647033, 0.0410303, - 0.0268509, 0.205395, 0.00798121, 0.0442245, - 0.0307481, 0.215365, 0.0098557, 0.0478659, - 0.0350863, 0.225595, 0.0121417, 0.0522416, - 0.0399506, 0.236946, 0.0149385, 0.0574513, - 0.045357, 0.249442, 0.0183189, 0.0631208, - 0.0512863, 0.261222, 0.0223644, 0.0701124, - 0.0579273, 0.275418, 0.0272418, 0.0777331, - 0.0650652, 0.288989, 0.0329458, 0.0862709, - 0.0728813, 0.302546, 0.0396819, 0.096103, - 0.081363, 0.317164, 0.04757, 0.106976, - 0.0904463, 0.331733, 0.0567012, 0.119175, - 0.100105, 0.34661, 0.067202, 0.132919, - 0.110375, 0.362249, 0.0792588, 0.147727, - 0.121115, 0.376978, 0.0928672, 0.163618, - 0.132299, 0.390681, 0.108228, 0.182234, - 0.143887, 0.406571, 0.125502, 0.201809, - 0.155827, 0.42042, 0.144836, 0.225041, - 0.168357, 0.438411, 0.166706, 0.247621, - 0.18004, 0.450368, 0.189909, 0.27097, - 0.191536, 0.460083, 0.215251, 0.296658, - 0.203024, 0.469765, 0.243164, 0.325892, - 0.214056, 0.481837, 0.273388, 0.35406, - 0.224104, 0.487474, 0.305344, 0.384372, - 0.233489, 0.492773, 0.339741, 0.41749, - 0.241874, 0.498451, 0.376287, 0.45013, - 0.248834, 0.499632, 0.414195, 0.481285, - 0.254658, 0.495233, 0.454077, 0.519183, - 0.259367, 0.496401, 0.496352, 0.551544, - 0.261818, 0.487686, 0.538798, 0.587349, - 0.262964, 0.479453, 0.583626, 0.621679, - 0.262128, 0.467709, 0.629451, 0.654991, - 0.258998, 0.452123, 0.67566, 0.686873, - 0.254119, 0.433495, 0.723248, 0.719801, - 0.246946, 0.413657, 0.771156, 0.750355, - 0.237709, 0.390366, 0.81989, 0.780033, - 0.226549, 0.364947, 0.868601, 0.809254, - 0.214186, 0.337256, 0.920034, 0.836576, - 0.199639, 0.307395, 0.971706, 0.861774, - 0.183169, 0.275431, 1.02479, 0.885707, - 0.165111, 0.243431, 1.07837, 0.904742, - 0.144363, 0.210921, 1.12783, 0.915604, - 0.121305, 0.17647, 1.17254, 0.930959, - 0.0962119, 0.143106, 1.21012, 0.948404, - 0.069969, 0.108112, 1.24474, 0.967012, - 0.0427586, 0.0708478, 1.27718, 0.984183, - 0.0147043, 0.032335, 1.3083, 0.999577, 0.0142165, - 0.00726867, 1.3382, 0.0229227, - 2.99799e-06, 0.148623, 4.62391e-07, 0.0232194, - 7.58796e-05, 0.15054, 1.17033e-05, 0.0232315, - 0.000303636, 0.15063, 4.68397e-05, 0.0232354, - 0.000683189, 0.150624, 0.000105472, 0.0232092, - 0.0012136, 0.150445, 0.000187744, 0.0232523, - 0.00189765, 0.150679, 0.000294847, 0.0232828, - 0.00273247, 0.150789, 0.000428013, 0.0233371, - 0.00371287, 0.150995, 0.000591134, 0.0234015, - 0.00484794, 0.15118, 0.000787642, 0.023514, - 0.00612877, 0.151562, 0.00102547, 0.023679, - 0.00756125, 0.152116, 0.00131351, 0.0239559, - 0.00914651, 0.153162, 0.00166594, 0.0244334, - 0.010904, 0.155133, 0.00210182, 0.025139, - 0.0128615, 0.158035, 0.00264406, 0.0262598, - 0.0150628, 0.162751, 0.00332923, 0.0277875, - 0.0175532, 0.168944, 0.00419773, 0.0298472, - 0.0203981, 0.176835, 0.00530034, 0.0325444, - 0.023655, 0.186686, 0.00669777, 0.0355581, - 0.0272982, 0.196248, 0.00842661, 0.0392841, - 0.0314457, 0.207352, 0.0105854, 0.0436815, - 0.0361157, 0.219279, 0.0132458, 0.0485272, - 0.0412932, 0.230728, 0.0164736, 0.0541574, - 0.0470337, 0.242994, 0.0203715, 0.0609479, - 0.0535002, 0.257042, 0.0250953, 0.0685228, - 0.0605409, 0.27102, 0.0306856, 0.0768042, - 0.0680553, 0.28406, 0.037193, 0.0864844, - 0.0765011, 0.299186, 0.0449795, 0.0969415, - 0.0852674, 0.3132, 0.0538316, 0.108478, - 0.0947333, 0.327138, 0.0641149, 0.121705, - 0.10481, 0.342345, 0.0759185, 0.136743, - 0.115474, 0.358472, 0.0894116, 0.152986, - 0.126536, 0.374067, 0.104562, 0.170397, - 0.138061, 0.388267, 0.121632, 0.191392, - 0.150203, 0.406467, 0.140996, 0.211566, - 0.161751, 0.418641, 0.161696, 0.233567, - 0.173407, 0.430418, 0.184557, 0.257769, - 0.185397, 0.44277, 0.210092, 0.28531, - 0.197048, 0.457191, 0.237827, 0.311726, - 0.20784, 0.464712, 0.267253, 0.340537, - 0.218345, 0.472539, 0.299332, 0.372921, - 0.228306, 0.482331, 0.333988, 0.402924, - 0.236665, 0.484378, 0.369722, 0.434475, - 0.244097, 0.484717, 0.407836, 0.469736, - 0.250547, 0.487093, 0.448465, 0.505045, - 0.25511, 0.485575, 0.490263, 0.540262, - 0.258444, 0.481225, 0.534495, 0.576347, - 0.259903, 0.473481, 0.579451, 0.608656, - 0.259572, 0.4603, 0.625604, 0.646679, - 0.257908, 0.450341, 0.674511, 0.679902, - 0.253663, 0.431561, 0.723269, 0.714159, - 0.247419, 0.412684, 0.773263, 0.745345, - 0.239122, 0.389388, 0.824182, 0.778248, - 0.228837, 0.365361, 0.876634, 0.807208, - 0.216197, 0.337667, 0.92945, 0.835019, - 0.201772, 0.307197, 0.985261, 0.860261, - 0.185291, 0.274205, 1.04299, 0.877601, - 0.165809, 0.240178, 1.09816, 0.898211, - 0.143897, 0.207571, 1.14694, 0.915789, - 0.119513, 0.174904, 1.19008, 0.931831, - 0.0932919, 0.141423, 1.2297, 0.949244, - 0.0656528, 0.105603, 1.26553, 0.967527, - 0.0370262, 0.0679551, 1.29986, 0.984139, - 0.00730117, 0.0283133, 1.33252, 0.999713, 0.0234648, - 0.0121785, 1.36397, 0.0152135, - 2.45447e-06, 0.122795, 3.04092e-07, 0.0151652, - 6.15778e-05, 0.122399, 7.6292e-06, 0.0151181, - 0.000245948, 0.122023, 3.04802e-05, 0.0151203, - 0.000553394, 0.12203, 6.86634e-05, 0.015125, - 0.000983841, 0.122037, 0.000122463, 0.0151427, - 0.00153774, 0.12214, 0.000192706, 0.0151708, - 0.0022103, 0.122237, 0.000281219, 0.0152115, - 0.00300741, 0.12238, 0.000390804, 0.0152877, - 0.00392494, 0.1227, 0.000526317, 0.015412, - 0.00496597, 0.123244, 0.00069443, 0.0156201, - 0.00613314, 0.124228, 0.00090547, 0.0159658, - 0.00744113, 0.125945, 0.0011732, 0.0165674, - 0.00892546, 0.129098, 0.00151888, 0.017487, - 0.010627, 0.133865, 0.00197007, 0.018839, - 0.0126043, 0.140682, 0.0025637, 0.020554, - 0.0148814, 0.148534, 0.00333637, 0.0226727, - 0.0175123, 0.157381, 0.00433738, 0.0251879, - 0.0205266, 0.166685, 0.00561664, 0.0283635, - 0.0240319, 0.177796, 0.00725563, 0.0318694, - 0.0279432, 0.188251, 0.00928811, 0.0361044, - 0.0324313, 0.200038, 0.011835, 0.0406656, - 0.0373527, 0.210685, 0.0149146, 0.0463846, - 0.0430132, 0.224182, 0.0187254, 0.0525696, - 0.0491013, 0.23634, 0.0232283, 0.0598083, - 0.0559175, 0.250013, 0.0286521, 0.0679437, - 0.0633657, 0.263981, 0.0350634, 0.0771181, - 0.0714602, 0.278072, 0.0425882, 0.0881273, - 0.0803502, 0.29511, 0.0514487, 0.0996628, - 0.0896903, 0.309976, 0.0615766, 0.112702, - 0.099644, 0.325611, 0.0732139, 0.126488, - 0.109829, 0.339321, 0.0862324, 0.142625, - 0.120859, 0.35574, 0.101275, 0.15953, - 0.131956, 0.369845, 0.117892, 0.176991, - 0.143145, 0.38146, 0.136205, 0.199715, - 0.155292, 0.40052, 0.157252, 0.220787, - 0.167066, 0.412055, 0.179966, 0.243697, - 0.178396, 0.423133, 0.204418, 0.272106, - 0.190433, 0.439524, 0.232141, 0.297637, - 0.201265, 0.447041, 0.261109, 0.325273, - 0.211834, 0.454488, 0.292627, 0.357219, - 0.221889, 0.465004, 0.326669, 0.387362, - 0.230729, 0.468527, 0.362426, 0.423131, - 0.23924, 0.475836, 0.401533, 0.45543, - 0.246067, 0.475017, 0.441902, 0.493393, - 0.251557, 0.478017, 0.484239, 0.526253, - 0.255571, 0.4709, 0.528586, 0.560554, - 0.257752, 0.463167, 0.574346, 0.599306, - 0.258076, 0.456452, 0.621655, 0.634541, - 0.256471, 0.443725, 0.670492, 0.668907, - 0.253283, 0.428719, 0.721943, 0.705619, - 0.247562, 0.411348, 0.772477, 0.739034, - 0.240626, 0.388939, 0.8264, 0.771408, - 0.231493, 0.36425, 0.881702, 0.803312, - 0.220125, 0.337321, 0.9385, 0.828457, - 0.206645, 0.305364, 0.997437, 0.854819, - 0.190664, 0.273715, 1.05693, 0.878666, - 0.171429, 0.242218, 1.11251, 0.898404, - 0.149235, 0.209556, 1.16398, 0.917416, - 0.12435, 0.176863, 1.21014, 0.933133, - 0.0972703, 0.142775, 1.25178, 0.95066, - 0.0683607, 0.106735, 1.29028, 0.968589, - 0.0378724, 0.0681609, 1.32703, 0.984776, - 0.00605712, 0.0273966, 1.36158, 0.99994, 0.0263276, - 0.0138124, 1.3943, 0.00867437, - 1.86005e-06, 0.0928979, 1.73682e-07, 0.00864003, - 4.66389e-05, 0.0925237, 4.35505e-06, 0.00864593, - 0.000186594, 0.0925806, 1.74322e-05, 0.00864095, - 0.000419639, 0.0924903, 3.92862e-05, 0.00863851, - 0.000746272, 0.0924589, 7.02598e-05, 0.00868531, - 0.00116456, 0.0929, 0.000111188, 0.00869667, - 0.00167711, 0.0928529, 0.000163867, 0.00874332, - 0.00228051, 0.0930914, 0.00023104, 0.00882709, - 0.00297864, 0.0935679, 0.00031741, 0.00898874, - 0.00377557, 0.0946165, 0.000430186, 0.00929346, - 0.00469247, 0.0967406, 0.000580383, 0.00978271, - 0.00575491, 0.100084, 0.000783529, 0.0105746, - 0.00701514, 0.105447, 0.00106304, 0.0116949, - 0.00851797, 0.112494, 0.00144685, 0.0130419, - 0.0102757, 0.119876, 0.00196439, 0.0148375, - 0.012381, 0.129034, 0.00266433, 0.0168725, - 0.01482, 0.137812, 0.00358364, 0.0193689, - 0.0176563, 0.147696, 0.00478132, 0.0222691, - 0.0209211, 0.157795, 0.00631721, 0.0256891, - 0.0246655, 0.168431, 0.00826346, 0.0294686, - 0.0288597, 0.178587, 0.0106714, 0.0340412, - 0.0336441, 0.190251, 0.0136629, 0.0393918, - 0.039033, 0.202999, 0.0173272, 0.0453947, - 0.0450087, 0.215655, 0.0217448, 0.0521936, - 0.0515461, 0.228686, 0.0269941, 0.0600279, - 0.058817, 0.242838, 0.033272, 0.0692398, - 0.0667228, 0.258145, 0.0406457, 0.0793832, - 0.0752401, 0.273565, 0.0492239, 0.0902297, - 0.0841851, 0.287735, 0.0590105, 0.102014, - 0.0936479, 0.301161, 0.0702021, 0.116054, - 0.103967, 0.317438, 0.0832001, 0.13191, - 0.114622, 0.334166, 0.0977951, 0.148239, - 0.125452, 0.348192, 0.113985, 0.165809, - 0.136453, 0.361094, 0.131928, 0.184616, - 0.147648, 0.373534, 0.151811, 0.207491, - 0.159607, 0.39101, 0.174476, 0.230106, - 0.171119, 0.402504, 0.198798, 0.257036, - 0.182906, 0.418032, 0.225796, 0.281172, - 0.193605, 0.425468, 0.254027, 0.312034, - 0.204771, 0.440379, 0.285713, 0.340402, - 0.214988, 0.445406, 0.319196, 0.370231, - 0.224711, 0.44968, 0.35537, 0.407105, - 0.233516, 0.460747, 0.393838, 0.439037, - 0.240801, 0.460624, 0.433747, 0.47781, - 0.24762, 0.465957, 0.477234, 0.510655, - 0.251823, 0.460054, 0.52044, 0.550584, - 0.255552, 0.459172, 0.567853, 0.585872, - 0.257036, 0.450311, 0.615943, 0.620466, - 0.257535, 0.437763, 0.667693, 0.660496, - 0.255248, 0.426639, 0.718988, 0.695578, - 0.251141, 0.409185, 0.772503, 0.732176, - 0.244718, 0.39015, 0.827023, 0.760782, - 0.236782, 0.362594, 0.885651, 0.79422, - 0.225923, 0.33711, 0.943756, 0.824521, - 0.213855, 0.308272, 1.00874, 0.854964, - 0.197723, 0.278529, 1.06764, 0.878065, - 0.179209, 0.246208, 1.12836, 0.899834, - 0.157569, 0.21329, 1.18318, 0.918815, - 0.133206, 0.181038, 1.23161, 0.934934, - 0.106545, 0.146993, 1.27644, 0.952115, - 0.0780574, 0.111175, 1.31842, 0.96906, - 0.0478279, 0.0728553, 1.35839, 0.985178, - 0.0160014, 0.032579, 1.39697, 1.00039, 0.0173126, - 0.0095256, 1.43312, 0.00384146, - 1.24311e-06, 0.0613583, 7.78271e-08, 0.00390023, - 3.14043e-05, 0.0622919, 1.96626e-06, 0.00389971, - 0.000125622, 0.0622632, 7.87379e-06, 0.00389491, - 0.000282352, 0.0620659, 1.778e-05, 0.00391618, - 0.000502512, 0.0624687, 3.20918e-05, 0.00392662, - 0.000784458, 0.0625113, 5.15573e-05, 0.00396053, - 0.00112907, 0.0628175, 7.78668e-05, 0.00401911, - 0.00153821, 0.0633286, 0.000113811, 0.00414994, - 0.0020208, 0.0646443, 0.00016445, 0.00441223, - 0.00260007, 0.0673886, 0.000237734, 0.00484427, - 0.0033097, 0.0716528, 0.000345929, 0.00549109, - 0.00418966, 0.0774998, 0.000505987, 0.00636293, - 0.00527331, 0.0844758, 0.000739208, 0.00746566, - 0.00660428, 0.0921325, 0.00107347, 0.00876625, - 0.00818826, 0.0997067, 0.00153691, 0.0103125, - 0.0100811, 0.107433, 0.00217153, 0.0123309, - 0.0123643, 0.117088, 0.00303427, 0.0146274, - 0.0150007, 0.126438, 0.00416018, 0.0172295, - 0.0180531, 0.135672, 0.00561513, 0.0204248, - 0.0215962, 0.146244, 0.007478, 0.0241597, - 0.0256234, 0.157481, 0.00981046, 0.0284693, - 0.0302209, 0.169125, 0.0127148, 0.033445, - 0.0353333, 0.181659, 0.0162453, 0.0391251, - 0.0410845, 0.1944, 0.0205417, 0.0454721, - 0.0473451, 0.207082, 0.0256333, 0.0530983, - 0.0542858, 0.221656, 0.0317036, 0.0615356, - 0.0618384, 0.236036, 0.0388319, 0.0703363, - 0.0697631, 0.248398, 0.046974, 0.0810391, - 0.0784757, 0.263611, 0.0565246, 0.0920144, - 0.0873488, 0.275857, 0.0671724, 0.105584, - 0.0973652, 0.292555, 0.0798105, 0.119506, - 0.107271, 0.306333, 0.0935945, 0.134434, - 0.117608, 0.318888, 0.109106, 0.153399, - 0.128938, 0.337552, 0.127074, 0.171258, - 0.139944, 0.349955, 0.14643, 0.191059, - 0.151288, 0.361545, 0.168, 0.215069, - 0.163018, 0.378421, 0.192082, 0.237838, - 0.174226, 0.38879, 0.217838, 0.266965, - 0.186063, 0.405857, 0.246931, 0.292827, - 0.196909, 0.414146, 0.277505, 0.324352, - 0.207473, 0.426955, 0.310711, 0.354427, - 0.217713, 0.433429, 0.346794, 0.389854, - 0.227183, 0.443966, 0.385237, 0.420749, - 0.235131, 0.44471, 0.424955, 0.459597, - 0.242786, 0.451729, 0.468446, 0.495316, - 0.248767, 0.45072, 0.513422, 0.534903, - 0.253351, 0.450924, 0.560618, 0.572369, - 0.256277, 0.445266, 0.609677, 0.612383, - 0.2576, 0.438798, 0.660995, 0.644037, - 0.256931, 0.421693, 0.713807, 0.686749, - 0.254036, 0.4109, 0.767616, 0.719814, - 0.249785, 0.390151, 0.82533, 0.754719, - 0.244283, 0.367847, 0.888311, 0.792022, - 0.235076, 0.345013, 0.948177, 0.822404, - 0.225061, 0.316193, 1.01661, 0.853084, - 0.211113, 0.287013, 1.08075, 0.879871, - 0.19449, 0.255424, 1.14501, 0.901655, - 0.174023, 0.222879, 1.20203, 0.919957, - 0.1509, 0.18989, 1.25698, 0.938412, - 0.124923, 0.15606, 1.30588, 0.953471, - 0.0968139, 0.120512, 1.3529, 0.970451, - 0.066734, 0.0828515, 1.3986, 0.985522, - 0.034734, 0.0424458, 1.44148, 1.00099, - 0.00102222, 0.000678929, 1.48398, 0.000965494, - 6.27338e-07, 0.0306409, 1.97672e-08, 0.00099168, - 1.58573e-05, 0.0314638, 4.99803e-07, 0.000991068, - 6.34012e-05, 0.031363, 2.00682e-06, 0.000974567, - 0.00014144, 0.03036, 4.57312e-06, 0.000998079, - 0.000252812, 0.031496, 8.60131e-06, 0.00102243, - 0.000396506, 0.0319955, 1.48288e-05, 0.00107877, - 0.000577593, 0.0331376, 2.49141e-05, 0.00121622, - 0.000816816, 0.0359396, 4.23011e-05, 0.0014455, - 0.00113761, 0.0399652, 7.24613e-05, 0.00178791, - 0.00156959, 0.0450556, 0.000123929, 0.00225668, - 0.00214064, 0.0508025, 0.000208531, 0.00285627, - 0.00287655, 0.0568443, 0.000341969, 0.0035991, - 0.00380271, 0.0630892, 0.000544158, 0.00455524, - 0.00496264, 0.0702204, 0.000842423, 0.00569143, - 0.0063793, 0.0773426, 0.00126704, 0.00716928, - 0.00813531, 0.0860839, 0.00186642, 0.00885307, - 0.0101946, 0.0944079, 0.00267014, 0.0109316, - 0.0126386, 0.103951, 0.00374033, 0.0133704, - 0.0154876, 0.113786, 0.0051304, 0.0161525, - 0.0187317, 0.123477, 0.00688858, 0.0194267, - 0.0224652, 0.133986, 0.00910557, 0.0230967, - 0.0265976, 0.143979, 0.0118074, 0.0273627, - 0.0312848, 0.154645, 0.0151266, 0.0323898, - 0.0365949, 0.166765, 0.0191791, 0.0379225, - 0.0422914, 0.177932, 0.0239236, 0.0447501, - 0.0487469, 0.19167, 0.0296568, 0.0519391, - 0.0556398, 0.203224, 0.0362924, 0.0599464, - 0.0631646, 0.215652, 0.0440585, 0.0702427, - 0.0714308, 0.232089, 0.0531619, 0.0806902, - 0.0800605, 0.245258, 0.0634564, 0.0923194, - 0.0892815, 0.258609, 0.0752481, 0.106938, - 0.09931, 0.276654, 0.0888914, 0.121238, - 0.109575, 0.289847, 0.104055, 0.138817, - 0.120461, 0.307566, 0.121266, 0.15595, - 0.131209, 0.320117, 0.139944, 0.178418, - 0.143049, 0.339677, 0.161591, 0.197875, - 0.154074, 0.349886, 0.184303, 0.224368, - 0.166307, 0.369352, 0.210669, 0.252213, - 0.178051, 0.386242, 0.238895, 0.277321, - 0.189335, 0.395294, 0.269182, 0.310332, - 0.200683, 0.412148, 0.302508, 0.338809, - 0.210856, 0.418266, 0.337264, 0.372678, - 0.220655, 0.428723, 0.374881, 0.405632, - 0.230053, 0.433887, 0.415656, 0.442293, - 0.237993, 0.439911, 0.457982, 0.477256, - 0.244897, 0.440175, 0.502831, 0.515592, - 0.250657, 0.441079, 0.550277, 0.550969, - 0.255459, 0.435219, 0.601102, 0.592883, - 0.257696, 0.432882, 0.651785, 0.629092, - 0.259894, 0.421054, 0.708961, 0.672033, - 0.258592, 0.41177, 0.763806, 0.709147, - 0.256525, 0.395267, 0.824249, 0.745367, - 0.254677, 0.375013, 0.8951, 0.784715, - 0.247892, 0.353906, 0.959317, 0.818107, - 0.240162, 0.327801, 1.03153, 0.847895, - 0.229741, 0.298821, 1.10601, 0.879603, - 0.213084, 0.269115, 1.164, 0.902605, - 0.195242, 0.236606, 1.22854, 0.922788, - 0.174505, 0.203442, 1.29017, 0.944831, - 0.150169, 0.169594, 1.34157, 0.959656, - 0.124099, 0.135909, 1.3956, 0.972399, - 0.0960626, 0.0990563, 1.45128, 0.986549, - 0.0657097, 0.0602348, 1.50312, 1.00013, - 0.0333558, 0.0186694, 1.55364, 6.19747e-06, - 1e-07, 0.00778326, 7.96756e-11, 2.37499e-08, - 9.99999e-08, 2.82592e-05, 1.14596e-10, 1.00292e-06, - 1.66369e-06, 0.000250354, 6.77492e-09, 3.50752e-06, - 6.37769e-06, 0.000357289, 6.31655e-08, 8.26445e-06, - 1.74689e-05, 0.000516179, 3.1851e-07, 2.42481e-05, - 4.50868e-05, 0.0010223, 1.30577e-06, 4.55631e-05, - 8.9044e-05, 0.00144302, 3.74587e-06, 9.71222e-05, - 0.000178311, 0.00241912, 1.02584e-05, 0.000171403, - 0.000313976, 0.00354938, 2.36481e-05, 0.000292747, - 0.000520026, 0.00513765, 4.96014e-05, 0.000789827, - 0.00118187, 0.0238621, 0.000139056, 0.00114093, - 0.00171827, 0.0286691, 0.000244093, 0.00176119, - 0.00249667, 0.0368565, 0.000420623, 0.0022233, - 0.00333742, 0.0400469, 0.00065673, 0.00343382, - 0.00481976, 0.0535751, 0.00109323, 0.00427602, - 0.00600755, 0.057099, 0.00155268, 0.00461435, - 0.00737637, 0.0551084, 0.00215031, 0.00695698, - 0.00971401, 0.0715767, 0.00316529, 0.00867619, - 0.0120943, 0.0793314, 0.00436995, 0.0106694, - 0.0148202, 0.0869391, 0.0058959, 0.0140351, - 0.0183501, 0.101572, 0.00798757, 0.0168939, - 0.022006, 0.11018, 0.0104233, 0.020197, - 0.0261568, 0.119041, 0.0134167, 0.0254702, - 0.0312778, 0.135404, 0.0173009, 0.0298384, - 0.0362469, 0.1437, 0.0215428, 0.035159, - 0.042237, 0.15512, 0.0268882, 0.0427685, - 0.0488711, 0.17128, 0.033235, 0.0494848, - 0.0557997, 0.181813, 0.0404443, 0.0592394, - 0.0635578, 0.198745, 0.0490043, 0.0681463, - 0.071838, 0.210497, 0.0588239, 0.0804753, - 0.0809297, 0.228864, 0.0702835, 0.0942205, - 0.0906488, 0.247008, 0.0834012, 0.106777, - 0.100216, 0.258812, 0.0975952, 0.124471, - 0.110827, 0.278617, 0.114162, 0.138389, - 0.121193, 0.287049, 0.131983, 0.159543, - 0.13253, 0.307151, 0.152541, 0.176432, - 0.143611, 0.31564, 0.174673, 0.201723, - 0.15548, 0.33538, 0.199842, 0.229721, - 0.167166, 0.355256, 0.227097, 0.250206, - 0.178238, 0.360047, 0.256014, 0.282118, - 0.189905, 0.378761, 0.28855, 0.312821, - 0.201033, 0.39181, 0.323348, 0.341482, - 0.211584, 0.397716, 0.360564, 0.377368, - 0.221314, 0.410141, 0.400004, 0.418229, - 0.230474, 0.423485, 0.442371, 0.444881, - 0.239443, 0.418874, 0.488796, 0.488899, - 0.245987, 0.427545, 0.535012, 0.520317, - 0.253948, 0.422147, 0.589678, 0.568566, - 0.256616, 0.42719, 0.637683, 0.599607, - 0.26376, 0.415114, 0.703363, 0.64222, - 0.268687, 0.408715, 0.771363, 0.685698, - 0.2694, 0.399722, 0.83574, 0.732327, - 0.266642, 0.388651, 0.897764, 0.769873, - 0.267712, 0.369198, 0.983312, 0.806733, - 0.263479, 0.346802, 1.06222, 0.843466, - 0.254575, 0.321368, 1.13477, 0.873008, - 0.242749, 0.29211, 1.20712, 0.908438, - 0.22725, 0.262143, 1.27465, 0.936321, - 0.207621, 0.228876, 1.33203, 0.950353, - 0.187932, 0.19484, 1.40439, 0.96442, - 0.165154, 0.163178, 1.4732, 0.979856, - 0.139302, 0.127531, 1.53574, 0.982561, - 0.11134, 0.0903457, 1.59982, 0.996389, - 0.0808124, 0.0489007, 1.6577 ];\n\n\t\tconst LTC_MAT_2 = [ 1, 0, 0, 0, 1, 7.91421e-31, 0, 0, 1, 1.04392e-24, 0, 0, 1, 3.49405e-21, 0, 0, 1, 1.09923e-18, 0, 0, 1, 9.47414e-17, 0, 0, 1, 3.59627e-15, 0, 0, 1, 7.72053e-14, 0, 0, 1, 1.08799e-12, 0, 0, 1, 1.10655e-11, 0, 0, 1, 8.65818e-11, 0, 0, 0.999998, 5.45037e-10, 0, 0, 0.999994, 2.85095e-09, 0, 0, 0.999989, 1.26931e-08, 0, 0, 0.999973, 4.89938e-08, 0, 0, 0.999947, 1.66347e-07, 0, 0, 0.999894, 5.02694e-07, 0, 0, 0.999798, 1.36532e-06, 0, 0, 0.999617, 3.35898e-06, 0, 0, 0.999234, 7.52126e-06, 0, 0, 0.998258, 1.52586e-05, 0, 0, 0.99504, 2.66207e-05, 0, 0, 0.980816, 2.36802e-05, 0, 0, 0.967553, 2.07684e-06, 0, 0, 0.966877, 4.03733e-06, 0, 0, 0.965752, 7.41174e-06, 0, 0, 0.96382, 1.27746e-05, 0, 0, 0.960306, 2.02792e-05, 0, 0, 0.953619, 2.80232e-05, 0, 0, 0.941103, 2.78816e-05, 0, 0, 0.926619, 1.60221e-05, 0, 0, 0.920983, 2.35164e-05, 0, 0, 0.912293, 3.11924e-05, 0, 0.0158731, 0.899277, 3.48118e-05, 0, 0.0476191, 0.880884, 2.6041e-05, 0, 0.0793651, 0.870399, 3.38726e-05, 0, 0.111111, 0.856138, 3.92906e-05, 0, 0.142857, 0.837436, 3.72874e-05, 0, 0.174603, 0.820973, 3.92558e-05, 0, 0.206349, 0.803583, 4.34658e-05, 0, 0.238095, 0.782168, 4.0256e-05, 0, 0.269841, 0.764107, 4.48159e-05, 0, 0.301587, 0.743092, 4.57627e-05, 0, 0.333333, 0.721626, 4.55314e-05, 0, 0.365079, 0.700375, 4.77335e-05, 0, 0.396825, 0.677334, 4.61072e-05, 0, 0.428571, 0.655702, 4.84393e-05, 0, 0.460317, 0.632059, 4.64583e-05, 0, 0.492064, 0.610125, 4.83923e-05, 0, 0.52381, 0.58653, 4.64342e-05, 0, 0.555556, 0.564508, 4.77033e-05, 0, 0.587302, 0.541405, 4.59263e-05, 0, 0.619048, 0.519556, 4.6412e-05, 0, 0.650794, 0.497292, 4.48913e-05, 0, 0.68254, 0.475898, 4.45789e-05, 0, 0.714286, 0.454722, 4.33496e-05, 0, 0.746032, 0.434042, 4.23054e-05, 0, 0.777778, 0.414126, 4.13737e-05, 0, 0.809524, 0.394387, 3.97265e-05, 0, 0.84127, 0.375841, 3.90709e-05, 0, 0.873016, 0.357219, 3.69938e-05, 0, 0.904762, 0.340084, 3.65618e-05, 0, 0.936508, 0.322714, 3.42533e-05, 0, 0.968254, 0.306974, 3.39596e-05, 0, 1, 1, 1.01524e-18, 0, 0, 1, 1.0292e-18, 0, 0, 1, 1.30908e-18, 0, 0, 1, 4.73331e-18, 0, 0, 1, 6.25319e-17, 0, 0, 1, 1.07932e-15, 0, 0, 1, 1.63779e-14, 0, 0, 1, 2.03198e-13, 0, 0, 1, 2.04717e-12, 0, 0, 0.999999, 1.68995e-11, 0, 0, 0.999998, 1.15855e-10, 0, 0, 0.999996, 6.6947e-10, 0, 0, 0.999991, 3.30863e-09, 0, 0, 0.999983, 1.41737e-08, 0, 0, 0.999968, 5.32626e-08, 0, 0, 0.99994, 1.77431e-07, 0, 0, 0.999891, 5.28835e-07, 0, 0, 0.999797, 1.42169e-06, 0, 0, 0.999617, 3.47057e-06, 0, 0, 0.999227, 7.7231e-06, 0, 0, 0.998239, 1.55753e-05, 0, 0, 0.994937, 2.68495e-05, 0, 0, 0.980225, 2.13742e-05, 0, 0, 0.967549, 2.1631e-06, 0, 0, 0.966865, 4.17989e-06, 0, 0, 0.965739, 7.63341e-06, 0, 0, 0.963794, 1.30892e-05, 0, 0, 0.960244, 2.06456e-05, 0, 0, 0.953495, 2.82016e-05, 0, 0.000148105, 0.940876, 2.71581e-05, 0, 0.002454, 0.926569, 1.64159e-05, 0, 0.00867491, 0.920905, 2.39521e-05, 0, 0.01956, 0.912169, 3.15127e-05, 0, 0.035433, 0.899095, 3.46626e-05, 0, 0.056294, 0.882209, 2.90223e-05, 0, 0.0818191, 0.870272, 3.42992e-05, 0, 0.111259, 0.855977, 3.94164e-05, 0, 0.142857, 0.837431, 3.72343e-05, 0, 0.174603, 0.820826, 3.96691e-05, 0, 0.206349, 0.803408, 4.35395e-05, 0, 0.238095, 0.782838, 4.19579e-05, 0, 0.269841, 0.763941, 4.50953e-05, 0, 0.301587, 0.742904, 4.55847e-05, 0, 0.333333, 0.721463, 4.58833e-05, 0, 0.365079, 0.700197, 4.77159e-05, 0, 0.396825, 0.677501, 4.70641e-05, 0, 0.428571, 0.655527, 4.84732e-05, 0, 0.460317, 0.6324, 4.76834e-05, 0, 0.492064, 0.609964, 4.84213e-05, 0, 0.52381, 0.586839, 4.75541e-05, 0, 0.555556, 0.564353, 4.76951e-05, 0, 0.587302, 0.541589, 4.67611e-05, 0, 0.619048, 0.519413, 4.63493e-05, 0, 0.650794, 0.497337, 4.53994e-05, 0, 0.68254, 0.475797, 4.45308e-05, 0, 0.714286, 0.454659, 4.35787e-05, 0, 0.746032, 0.434065, 4.24839e-05, 0, 0.777778, 0.414018, 4.1436e-05, 0, 0.809524, 0.39455, 4.01902e-05, 0, 0.84127, 0.375742, 3.90813e-05, 0, 0.873016, 0.357501, 3.77116e-05, 0, 0.904762, 0.339996, 3.6535e-05, 0, 0.936508, 0.323069, 3.51265e-05, 0, 0.968254, 0.306897, 3.39112e-05, 0, 1, 1, 1.0396e-15, 0, 0, 1, 1.04326e-15, 0, 0, 1, 1.10153e-15, 0, 0, 1, 1.44668e-15, 0, 0, 1, 3.4528e-15, 0, 0, 1, 1.75958e-14, 0, 0, 1, 1.2627e-13, 0, 0, 1, 9.36074e-13, 0, 0, 1, 6.45742e-12, 0, 0, 0.999998, 4.01228e-11, 0, 0, 0.999997, 2.22338e-10, 0, 0, 0.999995, 1.0967e-09, 0, 0, 0.999991, 4.82132e-09, 0, 0, 0.999981, 1.89434e-08, 0, 0, 0.999967, 6.67716e-08, 0, 0, 0.999938, 2.12066e-07, 0, 0, 0.999886, 6.0977e-07, 0, 0, 0.999792, 1.59504e-06, 0, 0, 0.999608, 3.81191e-06, 0, 0, 0.999209, 8.33727e-06, 0, 0, 0.998179, 1.65288e-05, 0, 0, 0.994605, 2.74387e-05, 0, 0, 0.979468, 1.67316e-05, 0, 0, 0.967529, 2.42877e-06, 0, 0, 0.966836, 4.61696e-06, 0, 0, 0.96569, 8.30977e-06, 0, 0, 0.963706, 1.40427e-05, 0, 2.44659e-06, 0.960063, 2.17353e-05, 0, 0.000760774, 0.953113, 2.86606e-05, 0, 0.00367261, 0.940192, 2.47691e-05, 0, 0.00940263, 0.927731, 1.95814e-05, 0, 0.018333, 0.920669, 2.52531e-05, 0, 0.0306825, 0.911799, 3.24277e-05, 0, 0.0465556, 0.89857, 3.40982e-05, 0, 0.0659521, 0.883283, 3.19622e-05, 0, 0.0887677, 0.86989, 3.5548e-05, 0, 0.114784, 0.855483, 3.97143e-05, 0, 0.143618, 0.837987, 3.91665e-05, 0, 0.174606, 0.820546, 4.11306e-05, 0, 0.206349, 0.802878, 4.36753e-05, 0, 0.238095, 0.783402, 4.44e-05, 0, 0.269841, 0.763439, 4.58726e-05, 0, 0.301587, 0.742925, 4.67097e-05, 0, 0.333333, 0.721633, 4.78887e-05, 0, 0.365079, 0.69985, 4.81251e-05, 0, 0.396825, 0.67783, 4.91811e-05, 0, 0.428571, 0.655126, 4.88199e-05, 0, 0.460318, 0.632697, 4.96025e-05, 0, 0.492064, 0.609613, 4.8829e-05, 0, 0.52381, 0.587098, 4.92754e-05, 0, 0.555556, 0.564119, 4.82625e-05, 0, 0.587302, 0.541813, 4.82807e-05, 0, 0.619048, 0.519342, 4.71552e-05, 0, 0.650794, 0.497514, 4.66765e-05, 0, 0.68254, 0.475879, 4.55582e-05, 0, 0.714286, 0.454789, 4.46007e-05, 0, 0.746032, 0.434217, 4.35382e-05, 0, 0.777778, 0.414086, 4.21753e-05, 0, 0.809524, 0.394744, 4.12093e-05, 0, 0.84127, 0.375782, 3.96634e-05, 0, 0.873016, 0.357707, 3.86419e-05, 0, 0.904762, 0.340038, 3.70345e-05, 0, 0.936508, 0.323284, 3.59725e-05, 0, 0.968254, 0.306954, 3.436e-05, 0, 1, 1, 5.99567e-14, 0, 0, 1, 6.00497e-14, 0, 0, 1, 6.14839e-14, 0, 0, 1, 6.86641e-14, 0, 0, 1, 9.72658e-14, 0, 0, 1, 2.21271e-13, 0, 0, 1, 8.33195e-13, 0, 0, 1, 4.03601e-12, 0, 0, 0.999999, 2.06001e-11, 0, 0, 0.999998, 1.01739e-10, 0, 0, 0.999997, 4.70132e-10, 0, 0, 0.999993, 2.00436e-09, 0, 0, 0.999988, 7.83682e-09, 0, 0, 0.999979, 2.80338e-08, 0, 0, 0.999962, 9.17033e-08, 0, 0, 0.999933, 2.74514e-07, 0, 0, 0.999881, 7.53201e-07, 0, 0, 0.999783, 1.89826e-06, 0, 0, 0.999594, 4.40279e-06, 0, 0, 0.999178, 9.3898e-06, 0, 0, 0.998073, 1.81265e-05, 0, 0, 0.993993, 2.80487e-05, 0, 0, 0.979982, 1.49422e-05, 0, 0, 0.968145, 3.78481e-06, 0, 0, 0.966786, 5.3771e-06, 0, 0, 0.965611, 9.47508e-06, 0, 3.88934e-05, 0.963557, 1.56616e-05, 0, 0.0009693, 0.959752, 2.35144e-05, 0, 0.00370329, 0.952461, 2.91568e-05, 0, 0.00868428, 0.940193, 2.40102e-05, 0, 0.0161889, 0.929042, 2.31235e-05, 0, 0.0263948, 0.920266, 2.73968e-05, 0, 0.0394088, 0.911178, 3.37915e-05, 0, 0.0552818, 0.897873, 3.33629e-05, 0, 0.0740138, 0.884053, 3.51405e-05, 0, 0.0955539, 0.869455, 3.78034e-05, 0, 0.119795, 0.854655, 3.99378e-05, 0, 0.14656, 0.838347, 4.19108e-05, 0, 0.175573, 0.820693, 4.40831e-05, 0, 0.206388, 0.802277, 4.45599e-05, 0, 0.238095, 0.783634, 4.72691e-05, 0, 0.269841, 0.763159, 4.76984e-05, 0, 0.301587, 0.742914, 4.91487e-05, 0, 0.333333, 0.721662, 5.02312e-05, 0, 0.365079, 0.699668, 5.02817e-05, 0, 0.396825, 0.677839, 5.1406e-05, 0, 0.428571, 0.655091, 5.11095e-05, 0, 0.460317, 0.632665, 5.16067e-05, 0, 0.492064, 0.609734, 5.12255e-05, 0, 0.52381, 0.587043, 5.10263e-05, 0, 0.555556, 0.564298, 5.0565e-05, 0, 0.587302, 0.541769, 4.97951e-05, 0, 0.619048, 0.519529, 4.92698e-05, 0, 0.650794, 0.497574, 4.82066e-05, 0, 0.68254, 0.476028, 4.73689e-05, 0, 0.714286, 0.454961, 4.61941e-05, 0, 0.746032, 0.434341, 4.50618e-05, 0, 0.777778, 0.414364, 4.38355e-05, 0, 0.809524, 0.394832, 4.24196e-05, 0, 0.84127, 0.376109, 4.12563e-05, 0, 0.873016, 0.35779, 3.96226e-05, 0, 0.904762, 0.340379, 3.84886e-05, 0, 0.936508, 0.323385, 3.68214e-05, 0, 0.968254, 0.307295, 3.56636e-05, 0, 1, 1, 1.06465e-12, 0, 0, 1, 1.06555e-12, 0, 0, 1, 1.07966e-12, 0, 0, 1, 1.14601e-12, 0, 0, 1, 1.37123e-12, 0, 0, 1, 2.1243e-12, 0, 0, 0.999999, 4.89653e-12, 0, 0, 0.999999, 1.60283e-11, 0, 0, 0.999998, 6.2269e-11, 0, 0, 0.999997, 2.51859e-10, 0, 0, 0.999996, 9.96192e-10, 0, 0, 0.999992, 3.74531e-09, 0, 0, 0.999986, 1.32022e-08, 0, 0, 0.999975, 4.33315e-08, 0, 0, 0.999959, 1.31956e-07, 0, 0, 0.999927, 3.72249e-07, 0, 0, 0.999871, 9.72461e-07, 0, 0, 0.999771, 2.35343e-06, 0, 0, 0.999572, 5.2768e-06, 0, 0, 0.999133, 1.09237e-05, 0, 0, 0.997912, 2.03675e-05, 0, 0, 0.993008, 2.79396e-05, 0, 0, 0.980645, 1.39604e-05, 0, 0, 0.970057, 6.46596e-06, 0, 0, 0.966717, 6.5089e-06, 0, 4.74145e-05, 0.965497, 1.11863e-05, 0, 0.00089544, 0.96334, 1.79857e-05, 0, 0.0032647, 0.959294, 2.59045e-05, 0, 0.0075144, 0.951519, 2.92327e-05, 0, 0.0138734, 0.940517, 2.49769e-05, 0, 0.0224952, 0.93014, 2.6803e-05, 0, 0.0334828, 0.91972, 3.03656e-05, 0, 0.0468973, 0.910294, 3.53323e-05, 0, 0.0627703, 0.897701, 3.51002e-05, 0, 0.0811019, 0.884522, 3.88104e-05, 0, 0.10186, 0.869489, 4.12932e-05, 0, 0.124985, 0.853983, 4.15781e-05, 0, 0.150372, 0.838425, 4.54066e-05, 0, 0.177868, 0.820656, 4.71624e-05, 0, 0.207245, 0.801875, 4.75243e-05, 0, 0.238143, 0.783521, 5.05621e-05, 0, 0.269841, 0.763131, 5.0721e-05, 0, 0.301587, 0.74261, 5.23293e-05, 0, 0.333333, 0.72148, 5.28699e-05, 0, 0.365079, 0.699696, 5.38677e-05, 0, 0.396825, 0.677592, 5.39255e-05, 0, 0.428571, 0.65525, 5.46367e-05, 0, 0.460317, 0.632452, 5.41348e-05, 0, 0.492064, 0.609903, 5.44976e-05, 0, 0.52381, 0.586928, 5.36201e-05, 0, 0.555556, 0.564464, 5.35185e-05, 0, 0.587302, 0.541801, 5.24949e-05, 0, 0.619048, 0.519681, 5.1812e-05, 0, 0.650794, 0.497685, 5.07687e-05, 0, 0.68254, 0.47622, 4.96243e-05, 0, 0.714286, 0.455135, 4.85714e-05, 0, 0.746032, 0.4346, 4.71847e-05, 0, 0.777778, 0.414564, 4.59294e-05, 0, 0.809524, 0.395165, 4.44705e-05, 0, 0.84127, 0.376333, 4.30772e-05, 0, 0.873016, 0.358197, 4.16229e-05, 0, 0.904762, 0.34064, 4.01019e-05, 0, 0.936508, 0.323816, 3.86623e-05, 0, 0.968254, 0.307581, 3.70933e-05, 0, 1, 1, 9.91541e-12, 0, 0, 1, 9.92077e-12, 0, 0, 1, 1.00041e-11, 0, 0, 1, 1.0385e-11, 0, 0, 1, 1.15777e-11, 0, 0, 1, 1.50215e-11, 0, 0, 0.999999, 2.54738e-11, 0, 0, 0.999999, 5.98822e-11, 0, 0, 0.999998, 1.79597e-10, 0, 0, 0.999997, 6.02367e-10, 0, 0, 0.999994, 2.06835e-09, 0, 0, 0.99999, 6.94952e-09, 0, 0, 0.999984, 2.23363e-08, 0, 0, 0.999972, 6.78578e-08, 0, 0, 0.999952, 1.93571e-07, 0, 0, 0.999919, 5.16594e-07, 0, 0, 0.99986, 1.28739e-06, 0, 0, 0.999753, 2.99298e-06, 0, 0, 0.999546, 6.48258e-06, 0, 0, 0.999074, 1.29985e-05, 0, 0, 0.997671, 2.32176e-05, 0, 0, 0.991504, 2.56701e-05, 0, 0, 0.981148, 1.31141e-05, 0, 0, 0.971965, 8.69048e-06, 0, 2.80182e-05, 0.966624, 8.08301e-06, 0, 0.000695475, 0.965344, 1.35235e-05, 0, 0.00265522, 0.963048, 2.10592e-05, 0, 0.00622975, 0.958673, 2.87473e-05, 0, 0.0116234, 0.950262, 2.81379e-05, 0, 0.018976, 0.940836, 2.71089e-05, 0, 0.0283844, 0.930996, 3.0926e-05, 0, 0.0399151, 0.919848, 3.48359e-05, 0, 0.0536063, 0.909136, 3.66092e-05, 0, 0.0694793, 0.897554, 3.84162e-05, 0, 0.0875342, 0.884691, 4.30971e-05, 0, 0.107749, 0.869414, 4.47803e-05, 0, 0.130087, 0.853462, 4.52858e-05, 0, 0.154481, 0.838187, 4.95769e-05, 0, 0.180833, 0.820381, 5.02709e-05, 0, 0.209005, 0.801844, 5.22713e-05, 0, 0.238791, 0.783061, 5.41505e-05, 0, 0.269869, 0.763205, 5.53712e-05, 0, 0.301587, 0.742362, 5.64909e-05, 0, 0.333333, 0.721393, 5.72646e-05, 0, 0.365079, 0.699676, 5.81012e-05, 0, 0.396825, 0.677395, 5.8096e-05, 0, 0.428571, 0.655208, 5.85766e-05, 0, 0.460317, 0.632451, 5.83602e-05, 0, 0.492064, 0.609839, 5.80234e-05, 0, 0.52381, 0.587093, 5.77161e-05, 0, 0.555556, 0.564467, 5.68447e-05, 0, 0.587302, 0.542043, 5.63166e-05, 0, 0.619048, 0.519826, 5.5156e-05, 0, 0.650794, 0.497952, 5.41682e-05, 0, 0.68254, 0.476477, 5.28971e-05, 0, 0.714286, 0.455412, 5.14952e-05, 0, 0.746032, 0.434926, 5.02222e-05, 0, 0.777778, 0.4149, 4.85779e-05, 0, 0.809524, 0.395552, 4.72242e-05, 0, 0.84127, 0.376712, 4.54891e-05, 0, 0.873016, 0.358622, 4.40924e-05, 0, 0.904762, 0.341048, 4.22984e-05, 0, 0.936508, 0.324262, 4.08582e-05, 0, 0.968254, 0.308013, 3.90839e-05, 0, 1, 1, 6.13913e-11, 0, 0, 1, 6.14145e-11, 0, 0, 1, 6.17708e-11, 0, 0, 1, 6.33717e-11, 0, 0, 1, 6.81648e-11, 0, 0, 1, 8.08291e-11, 0, 0, 1, 1.14608e-10, 0, 0, 0.999998, 2.10507e-10, 0, 0, 0.999997, 4.99595e-10, 0, 0, 0.999995, 1.39897e-09, 0, 0, 0.999994, 4.19818e-09, 0, 0, 0.999988, 1.27042e-08, 0, 0, 0.999979, 3.75153e-08, 0, 0, 0.999965, 1.06206e-07, 0, 0, 0.999945, 2.85381e-07, 0, 0, 0.999908, 7.23611e-07, 0, 0, 0.999846, 1.7255e-06, 0, 0, 0.999733, 3.86104e-06, 0, 0, 0.999511, 8.08493e-06, 0, 0, 0.998993, 1.56884e-05, 0, 0, 0.997326, 2.65538e-05, 0, 0, 0.989706, 2.06466e-05, 0, 0, 0.981713, 1.30756e-05, 0, 7.0005e-06, 0.973636, 1.06473e-05, 0, 0.000464797, 0.966509, 1.0194e-05, 0, 0.00201743, 0.965149, 1.65881e-05, 0, 0.00497549, 0.962669, 2.49147e-05, 0, 0.00953262, 0.95786, 3.17449e-05, 0, 0.0158211, 0.949334, 2.81045e-05, 0, 0.0239343, 0.941041, 3.03263e-05, 0, 0.0339372, 0.931575, 3.56754e-05, 0, 0.0458738, 0.920102, 3.97075e-05, 0, 0.059772, 0.908002, 3.84886e-05, 0, 0.075645, 0.897269, 4.3027e-05, 0, 0.0934929, 0.884559, 4.79925e-05, 0, 0.113302, 0.869161, 4.8246e-05, 0, 0.135045, 0.853342, 5.09505e-05, 0, 0.158678, 0.837633, 5.42846e-05, 0, 0.184136, 0.820252, 5.54139e-05, 0, 0.211325, 0.801872, 5.81412e-05, 0, 0.240113, 0.782418, 5.85535e-05, 0, 0.270306, 0.7631, 6.10923e-05, 0, 0.301594, 0.742183, 6.13678e-05, 0, 0.333333, 0.721098, 6.27275e-05, 0, 0.365079, 0.699512, 6.29413e-05, 0, 0.396825, 0.677372, 6.36351e-05, 0, 0.428571, 0.655059, 6.33555e-05, 0, 0.460317, 0.632567, 6.36513e-05, 0, 0.492064, 0.609784, 6.28965e-05, 0, 0.52381, 0.587237, 6.25546e-05, 0, 0.555556, 0.564525, 6.15825e-05, 0, 0.587302, 0.542181, 6.05048e-05, 0, 0.619048, 0.520017, 5.96329e-05, 0, 0.650794, 0.498204, 5.81516e-05, 0, 0.68254, 0.476742, 5.69186e-05, 0, 0.714286, 0.455803, 5.53833e-05, 0, 0.746032, 0.435251, 5.37807e-05, 0, 0.777778, 0.415374, 5.22025e-05, 0, 0.809524, 0.395921, 5.03421e-05, 0, 0.84127, 0.377253, 4.88211e-05, 0, 0.873016, 0.359021, 4.68234e-05, 0, 0.904762, 0.341637, 4.53269e-05, 0, 0.936508, 0.3247, 4.33014e-05, 0, 0.968254, 0.308625, 4.18007e-05, 0, 1, 1, 2.86798e-10, 0, 0, 1, 2.86877e-10, 0, 0, 1, 2.88094e-10, 0, 0, 1, 2.93506e-10, 0, 0, 1, 3.09262e-10, 0, 0, 0.999999, 3.48593e-10, 0, 0, 0.999999, 4.44582e-10, 0, 0, 0.999998, 6.88591e-10, 0, 0, 0.999996, 1.34391e-09, 0, 0, 0.999993, 3.17438e-09, 0, 0, 0.999989, 8.35609e-09, 0, 0, 0.999983, 2.28677e-08, 0, 0, 0.999974, 6.23361e-08, 0, 0, 0.999959, 1.65225e-07, 0, 0, 0.999936, 4.19983e-07, 0, 0, 0.999896, 1.01546e-06, 0, 0, 0.99983, 2.32376e-06, 0, 0, 0.999709, 5.0156e-06, 0, 0, 0.999469, 1.0167e-05, 0, 0, 0.998886, 1.90775e-05, 0, 0, 0.996819, 3.00511e-05, 0, 0, 0.988837, 1.85092e-05, 0, 1.68222e-07, 0.982178, 1.34622e-05, 0, 0.000259622, 0.975017, 1.25961e-05, 0, 0.00142595, 0.967101, 1.3507e-05, 0, 0.00382273, 0.964905, 2.05003e-05, 0, 0.00764164, 0.96218, 2.9546e-05, 0, 0.0130121, 0.956821, 3.43738e-05, 0, 0.0200253, 0.948829, 3.05063e-05, 0, 0.0287452, 0.941092, 3.46487e-05, 0, 0.039218, 0.931883, 4.12061e-05, 0, 0.0514748, 0.920211, 4.44651e-05, 0, 0.0655351, 0.907307, 4.31252e-05, 0, 0.0814082, 0.89684, 4.90382e-05, 0, 0.0990939, 0.884119, 5.3334e-05, 0, 0.118583, 0.869148, 5.4114e-05, 0, 0.139856, 0.853377, 5.78536e-05, 0, 0.162882, 0.836753, 5.92285e-05, 0, 0.187615, 0.820063, 6.22787e-05, 0, 0.213991, 0.801694, 6.45492e-05, 0, 0.241918, 0.782116, 6.5353e-05, 0, 0.271267, 0.762673, 6.74344e-05, 0, 0.301847, 0.742133, 6.82788e-05, 0, 0.333333, 0.720779, 6.91959e-05, 0, 0.365079, 0.699386, 6.96817e-05, 0, 0.396826, 0.67732, 6.99583e-05, 0, 0.428572, 0.654888, 6.98447e-05, 0, 0.460318, 0.632499, 6.94063e-05, 0, 0.492064, 0.609825, 6.91612e-05, 0, 0.52381, 0.587287, 6.81576e-05, 0, 0.555556, 0.564743, 6.74138e-05, 0, 0.587302, 0.542409, 6.61617e-05, 0, 0.619048, 0.520282, 6.47785e-05, 0, 0.650794, 0.498506, 6.33836e-05, 0, 0.68254, 0.477102, 6.15905e-05, 0, 0.714286, 0.456167, 6.01013e-05, 0, 0.746032, 0.435728, 5.81457e-05, 0, 0.777778, 0.415809, 5.64215e-05, 0, 0.809524, 0.396517, 5.44997e-05, 0, 0.84127, 0.377737, 5.25061e-05, 0, 0.873016, 0.359698, 5.06831e-05, 0, 0.904762, 0.342164, 4.8568e-05, 0, 0.936508, 0.325417, 4.67826e-05, 0, 0.968254, 0.309186, 4.46736e-05, 0, 1, 1, 1.09018e-09, 0, 0, 1, 1.0904e-09, 0, 0, 1, 1.09393e-09, 0, 0, 1, 1.1095e-09, 0, 0, 1, 1.154e-09, 0, 0, 1, 1.26089e-09, 0, 0, 0.999999, 1.5059e-09, 0, 0, 0.999997, 2.07899e-09, 0, 0, 0.999994, 3.48164e-09, 0, 0, 0.999993, 7.05728e-09, 0, 0, 0.999987, 1.63692e-08, 0, 0, 0.999981, 4.06033e-08, 0, 0, 0.999969, 1.0245e-07, 0, 0, 0.999953, 2.55023e-07, 0, 0, 0.999925, 6.1511e-07, 0, 0, 0.999881, 1.42218e-06, 0, 0, 0.99981, 3.13086e-06, 0, 0, 0.99968, 6.53119e-06, 0, 0, 0.999418, 1.2832e-05, 0, 0, 0.998748, 2.32497e-05, 0, 0, 0.996066, 3.29522e-05, 0, 0, 0.988379, 1.79613e-05, 0, 0.000108799, 0.982567, 1.43715e-05, 0, 0.000921302, 0.976097, 1.48096e-05, 0, 0.00280738, 0.968475, 1.78905e-05, 0, 0.00596622, 0.964606, 2.53921e-05, 0, 0.0105284, 0.961564, 3.48623e-05, 0, 0.0165848, 0.955517, 3.57612e-05, 0, 0.0242, 0.948381, 3.43493e-05, 0, 0.03342, 0.941095, 4.05849e-05, 0, 0.0442777, 0.931923, 4.75394e-05, 0, 0.0567958, 0.91996, 4.84328e-05, 0, 0.0709879, 0.907419, 5.02146e-05, 0, 0.086861, 0.89618, 5.61654e-05, 0, 0.104415, 0.88337, 5.87612e-05, 0, 0.123643, 0.869046, 6.18057e-05, 0, 0.144531, 0.853278, 6.57392e-05, 0, 0.167057, 0.836091, 6.6303e-05, 0, 0.191188, 0.819644, 7.04445e-05, 0, 0.216878, 0.801246, 7.14071e-05, 0, 0.244062, 0.782031, 7.40093e-05, 0, 0.272649, 0.762066, 7.4685e-05, 0, 0.302509, 0.741964, 7.66647e-05, 0, 0.333442, 0.720554, 7.66328e-05, 0, 0.365079, 0.699098, 7.77857e-05, 0, 0.396826, 0.677189, 7.74633e-05, 0, 0.428572, 0.65484, 7.76235e-05, 0, 0.460318, 0.632496, 7.70316e-05, 0, 0.492064, 0.609908, 7.62669e-05, 0, 0.52381, 0.587312, 7.53972e-05, 0, 0.555556, 0.564938, 7.39994e-05, 0, 0.587302, 0.542577, 7.28382e-05, 0, 0.619048, 0.52062, 7.1112e-05, 0, 0.650794, 0.498819, 6.94004e-05, 0, 0.68254, 0.477555, 6.75575e-05, 0, 0.714286, 0.456568, 6.53449e-05, 0, 0.746032, 0.436278, 6.36068e-05, 0, 0.777778, 0.41637, 6.13466e-05, 0, 0.809524, 0.397144, 5.94177e-05, 0, 0.84127, 0.378412, 5.70987e-05, 0, 0.873016, 0.360376, 5.50419e-05, 0, 0.904762, 0.342906, 5.27422e-05, 0, 0.936508, 0.326136, 5.06544e-05, 0, 0.968254, 0.30997, 4.84307e-05, 0, 1, 1, 3.54014e-09, 0, 0, 1, 3.54073e-09, 0, 0, 1, 3.54972e-09, 0, 0, 1, 3.58929e-09, 0, 0, 1, 3.70093e-09, 0, 0, 0.999999, 3.96194e-09, 0, 0, 0.999998, 4.53352e-09, 0, 0, 0.999997, 5.78828e-09, 0, 0, 0.999994, 8.63812e-09, 0, 0, 0.999991, 1.53622e-08, 0, 0, 0.999985, 3.16356e-08, 0, 0, 0.999977, 7.12781e-08, 0, 0, 0.999964, 1.66725e-07, 0, 0, 0.999945, 3.90501e-07, 0, 0, 0.999912, 8.95622e-07, 0, 0, 0.999866, 1.98428e-06, 0, 0, 0.999786, 4.21038e-06, 0, 0, 0.999647, 8.50239e-06, 0, 0, 0.999356, 1.62059e-05, 0, 0, 0.998563, 2.82652e-05, 0, 0, 0.994928, 3.36309e-05, 0, 2.44244e-05, 0.987999, 1.78458e-05, 0, 0.000523891, 0.982893, 1.59162e-05, 0, 0.00194729, 0.977044, 1.78056e-05, 0, 0.00451099, 0.969972, 2.30624e-05, 0, 0.00835132, 0.964237, 3.13922e-05, 0, 0.013561, 0.960791, 4.06145e-05, 0, 0.0202056, 0.954292, 3.72796e-05, 0, 0.0283321, 0.948052, 4.03199e-05, 0, 0.0379739, 0.940938, 4.79537e-05, 0, 0.0491551, 0.931689, 5.45292e-05, 0, 0.0618918, 0.91987, 5.4038e-05, 0, 0.0761941, 0.907665, 5.89909e-05, 0, 0.0920672, 0.895281, 6.42651e-05, 0, 0.109511, 0.882621, 6.59707e-05, 0, 0.12852, 0.86873, 7.09973e-05, 0, 0.149085, 0.853008, 7.42221e-05, 0, 0.171189, 0.835944, 7.61754e-05, 0, 0.194809, 0.818949, 7.97052e-05, 0, 0.21991, 0.800951, 8.12434e-05, 0, 0.246447, 0.781847, 8.38075e-05, 0, 0.274352, 0.761649, 8.4501e-05, 0, 0.303535, 0.74152, 8.60258e-05, 0, 0.333857, 0.720495, 8.66233e-05, 0, 0.365104, 0.698742, 8.68326e-05, 0, 0.396826, 0.677096, 8.7133e-05, 0, 0.428572, 0.654782, 8.63497e-05, 0, 0.460318, 0.632335, 8.60206e-05, 0, 0.492064, 0.610031, 8.49337e-05, 0, 0.52381, 0.587457, 8.38279e-05, 0, 0.555556, 0.56513, 8.2309e-05, 0, 0.587302, 0.542877, 8.03542e-05, 0, 0.619048, 0.5209, 7.86928e-05, 0, 0.650794, 0.499291, 7.65171e-05, 0, 0.68254, 0.477971, 7.44753e-05, 0, 0.714286, 0.457221, 7.2209e-05, 0, 0.746032, 0.436803, 6.97448e-05, 0, 0.777778, 0.417083, 6.75333e-05, 0, 0.809524, 0.397749, 6.48058e-05, 0, 0.84127, 0.379177, 6.25759e-05, 0, 0.873016, 0.361061, 5.98584e-05, 0, 0.904762, 0.343713, 5.75797e-05, 0, 0.936508, 0.326894, 5.49999e-05, 0, 0.968254, 0.310816, 5.27482e-05, 0, 1, 1, 1.0153e-08, 0, 0, 1, 1.01544e-08, 0, 0, 1, 1.01751e-08, 0, 0, 1, 1.02662e-08, 0, 0, 1, 1.0521e-08, 0, 0, 0.999999, 1.11049e-08, 0, 0, 0.999999, 1.23408e-08, 0, 0, 0.999996, 1.4924e-08, 0, 0, 0.999992, 2.04471e-08, 0, 0, 0.999989, 3.26539e-08, 0, 0, 0.99998, 6.03559e-08, 0, 0, 0.999971, 1.23936e-07, 0, 0, 0.999955, 2.69058e-07, 0, 0, 0.999933, 5.93604e-07, 0, 0, 0.999901, 1.29633e-06, 0, 0, 0.999847, 2.75621e-06, 0, 0, 0.999761, 5.64494e-06, 0, 0, 0.999607, 1.10485e-05, 0, 0, 0.999282, 2.04388e-05, 0, 0, 0.99831, 3.41084e-05, 0, 2.2038e-07, 0.993288, 2.94949e-05, 0, 0.000242388, 0.987855, 1.92736e-05, 0, 0.0012503, 0.983167, 1.82383e-05, 0, 0.0032745, 0.977908, 2.18633e-05, 0, 0.00646321, 0.971194, 2.90662e-05, 0, 0.0109133, 0.963867, 3.86401e-05, 0, 0.0166927, 0.95982, 4.62827e-05, 0, 0.0238494, 0.953497, 4.20705e-05, 0, 0.0324178, 0.947621, 4.77743e-05, 0, 0.0424225, 0.940611, 5.68258e-05, 0, 0.0538808, 0.931174, 6.18061e-05, 0, 0.0668047, 0.919919, 6.27098e-05, 0, 0.0812014, 0.907856, 6.94714e-05, 0, 0.0970745, 0.894509, 7.35008e-05, 0, 0.114424, 0.881954, 7.63369e-05, 0, 0.133246, 0.868309, 8.21896e-05, 0, 0.153534, 0.852511, 8.3769e-05, 0, 0.175275, 0.835821, 8.81615e-05, 0, 0.198453, 0.817981, 8.96368e-05, 0, 0.223042, 0.800504, 9.30906e-05, 0, 0.249009, 0.78141, 9.45056e-05, 0, 0.276304, 0.761427, 9.63605e-05, 0, 0.304862, 0.74094, 9.68088e-05, 0, 0.334584, 0.720233, 9.81481e-05, 0, 0.365322, 0.698592, 9.79122e-05, 0, 0.396826, 0.676763, 9.81057e-05, 0, 0.428571, 0.654808, 9.73956e-05, 0, 0.460318, 0.632326, 9.62619e-05, 0, 0.492064, 0.610049, 9.52996e-05, 0, 0.52381, 0.58763, 9.33334e-05, 0, 0.555556, 0.565261, 9.17573e-05, 0, 0.587302, 0.543244, 8.96636e-05, 0, 0.619048, 0.521273, 8.73304e-05, 0, 0.650794, 0.499818, 8.52648e-05, 0, 0.68254, 0.478536, 8.23961e-05, 0, 0.714286, 0.457826, 7.9939e-05, 0, 0.746032, 0.437549, 7.7126e-05, 0, 0.777778, 0.41776, 7.43043e-05, 0, 0.809524, 0.39863, 7.16426e-05, 0, 0.84127, 0.379954, 6.86456e-05, 0, 0.873016, 0.362025, 6.60514e-05, 0, 0.904762, 0.344581, 6.30755e-05, 0, 0.936508, 0.327909, 6.05439e-05, 0, 0.968254, 0.311736, 5.76345e-05, 0, 1, 1, 2.63344e-08, 0, 0, 1, 2.63373e-08, 0, 0, 1, 2.63815e-08, 0, 0, 1, 2.65753e-08, 0, 0, 1, 2.71132e-08, 0, 0, 0.999999, 2.83279e-08, 0, 0, 0.999997, 3.0833e-08, 0, 0, 0.999995, 3.58711e-08, 0, 0, 0.999992, 4.61266e-08, 0, 0, 0.999985, 6.7574e-08, 0, 0, 0.999977, 1.1358e-07, 0, 0, 0.999966, 2.13657e-07, 0, 0, 0.999948, 4.31151e-07, 0, 0, 0.999923, 8.96656e-07, 0, 0, 0.999884, 1.86603e-06, 0, 0, 0.999826, 3.81115e-06, 0, 0, 0.999732, 7.54184e-06, 0, 0, 0.999561, 1.43192e-05, 0, 0, 0.999191, 2.57061e-05, 0, 0, 0.997955, 4.05724e-05, 0, 7.44132e-05, 0.992228, 2.76537e-05, 0, 0.000716477, 0.987638, 2.08885e-05, 0, 0.0022524, 0.983395, 2.15226e-05, 0, 0.00484816, 0.978614, 2.70795e-05, 0, 0.00860962, 0.972389, 3.65282e-05, 0, 0.0136083, 0.964392, 4.74747e-05, 0, 0.0198941, 0.95861, 5.09141e-05, 0, 0.0275023, 0.952806, 4.8963e-05, 0, 0.0364584, 0.94712, 5.71119e-05, 0, 0.04678, 0.940104, 6.71704e-05, 0, 0.0584799, 0.930398, 6.87586e-05, 0, 0.0715665, 0.919866, 7.38161e-05, 0, 0.086045, 0.907853, 8.13235e-05, 0, 0.101918, 0.894078, 8.34582e-05, 0, 0.119186, 0.881177, 8.92093e-05, 0, 0.137845, 0.867575, 9.44548e-05, 0, 0.157891, 0.852107, 9.69607e-05, 0, 0.179316, 0.835502, 0.000101456, 0, 0.202106, 0.81756, 0.000103256, 0, 0.226243, 0.79984, 0.000106954, 0, 0.251704, 0.780998, 0.000108066, 0, 0.278451, 0.761132, 0.000110111, 0, 0.306436, 0.740429, 0.000110459, 0, 0.335586, 0.719836, 0.000111219, 0, 0.365796, 0.698467, 0.00011145, 0, 0.3969, 0.676446, 0.000110393, 0, 0.428571, 0.654635, 0.000110035, 0, 0.460318, 0.632411, 0.000108548, 0, 0.492064, 0.609986, 0.000106963, 0, 0.52381, 0.587872, 0.000105238, 0, 0.555556, 0.565528, 0.000102665, 0, 0.587302, 0.543563, 0.000100543, 0, 0.619048, 0.52176, 9.76182e-05, 0, 0.650794, 0.500188, 9.47099e-05, 0, 0.68254, 0.479204, 9.19929e-05, 0, 0.714286, 0.458413, 8.86139e-05, 0, 0.746032, 0.438314, 8.57839e-05, 0, 0.777778, 0.418573, 8.2411e-05, 0, 0.809524, 0.39947, 7.92211e-05, 0, 0.84127, 0.380892, 7.59546e-05, 0, 0.873016, 0.362953, 7.27571e-05, 0, 0.904762, 0.345601, 6.95738e-05, 0, 0.936508, 0.328895, 6.64907e-05, 0, 0.968254, 0.312808, 6.34277e-05, 0, 1, 1, 6.28647e-08, 0, 0, 1, 6.28705e-08, 0, 0, 1, 6.29587e-08, 0, 0, 1, 6.33441e-08, 0, 0, 0.999999, 6.44087e-08, 0, 0, 0.999998, 6.67856e-08, 0, 0, 0.999997, 7.15889e-08, 0, 0, 0.999995, 8.09577e-08, 0, 0, 0.999989, 9.92764e-08, 0, 0, 0.999983, 1.35834e-07, 0, 0, 0.999974, 2.10482e-07, 0, 0, 0.999959, 3.65215e-07, 0, 0, 0.999939, 6.86693e-07, 0, 0, 0.999911, 1.3472e-06, 0, 0, 0.999868, 2.6731e-06, 0, 0, 0.999804, 5.24756e-06, 0, 0, 0.9997, 1.00403e-05, 0, 0, 0.99951, 1.85019e-05, 0, 0, 0.999078, 3.22036e-05, 0, 6.20676e-06, 0.997428, 4.70002e-05, 0, 0.000341552, 0.99162, 2.87123e-05, 0, 0.00143727, 0.987479, 2.34706e-05, 0, 0.00349201, 0.983582, 2.60083e-05, 0, 0.0066242, 0.979186, 3.37927e-05, 0, 0.0109113, 0.97325, 4.54689e-05, 0, 0.0164064, 0.965221, 5.73759e-05, 0, 0.0231463, 0.957262, 5.44114e-05, 0, 0.0311571, 0.952211, 5.87006e-05, 0, 0.0404572, 0.946631, 6.92256e-05, 0, 0.0510592, 0.939391, 7.87819e-05, 0, 0.0629723, 0.929795, 7.92368e-05, 0, 0.0762025, 0.91965, 8.75075e-05, 0, 0.090753, 0.907737, 9.50903e-05, 0, 0.106626, 0.893899, 9.72963e-05, 0, 0.123822, 0.880239, 0.00010459, 0, 0.142337, 0.866562, 0.000107689, 0, 0.16217, 0.85164, 0.000113081, 0, 0.183314, 0.835021, 0.000116636, 0, 0.20576, 0.817311, 0.000120074, 0, 0.229496, 0.798845, 0.000121921, 0, 0.254502, 0.780479, 0.00012475, 0, 0.280753, 0.760694, 0.000125255, 0, 0.308212, 0.740142, 0.000126719, 0, 0.336825, 0.719248, 0.00012636, 0, 0.366517, 0.698209, 0.000126712, 0, 0.397167, 0.676398, 0.000125769, 0, 0.428578, 0.654378, 0.000124432, 0, 0.460318, 0.632484, 0.000123272, 0, 0.492064, 0.610113, 0.00012085, 0, 0.52381, 0.587931, 0.000118411, 0, 0.555556, 0.565872, 0.00011569, 0, 0.587302, 0.543814, 0.000112521, 0, 0.619048, 0.522265, 0.000109737, 0, 0.650794, 0.500835, 0.000106228, 0, 0.68254, 0.479818, 0.000102591, 0, 0.714286, 0.459258, 9.91288e-05, 0, 0.746032, 0.439061, 9.52325e-05, 0, 0.777778, 0.419552, 9.1895e-05, 0, 0.809524, 0.400399, 8.79051e-05, 0, 0.84127, 0.381976, 8.44775e-05, 0, 0.873016, 0.364009, 8.06316e-05, 0, 0.904762, 0.346761, 7.71848e-05, 0, 0.936508, 0.330049, 7.35429e-05, 0, 0.968254, 0.314018, 7.02103e-05, 0, 1, 1, 1.39968e-07, 0, 0, 1, 1.39979e-07, 0, 0, 1, 1.40145e-07, 0, 0, 1, 1.4087e-07, 0, 0, 0.999999, 1.42865e-07, 0, 0, 0.999998, 1.47279e-07, 0, 0, 0.999997, 1.56057e-07, 0, 0, 0.999992, 1.7276e-07, 0, 0, 0.999989, 2.04352e-07, 0, 0, 0.99998, 2.6494e-07, 0, 0, 0.999969, 3.83435e-07, 0, 0, 0.999953, 6.18641e-07, 0, 0, 0.999929, 1.08755e-06, 0, 0, 0.999898, 2.01497e-06, 0, 0, 0.999849, 3.81346e-06, 0, 0, 0.999778, 7.19815e-06, 0, 0, 0.999661, 1.33215e-05, 0, 0, 0.999451, 2.38313e-05, 0, 0, 0.998936, 4.01343e-05, 0, 0.000113724, 0.99662, 5.17346e-05, 0, 0.000820171, 0.991094, 3.04323e-05, 0, 0.00238143, 0.987487, 2.81757e-05, 0, 0.00493527, 0.983731, 3.20048e-05, 0, 0.00856859, 0.979647, 4.23905e-05, 0, 0.0133393, 0.973837, 5.62935e-05, 0, 0.0192863, 0.96584, 6.77442e-05, 0, 0.0264369, 0.956309, 6.23073e-05, 0, 0.03481, 0.951523, 7.04131e-05, 0, 0.0444184, 0.946003, 8.36594e-05, 0, 0.0552713, 0.938454, 9.11736e-05, 0, 0.0673749, 0.929279, 9.38264e-05, 0, 0.0807329, 0.919239, 0.000103754, 0, 0.0953479, 0.907293, 0.000109928, 0, 0.111221, 0.893936, 0.000115257, 0, 0.128352, 0.879674, 0.000122265, 0, 0.14674, 0.865668, 0.000125733, 0, 0.166382, 0.850998, 0.000132305, 0, 0.187276, 0.834498, 0.000134844, 0, 0.209413, 0.816903, 0.000139276, 0, 0.232786, 0.798235, 0.000140984, 0, 0.257382, 0.779724, 0.00014378, 0, 0.283181, 0.760251, 0.000144623, 0, 0.310156, 0.739808, 0.000145228, 0, 0.338269, 0.718762, 0.00014539, 0, 0.367461, 0.697815, 0.000144432, 0, 0.397646, 0.67631, 0.000143893, 0, 0.428685, 0.654278, 0.000141846, 0, 0.460318, 0.632347, 0.00013935, 0, 0.492064, 0.610296, 0.000137138, 0, 0.52381, 0.588039, 0.000133806, 0, 0.555556, 0.566218, 0.000130755, 0, 0.587302, 0.544346, 0.000127128, 0, 0.619048, 0.522701, 0.000123002, 0, 0.650794, 0.501542, 0.000119443, 0, 0.68254, 0.480508, 0.000115055, 0, 0.714286, 0.460092, 0.000111032, 0, 0.746032, 0.440021, 0.000106635, 0, 0.777778, 0.420446, 0.000102162, 0, 0.809524, 0.401512, 9.8184e-05, 0, 0.84127, 0.38299, 9.36497e-05, 0, 0.873016, 0.365232, 8.9813e-05, 0, 0.904762, 0.347865, 8.53073e-05, 0, 0.936508, 0.331342, 8.17068e-05, 0, 0.968254, 0.315202, 7.73818e-05, 0, 1, 1, 2.9368e-07, 0, 0, 1, 2.937e-07, 0, 0, 1, 2.93998e-07, 0, 0, 1, 2.95298e-07, 0, 0, 0.999999, 2.98865e-07, 0, 0, 0.999998, 3.067e-07, 0, 0, 0.999995, 3.22082e-07, 0, 0, 0.999992, 3.50767e-07, 0, 0, 0.999986, 4.03538e-07, 0, 0, 0.999976, 5.01372e-07, 0, 0, 0.999964, 6.8562e-07, 0, 0, 0.999945, 1.0374e-06, 0, 0, 0.999919, 1.71269e-06, 0, 0, 0.999882, 3.00175e-06, 0, 0, 0.999829, 5.42144e-06, 0, 0, 0.999749, 9.84182e-06, 0, 0, 0.99962, 1.76213e-05, 0, 0, 0.999382, 3.05995e-05, 0, 1.38418e-05, 0.998751, 4.96686e-05, 0, 0.000389844, 0.995344, 5.10733e-05, 0, 0.00150343, 0.990768, 3.45829e-05, 0, 0.00352451, 0.987464, 3.42841e-05, 0, 0.00655379, 0.983846, 3.99072e-05, 0, 0.0106554, 0.980007, 5.33219e-05, 0, 0.0158723, 0.974494, 6.96992e-05, 0, 0.0222333, 0.96622, 7.76754e-05, 0, 0.029758, 0.956273, 7.47718e-05, 0, 0.0384596, 0.950952, 8.64611e-05, 0, 0.0483473, 0.945215, 0.000100464, 0, 0.0594266, 0.937287, 0.000103729, 0, 0.0717019, 0.928649, 0.000111665, 0, 0.0851752, 0.918791, 0.00012353, 0, 0.0998479, 0.906685, 0.000127115, 0, 0.115721, 0.893706, 0.00013628, 0, 0.132794, 0.879248, 0.000142427, 0, 0.151067, 0.864685, 0.000148091, 0, 0.170538, 0.850032, 0.000153517, 0, 0.191204, 0.833853, 0.000157322, 0, 0.213063, 0.816353, 0.000161086, 0, 0.236107, 0.797834, 0.000164111, 0, 0.260329, 0.778831, 0.000165446, 0, 0.285714, 0.759756, 0.000167492, 0, 0.312243, 0.739419, 0.000166928, 0, 0.339887, 0.718491, 0.000167, 0, 0.368604, 0.697392, 0.000165674, 0, 0.398329, 0.676102, 0.000163815, 0, 0.428961, 0.654243, 0.000162003, 0, 0.460331, 0.632176, 0.000158831, 0, 0.492064, 0.610407, 0.000155463, 0, 0.52381, 0.588394, 0.000152062, 0, 0.555556, 0.56645, 0.000147665, 0, 0.587302, 0.5449, 0.00014375, 0, 0.619048, 0.523276, 0.000138905, 0, 0.650794, 0.502179, 0.000134189, 0, 0.68254, 0.481359, 0.000129392, 0, 0.714286, 0.46092, 0.000124556, 0, 0.746032, 0.441084, 0.00011957, 0, 0.777778, 0.421517, 0.000114652, 0, 0.809524, 0.402721, 0.000109688, 0, 0.84127, 0.384222, 0.000104667, 0, 0.873016, 0.366534, 9.99633e-05, 0, 0.904762, 0.349205, 9.50177e-05, 0, 0.936508, 0.332702, 9.07301e-05, 0, 0.968254, 0.316599, 8.59769e-05, 0, 1, 1, 5.85473e-07, 0, 0, 1, 5.85507e-07, 0, 0, 1, 5.8602e-07, 0, 0, 0.999999, 5.88259e-07, 0, 0, 0.999999, 5.94381e-07, 0, 0, 0.999998, 6.07754e-07, 0, 0, 0.999995, 6.33729e-07, 0, 0, 0.99999, 6.8137e-07, 0, 0, 0.999984, 7.67003e-07, 0, 0, 0.999973, 9.21212e-07, 0, 0, 0.999959, 1.20218e-06, 0, 0, 0.999936, 1.72024e-06, 0, 0, 0.999907, 2.68088e-06, 0, 0, 0.999866, 4.45512e-06, 0, 0, 0.999806, 7.68481e-06, 0, 0, 0.999716, 1.342e-05, 0, 0, 0.999576, 2.32473e-05, 0, 0, 0.9993, 3.91694e-05, 0, 0.000129917, 0.998498, 6.08429e-05, 0, 0.000845035, 0.994132, 4.89743e-05, 0, 0.00237616, 0.99031, 3.84644e-05, 0, 0.00484456, 0.987409, 4.21768e-05, 0, 0.00832472, 0.983981, 5.04854e-05, 0, 0.0128643, 0.980268, 6.71028e-05, 0, 0.0184947, 0.974875, 8.52749e-05, 0, 0.025237, 0.966063, 8.5531e-05, 0, 0.0331046, 0.956779, 9.00588e-05, 0, 0.0421067, 0.950259, 0.00010577, 0, 0.0522487, 0.944239, 0.000119458, 0, 0.0635343, 0.936341, 0.000122164, 0, 0.0759654, 0.928047, 0.000134929, 0, 0.0895434, 0.918065, 0.000145544, 0, 0.104269, 0.906267, 0.000150531, 0, 0.120142, 0.893419, 0.000161652, 0, 0.137163, 0.878758, 0.00016593, 0, 0.15533, 0.863699, 0.000174014, 0, 0.174645, 0.848876, 0.000177877, 0, 0.195106, 0.833032, 0.000184049, 0, 0.21671, 0.815557, 0.000186088, 0, 0.239454, 0.797323, 0.00019054, 0, 0.263332, 0.778124, 0.000191765, 0, 0.288336, 0.758929, 0.000192535, 0, 0.314451, 0.738979, 0.000192688, 0, 0.341658, 0.718213, 0.000191522, 0, 0.369924, 0.696947, 0.000190491, 0, 0.399202, 0.675807, 0.000187913, 0, 0.429416, 0.654147, 0.000184451, 0, 0.460447, 0.63229, 0.000181442, 0, 0.492064, 0.610499, 0.000177139, 0, 0.523809, 0.588747, 0.000172596, 0, 0.555555, 0.566783, 0.000167457, 0, 0.587301, 0.545359, 0.000162518, 0, 0.619048, 0.523984, 0.000156818, 0, 0.650794, 0.502917, 0.000151884, 0, 0.68254, 0.482294, 0.000145514, 0, 0.714286, 0.461945, 0.000140199, 0, 0.746032, 0.442133, 0.000134101, 0, 0.777778, 0.422705, 0.000128374, 0, 0.809524, 0.403916, 0.000122996, 0, 0.84127, 0.38554, 0.000116808, 0, 0.873016, 0.367909, 0.000111973, 0, 0.904762, 0.350651, 0.000105938, 0, 0.936508, 0.334208, 0.000101355, 0, 0.968254, 0.318123, 9.57629e-05, 0, 1, 1, 1.11633e-06, 0, 0, 1, 1.11639e-06, 0, 0, 1, 1.11725e-06, 0, 0, 1, 1.12096e-06, 0, 0, 0.999999, 1.1311e-06, 0, 0, 0.999997, 1.15315e-06, 0, 0, 0.999995, 1.1956e-06, 0, 0, 0.999989, 1.27239e-06, 0, 0, 0.999981, 1.40772e-06, 0, 0, 0.999969, 1.64541e-06, 0, 0, 0.999952, 2.06607e-06, 0, 0, 0.999928, 2.81783e-06, 0, 0, 0.999895, 4.16835e-06, 0, 0, 0.999848, 6.58728e-06, 0, 0, 0.999781, 1.08648e-05, 0, 0, 0.999682, 1.82579e-05, 0, 0, 0.999523, 3.06003e-05, 0, 1.59122e-05, 0.999205, 4.99862e-05, 0, 0.000391184, 0.998131, 7.3306e-05, 0, 0.00147534, 0.993334, 5.13229e-05, 0, 0.0034227, 0.99016, 4.67783e-05, 0, 0.00632232, 0.987321, 5.23413e-05, 0, 0.0102295, 0.984099, 6.4267e-05, 0, 0.0151794, 0.980432, 8.43042e-05, 0, 0.0211947, 0.974976, 0.000102819, 0, 0.0282899, 0.966429, 9.96234e-05, 0, 0.0364739, 0.957633, 0.000111074, 0, 0.0457522, 0.949422, 0.000128644, 0, 0.0561278, 0.943045, 0.000140076, 0, 0.0676023, 0.935448, 0.000146349, 0, 0.0801762, 0.927225, 0.000161854, 0, 0.0938499, 0.917033, 0.000169135, 0, 0.108623, 0.905762, 0.000179987, 0, 0.124496, 0.892879, 0.000189832, 0, 0.141469, 0.878435, 0.000195881, 0, 0.159541, 0.863114, 0.00020466, 0, 0.178713, 0.84776, 0.000209473, 0, 0.198985, 0.832084, 0.000214861, 0, 0.220355, 0.814915, 0.000217695, 0, 0.242823, 0.796711, 0.000220313, 0, 0.266385, 0.777603, 0.00022313, 0, 0.291036, 0.757991, 0.000222471, 0, 0.316767, 0.738371, 0.000222869, 0, 0.343563, 0.717872, 0.000221243, 0, 0.371402, 0.696619, 0.000218089, 0, 0.400248, 0.675379, 0.00021562, 0, 0.430047, 0.65411, 0.00021169, 0, 0.460709, 0.63241, 0.000206947, 0, 0.492079, 0.61046, 0.000201709, 0, 0.52381, 0.58903, 0.000196753, 0, 0.555556, 0.567267, 0.000189637, 0, 0.587302, 0.545886, 0.000184735, 0, 0.619048, 0.524714, 0.000177257, 0, 0.650794, 0.503789, 0.000171424, 0, 0.68254, 0.483204, 0.000164688, 0, 0.714286, 0.462976, 0.000157172, 0, 0.746032, 0.443294, 0.000151341, 0, 0.777778, 0.423988, 0.000143737, 0, 0.809524, 0.405325, 0.000138098, 0, 0.84127, 0.386981, 0.000130698, 0, 0.873016, 0.369436, 0.000125276, 0, 0.904762, 0.35219, 0.000118349, 0, 0.936508, 0.335804, 0.00011312, 0, 0.968254, 0.319749, 0.000106687, 0, 1, 1, 2.04685e-06, 0, 0, 1, 2.04694e-06, 0, 0, 1, 2.04831e-06, 0, 0, 0.999999, 2.05428e-06, 0, 0, 0.999999, 2.07056e-06, 0, 0, 0.999997, 2.10581e-06, 0, 0, 0.999993, 2.1732e-06, 0, 0, 0.999987, 2.29365e-06, 0, 0, 0.999979, 2.50243e-06, 0, 0, 0.999965, 2.86127e-06, 0, 0, 0.999947, 3.48028e-06, 0, 0, 0.999918, 4.55588e-06, 0, 0, 0.999881, 6.43303e-06, 0, 0, 0.999828, 9.70064e-06, 0, 0, 0.999753, 1.53233e-05, 0, 0, 0.999642, 2.4793e-05, 0, 0, 0.999464, 4.02032e-05, 0, 0.000122947, 0.999089, 6.35852e-05, 0, 0.000807414, 0.997567, 8.57026e-05, 0, 0.00227206, 0.992903, 5.94912e-05, 0, 0.00462812, 0.990011, 5.78515e-05, 0, 0.00794162, 0.987192, 6.5399e-05, 0, 0.0122534, 0.98418, 8.19675e-05, 0, 0.0175888, 0.980491, 0.000105514, 0, 0.0239635, 0.974779, 0.000121532, 0, 0.031387, 0.96675, 0.000119144, 0, 0.0398644, 0.958248, 0.000136125, 0, 0.0493982, 0.948884, 0.000155408, 0, 0.0599896, 0.941673, 0.000162281, 0, 0.0716382, 0.934521, 0.000176754, 0, 0.0843437, 0.926205, 0.000192873, 0, 0.0981056, 0.916089, 0.000200038, 0, 0.112923, 0.904963, 0.000213624, 0, 0.128796, 0.892089, 0.000221834, 0, 0.145725, 0.878028, 0.000232619, 0, 0.163709, 0.86249, 0.000238632, 0, 0.182749, 0.846587, 0.000247002, 0, 0.202847, 0.830988, 0.000250702, 0, 0.224001, 0.814165, 0.000255562, 0, 0.246214, 0.796135, 0.000257505, 0, 0.269482, 0.777052, 0.000258625, 0, 0.293805, 0.757201, 0.000258398, 0, 0.319176, 0.737655, 0.000256714, 0, 0.345587, 0.717477, 0.000255187, 0, 0.373021, 0.696433, 0.000251792, 0, 0.401454, 0.675084, 0.000247223, 0, 0.430844, 0.653907, 0.000242213, 0, 0.461125, 0.632561, 0.000237397, 0, 0.492187, 0.610658, 0.000229313, 0, 0.52381, 0.589322, 0.000224402, 0, 0.555556, 0.567857, 0.000216116, 0, 0.587302, 0.54652, 0.000209124, 0, 0.619048, 0.525433, 0.000201601, 0, 0.650794, 0.504679, 0.000192957, 0, 0.68254, 0.484203, 0.000186052, 0, 0.714286, 0.464203, 0.000177672, 0, 0.746032, 0.444549, 0.000170005, 0, 0.777778, 0.425346, 0.000162401, 0, 0.809524, 0.406706, 0.0001544, 0, 0.84127, 0.388576, 0.000147437, 0, 0.873016, 0.37094, 0.000139493, 0, 0.904762, 0.353996, 0.000133219, 0, 0.936508, 0.337391, 0.000125573, 0, 0.968254, 0.321648, 0.000119867, 0, 1, 1, 3.62511e-06, 0, 0, 1, 3.62525e-06, 0, 0, 1, 3.62739e-06, 0, 0, 0.999999, 3.63673e-06, 0, 0, 0.999998, 3.66214e-06, 0, 0, 0.999996, 3.71698e-06, 0, 0, 0.999992, 3.82116e-06, 0, 0, 0.999986, 4.00554e-06, 0, 0, 0.999976, 4.32058e-06, 0, 0, 0.999961, 4.85194e-06, 0, 0, 0.999938, 5.74808e-06, 0, 0, 0.999908, 7.26643e-06, 0, 0, 0.999865, 9.84707e-06, 0, 0, 0.999807, 1.42217e-05, 0, 0, 0.999723, 2.15581e-05, 0, 0, 0.999602, 3.36114e-05, 0, 1.19113e-05, 0.999398, 5.27353e-05, 0, 0.000355813, 0.998946, 8.05809e-05, 0, 0.00137768, 0.996647, 9.42908e-05, 0, 0.00322469, 0.992298, 6.68733e-05, 0, 0.00597897, 0.989802, 7.16564e-05, 0, 0.00968903, 0.987019, 8.21355e-05, 0, 0.0143845, 0.984219, 0.000104555, 0, 0.0200831, 0.980425, 0.000131245, 0, 0.0267948, 0.974241, 0.000139613, 0, 0.034525, 0.967006, 0.000145931, 0, 0.0432757, 0.95893, 0.000167153, 0, 0.0530471, 0.949157, 0.000188146, 0, 0.0638386, 0.94062, 0.000194625, 0, 0.0756487, 0.933509, 0.000213721, 0, 0.0884762, 0.925088, 0.000229616, 0, 0.10232, 0.915178, 0.000239638, 0, 0.117178, 0.904093, 0.000254814, 0, 0.133051, 0.891337, 0.000263685, 0, 0.149939, 0.877326, 0.000274789, 0, 0.167841, 0.861794, 0.000280534, 0, 0.18676, 0.845758, 0.000289534, 0, 0.206696, 0.829792, 0.000294446, 0, 0.22765, 0.813037, 0.000296877, 0, 0.249625, 0.795285, 0.000300217, 0, 0.27262, 0.776323, 0.000299826, 0, 0.296636, 0.756673, 0.000299787, 0, 0.321671, 0.736856, 0.000297867, 0, 0.347718, 0.716883, 0.000294052, 0, 0.374768, 0.696089, 0.000289462, 0, 0.402804, 0.67505, 0.000285212, 0, 0.431796, 0.653509, 0.00027653, 0, 0.461695, 0.63258, 0.000271759, 0, 0.49242, 0.61104, 0.000262811, 0, 0.523822, 0.589567, 0.000255151, 0, 0.555556, 0.568322, 0.000246434, 0, 0.587302, 0.547235, 0.000237061, 0, 0.619048, 0.52616, 0.000228343, 0, 0.650794, 0.505716, 0.000219236, 0, 0.68254, 0.485274, 0.000209595, 0, 0.714286, 0.465411, 0.000201011, 0, 0.746032, 0.445854, 0.00019109, 0, 0.777778, 0.426911, 0.000182897, 0, 0.809524, 0.408222, 0.000173569, 0, 0.84127, 0.390307, 0.000165496, 0, 0.873016, 0.372624, 0.000156799, 0, 0.904762, 0.355804, 0.00014917, 0, 0.936508, 0.33924, 0.000140907, 0, 0.968254, 0.323534, 0.000134062, 0, 1, 1, 6.22487e-06, 0, 0, 1, 6.2251e-06, 0, 0, 1, 6.22837e-06, 0, 0, 0.999999, 6.24259e-06, 0, 0, 0.999998, 6.28127e-06, 0, 0, 0.999996, 6.36451e-06, 0, 0, 0.999991, 6.5218e-06, 0, 0, 0.999984, 6.79782e-06, 0, 0, 0.999973, 7.26361e-06, 0, 0, 0.999955, 8.03644e-06, 0, 0, 0.999931, 9.31397e-06, 0, 0, 0.999896, 1.14299e-05, 0, 0, 0.999847, 1.49402e-05, 0, 0, 0.999784, 2.07461e-05, 0, 0, 0.999692, 3.02493e-05, 0, 0, 0.999554, 4.54957e-05, 0, 9.97275e-05, 0.999326, 6.90762e-05, 0, 0.000724813, 0.998757, 0.000101605, 0, 0.0020972, 0.995367, 9.58745e-05, 0, 0.00432324, 0.99209, 8.32808e-05, 0, 0.00746347, 0.989517, 8.87601e-05, 0, 0.0115534, 0.987008, 0.00010564, 0, 0.0166134, 0.98421, 0.000133179, 0, 0.0226552, 0.98021, 0.000161746, 0, 0.0296838, 0.973676, 0.000161821, 0, 0.0377016, 0.967052, 0.000178635, 0, 0.0467079, 0.959385, 0.000206765, 0, 0.0567013, 0.949461, 0.00022476, 0, 0.0676796, 0.939578, 0.00023574, 0, 0.0796403, 0.932416, 0.00025893, 0, 0.0925812, 0.923759, 0.000271228, 0, 0.106501, 0.914223, 0.000289165, 0, 0.121397, 0.902942, 0.000301156, 0, 0.13727, 0.890419, 0.000313852, 0, 0.15412, 0.876639, 0.000324408, 0, 0.171946, 0.861316, 0.00033249, 0, 0.190751, 0.84496, 0.000338497, 0, 0.210537, 0.828427, 0.000345861, 0, 0.231305, 0.811871, 0.000347863, 0, 0.253057, 0.794397, 0.000350225, 0, 0.275797, 0.775726, 0.000349915, 0, 0.299525, 0.75617, 0.000347297, 0, 0.324242, 0.736091, 0.000344232, 0, 0.349947, 0.716213, 0.000340835, 0, 0.376633, 0.695736, 0.000332369, 0, 0.404289, 0.674961, 0.000327943, 0, 0.432895, 0.653518, 0.000318533, 0, 0.462415, 0.632574, 0.000310391, 0, 0.492788, 0.61134, 0.000300755, 0, 0.523909, 0.590017, 0.000290506, 0, 0.555556, 0.568752, 0.000280446, 0, 0.587302, 0.548061, 0.000269902, 0, 0.619048, 0.52711, 0.000258815, 0, 0.650794, 0.506682, 0.000248481, 0, 0.68254, 0.486524, 0.000237141, 0, 0.714286, 0.466812, 0.000226872, 0, 0.746032, 0.44732, 0.000216037, 0, 0.777778, 0.428473, 0.000205629, 0, 0.809524, 0.409921, 0.000195691, 0, 0.84127, 0.392028, 0.000185457, 0, 0.873016, 0.374606, 0.000176436, 0, 0.904762, 0.357601, 0.000166508, 0, 0.936508, 0.341348, 0.000158385, 0, 0.968254, 0.32542, 0.000149203, 0, 1, 1, 1.03967e-05, 0, 0, 1, 1.0397e-05, 0, 0, 1, 1.04019e-05, 0, 0, 0.999999, 1.04231e-05, 0, 0, 0.999998, 1.04806e-05, 0, 0, 0.999995, 1.06042e-05, 0, 0, 0.999991, 1.08366e-05, 0, 0, 0.999982, 1.12415e-05, 0, 0, 0.999968, 1.19174e-05, 0, 0, 0.99995, 1.30227e-05, 0, 0, 0.999922, 1.48176e-05, 0, 0, 0.999884, 1.77303e-05, 0, 0, 0.99983, 2.24564e-05, 0, 0, 0.999758, 3.00966e-05, 0, 0, 0.999654, 4.23193e-05, 0, 5.49083e-06, 0.999503, 6.14848e-05, 0, 0.000296087, 0.999237, 9.03576e-05, 0, 0.00123144, 0.998491, 0.0001271, 0, 0.00295954, 0.994594, 0.000107754, 0, 0.00555829, 0.99178, 0.000103025, 0, 0.00907209, 0.989265, 0.00011154, 0, 0.0135257, 0.986998, 0.000136296, 0, 0.0189327, 0.984137, 0.000169154, 0, 0.0252993, 0.979798, 0.000196671, 0, 0.0326272, 0.97337, 0.000196678, 0, 0.0409157, 0.967239, 0.000223121, 0, 0.0501623, 0.959543, 0.000253809, 0, 0.0603638, 0.949466, 0.000265972, 0, 0.0715171, 0.939074, 0.000288372, 0, 0.0836187, 0.931118, 0.000310983, 0, 0.0966657, 0.922525, 0.000325561, 0, 0.110656, 0.912983, 0.000345725, 0, 0.125588, 0.901617, 0.0003556, 0, 0.141461, 0.889487, 0.000374012, 0, 0.158275, 0.875787, 0.000383445, 0, 0.176031, 0.860654, 0.000393972, 0, 0.19473, 0.844417, 0.000400311, 0, 0.214374, 0.82741, 0.000405004, 0, 0.234967, 0.810545, 0.000407378, 0, 0.256512, 0.793312, 0.000407351, 0, 0.279011, 0.774847, 0.000406563, 0, 0.302468, 0.755621, 0.000404903, 0, 0.326887, 0.735511, 0.000397486, 0, 0.352266, 0.715435, 0.00039357, 0, 0.378605, 0.695403, 0.000384739, 0, 0.405897, 0.674681, 0.000376108, 0, 0.43413, 0.65359, 0.000365997, 0, 0.463277, 0.632471, 0.000354957, 0, 0.493295, 0.61151, 0.000343593, 0, 0.524106, 0.59064, 0.000331841, 0, 0.555561, 0.569386, 0.000318891, 0, 0.587302, 0.548785, 0.0003072, 0, 0.619048, 0.528146, 0.00029361, 0, 0.650794, 0.507872, 0.000281709, 0, 0.68254, 0.487805, 0.000268627, 0, 0.714286, 0.468196, 0.000255887, 0, 0.746032, 0.448922, 0.000243997, 0, 0.777778, 0.430093, 0.000231662, 0, 0.809524, 0.411845, 0.000220339, 0, 0.84127, 0.393808, 0.000208694, 0, 0.873016, 0.376615, 0.000198045, 0, 0.904762, 0.359655, 0.000187375, 0, 0.936508, 0.343452, 0.000177371, 0, 0.968254, 0.32765, 0.000167525, 0, 1, 1, 1.69351e-05, 0, 0, 1, 1.69356e-05, 0, 0, 1, 1.69427e-05, 0, 0, 0.999999, 1.69736e-05, 0, 0, 0.999998, 1.70575e-05, 0, 0, 0.999995, 1.72372e-05, 0, 0, 0.99999, 1.75739e-05, 0, 0, 0.999979, 1.81568e-05, 0, 0, 0.999966, 1.91206e-05, 0, 0, 0.999944, 2.0677e-05, 0, 0, 0.999912, 2.31644e-05, 0, 0, 0.999869, 2.71268e-05, 0, 0, 0.999811, 3.34272e-05, 0, 0, 0.99973, 4.33979e-05, 0, 0, 0.999617, 5.90083e-05, 0, 6.80315e-05, 0.999445, 8.29497e-05, 0, 0.000612796, 0.999138, 0.000118019, 0, 0.00187408, 0.998095, 0.000156712, 0, 0.00395791, 0.993919, 0.000125054, 0, 0.00692144, 0.991333, 0.000126091, 0, 0.0107962, 0.989226, 0.000144912, 0, 0.0155986, 0.986954, 0.000175737, 0, 0.0213364, 0.983982, 0.000213883, 0, 0.0280114, 0.979128, 0.000234526, 0, 0.0356226, 0.973327, 0.000243725, 0, 0.0441668, 0.967416, 0.0002773, 0, 0.0536399, 0.959729, 0.000308799, 0, 0.0640376, 0.949758, 0.000322447, 0, 0.0753554, 0.939173, 0.000350021, 0, 0.0875893, 0.9296, 0.000370089, 0, 0.100736, 0.921181, 0.000391365, 0, 0.114793, 0.91164, 0.000413636, 0, 0.129759, 0.900435, 0.000427068, 0, 0.145632, 0.888183, 0.000441046, 0, 0.162412, 0.874772, 0.000454968, 0, 0.180101, 0.859566, 0.000461882, 0, 0.1987, 0.843579, 0.000471556, 0, 0.218213, 0.826453, 0.000474335, 0, 0.238641, 0.809164, 0.000477078, 0, 0.259989, 0.792179, 0.00047755, 0, 0.282262, 0.773866, 0.000472573, 0, 0.305464, 0.754944, 0.000469765, 0, 0.329599, 0.735133, 0.000462371, 0, 0.35467, 0.714858, 0.000453674, 0, 0.380678, 0.694829, 0.000443888, 0, 0.407622, 0.674453, 0.000432052, 0, 0.435493, 0.653685, 0.000420315, 0, 0.464275, 0.632666, 0.000406829, 0, 0.493938, 0.611676, 0.000392234, 0, 0.524422, 0.591193, 0.000379208, 0, 0.555624, 0.570145, 0.00036319, 0, 0.587302, 0.549566, 0.000349111, 0, 0.619048, 0.529278, 0.000334166, 0, 0.650794, 0.509026, 0.000318456, 0, 0.68254, 0.489186, 0.00030449, 0, 0.714286, 0.469662, 0.000289051, 0, 0.746032, 0.450691, 0.000275494, 0, 0.777778, 0.431841, 0.000261437, 0, 0.809524, 0.413752, 0.000247846, 0, 0.84127, 0.395951, 0.000235085, 0, 0.873016, 0.378633, 0.000222245, 0, 0.904762, 0.36194, 0.000210533, 0, 0.936508, 0.345599, 0.000198494, 0, 0.968254, 0.329999, 0.000188133, 0, 1, 1, 2.69663e-05, 0, 0, 1, 2.6967e-05, 0, 0, 1, 2.69772e-05, 0, 0, 0.999999, 2.70214e-05, 0, 0, 0.999998, 2.71415e-05, 0, 0, 0.999994, 2.7398e-05, 0, 0, 0.999988, 2.78771e-05, 0, 0, 0.999977, 2.87019e-05, 0, 0, 0.999961, 3.00544e-05, 0, 0, 0.999937, 3.22138e-05, 0, 0, 0.999904, 3.56163e-05, 0, 0, 0.999854, 4.09465e-05, 0, 0, 0.99979, 4.92651e-05, 0, 0, 0.999699, 6.21722e-05, 0, 8.8288e-07, 0.999572, 8.19715e-05, 0, 0.000223369, 0.999381, 0.000111689, 0, 0.00105414, 0.999016, 0.000153862, 0, 0.0026493, 0.997437, 0.000187667, 0, 0.00508608, 0.993545, 0.000155672, 0, 0.00840554, 0.991135, 0.000161455, 0, 0.012629, 0.989157, 0.000188241, 0, 0.0177661, 0.986874, 0.000226229, 0, 0.0238198, 0.983714, 0.000268668, 0, 0.0307887, 0.978301, 0.000277109, 0, 0.0386688, 0.973227, 0.000303446, 0, 0.0474554, 0.967317, 0.000341851, 0, 0.0571428, 0.959477, 0.000370885, 0, 0.0677256, 0.950012, 0.000392753, 0, 0.0791988, 0.939484, 0.00042781, 0, 0.0915576, 0.928135, 0.000443866, 0, 0.104798, 0.919819, 0.000472959, 0, 0.118918, 0.910049, 0.000491551, 0, 0.133915, 0.899181, 0.000512616, 0, 0.149788, 0.886881, 0.000523563, 0, 0.166537, 0.87359, 0.000540183, 0, 0.184164, 0.858613, 0.000547386, 0, 0.202669, 0.842809, 0.000554809, 0, 0.222056, 0.825727, 0.000558316, 0, 0.242329, 0.808086, 0.000557824, 0, 0.263492, 0.790728, 0.000556346, 0, 0.285551, 0.772987, 0.000552672, 0, 0.30851, 0.7541, 0.000543738, 0, 0.332376, 0.734669, 0.000536107, 0, 0.357153, 0.714411, 0.000523342, 0, 0.382845, 0.694196, 0.000512238, 0, 0.409454, 0.674252, 0.000497465, 0, 0.436977, 0.65357, 0.000481096, 0, 0.465404, 0.632999, 0.000467054, 0, 0.494713, 0.611994, 0.000448771, 0, 0.524864, 0.591604, 0.000431889, 0, 0.555779, 0.571134, 0.000415238, 0, 0.587302, 0.550528, 0.000396369, 0, 0.619048, 0.530292, 0.000379477, 0, 0.650794, 0.510364, 0.000361488, 0, 0.68254, 0.490749, 0.000343787, 0, 0.714286, 0.471266, 0.000327822, 0, 0.746032, 0.452462, 0.000310626, 0, 0.777778, 0.433907, 0.000295352, 0, 0.809524, 0.415659, 0.000279179, 0, 0.84127, 0.398138, 0.000264685, 0, 0.873016, 0.380833, 0.000249905, 0, 0.904762, 0.364247, 0.000236282, 0, 0.936508, 0.348041, 0.000222905, 0, 0.968254, 0.332389, 0.000210522, 0, 1, 1, 4.20604e-05, 0, 0, 1, 4.20614e-05, 0, 0, 1, 4.20757e-05, 0, 0, 0.999999, 4.2138e-05, 0, 0, 0.999997, 4.23067e-05, 0, 0, 0.999993, 4.26668e-05, 0, 0, 0.999986, 4.33372e-05, 0, 0, 0.999974, 4.44857e-05, 0, 0, 0.999956, 4.63554e-05, 0, 0, 0.99993, 4.93105e-05, 0, 0, 0.999892, 5.39077e-05, 0, 0, 0.999838, 6.10005e-05, 0, 0, 0.999767, 7.18822e-05, 0, 0, 0.999666, 8.84581e-05, 0, 3.65471e-05, 0.999525, 0.000113398, 0, 0.000485623, 0.999311, 0.000150043, 0, 0.00162096, 0.998865, 0.000200063, 0, 0.00355319, 0.996278, 0.000211014, 0, 0.00633818, 0.992956, 0.000189672, 0, 0.0100043, 0.991017, 0.000210262, 0, 0.0145648, 0.989055, 0.000244292, 0, 0.0200237, 0.986741, 0.000290481, 0, 0.0263798, 0.983288, 0.000334303, 0, 0.033629, 0.977784, 0.000340307, 0, 0.0417652, 0.973037, 0.000377864, 0, 0.0507821, 0.967181, 0.0004239, 0, 0.060673, 0.958971, 0.000443854, 0, 0.0714314, 0.950093, 0.000483039, 0, 0.0830518, 0.939552, 0.000517934, 0, 0.0955288, 0.927678, 0.000539449, 0, 0.108859, 0.918278, 0.000568604, 0, 0.123038, 0.908449, 0.000588505, 0, 0.138065, 0.897713, 0.000612473, 0, 0.153938, 0.885533, 0.000625575, 0, 0.170657, 0.872131, 0.00063854, 0, 0.188224, 0.857517, 0.000647034, 0, 0.20664, 0.841796, 0.00065209, 0, 0.225909, 0.824726, 0.0006544, 0, 0.246035, 0.807297, 0.000655744, 0, 0.267022, 0.789058, 0.000646716, 0, 0.288878, 0.77189, 0.000643898, 0, 0.311607, 0.753082, 0.000629973, 0, 0.335216, 0.7341, 0.000621564, 0, 0.359713, 0.714094, 0.000605171, 0, 0.385103, 0.693839, 0.000588752, 0, 0.41139, 0.673891, 0.000573294, 0, 0.438576, 0.653565, 0.000552682, 0, 0.466656, 0.633326, 0.000533446, 0, 0.495617, 0.612582, 0.000514635, 0, 0.525431, 0.59205, 0.00049303, 0, 0.556041, 0.571918, 0.000471842, 0, 0.587338, 0.551572, 0.000451713, 0, 0.619048, 0.531553, 0.000430049, 0, 0.650794, 0.51175, 0.000410445, 0, 0.68254, 0.49238, 0.000390098, 0, 0.714286, 0.473143, 0.000370033, 0, 0.746032, 0.45423, 0.000351205, 0, 0.777778, 0.435963, 0.000332049, 0, 0.809524, 0.41787, 0.000315021, 0, 0.84127, 0.400387, 0.000297315, 0, 0.873016, 0.383332, 0.000281385, 0, 0.904762, 0.366665, 0.000265397, 0, 0.936508, 0.350633, 0.000250601, 0, 0.968254, 0.334964, 0.00023589, 0, 1, 1, 6.43736e-05, 0, 0, 1, 6.4375e-05, 0, 0, 1, 6.43947e-05, 0, 0, 0.999999, 6.4481e-05, 0, 0, 0.999997, 6.47143e-05, 0, 0, 0.999994, 6.52119e-05, 0, 0, 0.999985, 6.61359e-05, 0, 0, 0.999972, 6.77116e-05, 0, 0, 0.999952, 7.02599e-05, 0, 0, 0.999922, 7.42517e-05, 0, 0, 0.99988, 8.03906e-05, 0, 0, 0.99982, 8.97315e-05, 0, 0, 0.999741, 0.000103838, 0, 0, 0.999629, 0.00012496, 0, 0.000149024, 0.999474, 0.000156161, 0, 0.000861027, 0.999229, 0.000201034, 0, 0.00231198, 0.998662, 0.000259069, 0, 0.00458147, 0.995299, 0.000245439, 0, 0.00770895, 0.992732, 0.00024498, 0, 0.0117126, 0.990847, 0.000273211, 0, 0.0165989, 0.988911, 0.000316492, 0, 0.0223674, 0.98654, 0.00037161, 0, 0.0290135, 0.982636, 0.000410352, 0, 0.0365309, 0.977346, 0.000421756, 0, 0.0449117, 0.972909, 0.000475578, 0, 0.0541481, 0.966821, 0.000522482, 0, 0.0642326, 0.958686, 0.000545008, 0, 0.075158, 0.949754, 0.000589286, 0, 0.0869181, 0.939184, 0.000619995, 0, 0.0995074, 0.927505, 0.000654266, 0, 0.112922, 0.916606, 0.000682362, 0, 0.127157, 0.906707, 0.000704286, 0, 0.142212, 0.895937, 0.000725909, 0, 0.158085, 0.883913, 0.000743939, 0, 0.174776, 0.870642, 0.000755157, 0, 0.192287, 0.856241, 0.000764387, 0, 0.210619, 0.84069, 0.000771032, 0, 0.229775, 0.823728, 0.000765906, 0, 0.249761, 0.806481, 0.000767604, 0, 0.270582, 0.787924, 0.000754385, 0, 0.292243, 0.770588, 0.000749668, 0, 0.314753, 0.751991, 0.000731613, 0, 0.338118, 0.733407, 0.000717655, 0, 0.362347, 0.713688, 0.000700604, 0, 0.387447, 0.693595, 0.000678765, 0, 0.413424, 0.673426, 0.000657042, 0, 0.440284, 0.65359, 0.000635892, 0, 0.468027, 0.633576, 0.000611569, 0, 0.496645, 0.613144, 0.000586011, 0, 0.526122, 0.592711, 0.000563111, 0, 0.556417, 0.572722, 0.000537699, 0, 0.587451, 0.552762, 0.000512556, 0, 0.619048, 0.532985, 0.000489757, 0, 0.650794, 0.513219, 0.000464139, 0, 0.68254, 0.493992, 0.000442193, 0, 0.714286, 0.47509, 0.000418629, 0, 0.746032, 0.456287, 0.000397045, 0, 0.777778, 0.438152, 0.000375504, 0, 0.809524, 0.420294, 0.00035492, 0, 0.84127, 0.402749, 0.000335327, 0, 0.873016, 0.385879, 0.000316422, 0, 0.904762, 0.369352, 0.000298333, 0, 0.936508, 0.353301, 0.000281417, 0, 0.968254, 0.337781, 0.000265203, 0, 1, 1, 9.68267e-05, 0, 0, 1, 9.68284e-05, 0, 0, 1, 9.68556e-05, 0, 0, 0.999999, 9.69733e-05, 0, 0, 0.999997, 9.72913e-05, 0, 0, 0.999993, 9.79688e-05, 0, 0, 0.999984, 9.92239e-05, 0, 0, 0.999969, 0.000101356, 0, 0, 0.999946, 0.000104784, 0, 0, 0.999913, 0.000110111, 0, 0, 0.999868, 0.000118217, 0, 0, 0.999801, 0.000130396, 0, 0, 0.999712, 0.000148523, 0, 1.24907e-05, 0.999589, 0.000175233, 0, 0.000355405, 0.999416, 0.000213999, 0, 0.0013528, 0.999136, 0.000268529, 0, 0.00312557, 0.998367, 0.000333088, 0, 0.00573045, 0.994701, 0.000304757, 0, 0.00919397, 0.992497, 0.000318031, 0, 0.0135261, 0.990608, 0.000353863, 0, 0.0187278, 0.988715, 0.000409044, 0, 0.0247947, 0.986241, 0.000472967, 0, 0.0317196, 0.981696, 0.000495104, 0, 0.039494, 0.977097, 0.000532873, 0, 0.0481087, 0.972583, 0.000594447, 0, 0.0575549, 0.966142, 0.000636867, 0, 0.0678242, 0.95823, 0.000669899, 0, 0.0789089, 0.949677, 0.000719499, 0, 0.0908023, 0.939226, 0.000750584, 0, 0.103499, 0.927501, 0.000793183, 0, 0.116993, 0.915199, 0.00081995, 0, 0.131282, 0.90498, 0.000847654, 0, 0.146364, 0.894243, 0.000868929, 0, 0.162237, 0.882154, 0.000884278, 0, 0.178902, 0.869161, 0.000898108, 0, 0.196358, 0.854751, 0.000901254, 0, 0.21461, 0.839368, 0.00090679, 0, 0.23366, 0.822874, 0.000901541, 0, 0.253512, 0.805514, 0.000897297, 0, 0.274174, 0.78716, 0.000881856, 0, 0.29565, 0.769061, 0.000870032, 0, 0.31795, 0.751, 0.000851719, 0, 0.341081, 0.732614, 0.000830671, 0, 0.365053, 0.713171, 0.000806569, 0, 0.389874, 0.693472, 0.00078338, 0, 0.415553, 0.673528, 0.000756404, 0, 0.442098, 0.653397, 0.000726872, 0, 0.469512, 0.633781, 0.000700494, 0, 0.497794, 0.613877, 0.00067105, 0, 0.526935, 0.593506, 0.000640361, 0, 0.556908, 0.573667, 0.000613502, 0, 0.587657, 0.553932, 0.000583177, 0, 0.61906, 0.534345, 0.000554375, 0, 0.650794, 0.515042, 0.000527811, 0, 0.68254, 0.495674, 0.000499367, 0, 0.714286, 0.477132, 0.00047429, 0, 0.746032, 0.458609, 0.000447726, 0, 0.777778, 0.440354, 0.000424205, 0, 0.809524, 0.422765, 0.000399549, 0, 0.84127, 0.405472, 0.000378315, 0, 0.873016, 0.388482, 0.000355327, 0, 0.904762, 0.372191, 0.000336122, 0, 0.936508, 0.356099, 0.000315247, 0, 0.968254, 0.340737, 0.00029794, 0, 1, 1, 0.000143327, 0, 0, 1, 0.00014333, 0, 0, 1, 0.000143366, 0, 0, 0.999999, 0.000143524, 0, 0, 0.999996, 0.000143952, 0, 0, 0.999991, 0.000144862, 0, 0, 0.999981, 0.000146544, 0, 0, 0.999966, 0.000149391, 0, 0, 0.999941, 0.000153946, 0, 0, 0.999905, 0.000160971, 0, 0, 0.999852, 0.000171562, 0, 0, 0.99978, 0.00018729, 0, 0, 0.999681, 0.000210386, 0, 8.26239e-05, 0.999546, 0.000243906, 0, 0.000664807, 0.999352, 0.000291739, 0, 0.00196192, 0.999027, 0.000357419, 0, 0.00405941, 0.997886, 0.000422349, 0, 0.00699664, 0.99419, 0.000385008, 0, 0.0107896, 0.99214, 0.000409775, 0, 0.0154415, 0.990274, 0.000456418, 0, 0.0209488, 0.988455, 0.000527008, 0, 0.0273037, 0.985804, 0.000597685, 0, 0.0344969, 0.98103, 0.000613124, 0, 0.0425183, 0.976674, 0.000668321, 0, 0.0513575, 0.972021, 0.000736985, 0, 0.0610046, 0.965274, 0.000773789, 0, 0.0714508, 0.958046, 0.000830852, 0, 0.0826877, 0.949333, 0.000875766, 0, 0.0947085, 0.939135, 0.000917088, 0, 0.107507, 0.927119, 0.000952244, 0, 0.121078, 0.91469, 0.000990626, 0, 0.135419, 0.903006, 0.00101304, 0, 0.150526, 0.892368, 0.00103834, 0, 0.166399, 0.880231, 0.00105002, 0, 0.183038, 0.867432, 0.00106331, 0, 0.200443, 0.853208, 0.00106783, 0, 0.218618, 0.837956, 0.00106458, 0, 0.237566, 0.821772, 0.00105945, 0, 0.257291, 0.804328, 0.00104685, 0, 0.2778, 0.786465, 0.00103178, 0, 0.2991, 0.768004, 0.00101077, 0, 0.321199, 0.74972, 0.000985504, 0, 0.344106, 0.731682, 0.000962893, 0, 0.36783, 0.712813, 0.000932146, 0, 0.392383, 0.693139, 0.00089871, 0, 0.417774, 0.673566, 0.000869678, 0, 0.444013, 0.653483, 0.000835525, 0, 0.471107, 0.633891, 0.000799853, 0, 0.49906, 0.614433, 0.000766838, 0, 0.527869, 0.594586, 0.000732227, 0, 0.557517, 0.574769, 0.000696442, 0, 0.587966, 0.555149, 0.000663935, 0, 0.61913, 0.535898, 0.000629826, 0, 0.650794, 0.516753, 0.000596486, 0, 0.68254, 0.497816, 0.000567078, 0, 0.714286, 0.479034, 0.000534399, 0, 0.746032, 0.460975, 0.000507013, 0, 0.777778, 0.442935, 0.000477421, 0, 0.809524, 0.425263, 0.000451101, 0, 0.84127, 0.408248, 0.000424964, 0, 0.873016, 0.391339, 0.00039993, 0, 0.904762, 0.37513, 0.000377619, 0, 0.936508, 0.359172, 0.000354418, 0, 0.968254, 0.343876, 0.000334823, 0, 1, 1, 0.000209042, 0, 0, 1, 0.000209045, 0, 0, 1, 0.000209093, 0, 0, 0.999999, 0.000209304, 0, 0, 0.999996, 0.000209871, 0, 0, 0.999991, 0.000211078, 0, 0, 0.999979, 0.000213304, 0, 0, 0.999963, 0.000217061, 0, 0, 0.999933, 0.000223042, 0, 0, 0.999894, 0.000232206, 0, 0, 0.999837, 0.000245901, 0, 0, 0.999756, 0.000266023, 0, 1.02927e-06, 0.999648, 0.000295204, 0, 0.000233468, 0.999499, 0.000336958, 0, 0.00108237, 0.999283, 0.000395563, 0, 0.00268832, 0.998896, 0.000473785, 0, 0.00511138, 0.997006, 0.000520008, 0, 0.00837705, 0.993819, 0.000497261, 0, 0.0124928, 0.991632, 0.000523722, 0, 0.0174561, 0.989875, 0.000587258, 0, 0.0232596, 0.988109, 0.000676329, 0, 0.0298932, 0.985155, 0.000747701, 0, 0.0373453, 0.980479, 0.000768803, 0, 0.0456045, 0.976271, 0.000841054, 0, 0.0546593, 0.971347, 0.000911469, 0, 0.0644994, 0.964528, 0.000953057, 0, 0.0751152, 0.957632, 0.00102221, 0, 0.0864981, 0.948681, 0.00106122, 0, 0.0986407, 0.938716, 0.00111857, 0, 0.111537, 0.926629, 0.00114762, 0, 0.125182, 0.914025, 0.00118995, 0, 0.139571, 0.901026, 0.00121228, 0, 0.154703, 0.890358, 0.00123946, 0, 0.170576, 0.878283, 0.0012527, 0, 0.18719, 0.865459, 0.00125536, 0, 0.204547, 0.851407, 0.00126134, 0, 0.222648, 0.836276, 0.00124759, 0, 0.241498, 0.820436, 0.00124443, 0, 0.261101, 0.803253, 0.00122071, 0, 0.281465, 0.785562, 0.00120107, 0, 0.302595, 0.76718, 0.00117762, 0, 0.324501, 0.748551, 0.00114289, 0, 0.347192, 0.730564, 0.00110872, 0, 0.370679, 0.712253, 0.00107636, 0, 0.394973, 0.692867, 0.00103646, 0, 0.420085, 0.673695, 0.000996793, 0, 0.446027, 0.653912, 0.00095675, 0, 0.47281, 0.634129, 0.000916739, 0, 0.500441, 0.615004, 0.000874401, 0, 0.528921, 0.595587, 0.000833411, 0, 0.558244, 0.575965, 0.000794556, 0, 0.588384, 0.5566, 0.00075196, 0, 0.619281, 0.537428, 0.000716381, 0, 0.650795, 0.518623, 0.000676558, 0, 0.68254, 0.499964, 0.00064074, 0, 0.714286, 0.481356, 0.000605984, 0, 0.746032, 0.463279, 0.000570256, 0, 0.777778, 0.445673, 0.000540138, 0, 0.809524, 0.428032, 0.000507299, 0, 0.84127, 0.411112, 0.000479553, 0, 0.873016, 0.394444, 0.000450737, 0, 0.904762, 0.378247, 0.000424269, 0, 0.936508, 0.362415, 0.000399111, 0, 0.968254, 0.347103, 0.000375274, 0, 1, 1, 0.000300729, 0, 0, 1, 0.000300733, 0, 0, 1, 0.000300797, 0, 0, 0.999998, 0.000301072, 0, 0, 0.999996, 0.000301817, 0, 0, 0.999989, 0.000303398, 0, 0, 0.999977, 0.000306309, 0, 0, 0.999958, 0.000311209, 0, 0, 0.999927, 0.000318975, 0, 0, 0.999884, 0.000330804, 0, 0, 0.99982, 0.00034834, 0, 0, 0.999733, 0.000373854, 0, 3.26995e-05, 0.999613, 0.000410424, 0, 0.000477174, 0.999447, 0.000462047, 0, 0.00161099, 0.999204, 0.000533322, 0, 0.00353153, 0.998725, 0.000624964, 0, 0.00627965, 0.995871, 0.000631786, 0, 0.0098693, 0.993194, 0.000632017, 0, 0.0143011, 0.991541, 0.00068923, 0, 0.019568, 0.989773, 0.000766892, 0, 0.0256593, 0.987647, 0.000863668, 0, 0.0325625, 0.984193, 0.000922089, 0, 0.0402647, 0.980016, 0.000970749, 0, 0.0487532, 0.975859, 0.00106027, 0, 0.058016, 0.970514, 0.00112239, 0, 0.0680419, 0.963625, 0.00117212, 0, 0.0788208, 0.956959, 0.00125211, 0, 0.0903439, 0.947956, 0.00129411, 0, 0.102604, 0.93809, 0.00135879, 0, 0.115594, 0.92659, 0.00139309, 0, 0.129309, 0.913829, 0.00143253, 0, 0.143745, 0.90005, 0.00145809, 0, 0.158901, 0.888129, 0.0014748, 0, 0.174774, 0.87607, 0.00148756, 0, 0.191365, 0.863461, 0.00148714, 0, 0.208674, 0.849594, 0.00148892, 0, 0.226705, 0.834531, 0.00146496, 0, 0.245461, 0.81903, 0.0014579, 0, 0.264947, 0.802122, 0.00143039, 0, 0.28517, 0.78445, 0.00139717, 0, 0.306137, 0.766434, 0.00136312, 0, 0.327857, 0.747816, 0.00132597, 0, 0.350341, 0.729519, 0.00128323, 0, 0.373598, 0.711454, 0.00123803, 0, 0.397642, 0.692699, 0.00119097, 0, 0.422485, 0.673723, 0.00114565, 0, 0.448139, 0.654386, 0.00109552, 0, 0.474619, 0.634673, 0.00104553, 0, 0.501933, 0.615554, 0.00099985, 0, 0.530089, 0.596462, 0.000948207, 0, 0.559087, 0.577385, 0.000902299, 0, 0.588913, 0.558257, 0.000856448, 0, 0.619525, 0.5392, 0.000810395, 0, 0.650826, 0.520543, 0.000768558, 0, 0.68254, 0.502206, 0.0007239, 0, 0.714286, 0.48402, 0.000685794, 0, 0.746032, 0.465779, 0.00064471, 0, 0.777778, 0.448455, 0.000609583, 0, 0.809524, 0.431091, 0.00057227, 0, 0.84127, 0.414147, 0.00054042, 0, 0.873016, 0.39765, 0.000506545, 0, 0.904762, 0.381576, 0.000477635, 0, 0.936508, 0.365881, 0.000448446, 0, 0.968254, 0.350582, 0.000421424, 0, 1, 1, 0.000427144, 0, 0, 1, 0.000427151, 0, 0, 1, 0.000427232, 0, 0, 0.999998, 0.00042759, 0, 0, 0.999995, 0.000428555, 0, 0, 0.999988, 0.000430603, 0, 0, 0.999976, 0.000434368, 0, 0, 0.999952, 0.000440688, 0, 0, 0.999919, 0.000450667, 0, 0, 0.999871, 0.00046578, 0, 0, 0.999801, 0.000488024, 0, 0, 0.999704, 0.000520092, 0, 0.000129791, 0.999572, 0.000565553, 0, 0.000821056, 0.999389, 0.000628906, 0, 0.00225241, 0.999114, 0.000714911, 0, 0.00449109, 0.998488, 0.000819218, 0, 0.00756249, 0.995234, 0.00080415, 0, 0.0114716, 0.993021, 0.000830181, 0, 0.0162131, 0.991407, 0.000902645, 0, 0.021776, 0.989625, 0.000996934, 0, 0.0281471, 0.987064, 0.00109707, 0, 0.0353118, 0.983265, 0.00114353, 0, 0.0432562, 0.979535, 0.0012272, 0, 0.0519665, 0.975224, 0.00132642, 0, 0.0614298, 0.969574, 0.00138092, 0, 0.0716348, 0.963021, 0.00145896, 0, 0.0825709, 0.956046, 0.00152834, 0, 0.094229, 0.947136, 0.00158217, 0, 0.106602, 0.937313, 0.0016347, 0, 0.119682, 0.926073, 0.00168383, 0, 0.133465, 0.913121, 0.00171627, 0, 0.147947, 0.899165, 0.00174229, 0, 0.163125, 0.885891, 0.00176137, 0, 0.178998, 0.873783, 0.00176406, 0, 0.195566, 0.861331, 0.00176156, 0, 0.21283, 0.847569, 0.00175346, 0, 0.230793, 0.832785, 0.00172753, 0, 0.249459, 0.817442, 0.00170204, 0, 0.268832, 0.800613, 0.00166576, 0, 0.28892, 0.783597, 0.00162909, 0, 0.30973, 0.76571, 0.0015826, 0, 0.331271, 0.747021, 0.00153106, 0, 0.353554, 0.728593, 0.00148036, 0, 0.37659, 0.710661, 0.00142808, 0, 0.400391, 0.692426, 0.00136906, 0, 0.424973, 0.673623, 0.00131066, 0, 0.450347, 0.65494, 0.00125569, 0, 0.476531, 0.635448, 0.00119517, 0, 0.503535, 0.616221, 0.00113828, 0, 0.531372, 0.597531, 0.0010816, 0, 0.560047, 0.578795, 0.00102673, 0, 0.589554, 0.559892, 0.000970985, 0, 0.619869, 0.541307, 0.000919773, 0, 0.650923, 0.522608, 0.000868479, 0, 0.68254, 0.504484, 0.00082137, 0, 0.714286, 0.486603, 0.000772916, 0, 0.746032, 0.468802, 0.000730353, 0, 0.777778, 0.451172, 0.000684955, 0, 0.809524, 0.434348, 0.000647565, 0, 0.84127, 0.417445, 0.000605863, 0, 0.873016, 0.401077, 0.000571885, 0, 0.904762, 0.385039, 0.000536034, 0, 0.936508, 0.369483, 0.000504227, 0, 0.968254, 0.354272, 0.000473165, 0, 1, 1, 0.000599525, 0, 0, 1, 0.000599533, 0, 0, 1, 0.000599639, 0, 0, 0.999998, 0.000600097, 0, 0, 0.999994, 0.000601336, 0, 0, 0.999987, 0.000603958, 0, 0, 0.999972, 0.000608775, 0, 0, 0.999949, 0.000616842, 0, 0, 0.999912, 0.000629534, 0, 0, 0.999857, 0.000648658, 0, 0, 0.999781, 0.000676615, 0, 5.38873e-06, 0.999674, 0.000716574, 0, 0.000308602, 0.999528, 0.000772641, 0, 0.00127003, 0.999326, 0.000849806, 0, 0.00300783, 0.999009, 0.000952682, 0, 0.00556637, 0.998112, 0.00106394, 0, 0.00895889, 0.994496, 0.00102228, 0, 0.0131827, 0.992806, 0.00108586, 0, 0.0182277, 0.991211, 0.0011759, 0, 0.0240795, 0.989415, 0.00128955, 0, 0.030723, 0.986499, 0.00139038, 0, 0.0381418, 0.982679, 0.00144539, 0, 0.046321, 0.978839, 0.00153954, 0, 0.0552459, 0.974295, 0.00164417, 0, 0.0649034, 0.968784, 0.00171517, 0, 0.0752814, 0.962324, 0.00180282, 0, 0.0863693, 0.954956, 0.00186387, 0, 0.0981578, 0.94624, 0.00193817, 0, 0.110639, 0.936517, 0.00198156, 0, 0.123806, 0.925186, 0.00203042, 0, 0.137655, 0.91252, 0.0020664, 0, 0.15218, 0.898441, 0.00207822, 0, 0.16738, 0.884394, 0.0020992, 0, 0.183253, 0.871273, 0.00208748, 0, 0.199799, 0.859057, 0.00208686, 0, 0.21702, 0.845243, 0.00205519, 0, 0.234918, 0.830723, 0.00202868, 0, 0.253496, 0.815801, 0.00199501, 0, 0.272761, 0.79914, 0.00194193, 0, 0.292719, 0.782372, 0.00188824, 0, 0.313377, 0.76482, 0.00183695, 0, 0.334745, 0.746586, 0.00177418, 0, 0.356833, 0.7281, 0.00170628, 0, 0.379654, 0.709842, 0.00164063, 0, 0.403221, 0.692019, 0.00157355, 0, 0.427548, 0.67364, 0.00150262, 0, 0.452651, 0.655277, 0.00143473, 0, 0.478545, 0.636438, 0.00136371, 0, 0.505246, 0.617364, 0.00129911, 0, 0.532768, 0.598603, 0.00123014, 0, 0.561122, 0.580195, 0.00116587, 0, 0.590309, 0.561786, 0.00110398, 0, 0.620318, 0.543377, 0.00104148, 0, 0.651102, 0.525093, 0.000983984, 0, 0.682545, 0.506791, 0.00092667, 0, 0.714286, 0.489291, 0.000874326, 0, 0.746032, 0.471811, 0.000821734, 0, 0.777778, 0.454435, 0.000774698, 0, 0.809524, 0.437493, 0.000727302, 0, 0.84127, 0.420977, 0.000684039, 0, 0.873016, 0.404729, 0.00064373, 0, 0.904762, 0.388756, 0.00060285, 0, 0.936508, 0.373344, 0.00056765, 0, 0.968254, 0.358191, 0.000531929, 0, 1, 1, 0.000832169, 0, 0, 1, 0.000832178, 0, 0, 1, 0.00083231, 0, 0, 0.999998, 0.000832893, 0, 0, 0.999995, 0.000834465, 0, 0, 0.999985, 0.000837791, 0, 0, 0.999969, 0.000843893, 0, 0, 0.999944, 0.000854086, 0, 0, 0.999903, 0.000870071, 0, 0, 0.999843, 0.000894042, 0, 0, 0.999759, 0.000928865, 0, 5.31805e-05, 0.999643, 0.000978242, 0, 0.000579365, 0.99948, 0.00104684, 0, 0.00182774, 0.999255, 0.00114012, 0, 0.00387804, 0.998885, 0.00126188, 0, 0.00675709, 0.997405, 0.00135888, 0, 0.010468, 0.99424, 0.00133626, 0, 0.0150018, 0.992458, 0.00140905, 0, 0.0203443, 0.990929, 0.00152305, 0, 0.0264786, 0.989116, 0.00165882, 0, 0.0333875, 0.985624, 0.00174128, 0, 0.0410536, 0.982003, 0.00182108, 0, 0.0494609, 0.978336, 0.00194498, 0, 0.0585941, 0.973184, 0.00202708, 0, 0.0684396, 0.9678, 0.00212166, 0, 0.0789851, 0.961348, 0.00221366, 0, 0.0902199, 0.953841, 0.00228219, 0, 0.102134, 0.94534, 0.00235662, 0, 0.114721, 0.935552, 0.00240572, 0, 0.127972, 0.924064, 0.00244405, 0, 0.141884, 0.911827, 0.00247557, 0, 0.156451, 0.897731, 0.00248374, 0, 0.171672, 0.883409, 0.00249863, 0, 0.187545, 0.868625, 0.00246688, 0, 0.20407, 0.856529, 0.00246523, 0, 0.221249, 0.842999, 0.00242368, 0, 0.239083, 0.828505, 0.00237354, 0, 0.257578, 0.813825, 0.00232588, 0, 0.276738, 0.797813, 0.00226731, 0, 0.296569, 0.781097, 0.00219704, 0, 0.31708, 0.764038, 0.00212394, 0, 0.338281, 0.746067, 0.00204786, 0, 0.360181, 0.727687, 0.00196728, 0, 0.382794, 0.709571, 0.00188779, 0, 0.406133, 0.691503, 0.00180532, 0, 0.430213, 0.673673, 0.00171849, 0, 0.45505, 0.655732, 0.00164147, 0, 0.480662, 0.637399, 0.00155858, 0, 0.507065, 0.618616, 0.00147641, 0, 0.534278, 0.60005, 0.00140125, 0, 0.562313, 0.581713, 0.00132441, 0, 0.59118, 0.563546, 0.00125014, 0, 0.620875, 0.545605, 0.00118249, 0, 0.651373, 0.527559, 0.0011116, 0, 0.682593, 0.509764, 0.00104979, 0, 0.714286, 0.49193, 0.000985977, 0, 0.746032, 0.475011, 0.000928592, 0, 0.777778, 0.457878, 0.000873466, 0, 0.809524, 0.440979, 0.000819585, 0, 0.84127, 0.424613, 0.000772365, 0, 0.873016, 0.408549, 0.000722195, 0, 0.904762, 0.392771, 0.000680014, 0, 0.936508, 0.377317, 0.000636797, 0, 0.968254, 0.362352, 0.000598318, 0, 1, 1, 0.00114313, 0, 0, 1, 0.00114314, 0, 0, 0.999999, 0.00114331, 0, 0, 0.999998, 0.00114404, 0, 0, 0.999994, 0.00114601, 0, 0, 0.999984, 0.00115019, 0, 0, 0.999967, 0.00115784, 0, 0, 0.999937, 0.0011706, 0, 0, 0.999894, 0.00119054, 0, 0, 0.999828, 0.00122031, 0, 0, 0.999735, 0.00126331, 0, 0.000169263, 0.999606, 0.00132382, 0, 0.000949167, 0.999426, 0.0014071, 0, 0.00249668, 0.999173, 0.00151895, 0, 0.00486392, 0.99873, 0.00166102, 0, 0.00806323, 0.996243, 0.0017023, 0, 0.0120895, 0.993779, 0.00172782, 0, 0.0169288, 0.9919, 0.0018108, 0, 0.0225633, 0.990524, 0.00196028, 0, 0.028974, 0.98868, 0.00212014, 0, 0.036142, 0.984663, 0.00217598, 0, 0.044049, 0.981457, 0.00230563, 0, 0.0526781, 0.977608, 0.00243966, 0, 0.0620137, 0.972215, 0.00251336, 0, 0.0720418, 0.966798, 0.0026285, 0, 0.0827499, 0.960241, 0.00271409, 0, 0.0941271, 0.952489, 0.00278381, 0, 0.106164, 0.944127, 0.00285399, 0, 0.118852, 0.934282, 0.00290994, 0, 0.132185, 0.923271, 0.00294558, 0, 0.146157, 0.910803, 0.00296269, 0, 0.160766, 0.896705, 0.00296803, 0, 0.176007, 0.88238, 0.00296637, 0, 0.19188, 0.867116, 0.00293163, 0, 0.208385, 0.853636, 0.00289418, 0, 0.225523, 0.840469, 0.00284663, 0, 0.243296, 0.82639, 0.00278594, 0, 0.261709, 0.811759, 0.00271618, 0, 0.280767, 0.796113, 0.00263187, 0, 0.300476, 0.779518, 0.00254589, 0, 0.320845, 0.763142, 0.00246003, 0, 0.341883, 0.745464, 0.00236529, 0, 0.363601, 0.727491, 0.00226536, 0, 0.386011, 0.709414, 0.00216375, 0, 0.409128, 0.691396, 0.00207127, 0, 0.432967, 0.67368, 0.00197106, 0, 0.457545, 0.656049, 0.00187022, 0, 0.482881, 0.638188, 0.00177605, 0, 0.508992, 0.620177, 0.00168482, 0, 0.535899, 0.601506, 0.00158909, 0, 0.563619, 0.58362, 0.00150583, 0, 0.592165, 0.565496, 0.00141791, 0, 0.621544, 0.54789, 0.00133693, 0, 0.651743, 0.530323, 0.00126038, 0, 0.682709, 0.512795, 0.00118556, 0, 0.714286, 0.495199, 0.00111527, 0, 0.746032, 0.478101, 0.0010489, 0, 0.777778, 0.461511, 0.000984264, 0, 0.809524, 0.444879, 0.00092591, 0, 0.84127, 0.428424, 0.000866582, 0, 0.873016, 0.412495, 0.000814463, 0, 0.904762, 0.396975, 0.000764498, 0, 0.936508, 0.381614, 0.000715967, 0, 0.968254, 0.366732, 0.000672483, 0, 1, 1, 0.00155501, 0, 0, 1, 0.00155503, 0, 0, 1, 0.00155524, 0, 0, 0.999998, 0.00155615, 0, 0, 0.999994, 0.0015586, 0, 0, 0.999983, 0.00156379, 0, 0, 0.999963, 0.0015733, 0, 0, 0.999932, 0.00158911, 0, 0, 0.999882, 0.00161376, 0, 0, 0.99981, 0.00165041, 0, 1.00875e-05, 0.999708, 0.00170304, 0, 0.000367658, 0.999565, 0.00177658, 0, 0.0014234, 0.999368, 0.00187688, 0, 0.00327939, 0.999081, 0.00200989, 0, 0.00596629, 0.99852, 0.00217177, 0, 0.0094852, 0.99549, 0.0021745, 0, 0.013824, 0.993252, 0.00222357, 0, 0.0189642, 0.991727, 0.00235022, 0, 0.0248856, 0.989951, 0.00250561, 0, 0.0315669, 0.988029, 0.00268829, 0, 0.0389882, 0.984029, 0.0027496, 0, 0.0471302, 0.980683, 0.00289793, 0, 0.0559754, 0.976554, 0.00303315, 0, 0.0655081, 0.97139, 0.00313257, 0, 0.0757138, 0.965544, 0.00323656, 0, 0.08658, 0.95912, 0.00333432, 0, 0.0980954, 0.951183, 0.0034039, 0, 0.110251, 0.942974, 0.00347515, 0, 0.123038, 0.932642, 0.00350381, 0, 0.13645, 0.922158, 0.00354519, 0, 0.150482, 0.909404, 0.00353851, 0, 0.165129, 0.896071, 0.0035435, 0, 0.18039, 0.881206, 0.00349936, 0, 0.196263, 0.866077, 0.00347256, 0, 0.212748, 0.85093, 0.003415, 0, 0.229847, 0.837703, 0.00333367, 0, 0.247561, 0.823878, 0.003249, 0, 0.265895, 0.809449, 0.00316347, 0, 0.284854, 0.794379, 0.00306351, 0, 0.304445, 0.778138, 0.0029499, 0, 0.324675, 0.761997, 0.00284099, 0, 0.345555, 0.744938, 0.00272104, 0, 0.367095, 0.727212, 0.00260715, 0, 0.389309, 0.709549, 0.00248855, 0, 0.41221, 0.691704, 0.00236783, 0, 0.435814, 0.673689, 0.00225178, 0, 0.460138, 0.656453, 0.00213765, 0, 0.485203, 0.639128, 0.00202178, 0, 0.511028, 0.621512, 0.00191443, 0, 0.537634, 0.603598, 0.00180977, 0, 0.565041, 0.58559, 0.00170456, 0, 0.593268, 0.567852, 0.00160927, 0, 0.622327, 0.5503, 0.00151395, 0, 0.652217, 0.533033, 0.00142499, 0, 0.682907, 0.515942, 0.00133955, 0, 0.714296, 0.498814, 0.0012602, 0, 0.746032, 0.481595, 0.00118188, 0, 0.777778, 0.465117, 0.00111171, 0, 0.809524, 0.448865, 0.00104091, 0, 0.84127, 0.432711, 0.000976618, 0, 0.873016, 0.416822, 0.00091859, 0, 0.904762, 0.401272, 0.000857704, 0, 0.936508, 0.386226, 0.000807172, 0, 0.968254, 0.371321, 0.00075464, 0, 1, 1, 0.00209596, 0, 0, 1, 0.00209598, 0, 0, 1, 0.00209624, 0, 0, 0.999997, 0.00209736, 0, 0, 0.999991, 0.00210039, 0, 0, 0.999979, 0.00210678, 0, 0, 0.999959, 0.00211847, 0, 0, 0.999925, 0.0021379, 0, 0, 0.99987, 0.00216809, 0, 0, 0.999791, 0.00221281, 0, 6.81487e-05, 0.999677, 0.00227669, 0, 0.000658161, 0.999521, 0.00236533, 0, 0.00200635, 0.999301, 0.00248514, 0, 0.0041779, 0.998977, 0.00264185, 0, 0.00718648, 0.998191, 0.00281695, 0, 0.0110239, 0.994801, 0.00278518, 0, 0.015672, 0.993091, 0.00288774, 0, 0.0211091, 0.991571, 0.00303931, 0, 0.0273123, 0.9897, 0.00321643, 0, 0.034259, 0.987023, 0.00337332, 0, 0.0419282, 0.983289, 0.00346146, 0, 0.0502998, 0.979892, 0.00363704, 0, 0.0593562, 0.975111, 0.00373601, 0, 0.069081, 0.970351, 0.0038842, 0, 0.0794598, 0.964131, 0.00397053, 0, 0.0904798, 0.957747, 0.00408078, 0, 0.10213, 0.949536, 0.00413533, 0, 0.1144, 0.941372, 0.00420305, 0, 0.127284, 0.931049, 0.00422815, 0, 0.140772, 0.920647, 0.00425048, 0, 0.154862, 0.908033, 0.0042281, 0, 0.169548, 0.895028, 0.00422026, 0, 0.184828, 0.879968, 0.00415042, 0, 0.200701, 0.864875, 0.00408821, 0, 0.217167, 0.84918, 0.00400909, 0, 0.234227, 0.834934, 0.00391178, 0, 0.251884, 0.821397, 0.00380066, 0, 0.270141, 0.807135, 0.00367974, 0, 0.289004, 0.792363, 0.00355172, 0, 0.308479, 0.776661, 0.003411, 0, 0.328575, 0.760705, 0.00328123, 0, 0.349301, 0.744408, 0.00314003, 0, 0.370668, 0.726994, 0.0029906, 0, 0.392689, 0.709598, 0.00285034, 0, 0.415379, 0.692112, 0.00271179, 0, 0.438754, 0.674435, 0.00257185, 0, 0.46283, 0.65676, 0.00243425, 0, 0.48763, 0.639982, 0.00230351, 0, 0.513173, 0.622983, 0.0021777, 0, 0.539482, 0.605471, 0.00204991, 0, 0.566579, 0.58796, 0.00193759, 0, 0.594488, 0.570463, 0.00181976, 0, 0.623226, 0.553058, 0.00171497, 0, 0.6528, 0.535894, 0.00161109, 0, 0.683198, 0.519089, 0.00151394, 0, 0.714354, 0.502454, 0.00142122, 0, 0.746032, 0.485681, 0.00133488, 0, 0.777778, 0.468935, 0.00124975, 0, 0.809524, 0.452951, 0.00117309, 0, 0.84127, 0.437139, 0.00110155, 0, 0.873016, 0.421446, 0.00103124, 0, 0.904762, 0.405951, 0.000966387, 0, 0.936508, 0.391003, 0.000908119, 0, 0.968254, 0.376198, 0.000848057, 0, 1, 1, 0.00280076, 0, 0, 1, 0.00280078, 0, 0, 0.999999, 0.00280109, 0, 0, 0.999997, 0.00280246, 0, 0, 0.999992, 0.00280616, 0, 0, 0.999979, 0.00281396, 0, 0, 0.999956, 0.00282822, 0, 0, 0.999916, 0.00285186, 0, 0, 0.999857, 0.0028885, 0, 0, 0.999768, 0.00294259, 0, 0.000196026, 0.999645, 0.00301946, 0, 0.00104842, 0.99947, 0.00312541, 0, 0.00270199, 0.999229, 0.00326733, 0, 0.00519449, 0.998852, 0.00344992, 0, 0.00852602, 0.997558, 0.00361052, 0, 0.0126804, 0.994417, 0.0035898, 0, 0.017635, 0.992824, 0.00372393, 0, 0.023365, 0.991344, 0.00390695, 0, 0.0298456, 0.989337, 0.00410392, 0, 0.0370529, 0.985811, 0.00420987, 0, 0.0449651, 0.982772, 0.00437488, 0, 0.0535615, 0.979001, 0.00455069, 0, 0.0628243, 0.974102, 0.00464462, 0, 0.0727368, 0.969197, 0.00480577, 0, 0.0832844, 0.962759, 0.00487818, 0, 0.0944545, 0.956207, 0.00498176, 0, 0.106236, 0.947909, 0.00503392, 0, 0.118619, 0.939596, 0.00507474, 0, 0.131595, 0.929642, 0.00509798, 0, 0.145159, 0.918807, 0.00508476, 0, 0.159305, 0.906921, 0.00505634, 0, 0.174028, 0.893312, 0.00498845, 0, 0.189327, 0.878933, 0.0049133, 0, 0.2052, 0.863986, 0.0048259, 0, 0.221647, 0.847936, 0.00470848, 0, 0.23867, 0.832253, 0.00456889, 0, 0.25627, 0.818619, 0.00442726, 0, 0.274453, 0.804788, 0.00427677, 0, 0.293222, 0.790241, 0.00411906, 0, 0.312585, 0.775162, 0.00394833, 0, 0.33255, 0.759463, 0.00377366, 0, 0.353126, 0.743598, 0.00361026, 0, 0.374324, 0.72697, 0.00343627, 0, 0.396158, 0.709646, 0.00326422, 0, 0.418641, 0.69277, 0.00309717, 0, 0.44179, 0.675371, 0.0029356, 0, 0.465624, 0.657863, 0.00277712, 0, 0.490163, 0.640772, 0.00261738, 0, 0.515429, 0.624441, 0.0024737, 0, 0.541445, 0.607497, 0.00233125, 0, 0.568236, 0.590438, 0.00218994, 0, 0.595828, 0.573224, 0.0020664, 0, 0.624242, 0.556168, 0.00193526, 0, 0.653496, 0.539232, 0.00182463, 0, 0.683588, 0.522352, 0.00170735, 0, 0.714482, 0.506172, 0.00160555, 0, 0.746032, 0.489842, 0.00150451, 0, 0.777778, 0.473463, 0.00140938, 0, 0.809524, 0.457266, 0.00132568, 0, 0.84127, 0.441609, 0.0012376, 0, 0.873016, 0.426348, 0.00116265, 0, 0.904762, 0.411002, 0.00108935, 0, 0.936508, 0.396045, 0.00101946, 0, 0.968254, 0.381448, 0.000955665, 0, 1, 1, 0.0037121, 0, 0, 1, 0.00371213, 0, 0, 1, 0.00371251, 0, 0, 0.999997, 0.00371417, 0, 0, 0.99999, 0.00371863, 0, 0, 0.999977, 0.00372807, 0, 0, 0.99995, 0.00374529, 0, 0, 0.999908, 0.0037738, 0, 0, 0.999843, 0.00381789, 0, 1.23596e-05, 0.999745, 0.00388273, 0, 0.000407442, 0.999608, 0.00397443, 0, 0.0015447, 0.999415, 0.00409998, 0, 0.00351385, 0.999143, 0.00426662, 0, 0.0063316, 0.9987, 0.00447625, 0, 0.00998679, 0.996363, 0.00455323, 0, 0.0144569, 0.994021, 0.00461052, 0, 0.0197151, 0.992372, 0.00476359, 0, 0.0257344, 0.991007, 0.00499101, 0, 0.0324882, 0.988767, 0.0051972, 0, 0.0399517, 0.984872, 0.00528407, 0, 0.0481022, 0.982004, 0.00548926, 0, 0.0569191, 0.977714, 0.00564385, 0, 0.0663839, 0.973076, 0.0057693, 0, 0.0764801, 0.967565, 0.0058924, 0, 0.0871928, 0.961384, 0.00599629, 0, 0.0985095, 0.954435, 0.00605998, 0, 0.110419, 0.946303, 0.0061133, 0, 0.122912, 0.937662, 0.00612028, 0, 0.13598, 0.927867, 0.00612209, 0, 0.149617, 0.916475, 0.00604813, 0, 0.163817, 0.90541, 0.00603088, 0, 0.178577, 0.891591, 0.00592218, 0, 0.193894, 0.877573, 0.00578854, 0, 0.209767, 0.862511, 0.00566648, 0, 0.226196, 0.846861, 0.00551481, 0, 0.243182, 0.83068, 0.00533754, 0, 0.260728, 0.815725, 0.00515487, 0, 0.278837, 0.802321, 0.0049655, 0, 0.297515, 0.787826, 0.00475421, 0, 0.316768, 0.773454, 0.00456002, 0, 0.336605, 0.758224, 0.00434727, 0, 0.357034, 0.74265, 0.00414444, 0, 0.378067, 0.726729, 0.00393738, 0, 0.399717, 0.710155, 0.00373575, 0, 0.421998, 0.693312, 0.00353736, 0, 0.444928, 0.67653, 0.00334368, 0, 0.468523, 0.659444, 0.00315981, 0, 0.492806, 0.642051, 0.00297809, 0, 0.517798, 0.625758, 0.00280592, 0, 0.543525, 0.609615, 0.00264254, 0, 0.570012, 0.592919, 0.00248459, 0, 0.597288, 0.576298, 0.00233327, 0, 0.625379, 0.559489, 0.00219519, 0, 0.654307, 0.542891, 0.00205441, 0, 0.684084, 0.526255, 0.00193385, 0, 0.714693, 0.509853, 0.00180745, 0, 0.746044, 0.494131, 0.00169817, 0, 0.777778, 0.478114, 0.0015913, 0, 0.809524, 0.462274, 0.00148981, 0, 0.84127, 0.446412, 0.00139537, 0, 0.873016, 0.431274, 0.00130984, 0, 0.904762, 0.41635, 0.00122403, 0, 0.936508, 0.401476, 0.00114809, 0, 0.968254, 0.386993, 0.00107563, 0, 1, 1, 0.00488216, 0, 0, 1, 0.0048822, 0, 0, 1, 0.00488265, 0, 0, 0.999997, 0.00488463, 0, 0, 0.999988, 0.00488999, 0, 0, 0.999974, 0.00490129, 0, 0, 0.999946, 0.00492191, 0, 0, 0.999897, 0.00495598, 0, 0, 0.999825, 0.00500855, 0, 7.44791e-05, 0.999718, 0.00508559, 0, 0.000712744, 0.999565, 0.005194, 0, 0.00215249, 0.999352, 0.00534147, 0, 0.00444576, 0.999046, 0.00553523, 0, 0.00759218, 0.998492, 0.00577016, 0, 0.0115714, 0.995564, 0.00578487, 0, 0.0163557, 0.993339, 0.00586414, 0, 0.021915, 0.991834, 0.00606002, 0, 0.0282201, 0.990496, 0.00633312, 0, 0.0352433, 0.987826, 0.00651941, 0, 0.042959, 0.98383, 0.00660842, 0, 0.0513439, 0.98109, 0.00685523, 0, 0.0603772, 0.976131, 0.00695778, 0, 0.0700402, 0.971922, 0.00714236, 0, 0.0803163, 0.965901, 0.00721437, 0, 0.0911908, 0.959606, 0.00732017, 0, 0.102651, 0.952504, 0.00735788, 0, 0.114686, 0.944365, 0.00738493, 0, 0.127286, 0.935652, 0.00737969, 0, 0.140443, 0.925813, 0.00733612, 0, 0.154151, 0.914397, 0.00723094, 0, 0.168405, 0.903257, 0.00714002, 0, 0.183201, 0.890015, 0.00700149, 0, 0.198536, 0.876014, 0.00682813, 0, 0.214409, 0.861436, 0.00665567, 0, 0.23082, 0.845752, 0.00644526, 0, 0.24777, 0.829169, 0.00621635, 0, 0.265263, 0.813435, 0.00597789, 0, 0.283301, 0.799701, 0.00575694, 0, 0.301889, 0.785726, 0.00549866, 0, 0.321035, 0.77152, 0.0052503, 0, 0.340746, 0.75683, 0.00499619, 0, 0.361032, 0.741951, 0.0047543, 0, 0.381904, 0.726367, 0.0045084, 0, 0.403374, 0.710537, 0.00426784, 0, 0.425457, 0.693965, 0.00403487, 0, 0.448169, 0.677724, 0.0038075, 0, 0.47153, 0.66117, 0.00359431, 0, 0.495561, 0.644274, 0.00338354, 0, 0.520284, 0.627449, 0.00318163, 0, 0.545725, 0.611645, 0.00299672, 0, 0.571911, 0.595614, 0.00281016, 0, 0.598873, 0.579426, 0.00264252, 0, 0.62664, 0.563016, 0.00247509, 0, 0.655239, 0.546728, 0.00232647, 0, 0.684692, 0.530539, 0.00217803, 0, 0.714999, 0.514164, 0.00204216, 0, 0.746106, 0.498344, 0.00191403, 0, 0.777778, 0.482957, 0.00179203, 0, 0.809524, 0.467336, 0.00167695, 0, 0.84127, 0.451994, 0.00157567, 0, 0.873016, 0.436514, 0.00147113, 0, 0.904762, 0.42178, 0.00138034, 0, 0.936508, 0.407271, 0.00129219, 0, 0.968254, 0.392822, 0.0012098, 0, 1, 1, 0.00637427, 0, 0, 1, 0.00637431, 0, 0, 0.999999, 0.00637485, 0, 0, 0.999996, 0.00637721, 0, 0, 0.999987, 0.00638357, 0, 0, 0.999971, 0.006397, 0, 0, 0.999939, 0.00642142, 0, 0, 0.999888, 0.00646177, 0, 0, 0.999807, 0.00652387, 0, 0.000207916, 0.999689, 0.00661454, 0, 0.00112051, 0.99952, 0.00674155, 0, 0.00287719, 0.999283, 0.00691313, 0, 0.00550145, 0.998936, 0.00713598, 0, 0.00897928, 0.998165, 0.00738501, 0, 0.0132829, 0.994847, 0.00734388, 0, 0.01838, 0.993182, 0.00749991, 0, 0.0242381, 0.991665, 0.0077246, 0, 0.030826, 0.989708, 0.00797579, 0, 0.0381152, 0.986663, 0.00813011, 0, 0.0460794, 0.983288, 0.00830365, 0, 0.0546951, 0.980104, 0.00853496, 0, 0.0639411, 0.974855, 0.00861045, 0, 0.0737988, 0.97045, 0.00879133, 0, 0.0842516, 0.964509, 0.00886377, 0, 0.0952848, 0.957594, 0.00890346, 0, 0.106886, 0.950546, 0.00893289, 0, 0.119044, 0.942225, 0.00890074, 0, 0.131749, 0.933365, 0.00886826, 0, 0.144994, 0.923202, 0.0087316, 0, 0.158772, 0.912605, 0.00863082, 0, 0.173078, 0.901099, 0.00847403, 0, 0.187908, 0.888177, 0.00825838, 0, 0.203261, 0.873955, 0.00801834, 0, 0.219134, 0.860091, 0.00779026, 0, 0.235527, 0.84434, 0.00752478, 0, 0.252443, 0.828517, 0.00724074, 0, 0.269883, 0.81239, 0.00693769, 0, 0.287851, 0.79721, 0.00664817, 0, 0.306352, 0.783489, 0.00634763, 0, 0.325393, 0.769514, 0.00604221, 0, 0.344981, 0.755419, 0.00573568, 0, 0.365126, 0.741083, 0.00544359, 0, 0.385839, 0.726059, 0.00515515, 0, 0.407132, 0.710809, 0.00487139, 0, 0.42902, 0.695052, 0.00459846, 0, 0.45152, 0.678886, 0.00433412, 0, 0.474651, 0.663042, 0.00407981, 0, 0.498433, 0.646634, 0.00384264, 0, 0.52289, 0.630117, 0.00360897, 0, 0.548048, 0.613804, 0.00338863, 0, 0.573936, 0.598338, 0.00318486, 0, 0.600584, 0.582687, 0.00298377, 0, 0.628027, 0.566809, 0.00280082, 0, 0.656295, 0.550817, 0.00262255, 0, 0.685417, 0.534937, 0.00245835, 0, 0.715406, 0.519151, 0.00230574, 0, 0.74624, 0.503118, 0.0021549, 0, 0.777778, 0.487723, 0.00202008, 0, 0.809524, 0.472725, 0.00189355, 0, 0.84127, 0.457599, 0.00177108, 0, 0.873016, 0.442558, 0.00165843, 0, 0.904762, 0.427624, 0.00155494, 0, 0.936508, 0.413171, 0.00145273, 0, 0.968254, 0.399122, 0.00136454, 0, 1, 1, 0.00826496, 0, 0, 1, 0.00826499, 0, 0, 1, 0.00826564, 0, 0, 0.999996, 0.00826842, 0, 0, 0.999987, 0.00827589, 0, 0, 0.999967, 0.00829167, 0, 0, 0.999933, 0.00832037, 0, 0, 0.999876, 0.00836768, 0, 1.09338e-05, 0.999786, 0.00844031, 0, 0.000427145, 0.999655, 0.00854603, 0, 0.0016384, 0.999468, 0.00869337, 0, 0.00372392, 0.999203, 0.008891, 0, 0.00668513, 0.998803, 0.00914387, 0, 0.0104968, 0.99748, 0.00935838, 0, 0.015125, 0.994446, 0.00933309, 0, 0.0205338, 0.99292, 0.00953084, 0, 0.0266884, 0.991414, 0.0097893, 0, 0.0335565, 0.989049, 0.0100228, 0, 0.0411086, 0.98582, 0.0101664, 0, 0.0493181, 0.982441, 0.0103582, 0, 0.0581613, 0.978595, 0.0105292, 0, 0.0676169, 0.973495, 0.0106274, 0, 0.0776661, 0.968405, 0.0107261, 0, 0.0882926, 0.962717, 0.0108234, 0, 0.0994817, 0.955478, 0.0108102, 0, 0.111221, 0.948275, 0.0107914, 0, 0.123499, 0.940006, 0.0107161, 0, 0.136308, 0.930831, 0.0106309, 0, 0.149639, 0.920648, 0.0104083, 0, 0.163485, 0.910205, 0.0102312, 0, 0.177843, 0.898445, 0.0100051, 0, 0.192707, 0.885986, 0.00971928, 0, 0.208077, 0.872204, 0.00940747, 0, 0.22395, 0.858436, 0.0091085, 0, 0.240326, 0.843454, 0.00876595, 0, 0.257208, 0.827437, 0.00839794, 0, 0.274596, 0.811488, 0.00803692, 0, 0.292496, 0.796039, 0.00767352, 0, 0.310911, 0.781083, 0.0073097, 0, 0.329849, 0.767642, 0.00694032, 0, 0.349316, 0.753901, 0.00657476, 0, 0.369323, 0.740131, 0.00622699, 0, 0.38988, 0.725845, 0.0058838, 0, 0.410999, 0.710991, 0.00555586, 0, 0.432696, 0.696002, 0.00523089, 0, 0.454987, 0.680461, 0.00492494, 0, 0.47789, 0.664875, 0.00463464, 0, 0.501426, 0.649273, 0.00435422, 0, 0.52562, 0.63302, 0.0040875, 0, 0.550498, 0.61705, 0.00384075, 0, 0.576089, 0.601154, 0.00359557, 0, 0.602427, 0.586008, 0.00337636, 0, 0.629544, 0.570699, 0.00316019, 0, 0.657479, 0.555166, 0.00296033, 0, 0.686264, 0.539645, 0.00277552, 0, 0.715924, 0.524159, 0.00259499, 0, 0.746459, 0.508682, 0.00243257, 0, 0.777789, 0.493163, 0.00227851, 0, 0.809524, 0.478004, 0.00213083, 0, 0.84127, 0.46347, 0.00199502, 0, 0.873016, 0.448778, 0.00186967, 0, 0.904762, 0.434105, 0.00174732, 0, 0.936508, 0.419576, 0.00163861, 0, 0.968254, 0.405541, 0.00153341, 0, 1, 1, 0.0106462, 0, 0, 1, 0.0106462, 0, 0, 0.999999, 0.010647, 0, 0, 0.999995, 0.0106502, 0, 0, 0.999985, 0.0106589, 0, 0, 0.999964, 0.0106773, 0, 0, 0.999925, 0.0107106, 0, 0, 0.999861, 0.0107655, 0, 7.12986e-05, 0.999763, 0.0108497, 0, 0.000743959, 0.999616, 0.0109716, 0, 0.00227361, 0.999408, 0.0111408, 0, 0.0046983, 0.999112, 0.0113659, 0, 0.00800158, 0.998637, 0.0116475, 0, 0.0121493, 0.996223, 0.0117231, 0, 0.0171023, 0.994006, 0.0118064, 0, 0.0228218, 0.992444, 0.0120254, 0, 0.0292711, 0.991028, 0.0123314, 0, 0.036417, 0.98803, 0.0124954, 0, 0.0442295, 0.984816, 0.0126538, 0, 0.0526815, 0.981399, 0.0128537, 0, 0.0617492, 0.977085, 0.0129694, 0, 0.0714114, 0.972154, 0.013091, 0, 0.0816495, 0.966617, 0.0131166, 0, 0.0924472, 0.960628, 0.0131583, 0, 0.10379, 0.953295, 0.0131094, 0, 0.115665, 0.94575, 0.0129966, 0, 0.128062, 0.937654, 0.0128796, 0, 0.140972, 0.927716, 0.0126477, 0, 0.154387, 0.917932, 0.0123889, 0, 0.168301, 0.907719, 0.012131, 0, 0.182709, 0.89584, 0.0118013, 0, 0.197608, 0.883526, 0.0114145, 0, 0.212994, 0.870301, 0.0110075, 0, 0.228867, 0.856272, 0.0106019, 0, 0.245227, 0.842251, 0.0101938, 0, 0.262074, 0.826466, 0.00973254, 0, 0.279412, 0.810859, 0.0092846, 0, 0.297244, 0.795051, 0.00883304, 0, 0.315575, 0.780053, 0.00840272, 0, 0.334412, 0.76575, 0.00796438, 0, 0.35376, 0.752298, 0.00752526, 0, 0.373631, 0.739153, 0.00711486, 0, 0.394034, 0.725514, 0.00670361, 0, 0.414983, 0.711473, 0.00632656, 0, 0.436491, 0.696936, 0.00595206, 0, 0.458575, 0.682126, 0.00559191, 0, 0.481253, 0.667027, 0.00525362, 0, 0.504547, 0.651875, 0.00493805, 0, 0.528481, 0.636463, 0.00462848, 0, 0.553081, 0.620641, 0.00433936, 0, 0.578377, 0.604931, 0.00407, 0, 0.604404, 0.589549, 0.00380864, 0, 0.631197, 0.574712, 0.00357049, 0, 0.658795, 0.559775, 0.00334466, 0, 0.687238, 0.544514, 0.00312505, 0, 0.716559, 0.529555, 0.00293199, 0, 0.746776, 0.514402, 0.00274204, 0, 0.777849, 0.499302, 0.00256647, 0, 0.809524, 0.484114, 0.00239901, 0, 0.84127, 0.469308, 0.00225148, 0, 0.873016, 0.455133, 0.00210178, 0, 0.904762, 0.440939, 0.0019727, 0, 0.936508, 0.426627, 0.00184382, 0, 0.968254, 0.412509, 0.00172548, 0, 1, 1, 0.013628, 0, 0, 1, 0.0136281, 0, 0, 0.999999, 0.0136289, 0, 0, 0.999995, 0.0136327, 0, 0, 0.999983, 0.0136427, 0, 0, 0.99996, 0.0136638, 0, 0, 0.999917, 0.0137022, 0, 0, 0.999846, 0.0137652, 0, 0.000204597, 0.999736, 0.0138615, 0, 0.00116837, 0.999573, 0.0140007, 0, 0.00303325, 0.99934, 0.0141927, 0, 0.00580613, 0.999004, 0.0144457, 0, 0.00945626, 0.998407, 0.0147489, 0, 0.0139421, 0.995464, 0.014731, 0, 0.0192202, 0.993328, 0.0148283, 0, 0.0252495, 0.991799, 0.0150797, 0, 0.0319921, 0.990397, 0.0154316, 0, 0.0394138, 0.986835, 0.0155005, 0, 0.0474843, 0.983938, 0.0157308, 0, 0.0561763, 0.980154, 0.0158753, 0, 0.0654661, 0.975659, 0.0159581, 0, 0.0753326, 0.970171, 0.0159832, 0, 0.0857571, 0.964803, 0.0160084, 0, 0.0967236, 0.958366, 0.0159484, 0, 0.108218, 0.950613, 0.0158001, 0, 0.120227, 0.942874, 0.0155845, 0, 0.132741, 0.935005, 0.0154292, 0, 0.145751, 0.924991, 0.0150742, 0, 0.159249, 0.914814, 0.0146757, 0, 0.17323, 0.904743, 0.0143097, 0, 0.187687, 0.893216, 0.0138695, 0, 0.202619, 0.880769, 0.0133706, 0, 0.218021, 0.868136, 0.0128606, 0, 0.233894, 0.85469, 0.0123403, 0, 0.250238, 0.840593, 0.0118091, 0, 0.267052, 0.825808, 0.011253, 0, 0.284341, 0.81009, 0.0107099, 0, 0.302106, 0.79504, 0.0101636, 0, 0.320354, 0.779757, 0.00964041, 0, 0.33909, 0.764697, 0.00911896, 0, 0.358322, 0.750913, 0.00859533, 0, 0.378059, 0.738175, 0.00811592, 0, 0.398311, 0.725242, 0.00764504, 0, 0.41909, 0.711864, 0.00718885, 0, 0.440412, 0.698009, 0.00675843, 0, 0.462292, 0.683841, 0.00634984, 0, 0.484748, 0.669391, 0.00595502, 0, 0.507802, 0.654731, 0.00558671, 0, 0.531477, 0.639805, 0.00523578, 0, 0.555802, 0.624789, 0.00490834, 0, 0.580805, 0.609325, 0.00459448, 0, 0.606522, 0.593975, 0.00430342, 0, 0.63299, 0.578983, 0.00403019, 0, 0.66025, 0.564442, 0.0037707, 0, 0.688346, 0.549835, 0.0035316, 0, 0.717319, 0.535039, 0.00330255, 0, 0.7472, 0.520403, 0.00308932, 0, 0.777982, 0.505687, 0.00289335, 0, 0.809524, 0.490939, 0.00270818, 0, 0.84127, 0.476233, 0.0025343, 0, 0.873016, 0.461624, 0.00237097, 0, 0.904762, 0.447833, 0.00222065, 0, 0.936508, 0.433992, 0.00207561, 0, 0.968254, 0.420147, 0.00194955, 0, 1, 1, 0.0173415, 0, 0, 1, 0.0173416, 0, 0, 0.999999, 0.0173426, 0, 0, 0.999995, 0.0173468, 0, 0, 0.999983, 0.0173582, 0, 0, 0.999954, 0.0173822, 0, 0, 0.999908, 0.0174258, 0, 6.69501e-06, 0.999828, 0.0174973, 0, 0.000427399, 0.999705, 0.0176063, 0, 0.00171019, 0.999524, 0.0177631, 0, 0.0039248, 0.999263, 0.0179781, 0, 0.00705382, 0.998878, 0.018258, 0, 0.0110552, 0.998012, 0.0185551, 0, 0.0158812, 0.994614, 0.0184264, 0, 0.0214852, 0.993132, 0.0186385, 0, 0.0278239, 0.991563, 0.0189067, 0, 0.0348585, 0.989298, 0.0191577, 0, 0.0425544, 0.986036, 0.0192522, 0, 0.050881, 0.982558, 0.0194063, 0, 0.059811, 0.978531, 0.019486, 0, 0.0693209, 0.974198, 0.0195847, 0, 0.0793895, 0.968148, 0.0194749, 0, 0.0899984, 0.962565, 0.0194277, 0, 0.101132, 0.956041, 0.0192991, 0, 0.112775, 0.947749, 0.0189893, 0, 0.124917, 0.94018, 0.018704, 0, 0.137547, 0.93165, 0.0183458, 0, 0.150655, 0.921798, 0.0178775, 0, 0.164236, 0.911573, 0.0173618, 0, 0.178281, 0.901569, 0.0168482, 0, 0.192788, 0.890341, 0.016265, 0, 0.207752, 0.877835, 0.0156199, 0, 0.223171, 0.865472, 0.0149516, 0, 0.239044, 0.852905, 0.0143274, 0, 0.255371, 0.838906, 0.0136643, 0, 0.272153, 0.824888, 0.0129903, 0, 0.289393, 0.809977, 0.0123218, 0, 0.307093, 0.794697, 0.0116572, 0, 0.325259, 0.780028, 0.0110307, 0, 0.343896, 0.765124, 0.0104236, 0, 0.363012, 0.750411, 0.0098219, 0, 0.382617, 0.737264, 0.00924397, 0, 0.402719, 0.724799, 0.00868719, 0, 0.423332, 0.712253, 0.00816476, 0, 0.444469, 0.699267, 0.00767262, 0, 0.466146, 0.685618, 0.00719746, 0, 0.488383, 0.671736, 0.00673916, 0, 0.511199, 0.657777, 0.00631937, 0, 0.534618, 0.643497, 0.00592411, 0, 0.558668, 0.62889, 0.00553928, 0, 0.58338, 0.614299, 0.0051934, 0, 0.608787, 0.599197, 0.00485985, 0, 0.634929, 0.584175, 0.00454357, 0, 0.661849, 0.569541, 0.00425787, 0, 0.689594, 0.555193, 0.00397905, 0, 0.718211, 0.540947, 0.00372364, 0, 0.747742, 0.526593, 0.00348599, 0, 0.778205, 0.512335, 0.00326103, 0, 0.80953, 0.498017, 0.00305137, 0, 0.84127, 0.483609, 0.00285485, 0, 0.873016, 0.469368, 0.00267472, 0, 0.904762, 0.455037, 0.00249945, 0, 0.936508, 0.441493, 0.00234792, 0, 0.968254, 0.428147, 0.00219936, 0, 1, 1, 0.0219422, 0, 0, 1, 0.0219423, 0, 0, 0.999998, 0.0219434, 0, 0, 0.999993, 0.0219481, 0, 0, 0.999981, 0.021961, 0, 0, 0.999949, 0.0219879, 0, 0, 0.999896, 0.0220367, 0, 5.93194e-05, 0.999808, 0.0221167, 0, 0.00075364, 0.99967, 0.0222383, 0, 0.00237884, 0.999466, 0.0224125, 0, 0.00495612, 0.999174, 0.0226495, 0, 0.00844887, 0.998725, 0.0229525, 0, 0.0128058, 0.996979, 0.0231123, 0, 0.0179742, 0.994317, 0.0230742, 0, 0.0239047, 0.992781, 0.0232895, 0, 0.0305526, 0.991191, 0.0235734, 0, 0.0378786, 0.987787, 0.0236152, 0, 0.0458475, 0.985092, 0.0237994, 0, 0.0544287, 0.981121, 0.0238553, 0, 0.0635952, 0.976924, 0.0238706, 0, 0.0733233, 0.97218, 0.0238704, 0, 0.0835922, 0.965956, 0.0236598, 0, 0.0943839, 0.959998, 0.0234735, 0, 0.105682, 0.953245, 0.0232277, 0, 0.117474, 0.944445, 0.0226973, 0, 0.129747, 0.937087, 0.0223527, 0, 0.142491, 0.928341, 0.0218144, 0, 0.155697, 0.9184, 0.0211516, 0, 0.169358, 0.907959, 0.0204553, 0, 0.183469, 0.89808, 0.0197673, 0, 0.198024, 0.887047, 0.0189915, 0, 0.21302, 0.875221, 0.0182082, 0, 0.228455, 0.86269, 0.0173584, 0, 0.244329, 0.850735, 0.0165718, 0, 0.260639, 0.837545, 0.0157524, 0, 0.277389, 0.823639, 0.0149482, 0, 0.29458, 0.809699, 0.0141431, 0, 0.312216, 0.794797, 0.0133527, 0, 0.3303, 0.780578, 0.0126193, 0, 0.34884, 0.766019, 0.0118914, 0, 0.367842, 0.751447, 0.0111839, 0, 0.387315, 0.737275, 0.010514, 0, 0.40727, 0.724545, 0.00987277, 0, 0.427717, 0.712644, 0.00926569, 0, 0.448671, 0.700432, 0.00869029, 0, 0.470149, 0.687664, 0.00814691, 0, 0.492167, 0.674288, 0.00763012, 0, 0.514746, 0.660966, 0.00714437, 0, 0.537911, 0.647264, 0.00668457, 0, 0.561688, 0.633431, 0.00626581, 0, 0.586108, 0.619133, 0.00585593, 0, 0.611206, 0.604935, 0.00548188, 0, 0.637022, 0.590236, 0.00513288, 0, 0.663599, 0.575473, 0.0047906, 0, 0.690989, 0.561228, 0.00448895, 0, 0.719242, 0.547054, 0.00420233, 0, 0.748411, 0.533175, 0.00392869, 0, 0.778531, 0.519163, 0.00367445, 0, 0.809583, 0.505328, 0.00344097, 0, 0.84127, 0.491446, 0.00322003, 0, 0.873016, 0.477356, 0.00301283, 0, 0.904762, 0.46356, 0.00282592, 0, 0.936508, 0.449623, 0.00264956, 0, 0.968254, 0.436068, 0.00246956, 0, 1, 1, 0.0276135, 0, 0, 1, 0.0276136, 0, 0, 0.999998, 0.0276148, 0, 0, 0.999993, 0.0276201, 0, 0, 0.999976, 0.0276342, 0, 0, 0.999945, 0.027664, 0, 0, 0.999884, 0.0277179, 0, 0.00018679, 0.999784, 0.027806, 0, 0.00119607, 0.99963, 0.0279394, 0, 0.00318407, 0.999401, 0.0281295, 0, 0.00613601, 0.999066, 0.0283858, 0, 0.00999963, 0.998524, 0.0287027, 0, 0.0147164, 0.995702, 0.0286256, 0, 0.0202295, 0.993593, 0.0286733, 0, 0.0264876, 0.992067, 0.0288989, 0, 0.0334452, 0.990548, 0.0292135, 0, 0.0410621, 0.986775, 0.0291296, 0, 0.0493032, 0.984054, 0.0293099, 0, 0.0581381, 0.979481, 0.0291881, 0, 0.0675397, 0.975297, 0.0291598, 0, 0.0774848, 0.96981, 0.028954, 0, 0.0879528, 0.963524, 0.028628, 0, 0.0989258, 0.957398, 0.0283135, 0, 0.110388, 0.950088, 0.0278469, 0, 0.122327, 0.941538, 0.0271798, 0, 0.134729, 0.933332, 0.0265388, 0, 0.147587, 0.924392, 0.0257776, 0, 0.160889, 0.914581, 0.024916, 0, 0.174631, 0.904347, 0.0240242, 0, 0.188806, 0.894324, 0.0231229, 0, 0.203409, 0.883724, 0.022153, 0, 0.218437, 0.872207, 0.0211355, 0, 0.233888, 0.859927, 0.0201048, 0, 0.249761, 0.848373, 0.0191263, 0, 0.266056, 0.836023, 0.0181306, 0, 0.282774, 0.82289, 0.0171718, 0, 0.299917, 0.809324, 0.0162196, 0, 0.317488, 0.795361, 0.0152622, 0, 0.335493, 0.781253, 0.01439, 0, 0.353936, 0.767338, 0.013533, 0, 0.372825, 0.753156, 0.0127244, 0, 0.392168, 0.739122, 0.0119454, 0, 0.411976, 0.725358, 0.0112054, 0, 0.432259, 0.712949, 0.010487, 0, 0.453032, 0.701621, 0.00984032, 0, 0.47431, 0.689703, 0.00921495, 0, 0.496111, 0.677216, 0.00862492, 0, 0.518456, 0.664217, 0.00806882, 0, 0.541367, 0.65137, 0.00755922, 0, 0.564872, 0.638, 0.00705705, 0, 0.589001, 0.62453, 0.00661266, 0, 0.613789, 0.610601, 0.00618432, 0, 0.639277, 0.59676, 0.00578033, 0, 0.66551, 0.582433, 0.00540927, 0, 0.692539, 0.568026, 0.00506104, 0, 0.720422, 0.55414, 0.0047353, 0, 0.749216, 0.540178, 0.00442889, 0, 0.778974, 0.526513, 0.00414363, 0, 0.809711, 0.512954, 0.00388237, 0, 0.84127, 0.499403, 0.00362875, 0, 0.873016, 0.486026, 0.00340827, 0, 0.904762, 0.472345, 0.00318598, 0, 0.936508, 0.458828, 0.00297635, 0, 0.968254, 0.445379, 0.00279447, 0, 1, 1, 0.0345716, 0, 0, 1, 0.0345717, 0, 0, 0.999999, 0.034573, 0, 0, 0.999991, 0.0345787, 0, 0, 0.999974, 0.0345941, 0, 0, 0.999937, 0.0346263, 0, 1.88589e-06, 0.999869, 0.0346847, 0, 0.000409238, 0.999757, 0.0347798, 0, 0.0017674, 0.999582, 0.0349233, 0, 0.00413658, 0.999322, 0.0351265, 0, 0.00747408, 0.998939, 0.0353967, 0, 0.0117157, 0.998219, 0.0357018, 0, 0.0167966, 0.994974, 0.0354726, 0, 0.0226572, 0.993201, 0.0355621, 0, 0.0292445, 0.991573, 0.0357641, 0, 0.0365123, 0.989301, 0.0359252, 0, 0.0444203, 0.985712, 0.0358017, 0, 0.0529334, 0.982411, 0.0358353, 0, 0.0620214, 0.977827, 0.035617, 0, 0.0716574, 0.973278, 0.0354398, 0, 0.0818186, 0.967397, 0.0350483, 0, 0.0924846, 0.960696, 0.0344795, 0, 0.103638, 0.954349, 0.0339861, 0, 0.115263, 0.946066, 0.0331323, 0, 0.127348, 0.938012, 0.032359, 0, 0.13988, 0.929413, 0.0314413, 0, 0.152849, 0.920355, 0.0304103, 0, 0.166248, 0.910586, 0.0292785, 0, 0.18007, 0.900609, 0.0281391, 0, 0.194308, 0.890093, 0.0269103, 0, 0.208958, 0.880013, 0.0257269, 0, 0.224018, 0.869001, 0.0244671, 0, 0.239485, 0.85751, 0.0232252, 0, 0.255359, 0.84582, 0.0220117, 0, 0.271638, 0.834383, 0.0208274, 0, 0.288324, 0.822158, 0.0196628, 0, 0.305419, 0.809056, 0.0185306, 0, 0.322927, 0.795832, 0.0174174, 0, 0.340851, 0.782547, 0.0163758, 0, 0.359199, 0.7689, 0.015391, 0, 0.377975, 0.755526, 0.0144488, 0, 0.397189, 0.741681, 0.0135372, 0, 0.416851, 0.728178, 0.0126957, 0, 0.436971, 0.714642, 0.0118812, 0, 0.457564, 0.702756, 0.0111165, 0, 0.478644, 0.69175, 0.0104145, 0, 0.500229, 0.680159, 0.00974439, 0, 0.522339, 0.668073, 0.00911926, 0, 0.544997, 0.655405, 0.00851393, 0, 0.56823, 0.642921, 0.00797637, 0, 0.592068, 0.629993, 0.00745119, 0, 0.616546, 0.616828, 0.00696972, 0, 0.641705, 0.603305, 0.00652425, 0, 0.66759, 0.589833, 0.00610188, 0, 0.694255, 0.575945, 0.00570834, 0, 0.72176, 0.561745, 0.00533384, 0, 0.750168, 0.548277, 0.00500001, 0, 0.779545, 0.534467, 0.00467582, 0, 0.809933, 0.521032, 0.00438092, 0, 0.841272, 0.507877, 0.00410348, 0, 0.873016, 0.494654, 0.00383618, 0, 0.904762, 0.481592, 0.00358699, 0, 0.936508, 0.468509, 0.00337281, 0, 0.968254, 0.455293, 0.00316196, 0, 1, 1, 0.0430698, 0, 0, 1, 0.0430699, 0, 0, 0.999998, 0.0430713, 0, 0, 0.999991, 0.0430773, 0, 0, 0.99997, 0.0430936, 0, 0, 0.999928, 0.0431277, 0, 4.06396e-05, 0.999852, 0.0431893, 0, 0.000744376, 0.999724, 0.0432895, 0, 0.0024806, 0.999527, 0.0434397, 0, 0.00524779, 0.99923, 0.0436507, 0, 0.00898164, 0.998783, 0.0439255, 0, 0.0136083, 0.997507, 0.0441104, 0, 0.0190582, 0.994418, 0.0438225, 0, 0.0252694, 0.992864, 0.0439396, 0, 0.0321879, 0.991127, 0.0440962, 0, 0.039767, 0.987331, 0.0438408, 0, 0.0479667, 0.984819, 0.0438991, 0, 0.056752, 0.980384, 0.0435906, 0, 0.0660929, 0.975846, 0.0432543, 0, 0.075963, 0.970748, 0.0428293, 0, 0.0863398, 0.964303, 0.042153, 0, 0.0972035, 0.95772, 0.0414111, 0, 0.108537, 0.950747, 0.0405893, 0, 0.120325, 0.942533, 0.0394887, 0, 0.132554, 0.934045, 0.0383544, 0, 0.145215, 0.924942, 0.037057, 0, 0.158296, 0.915811, 0.0356993, 0, 0.17179, 0.90612, 0.0342401, 0, 0.185691, 0.896434, 0.0328078, 0, 0.199993, 0.886021, 0.031288, 0, 0.214691, 0.876081, 0.0297776, 0, 0.229782, 0.865608, 0.0282334, 0, 0.245265, 0.854924, 0.026749, 0, 0.261138, 0.843607, 0.02526, 0, 0.277401, 0.832456, 0.0238214, 0, 0.294056, 0.821342, 0.0224682, 0, 0.311104, 0.809303, 0.0211297, 0, 0.328548, 0.796468, 0.0198387, 0, 0.346394, 0.784046, 0.0186227, 0, 0.364645, 0.771262, 0.0174561, 0, 0.38331, 0.758118, 0.0163806, 0, 0.402396, 0.745075, 0.0153287, 0, 0.421912, 0.731926, 0.0143647, 0, 0.44187, 0.71863, 0.0134363, 0, 0.462283, 0.705414, 0.0125603, 0, 0.483165, 0.693792, 0.0117508, 0, 0.504535, 0.683108, 0.0110016, 0, 0.52641, 0.67183, 0.0102757, 0, 0.548816, 0.66015, 0.00962044, 0, 0.571776, 0.647907, 0.00898031, 0, 0.595323, 0.635734, 0.00840811, 0, 0.619489, 0.623208, 0.00786211, 0, 0.644317, 0.610438, 0.00734953, 0, 0.669852, 0.597345, 0.00687688, 0, 0.696148, 0.584138, 0.00643469, 0, 0.723267, 0.5707, 0.00602236, 0, 0.75128, 0.556966, 0.0056324, 0, 0.780258, 0.543607, 0.00528277, 0, 0.810268, 0.530213, 0.00493999, 0, 0.841311, 0.516912, 0.00462265, 0, 0.873016, 0.503916, 0.0043307, 0, 0.904762, 0.491146, 0.00406858, 0, 0.936508, 0.478439, 0.00381436, 0, 0.968254, 0.465834, 0.00358003, 0, 1, 1, 0.0534039, 0, 0, 1, 0.053404, 0, 0, 0.999998, 0.0534055, 0, 0, 0.999989, 0.0534116, 0, 0, 0.999968, 0.0534283, 0, 0, 0.999918, 0.0534633, 0, 0.000155895, 0.99983, 0.0535262, 0, 0.00120914, 0.999685, 0.0536281, 0, 0.00334944, 0.999461, 0.0537799, 0, 0.00653077, 0.999119, 0.0539902, 0, 0.0106718, 0.998582, 0.0542524, 0, 0.0156907, 0.995919, 0.0540318, 0, 0.0215147, 0.993735, 0.0538914, 0, 0.0280801, 0.992126, 0.0539557, 0, 0.0353323, 0.990266, 0.0540401, 0, 0.0432247, 0.986317, 0.0536064, 0, 0.0517172, 0.983213, 0.0534425, 0, 0.0607754, 0.978303, 0.0528622, 0, 0.0703698, 0.973665, 0.0523363, 0, 0.0804742, 0.968091, 0.0516165, 0, 0.0910667, 0.961026, 0.0505434, 0, 0.102128, 0.954333, 0.049523, 0, 0.113641, 0.946372, 0.0481698, 0, 0.125591, 0.938254, 0.0467674, 0, 0.137965, 0.929516, 0.0452341, 0, 0.150754, 0.920106, 0.0435083, 0, 0.163947, 0.910899, 0.0417399, 0, 0.177537, 0.901532, 0.0399389, 0, 0.191516, 0.891919, 0.0380901, 0, 0.205881, 0.882006, 0.0362341, 0, 0.220626, 0.871965, 0.0343444, 0, 0.235749, 0.862145, 0.0324832, 0, 0.251248, 0.852058, 0.0306681, 0, 0.267121, 0.84161, 0.0289097, 0, 0.283368, 0.830806, 0.0272079, 0, 0.299992, 0.820476, 0.0256089, 0, 0.316992, 0.809514, 0.0240394, 0, 0.334374, 0.797865, 0.0225379, 0, 0.35214, 0.785621, 0.0211235, 0, 0.370296, 0.773765, 0.0197908, 0, 0.388849, 0.761629, 0.0185235, 0, 0.407807, 0.748891, 0.0173358, 0, 0.427178, 0.736437, 0.0162305, 0, 0.446974, 0.723707, 0.0151778, 0, 0.467207, 0.710606, 0.0141791, 0, 0.487892, 0.698019, 0.0132592, 0, 0.509046, 0.686203, 0.0123887, 0, 0.530687, 0.675692, 0.0115976, 0, 0.552839, 0.664826, 0.0108325, 0, 0.575527, 0.65349, 0.0101348, 0, 0.59878, 0.641774, 0.00947756, 0, 0.622634, 0.629794, 0.00886058, 0, 0.647128, 0.617647, 0.00828526, 0, 0.672308, 0.60534, 0.00775312, 0, 0.698231, 0.592718, 0.00726033, 0, 0.724958, 0.579746, 0.00679731, 0, 0.752563, 0.566763, 0.00636111, 0, 0.781127, 0.553515, 0.00595228, 0, 0.810733, 0.540118, 0.00556876, 0, 0.841426, 0.527325, 0.00523051, 0, 0.873016, 0.514265, 0.00490712, 0, 0.904762, 0.501406, 0.00460297, 0, 0.936508, 0.488922, 0.00431247, 0, 0.968254, 0.476541, 0.0040472, 0, 1, 1, 0.0659184, 0, 0, 1, 0.0659185, 0, 0, 0.999998, 0.06592, 0, 0, 0.999988, 0.0659259, 0, 0, 0.999963, 0.0659423, 0, 0, 0.999907, 0.0659764, 0, 0.000374198, 0.999806, 0.0660376, 0, 0.00182071, 0.999639, 0.0661361, 0, 0.0043894, 0.999378, 0.0662814, 0, 0.00800055, 0.998985, 0.0664779, 0, 0.0125594, 0.998285, 0.0666914, 0, 0.0179786, 0.995071, 0.0661989, 0, 0.0241822, 0.993172, 0.0660454, 0, 0.031106, 0.991438, 0.0660105, 0, 0.0386952, 0.988428, 0.0656875, 0, 0.0469032, 0.985218, 0.0652913, 0, 0.0556905, 0.981128, 0.0647107, 0, 0.065023, 0.976015, 0.0638491, 0, 0.0748717, 0.97097, 0.062993, 0, 0.0852112, 0.964582, 0.0617927, 0, 0.0960199, 0.957383, 0.0603626, 0, 0.107279, 0.949969, 0.0588128, 0, 0.118971, 0.941843, 0.0570274, 0, 0.131084, 0.933624, 0.0551885, 0, 0.143604, 0.924543, 0.053122, 0, 0.156521, 0.914919, 0.0508897, 0, 0.169825, 0.905773, 0.0486418, 0, 0.18351, 0.896434, 0.0463364, 0, 0.197569, 0.887195, 0.0440623, 0, 0.211997, 0.877706, 0.0417799, 0, 0.226789, 0.867719, 0.03945, 0, 0.241944, 0.858587, 0.037243, 0, 0.257458, 0.849317, 0.0350956, 0, 0.273331, 0.839585, 0.0329852, 0, 0.289563, 0.829856, 0.0310028, 0, 0.306154, 0.819589, 0.0290953, 0, 0.323108, 0.809714, 0.0272738, 0, 0.340426, 0.79934, 0.0255631, 0, 0.358113, 0.788224, 0.0239175, 0, 0.376175, 0.776619, 0.0223831, 0, 0.394616, 0.76521, 0.0209298, 0, 0.413445, 0.753716, 0.0195786, 0, 0.432671, 0.741564, 0.0183001, 0, 0.452305, 0.729413, 0.0171259, 0, 0.472358, 0.717146, 0.0159933, 0, 0.492845, 0.70436, 0.0149495, 0, 0.513783, 0.69219, 0.0139681, 0, 0.535189, 0.680289, 0.0130577, 0, 0.557087, 0.669611, 0.0122198, 0, 0.5795, 0.659113, 0.0114174, 0, 0.602459, 0.648148, 0.0106729, 0, 0.625997, 0.636905, 0.00998997, 0, 0.650154, 0.625154, 0.00934313, 0, 0.674976, 0.613481, 0.00874839, 0, 0.700518, 0.60154, 0.00818265, 0, 0.726845, 0.58943, 0.00766889, 0, 0.754032, 0.576828, 0.00717153, 0, 0.782167, 0.564194, 0.00672696, 0, 0.811344, 0.551501, 0.00630863, 0, 0.841644, 0.538635, 0.00592177, 0, 0.873016, 0.525724, 0.00554888, 0, 0.904762, 0.513209, 0.00520225, 0, 0.936508, 0.500457, 0.00488231, 0, 0.968254, 0.48799, 0.00457153, 0, 1, 1, 0.0810131, 0, 0, 1, 0.0810133, 0, 0, 0.999997, 0.0810145, 0, 0, 0.999985, 0.08102, 0, 0, 0.999956, 0.0810347, 0, 1.95026e-05, 0.999893, 0.0810656, 0, 0.000719316, 0.999777, 0.0811205, 0, 0.00259774, 0.999583, 0.081208, 0, 0.00561807, 0.999281, 0.0813343, 0, 0.00967472, 0.998813, 0.0814969, 0, 0.0146627, 0.997597, 0.0815217, 0, 0.0204902, 0.994379, 0.0808502, 0, 0.0270802, 0.992744, 0.0806792, 0, 0.0343674, 0.990745, 0.0804589, 0, 0.0422974, 0.986646, 0.0796107, 0, 0.0508242, 0.983611, 0.0790913, 0, 0.0599087, 0.978869, 0.0780746, 0, 0.0695175, 0.973475, 0.0768218, 0, 0.0796223, 0.967845, 0.0754926, 0, 0.0901983, 0.960778, 0.0737063, 0, 0.101224, 0.953333, 0.0718052, 0, 0.112682, 0.945274, 0.0695946, 0, 0.124555, 0.936955, 0.0672492, 0, 0.136831, 0.928319, 0.0647732, 0, 0.149496, 0.919075, 0.0620947, 0, 0.162542, 0.909114, 0.0591816, 0, 0.175958, 0.900137, 0.0563917, 0, 0.189739, 0.891069, 0.0535392, 0, 0.203877, 0.882262, 0.0507642, 0, 0.218368, 0.873232, 0.0479793, 0, 0.233208, 0.864042, 0.045226, 0, 0.248393, 0.855002, 0.0425413, 0, 0.263923, 0.846569, 0.0400126, 0, 0.279796, 0.837714, 0.0375269, 0, 0.296012, 0.828918, 0.0352027, 0, 0.312573, 0.819783, 0.0330011, 0, 0.329479, 0.810129, 0.0308908, 0, 0.346734, 0.800866, 0.0289112, 0, 0.364342, 0.79093, 0.0270255, 0, 0.382307, 0.780593, 0.0252758, 0, 0.400637, 0.769511, 0.0236178, 0, 0.419337, 0.758558, 0.0220652, 0, 0.438418, 0.747632, 0.0206289, 0, 0.457889, 0.736146, 0.0192873, 0, 0.477761, 0.724093, 0.0180333, 0, 0.49805, 0.71234, 0.0168264, 0, 0.51877, 0.700201, 0.015746, 0, 0.53994, 0.687949, 0.0147027, 0, 0.561581, 0.676163, 0.0137512, 0, 0.583718, 0.665001, 0.0128655, 0, 0.60638, 0.65472, 0.0120366, 0, 0.629599, 0.644213, 0.0112604, 0, 0.653415, 0.633382, 0.0105413, 0, 0.677874, 0.62212, 0.00986498, 0, 0.70303, 0.610631, 0.00923308, 0, 0.728948, 0.599078, 0.00864206, 0, 0.755706, 0.587519, 0.00811784, 0, 0.783396, 0.575505, 0.00761237, 0, 0.812121, 0.563148, 0.00713949, 0, 0.841989, 0.550828, 0.00668379, 0, 0.873035, 0.538458, 0.00627715, 0, 0.904762, 0.525905, 0.00588336, 0, 0.936508, 0.513517, 0.00552687, 0, 0.968254, 0.501395, 0.00519681, 0, 1, 1, 0.0991506, 0, 0, 1, 0.0991504, 0, 0, 0.999996, 0.0991515, 0, 0, 0.999984, 0.0991558, 0, 0, 0.999947, 0.0991672, 0, 0.000114389, 0.999874, 0.0991912, 0, 0.00121503, 0.999739, 0.0992331, 0, 0.00356108, 0.999514, 0.0992983, 0, 0.00705578, 0.999159, 0.0993877, 0, 0.011574, 0.998586, 0.0994837, 0, 0.017003, 0.995731, 0.0988425, 0, 0.0232484, 0.993384, 0.098276, 0, 0.0302318, 0.991615, 0.0979269, 0, 0.0378884, 0.989029, 0.0973432, 0, 0.0461641, 0.985373, 0.0963539, 0, 0.0550136, 0.981278, 0.0952306, 0, 0.0643988, 0.975777, 0.0936233, 0, 0.0742868, 0.970526, 0.0920219, 0, 0.0846501, 0.963755, 0.0898912, 0, 0.0954644, 0.956676, 0.0876064, 0, 0.106709, 0.948099, 0.0847751, 0, 0.118367, 0.939718, 0.0818638, 0, 0.130423, 0.931305, 0.078857, 0, 0.142862, 0.922342, 0.0756127, 0, 0.155674, 0.912842, 0.0721473, 0, 0.168849, 0.903304, 0.0686195, 0, 0.182378, 0.89411, 0.0650589, 0, 0.196255, 0.885512, 0.0616022, 0, 0.210473, 0.877193, 0.0582434, 0, 0.225027, 0.86877, 0.0548979, 0, 0.239915, 0.860267, 0.0516095, 0, 0.255132, 0.851915, 0.048468, 0, 0.270678, 0.843912, 0.0454447, 0, 0.286551, 0.83604, 0.0425612, 0, 0.302751, 0.828245, 0.0398752, 0, 0.31928, 0.820159, 0.0373198, 0, 0.336138, 0.81167, 0.034916, 0, 0.35333, 0.802659, 0.0326402, 0, 0.370858, 0.793921, 0.0304901, 0, 0.388728, 0.784713, 0.0284857, 0, 0.406944, 0.774946, 0.0266186, 0, 0.425515, 0.76448, 0.0248593, 0, 0.444449, 0.753793, 0.0232114, 0, 0.463756, 0.743506, 0.0217039, 0, 0.483447, 0.732555, 0.0202841, 0, 0.503535, 0.720965, 0.0189648, 0, 0.524036, 0.709422, 0.0177189, 0, 0.544968, 0.697756, 0.0165626, 0, 0.56635, 0.685565, 0.015483, 0, 0.588208, 0.673987, 0.0144892, 0, 0.610569, 0.66244, 0.0135607, 0, 0.633466, 0.651675, 0.0126956, 0, 0.656936, 0.641598, 0.0118788, 0, 0.681025, 0.63121, 0.0111261, 0, 0.705788, 0.620514, 0.010437, 0, 0.731289, 0.609366, 0.00978747, 0, 0.757606, 0.598137, 0.00917257, 0, 0.784834, 0.586966, 0.00859778, 0, 0.813085, 0.575549, 0.00806803, 0, 0.842485, 0.563797, 0.00757294, 0, 0.87313, 0.551758, 0.00710592, 0, 0.904762, 0.539894, 0.0066841, 0, 0.936508, 0.527901, 0.00627901, 0, 0.968254, 0.515819, 0.00590506, 0, 1, 1, 0.120864, 0, 0, 1, 0.120864, 0, 0, 0.999996, 0.120864, 0, 0, 0.99998, 0.120867, 0, 0, 0.99994, 0.120872, 0, 0.000323781, 0.999852, 0.120884, 0, 0.00188693, 0.999693, 0.120903, 0, 0.00473489, 0.999426, 0.120929, 0, 0.00872704, 0.999002, 0.120955, 0, 0.0137237, 0.998235, 0.120918, 0, 0.0196068, 0.994608, 0.119764, 0, 0.0262803, 0.992997, 0.119265, 0, 0.0336657, 0.990968, 0.11863, 0, 0.0416987, 0.987002, 0.117261, 0, 0.0503261, 0.983524, 0.116009, 0, 0.0595035, 0.97875, 0.114252, 0, 0.0691935, 0.972652, 0.11193, 0, 0.0793645, 0.966613, 0.109555, 0, 0.0899894, 0.959275, 0.106612, 0, 0.101045, 0.951272, 0.103375, 0, 0.112512, 0.942323, 0.0996594, 0, 0.124372, 0.933679, 0.0958841, 0, 0.136611, 0.924822, 0.0919265, 0, 0.149216, 0.915742, 0.0878061, 0, 0.162176, 0.906348, 0.0834894, 0, 0.175482, 0.896883, 0.079085, 0, 0.189125, 0.88774, 0.0746745, 0, 0.203098, 0.87986, 0.0705773, 0, 0.217396, 0.871998, 0.0665005, 0, 0.232015, 0.864325, 0.0625413, 0, 0.24695, 0.856685, 0.0586781, 0, 0.2622, 0.84925, 0.0550063, 0, 0.277761, 0.841719, 0.0514727, 0, 0.293634, 0.834755, 0.0481398, 0, 0.309819, 0.827853, 0.0450172, 0, 0.326315, 0.820888, 0.0420969, 0, 0.343126, 0.813616, 0.0393702, 0, 0.360254, 0.805767, 0.0367771, 0, 0.377701, 0.797338, 0.0343274, 0, 0.395474, 0.789122, 0.0320529, 0, 0.413577, 0.780601, 0.0299485, 0, 0.432018, 0.771424, 0.0279812, 0, 0.450804, 0.761502, 0.0261054, 0, 0.469944, 0.751166, 0.0243942, 0, 0.489451, 0.741276, 0.0228087, 0, 0.509337, 0.730898, 0.0213265, 0, 0.529617, 0.719878, 0.0199307, 0, 0.550307, 0.708379, 0.0186574, 0, 0.571428, 0.697165, 0.0174446, 0, 0.593003, 0.685554, 0.0163144, 0, 0.615059, 0.673631, 0.015276, 0, 0.637628, 0.662385, 0.0143003, 0, 0.660746, 0.651059, 0.0134112, 0, 0.68446, 0.640451, 0.0125794, 0, 0.70882, 0.630536, 0.011793, 0, 0.733893, 0.620316, 0.0110547, 0, 0.759756, 0.609722, 0.0103668, 0, 0.786505, 0.598804, 0.00973009, 0, 0.814259, 0.587871, 0.00912812, 0, 0.843157, 0.577121, 0.00858916, 0, 0.87334, 0.566019, 0.00807333, 0, 0.904762, 0.554664, 0.00759687, 0, 0.936508, 0.543101, 0.00714759, 0, 0.968254, 0.531558, 0.00673418, 0, 1, 1, 0.146767, 0, 0, 1, 0.146767, 0, 0, 0.999997, 0.146767, 0, 0, 0.999977, 0.146765, 0, 3.20658e-06, 0.999929, 0.146762, 0, 0.000682576, 0.999823, 0.146753, 0, 0.00276402, 0.999633, 0.146735, 0, 0.00614771, 0.999314, 0.146699, 0, 0.0106613, 0.998796, 0.14662, 0, 0.0161546, 0.997124, 0.146107, 0, 0.0225063, 0.994062, 0.144857, 0, 0.0296198, 0.992154, 0.144011, 0, 0.037417, 0.989186, 0.142712, 0, 0.0458348, 0.985279, 0.140926, 0, 0.0548211, 0.980826, 0.13885, 0, 0.0643326, 0.975056, 0.136168, 0, 0.074333, 0.969005, 0.133217, 0, 0.0847917, 0.961554, 0.12959, 0, 0.0956828, 0.954206, 0.125886, 0, 0.106984, 0.945046, 0.121335, 0, 0.118675, 0.935678, 0.116492, 0, 0.130741, 0.926748, 0.111635, 0, 0.143166, 0.917764, 0.106625, 0, 0.155939, 0.908358, 0.101325, 0, 0.169049, 0.899219, 0.0960249, 0, 0.182487, 0.890089, 0.0906527, 0, 0.196245, 0.881488, 0.0853905, 0, 0.210317, 0.874031, 0.0804177, 0, 0.224697, 0.866932, 0.0756005, 0, 0.23938, 0.859976, 0.0709019, 0, 0.254364, 0.853375, 0.0664391, 0, 0.269646, 0.846971, 0.0622012, 0, 0.285223, 0.840483, 0.058129, 0, 0.301096, 0.833969, 0.0542762, 0, 0.317265, 0.82806, 0.0507042, 0, 0.333729, 0.822128, 0.047368, 0, 0.350491, 0.815989, 0.044272, 0, 0.367554, 0.809336, 0.0413444, 0, 0.38492, 0.802177, 0.038601, 0, 0.402594, 0.79441, 0.0360227, 0, 0.420582, 0.786573, 0.0336383, 0, 0.438891, 0.778619, 0.0314321, 0, 0.457527, 0.77, 0.029362, 0, 0.476499, 0.760698, 0.0274102, 0, 0.49582, 0.750932, 0.0256146, 0, 0.5155, 0.740993, 0.023974, 0, 0.535555, 0.731159, 0.0224182, 0, 0.556, 0.720836, 0.0209889, 0, 0.576855, 0.709913, 0.0196411, 0, 0.598143, 0.698415, 0.0183824, 0, 0.619888, 0.68745, 0.0172222, 0, 0.642123, 0.676154, 0.0161509, 0, 0.664883, 0.664383, 0.0151397, 0, 0.688211, 0.6533, 0.0141873, 0, 0.71216, 0.642072, 0.0133105, 0, 0.736792, 0.631412, 0.0124932, 0, 0.762186, 0.621622, 0.0117408, 0, 0.788439, 0.611681, 0.0110358, 0, 0.815672, 0.60142, 0.0103775, 0, 0.844034, 0.59083, 0.00975623, 0, 0.873699, 0.580254, 0.00918084, 0, 0.904765, 0.569841, 0.00864721, 0, 0.936508, 0.559224, 0.00815731, 0, 0.968254, 0.548315, 0.00767924, 0, 1, 1, 0.177563, 0, 0, 1, 0.177563, 0, 0, 0.999994, 0.177562, 0, 0, 0.999972, 0.177555, 0, 6.64171e-05, 0.999914, 0.177536, 0, 0.0012276, 0.999787, 0.177496, 0, 0.00388025, 0.999556, 0.17742, 0, 0.00783463, 0.999165, 0.177285, 0, 0.0128953, 0.9985, 0.177037, 0, 0.0189053, 0.995388, 0.175634, 0, 0.025742, 0.993102, 0.174375, 0, 0.033309, 0.990992, 0.173121, 0, 0.0415298, 0.986932, 0.170896, 0, 0.0503425, 0.982786, 0.16847, 0, 0.0596964, 0.977592, 0.165455, 0, 0.0695498, 0.971075, 0.161676, 0, 0.0798676, 0.963967, 0.157458, 0, 0.0906201, 0.956397, 0.152836, 0, 0.101783, 0.947489, 0.147467, 0, 0.113333, 0.937564, 0.14145, 0, 0.125254, 0.928182, 0.135383, 0, 0.137529, 0.919027, 0.129212, 0, 0.150144, 0.909618, 0.12276, 0, 0.163088, 0.900492, 0.116273, 0, 0.176351, 0.891671, 0.1098, 0, 0.189924, 0.883146, 0.103362, 0, 0.203799, 0.875151, 0.0970799, 0, 0.21797, 0.868338, 0.0911732, 0, 0.232433, 0.862033, 0.0854966, 0, 0.247182, 0.856107, 0.0800691, 0, 0.262216, 0.850644, 0.0749618, 0, 0.27753, 0.845261, 0.070079, 0, 0.293124, 0.839885, 0.0654321, 0, 0.308997, 0.834609, 0.0610975, 0, 0.325149, 0.829083, 0.0569741, 0, 0.341581, 0.82404, 0.0531736, 0, 0.358294, 0.818968, 0.049665, 0, 0.37529, 0.813496, 0.0463856, 0, 0.392573, 0.807533, 0.0433217, 0, 0.410148, 0.80099, 0.0404402, 0, 0.428019, 0.793891, 0.0377578, 0, 0.446192, 0.786281, 0.0352616, 0, 0.464676, 0.778773, 0.0329577, 0, 0.483478, 0.770737, 0.030808, 0, 0.502608, 0.762094, 0.0287964, 0, 0.522079, 0.752898, 0.0269254, 0, 0.541905, 0.743306, 0.0251926, 0, 0.5621, 0.733416, 0.023595, 0, 0.582684, 0.723742, 0.0221155, 0, 0.603677, 0.713542, 0.0207435, 0, 0.625106, 0.702755, 0.019434, 0, 0.646998, 0.691484, 0.0182046, 0, 0.66939, 0.680531, 0.0170771, 0, 0.692324, 0.66953, 0.0160339, 0, 0.715849, 0.658126, 0.0150677, 0, 0.740028, 0.646933, 0.0141551, 0, 0.764937, 0.636107, 0.0133179, 0, 0.790673, 0.625271, 0.0125284, 0, 0.817358, 0.615225, 0.0117937, 0, 0.84515, 0.605678, 0.0111181, 0, 0.874244, 0.59583, 0.0104759, 0, 0.904828, 0.585704, 0.00986672, 0, 0.936508, 0.575413, 0.00929712, 0, 0.968254, 0.565373, 0.00876713, 0, 1, 1, 0.214058, 0, 0, 0.999999, 0.214058, 0, 0, 0.999994, 0.214055, 0, 0, 0.999966, 0.214039, 0, 0.000259642, 0.999893, 0.213998, 0, 0.00200075, 0.999737, 0.21391, 0, 0.00527775, 0.999449, 0.213745, 0, 0.00983959, 0.99896, 0.213458, 0, 0.0154755, 0.9979, 0.212855, 0, 0.0220249, 0.994278, 0.210779, 0, 0.0293654, 0.992254, 0.20926, 0, 0.0374021, 0.98881, 0.206908, 0, 0.0460604, 0.984715, 0.204009, 0, 0.0552802, 0.979738, 0.200471, 0, 0.0650127, 0.972884, 0.195813, 0, 0.0752175, 0.965996, 0.190856, 0, 0.0858612, 0.957974, 0.185077, 0, 0.0969155, 0.949155, 0.17868, 0, 0.108356, 0.939288, 0.171513, 0, 0.120163, 0.928996, 0.163838, 0, 0.132319, 0.919563, 0.156246, 0, 0.144808, 0.910004, 0.148359, 0, 0.157618, 0.900791, 0.140417, 0, 0.170737, 0.892135, 0.132569, 0, 0.184155, 0.883803, 0.124741, 0, 0.197866, 0.876034, 0.117091, 0, 0.211861, 0.869219, 0.109835, 0, 0.226134, 0.863062, 0.102859, 0, 0.240682, 0.857795, 0.0962928, 0, 0.255499, 0.853009, 0.0900725, 0, 0.270583, 0.848603, 0.0842101, 0, 0.285931, 0.844335, 0.0786527, 0, 0.301542, 0.840208, 0.0734397, 0, 0.317415, 0.836035, 0.0685334, 0, 0.33355, 0.83172, 0.0639275, 0, 0.349948, 0.827135, 0.0595909, 0, 0.36661, 0.822797, 0.0556204, 0, 0.383539, 0.818387, 0.0519394, 0, 0.400738, 0.813565, 0.0485317, 0, 0.41821, 0.808142, 0.0453138, 0, 0.435961, 0.802212, 0.0423354, 0, 0.453997, 0.79573, 0.0395553, 0, 0.472324, 0.788741, 0.036988, 0, 0.490951, 0.781093, 0.0345688, 0, 0.509887, 0.773597, 0.0323297, 0, 0.529144, 0.765622, 0.0302719, 0, 0.548735, 0.757083, 0.0283477, 0, 0.568674, 0.747992, 0.0265562, 0, 0.588979, 0.738591, 0.0248844, 0, 0.609671, 0.728719, 0.0233342, 0, 0.630773, 0.719146, 0.0219081, 0, 0.652314, 0.709165, 0.0205711, 0, 0.674328, 0.69875, 0.0193248, 0, 0.696854, 0.687884, 0.0181582, 0, 0.719942, 0.676818, 0.0170746, 0, 0.743651, 0.666247, 0.0160718, 0, 0.768057, 0.655284, 0.0151262, 0, 0.793253, 0.64401, 0.0142561, 0, 0.819363, 0.633353, 0.0134327, 0, 0.846547, 0.622674, 0.012653, 0, 0.875017, 0.612265, 0.0119354, 0, 0.905021, 0.602455, 0.0112533, 0, 0.936508, 0.593147, 0.0106234, 0, 0.968254, 0.583592, 0.0100213, 0, 1, 1, 0.25717, 0, 0, 1, 0.25717, 0, 0, 0.999992, 0.257164, 0, 0, 0.999958, 0.257135, 0, 0.000641715, 0.999864, 0.25706, 0, 0.00305314, 0.999666, 0.256897, 0, 0.00700975, 0.999302, 0.256596, 0, 0.0122194, 0.998663, 0.25607, 0, 0.0184622, 0.995607, 0.254123, 0, 0.0255773, 0.993094, 0.252081, 0, 0.0334439, 0.9907, 0.249867, 0, 0.0419696, 0.98594, 0.246118, 0, 0.0510823, 0.981214, 0.242049, 0, 0.0607242, 0.974966, 0.236869, 0, 0.0708486, 0.967589, 0.230724, 0, 0.081417, 0.95915, 0.223635, 0, 0.0923974, 0.950257, 0.21596, 0, 0.103763, 0.940165, 0.207296, 0, 0.115491, 0.929396, 0.197901, 0, 0.127562, 0.919288, 0.188437, 0, 0.13996, 0.909428, 0.178762, 0, 0.15267, 0.900105, 0.169072, 0, 0.165679, 0.891418, 0.159478, 0, 0.178979, 0.883347, 0.15002, 0, 0.192558, 0.875992, 0.140813, 0, 0.20641, 0.869466, 0.13196, 0, 0.220529, 0.863699, 0.123501, 0, 0.234907, 0.858553, 0.115436, 0, 0.249542, 0.854379, 0.107901, 0, 0.264428, 0.850894, 0.10088, 0, 0.279564, 0.847632, 0.0942296, 0, 0.294947, 0.844571, 0.0879861, 0, 0.310575, 0.84163, 0.0821534, 0, 0.326448, 0.838542, 0.0766409, 0, 0.342566, 0.835412, 0.0715322, 0, 0.358929, 0.831899, 0.0666883, 0, 0.37554, 0.828177, 0.0622175, 0, 0.392399, 0.82416, 0.0580452, 0, 0.409511, 0.820393, 0.054267, 0, 0.426878, 0.816068, 0.0507172, 0, 0.444506, 0.811201, 0.0474041, 0, 0.4624, 0.805785, 0.0443174, 0, 0.480566, 0.799878, 0.0414562, 0, 0.499013, 0.793469, 0.0388147, 0, 0.517749, 0.786473, 0.0363453, 0, 0.536785, 0.778874, 0.0340225, 0, 0.556134, 0.771277, 0.0318599, 0, 0.575809, 0.763426, 0.0298859, 0, 0.595827, 0.755044, 0.0280357, 0, 0.616207, 0.746161, 0.0262979, 0, 0.636973, 0.737124, 0.0247295, 0, 0.65815, 0.72761, 0.0232514, 0, 0.679772, 0.717822, 0.0218755, 0, 0.701876, 0.708279, 0.0205942, 0, 0.724509, 0.698333, 0.0193947, 0, 0.74773, 0.68802, 0.0182717, 0, 0.771609, 0.677321, 0.0172044, 0, 0.79624, 0.666504, 0.0162122, 0, 0.821743, 0.656184, 0.0152924, 0, 0.84828, 0.64556, 0.0144326, 0, 0.876069, 0.634636, 0.0136157, 0, 0.905404, 0.624124, 0.0128612, 0, 0.936508, 0.613914, 0.0121435, 0, 0.968254, 0.603589, 0.0114887, 0, 1, 1, 0.307946, 0, 0, 0.999999, 0.307945, 0, 0, 0.999988, 0.307934, 0, 2.04479e-05, 0.999944, 0.307886, 0, 0.00127833, 0.999824, 0.307756, 0, 0.00445047, 0.999565, 0.30748, 0, 0.00914673, 0.999085, 0.306966, 0, 0.0150498, 0.998103, 0.306004, 0, 0.0219367, 0.994249, 0.303028, 0, 0.0296485, 0.991807, 0.300435, 0, 0.038068, 0.987773, 0.296554, 0, 0.0471062, 0.982673, 0.2916, 0, 0.0566942, 0.976623, 0.285641, 0, 0.0667768, 0.968757, 0.27815, 0, 0.0773099, 0.959849, 0.269529, 0, 0.088257, 0.950663, 0.260248, 0, 0.0995879, 0.940129, 0.249704, 0, 0.111277, 0.92895, 0.238291, 0, 0.123304, 0.917996, 0.226501, 0, 0.13565, 0.907813, 0.214669, 0, 0.148299, 0.898305, 0.202835, 0, 0.161237, 0.889626, 0.191158, 0, 0.174455, 0.88175, 0.179695, 0, 0.187941, 0.874715, 0.168548, 0, 0.201687, 0.868746, 0.15792, 0, 0.215687, 0.863703, 0.147807, 0, 0.229933, 0.859315, 0.138149, 0, 0.24442, 0.855538, 0.128993, 0, 0.259145, 0.852428, 0.120414, 0, 0.274103, 0.850168, 0.112498, 0, 0.289293, 0.848132, 0.105054, 0, 0.304711, 0.846291, 0.0981087, 0, 0.320357, 0.844431, 0.0915942, 0, 0.33623, 0.842493, 0.0855056, 0, 0.35233, 0.840368, 0.0798204, 0, 0.368658, 0.83798, 0.0745097, 0, 0.385214, 0.83523, 0.0695424, 0, 0.402002, 0.832091, 0.0649092, 0, 0.419023, 0.828667, 0.0606291, 0, 0.436282, 0.824805, 0.0566523, 0, 0.453782, 0.820988, 0.0530229, 0, 0.471529, 0.816635, 0.0496364, 0, 0.489528, 0.811725, 0.0464658, 0, 0.507788, 0.806316, 0.0435082, 0, 0.526317, 0.800469, 0.0407873, 0, 0.545124, 0.794107, 0.038255, 0, 0.564221, 0.787218, 0.0358825, 0, 0.583621, 0.779872, 0.0336785, 0, 0.603341, 0.772097, 0.0316379, 0, 0.623397, 0.764484, 0.0297379, 0, 0.643812, 0.756428, 0.0279581, 0, 0.664611, 0.748022, 0.0263153, 0, 0.685824, 0.739268, 0.0247799, 0, 0.707488, 0.73024, 0.0233385, 0, 0.729646, 0.720893, 0.0220035, 0, 0.752354, 0.71119, 0.0207555, 0, 0.77568, 0.701791, 0.0195843, 0, 0.799715, 0.692184, 0.0184891, 0, 0.824574, 0.682258, 0.0174541, 0, 0.850417, 0.67206, 0.0164873, 0, 0.877466, 0.661717, 0.0155959, 0, 0.90604, 0.651462, 0.0147519, 0, 0.936528, 0.641467, 0.0139727, 0, 0.968254, 0.631229, 0.0132363, 0, 1, 1, 0.367573, 0, 0, 0.999999, 0.367571, 0, 0, 0.999984, 0.367553, 0, 0.000183382, 0.999925, 0.367473, 0, 0.00225254, 0.999759, 0.367259, 0, 0.00628165, 0.99941, 0.366801, 0, 0.0117858, 0.998739, 0.365946, 0, 0.0184359, 0.995529, 0.363191, 0, 0.0260114, 0.992875, 0.360171, 0, 0.0343581, 0.989135, 0.355981, 0, 0.0433637, 0.984166, 0.350401, 0, 0.0529438, 0.977871, 0.343348, 0, 0.0630334, 0.96951, 0.334341, 0, 0.0735805, 0.959964, 0.323862, 0, 0.0845437, 0.950162, 0.312521, 0, 0.095889, 0.938882, 0.299577, 0, 0.107588, 0.926992, 0.285573, 0, 0.119617, 0.915589, 0.271212, 0, 0.131957, 0.904791, 0.256611, 0, 0.144591, 0.895177, 0.242224, 0, 0.157503, 0.886403, 0.227952, 0, 0.170682, 0.878957, 0.214192, 0, 0.184117, 0.872418, 0.200795, 0, 0.197799, 0.867029, 0.188015, 0, 0.21172, 0.862835, 0.175975, 0, 0.225873, 0.859411, 0.164526, 0, 0.240253, 0.856655, 0.153693, 0, 0.254854, 0.854519, 0.14352, 0, 0.269673, 0.852828, 0.13397, 0, 0.284707, 0.851412, 0.124984, 0, 0.299953, 0.850609, 0.116748, 0, 0.315408, 0.849855, 0.10905, 0, 0.331073, 0.849017, 0.101839, 0, 0.346946, 0.848079, 0.0951359, 0, 0.363028, 0.846911, 0.0888774, 0, 0.379318, 0.845445, 0.0830375, 0, 0.395818, 0.84362, 0.0775844, 0, 0.41253, 0.841411, 0.0725054, 0, 0.429457, 0.838768, 0.0677691, 0, 0.446602, 0.835801, 0.0634016, 0, 0.463968, 0.832341, 0.0593095, 0, 0.481561, 0.828424, 0.0555121, 0, 0.499386, 0.824312, 0.052024, 0, 0.51745, 0.819918, 0.0487865, 0, 0.535761, 0.815072, 0.0457801, 0, 0.554328, 0.809863, 0.0430184, 0, 0.573162, 0.804164, 0.0404245, 0, 0.592275, 0.798034, 0.0380146, 0, 0.611681, 0.791436, 0.0357436, 0, 0.631398, 0.784498, 0.0336475, 0, 0.651445, 0.777125, 0.0316666, 0, 0.671845, 0.769365, 0.0298122, 0, 0.692628, 0.761579, 0.0281001, 0, 0.713827, 0.753746, 0.0265049, 0, 0.735484, 0.745573, 0.0250067, 0, 0.75765, 0.737083, 0.0236026, 0, 0.78039, 0.728545, 0.0223302, 0, 0.803789, 0.719691, 0.0211243, 0, 0.82796, 0.710569, 0.0199983, 0, 0.853056, 0.701216, 0.0189569, 0, 0.879298, 0.692094, 0.0179702, 0, 0.907014, 0.682909, 0.0170418, 0, 0.936691, 0.673509, 0.0161732, 0, 0.968254, 0.663863, 0.0153406, 0, 1, 1, 0.437395, 0, 0, 0.999998, 0.437394, 0, 0, 0.99998, 0.437363, 0, 0.000616704, 0.999891, 0.437232, 0, 0.00367925, 0.999656, 0.436877, 0, 0.00867446, 0.999148, 0.436121, 0, 0.0150679, 0.997959, 0.434564, 0, 0.022531, 0.993464, 0.430134, 0, 0.0308507, 0.990606, 0.426077, 0, 0.0398805, 0.985027, 0.419397, 0, 0.0495148, 0.978491, 0.41118, 0, 0.0596749, 0.969643, 0.40048, 0, 0.0703001, 0.959189, 0.38769, 0, 0.0813427, 0.948223, 0.373575, 0, 0.0927641, 0.935955, 0.357622, 0, 0.104533, 0.923237, 0.34043, 0, 0.116624, 0.911074, 0.322735, 0, 0.129015, 0.899724, 0.30479, 0, 0.141687, 0.890189, 0.287392, 0, 0.154626, 0.881796, 0.270248, 0, 0.167818, 0.874781, 0.253659, 0, 0.181252, 0.869166, 0.237786, 0, 0.194918, 0.864725, 0.222618, 0, 0.208807, 0.861565, 0.208356, 0, 0.222913, 0.859284, 0.194867, 0, 0.237229, 0.857677, 0.18212, 0, 0.25175, 0.856714, 0.17018, 0, 0.266473, 0.856155, 0.158969, 0, 0.281392, 0.8558, 0.148413, 0, 0.296505, 0.855672, 0.138578, 0, 0.311811, 0.855538, 0.129345, 0, 0.327306, 0.855689, 0.120861, 0, 0.342991, 0.855767, 0.112969, 0, 0.358864, 0.855618, 0.105593, 0, 0.374925, 0.85525, 0.0987451, 0, 0.391176, 0.854583, 0.0923727, 0, 0.407616, 0.853534, 0.0864143, 0, 0.424249, 0.852061, 0.0808338, 0, 0.441076, 0.850253, 0.0756771, 0, 0.4581, 0.848004, 0.0708612, 0, 0.475324, 0.845333, 0.0663784, 0, 0.492754, 0.842376, 0.0622631, 0, 0.510394, 0.838956, 0.0584112, 0, 0.528251, 0.835121, 0.0548328, 0, 0.546331, 0.830842, 0.0514838, 0, 0.564644, 0.826212, 0.048355, 0, 0.583198, 0.821522, 0.0454714, 0, 0.602005, 0.816551, 0.0428263, 0, 0.621078, 0.811211, 0.0403612, 0, 0.640434, 0.805479, 0.038039, 0, 0.660089, 0.799409, 0.0358739, 0, 0.680066, 0.79306, 0.0338727, 0, 0.70039, 0.786395, 0.0319985, 0, 0.721094, 0.779416, 0.030241, 0, 0.742215, 0.77214, 0.0285951, 0, 0.7638, 0.764636, 0.0270747, 0, 0.785912, 0.756836, 0.0256354, 0, 0.808628, 0.749315, 0.0243027, 0, 0.832055, 0.741561, 0.0230497, 0, 0.856338, 0.733589, 0.0218801, 0, 0.88169, 0.725479, 0.020784, 0, 0.908441, 0.717255, 0.0197702, 0, 0.937125, 0.708829, 0.0188168, 0, 0.968254, 0.700191, 0.0179113, 0, 1, 1, 0.518937, 0, 0, 0.999998, 0.518933, 0, 0, 0.999967, 0.518883, 0, 0.00147741, 0.999832, 0.51866, 0, 0.00573221, 0.999466, 0.518057, 0, 0.011826, 0.998644, 0.516752, 0, 0.0192116, 0.994458, 0.512347, 0, 0.027573, 0.991223, 0.507675, 0, 0.0367099, 0.985515, 0.500188, 0, 0.046487, 0.978308, 0.490408, 0, 0.0568071, 0.968359, 0.477357, 0, 0.0675984, 0.95682, 0.461752, 0, 0.0788059, 0.943929, 0.443796, 0, 0.090386, 0.930224, 0.423893, 0, 0.102304, 0.916514, 0.402682, 0, 0.114532, 0.903653, 0.380914, 0, 0.127047, 0.892315, 0.359212, 0, 0.139828, 0.882942, 0.338102, 0, 0.152861, 0.875438, 0.31773, 0, 0.16613, 0.869642, 0.298186, 0, 0.179624, 0.865304, 0.279491, 0, 0.193332, 0.862382, 0.261804, 0, 0.207247, 0.860666, 0.245146, 0, 0.22136, 0.859788, 0.229406, 0, 0.235666, 0.859608, 0.214605, 0, 0.250158, 0.859912, 0.200691, 0, 0.264832, 0.86053, 0.187623, 0, 0.279684, 0.861368, 0.17539, 0, 0.294711, 0.862237, 0.163901, 0, 0.309911, 0.863127, 0.153175, 0, 0.32528, 0.863923, 0.143147, 0, 0.340819, 0.864567, 0.133781, 0, 0.356524, 0.865013, 0.125042, 0, 0.372397, 0.86539, 0.116952, 0, 0.388438, 0.865591, 0.109476, 0, 0.404645, 0.865517, 0.102542, 0, 0.421022, 0.865084, 0.0960688, 0, 0.437569, 0.864309, 0.0900499, 0, 0.454287, 0.863151, 0.0844328, 0, 0.471181, 0.861649, 0.0792218, 0, 0.488253, 0.859742, 0.0743482, 0, 0.505507, 0.857446, 0.0697963, 0, 0.522947, 0.854757, 0.0655364, 0, 0.54058, 0.851783, 0.061608, 0, 0.558412, 0.848516, 0.0579701, 0, 0.576449, 0.844897, 0.0545742, 0, 0.594701, 0.840956, 0.0514167, 0, 0.613178, 0.836676, 0.0484598, 0, 0.631892, 0.832075, 0.0456934, 0, 0.650856, 0.827191, 0.0431178, 0, 0.670088, 0.822295, 0.0407718, 0, 0.689606, 0.817294, 0.0386032, 0, 0.709434, 0.812013, 0.0365675, 0, 0.7296, 0.806465, 0.0346547, 0, 0.750138, 0.800691, 0.0328717, 0, 0.771093, 0.794709, 0.031211, 0, 0.792519, 0.788493, 0.0296504, 0, 0.814488, 0.782049, 0.0281782, 0, 0.837097, 0.775403, 0.0267965, 0, 0.860481, 0.76857, 0.0255002, 0, 0.884842, 0.761536, 0.0242759, 0, 0.910494, 0.754303, 0.0231142, 0, 0.937985, 0.74692, 0.0220305, 0, 0.968254, 0.739745, 0.0210192, 0, 1, 1, 0.613914, 0, 0, 0.999996, 0.613907, 0, 9.63597e-05, 0.999942, 0.613814, 0, 0.00301247, 0.999704, 0.613407, 0, 0.00870385, 0.999046, 0.612302, 0, 0.0160714, 0.995516, 0.608266, 0, 0.0245899, 0.991726, 0.602863, 0, 0.0339681, 0.985157, 0.593956, 0, 0.0440254, 0.97642, 0.581748, 0, 0.0546409, 0.964404, 0.565183, 0, 0.0657284, 0.950601, 0.545273, 0, 0.0772246, 0.935158, 0.522129, 0, 0.0890812, 0.919364, 0.496782, 0, 0.10126, 0.904754, 0.470571, 0, 0.113731, 0.89176, 0.444037, 0, 0.126469, 0.881492, 0.418322, 0, 0.139454, 0.873656, 0.393522, 0, 0.15267, 0.868053, 0.369795, 0, 0.166101, 0.864336, 0.347171, 0, 0.179736, 0.862259, 0.325737, 0, 0.193565, 0.861556, 0.305532, 0, 0.207578, 0.861776, 0.286416, 0, 0.221769, 0.862661, 0.268355, 0, 0.23613, 0.864015, 0.251334, 0, 0.250656, 0.865711, 0.235352, 0, 0.265343, 0.867519, 0.220302, 0, 0.280187, 0.869351, 0.206161, 0, 0.295183, 0.871144, 0.192908, 0, 0.31033, 0.872839, 0.180505, 0, 0.325624, 0.874307, 0.168848, 0, 0.341065, 0.875667, 0.158021, 0, 0.35665, 0.876758, 0.147877, 0, 0.37238, 0.87764, 0.138441, 0, 0.388253, 0.878237, 0.129627, 0, 0.404269, 0.878563, 0.121415, 0, 0.42043, 0.878572, 0.113741, 0, 0.436735, 0.87842, 0.106652, 0, 0.453187, 0.878057, 0.100097, 0, 0.469786, 0.877413, 0.0940128, 0, 0.486536, 0.87646, 0.0883462, 0, 0.503439, 0.875233, 0.0830924, 0, 0.520498, 0.8737, 0.0781975, 0, 0.537717, 0.871873, 0.07364, 0, 0.555102, 0.86978, 0.0694103, 0, 0.572657, 0.867405, 0.0654696, 0, 0.59039, 0.864751, 0.0617914, 0, 0.608307, 0.861818, 0.0583491, 0, 0.626419, 0.858645, 0.0551443, 0, 0.644733, 0.855307, 0.0521894, 0, 0.663264, 0.851736, 0.0494334, 0, 0.682025, 0.847927, 0.0468504, 0, 0.701032, 0.843888, 0.0444261, 0, 0.720308, 0.839629, 0.0421497, 0, 0.739875, 0.835158, 0.0400082, 0, 0.759764, 0.830509, 0.0380076, 0, 0.780014, 0.825714, 0.0361488, 0, 0.800673, 0.820729, 0.0343956, 0, 0.821803, 0.815751, 0.0327781, 0, 0.843492, 0.810752, 0.031275, 0, 0.86586, 0.805587, 0.0298542, 0, 0.889087, 0.800317, 0.0285397, 0, 0.913466, 0.79489, 0.0272948, 0, 0.93952, 0.789314, 0.0261139, 0, 0.96835, 0.783593, 0.0249938, 0, 1, 1, 0.724258, 0, 0, 0.999992, 0.724243, 0, 0.000726889, 0.99987, 0.724044, 0, 0.00569574, 0.999336, 0.72317, 0, 0.0131702, 0.996271, 0.719432, 0, 0.0220738, 0.991159, 0.712576, 0, 0.0319405, 0.982465, 0.700927, 0, 0.0425202, 0.97049, 0.684297, 0, 0.0536599, 0.953973, 0.661244, 0, 0.065258, 0.935546, 0.633804, 0, 0.0772427, 0.916596, 0.603071, 0, 0.0895616, 0.899353, 0.57105, 0, 0.102175, 0.885216, 0.539206, 0, 0.11505, 0.875076, 0.508714, 0, 0.128164, 0.868334, 0.479571, 0, 0.141495, 0.864414, 0.451796, 0, 0.155026, 0.862678, 0.425328, 0, 0.168745, 0.862835, 0.400352, 0, 0.182639, 0.864067, 0.376532, 0, 0.196699, 0.866086, 0.35391, 0, 0.210915, 0.868557, 0.332424, 0, 0.225282, 0.871271, 0.312053, 0, 0.239792, 0.874058, 0.292764, 0, 0.25444, 0.8768, 0.27453, 0, 0.269223, 0.87939, 0.257297, 0, 0.284135, 0.8819, 0.24114, 0, 0.299174, 0.884187, 0.225934, 0, 0.314337, 0.886262, 0.211669, 0, 0.329622, 0.888119, 0.198311, 0, 0.345026, 0.889709, 0.185783, 0, 0.360549, 0.891054, 0.174063, 0, 0.376189, 0.892196, 0.163143, 0, 0.391946, 0.893101, 0.152952, 0, 0.407819, 0.893803, 0.143475, 0, 0.423808, 0.894277, 0.134647, 0, 0.439914, 0.894532, 0.126434, 0, 0.456137, 0.894576, 0.1188, 0, 0.472479, 0.894393, 0.111694, 0, 0.48894, 0.893976, 0.105069, 0, 0.505523, 0.893346, 0.0989077, 0, 0.52223, 0.892502, 0.0931724, 0, 0.539064, 0.891441, 0.0878276, 0, 0.556028, 0.890276, 0.082903, 0, 0.573125, 0.888972, 0.0783505, 0, 0.590361, 0.887469, 0.0741083, 0, 0.607741, 0.885785, 0.0701633, 0, 0.62527, 0.883914, 0.0664835, 0, 0.642957, 0.881872, 0.0630567, 0, 0.660809, 0.879651, 0.0598527, 0, 0.678836, 0.877267, 0.0568615, 0, 0.69705, 0.874717, 0.05406, 0, 0.715465, 0.872012, 0.0514378, 0, 0.734098, 0.869157, 0.0489805, 0, 0.752968, 0.866155, 0.0466727, 0, 0.772101, 0.863014, 0.0445056, 0, 0.791529, 0.859748, 0.0424733, 0, 0.81129, 0.856416, 0.0405957, 0, 0.831438, 0.852958, 0.0388273, 0, 0.852044, 0.849382, 0.0371619, 0, 0.87321, 0.845694, 0.0355959, 0, 0.89509, 0.841893, 0.0341155, 0, 0.917932, 0.837981, 0.0327141, 0, 0.942204, 0.833963, 0.0313856, 0, 0.968981, 0.829847, 0.0301275, 0, 1, 1, 0.85214, 0, 0, 0.999969, 0.852095, 0, 0.00279627, 0.999483, 0.851408, 0, 0.0107635, 0.994545, 0.84579, 0, 0.0206454, 0.986188, 0.835231, 0, 0.0315756, 0.969847, 0.814687, 0, 0.0432021, 0.945951, 0.783735, 0, 0.0553396, 0.91917, 0.746074, 0, 0.0678766, 0.895488, 0.706938, 0, 0.0807395, 0.878232, 0.669534, 0, 0.0938767, 0.868252, 0.635168, 0, 0.10725, 0.863873, 0.603069, 0, 0.120832, 0.863369, 0.572514, 0, 0.134598, 0.86545, 0.543169, 0, 0.148533, 0.868803, 0.514578, 0, 0.16262, 0.872794, 0.486762, 0, 0.176849, 0.87702, 0.459811, 0, 0.19121, 0.881054, 0.433654, 0, 0.205694, 0.884974, 0.408574, 0, 0.220294, 0.888587, 0.384525, 0, 0.235005, 0.891877, 0.36156, 0, 0.24982, 0.894793, 0.339661, 0, 0.264737, 0.89743, 0.318913, 0, 0.279751, 0.899796, 0.299302, 0, 0.294859, 0.901943, 0.280843, 0, 0.310058, 0.903858, 0.263481, 0, 0.325346, 0.905574, 0.247197, 0, 0.340721, 0.907069, 0.231915, 0, 0.356181, 0.908379, 0.217614, 0, 0.371725, 0.90952, 0.20425, 0, 0.387353, 0.910483, 0.191758, 0, 0.403063, 0.91128, 0.180092, 0, 0.418854, 0.911936, 0.169222, 0, 0.434727, 0.912454, 0.159098, 0, 0.450682, 0.912835, 0.149668, 0, 0.466718, 0.913078, 0.140884, 0, 0.482837, 0.913192, 0.132709, 0, 0.499038, 0.913175, 0.125095, 0, 0.515324, 0.91304, 0.118012, 0, 0.531695, 0.912781, 0.111417, 0, 0.548153, 0.91241, 0.105281, 0, 0.5647, 0.911924, 0.0995691, 0, 0.581338, 0.911331, 0.0942531, 0, 0.59807, 0.910637, 0.0893076, 0, 0.6149, 0.90984, 0.0846998, 0, 0.63183, 0.908941, 0.0804044, 0, 0.648865, 0.907944, 0.0763984, 0, 0.666011, 0.906857, 0.0726638, 0, 0.683273, 0.90568, 0.0691783, 0, 0.700659, 0.904416, 0.0659222, 0, 0.718176, 0.903067, 0.0628782, 0, 0.735834, 0.901637, 0.0600307, 0, 0.753646, 0.900128, 0.0573647, 0, 0.771625, 0.898544, 0.0548668, 0, 0.78979, 0.89689, 0.052527, 0, 0.808162, 0.895165, 0.0503306, 0, 0.826771, 0.893371, 0.0482668, 0, 0.845654, 0.891572, 0.0463605, 0, 0.864863, 0.889763, 0.0445998, 0, 0.884472, 0.887894, 0.0429451, 0, 0.904592, 0.885967, 0.0413884, 0, 0.925407, 0.883984, 0.0399225, 0, 0.947271, 0.881945, 0.0385405, 0, 0.97105, 0.879854, 0.0372362, 0, 1, 0.999804, 0.995833, 0, 0, 0.938155, 0.933611, 0, 0.0158731, 0.864755, 0.854311, 0, 0.0317461, 0.888594, 0.865264, 0, 0.0476191, 0.905575, 0.863922, 0, 0.0634921, 0.915125, 0.850558, 0, 0.0793651, 0.920665, 0.829254, 0, 0.0952381, 0.924073, 0.802578, 0, 0.111111, 0.926304, 0.772211, 0, 0.126984, 0.927829, 0.739366, 0, 0.142857, 0.928924, 0.705033, 0, 0.15873, 0.92973, 0.670019, 0, 0.174603, 0.930339, 0.634993, 0, 0.190476, 0.930811, 0.600485, 0, 0.206349, 0.931191, 0.566897, 0, 0.222222, 0.93149, 0.534485, 0, 0.238095, 0.931737, 0.503429, 0, 0.253968, 0.931939, 0.473811, 0, 0.269841, 0.932108, 0.445668, 0, 0.285714, 0.93225, 0.418993, 0, 0.301587, 0.932371, 0.393762, 0, 0.31746, 0.932474, 0.369939, 0, 0.333333, 0.932562, 0.347479, 0, 0.349206, 0.932638, 0.326336, 0, 0.365079, 0.932703, 0.306462, 0, 0.380952, 0.93276, 0.287805, 0, 0.396825, 0.932809, 0.270313, 0, 0.412698, 0.932851, 0.253933, 0, 0.428571, 0.932887, 0.23861, 0, 0.444444, 0.932917, 0.224289, 0, 0.460317, 0.932943, 0.210917, 0, 0.47619, 0.932965, 0.19844, 0, 0.492063, 0.932982, 0.186807, 0, 0.507937, 0.932995, 0.175966, 0, 0.52381, 0.933005, 0.165869, 0, 0.539683, 0.933011, 0.156468, 0, 0.555556, 0.933013, 0.147719, 0, 0.571429, 0.933013, 0.139579, 0, 0.587302, 0.93301, 0.132007, 0, 0.603175, 0.933004, 0.124965, 0, 0.619048, 0.932994, 0.118416, 0, 0.634921, 0.932982, 0.112326, 0, 0.650794, 0.932968, 0.106663, 0, 0.666667, 0.93295, 0.101397, 0, 0.68254, 0.932931, 0.0964993, 0, 0.698413, 0.932908, 0.0919438, 0, 0.714286, 0.932883, 0.0877057, 0, 0.730159, 0.932856, 0.0837623, 0, 0.746032, 0.932827, 0.0800921, 0, 0.761905, 0.932796, 0.0766754, 0, 0.777778, 0.932762, 0.0734936, 0, 0.793651, 0.932727, 0.0705296, 0, 0.809524, 0.932689, 0.0677676, 0, 0.825397, 0.93265, 0.0651929, 0, 0.84127, 0.932609, 0.0627917, 0, 0.857143, 0.932565, 0.0605515, 0, 0.873016, 0.932521, 0.0584606, 0, 0.888889, 0.932474, 0.0565082, 0, 0.904762, 0.932427, 0.0546841, 0, 0.920635, 0.932377, 0.0529793, 0, 0.936508, 0.932326, 0.0513851, 0, 0.952381, 0.932274, 0.0498936, 0, 0.968254, 0.93222, 0.0484975, 0, 0.984127, 0.932164, 0.0471899, 0, 1 ];\n\n\t\t// data textures\n\t\t// TODO: figure out a way to compress the LTC BRDF data\n\n\t\tconst ltc_float_1 = new Float32Array( LTC_MAT_1 );\n\t\tconst ltc_float_2 = new Float32Array( LTC_MAT_2 );\n\n\t\tconst LTC_FLOAT_1 = new DataTexture( ltc_float_1, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\t\tconst LTC_FLOAT_2 = new DataTexture( ltc_float_2, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\n\t\tLTC_FLOAT_1.needsUpdate = true;\n\t\tLTC_FLOAT_2.needsUpdate = true;\n\n\t\tconst ltc_half_1 = new Uint16Array( LTC_MAT_1.length );\n\n\t\tLTC_MAT_1.forEach( function ( x, index ) {\n\n\t\t\tltc_half_1[ index ] = DataUtils.toHalfFloat( x );\n\n\t\t} );\n\n\t\tconst ltc_half_2 = new Uint16Array( LTC_MAT_2.length );\n\n\t\tLTC_MAT_2.forEach( function ( x, index ) {\n\n\t\t\tltc_half_2[ index ] = DataUtils.toHalfFloat( x );\n\n\t\t} );\n\n\t\tconst LTC_HALF_1 = new DataTexture( ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\t\tconst LTC_HALF_2 = new DataTexture( ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );\n\n\t\tLTC_HALF_1.needsUpdate = true;\n\t\tLTC_HALF_2.needsUpdate = true;\n\n\t\tthis.LTC_HALF_1 = LTC_HALF_1;\n\t\tthis.LTC_HALF_2 = LTC_HALF_2;\n\n\t\tthis.LTC_FLOAT_1 = LTC_FLOAT_1;\n\t\tthis.LTC_FLOAT_2 = LTC_FLOAT_2;\n\n\t\treturn this;\n\n\t}\n\n}\n\n/**\n * The first LTC FP16 data texture.\n *\n * @static\n * @type {?DataTexture}\n * @default null\n */\nRectAreaLightTexturesLib.LTC_HALF_1 = null;\n\n/**\n * The second LTC FP16 data texture.\n *\n * @static\n * @type {?DataTexture}\n * @default null\n */\nRectAreaLightTexturesLib.LTC_HALF_2 = null;\n\n/**\n * The first LTC FP32 data texture.\n *\n * @static\n * @type {?DataTexture}\n * @default null\n */\nRectAreaLightTexturesLib.LTC_FLOAT_1 = null;\n\n/**\n * The second LTC FP32 data texture.\n *\n * @static\n * @type {?DataTexture}\n * @default null\n */\nRectAreaLightTexturesLib.LTC_FLOAT_2 = null;\n\nexport { RectAreaLightTexturesLib };\n","import { UniformsLib } from 'three';\nimport { RectAreaLightTexturesLib } from './RectAreaLightTexturesLib.js';\n\n/**\n * This class is only relevant when using {@link RectAreaLight} with {@link WebGLRenderer}.\n *\n * Before rect area lights can be used, the internal uniform library of the renderer must be\n * enhanced with the following code.\n *\n * ```js\n * RectAreaLightUniformsLib.init();\n * ```\n *\n * @hideconstructor\n * @three_import import { RectAreaLightUniformsLib } from 'three/addons/lights/RectAreaLightUniformsLib.js';\n */\nclass RectAreaLightUniformsLib {\n\n\t/**\n\t * Inits the uniform library required when using rect area lights.\n\t */\n\tstatic init() {\n\n\t\tRectAreaLightTexturesLib.init();\n\n\t\tconst { LTC_FLOAT_1, LTC_FLOAT_2, LTC_HALF_1, LTC_HALF_2 } = RectAreaLightTexturesLib;\n\n\t\t// data textures\n\n\t\tUniformsLib.LTC_FLOAT_1 = LTC_FLOAT_1;\n\t\tUniformsLib.LTC_FLOAT_2 = LTC_FLOAT_2;\n\n\t\tUniformsLib.LTC_HALF_1 = LTC_HALF_1;\n\t\tUniformsLib.LTC_HALF_2 = LTC_HALF_2;\n\n\t}\n\n}\n\nexport { RectAreaLightUniformsLib };\n","// SetShadows.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport { RectAreaLightUniformsLib } from \"three/examples/jsm/lights/RectAreaLightUniformsLib\";\nimport { useViewContext } from \"../utils\";\n\nconst { useEffect, memo } = React;\n\nfunction SetShadows({ shadowMapEnabled, shadowType }): null {\n const { gl } = useViewContext();\n\n useEffect(\n function updateShadowMap() {\n gl.shadowMap.enabled = shadowMapEnabled;\n if (!shadowMapEnabled) {\n return;\n }\n\n switch (shadowType) {\n case \"basic\":\n gl.shadowMap.type = THREE.BasicShadowMap;\n break;\n case \"pcf\":\n gl.shadowMap.type = THREE.PCFShadowMap;\n break;\n case \"pcfsoft\":\n gl.shadowMap.type = THREE.PCFSoftShadowMap;\n break;\n default:\n gl.shadowMap.type = THREE.PCFSoftShadowMap;\n }\n },\n [shadowMapEnabled, shadowType, gl]\n );\n\n useEffect(function initRectAreaLightUniforms() {\n RectAreaLightUniformsLib.init();\n }, []);\n\n return null;\n}\n\nconst SetShadowsMemo = memo(SetShadows);\nSetShadowsMemo.displayName = \"SetShadows\";\nexport default SetShadowsMemo;\n","import {\n\tControls,\n\tMathUtils,\n\tMOUSE,\n\tQuaternion,\n\tVector2,\n\tVector3\n} from 'three';\n\n/**\n * Fires when the camera has been transformed by the controls.\n *\n * @event TrackballControls#change\n * @type {Object}\n */\nconst _changeEvent = { type: 'change' };\n\n/**\n * Fires when an interaction was initiated.\n *\n * @event TrackballControls#start\n * @type {Object}\n */\nconst _startEvent = { type: 'start' };\n\n/**\n * Fires when an interaction has finished.\n *\n * @event TrackballControls#end\n * @type {Object}\n */\nconst _endEvent = { type: 'end' };\n\nconst _EPS = 0.000001;\nconst _STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\nconst _v2 = new Vector2();\nconst _mouseChange = new Vector2();\nconst _objectUp = new Vector3();\nconst _pan = new Vector3();\nconst _axis = new Vector3();\nconst _quaternion = new Quaternion();\nconst _eyeDirection = new Vector3();\nconst _objectUpDirection = new Vector3();\nconst _objectSidewaysDirection = new Vector3();\nconst _moveDirection = new Vector3();\n\n/**\n * This class is similar to {@link OrbitControls}. However, it does not maintain a constant camera\n * `up` vector. That means if the camera orbits over the “north” and “south” poles, it does not flip\n * to stay \"right side up\".\n *\n * @augments Controls\n * @three_import import { TrackballControls } from 'three/addons/controls/TrackballControls.js';\n */\nclass TrackballControls extends Controls {\n\n\t/**\n\t * Constructs a new controls instance.\n\t *\n\t * @param {Object3D} object - The object that is managed by the controls.\n\t * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.\n\t */\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\t/**\n\t\t * Represents the properties of the screen. Automatically set when `handleResize()` is called.\n\t\t *\n\t\t * @type {Object}\n\t\t * @readonly\n\t\t */\n\t\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\t\t/**\n\t\t * The rotation speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t/**\n\t\t * The zoom speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1.2\n\t\t */\n\t\tthis.zoomSpeed = 1.2;\n\n\t\t/**\n\t\t * The pan speed.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.3\n\t\t */\n\t\tthis.panSpeed = 0.3;\n\n\t\t/**\n\t\t * Whether rotation is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.noRotate = false;\n\n\t\t/**\n\t\t * Whether zooming is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.noZoom = false;\n\n\t\t/**\n\t\t * Whether panning is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.noPan = false;\n\n\t\t/**\n\t\t * Whether damping is disabled or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.staticMoving = false;\n\n\t\t/**\n\t\t * Defines the intensity of damping. Only considered if `staticMoving` is set to `false`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.2\n\t\t */\n\t\tthis.dynamicDampingFactor = 0.2;\n\n\t\t/**\n\t\t * How far you can dolly in (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minDistance = 0;\n\n\t\t/**\n\t\t * How far you can dolly out (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxDistance = Infinity;\n\n\t\t/**\n\t\t * How far you can zoom in (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minZoom = 0;\n\n\t\t/**\n\t\t * How far you can zoom out (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxZoom = Infinity;\n\n\t\t/**\n\t\t * This array holds keycodes for controlling interactions.\n\t\t *\n\t\t * - When the first defined key is pressed, all mouse interactions (left, middle, right) performs orbiting.\n\t\t * - When the second defined key is pressed, all mouse interactions (left, middle, right) performs zooming.\n\t\t * - When the third defined key is pressed, all mouse interactions (left, middle, right) performs panning.\n\t\t *\n\t\t * Default is *KeyA, KeyS, KeyD* which represents A, S, D.\n\t\t *\n\t\t * @type {Array<string>}\n\t\t */\n\t\tthis.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];\n\n\t\t/**\n\t\t * This object contains references to the mouse actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tLEFT: THREE.MOUSE.ROTATE,\n\t\t * \tMIDDLE: THREE.MOUSE.DOLLY,\n\t\t * \tRIGHT: THREE.MOUSE.PAN\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t/**\n\t\t * The focus point of the controls.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.target = new Vector3();\n\n\t\t// internals\n\n\t\tthis.state = _STATE.NONE;\n\t\tthis.keyState = _STATE.NONE;\n\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._lastZoom = 1;\n\t\tthis._touchZoomDistanceStart = 0;\n\t\tthis._touchZoomDistanceEnd = 0;\n\t\tthis._lastAngle = 0;\n\n\t\tthis._eye = new Vector3();\n\n\t\tthis._movePrev = new Vector2();\n\t\tthis._moveCurr = new Vector2();\n\n\t\tthis._lastAxis = new Vector3();\n\n\t\tthis._zoomStart = new Vector2();\n\t\tthis._zoomEnd = new Vector2();\n\n\t\tthis._panStart = new Vector2();\n\t\tthis._panEnd = new Vector2();\n\n\t\tthis._pointers = [];\n\t\tthis._pointerPositions = {};\n\n\t\t// event listeners\n\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onPointerCancel = onPointerCancel.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\t\tthis._onKeyUp = onKeyUp.bind( this );\n\n\t\tthis._onTouchStart = onTouchStart.bind( this );\n\t\tthis._onTouchMove = onTouchMove.bind( this );\n\t\tthis._onTouchEnd = onTouchEnd.bind( this );\n\n\t\tthis._onMouseDown = onMouseDown.bind( this );\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\t\tthis._onMouseUp = onMouseUp.bind( this );\n\n\t\t// for reset\n\n\t\tthis._target0 = this.target.clone();\n\t\tthis._position0 = this.object.position.clone();\n\t\tthis._up0 = this.object.up.clone();\n\t\tthis._zoom0 = this.object.zoom;\n\n\t\tif ( domElement !== null ) {\n\n\t\t\tthis.connect( domElement );\n\n\t\t\tthis.handleResize();\n\n\t\t}\n\n\t\t// force an update at start\n\t\tthis.update();\n\n\t}\n\n\tconnect( element ) {\n\n\t\tsuper.connect( element );\n\n\t\twindow.addEventListener( 'keydown', this._onKeyDown );\n\t\twindow.addEventListener( 'keyup', this._onKeyUp );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\twindow.removeEventListener( 'keydown', this._onKeyDown );\n\t\twindow.removeEventListener( 'keyup', this._onKeyUp );\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerCancel );\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.domElement.style.touchAction = 'auto'; // disable touch scroll\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\t/**\n\t * Must be called if the application window is resized.\n\t */\n\thandleResize() {\n\n\t\tconst box = this.domElement.getBoundingClientRect();\n\t\t// adjustments come from similar code in the jquery offset() function\n\t\tconst d = this.domElement.ownerDocument.documentElement;\n\n\t\tthis.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\tthis.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\tthis.screen.width = box.width;\n\t\tthis.screen.height = box.height;\n\n\t}\n\n\tupdate() {\n\n\t\tthis._eye.subVectors( this.object.position, this.target );\n\n\t\tif ( ! this.noRotate ) {\n\n\t\t\tthis._rotateCamera();\n\n\t\t}\n\n\t\tif ( ! this.noZoom ) {\n\n\t\t\tthis._zoomCamera();\n\n\t\t}\n\n\t\tif ( ! this.noPan ) {\n\n\t\t\tthis._panCamera();\n\n\t\t}\n\n\t\tthis.object.position.addVectors( this.target, this._eye );\n\n\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\tthis._checkDistances();\n\n\t\t\tthis.object.lookAt( this.target );\n\n\t\t\tif ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS ) {\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\tthis._lastPosition.copy( this.object.position );\n\n\t\t\t}\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\tthis.object.lookAt( this.target );\n\n\t\t\tif ( this._lastPosition.distanceToSquared( this.object.position ) > _EPS || this._lastZoom !== this.object.zoom ) {\n\n\t\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\t\tthis._lastPosition.copy( this.object.position );\n\t\t\t\tthis._lastZoom = this.object.zoom;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type.' );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Resets the controls to its initial state.\n\t */\n\treset() {\n\n\t\tthis.state = _STATE.NONE;\n\t\tthis.keyState = _STATE.NONE;\n\n\t\tthis.target.copy( this._target0 );\n\t\tthis.object.position.copy( this._position0 );\n\t\tthis.object.up.copy( this._up0 );\n\t\tthis.object.zoom = this._zoom0;\n\n\t\tthis.object.updateProjectionMatrix();\n\n\t\tthis._eye.subVectors( this.object.position, this.target );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t\tthis._lastPosition.copy( this.object.position );\n\t\tthis._lastZoom = this.object.zoom;\n\n\t}\n\n\t_panCamera() {\n\n\t\t_mouseChange.copy( this._panEnd ).sub( this._panStart );\n\n\t\tif ( _mouseChange.lengthSq() ) {\n\n\t\t\tif ( this.object.isOrthographicCamera ) {\n\n\t\t\t\tconst scale_x = ( this.object.right - this.object.left ) / this.object.zoom / this.domElement.clientWidth;\n\t\t\t\tconst scale_y = ( this.object.top - this.object.bottom ) / this.object.zoom / this.domElement.clientWidth;\n\n\t\t\t\t_mouseChange.x *= scale_x;\n\t\t\t\t_mouseChange.y *= scale_y;\n\n\t\t\t}\n\n\t\t\t_mouseChange.multiplyScalar( this._eye.length() * this.panSpeed );\n\n\t\t\t_pan.copy( this._eye ).cross( this.object.up ).setLength( _mouseChange.x );\n\t\t\t_pan.add( _objectUp.copy( this.object.up ).setLength( _mouseChange.y ) );\n\n\t\t\tthis.object.position.add( _pan );\n\t\t\tthis.target.add( _pan );\n\n\t\t\tif ( this.staticMoving ) {\n\n\t\t\t\tthis._panStart.copy( this._panEnd );\n\n\t\t\t} else {\n\n\t\t\t\tthis._panStart.add( _mouseChange.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.dynamicDampingFactor ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_rotateCamera() {\n\n\t\t_moveDirection.set( this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0 );\n\t\tlet angle = _moveDirection.length();\n\n\t\tif ( angle ) {\n\n\t\t\tthis._eye.copy( this.object.position ).sub( this.target );\n\n\t\t\t_eyeDirection.copy( this._eye ).normalize();\n\t\t\t_objectUpDirection.copy( this.object.up ).normalize();\n\t\t\t_objectSidewaysDirection.crossVectors( _objectUpDirection, _eyeDirection ).normalize();\n\n\t\t\t_objectUpDirection.setLength( this._moveCurr.y - this._movePrev.y );\n\t\t\t_objectSidewaysDirection.setLength( this._moveCurr.x - this._movePrev.x );\n\n\t\t\t_moveDirection.copy( _objectUpDirection.add( _objectSidewaysDirection ) );\n\n\t\t\t_axis.crossVectors( _moveDirection, this._eye ).normalize();\n\n\t\t\tangle *= this.rotateSpeed;\n\t\t\t_quaternion.setFromAxisAngle( _axis, angle );\n\n\t\t\tthis._eye.applyQuaternion( _quaternion );\n\t\t\tthis.object.up.applyQuaternion( _quaternion );\n\n\t\t\tthis._lastAxis.copy( _axis );\n\t\t\tthis._lastAngle = angle;\n\n\t\t} else if ( ! this.staticMoving && this._lastAngle ) {\n\n\t\t\tthis._lastAngle *= Math.sqrt( 1.0 - this.dynamicDampingFactor );\n\t\t\tthis._eye.copy( this.object.position ).sub( this.target );\n\t\t\t_quaternion.setFromAxisAngle( this._lastAxis, this._lastAngle );\n\t\t\tthis._eye.applyQuaternion( _quaternion );\n\t\t\tthis.object.up.applyQuaternion( _quaternion );\n\n\t\t}\n\n\t\tthis._movePrev.copy( this._moveCurr );\n\n\t}\n\n\t_zoomCamera() {\n\n\t\tlet factor;\n\n\t\tif ( this.state === _STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\tfactor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd;\n\t\t\tthis._touchZoomDistanceStart = this._touchZoomDistanceEnd;\n\n\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\tthis._eye.multiplyScalar( factor );\n\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\tthis.object.zoom = MathUtils.clamp( this.object.zoom / factor, this.minZoom, this.maxZoom );\n\n\t\t\t\tif ( this._lastZoom !== this.object.zoom ) {\n\n\t\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tfactor = 1.0 + ( this._zoomEnd.y - this._zoomStart.y ) * this.zoomSpeed;\n\n\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\t\tthis._eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\t\tthis.object.zoom = MathUtils.clamp( this.object.zoom / factor, this.minZoom, this.maxZoom );\n\n\t\t\t\t\tif ( this._lastZoom !== this.object.zoom ) {\n\n\t\t\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.TrackballControls: Unsupported camera type' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.staticMoving ) {\n\n\t\t\t\tthis._zoomStart.copy( this._zoomEnd );\n\n\t\t\t} else {\n\n\t\t\t\tthis._zoomStart.y += ( this._zoomEnd.y - this._zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_getMouseOnScreen( pageX, pageY ) {\n\n\t\t_v2.set(\n\t\t\t( pageX - this.screen.left ) / this.screen.width,\n\t\t\t( pageY - this.screen.top ) / this.screen.height\n\t\t);\n\n\t\treturn _v2;\n\n\t}\n\n\t_getMouseOnCircle( pageX, pageY ) {\n\n\t\t_v2.set(\n\t\t\t( ( pageX - this.screen.width * 0.5 - this.screen.left ) / ( this.screen.width * 0.5 ) ),\n\t\t\t( ( this.screen.height + 2 * ( this.screen.top - pageY ) ) / this.screen.width ) // screen.width intentional\n\t\t);\n\n\t\treturn _v2;\n\n\t}\n\n\t_addPointer( event ) {\n\n\t\tthis._pointers.push( event );\n\n\t}\n\n\t_removePointer( event ) {\n\n\t\tdelete this._pointerPositions[ event.pointerId ];\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ].pointerId == event.pointerId ) {\n\n\t\t\t\tthis._pointers.splice( i, 1 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_trackPointer( event ) {\n\n\t\tlet position = this._pointerPositions[ event.pointerId ];\n\n\t\tif ( position === undefined ) {\n\n\t\t\tposition = new Vector2();\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\n\n\t\t}\n\n\t\tposition.set( event.pageX, event.pageY );\n\n\t}\n\n\t_getSecondPointerPosition( event ) {\n\n\t\tconst pointer = ( event.pointerId === this._pointers[ 0 ].pointerId ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\n\n\t\treturn this._pointerPositions[ pointer.pointerId ];\n\n\t}\n\n\t_checkDistances() {\n\n\t\tif ( ! this.noZoom || ! this.noPan ) {\n\n\t\t\tif ( this._eye.lengthSq() > this.maxDistance * this.maxDistance ) {\n\n\t\t\t\tthis.object.position.addVectors( this.target, this._eye.setLength( this.maxDistance ) );\n\t\t\t\tthis._zoomStart.copy( this._zoomEnd );\n\n\t\t\t}\n\n\t\t\tif ( this._eye.lengthSq() < this.minDistance * this.minDistance ) {\n\n\t\t\t\tthis.object.position.addVectors( this.target, this._eye.setLength( this.minDistance ) );\n\t\t\t\tthis._zoomStart.copy( this._zoomEnd );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t//\n\n\tthis._addPointer( event );\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchStart( event );\n\n\t} else {\n\n\t\tthis._onMouseDown( event );\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchMove( event );\n\n\t} else {\n\n\t\tthis._onMouseMove( event );\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchEnd( event );\n\n\t} else {\n\n\t\tthis._onMouseUp();\n\n\t}\n\n\t//\n\n\tthis._removePointer( event );\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n}\n\nfunction onPointerCancel( event ) {\n\n\tthis._removePointer( event );\n\n}\n\nfunction onKeyUp() {\n\n\tif ( this.enabled === false ) return;\n\n\tthis.keyState = _STATE.NONE;\n\n\twindow.addEventListener( 'keydown', this._onKeyDown );\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\twindow.removeEventListener( 'keydown', this._onKeyDown );\n\n\tif ( this.keyState !== _STATE.NONE ) {\n\n\t\treturn;\n\n\t} else if ( event.code === this.keys[ _STATE.ROTATE ] && ! this.noRotate ) {\n\n\t\tthis.keyState = _STATE.ROTATE;\n\n\t} else if ( event.code === this.keys[ _STATE.ZOOM ] && ! this.noZoom ) {\n\n\t\tthis.keyState = _STATE.ZOOM;\n\n\t} else if ( event.code === this.keys[ _STATE.PAN ] && ! this.noPan ) {\n\n\t\tthis.keyState = _STATE.PAN;\n\n\t}\n\n}\n\nfunction onMouseDown( event ) {\n\n\tlet mouseAction;\n\n\tswitch ( event.button ) {\n\n\t\tcase 0:\n\t\t\tmouseAction = this.mouseButtons.LEFT;\n\t\t\tbreak;\n\n\t\tcase 1:\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tmouseAction = - 1;\n\n\t}\n\n\tswitch ( mouseAction ) {\n\n\t\tcase MOUSE.DOLLY:\n\t\t\tthis.state = _STATE.ZOOM;\n\t\t\tbreak;\n\n\t\tcase MOUSE.ROTATE:\n\t\t\tthis.state = _STATE.ROTATE;\n\t\t\tbreak;\n\n\t\tcase MOUSE.PAN:\n\t\t\tthis.state = _STATE.PAN;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tconst state = ( this.keyState !== _STATE.NONE ) ? this.keyState : this.state;\n\n\tif ( state === _STATE.ROTATE && ! this.noRotate ) {\n\n\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\t\tthis._movePrev.copy( this._moveCurr );\n\n\t} else if ( state === _STATE.ZOOM && ! this.noZoom ) {\n\n\t\tthis._zoomStart.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\t\tthis._zoomEnd.copy( this._zoomStart );\n\n\t} else if ( state === _STATE.PAN && ! this.noPan ) {\n\n\t\tthis._panStart.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\t\tthis._panEnd.copy( this._panStart );\n\n\t}\n\n\tthis.dispatchEvent( _startEvent );\n\n}\n\nfunction onMouseMove( event ) {\n\n\tconst state = ( this.keyState !== _STATE.NONE ) ? this.keyState : this.state;\n\n\tif ( state === _STATE.ROTATE && ! this.noRotate ) {\n\n\t\tthis._movePrev.copy( this._moveCurr );\n\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t} else if ( state === _STATE.ZOOM && ! this.noZoom ) {\n\n\t\tthis._zoomEnd.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t} else if ( state === _STATE.PAN && ! this.noPan ) {\n\n\t\tthis._panEnd.copy( this._getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t}\n\n}\n\nfunction onMouseUp() {\n\n\tthis.state = _STATE.NONE;\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onMouseWheel( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this.noZoom === true ) return;\n\n\tevent.preventDefault();\n\n\tswitch ( event.deltaMode ) {\n\n\t\tcase 2:\n\t\t\t// Zoom in pages\n\t\t\tthis._zoomStart.y -= event.deltaY * 0.025;\n\t\t\tbreak;\n\n\t\tcase 1:\n\t\t\t// Zoom in lines\n\t\t\tthis._zoomStart.y -= event.deltaY * 0.01;\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t// undefined, 0, assume pixels\n\t\t\tthis._zoomStart.y -= event.deltaY * 0.00025;\n\t\t\tbreak;\n\n\t}\n\n\tthis.dispatchEvent( _startEvent );\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nfunction onTouchStart( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( this._pointers[ 0 ].pageX, this._pointers[ 0 ].pageY ) );\n\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\tbreak;\n\n\t\tdefault: // 2 or more\n\t\t\tthis.state = _STATE.TOUCH_ZOOM_PAN;\n\t\t\tconst dx = this._pointers[ 0 ].pageX - this._pointers[ 1 ].pageX;\n\t\t\tconst dy = this._pointers[ 0 ].pageY - this._pointers[ 1 ].pageY;\n\t\t\tthis._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tconst x = ( this._pointers[ 0 ].pageX + this._pointers[ 1 ].pageX ) / 2;\n\t\t\tconst y = ( this._pointers[ 0 ].pageY + this._pointers[ 1 ].pageY ) / 2;\n\t\t\tthis._panStart.copy( this._getMouseOnScreen( x, y ) );\n\t\t\tthis._panEnd.copy( this._panStart );\n\t\t\tbreak;\n\n\t}\n\n\tthis.dispatchEvent( _startEvent );\n\n}\n\nfunction onTouchMove( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\tbreak;\n\n\t\tdefault: // 2 or more\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst dx = event.pageX - position.x;\n\t\t\tconst dy = event.pageY - position.y;\n\t\t\tthis._touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\tconst x = ( event.pageX + position.x ) / 2;\n\t\t\tconst y = ( event.pageY + position.y ) / 2;\n\t\t\tthis._panEnd.copy( this._getMouseOnScreen( x, y ) );\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onTouchEnd( event ) {\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 0:\n\t\t\tthis.state = _STATE.NONE;\n\t\t\tbreak;\n\n\t\tcase 1:\n\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\tbreak;\n\n\t\tcase 2:\n\t\t\tthis.state = _STATE.TOUCH_ZOOM_PAN;\n\n\t\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\t\tif ( this._pointers[ i ].pointerId !== event.pointerId ) {\n\n\t\t\t\t\tconst position = this._pointerPositions[ this._pointers[ i ].pointerId ];\n\t\t\t\t\tthis._moveCurr.copy( this._getMouseOnCircle( position.x, position.y ) );\n\t\t\t\t\tthis._movePrev.copy( this._moveCurr );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t}\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nexport { TrackballControls };\n","import {\n\tControls,\n\tMOUSE,\n\tQuaternion,\n\tSpherical,\n\tTOUCH,\n\tVector2,\n\tVector3,\n\tPlane,\n\tRay,\n\tMathUtils\n} from 'three';\n\n/**\n * Fires when the camera has been transformed by the controls.\n *\n * @event OrbitControls#change\n * @type {Object}\n */\nconst _changeEvent = { type: 'change' };\n\n/**\n * Fires when an interaction was initiated.\n *\n * @event OrbitControls#start\n * @type {Object}\n */\nconst _startEvent = { type: 'start' };\n\n/**\n * Fires when an interaction has finished.\n *\n * @event OrbitControls#end\n * @type {Object}\n */\nconst _endEvent = { type: 'end' };\n\nconst _ray = new Ray();\nconst _plane = new Plane();\nconst _TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );\n\nconst _v = new Vector3();\nconst _twoPI = 2 * Math.PI;\n\nconst _STATE = {\n\tNONE: - 1,\n\tROTATE: 0,\n\tDOLLY: 1,\n\tPAN: 2,\n\tTOUCH_ROTATE: 3,\n\tTOUCH_PAN: 4,\n\tTOUCH_DOLLY_PAN: 5,\n\tTOUCH_DOLLY_ROTATE: 6\n};\nconst _EPS = 0.000001;\n\n\n/**\n * Orbit controls allow the camera to orbit around a target.\n *\n * OrbitControls performs orbiting, dollying (zooming), and panning. Unlike {@link TrackballControls},\n * it maintains the \"up\" direction `object.up` (+Y by default).\n *\n * - Orbit: Left mouse / touch: one-finger move.\n * - Zoom: Middle mouse, or mousewheel / touch: two-finger spread or squish.\n * - Pan: Right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move.\n *\n * ```js\n * const controls = new OrbitControls( camera, renderer.domElement );\n *\n * // controls.update() must be called after any manual changes to the camera's transform\n * camera.position.set( 0, 20, 100 );\n * controls.update();\n *\n * function animate() {\n *\n * \t// required if controls.enableDamping or controls.autoRotate are set to true\n * \tcontrols.update();\n *\n * \trenderer.render( scene, camera );\n *\n * }\n * ```\n *\n * @augments Controls\n * @three_import import { OrbitControls } from 'three/addons/controls/OrbitControls.js';\n */\nclass OrbitControls extends Controls {\n\n\t/**\n\t * Constructs a new controls instance.\n\t *\n\t * @param {Object3D} object - The object that is managed by the controls.\n\t * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.\n\t */\n\tconstructor( object, domElement = null ) {\n\n\t\tsuper( object, domElement );\n\n\t\tthis.state = _STATE.NONE;\n\n\t\t/**\n\t\t * The focus point of the controls, the `object` orbits around this.\n\t\t * It can be updated manually at any point to change the focus of the controls.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.target = new Vector3();\n\n\t\t/**\n\t\t * The focus point of the `minTargetRadius` and `maxTargetRadius` limits.\n\t\t * It can be updated manually at any point to change the center of interest\n\t\t * for the `target`.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.cursor = new Vector3();\n\n\t\t/**\n\t\t * How far you can dolly in (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minDistance = 0;\n\n\t\t/**\n\t\t * How far you can dolly out (perspective camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxDistance = Infinity;\n\n\t\t/**\n\t\t * How far you can zoom in (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minZoom = 0;\n\n\t\t/**\n\t\t * How far you can zoom out (orthographic camera only).\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxZoom = Infinity;\n\n\t\t/**\n\t\t * How close you can get the target to the 3D `cursor`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minTargetRadius = 0;\n\n\t\t/**\n\t\t * How far you can move the target from the 3D `cursor`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Infinity\n\t\t */\n\t\tthis.maxTargetRadius = Infinity;\n\n\t\t/**\n\t\t * How far you can orbit vertically, lower limit. Range is `[0, Math.PI]` radians.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0\n\t\t */\n\t\tthis.minPolarAngle = 0;\n\n\t\t/**\n\t\t * How far you can orbit vertically, upper limit. Range is `[0, Math.PI]` radians.\n\t\t *\n\t\t * @type {number}\n\t\t * @default Math.PI\n\t\t */\n\t\tthis.maxPolarAngle = Math.PI;\n\n\t\t/**\n\t\t * How far you can orbit horizontally, lower limit. If set, the interval `[ min, max ]`\n\t\t * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default -Infinity\n\t\t */\n\t\tthis.minAzimuthAngle = - Infinity;\n\n\t\t/**\n\t\t * How far you can orbit horizontally, upper limit. If set, the interval `[ min, max ]`\n\t\t * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.\n\t\t *\n\t\t * @type {number}\n\t\t * @default -Infinity\n\t\t */\n\t\tthis.maxAzimuthAngle = Infinity;\n\n\t\t/**\n\t\t * Set to `true` to enable damping (inertia), which can be used to give a sense of weight\n\t\t * to the controls. Note that if this is enabled, you must call `update()` in your animation\n\t\t * loop.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.enableDamping = false;\n\n\t\t/**\n\t\t * The damping inertia used if `enableDamping` is set to `true`.\n\t\t *\n\t\t * Note that for this to work, you must call `update()` in your animation loop.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 0.05\n\t\t */\n\t\tthis.dampingFactor = 0.05;\n\n\t\t/**\n\t\t * Enable or disable zooming (dollying) of the camera.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enableZoom = true;\n\n\t\t/**\n\t\t * Speed of zooming / dollying.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.zoomSpeed = 1.0;\n\n\t\t/**\n\t\t * Enable or disable horizontal and vertical rotation of the camera.\n\t\t *\n\t\t * Note that it is possible to disable a single axis by setting the min and max of the\n\t\t * `minPolarAngle` or `minAzimuthAngle` to the same value, which will cause the vertical\n\t\t * or horizontal rotation to be fixed at that value.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enableRotate = true;\n\n\t\t/**\n\t\t * Speed of rotation.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.rotateSpeed = 1.0;\n\n\t\t/**\n\t\t * How fast to rotate the camera when the keyboard is used.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.keyRotateSpeed = 1.0;\n\n\t\t/**\n\t\t * Enable or disable camera panning.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.enablePan = true;\n\n\t\t/**\n\t\t * Speed of panning.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 1\n\t\t */\n\t\tthis.panSpeed = 1.0;\n\n\t\t/**\n\t\t * Defines how the camera's position is translated when panning. If `true`, the camera pans\n\t\t * in screen space. Otherwise, the camera pans in the plane orthogonal to the camera's up\n\t\t * direction.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.screenSpacePanning = true;\n\n\t\t/**\n\t\t * How fast to pan the camera when the keyboard is used in\n\t\t * pixels per keypress.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 7\n\t\t */\n\t\tthis.keyPanSpeed = 7.0;\n\n\t\t/**\n\t\t * Setting this property to `true` allows to zoom to the cursor's position.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.zoomToCursor = false;\n\n\t\t/**\n\t\t * Set to true to automatically rotate around the target\n\t\t *\n\t\t * Note that if this is enabled, you must call `update()` in your animation loop.\n\t\t * If you want the auto-rotate speed to be independent of the frame rate (the refresh\n\t\t * rate of the display), you must pass the time `deltaTime`, in seconds, to `update()`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.autoRotate = false;\n\n\t\t/**\n\t\t * How fast to rotate around the target if `autoRotate` is `true`. The default equates to 30 seconds\n\t\t * per orbit at 60fps.\n\t\t *\n\t\t * Note that if `autoRotate` is enabled, you must call `update()` in your animation loop.\n\t\t *\n\t\t * @type {number}\n\t\t * @default 2\n\t\t */\n\t\tthis.autoRotateSpeed = 2.0;\n\n\t\t/**\n\t\t * This object contains references to the keycodes for controlling camera panning.\n\t\t *\n\t\t * ```js\n\t\t * controls.keys = {\n\t\t * \tLEFT: 'ArrowLeft', //left arrow\n\t\t * \tUP: 'ArrowUp', // up arrow\n\t\t * \tRIGHT: 'ArrowRight', // right arrow\n\t\t * \tBOTTOM: 'ArrowDown' // down arrow\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };\n\n\t\t/**\n\t\t * This object contains references to the mouse actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tLEFT: THREE.MOUSE.ROTATE,\n\t\t * \tMIDDLE: THREE.MOUSE.DOLLY,\n\t\t * \tRIGHT: THREE.MOUSE.PAN\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };\n\n\t\t/**\n\t\t * This object contains references to the touch actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tONE: THREE.TOUCH.ROTATE,\n\t\t * \tTWO: THREE.TOUCH.DOLLY_PAN\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };\n\n\t\t/**\n\t\t * Used internally by `saveState()` and `reset()`.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.target0 = this.target.clone();\n\n\t\t/**\n\t\t * Used internally by `saveState()` and `reset()`.\n\t\t *\n\t\t * @type {Vector3}\n\t\t */\n\t\tthis.position0 = this.object.position.clone();\n\n\t\t/**\n\t\t * Used internally by `saveState()` and `reset()`.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.zoom0 = this.object.zoom;\n\n\t\t// the target DOM element for key events\n\t\tthis._domElementKeyEvents = null;\n\n\t\t// internals\n\n\t\tthis._lastPosition = new Vector3();\n\t\tthis._lastQuaternion = new Quaternion();\n\t\tthis._lastTargetPosition = new Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tthis._quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) );\n\t\tthis._quatInverse = this._quat.clone().invert();\n\n\t\t// current position in spherical coordinates\n\t\tthis._spherical = new Spherical();\n\t\tthis._sphericalDelta = new Spherical();\n\n\t\tthis._scale = 1;\n\t\tthis._panOffset = new Vector3();\n\n\t\tthis._rotateStart = new Vector2();\n\t\tthis._rotateEnd = new Vector2();\n\t\tthis._rotateDelta = new Vector2();\n\n\t\tthis._panStart = new Vector2();\n\t\tthis._panEnd = new Vector2();\n\t\tthis._panDelta = new Vector2();\n\n\t\tthis._dollyStart = new Vector2();\n\t\tthis._dollyEnd = new Vector2();\n\t\tthis._dollyDelta = new Vector2();\n\n\t\tthis._dollyDirection = new Vector3();\n\t\tthis._mouse = new Vector2();\n\t\tthis._performCursorZoom = false;\n\n\t\tthis._pointers = [];\n\t\tthis._pointerPositions = {};\n\n\t\tthis._controlActive = false;\n\n\t\t// event listeners\n\n\t\tthis._onPointerMove = onPointerMove.bind( this );\n\t\tthis._onPointerDown = onPointerDown.bind( this );\n\t\tthis._onPointerUp = onPointerUp.bind( this );\n\t\tthis._onContextMenu = onContextMenu.bind( this );\n\t\tthis._onMouseWheel = onMouseWheel.bind( this );\n\t\tthis._onKeyDown = onKeyDown.bind( this );\n\n\t\tthis._onTouchStart = onTouchStart.bind( this );\n\t\tthis._onTouchMove = onTouchMove.bind( this );\n\n\t\tthis._onMouseDown = onMouseDown.bind( this );\n\t\tthis._onMouseMove = onMouseMove.bind( this );\n\n\t\tthis._interceptControlDown = interceptControlDown.bind( this );\n\t\tthis._interceptControlUp = interceptControlUp.bind( this );\n\n\t\t//\n\n\t\tif ( this.domElement !== null ) {\n\n\t\t\tthis.connect( this.domElement );\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\tconnect( element ) {\n\n\t\tsuper.connect( element );\n\n\t\tthis.domElement.addEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.addEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.addEventListener( 'contextmenu', this._onContextMenu );\n\t\tthis.domElement.addEventListener( 'wheel', this._onMouseWheel, { passive: false } );\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.addEventListener( 'keydown', this._interceptControlDown, { passive: true, capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'none'; // disable touch scroll\n\n\t}\n\n\tdisconnect() {\n\n\t\tthis.domElement.removeEventListener( 'pointerdown', this._onPointerDown );\n\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\t\tthis.domElement.removeEventListener( 'pointercancel', this._onPointerUp );\n\n\t\tthis.domElement.removeEventListener( 'wheel', this._onMouseWheel );\n\t\tthis.domElement.removeEventListener( 'contextmenu', this._onContextMenu );\n\n\t\tthis.stopListenToKeyEvents();\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\t\tdocument.removeEventListener( 'keydown', this._interceptControlDown, { capture: true } );\n\n\t\tthis.domElement.style.touchAction = 'auto';\n\n\t}\n\n\tdispose() {\n\n\t\tthis.disconnect();\n\n\t}\n\n\t/**\n\t * Get the current vertical rotation, in radians.\n\t *\n\t * @return {number} The current vertical rotation, in radians.\n\t */\n\tgetPolarAngle() {\n\n\t\treturn this._spherical.phi;\n\n\t}\n\n\t/**\n\t * Get the current horizontal rotation, in radians.\n\t *\n\t * @return {number} The current horizontal rotation, in radians.\n\t */\n\tgetAzimuthalAngle() {\n\n\t\treturn this._spherical.theta;\n\n\t}\n\n\t/**\n\t * Returns the distance from the camera to the target.\n\t *\n\t * @return {number} The distance from the camera to the target.\n\t */\n\tgetDistance() {\n\n\t\treturn this.object.position.distanceTo( this.target );\n\n\t}\n\n\t/**\n\t * Adds key event listeners to the given DOM element.\n\t * `window` is a recommended argument for using this method.\n\t *\n\t * @param {HTMLDOMElement} domElement - The DOM element\n\t */\n\tlistenToKeyEvents( domElement ) {\n\n\t\tdomElement.addEventListener( 'keydown', this._onKeyDown );\n\t\tthis._domElementKeyEvents = domElement;\n\n\t}\n\n\t/**\n\t * Removes the key event listener previously defined with `listenToKeyEvents()`.\n\t */\n\tstopListenToKeyEvents() {\n\n\t\tif ( this._domElementKeyEvents !== null ) {\n\n\t\t\tthis._domElementKeyEvents.removeEventListener( 'keydown', this._onKeyDown );\n\t\t\tthis._domElementKeyEvents = null;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Save the current state of the controls. This can later be recovered with `reset()`.\n\t */\n\tsaveState() {\n\n\t\tthis.target0.copy( this.target );\n\t\tthis.position0.copy( this.object.position );\n\t\tthis.zoom0 = this.object.zoom;\n\n\t}\n\n\t/**\n\t * Reset the controls to their state from either the last time the `saveState()`\n\t * was called, or the initial state.\n\t */\n\treset() {\n\n\t\tthis.target.copy( this.target0 );\n\t\tthis.object.position.copy( this.position0 );\n\t\tthis.object.zoom = this.zoom0;\n\n\t\tthis.object.updateProjectionMatrix();\n\t\tthis.dispatchEvent( _changeEvent );\n\n\t\tthis.update();\n\n\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tupdate( deltaTime = null ) {\n\n\t\tconst position = this.object.position;\n\n\t\t_v.copy( position ).sub( this.target );\n\n\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t_v.applyQuaternion( this._quat );\n\n\t\t// angle from z-axis around y-axis\n\t\tthis._spherical.setFromVector3( _v );\n\n\t\tif ( this.autoRotate && this.state === _STATE.NONE ) {\n\n\t\t\tthis._rotateLeft( this._getAutoRotationAngle( deltaTime ) );\n\n\t\t}\n\n\t\tif ( this.enableDamping ) {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta * this.dampingFactor;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi * this.dampingFactor;\n\n\t\t} else {\n\n\t\t\tthis._spherical.theta += this._sphericalDelta.theta;\n\t\t\tthis._spherical.phi += this._sphericalDelta.phi;\n\n\t\t}\n\n\t\t// restrict theta to be between desired limits\n\n\t\tlet min = this.minAzimuthAngle;\n\t\tlet max = this.maxAzimuthAngle;\n\n\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\tif ( min < - Math.PI ) min += _twoPI; else if ( min > Math.PI ) min -= _twoPI;\n\n\t\t\tif ( max < - Math.PI ) max += _twoPI; else if ( max > Math.PI ) max -= _twoPI;\n\n\t\t\tif ( min <= max ) {\n\n\t\t\t\tthis._spherical.theta = Math.max( min, Math.min( max, this._spherical.theta ) );\n\n\t\t\t} else {\n\n\t\t\t\tthis._spherical.theta = ( this._spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\tMath.max( min, this._spherical.theta ) :\n\t\t\t\t\tMath.min( max, this._spherical.theta );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// restrict phi to be between desired limits\n\t\tthis._spherical.phi = Math.max( this.minPolarAngle, Math.min( this.maxPolarAngle, this._spherical.phi ) );\n\n\t\tthis._spherical.makeSafe();\n\n\n\t\t// move target to panned location\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis.target.addScaledVector( this._panOffset, this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis.target.add( this._panOffset );\n\n\t\t}\n\n\t\t// Limit the target distance from the cursor to create a sphere around the center of interest\n\t\tthis.target.sub( this.cursor );\n\t\tthis.target.clampLength( this.minTargetRadius, this.maxTargetRadius );\n\t\tthis.target.add( this.cursor );\n\n\t\tlet zoomChanged = false;\n\t\t// adjust the camera position based on zoom only if we're not zooming to the cursor or if it's an ortho camera\n\t\t// we adjust zoom later in these cases\n\t\tif ( this.zoomToCursor && this._performCursorZoom || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius );\n\n\t\t} else {\n\n\t\t\tconst prevRadius = this._spherical.radius;\n\t\t\tthis._spherical.radius = this._clampDistance( this._spherical.radius * this._scale );\n\t\t\tzoomChanged = prevRadius != this._spherical.radius;\n\n\t\t}\n\n\t\t_v.setFromSpherical( this._spherical );\n\n\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t_v.applyQuaternion( this._quatInverse );\n\n\t\tposition.copy( this.target ).add( _v );\n\n\t\tthis.object.lookAt( this.target );\n\n\t\tif ( this.enableDamping === true ) {\n\n\t\t\tthis._sphericalDelta.theta *= ( 1 - this.dampingFactor );\n\t\t\tthis._sphericalDelta.phi *= ( 1 - this.dampingFactor );\n\n\t\t\tthis._panOffset.multiplyScalar( 1 - this.dampingFactor );\n\n\t\t} else {\n\n\t\t\tthis._sphericalDelta.set( 0, 0, 0 );\n\n\t\t\tthis._panOffset.set( 0, 0, 0 );\n\n\t\t}\n\n\t\t// adjust camera position\n\t\tif ( this.zoomToCursor && this._performCursorZoom ) {\n\n\t\t\tlet newRadius = null;\n\t\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t\t// move the camera down the pointer ray\n\t\t\t\t// this method avoids floating point error\n\t\t\t\tconst prevRadius = _v.length();\n\t\t\t\tnewRadius = this._clampDistance( prevRadius * this._scale );\n\n\t\t\t\tconst radiusDelta = prevRadius - newRadius;\n\t\t\t\tthis.object.position.addScaledVector( this._dollyDirection, radiusDelta );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tzoomChanged = !! radiusDelta;\n\n\t\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t\t// adjust the ortho camera position based on zoom changes\n\t\t\t\tconst mouseBefore = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseBefore.unproject( this.object );\n\n\t\t\t\tconst prevZoom = this.object.zoom;\n\t\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\t\t\t\tthis.object.updateProjectionMatrix();\n\n\t\t\t\tzoomChanged = prevZoom !== this.object.zoom;\n\n\t\t\t\tconst mouseAfter = new Vector3( this._mouse.x, this._mouse.y, 0 );\n\t\t\t\tmouseAfter.unproject( this.object );\n\n\t\t\t\tthis.object.position.sub( mouseAfter ).add( mouseBefore );\n\t\t\t\tthis.object.updateMatrixWorld();\n\n\t\t\t\tnewRadius = _v.length();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.' );\n\t\t\t\tthis.zoomToCursor = false;\n\n\t\t\t}\n\n\t\t\t// handle the placement of the target\n\t\t\tif ( newRadius !== null ) {\n\n\t\t\t\tif ( this.screenSpacePanning ) {\n\n\t\t\t\t\t// position the orbit target in front of the new camera position\n\t\t\t\t\tthis.target.set( 0, 0, - 1 )\n\t\t\t\t\t\t.transformDirection( this.object.matrix )\n\t\t\t\t\t\t.multiplyScalar( newRadius )\n\t\t\t\t\t\t.add( this.object.position );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// get the ray and translation plane to compute target\n\t\t\t\t\t_ray.origin.copy( this.object.position );\n\t\t\t\t\t_ray.direction.set( 0, 0, - 1 ).transformDirection( this.object.matrix );\n\n\t\t\t\t\t// if the camera is 20 degrees above the horizon then don't adjust the focus target to avoid\n\t\t\t\t\t// extremely large values\n\t\t\t\t\tif ( Math.abs( this.object.up.dot( _ray.direction ) ) < _TILT_LIMIT ) {\n\n\t\t\t\t\t\tthis.object.lookAt( this.target );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t_plane.setFromNormalAndCoplanarPoint( this.object.up, this.target );\n\t\t\t\t\t\t_ray.intersectPlane( _plane, this.target );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\tconst prevZoom = this.object.zoom;\n\t\t\tthis.object.zoom = Math.max( this.minZoom, Math.min( this.maxZoom, this.object.zoom / this._scale ) );\n\n\t\t\tif ( prevZoom !== this.object.zoom ) {\n\n\t\t\t\tthis.object.updateProjectionMatrix();\n\t\t\t\tzoomChanged = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis._scale = 1;\n\t\tthis._performCursorZoom = false;\n\n\t\t// update condition is:\n\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\tif ( zoomChanged ||\n\t\t\tthis._lastPosition.distanceToSquared( this.object.position ) > _EPS ||\n\t\t\t8 * ( 1 - this._lastQuaternion.dot( this.object.quaternion ) ) > _EPS ||\n\t\t\tthis._lastTargetPosition.distanceToSquared( this.target ) > _EPS ) {\n\n\t\t\tthis.dispatchEvent( _changeEvent );\n\n\t\t\tthis._lastPosition.copy( this.object.position );\n\t\t\tthis._lastQuaternion.copy( this.object.quaternion );\n\t\t\tthis._lastTargetPosition.copy( this.target );\n\n\t\t\treturn true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_getAutoRotationAngle( deltaTime ) {\n\n\t\tif ( deltaTime !== null ) {\n\n\t\t\treturn ( _twoPI / 60 * this.autoRotateSpeed ) * deltaTime;\n\n\t\t} else {\n\n\t\t\treturn _twoPI / 60 / 60 * this.autoRotateSpeed;\n\n\t\t}\n\n\t}\n\n\t_getZoomScale( delta ) {\n\n\t\tconst normalizedDelta = Math.abs( delta * 0.01 );\n\t\treturn Math.pow( 0.95, this.zoomSpeed * normalizedDelta );\n\n\t}\n\n\t_rotateLeft( angle ) {\n\n\t\tthis._sphericalDelta.theta -= angle;\n\n\t}\n\n\t_rotateUp( angle ) {\n\n\t\tthis._sphericalDelta.phi -= angle;\n\n\t}\n\n\t_panLeft( distance, objectMatrix ) {\n\n\t\t_v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t_v.multiplyScalar( - distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t_panUp( distance, objectMatrix ) {\n\n\t\tif ( this.screenSpacePanning === true ) {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t} else {\n\n\t\t\t_v.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t_v.crossVectors( this.object.up, _v );\n\n\t\t}\n\n\t\t_v.multiplyScalar( distance );\n\n\t\tthis._panOffset.add( _v );\n\n\t}\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\t_pan( deltaX, deltaY ) {\n\n\t\tconst element = this.domElement;\n\n\t\tif ( this.object.isPerspectiveCamera ) {\n\n\t\t\t// perspective\n\t\t\tconst position = this.object.position;\n\t\t\t_v.copy( position ).sub( this.target );\n\t\t\tlet targetDistance = _v.length();\n\n\t\t\t// half of the fov is center to top of screen\n\t\t\ttargetDistance *= Math.tan( ( this.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\tthis._panLeft( 2 * deltaX * targetDistance / element.clientHeight, this.object.matrix );\n\t\t\tthis._panUp( 2 * deltaY * targetDistance / element.clientHeight, this.object.matrix );\n\n\t\t} else if ( this.object.isOrthographicCamera ) {\n\n\t\t\t// orthographic\n\t\t\tthis._panLeft( deltaX * ( this.object.right - this.object.left ) / this.object.zoom / element.clientWidth, this.object.matrix );\n\t\t\tthis._panUp( deltaY * ( this.object.top - this.object.bottom ) / this.object.zoom / element.clientHeight, this.object.matrix );\n\n\t\t} else {\n\n\t\t\t// camera neither orthographic nor perspective\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\tthis.enablePan = false;\n\n\t\t}\n\n\t}\n\n\t_dollyOut( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale /= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_dollyIn( dollyScale ) {\n\n\t\tif ( this.object.isPerspectiveCamera || this.object.isOrthographicCamera ) {\n\n\t\t\tthis._scale *= dollyScale;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n\t\t\tthis.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t_updateZoomParameters( x, y ) {\n\n\t\tif ( ! this.zoomToCursor ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._performCursorZoom = true;\n\n\t\tconst rect = this.domElement.getBoundingClientRect();\n\t\tconst dx = x - rect.left;\n\t\tconst dy = y - rect.top;\n\t\tconst w = rect.width;\n\t\tconst h = rect.height;\n\n\t\tthis._mouse.x = ( dx / w ) * 2 - 1;\n\t\tthis._mouse.y = - ( dy / h ) * 2 + 1;\n\n\t\tthis._dollyDirection.set( this._mouse.x, this._mouse.y, 1 ).unproject( this.object ).sub( this.object.position ).normalize();\n\n\t}\n\n\t_clampDistance( dist ) {\n\n\t\treturn Math.max( this.minDistance, Math.min( this.maxDistance, dist ) );\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\t_handleMouseDownRotate( event ) {\n\n\t\tthis._rotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownDolly( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientX );\n\t\tthis._dollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseDownPan( event ) {\n\n\t\tthis._panStart.set( event.clientX, event.clientY );\n\n\t}\n\n\t_handleMouseMoveRotate( event ) {\n\n\t\tthis._rotateEnd.set( event.clientX, event.clientY );\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMoveDolly( event ) {\n\n\t\tthis._dollyEnd.set( event.clientX, event.clientY );\n\n\t\tthis._dollyDelta.subVectors( this._dollyEnd, this._dollyStart );\n\n\t\tif ( this._dollyDelta.y > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t} else if ( this._dollyDelta.y < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( this._dollyDelta.y ) );\n\n\t\t}\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseMovePan( event ) {\n\n\t\tthis._panEnd.set( event.clientX, event.clientY );\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t\tthis.update();\n\n\t}\n\n\t_handleMouseWheel( event ) {\n\n\t\tthis._updateZoomParameters( event.clientX, event.clientY );\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tthis._dollyIn( this._getZoomScale( event.deltaY ) );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tthis._dollyOut( this._getZoomScale( event.deltaY ) );\n\n\t\t}\n\n\t\tthis.update();\n\n\t}\n\n\t_handleKeyDown( event ) {\n\n\t\tlet needsUpdate = false;\n\n\t\tswitch ( event.code ) {\n\n\t\t\tcase this.keys.UP:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateUp( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( 0, this.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.BOTTOM:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateUp( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( 0, - this.keyPanSpeed );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.LEFT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateLeft( _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( this.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase this.keys.RIGHT:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( this.enableRotate ) {\n\n\t\t\t\t\t\tthis._rotateLeft( - _twoPI * this.keyRotateSpeed / this.domElement.clientHeight );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( this.enablePan ) {\n\n\t\t\t\t\t\tthis._pan( - this.keyPanSpeed, 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( needsUpdate ) {\n\n\t\t\t// prevent the browser from scrolling on cursor keys\n\t\t\tevent.preventDefault();\n\n\t\t\tthis.update();\n\n\t\t}\n\n\n\t}\n\n\t_handleTouchStartRotate( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._rotateStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartPan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panStart.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\t_handleTouchStartDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyStart.set( 0, distance );\n\n\t}\n\n\t_handleTouchStartDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchStartPan( event );\n\n\t}\n\n\t_handleTouchStartDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchStartDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchStartRotate( event );\n\n\t}\n\n\t_handleTouchMoveRotate( event ) {\n\n\t\tif ( this._pointers.length == 1 ) {\n\n\t\t\tthis._rotateEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._rotateEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._rotateDelta.subVectors( this._rotateEnd, this._rotateStart ).multiplyScalar( this.rotateSpeed );\n\n\t\tconst element = this.domElement;\n\n\t\tthis._rotateLeft( _twoPI * this._rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\tthis._rotateUp( _twoPI * this._rotateDelta.y / element.clientHeight );\n\n\t\tthis._rotateStart.copy( this._rotateEnd );\n\n\t}\n\n\t_handleTouchMovePan( event ) {\n\n\t\tif ( this._pointers.length === 1 ) {\n\n\t\t\tthis._panEnd.set( event.pageX, event.pageY );\n\n\t\t} else {\n\n\t\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\t\tconst x = 0.5 * ( event.pageX + position.x );\n\t\t\tconst y = 0.5 * ( event.pageY + position.y );\n\n\t\t\tthis._panEnd.set( x, y );\n\n\t\t}\n\n\t\tthis._panDelta.subVectors( this._panEnd, this._panStart ).multiplyScalar( this.panSpeed );\n\n\t\tthis._pan( this._panDelta.x, this._panDelta.y );\n\n\t\tthis._panStart.copy( this._panEnd );\n\n\t}\n\n\t_handleTouchMoveDolly( event ) {\n\n\t\tconst position = this._getSecondPointerPosition( event );\n\n\t\tconst dx = event.pageX - position.x;\n\t\tconst dy = event.pageY - position.y;\n\n\t\tconst distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tthis._dollyEnd.set( 0, distance );\n\n\t\tthis._dollyDelta.set( 0, Math.pow( this._dollyEnd.y / this._dollyStart.y, this.zoomSpeed ) );\n\n\t\tthis._dollyOut( this._dollyDelta.y );\n\n\t\tthis._dollyStart.copy( this._dollyEnd );\n\n\t\tconst centerX = ( event.pageX + position.x ) * 0.5;\n\t\tconst centerY = ( event.pageY + position.y ) * 0.5;\n\n\t\tthis._updateZoomParameters( centerX, centerY );\n\n\t}\n\n\t_handleTouchMoveDollyPan( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enablePan ) this._handleTouchMovePan( event );\n\n\t}\n\n\t_handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( this.enableZoom ) this._handleTouchMoveDolly( event );\n\n\t\tif ( this.enableRotate ) this._handleTouchMoveRotate( event );\n\n\t}\n\n\t// pointers\n\n\t_addPointer( event ) {\n\n\t\tthis._pointers.push( event.pointerId );\n\n\t}\n\n\t_removePointer( event ) {\n\n\t\tdelete this._pointerPositions[ event.pointerId ];\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) {\n\n\t\t\t\tthis._pointers.splice( i, 1 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_isTrackingPointer( event ) {\n\n\t\tfor ( let i = 0; i < this._pointers.length; i ++ ) {\n\n\t\t\tif ( this._pointers[ i ] == event.pointerId ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t}\n\n\t_trackPointer( event ) {\n\n\t\tlet position = this._pointerPositions[ event.pointerId ];\n\n\t\tif ( position === undefined ) {\n\n\t\t\tposition = new Vector2();\n\t\t\tthis._pointerPositions[ event.pointerId ] = position;\n\n\t\t}\n\n\t\tposition.set( event.pageX, event.pageY );\n\n\t}\n\n\t_getSecondPointerPosition( event ) {\n\n\t\tconst pointerId = ( event.pointerId === this._pointers[ 0 ] ) ? this._pointers[ 1 ] : this._pointers[ 0 ];\n\n\t\treturn this._pointerPositions[ pointerId ];\n\n\t}\n\n\t//\n\n\t_customWheelEvent( event ) {\n\n\t\tconst mode = event.deltaMode;\n\n\t\t// minimal wheel event altered to meet delta-zoom demand\n\t\tconst newEvent = {\n\t\t\tclientX: event.clientX,\n\t\t\tclientY: event.clientY,\n\t\t\tdeltaY: event.deltaY,\n\t\t};\n\n\t\tswitch ( mode ) {\n\n\t\t\tcase 1: // LINE_MODE\n\t\t\t\tnewEvent.deltaY *= 16;\n\t\t\t\tbreak;\n\n\t\t\tcase 2: // PAGE_MODE\n\t\t\t\tnewEvent.deltaY *= 100;\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// detect if event was triggered by pinching\n\t\tif ( event.ctrlKey && ! this._controlActive ) {\n\n\t\t\tnewEvent.deltaY *= 10;\n\n\t\t}\n\n\t\treturn newEvent;\n\n\t}\n\n}\n\nfunction onPointerDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( this._pointers.length === 0 ) {\n\n\t\tthis.domElement.setPointerCapture( event.pointerId );\n\n\t\tthis.domElement.addEventListener( 'pointermove', this._onPointerMove );\n\t\tthis.domElement.addEventListener( 'pointerup', this._onPointerUp );\n\n\t}\n\n\t//\n\n\tif ( this._isTrackingPointer( event ) ) return;\n\n\t//\n\n\tthis._addPointer( event );\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchStart( event );\n\n\t} else {\n\n\t\tthis._onMouseDown( event );\n\n\t}\n\n}\n\nfunction onPointerMove( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tif ( event.pointerType === 'touch' ) {\n\n\t\tthis._onTouchMove( event );\n\n\t} else {\n\n\t\tthis._onMouseMove( event );\n\n\t}\n\n}\n\nfunction onPointerUp( event ) {\n\n\tthis._removePointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 0:\n\n\t\t\tthis.domElement.releasePointerCapture( event.pointerId );\n\n\t\t\tthis.domElement.removeEventListener( 'pointermove', this._onPointerMove );\n\t\t\tthis.domElement.removeEventListener( 'pointerup', this._onPointerUp );\n\n\t\t\tthis.dispatchEvent( _endEvent );\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tconst pointerId = this._pointers[ 0 ];\n\t\t\tconst position = this._pointerPositions[ pointerId ];\n\n\t\t\t// minimal placeholder event - allows state correction on pointer-up\n\t\t\tthis._onTouchStart( { pointerId: pointerId, pageX: position.x, pageY: position.y } );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseDown( event ) {\n\n\tlet mouseAction;\n\n\tswitch ( event.button ) {\n\n\t\tcase 0:\n\n\t\t\tmouseAction = this.mouseButtons.LEFT;\n\t\t\tbreak;\n\n\t\tcase 1:\n\n\t\t\tmouseAction = this.mouseButtons.MIDDLE;\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tmouseAction = this.mouseButtons.RIGHT;\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tmouseAction = - 1;\n\n\t}\n\n\tswitch ( mouseAction ) {\n\n\t\tcase MOUSE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseDownDolly( event );\n\n\t\t\tthis.state = _STATE.DOLLY;\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.ROTATE:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase MOUSE.PAN:\n\n\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\tthis._handleMouseDownRotate( event );\n\n\t\t\t\tthis.state = _STATE.ROTATE;\n\n\t\t\t} else {\n\n\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\tthis._handleMouseDownPan( event );\n\n\t\t\t\tthis.state = _STATE.PAN;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onMouseMove( event ) {\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleMouseMoveRotate( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.DOLLY:\n\n\t\t\tif ( this.enableZoom === false ) return;\n\n\t\t\tthis._handleMouseMoveDolly( event );\n\n\t\t\tbreak;\n\n\t\tcase _STATE.PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleMouseMovePan( event );\n\n\t\t\tbreak;\n\n\t}\n\n}\n\nfunction onMouseWheel( event ) {\n\n\tif ( this.enabled === false || this.enableZoom === false || this.state !== _STATE.NONE ) return;\n\n\tevent.preventDefault();\n\n\tthis.dispatchEvent( _startEvent );\n\n\tthis._handleMouseWheel( this._customWheelEvent( event ) );\n\n\tthis.dispatchEvent( _endEvent );\n\n}\n\nfunction onKeyDown( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tthis._handleKeyDown( event );\n\n}\n\nfunction onTouchStart( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this._pointers.length ) {\n\n\t\tcase 1:\n\n\t\t\tswitch ( this.touches.ONE ) {\n\n\t\t\t\tcase TOUCH.ROTATE:\n\n\t\t\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.PAN:\n\n\t\t\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tcase 2:\n\n\t\t\tswitch ( this.touches.TWO ) {\n\n\t\t\t\tcase TOUCH.DOLLY_PAN:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyPan( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\t\t\tthis._handleTouchStartDollyRotate( event );\n\n\t\t\t\t\tthis.state = _STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tthis.state = _STATE.NONE;\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n\tif ( this.state !== _STATE.NONE ) {\n\n\t\tthis.dispatchEvent( _startEvent );\n\n\t}\n\n}\n\nfunction onTouchMove( event ) {\n\n\tthis._trackPointer( event );\n\n\tswitch ( this.state ) {\n\n\t\tcase _STATE.TOUCH_ROTATE:\n\n\t\t\tif ( this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_PAN:\n\n\t\t\tif ( this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMovePan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_PAN:\n\n\t\t\tif ( this.enableZoom === false && this.enablePan === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyPan( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tcase _STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\tif ( this.enableZoom === false && this.enableRotate === false ) return;\n\n\t\t\tthis._handleTouchMoveDollyRotate( event );\n\n\t\t\tthis.update();\n\n\t\t\tbreak;\n\n\t\tdefault:\n\n\t\t\tthis.state = _STATE.NONE;\n\n\t}\n\n}\n\nfunction onContextMenu( event ) {\n\n\tif ( this.enabled === false ) return;\n\n\tevent.preventDefault();\n\n}\n\nfunction interceptControlDown( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = true;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.addEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nfunction interceptControlUp( event ) {\n\n\tif ( event.key === 'Control' ) {\n\n\t\tthis._controlActive = false;\n\n\t\tconst document = this.domElement.getRootNode(); // offscreen canvas compatibility\n\n\t\tdocument.removeEventListener( 'keyup', this._interceptControlUp, { passive: true, capture: true } );\n\n\t}\n\n}\n\nexport { OrbitControls };\n","import { MOUSE, TOUCH } from 'three';\n\nimport { OrbitControls } from './OrbitControls.js';\n\n/**\n * This class is intended for transforming a camera over a map from bird's eye perspective.\n * The class shares its implementation with {@link OrbitControls} but uses a specific preset\n * for mouse/touch interaction and disables screen space panning by default.\n *\n * - Orbit: Right mouse, or left mouse + ctrl/meta/shiftKey / touch: two-finger rotate.\n * - Zoom: Middle mouse, or mousewheel / touch: two-finger spread or squish.\n * - Pan: Left mouse, or arrow keys / touch: one-finger move.\n *\n * @augments OrbitControls\n * @three_import import { MapControls } from 'three/addons/controls/MapControls.js';\n */\nclass MapControls extends OrbitControls {\n\n\tconstructor( object, domElement ) {\n\n\t\tsuper( object, domElement );\n\n\t\t/**\n\t\t * Overwritten and set to `false` to pan orthogonal to world-space direction `camera.up`.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default false\n\t\t */\n\t\tthis.screenSpacePanning = false;\n\n\t\t/**\n\t\t * This object contains references to the mouse actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tLEFT: THREE.MOUSE.PAN,\n\t\t * \tMIDDLE: THREE.MOUSE.DOLLY,\n\t\t * \tRIGHT: THREE.MOUSE.ROTATE\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.mouseButtons = { LEFT: MOUSE.PAN, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.ROTATE };\n\n\t\t/**\n\t\t * This object contains references to the touch actions used by the controls.\n\t\t *\n\t\t * ```js\n\t\t * controls.mouseButtons = {\n\t\t * \tONE: THREE.TOUCH.PAN,\n\t\t * \tTWO: THREE.TOUCH.DOLLY_ROTATE\n\t\t * }\n\t\t * ```\n\t\t * @type {Object}\n\t\t */\n\t\tthis.touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE };\n\n\t}\n\n}\n\nexport { MapControls };\n","// math.ts\n\nexport const EPS = 1e-6;\nexport const EPS_NANO = 1e-9;\n\nexport function nextPowerOfTwo(x: number): number {\n return 2 ** Math.ceil(Math.log2(x));\n}\n\n/**\n * randomBetween lower and upper, including lower but not upper.\n */\nexport function randomBetween(lower: number, upper: number): number {\n return Math.random() * (upper - lower) + lower;\n}\n\n/**\n * minmax\n * Given a number, it will be bounded by the given min and max.\n */\nexport function minmax(target: number, min: number, max: number): number {\n return Math.min(Math.max(target, min), max);\n}\n","// SetControls.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { TrackballControls } from 'three/examples/jsm/controls/TrackballControls';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\nimport { MapControls } from 'three/examples/jsm/controls/MapControls';\nimport { useFrame, useViewContext } from '../utils/hooks';\nimport {\n CONTROLS_TYPES,\n DEFAULT_UP_VEC3,\n DEFAULT_NORMAL_VEC3,\n} from '../utils/constants';\nimport { EPS } from '../utils/math';\n\nconst { useEffect, useState, useMemo, memo } = React;\n\n// Helper function for deep comparison\nconst isEqual = (a: any, b: any): boolean => {\n return JSON.stringify(a) === JSON.stringify(b);\n};\n\nfunction SetControls({\n controlsType,\n cameraExtrinsics,\n polarAngle,\n azimuthAngle,\n controlsProps,\n}): null {\n const { camera, gl } = useViewContext();\n\n // Set CameraControls\n const CameraControls = useMemo(\n function updateCameraControls() {\n switch (controlsType) {\n case CONTROLS_TYPES.TRACKBALL_CONTROLS:\n return TrackballControls;\n case CONTROLS_TYPES.ORBIT_CONTROLS:\n return OrbitControls;\n case CONTROLS_TYPES.MAP_CONTROLS:\n return MapControls;\n default:\n return null;\n }\n },\n [controlsType]\n );\n\n const [_controlsProps, setControlsProps] = useState(controlsProps);\n useEffect(\n function updateControlsProps() {\n // Update Controls Props\n if (!isEqual(_controlsProps, controlsProps)) {\n setControlsProps(controlsProps);\n }\n },\n [controlsProps, _controlsProps]\n );\n\n const [_cameraExtrinsics, setCameraExtrinsics] = useState(cameraExtrinsics);\n useEffect(\n function updateCameraExtrinsics() {\n // Update Camera Extrinsics\n if (!isEqual(_cameraExtrinsics, cameraExtrinsics)) {\n setCameraExtrinsics(cameraExtrinsics);\n }\n },\n [cameraExtrinsics, _cameraExtrinsics]\n );\n\n useEffect(\n function updateCameraControls() {\n // Clear Camera Controls\n if (camera.controls != null) {\n camera.controls.dispose();\n camera.controls = null;\n }\n\n // Camera Extrinsics\n const { position, up, target, rotation, roll } = _cameraExtrinsics;\n camera.position.set(...position);\n camera.up = new THREE.Vector3(...up).normalize();\n camera.target = new THREE.Vector3(...target);\n camera.lookAt(camera.target);\n if (rotation) {\n // Default rotation is camera pointing in z-axis with up as y-axis.\n camera.rotation.set(...rotation);\n }\n\n // Apply Camera Roll\n camera.roll = roll;\n const look = target.map((val, i) => val - position[i]);\n const lookVec = new THREE.Vector3(...look).normalize();\n const rollQ = new THREE.Quaternion().setFromAxisAngle(\n lookVec,\n camera.roll\n );\n camera.quaternion.premultiply(rollQ);\n\n // Prevent gimble lock from parallel look and up\n if (1 - Math.abs(camera.up.clone().dot(lookVec)) < EPS) {\n // Offset toward DEFAULT_UP or DEFAULT_NORMAL\n const offset =\n 1 - Math.abs(DEFAULT_UP_VEC3.clone().dot(camera.up)) < EPS\n ? DEFAULT_NORMAL_VEC3.clone()\n : DEFAULT_UP_VEC3.clone();\n offset.multiplyScalar(EPS);\n camera.up.add(offset).normalize();\n console.warn(\n `[View3D.camera] up and look (target - position) directions are parallel. up has been slightly offset to prevent unexpected camera controls behavior.`\n );\n }\n camera.up.applyQuaternion(rollQ);\n\n // Initialize Camera Controls\n if (CameraControls != null) {\n camera.controls = new CameraControls(\n // polarAngle,\n // azimuthAngle,\n camera,\n gl.domElement\n );\n camera.controls.enabled = true;\n }\n\n camera.updateProjectionMatrix();\n },\n [\n CameraControls,\n camera,\n _cameraExtrinsics,\n polarAngle,\n azimuthAngle,\n gl.domElement,\n ]\n );\n\n useEffect(\n function updateCameraControlsProps() {\n // Update Camera Controls\n if (CameraControls != null) {\n if (_controlsProps) {\n Object.entries(_controlsProps).map(([param, value]) => {\n camera.controls[param] = value;\n return null;\n });\n }\n\n camera.controls.update();\n }\n },\n [CameraControls, camera, _controlsProps]\n );\n\n return null;\n}\n\nconst SetControlsMemo = memo(SetControls);\nSetControlsMemo.displayName = 'SetControls';\nexport default SetControlsMemo;\n\n/**\n * UpdateControls\n *\n * Isolates the useFrame hook to avoid larger components, namely\n * SetControls, from re-rendering up to 3 times--this is a bug\n * from @react-three/fiber.\n * Any @react-three/fiber hook call incurs additional renders.\n */\nexport const UpdateControls = memo(function UpdateControls(): null {\n const { camera } = useViewContext();\n\n useFrame(function updateControls() {\n if (camera.controls != null) {\n camera.controls.update();\n }\n });\n\n return null;\n});\nUpdateControls.displayName = 'UpdateControls';\n","// ContextBridge.tsx\nimport * as React from \"react\";\nimport { useFrame } from \"@react-three/fiber\";\n\nconst { useState, useContext, memo } = React;\n\ntype ContextListenerProps = {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n context: React.Context<any>;\n values: Array<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n index: number;\n};\n\n/**\n * ContextListener\n */\nfunction ContextListener({\n context,\n values,\n index\n}: ContextListenerProps): null {\n // Safety checks\n if (!context || !values || !Array.isArray(values) || typeof index !== 'number') {\n return null;\n }\n\n /* eslint-disable no-param-reassign */\n values[index] = useContext(context);\n /* eslint-enable no-param-reassign */\n return null;\n}\n\n/**\n * GeneraterContextListeners\n *\n * Create a ContextListener for each context in the given contexts array.\n * Each ContextListener must be a outside the @react-three/fiber's Canvas\n * component to detect the context values ContextListener and changes\n * the value in the values array.\n * the useContext hook in each ContextListener.\n * This allows the context changes to be captured and passed into the\n * ContextBridge.\n */\nexport function GenerateContextListeners(\n /* eslint-disable @typescript-eslint/no-explicit-any */\n contexts: Array<React.Context<any>>,\n values: Array<any>\n /* eslint-enable @typescript-eslint/no-explicit-any */\n): Array<React.ReactNode> {\n // Safety checks\n if (!contexts || !Array.isArray(contexts) || !values || !Array.isArray(values)) {\n return [];\n }\n\n /* eslint-disable react/no-array-index-key */\n const contextListeners: Array<React.ReactNode> = contexts.map(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n (context: React.Context<any>, index: number) => (\n <ContextListener\n context={context}\n values={values}\n index={index}\n key={index}\n />\n )\n );\n /* eslint-enable react/no-array-index-key */\n return contextListeners;\n}\n\ntype ContextBridgeProps = {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n contexts?: Array<React.Context<any>>;\n values?: Array<any>;\n children?: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n\n/**\n * ContextBridge\n */\nexport const ContextBridge = memo(function ContextBridge({\n contexts,\n values,\n children\n}: ContextBridgeProps) {\n const [, update] = useState<number>(0);\n // Context Updater\n // Always trigger a rerender here and trust that\n // Context.Provider will only rerender when value\n // has changed\n useFrame(() => update(prev => prev + 1));\n\n if (!contexts || !values) {\n return <>{children}</>;\n }\n\n return contexts.reduce(\n (child, Context, index) => (\n <Context.Provider value={values[index]}>{child}</Context.Provider>\n ),\n children\n );\n});\nContextBridge.displayName = \"ContextBridge\";\n","// View3D.tsx\nimport * as React from 'react';\nimport { Canvas, useThree } from '@react-three/fiber';\nimport SetRenderer from './SetRenderer';\nimport SetBackground from './SetBackground';\nimport SetShadows from './SetShadows';\nimport SetControls, { UpdateControls } from './SetControls';\nimport { GenerateContextListeners, ContextBridge } from './ContextBridge';\nimport { ViewContextProvider } from './ViewContext';\nimport { reconcileSynonymousProps } from '../utils/util';\nimport {\n SYNONYMOUS_CONTROLS_PROPS,\n ANTONYMOUS_CONTROLS_PROPS,\n SYNONYMOUS_CAMERA_PROPS,\n CONTROLS_TYPES,\n CAMERA_TYPES,\n DEFAULT_UP,\n} from '../utils/constants';\n\nimport { version } from '../../package.json';\n\nconst { useRef, useEffect, useMemo, memo } = React;\n\ninterface View3DProps {\n backgroundColor?: string;\n backgroundTextureURL?: string;\n backgroundEquirectangularTextureURL?: string;\n backgroundEquirectangularRGBEURL?: string;\n trackballControls?: boolean;\n orbitControls?: boolean;\n mapControls?: boolean;\n shadowMapEnabled?: boolean;\n shadowType?: string;\n orthographic?: boolean;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n camera?: any; // Object\n controls?: any; // Object\n gl?: any; // Object\n contexts?: React.Context<any> | Array<React.Context<any>>;\n style?: Record<string, any>;\n children: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n}\n\n/**\n * View3D\n *\n * In Standard View, View3D creates the @react-three/fiber Canvas\n * and also applies some extra features, such as setting the\n * background color/texture/equirectangular texture.\n * For @react-three/fiber, this is not possible since the background\n * color or texture is not a THREE.WebGLRenderer parameter with a setter.\n * Since @react-three/fiber does not provide an easy way to call methods\n * of three.js objects, View3D provides the settings for the Canvas\n * that @react-three/fiber does not.\n *\n * All other @react-three/fiber functionality for its Canvas properties\n * are maintained and applied, since the View3D specific properties are\n * stripped out.\n *\n * Camera controls may be enable by passing in true for either trackballControls\n * orbitControls, or mapControls. Camera controls parameters may be passed with the controls\n * prop in the form of an Object, similar to camera's props.\n *\n * SetCanvasProps is a small component that isolates the useThree hook.\n * Unfortunately, @react-three/fiber hooks incur additional renders,\n * hence those hooks have been encapsulated into small components to avoid\n * re-rendering larger more complicated logic. Similarly, UpdateCameraControls\n * isolates the useThree hook.\n *\n * SetBackground, SetShadows, and SetControls contain logic encapsulated in\n * components because these changes cannot be applied through @react-three/fiber\n * props on Canvas. Also, this logic cannot be applied in the body of View3D\n * since background, shadows, and camera controls depends on the creation of\n * Canvas and ultimately mutate the Canvas Properties, namely camera, gl,\n * and scene. Thus this logic must execute in components after Canvas is created\n * and within the Canvas component.\n *\n * Any number of React contexts may be passed into View3D. Since @react-three/fiber\n * provides its own render method and reconciler, contexts must be maintained via\n * a context bridge. In order to permeate contexts into View3D, pass an array of\n * all contexts to the contexts prop.\n * Also, ViewContext will always provide Canvas Props so that all components in a\n * particular View3D has access to those particular @react-three/fiber\n * Canvas Props (gl, scene, camera, etc)\n *\n * @param {View3DProps} props\n */\nconst View3D: React.FunctionComponent<View3DProps> = function View3D({\n trackballControls,\n orbitControls,\n mapControls,\n backgroundColor,\n backgroundTextureURL,\n backgroundEquirectangularTextureURL,\n backgroundEquirectangularRGBEURL,\n shadowMapEnabled = false,\n shadowType = 'pcfsoft',\n camera,\n controls = {},\n gl,\n orthographic,\n contexts,\n children,\n ...otherProps\n}) {\n // Print Standard View Version\n useEffect(() => {\n /* eslint-disable-next-line no-console */\n console.log(`%cStandard View Core ${version}`, 'color: orange');\n }, []);\n\n // ----- Contexts -----//\n const _contexts = useMemo(\n function updateContexts() {\n if (contexts) {\n // Handle Single Context (non Array) or Multiple Contexts (Array)\n return Array.isArray(contexts) ? contexts : [contexts];\n } else {\n return [];\n }\n },\n [contexts]\n );\n\n // ----- Canvas Props -----//\n const canvasProps = useRef<any>(null);\n\n // ----- gl Props -----//\n const { glParameters, glProps } = useMemo(\n function updateGLProps() {\n // WebGLRenderer Parameters on Initialization\n const glParameterKeys = [\n 'context',\n 'precision',\n 'alpha',\n 'premultipliedAlpha',\n 'antialias',\n 'stencil',\n 'preserveDrawingBuffer',\n 'powerPreference',\n 'failIfMajorPerformanceCaveat',\n 'depth',\n 'logarithmicDepthBuffer',\n ];\n\n /* eslint-disable no-shadow */\n const glParameters = { antialias: true, preserveDrawingBuffer: true };\n const glProps = { antialias: true, preserveDrawingBuffer: true };\n /* eslint-enable no-shadow */\n\n // Extract glParams and glProps\n if (gl) {\n Object.entries(gl).map(([key, value]) => {\n if (glParameterKeys.includes(key)) {\n glParameters[key] = value;\n } else {\n glProps[key] = value;\n }\n\n return null;\n });\n }\n\n return { glParameters, glProps };\n },\n [gl]\n );\n\n // ----- Background -----//\n const backgroundProps = useMemo(\n function updateBackgroundProps() {\n return {\n backgroundColor,\n backgroundTextureURL,\n backgroundEquirectangularTextureURL,\n backgroundEquirectangularRGBEURL,\n };\n },\n [\n backgroundColor,\n backgroundTextureURL,\n backgroundEquirectangularTextureURL,\n backgroundEquirectangularRGBEURL,\n ]\n );\n\n // ----- Shadows -----//\n const shadowProps = useMemo(\n function updateShadowProps() {\n return {\n shadowMapEnabled: shadowMapEnabled || true,\n shadowType: shadowType || 'type',\n };\n },\n [shadowMapEnabled, shadowType]\n );\n\n // ----- Camera Controls ----- //\n const cameraType = useMemo(\n function updateCameraType() {\n return orthographic\n ? CAMERA_TYPES.ORTHOGRAPHIC\n : CAMERA_TYPES.PERSPECTIVE;\n },\n [orthographic]\n );\n const controlsType = useMemo(\n function updateControlsType() {\n if (orbitControls) {\n return CONTROLS_TYPES.ORBIT_CONTROLS;\n } else if (trackballControls) {\n return CONTROLS_TYPES.TRACKBALL_CONTROLS;\n } else if (mapControls) {\n return CONTROLS_TYPES.MAP_CONTROLS;\n }\n\n return 'none';\n },\n [orbitControls, trackballControls, mapControls]\n );\n\n // ----- Camera Props -----//\n const { cameraExtrinsics, cameraProps } = useMemo(\n function updateCameraProps() {\n /* eslint-disable no-shadow */\n const {\n position = [0, 0, 5],\n target = [0, 0, 0],\n up = DEFAULT_UP,\n rotation = undefined,\n roll = 0,\n ...cameraProps\n } = camera || {};\n\n const cameraExtrinsics = {\n position,\n target,\n up,\n rotation,\n roll,\n };\n /* eslint-enable no-shadow */\n\n return { cameraExtrinsics, cameraProps };\n },\n [camera]\n );\n\n // ----- Controls Props ----- //\n const controlsProps = useMemo(\n function updateControlsProps() {\n // Extract Angles of Rotation\n var { polarAngle = 0, azimuthAngle = 0, ...controlsProps } = controls;\n controlsProps = controlsProps || {};\n\n // Reconcile Control Props\n if (controlsType !== 'none') {\n reconcileSynonymousProps(\n controlsProps,\n SYNONYMOUS_CONTROLS_PROPS,\n controlsType\n );\n reconcileSynonymousProps(\n controlsProps,\n ANTONYMOUS_CONTROLS_PROPS,\n controlsType,\n true\n );\n }\n reconcileSynonymousProps(\n controlsProps,\n SYNONYMOUS_CAMERA_PROPS,\n cameraType\n );\n\n return {\n controlsType,\n polarAngle,\n azimuthAngle,\n cameraExtrinsics,\n controlsProps:\n Object.keys(controlsProps).length > 0 ? controlsProps : undefined,\n };\n },\n [controlsType, cameraType, controls, cameraExtrinsics]\n );\n\n const values = useRef([]);\n /* eslint-disable react-hooks/exhaustive-deps */\n const contextListeners = useMemo(\n function generateContextListeners() {\n return GenerateContextListeners(_contexts, values?.current || []);\n },\n [_contexts]\n );\n /* eslint-enable react-hooks/exhaustive-deps */\n\n return (\n <>\n {contextListeners}\n <Canvas\n camera={cameraProps}\n orthographic={orthographic}\n // updateDefaultCamera={updateDefaultCamera}\n // @ts-ignore:TS2559 no properties in common with Partial<WebGLRenderer>\n gl={glParameters}\n {...otherProps}\n >\n <SetCanvasProps canvasProps={canvasProps} />\n <ViewContextProvider canvasProps={canvasProps}>\n <ContextBridge contexts={_contexts} values={values.current}>\n <SetRenderer {...glProps} />\n <SetBackground {...backgroundProps} />\n <SetShadows {...shadowProps} />\n <SetControls {...controlsProps} />\n {(mapControls ||\n trackballControls ||\n (controls && controls.autoRotate)) && <UpdateControls />}\n {children}\n </ContextBridge>\n </ViewContextProvider>\n </Canvas>\n </>\n );\n};\n\nconst View3DMemo = memo(View3D);\nView3DMemo.displayName = 'View3D';\nexport default View3DMemo;\n\n/**\n * SetCanvasProps\n *\n * Isolates the useThree hook to avoid larger components from\n * re-rendering up to 3 times--this is a bug from @react-three/fiber.\n * Any @react-three/fiber hook call incurs additional renders.\n */\nconst SetCanvasProps = memo(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n function SetCanvasProps({ canvasProps }: any) {\n /* eslint-disable-next-line no-param-reassign */\n canvasProps.current = useThree();\n return null;\n },\n () => true\n);\nSetCanvasProps.displayName = 'SetCanvasProps';\n","// styles.js\n\nexport const DEFAULT_COLOR = \"gray\";\nexport const DEFAULT_HIGHLIGHT_COLOR = \"yellow\";\n","// events.tsx\nimport * as React from \"react\";\nimport { RenderCallback } from \"@react-three/fiber\";\nimport { useAnimationFrame } from \"./hooks\";\n\nconst { memo } = React;\n\n// ----- Event Function Helpers ----- //\n// Check Mouse Propagation\nexport function checkPropagation(e, mousePropagation: boolean): void {\n if (!mousePropagation) {\n e.stopPropagation();\n }\n}\n\n// Handle Click and Double Click\ninterface HandleClickProps {\n mousePropagation: boolean;\n clickSensitivity: number;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n eventProps: any;\n onClick?: Function;\n onDoubleClick?: Function;\n}\nexport function handleClick({\n mousePropagation,\n clickSensitivity,\n eventProps,\n onClick,\n onDoubleClick\n}: HandleClickProps): React.MouseEventHandler {\n return (e): null => {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n // No Click Functions\n if (!onClick && !onDoubleClick) {\n return null;\n }\n\n const state = eventProps.state;\n\n // No onDoubleClick\n if (onClick && !onDoubleClick) {\n // @ts-ignore TS2722 // Cannot invoke an object which is possible undefined\n onClick({ ...e, ...eventProps });\n return null;\n }\n\n // Click Time\n const currentTime = Date.now();\n\n // Double Click\n if (onDoubleClick) {\n if (currentTime - state.lastClickTime <= clickSensitivity) {\n // Set Last Click\n state.lastClickTime = currentTime;\n // @ts-ignore TS2722 // Cannot invoke an object which is possible undefined\n onDoubleClick({ ...e, ...eventProps });\n return null;\n }\n }\n\n // Single Click\n if (onClick) {\n // Waits to check for Double Click before executing\n setTimeout(() => {\n const initialClickTime = currentTime;\n if (state.lastClickTime === initialClickTime) {\n // @ts-ignore TS2722 // Cannot invoke an object which is possible undefined\n onClick({ ...e, ...eventProps });\n }\n\n return null;\n }, clickSensitivity + 1);\n }\n\n // Set Last Click\n state.lastClickTime = currentTime;\n\n return null;\n };\n}\n\ninterface AnimationComponentProps {\n animation: RenderCallback;\n}\n\n/**\n * AnimationComponent\n *\n * Isolate @react-three/fiber's useFrame hook to add animation\n * function to three's render loop.\n */\nexport const AnimationComponent = memo<AnimationComponentProps>(\n /* eslint-disable react/prop-types */\n function AnimationComponent({ animation }) {\n useAnimationFrame(animation, [animation]);\n return null;\n }\n /* eslint-enable react/prop-types */\n);\nAnimationComponent.displayName = \"AnimationComponent\";\n","// performance.tsx\n\n/**\n * Performance Check Timers\n * Aggregates timers that execute multiple times with the same name.\n * Handles multiple concurrent timers with different names.\n * Cannot aggregate multiple concurrent timers with the same name.\n *\n * Usage:\n * - Place performanceStart(\"timer name\") at the beginning.\n * - Place performanceEnd(\"timer name\") at the end.\n * - For multiple timers, names must be unique.\n * - stopwatchMode allows for printing total performance time\n * at each occurence of performanceEnd without having to\n * create new performanceStart's. Default is false.\n * - Place performanceLog(\"timer name\") after recording with\n * performanceStart and performanceEnd to print results.\n */\n\nconst timers = {};\n\nexport function performanceStart(\n name = \"no name\",\n stopwatchMode = false\n): void {\n // Timer Already Exists\n if (timers[name]) {\n const timer = timers[name];\n\n // Timer Already Running\n if (timer.running) {\n console.warn(\n `${name} is already running! Cannot start another timer with the same name.`\n );\n return;\n }\n\n // Start Timer\n timer.running = true;\n timer.start = performance.now();\n return;\n }\n\n // New Timer\n timers[name] = {\n start: 0,\n count: 0,\n total: 0,\n average: 0,\n running: true,\n stopwatchMode\n };\n\n timers[name].start = performance.now();\n}\n\nexport function performanceEnd(name = \"no name\"): void {\n const end = performance.now();\n\n // Timer Never Started\n if (timers[name] == null) {\n console.warn(\n `Timer ${name} does not exist. Make sure to place performanceStart(\"timer name\") before performanceEnd(\"timer name\")!`\n );\n return;\n }\n\n const timer = timers[name];\n if (!timer.running) {\n console.warn(\n `Timer ${name} not running. Make sure to place performanceStart(\"timer name\") before performanceEnd(\"timer name\")!`\n );\n return;\n }\n\n // End Timer\n const time = end - timer.start;\n timer.count++;\n timer.total += time;\n timer.average = timer.total / timer.count;\n\n // Stopwatch Mode\n if (timer.stopwatchMode) {\n /* eslint-disable-next-line no-console */\n console.log(\n `${name}: total ${timer.total}, average ${timer.average}, runs ${timer.count}`\n );\n timer.start = performance.now();\n } else {\n timer.running = false;\n }\n}\n\nexport function performanceLog(\n name = \"no name\",\n print = true\n): { average: number; total: number; count: number } {\n // Timer Never Recorded\n if (timers[name] == null) {\n console.warn(\n `Timer ${name} never recorded. Make sure to place performanceStart(\"timer name\") and performanceEnd(\"timer name\") before performanceLog(\"timer name\")!`\n );\n return { average: 0, total: 0, count: 0 };\n }\n\n const { count, total, average } = timers[name];\n\n if (print) {\n /* eslint-disable-next-line no-console */\n console.log(\n `\\x1b[36m ${name}\\t \\x1b[33m average: ${average}\\t \\x1b[31m total: ${total}\\t \\x1b[92m count: ${count}`\n );\n }\n return { average, total, count };\n}\n","// Mesh.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { DEFAULT_COLOR } from '../utils/styles';\nimport {\n DEFAULT_NORMAL,\n DEFAULT_NORMAL_VEC3,\n MATERIAL_TYPES,\n SIDE_TYPES,\n EULER_ORDERS,\n} from '../utils/constants';\nimport { StandardViewTypes } from '../utils/interfaces';\nimport { EPS } from '../utils/math';\nimport {\n handleClick,\n checkPropagation,\n AnimationComponent,\n} from '../utils/events';\nimport { useViewContext } from '../utils/hooks';\nimport { objectToArray, filterArrayLength, toQuaternion } from '../utils/util';\nimport { performanceStart, performanceEnd } from '../utils/performance';\n\nconst { useState, useRef, useEffect, useMemo, useCallback, forwardRef, memo } =\n React;\n\nexport interface MeshProps {\n // Mesh Props\n position?: Array<number>;\n scale?: Array<number>;\n geometry?: StandardViewTypes.Geometries;\n // Rotation Props\n rotation?: Array<number>;\n eulerOrder?: string;\n normal?: Array<number>;\n up?: Array<number>;\n roll?: number;\n quaternion?: Array<number> | THREE.Quaternion;\n // Material Props\n materialType?: string;\n material?: THREE.Material;\n view3DEnvMap?: boolean;\n // materialProps\n color?: string | THREE.Color;\n hoverColor?: string;\n opacity?: number;\n transparent?: boolean;\n roughness?: number;\n metalness?: number;\n reflectivity?: number;\n anisotropy?: number;\n texturePath?: string;\n textureURL?: string;\n map?: THREE.Texture;\n aoMap?: THREE.Texture;\n aoMapIntensity?: number;\n bumpMap?: THREE.Texture;\n bumpScale?: number;\n normalMap?: THREE.Texture;\n normalMapType?: number;\n normalMapScale?: number;\n displacementMap?: THREE.Texture;\n displacementMapScale?: number;\n displacementBias?: number;\n roughnessMap?: THREE.Texture;\n metalnessMap?: THREE.Texture;\n alphaMap?: THREE.Texture;\n envMap?: THREE.Texture;\n envMapIntensity?: number;\n wireframe?: boolean;\n side?: string | THREE.Side;\n depthWrite?: boolean;\n depthTest?: boolean;\n renderOrder?: number;\n visible?: boolean;\n // Group Props\n groupMember?: boolean;\n // Shadow Props\n castShadow?: boolean;\n receiveShadow?: boolean;\n // Animation Function\n animation?: Function;\n // Ref\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ref?: React.Ref<any>;\n // State\n state?: object;\n // Event Functions\n onClick?: Function;\n onDoubleClick?: Function;\n onWheel?: Function;\n onPointerUp?: Function;\n onPointerDown?: Function;\n onPointerOver?: Function;\n onPointerOut?: Function;\n onPointerMove?: Function;\n // Event Props\n hoverable?: boolean;\n mousePropagation?: boolean;\n clickSensitivity?: number; // milliseconds\n ignoreMouseEvents?: boolean;\n // Analysis Props\n track?: boolean;\n frame?: number;\n // Children\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n children?: any;\n}\n\ninterface MaterialComponentProps {\n materialType: string;\n hasMaterialChild: boolean;\n material: THREE.Material;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n materialProps: any; // Object\n}\n\n/**\n * Material Component\n *\n * Creates custom material based on materialType and material props\n * if no material child exists.\n */\nconst MaterialComponent = memo<MaterialComponentProps>(\n /* eslint-disable react/prop-types */\n function MaterialComponent({\n materialType,\n material,\n hasMaterialChild,\n materialProps,\n }) {\n const MeshMaterial = useMemo(\n function updateMeshMaterial() {\n // Validated materialType\n if (!MATERIAL_TYPES[materialType]) {\n return MATERIAL_TYPES.basic;\n }\n\n return MATERIAL_TYPES[materialType];\n },\n [materialType]\n );\n\n if (hasMaterialChild || material) {\n return null;\n } else {\n return <MeshMaterial attach=\"material\" args={[materialProps]} />;\n }\n }\n /* eslint-enable react/prop-types */\n);\nMaterialComponent.displayName = 'MaterialComponent';\n\n/**\n * Mesh\n *\n * This is a wrapper for @react-three/fiber/three.js's mesh.\n * In three.js Mesh extends Object3D which is essentially the root of\n * all 3D objects. With this wrapper, Standard View users need not\n * get tangled with the intricacies of geometries and materials and\n * may treat primitives as singular objects with properties. Standard View\n * manages which property is assigned to geometry or materials.\n * However, just as @react-three/fiber allows for manipulation of all the\n * three.js properties, so does Standard View. A primitive or shape may be\n * loaded with custom geometry or materials or even composed with custom\n * child components.\n *\n * In Standard View, nearly all the primitives are composed within Mesh.\n * The common properties of all Meshes are applied in this component.\n *\n * Mesh has two important child components: material and geometry.\n * These components may also be passed as material and geometry props.\n * The type of geometry and material depend on the primitive.\n * The geometry must be passed in either as a property or composed\n * within the component as a child.\n *\n * If no material is passed in, a default meshBasicMaterial is created.\n * The properties that Mesh accepts include those defined in the\n * MeshProps type (and also anything that three.js Mesh has a setter for)\n *\n * Note that most geometry are initialized with unit lengths and parameters,\n * and it is actually the mesh that is scaled, rotated, translated to get\n * the particular shape and orientation desired. Fortunately, all parameters\n * passed into the Prefab primitives will be drilled down to Mesh and applied.\n *\n * Mesh can also support animations via the animation property. A function with\n * one argument that may be destructured to include mesh, state, setState, and any\n * Canvas props desired for the animation.\n * All primitives and shapes may have animation. These animations are reactive,\n * infinite requestAnimationFrame loops, so they incur many render calls,\n * but also maintain react-three-renderer's native raycasting for the\n * event property functions, onPointerHover, onPointerOut, onPointerClick,\n * onPointerMove, onPointerDown, onPointerUp, onWheel,\n * and other mouse-handling events.\n *\n * Mesh also exposes @react-three/fiber's the event property functions but with\n * a constrained argument set, same as animation. All event property functions\n * take one arguement that may be destructured to include mesh, state, setState,\n * and any Canvas prop. The benefit of this design, just like\n * animations, is that a reference to mesh is automatically provided and also\n * access to all props are available. Moreover, @react-three/fiber's Canvas\n * state properties are exposed. This allows event functions to reach right\n * into the @react-three/fiber/three.js's scene, camera, gl. Hence all shapes\n * that are Meshes may have these event property functions.\n *\n * @param {MeshProps} props\n */\n\nconst Mesh: React.FunctionComponent<MeshProps> = forwardRef<\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n React.RefObject<any>,\n MeshProps\n>(function Mesh(\n {\n // Geometry Props\n geometry,\n position = [0, 0, 0],\n scale = [1, 1, 1],\n // Rotation Props (passed into quaternion)\n rotation = [0, 0, 0],\n eulerOrder = EULER_ORDERS.XYZ,\n normal = DEFAULT_NORMAL,\n roll = 0,\n quaternion,\n // Material Props\n material,\n materialType = 'basic',\n color = DEFAULT_COLOR,\n hoverColor,\n opacity = 1,\n transparent,\n roughness = 0.5,\n metalness = 0.5,\n reflectivity = 0.5,\n texturePath,\n textureURL,\n map,\n aoMap,\n aoMapIntensity,\n bumpMap,\n bumpScale,\n normalMap,\n normalMapType,\n normalMapScale,\n displacementMap,\n displacementMapScale,\n displacementBias,\n roughnessMap,\n metalnessMap,\n alphaMap,\n envMap,\n envMapIntensity,\n view3DEnvMap = false,\n wireframe = false,\n // edges = false,\n // edgeColor = \"black\",\n // edgeThresholdAngle = 1,\n side = 'front',\n depthWrite = true,\n depthTest = true,\n // Map Props\n anisotropy = 1,\n // Group Props\n groupMember = false,\n // Event Functions\n onClick,\n onDoubleClick,\n onWheel,\n onPointerUp,\n onPointerDown,\n onPointerOver,\n onPointerOut,\n onPointerMove,\n // Event Props\n hoverable = true,\n mousePropagation = false,\n clickSensitivity = 250,\n ignoreMouseEvents = false,\n // Shadow Props\n // castShadow\n receiveShadow, // Need to manually update needsUpdate\n // Animation Function\n animation,\n // State\n state,\n // Analysis Props\n // track = false,\n // frame = 0,\n // Children\n children,\n // Mesh Props (passed into otherProps)\n ...otherProps\n },\n ref\n) {\n performanceStart('Mesh');\n\n // Canvas Properties\n // const canvasProps = useContext(ViewContext);\n const { envMap: viewContextEnvMap, ...canvasProps } = useViewContext();\n\n // Position\n const _position = useMemo(\n function updatePosition() {\n if (position) {\n return filterArrayLength(objectToArray(position), 3, [0, 0, 0]);\n }\n return undefined;\n },\n [position]\n );\n\n // Rotations\n // Intuitively, the component is aligned to the given normal in world space.\n // Then, it is rotated by the rotation / quaternion in the component's local space.\n // Then, it is rotated by the roll about the normal in the component's local space.\n // Since all quaternions are applied in world space, the rotations must all occur in reverse order.\n // So, first apply the roll about the DEFAULT_NORMAL, then rotate by the rotation / quaternion,\n // then apply the normal. This is equivalent to doing local rotations in the intuitive order.\n // Hence q = normalQ * rotationQ * rollQ\n const _quaternion = useMemo(\n function updateQuaternion() {\n // Normal\n // @ts-ignore:T2345 // spread\n const normalVec = new THREE.Vector3(...normal).normalize();\n const normalQ = new THREE.Quaternion().setFromUnitVectors(\n DEFAULT_NORMAL_VEC3,\n normalVec\n );\n\n // Rotation / Quaternion\n let rotationQ = new THREE.Quaternion();\n if (quaternion == null) {\n // Convert Euler Rotation to Quaternion\n // @ts-ignore:T2345\n let _eulerOrder = eulerOrder.toUpperCase();\n _eulerOrder = EULER_ORDERS[_eulerOrder]\n ? _eulerOrder\n : EULER_ORDERS.XYZ;\n const euler = new THREE.Euler(...rotation, _eulerOrder);\n rotationQ = new THREE.Quaternion().setFromEuler(euler);\n } else {\n rotationQ = toQuaternion(quaternion);\n }\n\n // Roll\n const rollQ = new THREE.Quaternion().setFromAxisAngle(\n DEFAULT_NORMAL_VEC3,\n roll\n );\n\n // q = normalQ * rotationQ * rollQ\n const q = new THREE.Quaternion(); // Identity\n q.premultiply(rollQ);\n q.premultiply(rotationQ);\n q.premultiply(normalQ);\n return q;\n },\n [quaternion, rotation, eulerOrder, normal, roll]\n );\n\n // Scale\n const _scale = useMemo(\n function updateScale() {\n // Invalid Scale Warning\n if (!Array.isArray(scale) || scale.length !== 3) {\n /* eslint-disable-next-line no-console */\n console.warn(\n `[Mesh] scale must be a 3x1 array of numbers! scale: ${scale}`\n );\n return [1, 1, 1];\n }\n\n // Handle Zero Scale Input\n if (\n !scale[0] ||\n !scale[1] ||\n !scale[2] ||\n Math.abs(scale[0]) < EPS ||\n Math.abs(scale[1]) < EPS ||\n Math.abs(scale[2]) < EPS\n ) {\n /* eslint-disable-next-line no-console */\n console.warn(`[Mesh] scale elements must be non-zero! scale: ${scale}`);\n\n return scale.map(value => Math.max(value, EPS));\n }\n\n return scale;\n },\n [scale]\n );\n\n // Color\n\n // Prevent DEFAULT_COLOR blend into texture with given color\n if (textureURL && color == DEFAULT_COLOR) {\n color = undefined;\n }\n\n const [_color, setColor] = useState(color);\n useEffect(\n function updateColor() {\n setColor(color);\n },\n [color]\n );\n\n // Map Props\n const mapProps = useMemo(\n function initMapProps() {\n return {\n anisotropy,\n };\n },\n [anisotropy]\n );\n\n // TextureURL\n const _textureURL = useMemo(\n function updateTextureURL() {\n return texturePath ? texturePath + textureURL : textureURL;\n },\n [texturePath, textureURL]\n );\n\n // Load Texture\n const _map = useMemo(\n function updateMap() {\n if (_textureURL) {\n // Create Texture\n const tex = new THREE.TextureLoader().load(_textureURL);\n // Set Map Props\n Object.entries(mapProps).map(([prop, value]) => {\n tex[prop] = value;\n return null;\n });\n tex.colorSpace = THREE.SRGBColorSpace;\n return tex;\n }\n\n // Set color space to sRGB if not set\n if (map?.colorSpace == THREE.NoColorSpace) {\n map.colorSpace = THREE.SRGBColorSpace;\n }\n return map;\n },\n [map, mapProps, _textureURL]\n );\n\n // Environment Map\n const _envMap = useMemo(\n function updateEnvMap() {\n const compatibleMaterials = ['basic', 'physical', 'standard'];\n return view3DEnvMap && compatibleMaterials.includes(materialType)\n ? viewContextEnvMap\n : envMap;\n },\n [viewContextEnvMap, view3DEnvMap, envMap, materialType]\n );\n\n // Other Maps\n const otherMaps = useMemo(\n function initOtherMap() {\n const otherMapProps = {\n aoMap,\n aoMapIntensity,\n bumpMap,\n bumpScale,\n normalMap,\n normalMapType,\n normalMapScale,\n displacementMap,\n displacementMapScale,\n displacementBias,\n roughnessMap,\n metalnessMap,\n alphaMap,\n envMap: _envMap,\n envMapIntensity,\n };\n\n return otherMapProps;\n },\n [\n aoMap,\n aoMapIntensity,\n bumpMap,\n bumpScale,\n normalMap,\n normalMapType,\n normalMapScale,\n displacementMap,\n displacementMapScale,\n displacementBias,\n roughnessMap,\n metalnessMap,\n alphaMap,\n _envMap,\n envMapIntensity,\n ]\n );\n\n // Side\n const _side = useMemo(\n function updateSide() {\n if (typeof side === 'string') {\n return SIDE_TYPES[side];\n } else {\n // THREE.Side\n return side;\n }\n },\n [side]\n );\n\n // Material Props\n const materialProps = useMemo(\n function updateMaterialProps() {\n // Metalness\n const _metalness =\n materialType === 'standard' || materialType === 'physical'\n ? metalness\n : undefined;\n // Roughness\n const _roughness =\n materialType === 'standard' || materialType === 'physical'\n ? roughness\n : undefined;\n // Reflectivity\n const reflectiveMaterials = ['basic', 'lambert', 'phong', 'physical'];\n const _reflectivity = reflectiveMaterials.includes(materialType)\n ? reflectivity\n : undefined;\n // Collect All Material Props\n const allMaterialProps = {\n color: _color,\n map: _map,\n ...otherMaps,\n wireframe,\n opacity,\n transparent: transparent != null ? transparent : opacity < 1 - EPS,\n roughness: _roughness,\n metalness: _metalness,\n reflectivity: _reflectivity,\n side: _side,\n depthWrite,\n depthTest,\n };\n\n // Clean undefined and null\n const cleanedMaterialProps = {};\n Object.entries(allMaterialProps).map(([key, value]) => {\n if (value != null) {\n cleanedMaterialProps[key] = value;\n }\n return null;\n });\n\n return cleanedMaterialProps;\n },\n [\n materialType,\n metalness,\n roughness,\n reflectivity,\n _color,\n _map,\n otherMaps,\n wireframe,\n opacity,\n transparent,\n _side,\n depthWrite,\n depthTest,\n ]\n );\n\n // Children\n const _children = useMemo(\n function updateChildren() {\n return children || null;\n },\n [children]\n );\n\n // Check Children for Material\n // Only checks on load. If material children are add later,\n // will not rerender.\n const hasMaterialChild = useMemo(\n function checkMaterialChild() {\n // No Children\n if (_children == null) {\n return false;\n }\n\n // Check Children\n if (_children.length == null) {\n // Check The Only Child for Material\n // Separate check necessary because when there is only one child,\n // react stores children as a variable instead of an array.\n if (Object.values(MATERIAL_TYPES).includes(_children.type)) {\n // Update props.color with child material's color\n if (_children.props.color) {\n setColor(_children.props.color);\n }\n\n return true;\n }\n } else {\n // Check Each Child for Material\n /* eslint-disable no-restricted-syntax */ // loop\n for (const child of _children) {\n if (\n child != null &&\n Object.values(MATERIAL_TYPES).includes(child.type)\n ) {\n // Update props.color with child material's color\n if (child.props.color) {\n setColor(child.props.color);\n }\n\n return true;\n }\n }\n /* eslint-enable no-restricted-syntax */\n }\n\n // No Material Children\n return false;\n },\n [_children]\n );\n\n // Material\n const _material = useMemo(\n function updateMaterial() {\n return material || null;\n },\n [material]\n );\n\n // Ref\n const meshRef = useRef<THREE.Mesh | null>(null); // Hooks must be deterministic\n const mesh = ref || meshRef;\n\n // State\n const [_state, setState] = useState(\n state != null ? { lastClickTime: 0, ...state } : { lastClickTime: 0 }\n );\n\n // ignoreMouseEvents\n const _ignoreMouseEvents = useMemo(\n function updateIgnoreMouseEvents() {\n return (\n ignoreMouseEvents ||\n (groupMember &&\n !hoverColor &&\n !onClick &&\n !onDoubleClick &&\n !onPointerOver &&\n !onPointerOut &&\n !onPointerDown &&\n !onPointerUp &&\n !onPointerMove &&\n !onWheel)\n );\n },\n [\n ignoreMouseEvents,\n groupMember,\n hoverColor,\n onClick,\n onDoubleClick,\n onPointerOver,\n onPointerOut,\n onPointerDown,\n onPointerUp,\n onPointerMove,\n onWheel,\n ]\n );\n\n // ---------------------- //\n // ----- Events ----- //\n // ---------------------- //\n // Event Props\n const eventProps = useMemo(\n function updateEventProps() {\n return {\n mesh,\n state: _state,\n setState,\n ...canvasProps,\n };\n },\n [mesh, _state, setState, canvasProps]\n );\n\n // Click Props\n const clickProps = useMemo(\n function updateClickProps() {\n return {\n mousePropagation,\n clickSensitivity,\n mesh,\n eventProps,\n onClick,\n onDoubleClick,\n };\n },\n [\n mousePropagation,\n clickSensitivity,\n mesh,\n eventProps,\n onClick,\n onDoubleClick,\n ]\n );\n\n // onPointerOver\n const _onPointerOver = useCallback(\n function onHoverOver(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (hoverable) {\n if (hoverColor != null) {\n setColor(hoverColor);\n }\n if (onPointerOver) {\n onPointerOver({ ...e, ...eventProps });\n }\n }\n },\n [onPointerOver, hoverable, hoverColor, eventProps, mousePropagation]\n );\n\n // onPointerOut\n const _onPointerOut = useCallback(\n function onHoverOut(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (hoverable) {\n if (hoverColor != null) {\n setColor(color);\n }\n if (onPointerOut) {\n onPointerOut({ ...e, ...eventProps });\n }\n }\n },\n [onPointerOut, hoverable, hoverColor, color, eventProps, mousePropagation]\n );\n\n // onPointerDown\n const _onPointerDown = useCallback(\n function onMouseDown(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onPointerDown) {\n onPointerDown({ ...e, ...eventProps });\n }\n },\n [onPointerDown, mousePropagation, eventProps]\n );\n\n // onPointerUp\n const _onPointerUp = useCallback(\n function onMouseUp(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onPointerUp) {\n onPointerUp({ ...e, ...eventProps });\n }\n },\n [onPointerUp, mousePropagation, eventProps]\n );\n\n // onPointerMove\n const _onPointerMove = useCallback(\n function onMouseMove(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onPointerMove) {\n onPointerMove({ ...e, ...eventProps });\n }\n },\n [onPointerMove, mousePropagation, eventProps]\n );\n\n // onWheel\n const _onWheel = useCallback(\n function onScroll(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onWheel) {\n onWheel({ ...e, ...eventProps });\n }\n },\n [onWheel, mousePropagation, eventProps]\n );\n\n // onClick + onDoubleClick\n const _onClick = useCallback(handleClick(clickProps), [clickProps]);\n\n // ------------------------- //\n // ----- Animation ----- //\n // ------------------------- //\n // Animatiom Function\n const _animation = useCallback(\n function onAnimation() {\n // @ts-ignore:TS2339 // current not in RefObject<any> | null\n if (animation && mesh.current) {\n animation(eventProps);\n }\n },\n [mesh, animation, eventProps]\n );\n\n // ----------------------- //\n // ----- Shadows ----- //\n // ----------------------- //\n const _receiveShadow = useMemo(\n function updateReceiveShadow() {\n // @ts-ignore:TS2339 // current not in RefObject<any> | null\n if (mesh && mesh.current) {\n // @ts-ignore:TS2339 // current not in RefObject<any> | null\n mesh.current.material.needsUpdate = true;\n }\n\n return receiveShadow;\n },\n [receiveShadow, mesh]\n );\n\n performanceEnd('Mesh');\n\n return (\n <>\n {performanceStart('Around mesh')}\n <mesh\n ref={mesh}\n // Event Functions\n onPointerOver={_ignoreMouseEvents ? undefined : _onPointerOver}\n onPointerOut={_ignoreMouseEvents ? undefined : _onPointerOut}\n onPointerDown={_ignoreMouseEvents ? undefined : _onPointerDown}\n onPointerUp={_ignoreMouseEvents ? undefined : _onPointerUp}\n onPointerMove={_ignoreMouseEvents ? undefined : _onPointerMove}\n onWheel={_ignoreMouseEvents ? undefined : _onWheel}\n onClick={_ignoreMouseEvents ? undefined : _onClick}\n // Geometry\n geometry={geometry || undefined}\n position={_position as [number, number, number]}\n scale={_scale as [number, number, number]}\n quaternion={_quaternion}\n material={_material}\n receiveShadow={_receiveShadow}\n {...otherProps}\n >\n <MaterialComponent\n materialType={materialType}\n hasMaterialChild={hasMaterialChild}\n material={_material as THREE.Material}\n materialProps={materialProps}\n />\n {animation && <AnimationComponent animation={_animation} />}\n {_children}\n {/* @ts-ignore: Property 'mesh' does not exist on type 'JSX.IntrinsicElements' */}\n </mesh>\n {performanceEnd('Around mesh')}\n </>\n );\n});\n\nconst MeshMemo = memo(Mesh);\nMeshMemo.displayName = 'Mesh';\nexport default MeshMemo;\n","// Box.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Mesh, { MeshProps } from \"./Mesh\";\n\nconst { useMemo, memo } = React;\n\n/* eslint-disable @typescript-eslint/no-empty-interface */\ninterface BoxProps extends MeshProps {}\n\n/**\n * Box\n *\n * Nothing particularly special about boxes. All the properties of\n * Meshes can be applied and will be passed into the Box's Mesh.\n *\n * @param {BoxProps} props\n */\nconst Box: React.FunctionComponent<BoxProps> = function Box({\n children,\n ...otherProps\n}) {\n // Box Buffer Geometry\n const geometry = useMemo(function initGeometry() {\n return new THREE.BoxGeometry(1, 1, 1);\n }, []);\n\n return (\n <Mesh geometry={geometry} {...otherProps}>\n {children}\n </Mesh>\n );\n};\n\n\n\nconst BoxMemo = memo(Box);\nBoxMemo.displayName = \"Box\";\nexport default BoxMemo;\n","// Circle.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Mesh, { MeshProps } from \"./Mesh\";\nimport { EPS } from \"../utils/math\";\n\nconst { useMemo, memo } = React;\n\ninterface CircleProps extends MeshProps {\n radius?: number;\n segments?: number;\n thetaStart?: number;\n thetaLength?: number;\n}\n\n/**\n * Circle\n *\n * A Circle's radius property is used to scale the Mesh to the desired\n * size. The geometry is constructed with the default radius of 1.\n * The number of segments, however is passed into the geometry's constructor.\n * More segments make the circle look smoother, but also result in more\n * triangles to render.\n *\n * @param {CircleProps} props\n */\nconst Circle: React.FunctionComponent<CircleProps> = function Circle({\n radius = 1,\n scale,\n segments = 32,\n thetaStart = 0,\n thetaLength = Math.PI * 2,\n side = \"double\",\n children,\n ...otherProps\n}) {\n // Radius\n const _scale = useMemo(\n function updateScale() {\n const r = Math.max(radius, EPS);\n\n // Zero Radius Warning\n if (r === EPS) {\n /* eslint-disable-next-line no-console */\n console.warn(`[Circle] Zero radius!`);\n }\n\n return scale || [r, r, 1];\n },\n [scale, radius]\n );\n\n // Cirle Arguments\n const circleArgs = useMemo(\n function updateCircleArgs() {\n return [\n 1, // radius at scale 1\n segments,\n thetaStart,\n thetaLength\n ];\n },\n [segments, thetaStart, thetaLength]\n );\n\n // Circle Buffer Geometry\n const geometry = useMemo(\n function initGeometry() {\n return new THREE.CircleGeometry(...circleArgs);\n },\n [circleArgs]\n );\n\n return (\n <Mesh scale={_scale} side={side} geometry={geometry} {...otherProps}>\n {children}\n </Mesh>\n );\n};\n\nconst CircleMemo = memo(Circle);\nCircleMemo.displayName = \"Circle\";\nexport default CircleMemo;\n","// Cylinder.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport Mesh, { MeshProps } from './Mesh';\nimport { Y_AXIS } from '../utils/constants';\nimport { EPS } from '../utils/math';\n\nconst { useMemo, memo } = React;\n\ninterface CylinderProps extends MeshProps {\n start?: Array<number>;\n end?: Array<number>;\n radius?: number;\n height?: number;\n radiusTop?: number;\n radiusBottom?: number;\n radialSegments?: number;\n heightSegments?: number;\n openEnded?: boolean;\n}\n\n/**\n * Cylinder\n *\n * A Cylinder's start and end points are used to determine the height,\n * and rotation of the mesh to represent a cylinder along the start to end\n * vector. The radius is used to scale the mesh for the appropriate thickness.\n * Cylinder's may also have radiusBottom and radiusTop which correspond to the\n * start and end faces respectively. The scale parameter takes least priority if\n * start, end, and radius are provided.\n *\n * @param {CylinderProps} props\n */\nconst Cylinder: React.FunctionComponent<CylinderProps> = function Cylinder({\n position,\n start,\n end,\n quaternion,\n rotation, // If no start, end, quaternion, then rotation gets set in Mesh\n scale = [1, 1, 1],\n radius,\n radiusTop = 1,\n radiusBottom = 1,\n height,\n radialSegments = 32,\n heightSegments = 1,\n openEnded = false,\n children,\n ...otherProps\n}) {\n // Start and End Determine Position (Center), Quaternion, and Height of Cylinder\n const { dispVec, _position } = useMemo(\n function updateDispAndPosition() {\n let _start = start;\n let _end = end;\n\n // Generate Start and End if not provided\n if (_start == null || _end == null) {\n if (position) {\n _start = [position[0], position[1] - 0.5, position[2]];\n _end = [position[0], position[1] + 0.5, position[2]];\n } else {\n _start = [0, -0.5, 0];\n _end = [0, 0.5, 0];\n }\n }\n\n const startV = new THREE.Vector3(..._start);\n const endV = new THREE.Vector3(..._end);\n\n // Displacement\n const dispV = endV.clone().sub(startV);\n\n // Center is at the mid-point between start and end\n const posVec = startV\n .clone()\n .add(endV)\n .multiplyScalar(0.5);\n\n return { dispVec: dispV, _position: [posVec.x, posVec.y, posVec.z] };\n },\n [start, end, position]\n );\n\n // Quaternion\n const _quaternion = useMemo(\n function updateQuaternion() {\n if (quaternion) {\n return quaternion;\n }\n\n // Cylinder's rotation should line up along start to end direction\n // by default the cylinder is parallel to y-axis\n const normal = dispVec.clone().normalize();\n const q = new THREE.Quaternion().setFromUnitVectors(Y_AXIS, normal);\n\n // Apply additional rotation\n if (rotation) {\n const rot = new THREE.Quaternion().setFromEuler(\n // @ts-ignore:T2345 // spread\n new THREE.Euler(...rotation, 'XYZ')\n );\n q.premultiply(rot);\n }\n\n return q;\n },\n [dispVec, quaternion, rotation]\n );\n\n // Scale\n const _scale = useMemo(\n function updateScale() {\n let s = scale;\n if (!Array.isArray(scale) || scale.length !== 3) {\n /* eslint-disable-next-line no-console */\n console.warn(\n `[Cylinder] scale must be a 3x1 array of numbers! scale: ${scale}`\n );\n\n s = [1, 1, 1];\n }\n\n // Scale Cylinder height to match distance between start and end\n s[1] = Math.max(dispVec.length(), EPS);\n\n // Scale Cylinder to match height\n if (height != null) {\n s[1] = Math.max(height, EPS);\n }\n\n // Scale Cylinder to match radius\n if (radius != null) {\n const r = Math.max(radius, EPS);\n s[0] = r;\n s[2] = r;\n }\n\n // Zero Radius Warning\n if (s[0] <= EPS && s[2] <= EPS) {\n /* eslint-disable-next-line no-console */\n console.warn(`[Cylinder] Zero radius!`);\n }\n\n // Zero Height Warning\n if (s[1] <= EPS) {\n /* eslint-disable-next-line no-console */\n console.warn(`[Cylinder] Zero height!`);\n }\n\n return s;\n },\n [dispVec, scale, radius, height]\n );\n\n // Cylinder Arguments\n const cylinderArgs = useMemo(\n function updateCylinderArgs() {\n // Zero Radius Warning\n if (radiusTop <= EPS && radiusBottom <= EPS) {\n /* eslint-disable-next-line no-console */\n console.warn(`[Cylinder] Both top and bottom radius are zero!`);\n }\n\n return [\n radiusTop,\n radiusBottom,\n 1, // height at scale 1\n radialSegments,\n heightSegments,\n openEnded,\n ];\n },\n [radiusTop, radiusBottom, radialSegments, heightSegments, openEnded]\n );\n\n // Cylinder Buffer Geometry\n const geometry = useMemo(\n function initGeometry() {\n // @ts-ignore:T2345 // spread\n return new THREE.CylinderGeometry(...cylinderArgs);\n },\n [cylinderArgs]\n );\n\n return (\n <Mesh\n position={_position}\n scale={_scale}\n quaternion={_quaternion}\n rotation={rotation}\n geometry={geometry}\n {...otherProps}\n >\n {children}\n </Mesh>\n );\n};\n\nconst CylinderMemo = memo(Cylinder);\nCylinderMemo.displayName = 'Cylinder';\nexport default CylinderMemo;\n","// Plane.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Mesh, { MeshProps } from \"./Mesh\";\nimport { billboard as billboardAnimation } from \"../utils/util\";\n\nconst { useMemo, memo } = React;\n\ninterface PlaneProps extends MeshProps {\n billboard?: boolean;\n}\n\n/**\n * Plane\n *\n * In Standard View, the Plane mesh is rotated to match the normal\n * property if provided. This allows for easier create of Planes.\n * All other properties are pass along to the Plane's Mesh.\n *\n * @param {PlaneProps} props\n */\nconst Plane: React.FunctionComponent<PlaneProps> = function Plane({\n side = \"double\",\n billboard,\n children,\n ...otherProps\n}) {\n // Plane Buffer Geometry\n const geometry = useMemo(function initGeometry() {\n return new THREE.PlaneGeometry(1, 1, 1);\n }, []);\n\n return (\n <Mesh\n side={side}\n geometry={geometry}\n animation={billboard ? billboardAnimation : undefined}\n {...otherProps}\n >\n {children}\n </Mesh>\n );\n};\n\n\n\nconst PlaneMemo = memo(Plane);\nPlaneMemo.displayName = \"Plane\";\nexport default PlaneMemo;\n","// Label.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Plane from \"./Plane\";\nimport { MeshProps } from \"./Mesh\";\nimport { nextPowerOfTwo, EPS } from \"../utils/math\";\nimport {\n getAlignmentOffset,\n billboard as billboardAnimation\n} from \"../utils/util\";\n\nconst { useRef, useEffect, useMemo, memo } = React;\n\ninterface LabelProps extends MeshProps {\n text?: string;\n fontName?: string;\n fontStyle?: string;\n backgroundColor?: string;\n noBackground?: boolean;\n borderColor?: string;\n borderThickness?: number; // pixels\n noBorder?: boolean;\n textColor?: string;\n resolution?: number;\n align?: string;\n billboard?: boolean;\n}\n\n/**\n * Label\n *\n * Label is composed within a Plane. The text is drawn on a canvas element\n * which is then converted to a texture for a plane. Unlike Text, the\n * geometric complexity of Label does not increase with the number of\n * letters in the text, since there is always just a plane segment rendered.\n * There is a slight overhead for creating the canvas and applying it as\n * a texture. Label may accept any HTML canvas fontName and fontStyle.\n * The resolution of the texture may also be controlled. Keep in mind that\n * higher resolution does look crisp even at high zooms, but requires more memory\n * for storing the texture.\n *\n * The Label's position may be aligned to a specific anchor point of the label\n * with the align prop. The anchor point of the label is what the position refers to.\n *\n * The ◼'s represent the anchor points.\n *\n * ◼----◼----◼\n * | |\n * ◼ ◼ ◼\n * | |\n * ◼----◼----◼\n *\n * @param {LabelProps} props\n */\nconst Label: React.FunctionComponent<LabelProps> = function Label({\n text = \"Label\",\n fontName = \"san-serif\",\n fontStyle = \"\",\n color = \"white\",\n backgroundColor = \"black\",\n noBackground = false,\n borderColor = \"white\",\n borderThickness = 10,\n noBorder = false,\n transparent,\n opacity = 1,\n textColor = \"white\",\n anisotropy = 16,\n resolution = 32,\n align = \"center\",\n billboard = false,\n children,\n ...otherProps\n}) {\n let _transparent = transparent != null ? transparent : opacity < 1 - EPS;\n _transparent = noBackground ? true : _transparent;\n\n // Font\n const font = useMemo(\n function updateFont() {\n return `${fontStyle} ${resolution}px ${fontName}`;\n },\n [fontStyle, resolution, fontName]\n );\n\n const [texture, aspect] = useMemo(\n function updateTexture() {\n // Init Canvas\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n /* eslint-disable-next-line no-console */\n console.warn('[Label] Failed to getContext(\"2d\") of canvas');\n return [undefined, 1];\n }\n canvas.width = 2;\n canvas.height = 2;\n\n // Label Width\n ctx.font = font;\n const textWidth = ctx.measureText(text).width;\n const width = nextPowerOfTwo(textWidth);\n const height = nextPowerOfTwo(resolution) * 2;\n const asp = width / height;\n\n // Resize Canvas to Fit Label\n canvas.width = width;\n canvas.height = height;\n ctx.font = font; // Reset font\n\n // Clear\n ctx.clearRect(0, 0, width, height);\n\n // Background\n if (!noBackground) {\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(0, 0, width, height);\n }\n\n // Border\n if (!noBorder) {\n ctx.strokeStyle = borderColor;\n ctx.lineWidth = borderThickness;\n ctx.strokeRect(0, 0, width, height);\n }\n\n // Fill Text\n ctx.fillStyle = textColor;\n ctx.fillText(text, (width - textWidth) / 2, height * 0.666);\n\n // Label Texture\n const tex = new THREE.CanvasTexture(canvas);\n tex.anisotropy = anisotropy;\n\n return [tex, asp];\n },\n [\n text,\n resolution,\n font,\n backgroundColor,\n noBackground,\n borderColor,\n borderThickness,\n noBorder,\n textColor,\n anisotropy\n ]\n );\n\n // Label Geometry\n const labelGeometry = useRef(new THREE.PlaneGeometry());\n\n // Align\n const prevAspect = useRef(1);\n const prevAlign = useRef(\"center\");\n useEffect(\n function updateAlign() {\n // Align\n const diagonal = [prevAspect.current, 1, 1];\n const alignmentOffset = getAlignmentOffset(\n prevAlign.current,\n align,\n diagonal\n );\n // @ts-ignore:TS2556 // spread\n labelGeometry.current.translate(...alignmentOffset);\n prevAlign.current = align;\n },\n [labelGeometry, align]\n );\n\n // Aspect\n useEffect(\n function updateScale() {\n // Scale Plane to Label Text Width (textwidth x 1 x 1)\n // Reset\n labelGeometry.current.scale(1 / prevAspect.current, 1, 1);\n // Aspect\n labelGeometry.current.scale(aspect, 1, 1);\n prevAspect.current = aspect;\n },\n [labelGeometry, aspect]\n );\n\n return (\n <Plane\n map={texture}\n transparent={_transparent}\n opacity={opacity}\n color={color}\n geometry={labelGeometry.current}\n animation={billboard ? billboardAnimation : undefined}\n {...otherProps}\n >\n {children}\n </Plane>\n );\n};\n\n\n\nconst LabelMemo = memo(Label);\nLabelMemo.displayName = \"Label\";\nexport default LabelMemo;\n","// LineSegment.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { EPS } from '../utils/math';\nimport { DEFAULT_COLOR } from '../utils/styles';\n\nconst { useState, useEffect, useMemo, memo } = React;\nexport interface LineProps {\n start?: Array<number>;\n end?: Array<number>;\n points?: Array<Array<number>>;\n color?: string | THREE.Color;\n hoverColor?: string;\n hoverable?: boolean;\n opacity?: number;\n transparent?: boolean;\n groupMember?: boolean;\n castShadow?: boolean;\n geometry?: THREE.BufferGeometry;\n material?: THREE.Material;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n children?: any;\n}\n\n/**\n * Line\n *\n * Unlike most 3D objects that are meshes underneath, Line is another\n * type of object. Line is a wrapper component of\n * @react-three/fiber/three.js's Line.\n *\n * In Standard View, Lines may be defined with a start and end position.\n * A line may also have more than just the end points. If an array of\n * points are provided, the start and end points are ignored and the line\n * is createed as an ordered path from the first point to the last.\n *\n * If no geometry nor material is passed in, default geometry and\n * lineBasicMaterial will be generated based on the properties provided.\n *\n * @param {LineProps} props\n */\nconst Line: React.FunctionComponent<LineProps> = function Line({\n start = [0, 0, 0],\n end = [1, 0, 0],\n points = [],\n color = DEFAULT_COLOR,\n hoverColor,\n hoverable = true,\n transparent,\n opacity = 1,\n castShadow = false,\n geometry,\n material,\n children,\n ...otherProps\n}) {\n // Color\n const [_color, setColor] = useState(color);\n useEffect(\n function updateColor() {\n setColor(color);\n },\n [color]\n );\n\n // Vertices\n const vertices = useMemo(\n function updateVertices() {\n const v = [];\n if (points == null || points.length === 0) {\n // @ts-ignore:2345 // spread\n v.push(new THREE.Vector3(...start));\n // @ts-ignore:2345 // spread\n v.push(new THREE.Vector3(...end));\n } else {\n // @ts-ignore:2345 // spread\n points.map(point => v.push(new THREE.Vector3(...point)));\n }\n\n return v;\n },\n [start, end, points]\n );\n\n // Memoized BufferGeometry for the line\n const lineGeometry = useMemo(\n function createLineGeometry() {\n if (geometry) {\n return geometry;\n }\n\n const geom = new THREE.BufferGeometry();\n geom.setFromPoints(vertices);\n return geom;\n },\n [geometry, vertices]\n );\n\n // Geometry Component always uses BufferGeometry\n const GeometryComponent = memo(function GeometryComponent() {\n // Always use a BufferGeometry (either provided or generated)\n // @ts-ignore: property primitive does not exist on IntrinsicElements\n return <primitive attach=\"geometry\" object={lineGeometry} />;\n });\n\n // Material Props\n const materialProps = useMemo(\n function updateMaterialProps() {\n return {\n material,\n color: _color,\n transparent: transparent != null ? transparent : opacity < 1 - EPS,\n opacity,\n };\n },\n [material, _color, transparent, opacity]\n );\n\n return (\n // @ts-ignore:TS2322 line type clash\n // @ts-ignore: Type '{ children: any[]; groupMember?: boolean | undefined; onPointerOver: () => void; onPointerOut: () => void; castShadow: boolean; }' is not assignable to type 'SVGLineElementAttributes<SVGLineElement>'\n <line\n onPointerOver={function setHover(): void {\n if (hoverable && hoverColor != null) {\n setColor(hoverColor);\n }\n }}\n onPointerOut={function unsetHover(): void {\n if (hoverable && hoverColor != null) {\n setColor(color);\n }\n }}\n // @ts-ignore: Property 'castShadow' does not exist on type 'SVGLineElementAttributes<SVGLineElement>'\n castShadow={castShadow}\n {...otherProps}\n >\n <GeometryComponent />\n <MaterialComponent {...materialProps} />\n {children}\n </line>\n );\n};\n\nconst LineMemo = memo(Line);\nLineMemo.displayName = 'Line';\nexport default LineMemo;\n\ntype MaterialComponentProps = {\n material?: THREE.Material;\n color: string | THREE.Color;\n transparent: boolean;\n opacity: number;\n};\n\nconst MaterialComponent = memo(function MaterialComponent({\n material,\n color,\n transparent,\n opacity,\n}: MaterialComponentProps) {\n if (material) {\n // @ts-ignore:2339 property primitive does not exist\n return <primitive object={material} />;\n }\n\n return (\n // @ts-ignore: Property 'lineBasicMaterial' does not exist on type 'JSX.IntrinsicElements'\n <lineBasicMaterial\n attach=\"material\"\n color={color}\n transparent={transparent}\n opacity={opacity}\n />\n );\n});\nMaterialComponent.displayName = 'MaterialComponent';\n","// Triangle.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Mesh, { MeshProps } from \"./Mesh\";\n\nconst { useRef, useEffect, memo } = React;\n\ninterface TriangleProps extends MeshProps {\n points?: Array<Array<number>>;\n indices?: Array<Array<number>>;\n}\n\n/**\n * Triangle\n *\n * In Standard View, Triangle actually composes a THREE.BufferGeometry.\n * By default the indices assume the order of the points passed in,\n * however, particular indices may also be provided. The BufferGeometry\n * can also handle more than 3 vertices and virtually any polygon may be\n * constructed by providing all the vertices and sets of triangle indices.\n * Like most other 3D objects, this is also composed with Mesh and so all\n * Mesh properties may be applied.\n *\n * @param {TriangleProps} props\n */\nconst Triangle: React.FunctionComponent<TriangleProps> = function Triangle({\n points = [[0, 0, 0], [1, 0, 0], [0, 1, 0]],\n indices = [[0, 1, 2]],\n side = \"double\",\n children,\n ...otherProps\n}) {\n // Buffer Geometry of Triangles\n const geometry = useRef(new THREE.BufferGeometry());\n\n useEffect(\n function updateVertices() {\n const vertices = [];\n // @ts-ignore:T2345 // spread\n points.map(point => vertices.push(...point));\n\n // Remove Old Points\n geometry.current.deleteAttribute(\"position\");\n // Add New Points\n geometry.current.setAttribute(\n \"position\",\n new THREE.BufferAttribute(new Float32Array(vertices), 3)\n );\n },\n [geometry, points]\n );\n\n // Indices are triplets indicating the index of vertices\n // that make a triangle.\n // Format Indices into One Array of [t1,t1,t1, t2,t2,t2 ...]\n useEffect(\n function updateIndices() {\n const _indices = [];\n // @ts-ignore:T2345 // spread\n indices.map(triangle => _indices.push(...triangle));\n\n // Replace Indices\n geometry.current.setIndex(\n new THREE.BufferAttribute(new Uint32Array(_indices), 1)\n );\n },\n [geometry, indices]\n );\n\n return (\n <Mesh geometry={geometry.current} side={side} {...otherProps}>\n {children}\n </Mesh>\n );\n};\n\n\n\nconst TriangleMemo = memo(Triangle);\nTriangleMemo.displayName = \"Triangle\";\nexport default TriangleMemo;\n","// Quad.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport { MeshProps } from \"./Mesh\";\nimport Triangle from \"./Triangle\";\nimport { EPS_NANO } from \"../utils/math\";\n\nconst { useEffect, useMemo, memo } = React;\n\ninterface QuadProps extends MeshProps {\n points?: Array<Array<number>>;\n indices?: Array<Array<number>>;\n coplanarThreshold?: number;\n}\n\n/**\n * Quad\n *\n * In Standard View, Quad is actually composed with a Triangle,\n * employing THREE.BufferGeometry underneath. Unlike Triangle,\n * which can take an arbitrary number of vertices, Quad is\n * limited to exactly 4.\n *\n * @param {QuadProps} props\n */\nconst Quad: React.FunctionComponent<QuadProps> = function Quad({\n points = [[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0]],\n indices = [[0, 1, 2], [2, 3, 0]],\n coplanarThreshold = EPS_NANO,\n side = \"double\",\n children,\n ...otherProps\n}) {\n // Points\n const _points = useMemo(\n function updatePoints() {\n // Default Points\n let p = [[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0]];\n\n // Valid points\n if (Array.isArray(points)) {\n p = points;\n }\n\n // Exactly 4 Points\n if (p.length > 4) {\n // Too Many Points\n p = p.slice(0, 4);\n } else if (p.length < 4) {\n // Too Few Points\n while (p.length < 4) {\n p.push([0, 0, 0]);\n }\n }\n\n return p;\n },\n [points]\n );\n\n // Indices\n const _indices = useMemo(\n function updateIndices() {\n // Default Indices\n let ind = [[0, 1, 2], [2, 3, 0]];\n\n // Valid indices\n if (Array.isArray(indices) && indices.length === 2) {\n ind = indices;\n }\n\n return ind;\n },\n [indices]\n );\n\n // Planarity\n useEffect(\n function checkPlanarity() {\n const p0 = new THREE.Vector3(..._points[0]);\n const p1 = new THREE.Vector3(..._points[1]);\n const p2 = new THREE.Vector3(..._points[2]);\n const p3 = new THREE.Vector3(..._points[3]);\n const p01 = p1.clone().sub(p0);\n const p02 = p2.clone().sub(p0);\n const p03 = p3.clone().sub(p0);\n const p01x02 = p01\n .clone()\n .cross(p02)\n .normalize();\n const p01x03 = p01\n .clone()\n .cross(p03)\n .normalize();\n if (Math.abs(p01x02.dot(p01x03)) < 1 - coplanarThreshold) {\n /* eslint-disable-next-line no-console */\n console.warn(\"[Quad] Points are not co-planar!\");\n }\n },\n [_points, coplanarThreshold]\n );\n\n return (\n <Triangle points={_points} indices={_indices} side={side} {...otherProps}>\n {children}\n </Triangle>\n );\n};\n\n\n\nconst QuadMemo = memo(Quad);\nQuadMemo.displayName = \"Quad\";\nexport default QuadMemo;\n","// Sphere.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Mesh, { MeshProps } from \"./Mesh\";\nimport { EPS } from \"../utils/math\";\nimport { performanceStart, performanceEnd } from \"../utils/performance\";\n\nconst { useMemo, memo, forwardRef } = React;\n\ninterface SphereProps extends MeshProps {\n radius?: number;\n widthSegments?: number;\n heightSegments?: number;\n phiStart?: number;\n phiLength?: number;\n thetaStart?: number;\n thetaLength?: number;\n scale?: Array<number>;\n}\n\n/**\n * Sphere\n *\n * In Standard View, the radius property of Sphere is used to scale the\n * Mesh appropriately. The actual geometry is constructed with unit radius.\n * The number of widthSegments and heightSegments, however may be specified\n * to determine how smooth the sphere looks. More segments will incur\n * renderring more triangles.\n *\n * @param {SphereProps} props\n */\nconst Sphere: React.FunctionComponent<SphereProps> = forwardRef<\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n React.Ref<any>,\n SphereProps\n>(function Sphere(\n {\n radius = 1,\n widthSegments = 32,\n heightSegments = 32,\n phiStart = 0,\n phiLength = Math.PI * 2,\n thetaStart = 0,\n thetaLength = Math.PI,\n scale,\n children,\n ...otherProps\n },\n ref\n) {\n performanceStart(\"Sphere\");\n\n // Radius\n const _scale = useMemo(\n function updateScale() {\n const r = Math.max(radius, EPS);\n\n // Zero Radius Warning\n if (r === EPS) {\n /* eslint-disable-next-line no-console */\n console.warn(`[Sphere] Zero radius!`);\n }\n\n return scale || [r, r, r];\n },\n [scale, radius]\n );\n\n // Sphere Arguments\n const sphereArgs = useMemo(\n function updateSphereArgs() {\n return [\n 1,\n widthSegments,\n heightSegments,\n phiStart,\n phiLength,\n thetaStart,\n thetaLength\n ];\n },\n [\n widthSegments,\n heightSegments,\n phiStart,\n phiLength,\n thetaStart,\n thetaLength\n ]\n );\n\n // Sphere Buffer Geometry\n const geometry = useMemo(\n function initGeometry() {\n return new THREE.SphereGeometry(...sphereArgs);\n },\n [sphereArgs]\n );\n\n performanceEnd(\"Sphere\");\n return (\n <>\n {performanceStart(\"Around Mesh\")}\n <Mesh ref={ref} scale={_scale} geometry={geometry} {...otherProps}>\n {children}\n </Mesh>\n {performanceEnd(\"Around Mesh\")}\n </>\n );\n});\n\n\n\nconst SphereMemo = memo(Sphere);\nSphereMemo.displayName = \"Sphere\";\nexport default SphereMemo;\n","import {\n\tExtrudeGeometry\n} from 'three';\n\n/**\n * A class for generating text as a single geometry. It is constructed by providing a string of text, and a set of\n * parameters consisting of a loaded font and extrude settings.\n *\n * See the {@link FontLoader} page for additional details.\n *\n * `TextGeometry` uses [typeface.json]{@link http://gero3.github.io/facetype.js/} generated fonts.\n * Some existing fonts can be found located in `/examples/fonts`.\n *\n * ```js\n * const loader = new FontLoader();\n * const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' );\n * const geometry = new TextGeometry( 'Hello three.js!', {\n * \tfont: font,\n * \tsize: 80,\n * \tdepth: 5,\n * \tcurveSegments: 12\n * } );\n * ```\n *\n * @augments ExtrudeGeometry\n * @three_import import { TextGeometry } from 'three/addons/geometries/TextGeometry.js';\n */\nclass TextGeometry extends ExtrudeGeometry {\n\n\t/**\n\t * Constructs a new text geometry.\n\t *\n\t * @param {string} text - The text that should be transformed into a geometry.\n\t * @param {TextGeometry~Options} [parameters] - The text settings.\n\t */\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( font === undefined ) {\n\n\t\t\tsuper(); // generate default extrude geometry\n\n\t\t} else {\n\n\t\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t\t// defaults\n\n\t\t\tif ( parameters.depth === undefined ) parameters.depth = 50;\n\t\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\t\tsuper( shapes, parameters );\n\n\t\t}\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n}\n\n/**\n * Represents the `options` type of the geometry's constructor.\n *\n * @typedef {Object} TextGeometry~Options\n * @property {Font} [font] - The font.\n * @property {number} [size=100] - The text size.\n * @property {number} [depth=50] - Depth to extrude the shape.\n * @property {number} [curveSegments=12] - Number of points on the curves.\n * @property {number} [steps=1] - Number of points used for subdividing segments along the depth of the extruded spline.\n * @property {boolean} [bevelEnabled=false] - Whether to beveling to the shape or not.\n * @property {number} [bevelThickness=10] - How deep into the original shape the bevel goes.\n * @property {number} [bevelSize=8] - Distance from the shape outline that the bevel extends.\n * @property {number} [bevelOffset=0] - Distance from the shape outline that the bevel starts.\n * @property {number} [bevelSegments=3] - Number of bevel layers.\n * @property {?Curve} [extrudePath=null] - A 3D spline path along which the shape should be extruded. Bevels not supported for path extrusion.\n * @property {Object} [UVGenerator] - An object that provides UV generator functions for custom UV generation.\n **/\n\nexport { TextGeometry };\n","import {\n\tFileLoader,\n\tLoader,\n\tShapePath\n} from 'three';\n\n/**\n * A loader for loading fonts.\n *\n * You can convert fonts online using [facetype.js]{@link https://gero3.github.io/facetype.js/}.\n *\n * ```js\n * const loader = new FontLoader();\n * const font = await loader.loadAsync( 'fonts/helvetiker_regular.typeface.json' );\n * ```\n *\n * @augments Loader\n * @three_import import { FontLoader } from 'three/addons/loaders/FontLoader.js';\n */\nclass FontLoader extends Loader {\n\n\t/**\n\t * Constructs a new font loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded font\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Font)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tconst font = scope.parse( JSON.parse( text ) );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given font data and returns the resulting font.\n\t *\n\t * @param {Object} json - The raw font data as a JSON object.\n\t * @return {Font} The font.\n\t */\n\tparse( json ) {\n\n\t\treturn new Font( json );\n\n\t}\n\n}\n\n/**\n * Class representing a font.\n */\nclass Font {\n\n\t/**\n\t * Constructs a new font.\n\t *\n\t * @param {Object} data - The font data as JSON.\n\t */\n\tconstructor( data ) {\n\n\t\t/**\n\t\t * This flag can be used for type testing.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @readonly\n\t\t * @default true\n\t\t */\n\t\tthis.isFont = true;\n\n\t\tthis.type = 'Font';\n\n\t\t/**\n\t\t * The font data as JSON.\n\t\t *\n\t\t * @type {Object}\n\t\t */\n\t\tthis.data = data;\n\n\t}\n\n\t/**\n\t * Generates geometry shapes from the given text and size. The result of this method\n\t * should be used with {@link ShapeGeometry} to generate the actual geometry data.\n\t *\n\t * @param {string} text - The text.\n\t * @param {number} [size=100] - The text size.\n\t * @return {Array<Shape>} An array of shapes representing the text.\n\t */\n\tgenerateShapes( text, size = 100 ) {\n\n\t\tconst shapes = [];\n\t\tconst paths = createPaths( text, size, this.data );\n\n\t\tfor ( let p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\tshapes.push( ...paths[ p ].toShapes() );\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n}\n\nfunction createPaths( text, size, data ) {\n\n\tconst chars = Array.from( text );\n\tconst scale = size / data.resolution;\n\tconst line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\tconst paths = [];\n\n\tlet offsetX = 0, offsetY = 0;\n\n\tfor ( let i = 0; i < chars.length; i ++ ) {\n\n\t\tconst char = chars[ i ];\n\n\t\tif ( char === '\\n' ) {\n\n\t\t\toffsetX = 0;\n\t\t\toffsetY -= line_height;\n\n\t\t} else {\n\n\t\t\tconst ret = createPath( char, scale, offsetX, offsetY, data );\n\t\t\toffsetX += ret.offsetX;\n\t\t\tpaths.push( ret.path );\n\n\t\t}\n\n\t}\n\n\treturn paths;\n\n}\n\nfunction createPath( char, scale, offsetX, offsetY, data ) {\n\n\tconst glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\tif ( ! glyph ) {\n\n\t\tconsole.error( 'THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + '.' );\n\n\t\treturn;\n\n\t}\n\n\tconst path = new ShapePath();\n\n\tlet x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\tif ( glyph.o ) {\n\n\t\tconst outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\tfor ( let i = 0, l = outline.length; i < l; ) {\n\n\t\t\tconst action = outline[ i ++ ];\n\n\t\t\tswitch ( action ) {\n\n\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn { offsetX: glyph.ha * scale, path: path };\n\n}\n\nexport { FontLoader, Font };\n","// Text.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { TextGeometry } from 'three/examples/jsm/geometries/TextGeometry.js';\nimport { Font } from 'three/examples/jsm/loaders/FontLoader.js';\nimport Mesh, { MeshProps } from './Mesh';\nimport {\n getAlignmentOffset,\n billboard as billboardAnimation,\n} from '../utils/util';\nimport { useToggle } from '../utils/hooks';\n\nconst { useRef, useEffect, useMemo, memo } = React;\n\n// Available Fonts\nconst FONT_SOURCE =\n 'https://raw.githubusercontent.com/mrdoob/three.js/master/examples/fonts/';\nconst FONTS = {\n helvetiker: {\n name: 'helvetiker_regular',\n typeface: null,\n threeFont: null,\n },\n helvetikerBold: {\n name: 'helvetiker_bold',\n typeface: null,\n threeFont: null,\n },\n optimer: { name: 'optimer_regular', typeface: null, threeFont: null },\n optimerBold: { name: 'optimer_bold', typeface: null, threeFont: null },\n gentilis: { name: 'gentilis_regular', typeface: null, threeFont: null },\n gentilisBold: { name: 'gentilis_bold', typeface: null, threeFont: null },\n};\n\ninterface GetFontProps {\n url: string;\n cacheFont: Function;\n loadFont: Function;\n}\n/**\n * getFont\n * Async Font File Fetcher\n * Font is cached and Text component is reloaded after font is acquired.\n */\nasync function getFont({\n url,\n cacheFont,\n loadFont,\n}: GetFontProps): Promise<void> {\n fetch(url)\n .then(res => res.json())\n .then(data => {\n cacheFont(data);\n loadFont();\n })\n .catch(() => console.warn(`[Text] Font not found from path: ${url}`));\n}\n\ninterface TextProps extends MeshProps {\n text?: string;\n fontName?: string;\n fontFile?: string;\n size?: number;\n height?: number;\n depth?: number;\n align?: string;\n curveSegments?: number;\n bevelEnabled?: boolean;\n bevelThickness?: number;\n bevelSize?: number;\n bevelOffset?: number;\n bevelSegments?: number;\n billboard?: boolean;\n}\n\n/**\n * Text\n *\n * Text is also composed within a Mesh. The 3D text is actually a set\n * of extrusions handled by @react-three/fiber/three.js's textGeometry.\n * Materials are defaulted to meshBasicMaterials and accept the same\n * properties.\n *\n * Standard View supports loading the default fonts provided in three.js's examples,\n * helvetiker, optimer, and gentilis, as well as their bold version.\n * Passing a string fontName property will automatically load that font.\n * The loading is asynchronous as the font files are fetched from three's git repo.\n *\n * Other typeface.json fonts may also be loaded either from public/assets\n * or from url with fontFile\n *\n * Size is in the same 3D units as for all 3D Objects.\n *\n * @param {TextProps} props\n */\nconst Text: React.FunctionComponent<TextProps> = function Text({\n text = 'Text',\n fontName = 'helvetiker',\n fontFile,\n size = 1,\n depth = 0.01,\n align = 'bottom-left',\n curveSegments = 12,\n bevelEnabled = false,\n bevelThickness = 10,\n bevelSize = 8,\n bevelOffset = 0,\n bevelSegments = 3,\n billboard = false,\n children,\n ...otherProps\n}) {\n // height is deprecated, using depth instead\n const { height } = otherProps;\n if (height) {\n console.warn('[Text] height is deprecated, using depth instead');\n depth = height;\n }\n\n // Loaded Flag\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\n const [_, loadFont] = useToggle(false);\n\n // Font Name or Font File\n const _fontName = useMemo(\n function updateFontName() {\n // Default Font Name\n let name = 'helvetiker';\n\n if (fontFile) {\n // Font File\n name = fontFile;\n\n // File is not cached\n if (FONTS[name] == null) {\n FONTS[name] = { name, typeface: null, threeFont: null };\n }\n } else if (Object.keys(FONTS).includes(fontName)) {\n // Font Name\n name = fontName;\n }\n\n return name;\n },\n [fontName, fontFile]\n );\n\n // FONTS cache check\n const _loaded = FONTS[_fontName].typeface != null;\n\n // Async Load Font\n if (!_loaded) {\n const url =\n fontFile || `${FONT_SOURCE}${FONTS[_fontName].name}.typeface.json`;\n\n const cacheFont = (data): void => {\n FONTS[_fontName].typeface = data;\n };\n\n getFont({ url, cacheFont, loadFont });\n }\n\n // Font\n const font = useMemo(\n function updateFont() {\n // Font Not Yet Loaded\n if (!_loaded) {\n return undefined;\n }\n\n // Load threeFont from FONTS cache\n if (FONTS[_fontName].threeFont != null) {\n return FONTS[_fontName].threeFont;\n }\n\n // Generate and cache threeFont\n FONTS[_fontName].threeFont = new Font(FONTS[_fontName].typeface);\n return FONTS[_fontName].threeFont;\n },\n [_loaded, _fontName]\n );\n\n // Text Geometry\n const prevAlign = useRef(align);\n const textGeometry = useMemo(\n function updateTextGeometry() {\n // Font Not Yet Loaded\n if (!_loaded) {\n return undefined;\n }\n\n const fontParams = {\n font,\n size,\n depth,\n curveSegments,\n bevelEnabled,\n bevelThickness,\n bevelSize,\n bevelOffset,\n bevelSegments,\n };\n\n // TextBufferGeometry cannot be modified after instantiation\n // Must be recreated\n const geometry = new TextGeometry(text, fontParams);\n geometry.computeBoundingBox();\n\n // Reset Alignment\n const boundingBox = geometry.boundingBox;\n const max = boundingBox ? boundingBox.max : new THREE.Vector3(0, 0, 0);\n const min = boundingBox ? boundingBox.min : new THREE.Vector3(0, 0, 0);\n const diagonalVec = max.clone().sub(min);\n const diagonal = [diagonalVec.x, diagonalVec.y, diagonalVec.z];\n\n const alignmentOffset = getAlignmentOffset(\n 'bottom-left',\n prevAlign.current,\n diagonal\n );\n\n // @ts-ignore:TS2556 // spread\n geometry.translate(...alignmentOffset);\n\n return geometry;\n },\n [\n _loaded,\n text,\n font,\n size,\n depth,\n curveSegments,\n bevelEnabled,\n bevelThickness,\n bevelSize,\n bevelOffset,\n bevelSegments,\n ]\n );\n\n // Align\n useEffect(\n function updateAlignment() {\n // Font Not Yet Loaded\n if (!_loaded || textGeometry === undefined) {\n return;\n }\n\n const boundingBox = textGeometry.boundingBox;\n const max = boundingBox ? boundingBox.max : new THREE.Vector3(0, 0, 0);\n const min = boundingBox ? boundingBox.min : new THREE.Vector3(0, 0, 0);\n\n const diagonalVec = max.clone().sub(min);\n const diagonal = [diagonalVec.x, diagonalVec.y, diagonalVec.z];\n\n // Align\n const alignmentOffset = getAlignmentOffset(\n prevAlign.current,\n align,\n diagonal\n );\n // @ts-ignore:TS2556 // spread\n textGeometry.translate(...alignmentOffset);\n prevAlign.current = align;\n },\n\n [_loaded, textGeometry, align]\n );\n\n return (\n <Mesh\n visible={_loaded}\n geometry={textGeometry}\n animation={billboard ? billboardAnimation : undefined}\n {...otherProps}\n >\n {children}\n </Mesh>\n );\n};\n\nconst TextMemo = memo(Text);\nTextMemo.displayName = 'Text';\nexport default TextMemo;\n","// Polygon.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Mesh, { MeshProps } from \"./Mesh\";\n\nconst { memo } = React;\n\ninterface PolygonProps extends MeshProps {\n points?: Array<Array<number>>;\n depth?: number;\n}\n\n/**\n * Polygon\n *\n * In Standard View, Polygon actually composes a THREE.ExtrudeBufferGeometry.\n * The points need to be 2d and passed in drawing order.\n * By providing depth, we can create the polygonal prism.\n * Like most other 3D objects, this is also composed with Mesh and so all\n * Mesh properties may be applied.\n *\n * @param {PolygonProps} props\n */\nconst Polygon: React.FunctionComponent<PolygonProps> = function Polygon({\n points = [[0, 0], [2, 0], [3, 1], [2, 2], [0, 2]],\n depth = 0,\n children,\n ...otherProps\n}) {\n const shape = React.useMemo(\n function initShape() {\n /* eslint-disable-next-line no-shadow */\n const shape = new THREE.Shape();\n\n if (points.length <= 2) return shape;\n\n // Move to start point\n // @ts-ignore:T2345\n shape.moveTo(...points[0]);\n // Connect points except for start point\n // @ts-ignore:T2345\n points.slice(1).forEach(point => shape.lineTo(...point));\n\n return shape;\n },\n [points]\n );\n\n const options = React.useMemo(\n function initOptions() {\n return {\n steps: 1,\n depth,\n bevelEnabled: false\n };\n },\n [depth]\n );\n\n // Extrude Buffer Geometry\n const geometry = React.useMemo(\n function initGeometry() {\n return new THREE.ExtrudeGeometry(shape, options);\n },\n [shape, options]\n );\n\n return (\n <Mesh geometry={geometry} {...otherProps}>\n {children}\n </Mesh>\n );\n};\n\n\n\nconst PolygonMemo = memo(Polygon);\nPolygonMemo.displayName = \"Polygon\";\nexport default PolygonMemo;\n","// Group.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport {\n DEFAULT_NORMAL_VEC3,\n DEFAULT_NORMAL,\n EULER_ORDERS\n} from \"../utils/constants\";\nimport { ViewContext } from \"../views/ViewContext\";\nimport { EPS } from \"../utils/math\";\nimport {\n handleClick,\n checkPropagation,\n AnimationComponent\n} from \"../utils/events\";\nimport { toQuaternion } from \"../utils/util\";\n\nconst {\n useState,\n useEffect,\n useRef,\n useContext,\n useCallback,\n useMemo,\n memo,\n forwardRef\n} = React;\n\nexport interface GroupProps {\n position?: Array<number>;\n scale?: Array<number>;\n rotation?: Array<number>;\n eulerOrder?: string;\n normal?: Array<number>;\n roll?: number;\n up?: Array<number>;\n quaternion?: Array<number> | THREE.Quaternion;\n // Material\n materialType?: string;\n edges?: boolean;\n edgeColor?: string;\n edgeThresholdAngle?: number;\n view3DEnvMap?: boolean;\n // Material Props\n color?: string | THREE.Color;\n hoverColor?: string;\n opacity?: number;\n transparent?: boolean;\n wireframe?: boolean;\n visible?: boolean;\n side?: string | THREE.Side;\n // ShadowProps\n castShadow?: boolean;\n receiveShadow?: boolean;\n // Group Props\n groupMember?: boolean;\n // Animation Function\n animation?: Function;\n // State\n state?: object;\n // Ref\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n ref?: React.Ref<any>;\n // Event Functions\n onClick?: Function;\n onDoubleClick?: Function;\n onWheel?: Function;\n onPointerUp?: Function;\n onPointerDown?: Function;\n onPointerOver?: Function;\n onPointerOut?: Function;\n onPointerMove?: Function;\n // Event Props\n hoverable?: boolean;\n mousePropagation?: boolean;\n clickSensitivity?: number; // milliseconds\n ignoreMouseEvents?: boolean;\n // Children\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n children?: any;\n}\n\n/**\n * Group\n *\n * In Standard View, Group is a wrapper of @react-three/fiber/three.js's group.\n * This component allows composing children components into one large\n * manipulatable mesh-like component. This is useful for creating 3D assets\n * comprised of many pieces and then perform transformations and animations\n * on the whole asset.\n *\n * Group will extract away the group properties for the group manipulations\n * at a group level.\n */\nconst Group: React.FunctionComponent<GroupProps> = forwardRef<\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n React.RefObject<any>,\n GroupProps\n>(function Group(\n {\n position = [0, 0, 0],\n scale = [1, 1, 1],\n rotation = [0, 0, 0],\n eulerOrder = EULER_ORDERS.XYZ,\n roll = 0,\n quaternion,\n normal = DEFAULT_NORMAL,\n // Material Props\n materialType,\n view3DEnvMap,\n // materialProps\n color,\n hoverColor,\n opacity,\n transparent,\n wireframe,\n edges,\n edgeColor,\n edgeThresholdAngle,\n side,\n // Group Props\n groupMember = false,\n // Shadow Props\n castShadow,\n receiveShadow,\n // Animation Function\n animation,\n // State\n state,\n // Event Functions\n onClick,\n onDoubleClick,\n onWheel,\n onPointerUp,\n onPointerDown,\n onPointerOver,\n onPointerOut,\n onPointerMove,\n // Event Props\n hoverable = true,\n mousePropagation = false,\n clickSensitivity = 250,\n ignoreMouseEvents = false,\n children,\n ...otherProps\n },\n ref\n) {\n // Canvas Properties\n const canvasProps = useContext(ViewContext);\n\n // Rotation\n const _quaternion = useMemo(\n function updateQuaternion() {\n // Normal\n // @ts-ignore:T2345 // spread\n const normalVec = new THREE.Vector3(...normal).normalize();\n const normalQ = new THREE.Quaternion().setFromUnitVectors(\n DEFAULT_NORMAL_VEC3,\n normalVec\n );\n\n // Rotation / Quaternion\n let rotationQ = new THREE.Quaternion();\n if (quaternion == null) {\n // Convert Euler Rotation to Quaternion\n // @ts-ignore:T2345 // spread\n let _eulerOrder = eulerOrder.toUpperCase();\n _eulerOrder = EULER_ORDERS[_eulerOrder]\n ? _eulerOrder\n : EULER_ORDERS.XYZ;\n const euler = new THREE.Euler(...rotation, _eulerOrder);\n rotationQ = new THREE.Quaternion().setFromEuler(euler);\n } else {\n rotationQ = toQuaternion(quaternion);\n }\n\n // Roll\n const rollQ = new THREE.Quaternion().setFromAxisAngle(\n DEFAULT_NORMAL_VEC3,\n roll\n );\n\n // q = normalQ * rotationQ * rollQ\n const q = new THREE.Quaternion(); // Identity\n q.premultiply(rollQ);\n q.premultiply(rotationQ);\n q.premultiply(normalQ);\n return q;\n },\n [quaternion, rotation, eulerOrder, normal, roll]\n );\n\n // Scale\n const _scale = useMemo(\n function updateScale() {\n // Invalid Scale Warning\n if (!Array.isArray(scale) || scale.length !== 3) {\n /* eslint-disable-next-line no-console */\n console.warn(\n `[Mesh] scale must be a 3x1 array of numbers! scale: ${scale}`\n );\n\n // @ts-ignore:T2345 // spread\n return [1, 1, 1];\n }\n\n // Handle Zero Scale Input\n if (\n !scale[0] ||\n !scale[1] ||\n !scale[2] ||\n Math.abs(scale[0]) < EPS ||\n Math.abs(scale[1]) < EPS ||\n Math.abs(scale[2]) < EPS\n ) {\n /* eslint-disable-next-line no-console */\n console.warn(`[Mesh] scale elements must be non-zero! scale: ${scale}`);\n\n return scale.map(value => Math.max(value, EPS));\n }\n\n return scale;\n },\n [scale]\n );\n\n // Color\n const [_color, setColor] = useState(color);\n useEffect(\n function updateColor() {\n setColor(color);\n },\n [color]\n );\n\n // Ref\n const groupRef = useRef<THREE.Group | null>(null); // Hooks must be deterministic\n const group = ref || groupRef;\n\n // State\n const [_state, setState] = useState(\n state != null ? { lastClickTime: 0, ...state } : { lastClickTime: 0 }\n );\n\n // ignoreMouseEvents\n const _ignoreMouseEvents = useMemo(\n function updateIgnoreMouseEvents() {\n return (\n ignoreMouseEvents ||\n (groupMember &&\n !hoverColor &&\n !onClick &&\n !onDoubleClick &&\n !onPointerOver &&\n !onPointerOut &&\n !onPointerDown &&\n !onPointerUp &&\n !onPointerMove &&\n !onWheel)\n );\n },\n [\n ignoreMouseEvents,\n groupMember,\n hoverColor,\n onClick,\n onDoubleClick,\n onPointerOver,\n onPointerOut,\n onPointerDown,\n onPointerUp,\n onPointerMove,\n onWheel\n ]\n );\n\n // ---------------------- //\n // ----- Events ----- //\n // ---------------------- //\n // Event Props\n const eventProps = useMemo(\n function updateEventProps() {\n return {\n mesh: group,\n group,\n state: _state,\n setState,\n ...canvasProps\n };\n },\n [group, _state, setState, canvasProps]\n );\n\n // Click Props\n const clickProps = useMemo(\n function updateClickProps() {\n return {\n mousePropagation,\n clickSensitivity,\n group,\n eventProps,\n onClick,\n onDoubleClick\n };\n },\n [\n mousePropagation,\n clickSensitivity,\n group,\n eventProps,\n onClick,\n onDoubleClick\n ]\n );\n\n // onPointerOver\n const _onPointerOver = useCallback(\n function onHoverOver(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (hoverable) {\n if (hoverColor != null) {\n setColor(hoverColor);\n }\n if (onPointerOver) {\n onPointerOver(eventProps);\n }\n }\n },\n [onPointerOver, hoverColor, hoverable, eventProps, mousePropagation]\n );\n\n // onPointerOut\n const _onPointerOut = useCallback(\n function onHoverOut(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (hoverable) {\n if (hoverColor != null) {\n setColor(color);\n }\n if (onPointerOut) {\n onPointerOut(eventProps);\n }\n }\n },\n [onPointerOut, color, hoverColor, hoverable, eventProps, mousePropagation]\n );\n\n // onPointerDown\n const _onPointerDown = useCallback(\n function onMouseDown(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onPointerDown) {\n onPointerDown(eventProps);\n }\n },\n [onPointerDown, mousePropagation, eventProps]\n );\n\n // onPointerUp\n const _onPointerUp = useCallback(\n function onMouseUp(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onPointerUp) {\n onPointerUp(eventProps);\n }\n },\n [onPointerUp, mousePropagation, eventProps]\n );\n\n // onPointerMove\n const _onPointerMove = useCallback(\n function onMouseMove(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onPointerMove) {\n onPointerMove(eventProps);\n }\n },\n [onPointerMove, mousePropagation, eventProps]\n );\n\n // onWheel\n const _onWheel = useCallback(\n function onScroll(e) {\n // Mouse Propagation\n checkPropagation(e, mousePropagation);\n\n if (onWheel) {\n onWheel(eventProps);\n }\n },\n [onWheel, mousePropagation, eventProps]\n );\n\n // onClick + onDoubleClick\n const _onClick = useCallback(handleClick(clickProps), [clickProps]);\n\n // ------------------------- //\n // ----- Animation ----- //\n // ------------------------- //\n // Animation Function\n const _animation = useCallback(\n function onAnimation() {\n // @ts-ignore:TS2339 current does not exist for group\n if (animation && group.current) {\n animation(eventProps);\n }\n },\n [group, animation, eventProps]\n );\n\n // Child Props\n const childProps = useMemo(\n function updateChildProps() {\n const props = { groupMember: true };\n\n const potentialChildProps = {\n color: _color,\n view3DEnvMap,\n materialType,\n transparent,\n opacity,\n side,\n wireframe,\n castShadow,\n receiveShadow,\n edges,\n edgeColor,\n edgeThresholdAngle\n };\n\n Object.entries(potentialChildProps).map(([key, value]) => {\n if (value != null) {\n // check != null to catch 0\n props[key] = value;\n }\n return null;\n });\n\n return props;\n },\n [\n _color,\n view3DEnvMap,\n materialType,\n side,\n transparent,\n opacity,\n castShadow,\n receiveShadow,\n wireframe,\n edges,\n edgeColor,\n edgeThresholdAngle\n ]\n );\n\n return (\n // @ts-ignore:TS2322\n <group\n ref={group}\n // Geometry\n position={position as [number, number, number]}\n scale={_scale as [number, number, number]}\n quaternion={_quaternion}\n // Event Functions\n onPointerOver={_ignoreMouseEvents ? undefined : _onPointerOver}\n onPointerOut={_ignoreMouseEvents ? undefined : _onPointerOut}\n onPointerDown={_ignoreMouseEvents ? undefined : _onPointerDown}\n onPointerUp={_ignoreMouseEvents ? undefined : _onPointerUp}\n onPointerMove={_ignoreMouseEvents ? undefined : _onPointerMove}\n onWheel={_ignoreMouseEvents ? undefined : _onWheel}\n onClick={_ignoreMouseEvents ? undefined : _onClick}\n {...otherProps}\n >\n {animation && <AnimationComponent animation={_animation} />}\n {children &&\n React.Children.map(children, child => {\n if (!child) {\n return null;\n }\n\n return React.cloneElement(child, childProps);\n })}\n {/*\n // @ts-ignore:TS2322 */}\n </group>\n );\n});\n\nconst GroupMemo = memo(Group);\nGroupMemo.displayName = \"Group\";\nexport default GroupMemo;\n\n/**\n * Generate Group Props\n *\n * For shapes composed of multiple primitives, like the Capsule,\n * the meshes are grouped together. In order to rotate, scale,\n * translate, and animate the entire group rather than each individual primitive,\n * the group properties are extracted out and nulled for the primitives.\n *\n * Other properties, such as material related properties are passed down\n * so the appearance of the group is uniform.\n *\n * @param {any} props\n * @returns {GroupProps}\n */\nexport function generateGroupProps(\n /* eslint-disable @typescript-eslint/no-explicit-any */\n props: any\n): { cleanedProps: any; groupProps: any } {\n /* eslint-enable @typescript-eslint/no-explicit-any */\n const {\n position = [0, 0, 0],\n scale = [1, 1, 1],\n rotation = [0, 0, 0],\n normal = DEFAULT_NORMAL,\n roll = 0,\n quaternion,\n animation,\n state,\n onClick,\n onDoubleClick,\n onWheel,\n onPointerUp,\n onPointerDown,\n onPointerMove,\n onPointerOver,\n onPointerOut,\n mousePropagation,\n clickSensitivity,\n ignoreMouseEvents,\n ...cleanedProps\n } = props;\n\n const groupProps = {\n position,\n scale,\n rotation,\n normal,\n roll,\n quaternion,\n animation,\n state,\n onClick,\n onDoubleClick,\n onWheel,\n onPointerUp,\n onPointerDown,\n onPointerMove,\n onPointerOver,\n onPointerOut,\n mousePropagation,\n clickSensitivity,\n ignoreMouseEvents\n };\n\n return { cleanedProps, groupProps };\n}\n","// Axis.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport Group, { GroupProps, generateGroupProps } from './Group';\nimport Cylinder from '../primitives/Cylinder';\nimport Sphere from '../primitives/Sphere';\nimport Text from '../primitives/Text';\n\nconst { useMemo, memo } = React;\n\ninterface AxisProps extends GroupProps {\n x?: Array<number>;\n y?: Array<number>;\n z?: Array<number>;\n xColor?: string;\n yColor?: string;\n zColor?: string;\n labelColor?: string;\n xLabel?: string;\n yLabel?: string;\n zLabel?: string;\n labelSize?: number;\n labelDepth?: number;\n labelRotation?: Array<number>;\n thickness?: number;\n}\n\n/**\n * Axis\n *\n * Axis of unit length with text labels.\n * By default the axis is along x, y, and z directions.\n * The colors, axis directions, thickness of each axis Cylinder,\n * and label text may be set. The color of each axis and label text\n * may be individually set as well.\n *\n * @param {AxisProps} props\n */\nconst Axis: React.FunctionComponent<AxisProps> = function Axis(props) {\n const { cleanedProps, groupProps } = generateGroupProps(props);\n const {\n x = [1, 0, 0],\n y = [0, 1, 0],\n z = [0, 0, 1],\n xColor = 'red',\n yColor = 'blue',\n zColor = 'lime',\n labelColor = 'gray',\n xLabel = 'x',\n yLabel = 'y',\n zLabel = 'z',\n labelSize = 0.2,\n labelDepth = 0.02,\n labelRotation = [0, 0, 0],\n thickness = 0.1,\n children,\n ...otherProps\n } = cleanedProps;\n\n const offsetX = useMemo(\n function updateOffsetX() {\n const axisX = new THREE.Vector3(...x);\n const offX = axisX.multiplyScalar(1.25);\n return [offX.x, offX.y, offX.z];\n },\n [x]\n );\n\n const offsetY = useMemo(\n function updateOffsetY() {\n const axisY = new THREE.Vector3(...y);\n const offY = axisY.multiplyScalar(1.25);\n return [offY.x, offY.y, offY.z];\n },\n [y]\n );\n\n const offsetZ = useMemo(\n function updateOffsetZ() {\n const axisZ = new THREE.Vector3(...z);\n const offZ = axisZ.multiplyScalar(1.25);\n return [offZ.x, offZ.y, offZ.z];\n },\n [z]\n );\n\n return (\n <Group {...groupProps}>\n <Cylinder\n start={[0, 0, 0]}\n end={x}\n color={xColor}\n radius={thickness}\n {...otherProps}\n >\n {children}\n </Cylinder>\n <Sphere position={x} color={xColor} radius={thickness} {...otherProps}>\n {children}\n </Sphere>\n <Cylinder\n start={[0, 0, 0]}\n end={y}\n color={yColor}\n radius={thickness}\n {...otherProps}\n >\n {children}\n </Cylinder>\n <Sphere position={y} color={yColor} radius={thickness} {...otherProps}>\n {children}\n </Sphere>\n <Cylinder\n start={[0, 0, 0]}\n end={z}\n color={zColor}\n radius={thickness}\n {...otherProps}\n >\n {children}\n </Cylinder>\n <Sphere position={z} color={zColor} radius={thickness} {...otherProps}>\n {children}\n </Sphere>\n <Sphere\n position={[0, 0, 0]}\n color=\"black\"\n radius={thickness}\n {...otherProps}\n >\n {children}\n </Sphere>\n <Text\n position={offsetX}\n size={labelSize}\n depth={labelDepth}\n text={xLabel}\n color={labelColor}\n billboard\n />\n <Text\n position={offsetY}\n size={labelSize}\n depth={labelDepth}\n text={yLabel}\n color={labelColor}\n billboard\n />\n <Text\n position={offsetZ}\n size={labelSize}\n depth={labelDepth}\n text={zLabel}\n color={labelColor}\n billboard\n />\n </Group>\n );\n};\n\nconst AxisMemo = memo(Axis);\nAxisMemo.displayName = 'Axis';\nexport default AxisMemo;\n","// Arrow.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Group from \"./Group\";\nimport { MeshProps } from \"../primitives/Mesh\";\nimport Cylinder from \"../primitives/Cylinder\";\nimport Sphere from \"../primitives/Sphere\";\nimport { DEFAULT_NORMAL } from \"../utils/constants\";\nimport { minmax } from \"../utils/math\";\n\nconst { useMemo, memo } = React;\n\ninterface ArrowProps extends MeshProps {\n tail?: Array<number>;\n start?: Array<number>;\n position?: Array<number>;\n head?: Array<number>;\n end?: Array<number>;\n target?: Array<number>;\n normal?: Array<number>;\n magnitude?: number;\n radius?: number;\n shaftRadius?: number;\n headTipRadius?: number;\n headBaseRadius?: number;\n headRatio?: number;\n}\n\n/**\n * Arrow\n *\n * In Standard View, Arrow is a Group comprised of two Cylinders and a Sphere.\n * The head of the arrow is Cylinder with different radiusTop and radiusBottom,\n * which scales according to the magnitude of the arrow's length by default.\n * The tail also has a Sphere which also scales according to the magnitude of\n * the shaftRadius.\n * The shaftRadius, headBaseRadius, and headTipRadius may be specifically set.\n * The tail and head may be specified with tail/start/position and\n * head/end/target props.\n * The tail/start/position is also the center of the Sphere at the tail,\n * and head/end/target is the tip of the Cylinder at the head.\n *\n * @param {CapsuleProps} props\n */\nconst Arrow: React.FunctionComponent<ArrowProps> = function Arrow({\n tail,\n start,\n position = [0, 0, 0],\n head,\n end,\n target,\n radius,\n shaftRadius,\n headBaseRadius,\n headTipRadius = 0,\n headRatio = 0.1,\n normal = DEFAULT_NORMAL,\n magnitude = 1,\n color,\n hoverColor,\n children,\n ...otherProps\n}) {\n const { _tail, _head, _headBase, _headRatio, _magnitude } = useMemo(\n function updateTail() {\n // Head and Tail\n /* eslint-disable no-shadow */\n const _tail = tail || start || position;\n let _head = head || end || target;\n /* eslint-enable no-shadow */\n\n // Compute head and headBase\n const tailVec = new THREE.Vector3(..._tail);\n let arrowVec;\n if (_head != null) {\n // Define Arrow with head/end/target\n arrowVec = new THREE.Vector3(..._head).sub(tailVec);\n } else {\n // Define Arrow with position, normal, and magnitude\n arrowVec = new THREE.Vector3(...normal)\n .normalize()\n .multiplyScalar(magnitude);\n }\n /* eslint-disable no-shadow */\n _head = [arrowVec.x, arrowVec.y, arrowVec.z];\n const _headRatio = minmax(headRatio, 0, 1);\n const headBaseVec = arrowVec.clone().multiplyScalar(1 - _headRatio);\n const _headBase = [headBaseVec.x, headBaseVec.y, headBaseVec.z];\n const _magnitude = arrowVec.length();\n /* eslint-enable no-shadow */\n\n return { _tail, _head, _headBase, _headRatio, _magnitude };\n },\n [tail, start, position, head, end, target, headRatio, normal, magnitude]\n );\n\n const _shaftRadius = useMemo(\n function updateShaftRadius() {\n return shaftRadius || radius || 0.02 * _magnitude;\n },\n [shaftRadius, radius, _magnitude]\n );\n\n const _headBaseRadius = useMemo(\n function updateHeadBaseRadius() {\n return headBaseRadius || _headRatio * _magnitude;\n },\n [headBaseRadius, _headRatio, _magnitude]\n );\n\n return (\n <Group\n position={_tail}\n color={color}\n hoverColor={hoverColor}\n {...otherProps}\n >\n {/* Tail Sphere */}\n <Sphere radius={_shaftRadius} />\n {/* Shaft */}\n <Cylinder radius={_shaftRadius} start={[0, 0, 0]} end={_headBase} />\n {/* Head */}\n <Cylinder\n start={_headBase}\n end={_head}\n radiusBottom={_headBaseRadius}\n radiusTop={headTipRadius}\n >\n {children}\n </Cylinder>\n </Group>\n );\n};\n\n\n\nconst ArrowMemo = memo(Arrow);\nArrowMemo.displayName = \"Arrow\";\nexport default ArrowMemo;\n","// Camera.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport Box from '../primitives/Box';\nimport Circle from '../primitives/Circle';\nimport Cylinder from '../primitives/Cylinder';\nimport Label from '../primitives/Label';\nimport Arrow from './Arrow';\nimport Text from '../primitives/Text';\nimport { MeshProps } from '../primitives/Mesh';\nimport Group from './Group';\nimport { billboard, toQuaternion, objectToArray } from '../utils/util';\nimport { EPS } from '../utils/math';\nimport { useFrame } from '../utils/hooks';\nimport {\n DEFAULT_UP,\n DEFAULT_UP_VEC3,\n DEFAULT_NORMAL,\n DEFAULT_NORMAL_VEC3,\n EULER_ORDERS,\n} from '../utils/constants';\n\nconst { useMemo, memo } = React;\n\nfunction updateAllOpacity({\n children,\n originalOpacity,\n newOpacity = 0.5,\n restore = false,\n}): void {\n // Validation\n if (!children) {\n return;\n }\n const _children = Array.isArray(children) ? children : [children];\n\n // Update Meshes\n _children\n .filter(child => child.constructor.name === '')\n .map(mesh => {\n /* eslint-disable no-param-reassign */\n if (restore) {\n // Restore\n mesh.material.opacity = originalOpacity.pop();\n } else {\n // Enable Transparency\n mesh.material.transparent = true;\n // Update Opacity\n const oldOpacity =\n mesh.material.opacity != null ? mesh.material.opacity : 1;\n originalOpacity.push(oldOpacity);\n mesh.material.opacity = newOpacity;\n }\n\n // Update Material\n mesh.material.needsUpdate = true;\n\n return null;\n /* eslint-enable no-param-reassign */\n });\n\n // Recurse into Groups\n _children\n .filter(child => child.constructor.name === 'Group')\n .map(group =>\n updateAllOpacity({\n children: group.children,\n originalOpacity,\n newOpacity,\n restore,\n })\n );\n\n // Recurse into Scenes\n _children\n .filter(child => child.constructor.name === 'Scene')\n .map(scene =>\n updateAllOpacity({\n children: scene.children,\n originalOpacity,\n newOpacity,\n restore,\n })\n );\n}\n\n/**\n * setAllOpacity\n *\n * Recursively call updateAllOpacity on groups and sets material opacity\n * and transparennt for all meshes\n * originalCapacity needs to be reverse since, restoreAllOpacity will\n * pop elements from originalCapacity in the same order in which they\n * were pushed to the array.\n */\nfunction setAllOpacity(children, newOpacity): Function {\n let originalOpacity = [];\n updateAllOpacity({\n children,\n originalOpacity,\n newOpacity,\n restore: false,\n });\n originalOpacity = originalOpacity.reverse();\n\n // restoreAllOpacity closure\n // Something screwy is happening in the restore\n return function restoreAllOpacity(): void {\n updateAllOpacity({\n children,\n originalOpacity,\n newOpacity,\n restore: true,\n });\n };\n}\n\nfunction CullCoverage({ frustum, cull, coverageColor, coverageOpacity }): null {\n useFrame(function updateRenderLoop({ gl, scene, camera }) {\n /* eslint-disable no-param-reassign */\n if (!cull) {\n return;\n }\n\n // Prevent Render of Full Scene after Culling\n // @ts-ignore:TS2339 cancelTailRender does not exist on scene\n scene.cancelTailRender = true;\n\n // Original Color Coverage with Custom Coverage Opacity\n if (coverageColor == null && coverageOpacity < 1) {\n const restoreAllOpacity = setAllOpacity(scene.children, coverageOpacity);\n gl.clippingPlanes = frustum.planes;\n gl.render(scene, camera);\n\n // Restore WebGLRender Options\n restoreAllOpacity();\n scene.overrideMaterial = null;\n gl.clippingPlanes = [];\n return;\n }\n\n // Override Color\n if (coverageColor != null) {\n scene.overrideMaterial = new THREE.MeshBasicMaterial({\n color: coverageColor,\n transparent: true,\n opacity: coverageOpacity,\n });\n }\n\n gl.clippingPlanes = frustum.planes;\n gl.render(scene, camera);\n\n // Restore WebGLRender Options\n scene.overrideMaterial = null;\n gl.clippingPlanes = [];\n\n /* eslint-enable no-param-reassign */\n }, 10);\n\n return null;\n}\n\ninterface CameraProps extends MeshProps {\n type?: string;\n width?: number;\n height?: number;\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n near?: number;\n far?: number;\n fov?: number;\n aspect?: number;\n roll?: number;\n helper?: boolean;\n meshColor?: string;\n wireframeColor?: string;\n coverageColor?: string;\n coverageOpacity?: number;\n showUp?: boolean;\n showNormal?: boolean;\n showRoll?: boolean;\n showLookAt?: boolean;\n showLabel?: boolean;\n labelText?: string;\n labelOffset?: Array<number>;\n target?: Array<number>;\n cull?: boolean;\n}\n\n/**\n * Camera\n *\n * Camera's up prop may be given by the user. The camera's true up will be a projection of the\n * given up. This way you can have a tilted camera and just provide the up of the world space and\n * the camera will orient such that the project of the true up is aligned with the world space up.\n */\nconst Camera: React.FunctionComponent<CameraProps> = function Camera({\n // THREE Camera Props\n type = 'perspective',\n left,\n right,\n top,\n bottom,\n near = EPS,\n far = 1000,\n fov = 50,\n width = 1,\n height = 1,\n aspect = width / height,\n // Camera Props\n position = [0, 0, 0],\n normal = DEFAULT_NORMAL,\n target,\n rotation = [0, 0, 0],\n eulerOrder = EULER_ORDERS.XYZ,\n quaternion,\n up,\n roll = 0,\n helper = false,\n showUp = false,\n showNormal = false,\n showRoll = false,\n showLookAt = false,\n showLabel = true,\n labelOffset = [0, 0, 1.5],\n labelText = 'cam',\n // Coverage\n cull = false,\n coverageColor,\n coverageOpacity = 1,\n // Shadow Props\n castShadow = false,\n receiveShadow = false,\n // Wireframe\n wireframeColor,\n children,\n ...otherProps\n}) {\n // Target / Normal\n const initialNormal = useMemo(\n function updateNormal() {\n if (target) {\n const posVec = new THREE.Vector3(...position);\n const targetVec = new THREE.Vector3(...target);\n const lookAtVec = targetVec.clone().sub(posVec).normalize();\n // LookAt is opposite direction of Normal\n return [-lookAtVec.x, -lookAtVec.y, -lookAtVec.z];\n }\n\n return objectToArray(new THREE.Vector3(...normal).normalize());\n },\n [target, normal, position]\n );\n\n // THREE.Camera\n const camera = useMemo(\n function updateCamera() {\n let cam;\n const _left = left != null ? left : -width * 0.5;\n const _right = right != null ? right : width * 0.5;\n const _top = top != null ? top : height * 0.5;\n const _bottom = bottom != null ? bottom : -height * 0.5;\n\n switch (type) {\n case 'orthographic':\n cam = new THREE.OrthographicCamera(\n _left,\n _right,\n _top,\n _bottom,\n near,\n far\n );\n break;\n case 'perspective':\n cam = new THREE.PerspectiveCamera(fov, aspect, near, far);\n break;\n default:\n /* eslint-disable-next-line no-console */\n console.warn(`[Camera] Invalid camera type: ${type}`);\n }\n\n // Camera Extrinsics\n cam.position.set(...position);\n // cam.up is only used for determining the axis of rotaion for orbitControls or mapControls,\n // this up does not affect the quaternion of the Camera\n if (up != null) {\n cam.up.set(...up);\n } else {\n cam.up.set(...DEFAULT_UP);\n }\n // Note: THREE's Camera's actual normal is inverse of the lookAt\n // Since THREE Camera's quaternion is readOnly and may only be manipulated by methods,\n // must use lookAt().\n // Reset LookAt\n cam.lookAt(...position.map((val, i) => val - DEFAULT_NORMAL[i]));\n\n // Normal\n // @ts-ignore:T2345 // spread\n const normalVec = new THREE.Vector3(...initialNormal);\n const normalQ = new THREE.Quaternion().setFromUnitVectors(\n DEFAULT_NORMAL_VEC3,\n normalVec\n );\n\n // Rotation / Quaternion\n let rotationQ = new THREE.Quaternion();\n if (quaternion == null) {\n let _eulerOrder = eulerOrder.toUpperCase();\n _eulerOrder = EULER_ORDERS[_eulerOrder]\n ? _eulerOrder\n : EULER_ORDERS.XYZ;\n const euler = new THREE.Euler(...rotation, _eulerOrder);\n rotationQ = new THREE.Quaternion().setFromEuler(euler);\n } else {\n rotationQ = toQuaternion(quaternion);\n }\n\n // Up\n // If an up prop is provided, the camera with align the roll so that the true up vector of\n // the Camera is aligned with the projection of the given up vector in the\n // Camera's image plane.\n let upAlignAngle = 0;\n if (up != null) {\n const qNormalAndRotation = cam.quaternion\n .clone()\n .premultiply(rotationQ)\n .premultiply(normalQ);\n const givenUpVec = new THREE.Vector3(...up).normalize();\n const lookAtVec = DEFAULT_NORMAL_VEC3.clone()\n .applyQuaternion(qNormalAndRotation)\n .multiplyScalar(-1);\n const rightVec = new THREE.Vector3().crossVectors(\n givenUpVec,\n lookAtVec\n );\n\n const projectedUpVec = new THREE.Vector3().crossVectors(\n lookAtVec,\n rightVec\n );\n const trueUpVec =\n DEFAULT_UP_VEC3.clone().applyQuaternion(qNormalAndRotation);\n const upAlignSign = trueUpVec.clone().dot(rightVec) > 0 ? -1 : 1;\n upAlignAngle = trueUpVec.angleTo(projectedUpVec) * upAlignSign;\n }\n\n // Roll\n // The normal is inverse of the lookAt so the roll must be negated\n const _roll = (-roll + upAlignAngle) % (Math.PI * 2);\n const rollQ = new THREE.Quaternion().setFromAxisAngle(\n DEFAULT_NORMAL_VEC3,\n _roll\n );\n\n // cam.quaternion = normalQ * rotationQ * rollQ\n cam.quaternion.premultiply(rollQ);\n cam.quaternion.premultiply(rotationQ);\n cam.quaternion.premultiply(normalQ);\n cam.updateMatrixWorld();\n\n return cam;\n },\n [\n position,\n up,\n initialNormal,\n quaternion,\n roll,\n left,\n width,\n right,\n top,\n height,\n bottom,\n type,\n near,\n far,\n fov,\n aspect,\n eulerOrder,\n rotation,\n ]\n );\n\n const cameraNormal = useMemo(\n function updateNormal() {\n return objectToArray(\n DEFAULT_NORMAL_VEC3.clone().applyQuaternion(camera.quaternion)\n );\n },\n [camera]\n );\n\n const cameraLookAt = useMemo(\n function updateLookAt() {\n return [-cameraNormal[0], -cameraNormal[1], -cameraNormal[2]];\n },\n [cameraNormal]\n );\n\n // Camera Helper\n const cameraHelper = useMemo(\n function updateCameraHelper() {\n if (!helper || !camera) {\n return null;\n }\n\n return new THREE.CameraHelper(camera);\n },\n [camera, helper]\n );\n\n // Frustum\n const frustum = useMemo(\n function updateFrustum() {\n // Camera Frustum\n const frus = new THREE.Frustum();\n frus.setFromProjectionMatrix(\n new THREE.Matrix4().multiplyMatrices(\n camera.projectionMatrix,\n camera.matrixWorldInverse\n )\n );\n\n return frus;\n },\n [camera]\n );\n\n return (\n <>\n <Group position={position} {...otherProps}>\n {/* Camera */}\n <Group quaternion={camera.quaternion}>\n <Box\n scale={[1, 1, 1.4]}\n castShadow={castShadow}\n receiveShadow={receiveShadow}\n />\n <Cylinder\n start={[0, 0, -0.7]}\n end={[0, 0, -1]}\n radiusBottom={0.3}\n radiusTop={0.3}\n castShadow={castShadow}\n receiveShadow={receiveShadow}\n />\n {/* Roll */}\n {/* Camera's Normal is inverse of LookAt */}\n {showRoll && (\n <Group>\n <Arrow head={DEFAULT_UP.map(val => val * 2)} color=\"yellow\" />\n <Arrow\n head={DEFAULT_UP.map(val => val * 2)}\n color=\"yellow\"\n opacity={0.3}\n roll={roll}\n />\n <Circle\n color=\"yellow\"\n thetaLength={roll % (Math.PI * 2)}\n thetaStart={Math.PI * 0.5 - roll}\n normal={[0, 0, -1]}\n opacity={0.3}\n />\n <Text\n text={`local roll: ${roll}`}\n position={DEFAULT_UP.map(val => val * 2.2)}\n color=\"yellow\"\n align=\"center\"\n size={0.2}\n billboard\n />\n </Group>\n )}\n </Group>\n {/* Wireframe */}\n {wireframeColor && (\n <Group quaternion={camera.quaternion}>\n <Box\n scale={[1, 1, 1.4]}\n color={wireframeColor}\n wireframe\n ignoreMouseEvents\n />\n <Cylinder\n start={[0, 0, -0.7]}\n end={[0, 0, -1]}\n radiusBottom={0.3}\n radiusTop={0.3}\n color={wireframeColor}\n wireframe\n ignoreMouseEvents\n />\n </Group>\n )}\n {/* Up */}\n {showUp && (\n <Group>\n <Arrow\n head={[camera.up.x * 2, camera.up.y * 2, camera.up.z * 2]}\n color=\"cyan\"\n />\n <Text\n text=\"up\"\n position={[\n camera.up.x * 2.2,\n camera.up.y * 2.2,\n camera.up.z * 2.2,\n ]}\n color=\"cyan\"\n align=\"center\"\n size={camera.up.length() * 0.2}\n billboard\n />\n </Group>\n )}\n {/* Normal */}\n {showNormal && (\n <Group>\n <Arrow head={cameraNormal.map(val => val * 2)} color=\"lime\" />\n <Text\n text=\"normal\"\n position={cameraNormal.map(val => val * 2.2)}\n color=\"lime\"\n align=\"center\"\n size={0.2}\n billboard\n />\n </Group>\n )}\n {/* LookAt */}\n {showLookAt && (\n <Group>\n <Arrow head={cameraLookAt.map(val => val * 2)} color=\"magenta\" />\n <Text\n text=\"look\"\n position={cameraLookAt.map(val => val * 2.2)}\n color=\"magenta\"\n align=\"center\"\n size={0.2}\n billboard\n />\n </Group>\n )}\n {/* Label */}\n {showLabel && (\n <Label\n position={labelOffset}\n up={[0, 0, 1]}\n text={labelText}\n animation={billboard}\n />\n )}\n {children}\n </Group>\n\n {/* Helper */}\n {helper && (\n // @ts-ignore: Property 'primitive' does not exist on type 'JSX.IntrinsicElements'\n <primitive object={cameraHelper} />\n )}\n\n {/* Cull */}\n <CullCoverage\n frustum={frustum}\n cull={cull}\n coverageColor={coverageColor}\n coverageOpacity={coverageOpacity}\n />\n </>\n );\n};\n\nconst CameraMemo = memo(Camera);\nCameraMemo.displayName = 'Camera';\nexport default CameraMemo;\n","// BoundingBox.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Group, { GroupProps, generateGroupProps } from \"./Group\";\nimport Line, { LineProps } from \"../primitives/Line\";\nimport { EPS } from \"../utils/math\";\n\nconst { useMemo, memo } = React;\n\ninterface BoundingBoxProps extends LineProps, GroupProps {\n min?: Array<number>;\n max?: Array<number>;\n}\n\n/**\n * BoundingBox\n *\n * In Standard View, BoundingBox is a shape composed with Line primitives.\n * The min and max points are used to determine the bounding box.\n * The position represents the center of the bounding box and based on the\n * min and max the box is scaled to match the min and max corners.\n *\n * If max coordinates are less than or equal to min for any dimension,\n * a small but non-zero scale is used. This seemingly collapses dimensions\n * without incurring uninvertibility and also prevents inverting min and max.\n *\n * @param {BoundingBoxProps} props\n */\nconst BoundingBox: React.FunctionComponent<\n BoundingBoxProps\n> = function BoundingBox(props) {\n const { cleanedProps, groupProps } = generateGroupProps(props);\n // hoverColor for Line has issues because the boundingbox has some bugs\n /* eslint-disable @typescript-eslint/no-unused-vars */\n const { min, max, color, hoverColor, children, ...otherProps } = cleanedProps;\n const { position = [0, 0, 0], scale, ...otherGroupProps } = groupProps;\n\n // Position\n const { _position, disp } = useMemo(\n function updatePositionAndScale() {\n let _min = min;\n let _max = max;\n const _pos = position;\n\n // Min and Max\n if (_min == null || _max == null) {\n const x = _pos[0];\n const y = _pos[1];\n const z = _pos[2];\n _min = [x - 0.5, y - 0.5, z - 0.5];\n _max = [x + 0.5, y + 0.5, z + 0.5];\n }\n const minVec = new THREE.Vector3(..._min);\n const maxVec = new THREE.Vector3(..._max);\n const displacement = maxVec.clone().sub(minVec);\n\n // Position\n const center = minVec\n .clone()\n .add(maxVec)\n .multiplyScalar(0.5);\n return { _position: [center.x, center.y, center.z], disp: displacement };\n },\n [position, min, max]\n );\n\n const _scale = useMemo(\n function updateScale() {\n // Scale\n if (scale) {\n return scale;\n }\n\n disp.x = Math.max(disp.x, EPS);\n disp.y = Math.max(disp.y, EPS);\n disp.z = Math.max(disp.z, EPS);\n return [disp.x, disp.y, disp.z];\n },\n [scale, disp]\n );\n\n return (\n <Group\n position={_position}\n scale={_scale}\n color={color}\n {...otherGroupProps}\n >\n <Line start={[-0.5, -0.5, -0.5]} end={[0.5, -0.5, -0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[-0.5, -0.5, -0.5]} end={[-0.5, 0.5, -0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[-0.5, -0.5, -0.5]} end={[-0.5, -0.5, 0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[0.5, -0.5, -0.5]} end={[0.5, 0.5, -0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[0.5, -0.5, -0.5]} end={[0.5, -0.5, 0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[-0.5, 0.5, -0.5]} end={[0.5, 0.5, -0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[-0.5, 0.5, -0.5]} end={[-0.5, 0.5, 0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[-0.5, -0.5, 0.5]} end={[0.5, -0.5, 0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[-0.5, -0.5, 0.5]} end={[-0.5, 0.5, 0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[0.5, 0.5, 0.5]} end={[-0.5, 0.5, 0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[0.5, 0.5, 0.5]} end={[0.5, -0.5, 0.5]} {...otherProps}>\n {children}\n </Line>\n <Line start={[0.5, 0.5, 0.5]} end={[0.5, 0.5, -0.5]} {...otherProps}>\n {children}\n </Line>\n </Group>\n );\n};\n\nconst BoundingBoxMemo = memo(BoundingBox);\nBoundingBoxMemo.displayName = \"BoundingBox\";\nexport default BoundingBoxMemo;\n","// Capsule.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Group, { generateGroupProps } from \"./Group\";\nimport { MeshProps } from \"../primitives/Mesh\";\nimport Sphere from \"../primitives/Sphere\";\nimport Cylinder from \"../primitives/Cylinder\";\n\nconst { useMemo, memo } = React;\n\ninterface CapsuleProps extends MeshProps {\n start?: Array<number>;\n end?: Array<number>;\n radius?: number;\n}\n\n/**\n * Capsule\n *\n * In Standard View, Capsule is a Group comprised of two Spheres and a Cylinder.\n * The Sphere and Cylinder all have the same radius, radiusTop, and radiusBottom.\n * The geometries are constructed with unit radii but these primitives are scaled\n * according to the provided radius property. The start and end properties determine\n * the centers of the bottom and top Spheres and also the start and end of the\n * Cylinder.\n * The position, scale, rotation, quaternion, and other Group properties are extracted\n * and applied to the group.\n *\n * @param {CapsuleProps} props\n */\nconst Capsule: React.FunctionComponent<CapsuleProps> = function Capsule(props) {\n const { cleanedProps, groupProps } = generateGroupProps(props);\n const {\n start,\n end,\n radius,\n color,\n hoverColor,\n children,\n ...otherProps\n } = cleanedProps;\n const _position = groupProps.position;\n\n const { startNorm, endNorm, centerVec } = useMemo(\n function updateStartAndEnd() {\n let _start = start;\n let _end = end;\n\n // Generate Start and End if not provided\n if (_start == null || _end == null) {\n if (_position) {\n _start = [_position[0], _position[1] - 0.5, _position[2]];\n _end = [_position[0], _position[1] + 0.5, _position[2]];\n } else {\n _start = [0, -0.5, 0];\n _end = [0, 0.5, 0];\n }\n }\n\n // Normalize start and end around center\n // Let Group manage the position\n const startVec = new THREE.Vector3(..._start);\n const endVec = new THREE.Vector3(..._end);\n const center = startVec\n .clone()\n .add(endVec)\n .multiplyScalar(0.5);\n // Normalize around center\n startVec.sub(center);\n endVec.sub(center);\n // Vector to Array\n const startN = [startVec.x, startVec.y, startVec.z];\n const endN = [endVec.x, endVec.y, endVec.z];\n return { startNorm: startN, endNorm: endN, centerVec: center };\n },\n [start, end, _position]\n );\n\n groupProps.position = [centerVec.x, centerVec.y, centerVec.z];\n\n const _radius = useMemo(\n function updateRadius() {\n return radius || 1;\n },\n [radius]\n );\n\n return (\n <Group color={color} hoverColor={hoverColor} {...groupProps}>\n <Sphere radius={_radius} position={startNorm} {...otherProps}>\n {children}\n </Sphere>\n <Cylinder\n radius={_radius}\n start={startNorm}\n end={endNorm}\n {...otherProps}\n >\n {children}\n </Cylinder>\n <Sphere position={endNorm} radius={_radius} {...otherProps}>\n {children}\n </Sphere>\n </Group>\n );\n};\n\n\n\nconst CapsuleMemo = memo(Capsule);\nCapsuleMemo.displayName = \"Capsule\";\nexport default CapsuleMemo;\n","/*!\nfflate - fast JavaScript compression/decompression\n<https://101arrowz.github.io/fflate>\nLicensed under MIT. https://github.com/101arrowz/fflate/blob/master/LICENSE\nversion 0.8.2\n*/\n\n// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n","import {\n\tVector3,\n\tVector4\n} from 'three';\n\n/**\n * @module NURBSUtils\n * @three_import import * as NURBSUtils from 'three/addons/curves/NURBSUtils.js';\n */\n\n/**\n * Finds knot vector span.\n *\n * @param {number} p - The degree.\n * @param {number} u - The parametric value.\n * @param {Array<number>} U - The knot vector.\n * @return {number} The span.\n */\nfunction findSpan( p, u, U ) {\n\n\tconst n = U.length - p - 1;\n\n\tif ( u >= U[ n ] ) {\n\n\t\treturn n - 1;\n\n\t}\n\n\tif ( u <= U[ p ] ) {\n\n\t\treturn p;\n\n\t}\n\n\tlet low = p;\n\tlet high = n;\n\tlet mid = Math.floor( ( low + high ) / 2 );\n\n\twhile ( u < U[ mid ] || u >= U[ mid + 1 ] ) {\n\n\t\tif ( u < U[ mid ] ) {\n\n\t\t\thigh = mid;\n\n\t\t} else {\n\n\t\t\tlow = mid;\n\n\t\t}\n\n\t\tmid = Math.floor( ( low + high ) / 2 );\n\n\t}\n\n\treturn mid;\n\n}\n\n/**\n * Calculates basis functions. See The NURBS Book, page 70, algorithm A2.2.\n *\n * @param {number} span - The span in which `u` lies.\n * @param {number} u - The parametric value.\n * @param {number} p - The degree.\n * @param {Array<number>} U - The knot vector.\n * @return {Array<number>} Array[p+1] with basis functions values.\n */\nfunction calcBasisFunctions( span, u, p, U ) {\n\n\tconst N = [];\n\tconst left = [];\n\tconst right = [];\n\tN[ 0 ] = 1.0;\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tconst temp = N[ r ] / ( rv + lv );\n\t\t\tN[ r ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tN[ j ] = saved;\n\n\t}\n\n\treturn N;\n\n}\n\n/**\n * Calculates B-Spline curve points. See The NURBS Book, page 82, algorithm A3.1.\n *\n * @param {number} p - The degree of the B-Spline.\n * @param {Array<number>} U - The knot vector.\n * @param {Array<Vector4>} P - The control points\n * @param {number} u - The parametric point.\n * @return {Vector4} The point for given `u`.\n */\nfunction calcBSplinePoint( p, U, P, u ) {\n\n\tconst span = findSpan( p, u, U );\n\tconst N = calcBasisFunctions( span, u, p, U );\n\tconst C = new Vector4( 0, 0, 0, 0 );\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tconst point = P[ span - p + j ];\n\t\tconst Nj = N[ j ];\n\t\tconst wNj = point.w * Nj;\n\t\tC.x += point.x * wNj;\n\t\tC.y += point.y * wNj;\n\t\tC.z += point.z * wNj;\n\t\tC.w += point.w * Nj;\n\n\t}\n\n\treturn C;\n\n}\n\n/**\n * Calculates basis functions derivatives. See The NURBS Book, page 72, algorithm A2.3.\n *\n * @param {number} span - The span in which `u` lies.\n * @param {number} u - The parametric point.\n * @param {number} p - The degree.\n * @param {number} n - number of derivatives to calculate\n * @param {Array<number>} U - The knot vector.\n * @return {Array<Array<number>>} An array[n+1][p+1] with basis functions derivatives.\n */\nfunction calcBasisFunctionDerivatives( span, u, p, n, U ) {\n\n\tconst zeroArr = [];\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tzeroArr[ i ] = 0.0;\n\n\tconst ders = [];\n\n\tfor ( let i = 0; i <= n; ++ i )\n\t\tders[ i ] = zeroArr.slice( 0 );\n\n\tconst ndu = [];\n\n\tfor ( let i = 0; i <= p; ++ i )\n\t\tndu[ i ] = zeroArr.slice( 0 );\n\n\tndu[ 0 ][ 0 ] = 1.0;\n\n\tconst left = zeroArr.slice( 0 );\n\tconst right = zeroArr.slice( 0 );\n\n\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\tleft[ j ] = u - U[ span + 1 - j ];\n\t\tright[ j ] = U[ span + j ] - u;\n\n\t\tlet saved = 0.0;\n\n\t\tfor ( let r = 0; r < j; ++ r ) {\n\n\t\t\tconst rv = right[ r + 1 ];\n\t\t\tconst lv = left[ j - r ];\n\t\t\tndu[ j ][ r ] = rv + lv;\n\n\t\t\tconst temp = ndu[ r ][ j - 1 ] / ndu[ j ][ r ];\n\t\t\tndu[ r ][ j ] = saved + rv * temp;\n\t\t\tsaved = lv * temp;\n\n\t\t}\n\n\t\tndu[ j ][ j ] = saved;\n\n\t}\n\n\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\tders[ 0 ][ j ] = ndu[ j ][ p ];\n\n\t}\n\n\tfor ( let r = 0; r <= p; ++ r ) {\n\n\t\tlet s1 = 0;\n\t\tlet s2 = 1;\n\n\t\tconst a = [];\n\t\tfor ( let i = 0; i <= p; ++ i ) {\n\n\t\t\ta[ i ] = zeroArr.slice( 0 );\n\n\t\t}\n\n\t\ta[ 0 ][ 0 ] = 1.0;\n\n\t\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\t\tlet d = 0.0;\n\t\t\tconst rk = r - k;\n\t\t\tconst pk = p - k;\n\n\t\t\tif ( r >= k ) {\n\n\t\t\t\ta[ s2 ][ 0 ] = a[ s1 ][ 0 ] / ndu[ pk + 1 ][ rk ];\n\t\t\t\td = a[ s2 ][ 0 ] * ndu[ rk ][ pk ];\n\n\t\t\t}\n\n\t\t\tconst j1 = ( rk >= - 1 ) ? 1 : - rk;\n\t\t\tconst j2 = ( r - 1 <= pk ) ? k - 1 : p - r;\n\n\t\t\tfor ( let j = j1; j <= j2; ++ j ) {\n\n\t\t\t\ta[ s2 ][ j ] = ( a[ s1 ][ j ] - a[ s1 ][ j - 1 ] ) / ndu[ pk + 1 ][ rk + j ];\n\t\t\t\td += a[ s2 ][ j ] * ndu[ rk + j ][ pk ];\n\n\t\t\t}\n\n\t\t\tif ( r <= pk ) {\n\n\t\t\t\ta[ s2 ][ k ] = - a[ s1 ][ k - 1 ] / ndu[ pk + 1 ][ r ];\n\t\t\t\td += a[ s2 ][ k ] * ndu[ r ][ pk ];\n\n\t\t\t}\n\n\t\t\tders[ k ][ r ] = d;\n\n\t\t\tconst j = s1;\n\t\t\ts1 = s2;\n\t\t\ts2 = j;\n\n\t\t}\n\n\t}\n\n\tlet r = p;\n\n\tfor ( let k = 1; k <= n; ++ k ) {\n\n\t\tfor ( let j = 0; j <= p; ++ j ) {\n\n\t\t\tders[ k ][ j ] *= r;\n\n\t\t}\n\n\t\tr *= p - k;\n\n\t}\n\n\treturn ders;\n\n}\n\n/**\n * Calculates derivatives of a B-Spline. See The NURBS Book, page 93, algorithm A3.2.\n *\n * @param {number} p - The degree.\n * @param {Array<number>} U - The knot vector.\n * @param {Array<Vector4>} P - The control points\n * @param {number} u - The parametric point.\n * @param {number} nd - The number of derivatives.\n * @return {Array<Vector4>} An array[d+1] with derivatives.\n */\nfunction calcBSplineDerivatives( p, U, P, u, nd ) {\n\n\tconst du = nd < p ? nd : p;\n\tconst CK = [];\n\tconst span = findSpan( p, u, U );\n\tconst nders = calcBasisFunctionDerivatives( span, u, p, du, U );\n\tconst Pw = [];\n\n\tfor ( let i = 0; i < P.length; ++ i ) {\n\n\t\tconst point = P[ i ].clone();\n\t\tconst w = point.w;\n\n\t\tpoint.x *= w;\n\t\tpoint.y *= w;\n\t\tpoint.z *= w;\n\n\t\tPw[ i ] = point;\n\n\t}\n\n\tfor ( let k = 0; k <= du; ++ k ) {\n\n\t\tconst point = Pw[ span - p ].clone().multiplyScalar( nders[ k ][ 0 ] );\n\n\t\tfor ( let j = 1; j <= p; ++ j ) {\n\n\t\t\tpoint.add( Pw[ span - p + j ].clone().multiplyScalar( nders[ k ][ j ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = point;\n\n\t}\n\n\tfor ( let k = du + 1; k <= nd + 1; ++ k ) {\n\n\t\tCK[ k ] = new Vector4( 0, 0, 0 );\n\n\t}\n\n\treturn CK;\n\n}\n\n/**\n * Calculates \"K over I\".\n *\n * @param {number} k - The K value.\n * @param {number} i - The I value.\n * @return {number} k!/(i!(k-i)!)\n */\nfunction calcKoverI( k, i ) {\n\n\tlet nom = 1;\n\n\tfor ( let j = 2; j <= k; ++ j ) {\n\n\t\tnom *= j;\n\n\t}\n\n\tlet denom = 1;\n\n\tfor ( let j = 2; j <= i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\tfor ( let j = 2; j <= k - i; ++ j ) {\n\n\t\tdenom *= j;\n\n\t}\n\n\treturn nom / denom;\n\n}\n\n/**\n * Calculates derivatives (0-nd) of rational curve. See The NURBS Book, page 127, algorithm A4.2.\n *\n * @param {Array<Vector4>} Pders - Array with derivatives.\n * @return {Array<Vector3>} An array with derivatives for rational curve.\n */\nfunction calcRationalCurveDerivatives( Pders ) {\n\n\tconst nd = Pders.length;\n\tconst Aders = [];\n\tconst wders = [];\n\n\tfor ( let i = 0; i < nd; ++ i ) {\n\n\t\tconst point = Pders[ i ];\n\t\tAders[ i ] = new Vector3( point.x, point.y, point.z );\n\t\twders[ i ] = point.w;\n\n\t}\n\n\tconst CK = [];\n\n\tfor ( let k = 0; k < nd; ++ k ) {\n\n\t\tconst v = Aders[ k ].clone();\n\n\t\tfor ( let i = 1; i <= k; ++ i ) {\n\n\t\t\tv.sub( CK[ k - i ].clone().multiplyScalar( calcKoverI( k, i ) * wders[ i ] ) );\n\n\t\t}\n\n\t\tCK[ k ] = v.divideScalar( wders[ 0 ] );\n\n\t}\n\n\treturn CK;\n\n}\n\n/**\n * Calculates NURBS curve derivatives. See The NURBS Book, page 127, algorithm A4.2.\n *\n * @param {number} p - The degree.\n * @param {Array<number>} U - The knot vector.\n * @param {Array<Vector4>} P - The control points in homogeneous space.\n * @param {number} u - The parametric point.\n * @param {number} nd - The number of derivatives.\n * @return {Array<Vector3>} array with derivatives for rational curve.\n */\nfunction calcNURBSDerivatives( p, U, P, u, nd ) {\n\n\tconst Pders = calcBSplineDerivatives( p, U, P, u, nd );\n\treturn calcRationalCurveDerivatives( Pders );\n\n}\n\n/**\n * Calculates a rational B-Spline surface point. See The NURBS Book, page 134, algorithm A4.3.\n *\n * @param {number} p - The first degree of B-Spline surface.\n * @param {number} q - The second degree of B-Spline surface.\n * @param {Array<number>} U - The first knot vector.\n * @param {Array<number>} V - The second knot vector.\n * @param {Array<Array<Vector4>>} P - The control points in homogeneous space.\n * @param {number} u - The first parametric point.\n * @param {number} v - The second parametric point.\n * @param {Vector3} target - The target vector.\n */\nfunction calcSurfacePoint( p, q, U, V, P, u, v, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst temp = [];\n\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\ttemp[ l ] = new Vector4( 0, 0, 0, 0 );\n\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ].clone();\n\t\t\tconst w = point.w;\n\t\t\tpoint.x *= w;\n\t\t\tpoint.y *= w;\n\t\t\tpoint.z *= w;\n\t\t\ttemp[ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t}\n\n\t}\n\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\tSw.add( temp[ l ].multiplyScalar( Nv[ l ] ) );\n\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\n/**\n * Calculates a rational B-Spline volume point. See The NURBS Book, page 134, algorithm A4.3.\n *\n * @param {number} p - The first degree of B-Spline surface.\n * @param {number} q - The second degree of B-Spline surface.\n * @param {number} r - The third degree of B-Spline surface.\n * @param {Array<number>} U - The first knot vector.\n * @param {Array<number>} V - The second knot vector.\n * @param {Array<number>} W - The third knot vector.\n * @param {Array<Array<Array<Vector4>>>} P - The control points in homogeneous space.\n * @param {number} u - The first parametric point.\n * @param {number} v - The second parametric point.\n * @param {number} w - The third parametric point.\n * @param {Vector3} target - The target vector.\n */\nfunction calcVolumePoint( p, q, r, U, V, W, P, u, v, w, target ) {\n\n\tconst uspan = findSpan( p, u, U );\n\tconst vspan = findSpan( q, v, V );\n\tconst wspan = findSpan( r, w, W );\n\tconst Nu = calcBasisFunctions( uspan, u, p, U );\n\tconst Nv = calcBasisFunctions( vspan, v, q, V );\n\tconst Nw = calcBasisFunctions( wspan, w, r, W );\n\tconst temp = [];\n\n\tfor ( let m = 0; m <= r; ++ m ) {\n\n\t\ttemp[ m ] = [];\n\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\ttemp[ m ][ l ] = new Vector4( 0, 0, 0, 0 );\n\t\t\tfor ( let k = 0; k <= p; ++ k ) {\n\n\t\t\t\tconst point = P[ uspan - p + k ][ vspan - q + l ][ wspan - r + m ].clone();\n\t\t\t\tconst w = point.w;\n\t\t\t\tpoint.x *= w;\n\t\t\t\tpoint.y *= w;\n\t\t\t\tpoint.z *= w;\n\t\t\t\ttemp[ m ][ l ].add( point.multiplyScalar( Nu[ k ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst Sw = new Vector4( 0, 0, 0, 0 );\n\tfor ( let m = 0; m <= r; ++ m ) {\n\n\t\tfor ( let l = 0; l <= q; ++ l ) {\n\n\t\t\tSw.add( temp[ m ][ l ].multiplyScalar( Nw[ m ] ).multiplyScalar( Nv[ l ] ) );\n\n\t\t}\n\n\t}\n\n\tSw.divideScalar( Sw.w );\n\ttarget.set( Sw.x, Sw.y, Sw.z );\n\n}\n\nexport {\n\tfindSpan,\n\tcalcBasisFunctions,\n\tcalcBSplinePoint,\n\tcalcBasisFunctionDerivatives,\n\tcalcBSplineDerivatives,\n\tcalcKoverI,\n\tcalcRationalCurveDerivatives,\n\tcalcNURBSDerivatives,\n\tcalcSurfacePoint,\n\tcalcVolumePoint,\n};\n","import {\n\tCurve,\n\tVector3,\n\tVector4\n} from 'three';\nimport * as NURBSUtils from '../curves/NURBSUtils.js';\n\n/**\n * This class represents a NURBS curve.\n *\n * Implementation is based on `(x, y [, z=0 [, w=1]])` control points with `w=weight`.\n *\n * @augments Curve\n * @three_import import { NURBSCurve } from 'three/addons/curves/NURBSCurve.js';\n */\nclass NURBSCurve extends Curve {\n\n\t/**\n\t * Constructs a new NURBS curve.\n\t *\n\t * @param {number} degree - The NURBS degree.\n\t * @param {Array<number>} knots - The knots as a flat array of numbers.\n\t * @param {Array<Vector2|Vector3|Vector4>} controlPoints - An array holding control points.\n\t * @param {number} [startKnot] - Index of the start knot into the `knots` array.\n\t * @param {number} [endKnot] - Index of the end knot into the `knots` array.\n\t */\n\tconstructor( degree, knots, controlPoints, startKnot, endKnot ) {\n\n\t\tsuper();\n\n\t\tconst knotsLength = knots ? knots.length - 1 : 0;\n\t\tconst pointsLength = controlPoints ? controlPoints.length : 0;\n\n\t\t/**\n\t\t * The NURBS degree.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.degree = degree;\n\n\t\t/**\n\t\t * The knots as a flat array of numbers.\n\t\t *\n\t\t * @type {Array<number>}\n\t\t */\n\t\tthis.knots = knots;\n\n\t\t/**\n\t\t * An array of control points.\n\t\t *\n\t\t * @type {Array<Vector4>}\n\t\t */\n\t\tthis.controlPoints = [];\n\n\t\t/**\n\t\t * Index of the start knot into the `knots` array.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.startKnot = startKnot || 0;\n\n\t\t/**\n\t\t * Index of the end knot into the `knots` array.\n\t\t *\n\t\t * @type {number}\n\t\t */\n\t\tthis.endKnot = endKnot || knotsLength;\n\n\t\tfor ( let i = 0; i < pointsLength; ++ i ) {\n\n\t\t\t// ensure Vector4 for control points\n\t\t\tconst point = controlPoints[ i ];\n\t\t\tthis.controlPoints[ i ] = new Vector4( point.x, point.y, point.z, point.w );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * This method returns a vector in 3D space for the given interpolation factor.\n\t *\n\t * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.\n\t * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector3} The position on the curve.\n\t */\n\tgetPoint( t, optionalTarget = new Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst u = this.knots[ this.startKnot ] + t * ( this.knots[ this.endKnot ] - this.knots[ this.startKnot ] ); // linear mapping t->u\n\n\t\t// following results in (wx, wy, wz, w) homogeneous point\n\t\tconst hpoint = NURBSUtils.calcBSplinePoint( this.degree, this.knots, this.controlPoints, u );\n\n\t\tif ( hpoint.w !== 1.0 ) {\n\n\t\t\t// project to 3D space: (wx, wy, wz, w) -> (x, y, z, 1)\n\t\t\thpoint.divideScalar( hpoint.w );\n\n\t\t}\n\n\t\treturn point.set( hpoint.x, hpoint.y, hpoint.z );\n\n\t}\n\n\t/**\n\t * Returns a unit vector tangent for the given interpolation factor.\n\t *\n\t * @param {number} t - The interpolation factor.\n\t * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.\n\t * @return {Vector3} The tangent vector.\n\t */\n\tgetTangent( t, optionalTarget = new Vector3() ) {\n\n\t\tconst tangent = optionalTarget;\n\n\t\tconst u = this.knots[ 0 ] + t * ( this.knots[ this.knots.length - 1 ] - this.knots[ 0 ] );\n\t\tconst ders = NURBSUtils.calcNURBSDerivatives( this.degree, this.knots, this.controlPoints, u, 1 );\n\t\ttangent.copy( ders[ 1 ] ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.degree = this.degree;\n\t\tdata.knots = [ ...this.knots ];\n\t\tdata.controlPoints = this.controlPoints.map( p => p.toArray() );\n\t\tdata.startKnot = this.startKnot;\n\t\tdata.endKnot = this.endKnot;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.degree = json.degree;\n\t\tthis.knots = [ ...json.knots ];\n\t\tthis.controlPoints = json.controlPoints.map( p => new Vector4( p[ 0 ], p[ 1 ], p[ 2 ], p[ 3 ] ) );\n\t\tthis.startKnot = json.startKnot;\n\t\tthis.endKnot = json.endKnot;\n\n\t\treturn this;\n\n\t}\n\n}\n\nexport { NURBSCurve };\n","import {\n\tAmbientLight,\n\tAnimationClip,\n\tBone,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tEquirectangularReflectionMapping,\n\tEuler,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLine,\n\tLineBasicMaterial,\n\tLoader,\n\tLoaderUtils,\n\tMathUtils,\n\tMatrix3,\n\tMatrix4,\n\tMesh,\n\tMeshLambertMaterial,\n\tMeshPhongMaterial,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tPerspectiveCamera,\n\tPointLight,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSRGBColorSpace,\n\tShapeUtils,\n\tSkeleton,\n\tSkinnedMesh,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tUint16BufferAttribute,\n\tVector2,\n\tVector3,\n\tVector4,\n\tVectorKeyframeTrack\n} from 'three';\n\nimport * as fflate from '../libs/fflate.module.js';\nimport { NURBSCurve } from '../curves/NURBSCurve.js';\n\nlet fbxTree;\nlet connections;\nlet sceneGraph;\n\n/**\n * A loader for the FBX format.\n *\n * Requires FBX file to be >= 7.0 and in ASCII or >= 6400 in Binary format.\n * Versions lower than this may load but will probably have errors.\n *\n * Needs Support:\n * - Morph normals / blend shape normals\n *\n * FBX format references:\n * - [C++ SDK reference]{@link https://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_index_html}\n *\n * Binary format specification:\n * - [FBX binary file format specification]{@link https://code.blender.org/2013/08/fbx-binary-file-format-specification/}\n *\n * ```js\n * const loader = new FBXLoader();\n * const object = await loader.loadAsync( 'models/fbx/stanford-bunny.fbx' );\n * scene.add( object );\n * ```\n *\n * @augments Loader\n * @three_import import { FBXLoader } from 'three/addons/loaders/FBXLoader.js';\n */\nclass FBXLoader extends Loader {\n\n\t/**\n\t * Constructs a new FBX loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded FBX asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Group)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( scope.path === '' ) ? LoaderUtils.extractUrlBase( url ) : scope.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( buffer, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given FBX data and returns the resulting group.\n\t *\n\t * @param {ArrayBuffer} FBXBuffer - The raw FBX data as an array buffer.\n\t * @param {string} path - The URL base path.\n\t * @return {Group} An object representing the parsed asset.\n\t */\n\tparse( FBXBuffer, path ) {\n\n\t\tif ( isFbxFormatBinary( FBXBuffer ) ) {\n\n\t\t\tfbxTree = new BinaryParser().parse( FBXBuffer );\n\n\t\t} else {\n\n\t\t\tconst FBXText = convertArrayBufferToString( FBXBuffer );\n\n\t\t\tif ( ! isFbxFormatASCII( FBXText ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown format.' );\n\n\t\t\t}\n\n\t\t\tif ( getFbxVersion( FBXText ) < 7000 ) {\n\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + getFbxVersion( FBXText ) );\n\n\t\t\t}\n\n\t\t\tfbxTree = new TextParser().parse( FBXText );\n\n\t\t}\n\n\t\t// console.log( fbxTree );\n\n\t\tconst textureLoader = new TextureLoader( this.manager ).setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );\n\n\t\treturn new FBXTreeParser( textureLoader, this.manager ).parse( fbxTree );\n\n\t}\n\n}\n\n// Parse the FBXTree object returned by the BinaryParser or TextParser and return a Group\nclass FBXTreeParser {\n\n\tconstructor( textureLoader, manager ) {\n\n\t\tthis.textureLoader = textureLoader;\n\t\tthis.manager = manager;\n\n\t}\n\n\tparse() {\n\n\t\tconnections = this.parseConnections();\n\n\t\tconst images = this.parseImages();\n\t\tconst textures = this.parseTextures( images );\n\t\tconst materials = this.parseMaterials( textures );\n\t\tconst deformers = this.parseDeformers();\n\t\tconst geometryMap = new GeometryParser().parse( deformers );\n\n\t\tthis.parseScene( deformers, geometryMap, materials );\n\n\t\treturn sceneGraph;\n\n\t}\n\n\t// Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )\n\t// and details the connection type\n\tparseConnections() {\n\n\t\tconst connectionMap = new Map();\n\n\t\tif ( 'Connections' in fbxTree ) {\n\n\t\t\tconst rawConnections = fbxTree.Connections.connections;\n\n\t\t\trawConnections.forEach( function ( rawConnection ) {\n\n\t\t\t\tconst fromID = rawConnection[ 0 ];\n\t\t\t\tconst toID = rawConnection[ 1 ];\n\t\t\t\tconst relationship = rawConnection[ 2 ];\n\n\t\t\t\tif ( ! connectionMap.has( fromID ) ) {\n\n\t\t\t\t\tconnectionMap.set( fromID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst parentRelationship = { ID: toID, relationship: relationship };\n\t\t\t\tconnectionMap.get( fromID ).parents.push( parentRelationship );\n\n\t\t\t\tif ( ! connectionMap.has( toID ) ) {\n\n\t\t\t\t\tconnectionMap.set( toID, {\n\t\t\t\t\t\tparents: [],\n\t\t\t\t\t\tchildren: []\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t\tconst childRelationship = { ID: fromID, relationship: relationship };\n\t\t\t\tconnectionMap.get( toID ).children.push( childRelationship );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn connectionMap;\n\n\t}\n\n\t// Parse FBXTree.Objects.Video for embedded image data\n\t// These images are connected to textures in FBXTree.Objects.Textures\n\t// via FBXTree.Connections.\n\tparseImages() {\n\n\t\tconst images = {};\n\t\tconst blobs = {};\n\n\t\tif ( 'Video' in fbxTree.Objects ) {\n\n\t\t\tconst videoNodes = fbxTree.Objects.Video;\n\n\t\t\tfor ( const nodeID in videoNodes ) {\n\n\t\t\t\tconst videoNode = videoNodes[ nodeID ];\n\n\t\t\t\tconst id = parseInt( nodeID );\n\n\t\t\t\timages[ id ] = videoNode.RelativeFilename || videoNode.Filename;\n\n\t\t\t\t// raw image data is in videoNode.Content\n\t\t\t\tif ( 'Content' in videoNode ) {\n\n\t\t\t\t\tconst arrayBufferContent = ( videoNode.Content instanceof ArrayBuffer ) && ( videoNode.Content.byteLength > 0 );\n\t\t\t\t\tconst base64Content = ( typeof videoNode.Content === 'string' ) && ( videoNode.Content !== '' );\n\n\t\t\t\t\tif ( arrayBufferContent || base64Content ) {\n\n\t\t\t\t\t\tconst image = this.parseImage( videoNodes[ nodeID ] );\n\n\t\t\t\t\t\tblobs[ videoNode.RelativeFilename || videoNode.Filename ] = image;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( const id in images ) {\n\n\t\t\tconst filename = images[ id ];\n\n\t\t\tif ( blobs[ filename ] !== undefined ) images[ id ] = blobs[ filename ];\n\t\t\telse images[ id ] = images[ id ].split( '\\\\' ).pop();\n\n\t\t}\n\n\t\treturn images;\n\n\t}\n\n\t// Parse embedded image data in FBXTree.Video.Content\n\tparseImage( videoNode ) {\n\n\t\tconst content = videoNode.Content;\n\t\tconst fileName = videoNode.RelativeFilename || videoNode.Filename;\n\t\tconst extension = fileName.slice( fileName.lastIndexOf( '.' ) + 1 ).toLowerCase();\n\n\t\tlet type;\n\n\t\tswitch ( extension ) {\n\n\t\t\tcase 'bmp':\n\n\t\t\t\ttype = 'image/bmp';\n\t\t\t\tbreak;\n\n\t\t\tcase 'jpg':\n\t\t\tcase 'jpeg':\n\n\t\t\t\ttype = 'image/jpeg';\n\t\t\t\tbreak;\n\n\t\t\tcase 'png':\n\n\t\t\t\ttype = 'image/png';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tif':\n\n\t\t\t\ttype = 'image/tiff';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tga':\n\n\t\t\t\tif ( this.manager.getHandler( '.tga' ) === null ) {\n\n\t\t\t\t\tconsole.warn( 'FBXLoader: TGA loader not found, skipping ', fileName );\n\n\t\t\t\t}\n\n\t\t\t\ttype = 'image/tga';\n\t\t\t\tbreak;\n\n\t\t\tcase 'webp':\n\n\t\t\t\ttype = 'image/webp';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tconsole.warn( 'FBXLoader: Image type \"' + extension + '\" is not supported.' );\n\t\t\t\treturn;\n\n\t\t}\n\n\t\tif ( typeof content === 'string' ) { // ASCII format\n\n\t\t\treturn 'data:' + type + ';base64,' + content;\n\n\t\t} else { // Binary Format\n\n\t\t\tconst array = new Uint8Array( content );\n\t\t\treturn window.URL.createObjectURL( new Blob( [ array ], { type: type } ) );\n\n\t\t}\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Texture\n\t// These contain details such as UV scaling, cropping, rotation etc and are connected\n\t// to images in FBXTree.Objects.Video\n\tparseTextures( images ) {\n\n\t\tconst textureMap = new Map();\n\n\t\tif ( 'Texture' in fbxTree.Objects ) {\n\n\t\t\tconst textureNodes = fbxTree.Objects.Texture;\n\t\t\tfor ( const nodeID in textureNodes ) {\n\n\t\t\t\tconst texture = this.parseTexture( textureNodes[ nodeID ], images );\n\t\t\t\ttextureMap.set( parseInt( nodeID ), texture );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textureMap;\n\n\t}\n\n\t// Parse individual node in FBXTree.Objects.Texture\n\tparseTexture( textureNode, images ) {\n\n\t\tconst texture = this.loadTexture( textureNode, images );\n\n\t\ttexture.ID = textureNode.id;\n\n\t\ttexture.name = textureNode.attrName;\n\n\t\tconst wrapModeU = textureNode.WrapModeU;\n\t\tconst wrapModeV = textureNode.WrapModeV;\n\n\t\tconst valueU = wrapModeU !== undefined ? wrapModeU.value : 0;\n\t\tconst valueV = wrapModeV !== undefined ? wrapModeV.value : 0;\n\n\t\t// http://download.autodesk.com/us/fbx/SDKdocs/FBX_SDK_Help/files/fbxsdkref/class_k_fbx_texture.html#889640e63e2e681259ea81061b85143a\n\t\t// 0: repeat(default), 1: clamp\n\n\t\ttexture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\t\ttexture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n\n\t\tif ( 'Scaling' in textureNode ) {\n\n\t\t\tconst values = textureNode.Scaling.value;\n\n\t\t\ttexture.repeat.x = values[ 0 ];\n\t\t\ttexture.repeat.y = values[ 1 ];\n\n\t\t}\n\n\t\tif ( 'Translation' in textureNode ) {\n\n\t\t\tconst values = textureNode.Translation.value;\n\n\t\t\ttexture.offset.x = values[ 0 ];\n\t\t\ttexture.offset.y = values[ 1 ];\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n\t// load a texture specified as a blob or data URI, or via an external URL using TextureLoader\n\tloadTexture( textureNode, images ) {\n\n\t\tconst extension = textureNode.FileName.split( '.' ).pop().toLowerCase();\n\n\t\tlet loader = this.manager.getHandler( `.${extension}` );\n\t\tif ( loader === null ) loader = this.textureLoader;\n\n\t\tconst loaderPath = loader.path;\n\n\t\tif ( ! loaderPath ) {\n\n\t\t\tloader.setPath( this.textureLoader.path );\n\n\t\t}\n\n\t\tconst children = connections.get( textureNode.id ).children;\n\n\t\tlet fileName;\n\n\t\tif ( children !== undefined && children.length > 0 && images[ children[ 0 ].ID ] !== undefined ) {\n\n\t\t\tfileName = images[ children[ 0 ].ID ];\n\n\t\t\tif ( fileName.indexOf( 'blob:' ) === 0 || fileName.indexOf( 'data:' ) === 0 ) {\n\n\t\t\t\tloader.setPath( undefined );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( fileName === undefined ) {\n\n\t\t\tconsole.warn( 'FBXLoader: Undefined filename, creating placeholder texture.' );\n\t\t\treturn new Texture();\n\n\t\t}\n\n\t\tconst texture = loader.load( fileName );\n\n\t\t// revert to initial path\n\t\tloader.setPath( loaderPath );\n\n\t\treturn texture;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Material\n\tparseMaterials( textureMap ) {\n\n\t\tconst materialMap = new Map();\n\n\t\tif ( 'Material' in fbxTree.Objects ) {\n\n\t\t\tconst materialNodes = fbxTree.Objects.Material;\n\n\t\t\tfor ( const nodeID in materialNodes ) {\n\n\t\t\t\tconst material = this.parseMaterial( materialNodes[ nodeID ], textureMap );\n\n\t\t\t\tif ( material !== null ) materialMap.set( parseInt( nodeID ), material );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materialMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Material\n\t// Materials are connected to texture maps in FBXTree.Objects.Textures\n\t// FBX format currently only supports Lambert and Phong shading models\n\tparseMaterial( materialNode, textureMap ) {\n\n\t\tconst ID = materialNode.id;\n\t\tconst name = materialNode.attrName;\n\t\tlet type = materialNode.ShadingModel;\n\n\t\t// Case where FBX wraps shading model in property object.\n\t\tif ( typeof type === 'object' ) {\n\n\t\t\ttype = type.value;\n\n\t\t}\n\n\t\t// Ignore unused materials which don't have any connections.\n\t\tif ( ! connections.has( ID ) ) return null;\n\n\t\tconst parameters = this.parseParameters( materialNode, textureMap, ID );\n\n\t\tlet material;\n\n\t\tswitch ( type.toLowerCase() ) {\n\n\t\t\tcase 'phong':\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\t\t\tcase 'lambert':\n\t\t\t\tmaterial = new MeshLambertMaterial();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.', type );\n\t\t\t\tmaterial = new MeshPhongMaterial();\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tmaterial.setValues( parameters );\n\t\tmaterial.name = name;\n\n\t\treturn material;\n\n\t}\n\n\t// Parse FBX material and return parameters suitable for a three.js material\n\t// Also parse the texture map and return any textures associated with the material\n\tparseParameters( materialNode, textureMap, ID ) {\n\n\t\tconst parameters = {};\n\n\t\tif ( materialNode.BumpFactor ) {\n\n\t\t\tparameters.bumpScale = materialNode.BumpFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Diffuse ) {\n\n\t\t\tparameters.color = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Diffuse.value ), SRGBColorSpace );\n\n\t\t} else if ( materialNode.DiffuseColor && ( materialNode.DiffuseColor.type === 'Color' || materialNode.DiffuseColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports diffuse here instead of in materialNode.Diffuse\n\t\t\tparameters.color = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.DiffuseColor.value ), SRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialNode.DisplacementFactor ) {\n\n\t\t\tparameters.displacementScale = materialNode.DisplacementFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Emissive ) {\n\n\t\t\tparameters.emissive = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Emissive.value ), SRGBColorSpace );\n\n\t\t} else if ( materialNode.EmissiveColor && ( materialNode.EmissiveColor.type === 'Color' || materialNode.EmissiveColor.type === 'ColorRGB' ) ) {\n\n\t\t\t// The blender exporter exports emissive color here instead of in materialNode.Emissive\n\t\t\tparameters.emissive = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.EmissiveColor.value ), SRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialNode.EmissiveFactor ) {\n\n\t\t\tparameters.emissiveIntensity = parseFloat( materialNode.EmissiveFactor.value );\n\n\t\t}\n\n\t\t// the transparency handling is implemented based on Blender/Unity's approach: https://github.com/sobotka/blender-addons/blob/7d80f2f97161fc8e353a657b179b9aa1f8e5280b/io_scene_fbx/import_fbx.py#L1444-L1459\n\n\t\tparameters.opacity = 1 - ( materialNode.TransparencyFactor ? parseFloat( materialNode.TransparencyFactor.value ) : 0 );\n\n\t\tif ( parameters.opacity === 1 || parameters.opacity === 0 ) {\n\n\t\t\tparameters.opacity = ( materialNode.Opacity ? parseFloat( materialNode.Opacity.value ) : null );\n\n\t\t\tif ( parameters.opacity === null ) {\n\n\t\t\t\tparameters.opacity = 1 - ( materialNode.TransparentColor ? parseFloat( materialNode.TransparentColor.value[ 0 ] ) : 0 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( parameters.opacity < 1.0 ) {\n\n\t\t\tparameters.transparent = true;\n\n\t\t}\n\n\t\tif ( materialNode.ReflectionFactor ) {\n\n\t\t\tparameters.reflectivity = materialNode.ReflectionFactor.value;\n\n\t\t}\n\n\t\tif ( materialNode.Shininess ) {\n\n\t\t\tparameters.shininess = materialNode.Shininess.value;\n\n\t\t}\n\n\t\tif ( materialNode.Specular ) {\n\n\t\t\tparameters.specular = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.Specular.value ), SRGBColorSpace );\n\n\t\t} else if ( materialNode.SpecularColor && materialNode.SpecularColor.type === 'Color' ) {\n\n\t\t\t// The blender exporter exports specular color here instead of in materialNode.Specular\n\t\t\tparameters.specular = ColorManagement.colorSpaceToWorking( new Color().fromArray( materialNode.SpecularColor.value ), SRGBColorSpace );\n\n\t\t}\n\n\t\tconst scope = this;\n\t\tconnections.get( ID ).children.forEach( function ( child ) {\n\n\t\t\tconst type = child.relationship;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'Bump':\n\t\t\t\t\tparameters.bumpMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Maya|TEX_ao_map':\n\t\t\t\t\tparameters.aoMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DiffuseColor':\n\t\t\t\tcase 'Maya|TEX_color_map':\n\t\t\t\t\tparameters.map = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.map !== undefined ) {\n\n\t\t\t\t\t\tparameters.map.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DisplacementColor':\n\t\t\t\t\tparameters.displacementMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'EmissiveColor':\n\t\t\t\t\tparameters.emissiveMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.emissiveMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.emissiveMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'NormalMap':\n\t\t\t\tcase 'Maya|TEX_normal_map':\n\t\t\t\t\tparameters.normalMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ReflectionColor':\n\t\t\t\t\tparameters.envMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.envMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.envMap.mapping = EquirectangularReflectionMapping;\n\t\t\t\t\t\tparameters.envMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpecularColor':\n\t\t\t\t\tparameters.specularMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tif ( parameters.specularMap !== undefined ) {\n\n\t\t\t\t\t\tparameters.specularMap.colorSpace = SRGBColorSpace;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'TransparentColor':\n\t\t\t\tcase 'TransparencyFactor':\n\t\t\t\t\tparameters.alphaMap = scope.getTexture( textureMap, child.ID );\n\t\t\t\t\tparameters.transparent = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'AmbientColor':\n\t\t\t\tcase 'ShininessExponent': // AKA glossiness map\n\t\t\t\tcase 'SpecularFactor': // AKA specularLevel\n\t\t\t\tcase 'VectorDisplacementColor': // NOTE: Seems to be a copy of DisplacementColor\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: %s map is not supported in three.js, skipping texture.', type );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn parameters;\n\n\t}\n\n\t// get a texture from the textureMap for use by a material.\n\tgetTexture( textureMap, id ) {\n\n\t\t// if the texture is a layered texture, just use the first layer and issue a warning\n\t\tif ( 'LayeredTexture' in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.' );\n\t\t\tid = connections.get( id ).children[ 0 ].ID;\n\n\t\t}\n\n\t\treturn textureMap.get( id );\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Deformer\n\t// Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here\n\t// Generates map of Skeleton-like objects for use later when generating and binding skeletons.\n\tparseDeformers() {\n\n\t\tconst skeletons = {};\n\t\tconst morphTargets = {};\n\n\t\tif ( 'Deformer' in fbxTree.Objects ) {\n\n\t\t\tconst DeformerNodes = fbxTree.Objects.Deformer;\n\n\t\t\tfor ( const nodeID in DeformerNodes ) {\n\n\t\t\t\tconst deformerNode = DeformerNodes[ nodeID ];\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\n\t\t\t\tif ( deformerNode.attrType === 'Skin' ) {\n\n\t\t\t\t\tconst skeleton = this.parseSkeleton( relationships, DeformerNodes );\n\t\t\t\t\tskeleton.ID = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: skeleton attached to more than one geometry is not supported.' );\n\t\t\t\t\tskeleton.geometryID = relationships.parents[ 0 ].ID;\n\n\t\t\t\t\tskeletons[ nodeID ] = skeleton;\n\n\t\t\t\t} else if ( deformerNode.attrType === 'BlendShape' ) {\n\n\t\t\t\t\tconst morphTarget = {\n\t\t\t\t\t\tid: nodeID,\n\t\t\t\t\t};\n\n\t\t\t\t\tmorphTarget.rawTargets = this.parseMorphTargets( relationships, DeformerNodes );\n\t\t\t\t\tmorphTarget.id = nodeID;\n\n\t\t\t\t\tif ( relationships.parents.length > 1 ) console.warn( 'THREE.FBXLoader: morph target attached to more than one geometry is not supported.' );\n\n\t\t\t\t\tmorphTargets[ nodeID ] = morphTarget;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tskeletons: skeletons,\n\t\t\tmorphTargets: morphTargets,\n\n\t\t};\n\n\t}\n\n\t// Parse single nodes in FBXTree.Objects.Deformer\n\t// The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'\n\t// Each skin node represents a skeleton and each cluster node represents a bone\n\tparseSkeleton( relationships, deformerNodes ) {\n\n\t\tconst rawBones = [];\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst boneNode = deformerNodes[ child.ID ];\n\n\t\t\tif ( boneNode.attrType !== 'Cluster' ) return;\n\n\t\t\tconst rawBone = {\n\n\t\t\t\tID: child.ID,\n\t\t\t\tindices: [],\n\t\t\t\tweights: [],\n\t\t\t\ttransformLink: new Matrix4().fromArray( boneNode.TransformLink.a ),\n\t\t\t\t// transform: new Matrix4().fromArray( boneNode.Transform.a ),\n\t\t\t\t// linkMode: boneNode.Mode,\n\n\t\t\t};\n\n\t\t\tif ( 'Indexes' in boneNode ) {\n\n\t\t\t\trawBone.indices = boneNode.Indexes.a;\n\t\t\t\trawBone.weights = boneNode.Weights.a;\n\n\t\t\t}\n\n\t\t\trawBones.push( rawBone );\n\n\t\t} );\n\n\t\treturn {\n\n\t\t\trawBones: rawBones,\n\t\t\tbones: []\n\n\t\t};\n\n\t}\n\n\t// The top level morph deformer node has type \"BlendShape\" and sub nodes have type \"BlendShapeChannel\"\n\tparseMorphTargets( relationships, deformerNodes ) {\n\n\t\tconst rawMorphTargets = [];\n\n\t\tfor ( let i = 0; i < relationships.children.length; i ++ ) {\n\n\t\t\tconst child = relationships.children[ i ];\n\n\t\t\tconst morphTargetNode = deformerNodes[ child.ID ];\n\n\t\t\tconst rawMorphTarget = {\n\n\t\t\t\tname: morphTargetNode.attrName,\n\t\t\t\tinitialWeight: morphTargetNode.DeformPercent,\n\t\t\t\tid: morphTargetNode.id,\n\t\t\t\tfullWeights: morphTargetNode.FullWeights.a\n\n\t\t\t};\n\n\t\t\tif ( morphTargetNode.attrType !== 'BlendShapeChannel' ) return;\n\n\t\t\trawMorphTarget.geoID = connections.get( parseInt( child.ID ) ).children.filter( function ( child ) {\n\n\t\t\t\treturn child.relationship === undefined;\n\n\t\t\t} )[ 0 ].ID;\n\n\t\t\trawMorphTargets.push( rawMorphTarget );\n\n\t\t}\n\n\t\treturn rawMorphTargets;\n\n\t}\n\n\t// create the main Group() to be returned by the loader\n\tparseScene( deformers, geometryMap, materialMap ) {\n\n\t\tsceneGraph = new Group();\n\n\t\tconst modelMap = this.parseModels( deformers.skeletons, geometryMap, materialMap );\n\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tconst scope = this;\n\t\tmodelMap.forEach( function ( model ) {\n\n\t\t\tconst modelNode = modelNodes[ model.ID ];\n\t\t\tscope.setLookAtProperties( model, modelNode );\n\n\t\t\tconst parentConnections = connections.get( model.ID ).parents;\n\n\t\t\tparentConnections.forEach( function ( connection ) {\n\n\t\t\t\tconst parent = modelMap.get( connection.ID );\n\t\t\t\tif ( parent !== undefined ) parent.add( model );\n\n\t\t\t} );\n\n\t\t\tif ( model.parent === null ) {\n\n\t\t\t\tsceneGraph.add( model );\n\n\t\t\t}\n\n\n\t\t} );\n\n\t\tthis.bindSkeleton( deformers.skeletons, geometryMap, modelMap );\n\n\t\tthis.addGlobalSceneSettings();\n\n\t\tsceneGraph.traverse( function ( node ) {\n\n\t\t\tif ( node.userData.transformData ) {\n\n\t\t\t\tif ( node.parent ) {\n\n\t\t\t\t\tnode.userData.transformData.parentMatrix = node.parent.matrix;\n\t\t\t\t\tnode.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;\n\n\t\t\t\t}\n\n\t\t\t\tconst transform = generateTransform( node.userData.transformData );\n\n\t\t\t\tnode.applyMatrix4( transform );\n\t\t\t\tnode.updateWorldMatrix();\n\n\t\t\t}\n\n\t\t} );\n\n\t\tconst animations = new AnimationParser().parse();\n\n\t\t// if all the models where already combined in a single group, just return that\n\t\tif ( sceneGraph.children.length === 1 && sceneGraph.children[ 0 ].isGroup ) {\n\n\t\t\tsceneGraph.children[ 0 ].animations = animations;\n\t\t\tsceneGraph = sceneGraph.children[ 0 ];\n\n\t\t}\n\n\t\tsceneGraph.animations = animations;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.Model\n\tparseModels( skeletons, geometryMap, materialMap ) {\n\n\t\tconst modelMap = new Map();\n\t\tconst modelNodes = fbxTree.Objects.Model;\n\n\t\tfor ( const nodeID in modelNodes ) {\n\n\t\t\tconst id = parseInt( nodeID );\n\t\t\tconst node = modelNodes[ nodeID ];\n\t\t\tconst relationships = connections.get( id );\n\n\t\t\tlet model = this.buildSkeleton( relationships, skeletons, id, node.attrName );\n\n\t\t\tif ( ! model ) {\n\n\t\t\t\tswitch ( node.attrType ) {\n\n\t\t\t\t\tcase 'Camera':\n\t\t\t\t\t\tmodel = this.createCamera( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Light':\n\t\t\t\t\t\tmodel = this.createLight( relationships );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Mesh':\n\t\t\t\t\t\tmodel = this.createMesh( relationships, geometryMap, materialMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'NurbsCurve':\n\t\t\t\t\t\tmodel = this.createCurve( relationships, geometryMap );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'LimbNode':\n\t\t\t\t\tcase 'Root':\n\t\t\t\t\t\tmodel = new Bone();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'Null':\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmodel = new Group();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tmodel.name = node.attrName ? PropertyBinding.sanitizeNodeName( node.attrName ) : '';\n\t\t\t\tmodel.userData.originalName = node.attrName;\n\n\t\t\t\tmodel.ID = id;\n\n\t\t\t}\n\n\t\t\tthis.getTransformData( model, node );\n\t\t\tmodelMap.set( id, model );\n\n\t\t}\n\n\t\treturn modelMap;\n\n\t}\n\n\tbuildSkeleton( relationships, skeletons, id, name ) {\n\n\t\tlet bone = null;\n\n\t\trelationships.parents.forEach( function ( parent ) {\n\n\t\t\tfor ( const ID in skeletons ) {\n\n\t\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t\tif ( rawBone.ID === parent.ID ) {\n\n\t\t\t\t\t\tconst subBone = bone;\n\t\t\t\t\t\tbone = new Bone();\n\n\t\t\t\t\t\tbone.matrixWorld.copy( rawBone.transformLink );\n\n\t\t\t\t\t\t// set name and id here - otherwise in cases where \"subBone\" is created it will not have a name / id\n\n\t\t\t\t\t\tbone.name = name ? PropertyBinding.sanitizeNodeName( name ) : '';\n\t\t\t\t\t\tbone.userData.originalName = name;\n\t\t\t\t\t\tbone.ID = id;\n\n\t\t\t\t\t\tskeleton.bones[ i ] = bone;\n\n\t\t\t\t\t\t// In cases where a bone is shared between multiple meshes\n\t\t\t\t\t\t// duplicate the bone here and add it as a child of the first bone\n\t\t\t\t\t\tif ( subBone !== null ) {\n\n\t\t\t\t\t\t\tbone.add( subBone );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn bone;\n\n\t}\n\n\t// create a PerspectiveCamera or OrthographicCamera\n\tcreateCamera( relationships ) {\n\n\t\tlet model;\n\t\tlet cameraAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tcameraAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( cameraAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type = 0;\n\t\t\tif ( cameraAttribute.CameraProjectionType !== undefined && cameraAttribute.CameraProjectionType.value === 1 ) {\n\n\t\t\t\ttype = 1;\n\n\t\t\t}\n\n\t\t\tlet nearClippingPlane = 1;\n\t\t\tif ( cameraAttribute.NearPlane !== undefined ) {\n\n\t\t\t\tnearClippingPlane = cameraAttribute.NearPlane.value / 1000;\n\n\t\t\t}\n\n\t\t\tlet farClippingPlane = 1000;\n\t\t\tif ( cameraAttribute.FarPlane !== undefined ) {\n\n\t\t\t\tfarClippingPlane = cameraAttribute.FarPlane.value / 1000;\n\n\t\t\t}\n\n\n\t\t\tlet width = window.innerWidth;\n\t\t\tlet height = window.innerHeight;\n\n\t\t\tif ( cameraAttribute.AspectWidth !== undefined && cameraAttribute.AspectHeight !== undefined ) {\n\n\t\t\t\twidth = cameraAttribute.AspectWidth.value;\n\t\t\t\theight = cameraAttribute.AspectHeight.value;\n\n\t\t\t}\n\n\t\t\tconst aspect = width / height;\n\n\t\t\tlet fov = 45;\n\t\t\tif ( cameraAttribute.FieldOfView !== undefined ) {\n\n\t\t\t\tfov = cameraAttribute.FieldOfView.value;\n\n\t\t\t}\n\n\t\t\tconst focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Perspective\n\t\t\t\t\tmodel = new PerspectiveCamera( fov, aspect, nearClippingPlane, farClippingPlane );\n\t\t\t\t\tif ( focalLength !== null ) model.setFocalLength( focalLength );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Orthographic\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Orthographic cameras not supported yet.' );\n\t\t\t\t\tmodel = new Object3D();\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown camera type ' + type + '.' );\n\t\t\t\t\tmodel = new Object3D();\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\t// Create a DirectionalLight, PointLight or SpotLight\n\tcreateLight( relationships ) {\n\n\t\tlet model;\n\t\tlet lightAttribute;\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tconst attr = fbxTree.Objects.NodeAttribute[ child.ID ];\n\n\t\t\tif ( attr !== undefined ) {\n\n\t\t\t\tlightAttribute = attr;\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( lightAttribute === undefined ) {\n\n\t\t\tmodel = new Object3D();\n\n\t\t} else {\n\n\t\t\tlet type;\n\n\t\t\t// LightType can be undefined for Point lights\n\t\t\tif ( lightAttribute.LightType === undefined ) {\n\n\t\t\t\ttype = 0;\n\n\t\t\t} else {\n\n\t\t\t\ttype = lightAttribute.LightType.value;\n\n\t\t\t}\n\n\t\t\tlet color = 0xffffff;\n\n\t\t\tif ( lightAttribute.Color !== undefined ) {\n\n\t\t\t\tcolor = ColorManagement.colorSpaceToWorking( new Color().fromArray( lightAttribute.Color.value ), SRGBColorSpace );\n\n\t\t\t}\n\n\t\t\tlet intensity = ( lightAttribute.Intensity === undefined ) ? 1 : lightAttribute.Intensity.value / 100;\n\n\t\t\t// light disabled\n\t\t\tif ( lightAttribute.CastLightOnObject !== undefined && lightAttribute.CastLightOnObject.value === 0 ) {\n\n\t\t\t\tintensity = 0;\n\n\t\t\t}\n\n\t\t\tlet distance = 0;\n\t\t\tif ( lightAttribute.FarAttenuationEnd !== undefined ) {\n\n\t\t\t\tif ( lightAttribute.EnableFarAttenuation !== undefined && lightAttribute.EnableFarAttenuation.value === 0 ) {\n\n\t\t\t\t\tdistance = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tdistance = lightAttribute.FarAttenuationEnd.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// TODO: could this be calculated linearly from FarAttenuationStart to FarAttenuationEnd?\n\t\t\tconst decay = 1;\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 0: // Point\n\t\t\t\t\tmodel = new PointLight( color, intensity, distance, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1: // Directional\n\t\t\t\t\tmodel = new DirectionalLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2: // Spot\n\t\t\t\t\tlet angle = Math.PI / 3;\n\n\t\t\t\t\tif ( lightAttribute.InnerAngle !== undefined ) {\n\n\t\t\t\t\t\tangle = MathUtils.degToRad( lightAttribute.InnerAngle.value );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet penumbra = 0;\n\t\t\t\t\tif ( lightAttribute.OuterAngle !== undefined ) {\n\n\t\t\t\t\t\t// TODO: this is not correct - FBX calculates outer and inner angle in degrees\n\t\t\t\t\t\t// with OuterAngle > InnerAngle && OuterAngle <= Math.PI\n\t\t\t\t\t\t// while three.js uses a penumbra between (0, 1) to attenuate the inner angle\n\t\t\t\t\t\tpenumbra = MathUtils.degToRad( lightAttribute.OuterAngle.value );\n\t\t\t\t\t\tpenumbra = Math.max( penumbra, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel = new SpotLight( color, intensity, distance, angle, penumbra, decay );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Unknown light type ' + lightAttribute.LightType.value + ', defaulting to a PointLight.' );\n\t\t\t\t\tmodel = new PointLight( color, intensity );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( lightAttribute.CastShadows !== undefined && lightAttribute.CastShadows.value === 1 ) {\n\n\t\t\t\tmodel.castShadow = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateMesh( relationships, geometryMap, materialMap ) {\n\n\t\tlet model;\n\t\tlet geometry = null;\n\t\tlet material = null;\n\t\tconst materials = [];\n\n\t\t// get geometry and materials(s) from connections\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) {\n\n\t\t\t\tgeometry = geometryMap.get( child.ID );\n\n\t\t\t}\n\n\t\t\tif ( materialMap.has( child.ID ) ) {\n\n\t\t\t\tmaterials.push( materialMap.get( child.ID ) );\n\n\t\t\t}\n\n\t\t} );\n\n\t\tif ( materials.length > 1 ) {\n\n\t\t\tmaterial = materials;\n\n\t\t} else if ( materials.length > 0 ) {\n\n\t\t\tmaterial = materials[ 0 ];\n\n\t\t} else {\n\n\t\t\tmaterial = new MeshPhongMaterial( {\n\t\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\t\tcolor: 0xcccccc\n\t\t\t} );\n\t\t\tmaterials.push( material );\n\n\t\t}\n\n\t\tif ( 'color' in geometry.attributes ) {\n\n\t\t\tmaterials.forEach( function ( material ) {\n\n\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t} );\n\n\t\t}\n\n\t\t// Sanitization: If geometry has groups, then it must match the provided material array.\n\t\t// If not, we need to clean up the `group.materialIndex` properties inside the groups and point at a (new) default material.\n\t\t// This isn't well defined; Unity creates default material, while Blender implicitly uses the previous material in the list.\n\t\tif ( geometry.groups.length > 0 ) {\n\n\t\t\tlet needsDefaultMaterial = false;\n\n\t\t\tfor ( let i = 0, il = geometry.groups.length; i < il; i ++ ) {\n\n\t\t\t\tconst group = geometry.groups[ i ];\n\n\t\t\t\tif ( group.materialIndex < 0 || group.materialIndex >= materials.length ) {\n\n\t\t\t\t\tgroup.materialIndex = materials.length;\n\t\t\t\t\tneedsDefaultMaterial = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( needsDefaultMaterial ) {\n\n\t\t\t\tconst defaultMaterial = new MeshPhongMaterial();\n\t\t\t\tmaterials.push( defaultMaterial );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( geometry.FBX_Deformer ) {\n\n\t\t\tmodel = new SkinnedMesh( geometry, material );\n\t\t\tmodel.normalizeSkinWeights();\n\n\t\t} else {\n\n\t\t\tmodel = new Mesh( geometry, material );\n\n\t\t}\n\n\t\treturn model;\n\n\t}\n\n\tcreateCurve( relationships, geometryMap ) {\n\n\t\tconst geometry = relationships.children.reduce( function ( geo, child ) {\n\n\t\t\tif ( geometryMap.has( child.ID ) ) geo = geometryMap.get( child.ID );\n\n\t\t\treturn geo;\n\n\t\t}, null );\n\n\t\t// FBX does not list materials for Nurbs lines, so we'll just put our own in here.\n\t\tconst material = new LineBasicMaterial( {\n\t\t\tname: Loader.DEFAULT_MATERIAL_NAME,\n\t\t\tcolor: 0x3300ff,\n\t\t\tlinewidth: 1\n\t\t} );\n\t\treturn new Line( geometry, material );\n\n\t}\n\n\t// parse the model node for transform data\n\tgetTransformData( model, modelNode ) {\n\n\t\tconst transformData = {};\n\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\telse transformData.eulerOrder = getEulerOrder( 0 );\n\n\t\tif ( 'Lcl_Translation' in modelNode ) transformData.translation = modelNode.Lcl_Translation.value;\n\n\t\tif ( 'PreRotation' in modelNode ) transformData.preRotation = modelNode.PreRotation.value;\n\t\tif ( 'Lcl_Rotation' in modelNode ) transformData.rotation = modelNode.Lcl_Rotation.value;\n\t\tif ( 'PostRotation' in modelNode ) transformData.postRotation = modelNode.PostRotation.value;\n\n\t\tif ( 'Lcl_Scaling' in modelNode ) transformData.scale = modelNode.Lcl_Scaling.value;\n\n\t\tif ( 'ScalingOffset' in modelNode ) transformData.scalingOffset = modelNode.ScalingOffset.value;\n\t\tif ( 'ScalingPivot' in modelNode ) transformData.scalingPivot = modelNode.ScalingPivot.value;\n\n\t\tif ( 'RotationOffset' in modelNode ) transformData.rotationOffset = modelNode.RotationOffset.value;\n\t\tif ( 'RotationPivot' in modelNode ) transformData.rotationPivot = modelNode.RotationPivot.value;\n\n\t\tmodel.userData.transformData = transformData;\n\n\t}\n\n\tsetLookAtProperties( model, modelNode ) {\n\n\t\tif ( 'LookAtProperty' in modelNode ) {\n\n\t\t\tconst children = connections.get( model.ID ).children;\n\n\t\t\tchildren.forEach( function ( child ) {\n\n\t\t\t\tif ( child.relationship === 'LookAtProperty' ) {\n\n\t\t\t\t\tconst lookAtTarget = fbxTree.Objects.Model[ child.ID ];\n\n\t\t\t\t\tif ( 'Lcl_Translation' in lookAtTarget ) {\n\n\t\t\t\t\t\tconst pos = lookAtTarget.Lcl_Translation.value;\n\n\t\t\t\t\t\t// DirectionalLight, SpotLight\n\t\t\t\t\t\tif ( model.target !== undefined ) {\n\n\t\t\t\t\t\t\tmodel.target.position.fromArray( pos );\n\t\t\t\t\t\t\tsceneGraph.add( model.target );\n\n\t\t\t\t\t\t} else { // Cameras and other Object3Ds\n\n\t\t\t\t\t\t\tmodel.lookAt( new Vector3().fromArray( pos ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tbindSkeleton( skeletons, geometryMap, modelMap ) {\n\n\t\tconst bindMatrices = this.parsePoseNodes();\n\n\t\tfor ( const ID in skeletons ) {\n\n\t\t\tconst skeleton = skeletons[ ID ];\n\n\t\t\tconst parents = connections.get( parseInt( skeleton.ID ) ).parents;\n\n\t\t\tparents.forEach( function ( parent ) {\n\n\t\t\t\tif ( geometryMap.has( parent.ID ) ) {\n\n\t\t\t\t\tconst geoID = parent.ID;\n\t\t\t\t\tconst geoRelationships = connections.get( geoID );\n\n\t\t\t\t\tgeoRelationships.parents.forEach( function ( geoConnParent ) {\n\n\t\t\t\t\t\tif ( modelMap.has( geoConnParent.ID ) ) {\n\n\t\t\t\t\t\t\tconst model = modelMap.get( geoConnParent.ID );\n\n\t\t\t\t\t\t\tmodel.bind( new Skeleton( skeleton.bones ), bindMatrices[ geoConnParent.ID ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\tparsePoseNodes() {\n\n\t\tconst bindMatrices = {};\n\n\t\tif ( 'Pose' in fbxTree.Objects ) {\n\n\t\t\tconst BindPoseNode = fbxTree.Objects.Pose;\n\n\t\t\tfor ( const nodeID in BindPoseNode ) {\n\n\t\t\t\tif ( BindPoseNode[ nodeID ].attrType === 'BindPose' && BindPoseNode[ nodeID ].NbPoseNodes > 0 ) {\n\n\t\t\t\t\tconst poseNodes = BindPoseNode[ nodeID ].PoseNode;\n\n\t\t\t\t\tif ( Array.isArray( poseNodes ) ) {\n\n\t\t\t\t\t\tposeNodes.forEach( function ( poseNode ) {\n\n\t\t\t\t\t\t\tbindMatrices[ poseNode.Node ] = new Matrix4().fromArray( poseNode.Matrix.a );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbindMatrices[ poseNodes.Node ] = new Matrix4().fromArray( poseNodes.Matrix.a );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bindMatrices;\n\n\t}\n\n\taddGlobalSceneSettings() {\n\n\t\tif ( 'GlobalSettings' in fbxTree ) {\n\n\t\t\tif ( 'AmbientColor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\t// Parse ambient color - if it's not set to black (default), create an ambient light\n\n\t\t\t\tconst ambientColor = fbxTree.GlobalSettings.AmbientColor.value;\n\t\t\t\tconst r = ambientColor[ 0 ];\n\t\t\t\tconst g = ambientColor[ 1 ];\n\t\t\t\tconst b = ambientColor[ 2 ];\n\n\t\t\t\tif ( r !== 0 || g !== 0 || b !== 0 ) {\n\n\t\t\t\t\tconst color = new Color().setRGB( r, g, b, SRGBColorSpace );\n\t\t\t\t\tsceneGraph.add( new AmbientLight( color, 1 ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( 'UnitScaleFactor' in fbxTree.GlobalSettings ) {\n\n\t\t\t\tsceneGraph.userData.unitScaleFactor = fbxTree.GlobalSettings.UnitScaleFactor.value;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n// parse Geometry data from FBXTree and return map of BufferGeometries\nclass GeometryParser {\n\n\tconstructor() {\n\n\t\tthis.negativeMaterialIndices = false;\n\n\t}\n\n\t// Parse nodes in FBXTree.Objects.Geometry\n\tparse( deformers ) {\n\n\t\tconst geometryMap = new Map();\n\n\t\tif ( 'Geometry' in fbxTree.Objects ) {\n\n\t\t\tconst geoNodes = fbxTree.Objects.Geometry;\n\n\t\t\tfor ( const nodeID in geoNodes ) {\n\n\t\t\t\tconst relationships = connections.get( parseInt( nodeID ) );\n\t\t\t\tconst geo = this.parseGeometry( relationships, geoNodes[ nodeID ], deformers );\n\n\t\t\t\tgeometryMap.set( parseInt( nodeID ), geo );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// report warnings\n\n\t\tif ( this.negativeMaterialIndices === true ) {\n\n\t\t\tconsole.warn( 'THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected.' );\n\n\t\t}\n\n\t\treturn geometryMap;\n\n\t}\n\n\t// Parse single node in FBXTree.Objects.Geometry\n\tparseGeometry( relationships, geoNode, deformers ) {\n\n\t\tswitch ( geoNode.attrType ) {\n\n\t\t\tcase 'Mesh':\n\t\t\t\treturn this.parseMeshGeometry( relationships, geoNode, deformers );\n\t\t\t\tbreak;\n\n\t\t\tcase 'NurbsCurve':\n\t\t\t\treturn this.parseNurbsGeometry( geoNode );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t// Parse single node mesh geometry in FBXTree.Objects.Geometry\n\tparseMeshGeometry( relationships, geoNode, deformers ) {\n\n\t\tconst skeletons = deformers.skeletons;\n\t\tconst morphTargets = [];\n\n\t\tconst modelNodes = relationships.parents.map( function ( parent ) {\n\n\t\t\treturn fbxTree.Objects.Model[ parent.ID ];\n\n\t\t} );\n\n\t\t// don't create geometry if it is not associated with any models\n\t\tif ( modelNodes.length === 0 ) return;\n\n\t\tconst skeleton = relationships.children.reduce( function ( skeleton, child ) {\n\n\t\t\tif ( skeletons[ child.ID ] !== undefined ) skeleton = skeletons[ child.ID ];\n\n\t\t\treturn skeleton;\n\n\t\t}, null );\n\n\t\trelationships.children.forEach( function ( child ) {\n\n\t\t\tif ( deformers.morphTargets[ child.ID ] !== undefined ) {\n\n\t\t\t\tmorphTargets.push( deformers.morphTargets[ child.ID ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\t// Assume one model and get the preRotation from that\n\t\t// if there is more than one model associated with the geometry this may cause problems\n\t\tconst modelNode = modelNodes[ 0 ];\n\n\t\tconst transformData = {};\n\n\t\tif ( 'RotationOrder' in modelNode ) transformData.eulerOrder = getEulerOrder( modelNode.RotationOrder.value );\n\t\tif ( 'InheritType' in modelNode ) transformData.inheritType = parseInt( modelNode.InheritType.value );\n\n\t\tif ( 'GeometricTranslation' in modelNode ) transformData.translation = modelNode.GeometricTranslation.value;\n\t\tif ( 'GeometricRotation' in modelNode ) transformData.rotation = modelNode.GeometricRotation.value;\n\t\tif ( 'GeometricScaling' in modelNode ) transformData.scale = modelNode.GeometricScaling.value;\n\n\t\tconst transform = generateTransform( transformData );\n\n\t\treturn this.genGeometry( geoNode, skeleton, morphTargets, transform );\n\n\t}\n\n\t// Generate a BufferGeometry from a node in FBXTree.Objects.Geometry\n\tgenGeometry( geoNode, skeleton, morphTargets, preTransform ) {\n\n\t\tconst geo = new BufferGeometry();\n\t\tif ( geoNode.attrName ) geo.name = geoNode.attrName;\n\n\t\tconst geoInfo = this.parseGeoNode( geoNode, skeleton );\n\t\tconst buffers = this.genBuffers( geoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( buffers.vertex, 3 );\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tgeo.setAttribute( 'position', positionAttribute );\n\n\t\tif ( buffers.colors.length > 0 ) {\n\n\t\t\tgeo.setAttribute( 'color', new Float32BufferAttribute( buffers.colors, 3 ) );\n\n\t\t}\n\n\t\tif ( skeleton ) {\n\n\t\t\tgeo.setAttribute( 'skinIndex', new Uint16BufferAttribute( buffers.weightsIndices, 4 ) );\n\n\t\t\tgeo.setAttribute( 'skinWeight', new Float32BufferAttribute( buffers.vertexWeights, 4 ) );\n\n\t\t\t// used later to bind the skeleton to the model\n\t\t\tgeo.FBX_Deformer = skeleton;\n\n\t\t}\n\n\t\tif ( buffers.normal.length > 0 ) {\n\n\t\t\tconst normalMatrix = new Matrix3().getNormalMatrix( preTransform );\n\n\t\t\tconst normalAttribute = new Float32BufferAttribute( buffers.normal, 3 );\n\t\t\tnormalAttribute.applyNormalMatrix( normalMatrix );\n\n\t\t\tgeo.setAttribute( 'normal', normalAttribute );\n\n\t\t}\n\n\t\tbuffers.uvs.forEach( function ( uvBuffer, i ) {\n\n\t\t\tconst name = i === 0 ? 'uv' : `uv${ i }`;\n\n\t\t\tgeo.setAttribute( name, new Float32BufferAttribute( buffers.uvs[ i ], 2 ) );\n\n\t\t} );\n\n\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t// Convert the material indices of each vertex into rendering groups on the geometry.\n\t\t\tlet prevMaterialIndex = buffers.materialIndex[ 0 ];\n\t\t\tlet startIndex = 0;\n\n\t\t\tbuffers.materialIndex.forEach( function ( currentIndex, i ) {\n\n\t\t\t\tif ( currentIndex !== prevMaterialIndex ) {\n\n\t\t\t\t\tgeo.addGroup( startIndex, i - startIndex, prevMaterialIndex );\n\n\t\t\t\t\tprevMaterialIndex = currentIndex;\n\t\t\t\t\tstartIndex = i;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// the loop above doesn't add the last group, do that here.\n\t\t\tif ( geo.groups.length > 0 ) {\n\n\t\t\t\tconst lastGroup = geo.groups[ geo.groups.length - 1 ];\n\t\t\t\tconst lastIndex = lastGroup.start + lastGroup.count;\n\n\t\t\t\tif ( lastIndex !== buffers.materialIndex.length ) {\n\n\t\t\t\t\tgeo.addGroup( lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// case where there are multiple materials but the whole geometry is only\n\t\t\t// using one of them\n\t\t\tif ( geo.groups.length === 0 ) {\n\n\t\t\t\tgeo.addGroup( 0, buffers.materialIndex.length, buffers.materialIndex[ 0 ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.addMorphTargets( geo, geoNode, morphTargets, preTransform );\n\n\t\treturn geo;\n\n\t}\n\n\tparseGeoNode( geoNode, skeleton ) {\n\n\t\tconst geoInfo = {};\n\n\t\tgeoInfo.vertexPositions = ( geoNode.Vertices !== undefined ) ? geoNode.Vertices.a : [];\n\t\tgeoInfo.vertexIndices = ( geoNode.PolygonVertexIndex !== undefined ) ? geoNode.PolygonVertexIndex.a : [];\n\n\t\tif ( geoNode.LayerElementColor && geoNode.LayerElementColor.Color ) {\n\n\t\t\tgeoInfo.color = this.parseVertexColors( geoNode.LayerElementColor[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementMaterial ) {\n\n\t\t\tgeoInfo.material = this.parseMaterialIndices( geoNode.LayerElementMaterial[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementNormal ) {\n\n\t\t\tgeoInfo.normal = this.parseNormals( geoNode.LayerElementNormal[ 0 ] );\n\n\t\t}\n\n\t\tif ( geoNode.LayerElementUV ) {\n\n\t\t\tgeoInfo.uv = [];\n\n\t\t\tlet i = 0;\n\t\t\twhile ( geoNode.LayerElementUV[ i ] ) {\n\n\t\t\t\tif ( geoNode.LayerElementUV[ i ].UV ) {\n\n\t\t\t\t\tgeoInfo.uv.push( this.parseUVs( geoNode.LayerElementUV[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeoInfo.weightTable = {};\n\n\t\tif ( skeleton !== null ) {\n\n\t\t\tgeoInfo.skeleton = skeleton;\n\n\t\t\tskeleton.rawBones.forEach( function ( rawBone, i ) {\n\n\t\t\t\t// loop over the bone's vertex indices and weights\n\t\t\t\trawBone.indices.forEach( function ( index, j ) {\n\n\t\t\t\t\tif ( geoInfo.weightTable[ index ] === undefined ) geoInfo.weightTable[ index ] = [];\n\n\t\t\t\t\tgeoInfo.weightTable[ index ].push( {\n\n\t\t\t\t\t\tid: i,\n\t\t\t\t\t\tweight: rawBone.weights[ j ],\n\n\t\t\t\t\t} );\n\n\t\t\t\t} );\n\n\t\t\t} );\n\n\t\t}\n\n\t\treturn geoInfo;\n\n\t}\n\n\tgenBuffers( geoInfo ) {\n\n\t\tconst buffers = {\n\t\t\tvertex: [],\n\t\t\tnormal: [],\n\t\t\tcolors: [],\n\t\t\tuvs: [],\n\t\t\tmaterialIndex: [],\n\t\t\tvertexWeights: [],\n\t\t\tweightsIndices: [],\n\t\t};\n\n\t\tlet polygonIndex = 0;\n\t\tlet faceLength = 0;\n\t\tlet displayedWeightsWarning = false;\n\n\t\t// these will hold data for a single face\n\t\tlet facePositionIndexes = [];\n\t\tlet faceNormals = [];\n\t\tlet faceColors = [];\n\t\tlet faceUVs = [];\n\t\tlet faceWeights = [];\n\t\tlet faceWeightIndices = [];\n\n\t\tconst scope = this;\n\t\tgeoInfo.vertexIndices.forEach( function ( vertexIndex, polygonVertexIndex ) {\n\n\t\t\tlet materialIndex;\n\t\t\tlet endOfFace = false;\n\n\t\t\t// Face index and vertex index arrays are combined in a single array\n\t\t\t// A cube with quad faces looks like this:\n\t\t\t// PolygonVertexIndex: *24 {\n\t\t\t// a: 0, 1, 3, -3, 2, 3, 5, -5, 4, 5, 7, -7, 6, 7, 1, -1, 1, 7, 5, -4, 6, 0, 2, -5\n\t\t\t// }\n\t\t\t// Negative numbers mark the end of a face - first face here is 0, 1, 3, -3\n\t\t\t// to find index of last vertex bit shift the index: ^ - 1\n\t\t\tif ( vertexIndex < 0 ) {\n\n\t\t\t\tvertexIndex = vertexIndex ^ - 1; // equivalent to ( x * -1 ) - 1\n\t\t\t\tendOfFace = true;\n\n\t\t\t}\n\n\t\t\tlet weightIndices = [];\n\t\t\tlet weights = [];\n\n\t\t\tfacePositionIndexes.push( vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2 );\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color );\n\n\t\t\t\tfaceColors.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tif ( geoInfo.weightTable[ vertexIndex ] !== undefined ) {\n\n\t\t\t\t\tgeoInfo.weightTable[ vertexIndex ].forEach( function ( wt ) {\n\n\t\t\t\t\t\tweights.push( wt.weight );\n\t\t\t\t\t\tweightIndices.push( wt.id );\n\n\t\t\t\t\t} );\n\n\n\t\t\t\t}\n\n\t\t\t\tif ( weights.length > 4 ) {\n\n\t\t\t\t\tif ( ! displayedWeightsWarning ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.' );\n\t\t\t\t\t\tdisplayedWeightsWarning = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst wIndex = [ 0, 0, 0, 0 ];\n\t\t\t\t\tconst Weight = [ 0, 0, 0, 0 ];\n\n\t\t\t\t\tweights.forEach( function ( weight, weightIndex ) {\n\n\t\t\t\t\t\tlet currentWeight = weight;\n\t\t\t\t\t\tlet currentIndex = weightIndices[ weightIndex ];\n\n\t\t\t\t\t\tWeight.forEach( function ( comparedWeight, comparedWeightIndex, comparedWeightArray ) {\n\n\t\t\t\t\t\t\tif ( currentWeight > comparedWeight ) {\n\n\t\t\t\t\t\t\t\tcomparedWeightArray[ comparedWeightIndex ] = currentWeight;\n\t\t\t\t\t\t\t\tcurrentWeight = comparedWeight;\n\n\t\t\t\t\t\t\t\tconst tmp = wIndex[ comparedWeightIndex ];\n\t\t\t\t\t\t\t\twIndex[ comparedWeightIndex ] = currentIndex;\n\t\t\t\t\t\t\t\tcurrentIndex = tmp;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tweightIndices = wIndex;\n\t\t\t\t\tweights = Weight;\n\n\t\t\t\t}\n\n\t\t\t\t// if the weight array is shorter than 4 pad with 0s\n\t\t\t\twhile ( weights.length < 4 ) {\n\n\t\t\t\t\tweights.push( 0 );\n\t\t\t\t\tweightIndices.push( 0 );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( let i = 0; i < 4; ++ i ) {\n\n\t\t\t\t\tfaceWeights.push( weights[ i ] );\n\t\t\t\t\tfaceWeightIndices.push( weightIndices[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal );\n\n\t\t\t\tfaceNormals.push( data[ 0 ], data[ 1 ], data[ 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tmaterialIndex = getData( polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material )[ 0 ];\n\n\t\t\t\tif ( materialIndex < 0 ) {\n\n\t\t\t\t\tscope.negativeMaterialIndices = true;\n\t\t\t\t\tmaterialIndex = 0; // fallback\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, i ) {\n\n\t\t\t\t\tconst data = getData( polygonVertexIndex, polygonIndex, vertexIndex, uv );\n\n\t\t\t\t\tif ( faceUVs[ i ] === undefined ) {\n\n\t\t\t\t\t\tfaceUVs[ i ] = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceUVs[ i ].push( data[ 0 ] );\n\t\t\t\t\tfaceUVs[ i ].push( data[ 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfaceLength ++;\n\n\t\t\tif ( endOfFace ) {\n\n\t\t\t\tscope.genFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength );\n\n\t\t\t\tpolygonIndex ++;\n\t\t\t\tfaceLength = 0;\n\n\t\t\t\t// reset arrays for the next face\n\t\t\t\tfacePositionIndexes = [];\n\t\t\t\tfaceNormals = [];\n\t\t\t\tfaceColors = [];\n\t\t\t\tfaceUVs = [];\n\t\t\t\tfaceWeights = [];\n\t\t\t\tfaceWeightIndices = [];\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn buffers;\n\n\t}\n\n\t// See https://www.khronos.org/opengl/wiki/Calculating_a_Surface_Normal\n\tgetNormalNewell( vertices ) {\n\n\t\tconst normal = new Vector3( 0.0, 0.0, 0.0 );\n\n\t\tfor ( let i = 0; i < vertices.length; i ++ ) {\n\n\t\t\tconst current = vertices[ i ];\n\t\t\tconst next = vertices[ ( i + 1 ) % vertices.length ];\n\n\t\t\tnormal.x += ( current.y - next.y ) * ( current.z + next.z );\n\t\t\tnormal.y += ( current.z - next.z ) * ( current.x + next.x );\n\t\t\tnormal.z += ( current.x - next.x ) * ( current.y + next.y );\n\n\t\t}\n\n\t\tnormal.normalize();\n\n\t\treturn normal;\n\n\t}\n\n\tgetNormalTangentAndBitangent( vertices ) {\n\n\t\tconst normalVector = this.getNormalNewell( vertices );\n\t\t// Avoid up being equal or almost equal to normalVector\n\t\tconst up = Math.abs( normalVector.z ) > 0.5 ? new Vector3( 0.0, 1.0, 0.0 ) : new Vector3( 0.0, 0.0, 1.0 );\n\t\tconst tangent = up.cross( normalVector ).normalize();\n\t\tconst bitangent = normalVector.clone().cross( tangent ).normalize();\n\n\t\treturn {\n\t\t\tnormal: normalVector,\n\t\t\ttangent: tangent,\n\t\t\tbitangent: bitangent\n\t\t};\n\n\t}\n\n\tflattenVertex( vertex, normalTangent, normalBitangent ) {\n\n\t\treturn new Vector2(\n\t\t\tvertex.dot( normalTangent ),\n\t\t\tvertex.dot( normalBitangent )\n\t\t);\n\n\t}\n\n\t// Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris\n\tgenFace( buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength ) {\n\n\t\tlet triangles;\n\n\t\tif ( faceLength > 3 ) {\n\n\t\t\t// Triangulate n-gon using earcut\n\n\t\t\tconst vertices = [];\n\t\t\t// in morphing scenario vertexPositions represent morphPositions\n\t\t\t// while baseVertexPositions represent the original geometry's positions\n\t\t\tconst positions = geoInfo.baseVertexPositions || geoInfo.vertexPositions;\n\t\t\tfor ( let i = 0; i < facePositionIndexes.length; i += 3 ) {\n\n\t\t\t\tvertices.push(\n\t\t\t\t\tnew Vector3(\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 1 ] ],\n\t\t\t\t\t\tpositions[ facePositionIndexes[ i + 2 ] ]\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tconst { tangent, bitangent } = this.getNormalTangentAndBitangent( vertices );\n\t\t\tconst triangulationInput = [];\n\n\t\t\tfor ( const vertex of vertices ) {\n\n\t\t\t\ttriangulationInput.push( this.flattenVertex( vertex, tangent, bitangent ) );\n\n\t\t\t}\n\n\t\t\t// When vertices is an array of [0,0,0] elements (which is the case for vertices not participating in morph)\n\t\t\t// the triangulationInput will be an array of [0,0] elements\n\t\t\t// resulting in an array of 0 triangles being returned from ShapeUtils.triangulateShape\n\t\t\t// leading to not pushing into buffers.vertex the redundant vertices (the vertices that are not morphed).\n\t\t\t// That's why, in order to support morphing scenario, \"positions\" is looking first for baseVertexPositions,\n\t\t\t// so that we don't end up with an array of 0 triangles for the faces not participating in morph.\n\t\t\ttriangles = ShapeUtils.triangulateShape( triangulationInput, [] );\n\n\t\t} else {\n\n\t\t\t// Regular triangle, skip earcut triangulation step\n\t\t\ttriangles = [[ 0, 1, 2 ]];\n\n\t\t}\n\n\t\tfor ( const [ i0, i1, i2 ] of triangles ) {\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i0 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i1 * 3 + 2 ] ] );\n\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 1 ] ] );\n\t\t\tbuffers.vertex.push( geoInfo.vertexPositions[ facePositionIndexes[ i2 * 3 + 2 ] ] );\n\n\t\t\tif ( geoInfo.skeleton ) {\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.vertexWeights.push( faceWeights[ i2 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i0 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i1 * 4 + 3 ] );\n\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 1 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 2 ] );\n\t\t\t\tbuffers.weightsIndices.push( faceWeightIndices[ i2 * 4 + 3 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.color ) {\n\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.colors.push( faceColors[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.material && geoInfo.material.mappingType !== 'AllSame' ) {\n\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\t\t\t\tbuffers.materialIndex.push( materialIndex );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.normal ) {\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i0 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i1 * 3 + 2 ] );\n\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 1 ] );\n\t\t\t\tbuffers.normal.push( faceNormals[ i2 * 3 + 2 ] );\n\n\t\t\t}\n\n\t\t\tif ( geoInfo.uv ) {\n\n\t\t\t\tgeoInfo.uv.forEach( function ( uv, j ) {\n\n\t\t\t\t\tif ( buffers.uvs[ j ] === undefined ) buffers.uvs[ j ] = [];\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i0 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i1 * 2 + 1 ] );\n\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 ] );\n\t\t\t\t\tbuffers.uvs[ j ].push( faceUVs[ j ][ i2 * 2 + 1 ] );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\taddMorphTargets( parentGeo, parentGeoNode, morphTargets, preTransform ) {\n\n\t\tif ( morphTargets.length === 0 ) return;\n\n\t\tparentGeo.morphTargetsRelative = true;\n\n\t\tparentGeo.morphAttributes.position = [];\n\t\t// parentGeo.morphAttributes.normal = []; // not implemented\n\n\t\tconst scope = this;\n\t\tmorphTargets.forEach( function ( morphTarget ) {\n\n\t\t\tmorphTarget.rawTargets.forEach( function ( rawTarget ) {\n\n\t\t\t\tconst morphGeoNode = fbxTree.Objects.Geometry[ rawTarget.geoID ];\n\n\t\t\t\tif ( morphGeoNode !== undefined ) {\n\n\t\t\t\t\tscope.genMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t// a morph geometry node is similar to a standard node, and the node is also contained\n\t// in FBXTree.Objects.Geometry, however it can only have attributes for position, normal\n\t// and a special attribute Index defining which vertices of the original geometry are affected\n\t// Normal and position attributes only have data for the vertices that are affected by the morph\n\tgenMorphGeometry( parentGeo, parentGeoNode, morphGeoNode, preTransform, name ) {\n\n\t\tconst basePositions = parentGeoNode.Vertices !== undefined ? parentGeoNode.Vertices.a : [];\n\t\tconst baseIndices = parentGeoNode.PolygonVertexIndex !== undefined ? parentGeoNode.PolygonVertexIndex.a : [];\n\n\t\tconst morphPositionsSparse = morphGeoNode.Vertices !== undefined ? morphGeoNode.Vertices.a : [];\n\t\tconst morphIndices = morphGeoNode.Indexes !== undefined ? morphGeoNode.Indexes.a : [];\n\n\t\tconst length = parentGeo.attributes.position.count * 3;\n\t\tconst morphPositions = new Float32Array( length );\n\n\t\tfor ( let i = 0; i < morphIndices.length; i ++ ) {\n\n\t\t\tconst morphIndex = morphIndices[ i ] * 3;\n\n\t\t\tmorphPositions[ morphIndex ] = morphPositionsSparse[ i * 3 ];\n\t\t\tmorphPositions[ morphIndex + 1 ] = morphPositionsSparse[ i * 3 + 1 ];\n\t\t\tmorphPositions[ morphIndex + 2 ] = morphPositionsSparse[ i * 3 + 2 ];\n\n\t\t}\n\n\t\t// TODO: add morph normal support\n\t\tconst morphGeoInfo = {\n\t\t\tvertexIndices: baseIndices,\n\t\t\tvertexPositions: morphPositions,\n\t\t\tbaseVertexPositions: basePositions\n\t\t};\n\n\t\tconst morphBuffers = this.genBuffers( morphGeoInfo );\n\n\t\tconst positionAttribute = new Float32BufferAttribute( morphBuffers.vertex, 3 );\n\t\tpositionAttribute.name = name || morphGeoNode.attrName;\n\n\t\tpositionAttribute.applyMatrix4( preTransform );\n\n\t\tparentGeo.morphAttributes.position.push( positionAttribute );\n\n\t}\n\n\t// Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists\n\tparseNormals( NormalNode ) {\n\n\t\tconst mappingType = NormalNode.MappingInformationType;\n\t\tconst referenceType = NormalNode.ReferenceInformationType;\n\t\tconst buffer = NormalNode.Normals.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tif ( 'NormalIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalIndex.a;\n\n\t\t\t} else if ( 'NormalsIndex' in NormalNode ) {\n\n\t\t\t\tindexBuffer = NormalNode.NormalsIndex.a;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 3,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists\n\tparseUVs( UVNode ) {\n\n\t\tconst mappingType = UVNode.MappingInformationType;\n\t\tconst referenceType = UVNode.ReferenceInformationType;\n\t\tconst buffer = UVNode.UV.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = UVNode.UVIndex.a;\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 2,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists\n\tparseVertexColors( ColorNode ) {\n\n\t\tconst mappingType = ColorNode.MappingInformationType;\n\t\tconst referenceType = ColorNode.ReferenceInformationType;\n\t\tconst buffer = ColorNode.Colors.a;\n\t\tlet indexBuffer = [];\n\t\tif ( referenceType === 'IndexToDirect' ) {\n\n\t\t\tindexBuffer = ColorNode.ColorIndex.a;\n\n\t\t}\n\n\t\tfor ( let i = 0, c = new Color(); i < buffer.length; i += 4 ) {\n\n\t\t\tc.fromArray( buffer, i );\n\t\t\tColorManagement.colorSpaceToWorking( c, SRGBColorSpace );\n\t\t\tc.toArray( buffer, i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 4,\n\t\t\tbuffer: buffer,\n\t\t\tindices: indexBuffer,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists\n\tparseMaterialIndices( MaterialNode ) {\n\n\t\tconst mappingType = MaterialNode.MappingInformationType;\n\t\tconst referenceType = MaterialNode.ReferenceInformationType;\n\n\t\tif ( mappingType === 'NoMappingInformation' ) {\n\n\t\t\treturn {\n\t\t\t\tdataSize: 1,\n\t\t\t\tbuffer: [ 0 ],\n\t\t\t\tindices: [ 0 ],\n\t\t\t\tmappingType: 'AllSame',\n\t\t\t\treferenceType: referenceType\n\t\t\t};\n\n\t\t}\n\n\t\tconst materialIndexBuffer = MaterialNode.Materials.a;\n\n\t\t// Since materials are stored as indices, there's a bit of a mismatch between FBX and what\n\t\t// we expect.So we create an intermediate buffer that points to the index in the buffer,\n\t\t// for conforming with the other functions we've written for other data.\n\t\tconst materialIndices = [];\n\n\t\tfor ( let i = 0; i < materialIndexBuffer.length; ++ i ) {\n\n\t\t\tmaterialIndices.push( i );\n\n\t\t}\n\n\t\treturn {\n\t\t\tdataSize: 1,\n\t\t\tbuffer: materialIndexBuffer,\n\t\t\tindices: materialIndices,\n\t\t\tmappingType: mappingType,\n\t\t\treferenceType: referenceType\n\t\t};\n\n\t}\n\n\t// Generate a NurbGeometry from a node in FBXTree.Objects.Geometry\n\tparseNurbsGeometry( geoNode ) {\n\n\t\tconst order = parseInt( geoNode.Order );\n\n\t\tif ( isNaN( order ) ) {\n\n\t\t\tconsole.error( 'THREE.FBXLoader: Invalid Order %s given for geometry ID: %s', geoNode.Order, geoNode.id );\n\t\t\treturn new BufferGeometry();\n\n\t\t}\n\n\t\tconst degree = order - 1;\n\n\t\tconst knots = geoNode.KnotVector.a;\n\t\tconst controlPoints = [];\n\t\tconst pointsValues = geoNode.Points.a;\n\n\t\tfor ( let i = 0, l = pointsValues.length; i < l; i += 4 ) {\n\n\t\t\tcontrolPoints.push( new Vector4().fromArray( pointsValues, i ) );\n\n\t\t}\n\n\t\tlet startKnot, endKnot;\n\n\t\tif ( geoNode.Form === 'Closed' ) {\n\n\t\t\tcontrolPoints.push( controlPoints[ 0 ] );\n\n\t\t} else if ( geoNode.Form === 'Periodic' ) {\n\n\t\t\tstartKnot = degree;\n\t\t\tendKnot = knots.length - 1 - startKnot;\n\n\t\t\tfor ( let i = 0; i < degree; ++ i ) {\n\n\t\t\t\tcontrolPoints.push( controlPoints[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst curve = new NURBSCurve( degree, knots, controlPoints, startKnot, endKnot );\n\t\tconst points = curve.getPoints( controlPoints.length * 12 );\n\n\t\treturn new BufferGeometry().setFromPoints( points );\n\n\t}\n\n}\n\n// parse animation data from FBXTree\nclass AnimationParser {\n\n\t// take raw animation clips and turn them into three.js animation clips\n\tparse() {\n\n\t\tconst animationClips = [];\n\n\t\tconst rawClips = this.parseClips();\n\n\t\tif ( rawClips !== undefined ) {\n\n\t\t\tfor ( const key in rawClips ) {\n\n\t\t\t\tconst rawClip = rawClips[ key ];\n\n\t\t\t\tconst clip = this.addClip( rawClip );\n\n\t\t\t\tanimationClips.push( clip );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animationClips;\n\n\t}\n\n\tparseClips() {\n\n\t\t// since the actual transformation data is stored in FBXTree.Objects.AnimationCurve,\n\t\t// if this is undefined we can safely assume there are no animations\n\t\tif ( fbxTree.Objects.AnimationCurve === undefined ) return undefined;\n\n\t\tconst curveNodesMap = this.parseAnimationCurveNodes();\n\n\t\tthis.parseAnimationCurves( curveNodesMap );\n\n\t\tconst layersMap = this.parseAnimationLayers( curveNodesMap );\n\t\tconst rawClips = this.parseAnimStacks( layersMap );\n\n\t\treturn rawClips;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurveNode\n\t// each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )\n\t// and is referenced by an AnimationLayer\n\tparseAnimationCurveNodes() {\n\n\t\tconst rawCurveNodes = fbxTree.Objects.AnimationCurveNode;\n\n\t\tconst curveNodesMap = new Map();\n\n\t\tfor ( const nodeID in rawCurveNodes ) {\n\n\t\t\tconst rawCurveNode = rawCurveNodes[ nodeID ];\n\n\t\t\tif ( rawCurveNode.attrName.match( /S|R|T|DeformPercent/ ) !== null ) {\n\n\t\t\t\tconst curveNode = {\n\n\t\t\t\t\tid: rawCurveNode.id,\n\t\t\t\t\tattr: rawCurveNode.attrName,\n\t\t\t\t\tcurves: {},\n\n\t\t\t\t};\n\n\t\t\t\tcurveNodesMap.set( curveNode.id, curveNode );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn curveNodesMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationCurve and connect them up to\n\t// previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated\n\t// axis ( e.g. times and values of x rotation)\n\tparseAnimationCurves( curveNodesMap ) {\n\n\t\tconst rawCurves = fbxTree.Objects.AnimationCurve;\n\n\t\t// TODO: Many values are identical up to roundoff error, but won't be optimised\n\t\t// e.g. position times: [0, 0.4, 0. 8]\n\t\t// position values: [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.23538335023477e-7, 93.67518615722656, -0.9982695579528809, 7.235384487103147e-7, 93.67520904541016, -0.9982695579528809]\n\t\t// clearly, this should be optimised to\n\t\t// times: [0], positions [7.23538335023477e-7, 93.67518615722656, -0.9982695579528809]\n\t\t// this shows up in nearly every FBX file, and generally time array is length > 100\n\n\t\tfor ( const nodeID in rawCurves ) {\n\n\t\t\tconst animationCurve = {\n\n\t\t\t\tid: rawCurves[ nodeID ].id,\n\t\t\t\ttimes: rawCurves[ nodeID ].KeyTime.a.map( convertFBXTimeToSeconds ),\n\t\t\t\tvalues: rawCurves[ nodeID ].KeyValueFloat.a,\n\n\t\t\t};\n\n\t\t\tconst relationships = connections.get( animationCurve.id );\n\n\t\t\tif ( relationships !== undefined ) {\n\n\t\t\t\tconst animationCurveID = relationships.parents[ 0 ].ID;\n\t\t\t\tconst animationCurveRelationship = relationships.parents[ 0 ].relationship;\n\n\t\t\t\tif ( animationCurveRelationship.match( /X/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'x' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Y/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'y' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /Z/ ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'z' ] = animationCurve;\n\n\t\t\t\t} else if ( animationCurveRelationship.match( /DeformPercent/ ) && curveNodesMap.has( animationCurveID ) ) {\n\n\t\t\t\t\tcurveNodesMap.get( animationCurveID ).curves[ 'morph' ] = animationCurve;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references\n\t// to various AnimationCurveNodes and is referenced by an AnimationStack node\n\t// note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack\n\tparseAnimationLayers( curveNodesMap ) {\n\n\t\tconst rawLayers = fbxTree.Objects.AnimationLayer;\n\n\t\tconst layersMap = new Map();\n\n\t\tfor ( const nodeID in rawLayers ) {\n\n\t\t\tconst layerCurveNodes = [];\n\n\t\t\tconst connection = connections.get( parseInt( nodeID ) );\n\n\t\t\tif ( connection !== undefined ) {\n\n\t\t\t\t// all the animationCurveNodes used in the layer\n\t\t\t\tconst children = connection.children;\n\n\t\t\t\tchildren.forEach( function ( child, i ) {\n\n\t\t\t\t\tif ( curveNodesMap.has( child.ID ) ) {\n\n\t\t\t\t\t\tconst curveNode = curveNodesMap.get( child.ID );\n\n\t\t\t\t\t\t// check that the curves are defined for at least one axis, otherwise ignore the curveNode\n\t\t\t\t\t\tif ( curveNode.curves.x !== undefined || curveNode.curves.y !== undefined || curveNode.curves.z !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst modelID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tif ( modelID !== undefined ) {\n\n\t\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID.toString() ];\n\n\t\t\t\t\t\t\t\t\tif ( rawModel === undefined ) {\n\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered a unused curve.', child );\n\t\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\t\tID: rawModel.id,\n\t\t\t\t\t\t\t\t\t\tinitialPosition: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialRotation: [ 0, 0, 0 ],\n\t\t\t\t\t\t\t\t\t\tinitialScale: [ 1, 1, 1 ],\n\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\t\tsceneGraph.traverse( function ( child ) {\n\n\t\t\t\t\t\t\t\t\t\tif ( child.ID === rawModel.id ) {\n\n\t\t\t\t\t\t\t\t\t\t\tnode.transform = child.matrix;\n\n\t\t\t\t\t\t\t\t\t\t\tif ( child.userData.transformData ) node.eulerOrder = child.userData.transformData.eulerOrder;\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\t\tif ( ! node.transform ) node.transform = new Matrix4();\n\n\t\t\t\t\t\t\t\t\t// if the animated model is pre rotated, we'll have to apply the pre rotations to every\n\t\t\t\t\t\t\t\t\t// animation value as well\n\t\t\t\t\t\t\t\t\tif ( 'PreRotation' in rawModel ) node.preRotation = rawModel.PreRotation.value;\n\t\t\t\t\t\t\t\t\tif ( 'PostRotation' in rawModel ) node.postRotation = rawModel.PostRotation.value;\n\n\t\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] ) layerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t} else if ( curveNode.curves.morph !== undefined ) {\n\n\t\t\t\t\t\t\tif ( layerCurveNodes[ i ] === undefined ) {\n\n\t\t\t\t\t\t\t\tconst deformerID = connections.get( child.ID ).parents.filter( function ( parent ) {\n\n\t\t\t\t\t\t\t\t\treturn parent.relationship !== undefined;\n\n\t\t\t\t\t\t\t\t} )[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst morpherID = connections.get( deformerID ).parents[ 0 ].ID;\n\t\t\t\t\t\t\t\tconst geoID = connections.get( morpherID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\t// assuming geometry is not used in more than one model\n\t\t\t\t\t\t\t\tconst modelID = connections.get( geoID ).parents[ 0 ].ID;\n\n\t\t\t\t\t\t\t\tconst rawModel = fbxTree.Objects.Model[ modelID ];\n\n\t\t\t\t\t\t\t\tconst node = {\n\n\t\t\t\t\t\t\t\t\tmodelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName( rawModel.attrName ) : '',\n\t\t\t\t\t\t\t\t\tmorphName: fbxTree.Objects.Deformer[ deformerID ].attrName,\n\n\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t\tlayerCurveNodes[ i ] = node;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlayerCurveNodes[ i ][ curveNode.attr ] = curveNode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\tlayersMap.set( parseInt( nodeID ), layerCurveNodes );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn layersMap;\n\n\t}\n\n\t// parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation\n\t// hierarchy. Each Stack node will be used to create an AnimationClip\n\tparseAnimStacks( layersMap ) {\n\n\t\tconst rawStacks = fbxTree.Objects.AnimationStack;\n\n\t\t// connect the stacks (clips) up to the layers\n\t\tconst rawClips = {};\n\n\t\tfor ( const nodeID in rawStacks ) {\n\n\t\t\tconst children = connections.get( parseInt( nodeID ) ).children;\n\n\t\t\tif ( children.length > 1 ) {\n\n\t\t\t\t// it seems like stacks will always be associated with a single layer. But just in case there are files\n\t\t\t\t// where there are multiple layers per stack, we'll display a warning\n\t\t\t\tconsole.warn( 'THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.' );\n\n\t\t\t}\n\n\t\t\tconst layer = layersMap.get( children[ 0 ].ID );\n\n\t\t\trawClips[ nodeID ] = {\n\n\t\t\t\tname: rawStacks[ nodeID ].attrName,\n\t\t\t\tlayer: layer,\n\n\t\t\t};\n\n\t\t}\n\n\t\treturn rawClips;\n\n\t}\n\n\taddClip( rawClip ) {\n\n\t\tlet tracks = [];\n\n\t\tconst scope = this;\n\t\trawClip.layer.forEach( function ( rawTracks ) {\n\n\t\t\ttracks = tracks.concat( scope.generateTracks( rawTracks ) );\n\n\t\t} );\n\n\t\treturn new AnimationClip( rawClip.name, - 1, tracks );\n\n\t}\n\n\tgenerateTracks( rawTracks ) {\n\n\t\tconst tracks = [];\n\n\t\tlet initialPosition = new Vector3();\n\t\tlet initialScale = new Vector3();\n\n\t\tif ( rawTracks.transform ) rawTracks.transform.decompose( initialPosition, new Quaternion(), initialScale );\n\n\t\tinitialPosition = initialPosition.toArray();\n\t\tinitialScale = initialScale.toArray();\n\n\t\tif ( rawTracks.T !== undefined && Object.keys( rawTracks.T.curves ).length > 0 ) {\n\n\t\t\tconst positionTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.T.curves, initialPosition, 'position' );\n\t\t\tif ( positionTrack !== undefined ) tracks.push( positionTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.R !== undefined && Object.keys( rawTracks.R.curves ).length > 0 ) {\n\n\t\t\tconst rotationTrack = this.generateRotationTrack( rawTracks.modelName, rawTracks.R.curves, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder );\n\t\t\tif ( rotationTrack !== undefined ) tracks.push( rotationTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.S !== undefined && Object.keys( rawTracks.S.curves ).length > 0 ) {\n\n\t\t\tconst scaleTrack = this.generateVectorTrack( rawTracks.modelName, rawTracks.S.curves, initialScale, 'scale' );\n\t\t\tif ( scaleTrack !== undefined ) tracks.push( scaleTrack );\n\n\t\t}\n\n\t\tif ( rawTracks.DeformPercent !== undefined ) {\n\n\t\t\tconst morphTrack = this.generateMorphTrack( rawTracks );\n\t\t\tif ( morphTrack !== undefined ) tracks.push( morphTrack );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\tgenerateVectorTrack( modelName, curves, initialValue, type ) {\n\n\t\tconst times = this.getTimesForAllAxes( curves );\n\t\tconst values = this.getKeyframeTrackValues( times, curves, initialValue );\n\n\t\treturn new VectorKeyframeTrack( modelName + '.' + type, times, values );\n\n\t}\n\n\tgenerateRotationTrack( modelName, curves, preRotation, postRotation, eulerOrder ) {\n\n\t\tlet times;\n\t\tlet values;\n\n\t\tif ( curves.x !== undefined && curves.y !== undefined && curves.z !== undefined ) {\n\n\t\t\tconst result = this.interpolateRotations( curves.x, curves.y, curves.z, eulerOrder );\n\n\t\t\ttimes = result[ 0 ];\n\t\t\tvalues = result[ 1 ];\n\n\t\t}\n\n\t\t// For Maya models using \"Joint Orient\", Euler order only applies to rotation, not pre/post-rotations\n\t\tconst defaultEulerOrder = getEulerOrder( 0 );\n\n\t\tif ( preRotation !== undefined ) {\n\n\t\t\tpreRotation = preRotation.map( MathUtils.degToRad );\n\t\t\tpreRotation.push( defaultEulerOrder );\n\n\t\t\tpreRotation = new Euler().fromArray( preRotation );\n\t\t\tpreRotation = new Quaternion().setFromEuler( preRotation );\n\n\t\t}\n\n\t\tif ( postRotation !== undefined ) {\n\n\t\t\tpostRotation = postRotation.map( MathUtils.degToRad );\n\t\t\tpostRotation.push( defaultEulerOrder );\n\n\t\t\tpostRotation = new Euler().fromArray( postRotation );\n\t\t\tpostRotation = new Quaternion().setFromEuler( postRotation ).invert();\n\n\t\t}\n\n\t\tconst quaternion = new Quaternion();\n\t\tconst euler = new Euler();\n\n\t\tconst quaternionValues = [];\n\n\t\tif ( ! values || ! times ) return new QuaternionKeyframeTrack( modelName + '.quaternion', [ 0 ], [ 0 ] );\n\n\t\tfor ( let i = 0; i < values.length; i += 3 ) {\n\n\t\t\teuler.set( values[ i ], values[ i + 1 ], values[ i + 2 ], eulerOrder );\n\t\t\tquaternion.setFromEuler( euler );\n\n\t\t\tif ( preRotation !== undefined ) quaternion.premultiply( preRotation );\n\t\t\tif ( postRotation !== undefined ) quaternion.multiply( postRotation );\n\n\t\t\t// Check unroll\n\t\t\tif ( i > 2 ) {\n\n\t\t\t\tconst prevQuat = new Quaternion().fromArray(\n\t\t\t\t\tquaternionValues,\n\t\t\t\t\t( ( i - 3 ) / 3 ) * 4\n\t\t\t\t);\n\n\t\t\t\tif ( prevQuat.dot( quaternion ) < 0 ) {\n\n\t\t\t\t\tquaternion.set( - quaternion.x, - quaternion.y, - quaternion.z, - quaternion.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tquaternion.toArray( quaternionValues, ( i / 3 ) * 4 );\n\n\t\t}\n\n\t\treturn new QuaternionKeyframeTrack( modelName + '.quaternion', times, quaternionValues );\n\n\t}\n\n\tgenerateMorphTrack( rawTracks ) {\n\n\t\tconst curves = rawTracks.DeformPercent.curves.morph;\n\t\tconst values = curves.values.map( function ( val ) {\n\n\t\t\treturn val / 100;\n\n\t\t} );\n\n\t\tconst morphNum = sceneGraph.getObjectByName( rawTracks.modelName ).morphTargetDictionary[ rawTracks.morphName ];\n\n\t\treturn new NumberKeyframeTrack( rawTracks.modelName + '.morphTargetInfluences[' + morphNum + ']', curves.times, values );\n\n\t}\n\n\t// For all animated objects, times are defined separately for each axis\n\t// Here we'll combine the times into one sorted array without duplicates\n\tgetTimesForAllAxes( curves ) {\n\n\t\tlet times = [];\n\n\t\t// first join together the times for each axis, if defined\n\t\tif ( curves.x !== undefined ) times = times.concat( curves.x.times );\n\t\tif ( curves.y !== undefined ) times = times.concat( curves.y.times );\n\t\tif ( curves.z !== undefined ) times = times.concat( curves.z.times );\n\n\t\t// then sort them\n\t\ttimes = times.sort( function ( a, b ) {\n\n\t\t\treturn a - b;\n\n\t\t} );\n\n\t\t// and remove duplicates\n\t\tif ( times.length > 1 ) {\n\n\t\t\tlet targetIndex = 1;\n\t\t\tlet lastValue = times[ 0 ];\n\t\t\tfor ( let i = 1; i < times.length; i ++ ) {\n\n\t\t\t\tconst currentValue = times[ i ];\n\t\t\t\tif ( currentValue !== lastValue ) {\n\n\t\t\t\t\ttimes[ targetIndex ] = currentValue;\n\t\t\t\t\tlastValue = currentValue;\n\t\t\t\t\ttargetIndex ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttimes = times.slice( 0, targetIndex );\n\n\t\t}\n\n\t\treturn times;\n\n\t}\n\n\tgetKeyframeTrackValues( times, curves, initialValue ) {\n\n\t\tconst prevValue = initialValue;\n\n\t\tconst values = [];\n\n\t\tlet xIndex = - 1;\n\t\tlet yIndex = - 1;\n\t\tlet zIndex = - 1;\n\n\t\ttimes.forEach( function ( time ) {\n\n\t\t\tif ( curves.x ) xIndex = curves.x.times.indexOf( time );\n\t\t\tif ( curves.y ) yIndex = curves.y.times.indexOf( time );\n\t\t\tif ( curves.z ) zIndex = curves.z.times.indexOf( time );\n\n\t\t\t// if there is an x value defined for this frame, use that\n\t\t\tif ( xIndex !== - 1 ) {\n\n\t\t\t\tconst xValue = curves.x.values[ xIndex ];\n\t\t\t\tvalues.push( xValue );\n\t\t\t\tprevValue[ 0 ] = xValue;\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise use the x value from the previous frame\n\t\t\t\tvalues.push( prevValue[ 0 ] );\n\n\t\t\t}\n\n\t\t\tif ( yIndex !== - 1 ) {\n\n\t\t\t\tconst yValue = curves.y.values[ yIndex ];\n\t\t\t\tvalues.push( yValue );\n\t\t\t\tprevValue[ 1 ] = yValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 1 ] );\n\n\t\t\t}\n\n\t\t\tif ( zIndex !== - 1 ) {\n\n\t\t\t\tconst zValue = curves.z.values[ zIndex ];\n\t\t\t\tvalues.push( zValue );\n\t\t\t\tprevValue[ 2 ] = zValue;\n\n\t\t\t} else {\n\n\t\t\t\tvalues.push( prevValue[ 2 ] );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn values;\n\n\t}\n\n\t// Rotations are defined as Euler angles which can have values of any size\n\t// These will be converted to quaternions which don't support values greater than\n\t// PI, so we'll interpolate large rotations\n\tinterpolateRotations( curvex, curvey, curvez, eulerOrder ) {\n\n\t\tconst times = [];\n\t\tconst values = [];\n\n\t\t// Add first frame\n\t\ttimes.push( curvex.times[ 0 ] );\n\t\tvalues.push( MathUtils.degToRad( curvex.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvey.values[ 0 ] ) );\n\t\tvalues.push( MathUtils.degToRad( curvez.values[ 0 ] ) );\n\n\t\tfor ( let i = 1; i < curvex.values.length; i ++ ) {\n\n\t\t\tconst initialValue = [\n\t\t\t\tcurvex.values[ i - 1 ],\n\t\t\t\tcurvey.values[ i - 1 ],\n\t\t\t\tcurvez.values[ i - 1 ],\n\t\t\t];\n\n\t\t\tif ( isNaN( initialValue[ 0 ] ) || isNaN( initialValue[ 1 ] ) || isNaN( initialValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst initialValueRad = initialValue.map( MathUtils.degToRad );\n\n\t\t\tconst currentValue = [\n\t\t\t\tcurvex.values[ i ],\n\t\t\t\tcurvey.values[ i ],\n\t\t\t\tcurvez.values[ i ],\n\t\t\t];\n\n\t\t\tif ( isNaN( currentValue[ 0 ] ) || isNaN( currentValue[ 1 ] ) || isNaN( currentValue[ 2 ] ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst currentValueRad = currentValue.map( MathUtils.degToRad );\n\n\t\t\tconst valuesSpan = [\n\t\t\t\tcurrentValue[ 0 ] - initialValue[ 0 ],\n\t\t\t\tcurrentValue[ 1 ] - initialValue[ 1 ],\n\t\t\t\tcurrentValue[ 2 ] - initialValue[ 2 ],\n\t\t\t];\n\n\t\t\tconst absoluteSpan = [\n\t\t\t\tMath.abs( valuesSpan[ 0 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 1 ] ),\n\t\t\t\tMath.abs( valuesSpan[ 2 ] ),\n\t\t\t];\n\n\t\t\tif ( absoluteSpan[ 0 ] >= 180 || absoluteSpan[ 1 ] >= 180 || absoluteSpan[ 2 ] >= 180 ) {\n\n\t\t\t\tconst maxAbsSpan = Math.max( ...absoluteSpan );\n\n\t\t\t\tconst numSubIntervals = maxAbsSpan / 180;\n\n\t\t\t\tconst E1 = new Euler( ...initialValueRad, eulerOrder );\n\t\t\t\tconst E2 = new Euler( ...currentValueRad, eulerOrder );\n\n\t\t\t\tconst Q1 = new Quaternion().setFromEuler( E1 );\n\t\t\t\tconst Q2 = new Quaternion().setFromEuler( E2 );\n\n\t\t\t\t// Check unroll\n\t\t\t\tif ( Q1.dot( Q2 ) ) {\n\n\t\t\t\t\tQ2.set( - Q2.x, - Q2.y, - Q2.z, - Q2.w );\n\n\t\t\t\t}\n\n\t\t\t\t// Interpolate\n\t\t\t\tconst initialTime = curvex.times[ i - 1 ];\n\t\t\t\tconst timeSpan = curvex.times[ i ] - initialTime;\n\n\t\t\t\tconst Q = new Quaternion();\n\t\t\t\tconst E = new Euler();\n\t\t\t\tfor ( let t = 0; t < 1; t += 1 / numSubIntervals ) {\n\n\t\t\t\t\tQ.copy( Q1.clone().slerp( Q2.clone(), t ) );\n\n\t\t\t\t\ttimes.push( initialTime + t * timeSpan );\n\t\t\t\t\tE.setFromQuaternion( Q, eulerOrder );\n\n\t\t\t\t\tvalues.push( E.x );\n\t\t\t\t\tvalues.push( E.y );\n\t\t\t\t\tvalues.push( E.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\ttimes.push( curvex.times[ i ] );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvex.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvey.values[ i ] ) );\n\t\t\t\tvalues.push( MathUtils.degToRad( curvez.values[ i ] ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn [ times, values ];\n\n\t}\n\n}\n\n// parse an FBX file in ASCII format\nclass TextParser {\n\n\tgetPrevNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 2 ];\n\n\t}\n\n\tgetCurrentNode() {\n\n\t\treturn this.nodeStack[ this.currentIndent - 1 ];\n\n\t}\n\n\tgetCurrentProp() {\n\n\t\treturn this.currentProp;\n\n\t}\n\n\tpushStack( node ) {\n\n\t\tthis.nodeStack.push( node );\n\t\tthis.currentIndent += 1;\n\n\t}\n\n\tpopStack() {\n\n\t\tthis.nodeStack.pop();\n\t\tthis.currentIndent -= 1;\n\n\t}\n\n\tsetCurrentProp( val, name ) {\n\n\t\tthis.currentProp = val;\n\t\tthis.currentPropName = name;\n\n\t}\n\n\tparse( text ) {\n\n\t\tthis.currentIndent = 0;\n\n\t\tthis.allNodes = new FBXTree();\n\t\tthis.nodeStack = [];\n\t\tthis.currentProp = [];\n\t\tthis.currentPropName = '';\n\n\t\tconst scope = this;\n\n\t\tconst split = text.split( /[\\r\\n]+/ );\n\n\t\tsplit.forEach( function ( line, i ) {\n\n\t\t\tconst matchComment = line.match( /^[\\s\\t]*;/ );\n\t\t\tconst matchEmpty = line.match( /^[\\s\\t]*$/ );\n\n\t\t\tif ( matchComment || matchEmpty ) return;\n\n\t\t\tconst matchBeginning = line.match( '^\\\\t{' + scope.currentIndent + '}(\\\\w+):(.*){', '' );\n\t\t\tconst matchProperty = line.match( '^\\\\t{' + ( scope.currentIndent ) + '}(\\\\w+):[\\\\s\\\\t\\\\r\\\\n](.*)' );\n\t\t\tconst matchEnd = line.match( '^\\\\t{' + ( scope.currentIndent - 1 ) + '}}' );\n\n\t\t\tif ( matchBeginning ) {\n\n\t\t\t\tscope.parseNodeBegin( line, matchBeginning );\n\n\t\t\t} else if ( matchProperty ) {\n\n\t\t\t\tscope.parseNodeProperty( line, matchProperty, split[ ++ i ] );\n\n\t\t\t} else if ( matchEnd ) {\n\n\t\t\t\tscope.popStack();\n\n\t\t\t} else if ( line.match( /^[^\\s\\t}]/ ) ) {\n\n\t\t\t\t// large arrays are split over multiple lines terminated with a ',' character\n\t\t\t\t// if this is encountered the line needs to be joined to the previous line\n\t\t\t\tscope.parseNodePropertyContinued( line );\n\n\t\t\t}\n\n\t\t} );\n\n\t\treturn this.allNodes;\n\n\t}\n\n\tparseNodeBegin( line, property ) {\n\n\t\tconst nodeName = property[ 1 ].trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\tconst nodeAttrs = property[ 2 ].split( ',' ).map( function ( attr ) {\n\n\t\t\treturn attr.trim().replace( /^\"/, '' ).replace( /\"$/, '' );\n\n\t\t} );\n\n\t\tconst node = { name: nodeName };\n\t\tconst attrs = this.parseNodeAttr( nodeAttrs );\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\t// a top node\n\t\tif ( this.currentIndent === 0 ) {\n\n\t\t\tthis.allNodes.add( nodeName, node );\n\n\t\t} else { // a subnode\n\n\t\t\t// if the subnode already exists, append it\n\t\t\tif ( nodeName in currentNode ) {\n\n\t\t\t\t// special case Pose needs PoseNodes as an array\n\t\t\t\tif ( nodeName === 'PoseNode' ) {\n\n\t\t\t\t\tcurrentNode.PoseNode.push( node );\n\n\t\t\t\t} else if ( currentNode[ nodeName ].id !== undefined ) {\n\n\t\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\t\tcurrentNode[ nodeName ][ currentNode[ nodeName ].id ] = currentNode[ nodeName ];\n\n\t\t\t\t}\n\n\t\t\t\tif ( attrs.id !== '' ) currentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( typeof attrs.id === 'number' ) {\n\n\t\t\t\tcurrentNode[ nodeName ] = {};\n\t\t\t\tcurrentNode[ nodeName ][ attrs.id ] = node;\n\n\t\t\t} else if ( nodeName !== 'Properties70' ) {\n\n\t\t\t\tif ( nodeName === 'PoseNode' )\tcurrentNode[ nodeName ] = [ node ];\n\t\t\t\telse currentNode[ nodeName ] = node;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( typeof attrs.id === 'number' ) node.id = attrs.id;\n\t\tif ( attrs.name !== '' ) node.attrName = attrs.name;\n\t\tif ( attrs.type !== '' ) node.attrType = attrs.type;\n\n\t\tthis.pushStack( node );\n\n\t}\n\n\tparseNodeAttr( attrs ) {\n\n\t\tlet id = attrs[ 0 ];\n\n\t\tif ( attrs[ 0 ] !== '' ) {\n\n\t\t\tid = parseInt( attrs[ 0 ] );\n\n\t\t\tif ( isNaN( id ) ) {\n\n\t\t\t\tid = attrs[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet name = '', type = '';\n\n\t\tif ( attrs.length > 1 ) {\n\n\t\t\tname = attrs[ 1 ].replace( /^(\\w+)::/, '' );\n\t\t\ttype = attrs[ 2 ];\n\n\t\t}\n\n\t\treturn { id: id, name: name, type: type };\n\n\t}\n\n\tparseNodeProperty( line, property, contentLine ) {\n\n\t\tlet propName = property[ 1 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\t\tlet propValue = property[ 2 ].replace( /^\"/, '' ).replace( /\"$/, '' ).trim();\n\n\t\t// for special case: base64 image data follows \"Content: ,\" line\n\t\t//\tContent: ,\n\t\t//\t \"/9j/4RDaRXhpZgAATU0A...\"\n\t\tif ( propName === 'Content' && propValue === ',' ) {\n\n\t\t\tpropValue = contentLine.replace( /\"/g, '' ).replace( /,$/, '' ).trim();\n\n\t\t}\n\n\t\tconst currentNode = this.getCurrentNode();\n\t\tconst parentName = currentNode.name;\n\n\t\tif ( parentName === 'Properties70' ) {\n\n\t\t\tthis.parseNodeSpecialProperty( line, propName, propValue );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Connections\n\t\tif ( propName === 'C' ) {\n\n\t\t\tconst connProps = propValue.split( ',' ).slice( 1 );\n\t\t\tconst from = parseInt( connProps[ 0 ] );\n\t\t\tconst to = parseInt( connProps[ 1 ] );\n\n\t\t\tlet rest = propValue.split( ',' ).slice( 3 );\n\n\t\t\trest = rest.map( function ( elem ) {\n\n\t\t\t\treturn elem.trim().replace( /^\"/, '' );\n\n\t\t\t} );\n\n\t\t\tpropName = 'connections';\n\t\t\tpropValue = [ from, to ];\n\t\t\tappend( propValue, rest );\n\n\t\t\tif ( currentNode[ propName ] === undefined ) {\n\n\t\t\t\tcurrentNode[ propName ] = [];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Node\n\t\tif ( propName === 'Node' ) currentNode.id = propValue;\n\n\t\t// connections\n\t\tif ( propName in currentNode && Array.isArray( currentNode[ propName ] ) ) {\n\n\t\t\tcurrentNode[ propName ].push( propValue );\n\n\t\t} else {\n\n\t\t\tif ( propName !== 'a' ) currentNode[ propName ] = propValue;\n\t\t\telse currentNode.a = propValue;\n\n\t\t}\n\n\t\tthis.setCurrentProp( currentNode, propName );\n\n\t\t// convert string to array, unless it ends in ',' in which case more will be added to it\n\t\tif ( propName === 'a' && propValue.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( propValue );\n\n\t\t}\n\n\t}\n\n\tparseNodePropertyContinued( line ) {\n\n\t\tconst currentNode = this.getCurrentNode();\n\n\t\tcurrentNode.a += line;\n\n\t\t// if the line doesn't end in ',' we have reached the end of the property value\n\t\t// so convert the string to an array\n\t\tif ( line.slice( - 1 ) !== ',' ) {\n\n\t\t\tcurrentNode.a = parseNumberArray( currentNode.a );\n\n\t\t}\n\n\t}\n\n\t// parse \"Property70\"\n\tparseNodeSpecialProperty( line, propName, propValue ) {\n\n\t\t// split this\n\t\t// P: \"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\",1,1,1\n\t\t// into array like below\n\t\t// [\"Lcl Scaling\", \"Lcl Scaling\", \"\", \"A\", \"1,1,1\" ]\n\t\tconst props = propValue.split( '\",' ).map( function ( prop ) {\n\n\t\t\treturn prop.trim().replace( /^\\\"/, '' ).replace( /\\s/, '_' );\n\n\t\t} );\n\n\t\tconst innerPropName = props[ 0 ];\n\t\tconst innerPropType1 = props[ 1 ];\n\t\tconst innerPropType2 = props[ 2 ];\n\t\tconst innerPropFlag = props[ 3 ];\n\t\tlet innerPropValue = props[ 4 ];\n\n\t\t// cast values where needed, otherwise leave as strings\n\t\tswitch ( innerPropType1 ) {\n\n\t\t\tcase 'int':\n\t\t\tcase 'enum':\n\t\t\tcase 'bool':\n\t\t\tcase 'ULongLong':\n\t\t\tcase 'double':\n\t\t\tcase 'Number':\n\t\t\tcase 'FieldOfView':\n\t\t\t\tinnerPropValue = parseFloat( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t\tcase 'Color':\n\t\t\tcase 'ColorRGB':\n\t\t\tcase 'Vector3D':\n\t\t\tcase 'Lcl_Translation':\n\t\t\tcase 'Lcl_Rotation':\n\t\t\tcase 'Lcl_Scaling':\n\t\t\t\tinnerPropValue = parseNumberArray( innerPropValue );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// CAUTION: these props must append to parent's parent\n\t\tthis.getPrevNode()[ innerPropName ] = {\n\n\t\t\t'type': innerPropType1,\n\t\t\t'type2': innerPropType2,\n\t\t\t'flag': innerPropFlag,\n\t\t\t'value': innerPropValue\n\n\t\t};\n\n\t\tthis.setCurrentProp( this.getPrevNode(), innerPropName );\n\n\t}\n\n}\n\n// Parse an FBX file in Binary format\nclass BinaryParser {\n\n\tparse( buffer ) {\n\n\t\tconst reader = new BinaryReader( buffer );\n\t\treader.skip( 23 ); // skip magic 23 bytes\n\n\t\tconst version = reader.getUint32();\n\n\t\tif ( version < 6400 ) {\n\n\t\t\tthrow new Error( 'THREE.FBXLoader: FBX version not supported, FileVersion: ' + version );\n\n\t\t}\n\n\t\tconst allNodes = new FBXTree();\n\n\t\twhile ( ! this.endOfContent( reader ) ) {\n\n\t\t\tconst node = this.parseNode( reader, version );\n\t\t\tif ( node !== null ) allNodes.add( node.name, node );\n\n\t\t}\n\n\t\treturn allNodes;\n\n\t}\n\n\t// Check if reader has reached the end of content.\n\tendOfContent( reader ) {\n\n\t\t// footer size: 160bytes + 16-byte alignment padding\n\t\t// - 16bytes: magic\n\t\t// - padding til 16-byte alignment (at least 1byte?)\n\t\t//\t(seems like some exporters embed fixed 15 or 16bytes?)\n\t\t// - 4bytes: magic\n\t\t// - 4bytes: version\n\t\t// - 120bytes: zero\n\t\t// - 16bytes: magic\n\t\tif ( reader.size() % 16 === 0 ) {\n\n\t\t\treturn ( ( reader.getOffset() + 160 + 16 ) & ~ 0xf ) >= reader.size();\n\n\t\t} else {\n\n\t\t\treturn reader.getOffset() + 160 + 16 >= reader.size();\n\n\t\t}\n\n\t}\n\n\t// recursively parse nodes until the end of the file is reached\n\tparseNode( reader, version ) {\n\n\t\tconst node = {};\n\n\t\t// The first three data sizes depends on version.\n\t\tconst endOffset = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\t\tconst numProperties = ( version >= 7500 ) ? reader.getUint64() : reader.getUint32();\n\n\t\t( version >= 7500 ) ? reader.getUint64() : reader.getUint32(); // the returned propertyListLen is not used\n\n\t\tconst nameLen = reader.getUint8();\n\t\tconst name = reader.getString( nameLen );\n\n\t\t// Regards this node as NULL-record if endOffset is zero\n\t\tif ( endOffset === 0 ) return null;\n\n\t\tconst propertyList = [];\n\n\t\tfor ( let i = 0; i < numProperties; i ++ ) {\n\n\t\t\tpropertyList.push( this.parseProperty( reader ) );\n\n\t\t}\n\n\t\t// Regards the first three elements in propertyList as id, attrName, and attrType\n\t\tconst id = propertyList.length > 0 ? propertyList[ 0 ] : '';\n\t\tconst attrName = propertyList.length > 1 ? propertyList[ 1 ] : '';\n\t\tconst attrType = propertyList.length > 2 ? propertyList[ 2 ] : '';\n\n\t\t// check if this node represents just a single property\n\t\t// like (name, 0) set or (name2, [0, 1, 2]) set of {name: 0, name2: [0, 1, 2]}\n\t\tnode.singleProperty = ( numProperties === 1 && reader.getOffset() === endOffset ) ? true : false;\n\n\t\twhile ( endOffset > reader.getOffset() ) {\n\n\t\t\tconst subNode = this.parseNode( reader, version );\n\n\t\t\tif ( subNode !== null ) this.parseSubNode( name, node, subNode );\n\n\t\t}\n\n\t\tnode.propertyList = propertyList; // raw property list used by parent\n\n\t\tif ( typeof id === 'number' ) node.id = id;\n\t\tif ( attrName !== '' ) node.attrName = attrName;\n\t\tif ( attrType !== '' ) node.attrType = attrType;\n\t\tif ( name !== '' ) node.name = name;\n\n\t\treturn node;\n\n\t}\n\n\tparseSubNode( name, node, subNode ) {\n\n\t\t// special case: child node is single property\n\t\tif ( subNode.singleProperty === true ) {\n\n\t\t\tconst value = subNode.propertyList[ 0 ];\n\n\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t\tsubNode.a = value;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = value;\n\n\t\t\t}\n\n\t\t} else if ( name === 'Connections' && subNode.name === 'C' ) {\n\n\t\t\tconst array = [];\n\n\t\t\tsubNode.propertyList.forEach( function ( property, i ) {\n\n\t\t\t\t// first Connection is FBX type (OO, OP, etc.). We'll discard these\n\t\t\t\tif ( i !== 0 ) array.push( property );\n\n\t\t\t} );\n\n\t\t\tif ( node.connections === undefined ) {\n\n\t\t\t\tnode.connections = [];\n\n\t\t\t}\n\n\t\t\tnode.connections.push( array );\n\n\t\t} else if ( subNode.name === 'Properties70' ) {\n\n\t\t\tconst keys = Object.keys( subNode );\n\n\t\t\tkeys.forEach( function ( key ) {\n\n\t\t\t\tnode[ key ] = subNode[ key ];\n\n\t\t\t} );\n\n\t\t} else if ( name === 'Properties70' && subNode.name === 'P' ) {\n\n\t\t\tlet innerPropName = subNode.propertyList[ 0 ];\n\t\t\tlet innerPropType1 = subNode.propertyList[ 1 ];\n\t\t\tconst innerPropType2 = subNode.propertyList[ 2 ];\n\t\t\tconst innerPropFlag = subNode.propertyList[ 3 ];\n\t\t\tlet innerPropValue;\n\n\t\t\tif ( innerPropName.indexOf( 'Lcl ' ) === 0 ) innerPropName = innerPropName.replace( 'Lcl ', 'Lcl_' );\n\t\t\tif ( innerPropType1.indexOf( 'Lcl ' ) === 0 ) innerPropType1 = innerPropType1.replace( 'Lcl ', 'Lcl_' );\n\n\t\t\tif ( innerPropType1 === 'Color' || innerPropType1 === 'ColorRGB' || innerPropType1 === 'Vector' || innerPropType1 === 'Vector3D' || innerPropType1.indexOf( 'Lcl_' ) === 0 ) {\n\n\t\t\t\tinnerPropValue = [\n\t\t\t\t\tsubNode.propertyList[ 4 ],\n\t\t\t\t\tsubNode.propertyList[ 5 ],\n\t\t\t\t\tsubNode.propertyList[ 6 ]\n\t\t\t\t];\n\n\t\t\t} else {\n\n\t\t\t\tinnerPropValue = subNode.propertyList[ 4 ];\n\n\t\t\t}\n\n\t\t\t// this will be copied to parent, see above\n\t\t\tnode[ innerPropName ] = {\n\n\t\t\t\t'type': innerPropType1,\n\t\t\t\t'type2': innerPropType2,\n\t\t\t\t'flag': innerPropFlag,\n\t\t\t\t'value': innerPropValue\n\n\t\t\t};\n\n\t\t} else if ( node[ subNode.name ] === undefined ) {\n\n\t\t\tif ( typeof subNode.id === 'number' ) {\n\n\t\t\t\tnode[ subNode.name ] = {};\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t} else {\n\n\t\t\t\tnode[ subNode.name ] = subNode;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( subNode.name === 'PoseNode' ) {\n\n\t\t\t\tif ( ! Array.isArray( node[ subNode.name ] ) ) {\n\n\t\t\t\t\tnode[ subNode.name ] = [ node[ subNode.name ] ];\n\n\t\t\t\t}\n\n\t\t\t\tnode[ subNode.name ].push( subNode );\n\n\t\t\t} else if ( node[ subNode.name ][ subNode.id ] === undefined ) {\n\n\t\t\t\tnode[ subNode.name ][ subNode.id ] = subNode;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tparseProperty( reader ) {\n\n\t\tconst type = reader.getString( 1 );\n\t\tlet length;\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'C':\n\t\t\t\treturn reader.getBoolean();\n\n\t\t\tcase 'D':\n\t\t\t\treturn reader.getFloat64();\n\n\t\t\tcase 'F':\n\t\t\t\treturn reader.getFloat32();\n\n\t\t\tcase 'I':\n\t\t\t\treturn reader.getInt32();\n\n\t\t\tcase 'L':\n\t\t\t\treturn reader.getInt64();\n\n\t\t\tcase 'R':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getArrayBuffer( length );\n\n\t\t\tcase 'S':\n\t\t\t\tlength = reader.getUint32();\n\t\t\t\treturn reader.getString( length );\n\n\t\t\tcase 'Y':\n\t\t\t\treturn reader.getInt16();\n\n\t\t\tcase 'b':\n\t\t\tcase 'c':\n\t\t\tcase 'd':\n\t\t\tcase 'f':\n\t\t\tcase 'i':\n\t\t\tcase 'l':\n\n\t\t\t\tconst arrayLength = reader.getUint32();\n\t\t\t\tconst encoding = reader.getUint32(); // 0: non-compressed, 1: compressed\n\t\t\t\tconst compressedLength = reader.getUint32();\n\n\t\t\t\tif ( encoding === 0 ) {\n\n\t\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tcase 'c':\n\t\t\t\t\t\t\treturn reader.getBooleanArray( arrayLength );\n\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\treturn reader.getFloat64Array( arrayLength );\n\n\t\t\t\t\t\tcase 'f':\n\t\t\t\t\t\t\treturn reader.getFloat32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'i':\n\t\t\t\t\t\t\treturn reader.getInt32Array( arrayLength );\n\n\t\t\t\t\t\tcase 'l':\n\t\t\t\t\t\t\treturn reader.getInt64Array( arrayLength );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconst data = fflate.unzlibSync( new Uint8Array( reader.getArrayBuffer( compressedLength ) ) );\n\t\t\t\tconst reader2 = new BinaryReader( data.buffer );\n\n\t\t\t\tswitch ( type ) {\n\n\t\t\t\t\tcase 'b':\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\treturn reader2.getBooleanArray( arrayLength );\n\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\treturn reader2.getFloat64Array( arrayLength );\n\n\t\t\t\t\tcase 'f':\n\t\t\t\t\t\treturn reader2.getFloat32Array( arrayLength );\n\n\t\t\t\t\tcase 'i':\n\t\t\t\t\t\treturn reader2.getInt32Array( arrayLength );\n\n\t\t\t\t\tcase 'l':\n\t\t\t\t\t\treturn reader2.getInt64Array( arrayLength );\n\n\t\t\t\t}\n\n\t\t\t\tbreak; // cannot happen but is required by the DeepScan\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.FBXLoader: Unknown property type ' + type );\n\n\t\t}\n\n\t}\n\n}\n\nclass BinaryReader {\n\n\tconstructor( buffer, littleEndian ) {\n\n\t\tthis.dv = new DataView( buffer );\n\t\tthis.offset = 0;\n\t\tthis.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;\n\t\tthis._textDecoder = new TextDecoder();\n\n\t}\n\n\tgetOffset() {\n\n\t\treturn this.offset;\n\n\t}\n\n\tsize() {\n\n\t\treturn this.dv.buffer.byteLength;\n\n\t}\n\n\tskip( length ) {\n\n\t\tthis.offset += length;\n\n\t}\n\n\t// seems like true/false representation depends on exporter.\n\t// true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)\n\t// then sees LSB.\n\tgetBoolean() {\n\n\t\treturn ( this.getUint8() & 1 ) === 1;\n\n\t}\n\n\tgetBooleanArray( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getBoolean() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint8() {\n\n\t\tconst value = this.dv.getUint8( this.offset );\n\t\tthis.offset += 1;\n\t\treturn value;\n\n\t}\n\n\tgetInt16() {\n\n\t\tconst value = this.dv.getInt16( this.offset, this.littleEndian );\n\t\tthis.offset += 2;\n\t\treturn value;\n\n\t}\n\n\tgetInt32() {\n\n\t\tconst value = this.dv.getInt32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetInt32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetUint32() {\n\n\t\tconst value = this.dv.getUint32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\t// JavaScript doesn't support 64-bit integer so calculate this here\n\t// 1 << 32 will return 1 so using multiply operation instead here.\n\t// There's a possibility that this method returns wrong value if the value\n\t// is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n\t// TODO: safely handle 64-bit integer\n\tgetInt64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\t// calculate negative value\n\t\tif ( high & 0x80000000 ) {\n\n\t\t\thigh = ~ high & 0xFFFFFFFF;\n\t\t\tlow = ~ low & 0xFFFFFFFF;\n\n\t\t\tif ( low === 0xFFFFFFFF ) high = ( high + 1 ) & 0xFFFFFFFF;\n\n\t\t\tlow = ( low + 1 ) & 0xFFFFFFFF;\n\n\t\t\treturn - ( high * 0x100000000 + low );\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetInt64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getInt64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\t// Note: see getInt64() comment\n\tgetUint64() {\n\n\t\tlet low, high;\n\n\t\tif ( this.littleEndian ) {\n\n\t\t\tlow = this.getUint32();\n\t\t\thigh = this.getUint32();\n\n\t\t} else {\n\n\t\t\thigh = this.getUint32();\n\t\t\tlow = this.getUint32();\n\n\t\t}\n\n\t\treturn high * 0x100000000 + low;\n\n\t}\n\n\tgetFloat32() {\n\n\t\tconst value = this.dv.getFloat32( this.offset, this.littleEndian );\n\t\tthis.offset += 4;\n\t\treturn value;\n\n\t}\n\n\tgetFloat32Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat32() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetFloat64() {\n\n\t\tconst value = this.dv.getFloat64( this.offset, this.littleEndian );\n\t\tthis.offset += 8;\n\t\treturn value;\n\n\t}\n\n\tgetFloat64Array( size ) {\n\n\t\tconst a = [];\n\n\t\tfor ( let i = 0; i < size; i ++ ) {\n\n\t\t\ta.push( this.getFloat64() );\n\n\t\t}\n\n\t\treturn a;\n\n\t}\n\n\tgetArrayBuffer( size ) {\n\n\t\tconst value = this.dv.buffer.slice( this.offset, this.offset + size );\n\t\tthis.offset += size;\n\t\treturn value;\n\n\t}\n\n\tgetString( size ) {\n\n\t\tconst start = this.offset;\n\t\tlet a = new Uint8Array( this.dv.buffer, start, size );\n\n\t\tthis.skip( size );\n\n\t\tconst nullByte = a.indexOf( 0 );\n\t\tif ( nullByte >= 0 ) a = new Uint8Array( this.dv.buffer, start, nullByte );\n\n\t\treturn this._textDecoder.decode( a );\n\n\t}\n\n}\n\n// FBXTree holds a representation of the FBX data, returned by the TextParser ( FBX ASCII format)\n// and BinaryParser( FBX Binary format)\nclass FBXTree {\n\n\tadd( key, val ) {\n\n\t\tthis[ key ] = val;\n\n\t}\n\n}\n\n// ************** UTILITY FUNCTIONS **************\n\nfunction isFbxFormatBinary( buffer ) {\n\n\tconst CORRECT = 'Kaydara\\u0020FBX\\u0020Binary\\u0020\\u0020\\0';\n\n\treturn buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString( buffer, 0, CORRECT.length );\n\n}\n\nfunction isFbxFormatASCII( text ) {\n\n\tconst CORRECT = [ 'K', 'a', 'y', 'd', 'a', 'r', 'a', '\\\\', 'F', 'B', 'X', '\\\\', 'B', 'i', 'n', 'a', 'r', 'y', '\\\\', '\\\\' ];\n\n\tlet cursor = 0;\n\n\tfunction read( offset ) {\n\n\t\tconst result = text[ offset - 1 ];\n\t\ttext = text.slice( cursor + offset );\n\t\tcursor ++;\n\t\treturn result;\n\n\t}\n\n\tfor ( let i = 0; i < CORRECT.length; ++ i ) {\n\n\t\tconst num = read( 1 );\n\t\tif ( num === CORRECT[ i ] ) {\n\n\t\t\treturn false;\n\n\t\t}\n\n\t}\n\n\treturn true;\n\n}\n\nfunction getFbxVersion( text ) {\n\n\tconst versionRegExp = /FBXVersion: (\\d+)/;\n\tconst match = text.match( versionRegExp );\n\n\tif ( match ) {\n\n\t\tconst version = parseInt( match[ 1 ] );\n\t\treturn version;\n\n\t}\n\n\tthrow new Error( 'THREE.FBXLoader: Cannot find the version number for the file given.' );\n\n}\n\n// Converts FBX ticks into real time seconds.\nfunction convertFBXTimeToSeconds( time ) {\n\n\treturn time / 46186158000;\n\n}\n\nconst dataArray = [];\n\n// extracts the data from the correct position in the FBX array based on indexing type\nfunction getData( polygonVertexIndex, polygonIndex, vertexIndex, infoObject ) {\n\n\tlet index;\n\n\tswitch ( infoObject.mappingType ) {\n\n\t\tcase 'ByPolygonVertex' :\n\t\t\tindex = polygonVertexIndex;\n\t\t\tbreak;\n\t\tcase 'ByPolygon' :\n\t\t\tindex = polygonIndex;\n\t\t\tbreak;\n\t\tcase 'ByVertice' :\n\t\t\tindex = vertexIndex;\n\t\t\tbreak;\n\t\tcase 'AllSame' :\n\t\t\tindex = infoObject.indices[ 0 ];\n\t\t\tbreak;\n\t\tdefault :\n\t\t\tconsole.warn( 'THREE.FBXLoader: unknown attribute mapping type ' + infoObject.mappingType );\n\n\t}\n\n\tif ( infoObject.referenceType === 'IndexToDirect' ) index = infoObject.indices[ index ];\n\n\tconst from = index * infoObject.dataSize;\n\tconst to = from + infoObject.dataSize;\n\n\treturn slice( dataArray, infoObject.buffer, from, to );\n\n}\n\nconst tempEuler = new Euler();\nconst tempVec = new Vector3();\n\n// generate transformation from FBX transform data\n// ref: https://help.autodesk.com/view/FBX/2017/ENU/?guid=__files_GUID_10CDD63C_79C1_4F2D_BB28_AD2BE65A02ED_htm\n// ref: http://docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/index.html?url=cpp_ref/_transformations_2main_8cxx-example.html,topicNumber=cpp_ref__transformations_2main_8cxx_example_htmlfc10a1e1-b18d-4e72-9dc0-70d0f1959f5e\nfunction generateTransform( transformData ) {\n\n\tconst lTranslationM = new Matrix4();\n\tconst lPreRotationM = new Matrix4();\n\tconst lRotationM = new Matrix4();\n\tconst lPostRotationM = new Matrix4();\n\n\tconst lScalingM = new Matrix4();\n\tconst lScalingPivotM = new Matrix4();\n\tconst lScalingOffsetM = new Matrix4();\n\tconst lRotationOffsetM = new Matrix4();\n\tconst lRotationPivotM = new Matrix4();\n\n\tconst lParentGX = new Matrix4();\n\tconst lParentLX = new Matrix4();\n\tconst lGlobalT = new Matrix4();\n\n\tconst inheritType = ( transformData.inheritType ) ? transformData.inheritType : 0;\n\n\tif ( transformData.translation ) lTranslationM.setPosition( tempVec.fromArray( transformData.translation ) );\n\n\t// For Maya models using \"Joint Orient\", Euler order only applies to rotation, not pre/post-rotations\n\tconst defaultEulerOrder = getEulerOrder( 0 );\n\n\tif ( transformData.preRotation ) {\n\n\t\tconst array = transformData.preRotation.map( MathUtils.degToRad );\n\t\tarray.push( defaultEulerOrder );\n\t\tlPreRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.rotation ) {\n\n\t\tconst array = transformData.rotation.map( MathUtils.degToRad );\n\t\tarray.push( transformData.eulerOrder || defaultEulerOrder );\n\t\tlRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\n\t}\n\n\tif ( transformData.postRotation ) {\n\n\t\tconst array = transformData.postRotation.map( MathUtils.degToRad );\n\t\tarray.push( defaultEulerOrder );\n\t\tlPostRotationM.makeRotationFromEuler( tempEuler.fromArray( array ) );\n\t\tlPostRotationM.invert();\n\n\t}\n\n\tif ( transformData.scale ) lScalingM.scale( tempVec.fromArray( transformData.scale ) );\n\n\t// Pivots and offsets\n\tif ( transformData.scalingOffset ) lScalingOffsetM.setPosition( tempVec.fromArray( transformData.scalingOffset ) );\n\tif ( transformData.scalingPivot ) lScalingPivotM.setPosition( tempVec.fromArray( transformData.scalingPivot ) );\n\tif ( transformData.rotationOffset ) lRotationOffsetM.setPosition( tempVec.fromArray( transformData.rotationOffset ) );\n\tif ( transformData.rotationPivot ) lRotationPivotM.setPosition( tempVec.fromArray( transformData.rotationPivot ) );\n\n\t// parent transform\n\tif ( transformData.parentMatrixWorld ) {\n\n\t\tlParentLX.copy( transformData.parentMatrix );\n\t\tlParentGX.copy( transformData.parentMatrixWorld );\n\n\t}\n\n\tconst lLRM = lPreRotationM.clone().multiply( lRotationM ).multiply( lPostRotationM );\n\t// Global Rotation\n\tconst lParentGRM = new Matrix4();\n\tlParentGRM.extractRotation( lParentGX );\n\n\t// Global Shear*Scaling\n\tconst lParentTM = new Matrix4();\n\tlParentTM.copyPosition( lParentGX );\n\n\tconst lParentGRSM = lParentTM.clone().invert().multiply( lParentGX );\n\tconst lParentGSM = lParentGRM.clone().invert().multiply( lParentGRSM );\n\tconst lLSM = lScalingM;\n\n\tconst lGlobalRS = new Matrix4();\n\n\tif ( inheritType === 0 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM ).multiply( lLSM );\n\n\t} else if ( inheritType === 1 ) {\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lParentGSM ).multiply( lLRM ).multiply( lLSM );\n\n\t} else {\n\n\t\tconst lParentLSM = new Matrix4().scale( new Vector3().setFromMatrixScale( lParentLX ) );\n\t\tconst lParentLSM_inv = lParentLSM.clone().invert();\n\t\tconst lParentGSM_noLocal = lParentGSM.clone().multiply( lParentLSM_inv );\n\n\t\tlGlobalRS.copy( lParentGRM ).multiply( lLRM ).multiply( lParentGSM_noLocal ).multiply( lLSM );\n\n\t}\n\n\tconst lRotationPivotM_inv = lRotationPivotM.clone().invert();\n\tconst lScalingPivotM_inv = lScalingPivotM.clone().invert();\n\t// Calculate the local transform matrix\n\tlet lTransform = lTranslationM.clone().multiply( lRotationOffsetM ).multiply( lRotationPivotM ).multiply( lPreRotationM ).multiply( lRotationM ).multiply( lPostRotationM ).multiply( lRotationPivotM_inv ).multiply( lScalingOffsetM ).multiply( lScalingPivotM ).multiply( lScalingM ).multiply( lScalingPivotM_inv );\n\n\tconst lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition( lTransform );\n\n\tconst lGlobalTranslation = lParentGX.clone().multiply( lLocalTWithAllPivotAndOffsetInfo );\n\tlGlobalT.copyPosition( lGlobalTranslation );\n\n\tlTransform = lGlobalT.clone().multiply( lGlobalRS );\n\n\t// from global to local\n\tlTransform.premultiply( lParentGX.invert() );\n\n\treturn lTransform;\n\n}\n\n// Returns the three.js intrinsic Euler order corresponding to FBX extrinsic Euler order\n// ref: http://help.autodesk.com/view/FBX/2017/ENU/?guid=__cpp_ref_class_fbx_euler_html\nfunction getEulerOrder( order ) {\n\n\torder = order || 0;\n\n\tconst enums = [\n\t\t'ZYX', // -> XYZ extrinsic\n\t\t'YZX', // -> XZY extrinsic\n\t\t'XZY', // -> YZX extrinsic\n\t\t'ZXY', // -> YXZ extrinsic\n\t\t'YXZ', // -> ZXY extrinsic\n\t\t'XYZ', // -> ZYX extrinsic\n\t\t//'SphericXYZ', // not possible to support\n\t];\n\n\tif ( order === 6 ) {\n\n\t\tconsole.warn( 'THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.' );\n\t\treturn enums[ 0 ];\n\n\t}\n\n\treturn enums[ order ];\n\n}\n\n// Parses comma separated list of numbers and returns them an array.\n// Used internally by the TextParser\nfunction parseNumberArray( value ) {\n\n\tconst array = value.split( ',' ).map( function ( val ) {\n\n\t\treturn parseFloat( val );\n\n\t} );\n\n\treturn array;\n\n}\n\nfunction convertArrayBufferToString( buffer, from, to ) {\n\n\tif ( from === undefined ) from = 0;\n\tif ( to === undefined ) to = buffer.byteLength;\n\n\treturn new TextDecoder().decode( new Uint8Array( buffer, from, to ) );\n\n}\n\nfunction append( a, b ) {\n\n\tfor ( let i = 0, j = a.length, l = b.length; i < l; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n}\n\nfunction slice( a, b, from, to ) {\n\n\tfor ( let i = from, j = 0; i < to; i ++, j ++ ) {\n\n\t\ta[ j ] = b[ i ];\n\n\t}\n\n\treturn a;\n\n}\n\n\nexport { FBXLoader };\n","// FBX.tsx\nimport React, { useEffect, useMemo, useRef, memo } from \"react\";\nimport * as THREE from \"three\";\nimport { FBXLoader } from \"three/examples/jsm/loaders/FBXLoader\";\nimport { useViewContext, useFrame } from \"../utils/hooks\";\nimport Group, { GroupProps } from \"./Group\";\nimport { Label } from \"../primitives\";\n\ninterface FBXProps extends GroupProps {\n fbxPath?: string;\n fbxURL: string;\n actionIndex?: number;\n}\n\nfunction updateAllMaterials(\n color: string,\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n children: any,\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n materialProps: any\n): void {\n if (children == null) {\n return;\n }\n\n const _children = Array.isArray(children) ? children : [children];\n\n _children.map(object => {\n // Recurse into Groups\n if (object.constructor.name === \"Group\" && object.children) {\n updateAllMaterials(color, object.children, materialProps);\n }\n\n // @ts-ignore:TS2339 material does not exist on Object3D\n if (object.material) {\n if (color) {\n // @ts-ignore:TS2339 material does not exist on Object3D\n object.material.color.set(color);\n }\n Object.entries(materialProps).map(([propName, value]) => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore:TS2339 material does not exist on Object3D\n object.material[propName] = value;\n /* eslint-enable no-param-reassign */\n return null;\n });\n }\n\n return null;\n });\n}\n\ninterface LoadFBXProps {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n group: React.MutableRefObject<any>;\n fbxPath: string;\n fbxURL: string;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n mixer: React.MutableRefObject<any>;\n envMap: THREE.Texture;\n castShadow: boolean;\n receiveShadow: boolean;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n materialProps: any;\n actionIndex?: number;\n}\n\nfunction loadFBX({\n group,\n fbxPath,\n fbxURL,\n mixer,\n envMap,\n castShadow,\n receiveShadow,\n materialProps,\n actionIndex = 0\n}: LoadFBXProps): void {\n // No FBX\n if (fbxURL == null) {\n /* eslint-disable no-console */\n console.warn(\"[FBX] No fbxURL\");\n /* eslint-enable no-console */\n return;\n }\n\n // FBX\n const fbxLoader = new FBXLoader();\n fbxLoader.setPath(fbxPath);\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n fbxLoader.load(fbxURL, (fbx: any) => {\n if (group.current && fbx) {\n // Remove Loading Label or Previous OBJ\n if (group.current.children) {\n group.current.children.map(child => group.current.remove(child));\n }\n\n // Material Props\n if (materialProps) {\n const { color, ...otherMaterialProps } = materialProps;\n updateAllMaterials(color, fbx.scene.children, otherMaterialProps);\n }\n\n // Animation\n /* eslint-disable-next-line no-param-reassign */\n mixer.current = new THREE.AnimationMixer(fbx);\n if (fbx.animations && fbx.animations.length > 0) {\n const action = mixer.current.clipAction(fbx.animations[actionIndex]);\n action.play();\n }\n\n // Env Map + Shadows\n fbx.traverse(mesh => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore\n if (mesh.isMesh) {\n if (envMap) {\n // @ts-ignore\n mesh.material.envMap = envMap;\n }\n mesh.castShadow = castShadow;\n mesh.receiveShadow = receiveShadow;\n }\n /* eslint-enable no-param-reassign */\n });\n\n // Add FBX\n group.current.add(fbx);\n }\n });\n}\n\nconst FBX: React.FunctionComponent<FBXProps> = function FBX({\n fbxPath = \"\",\n fbxURL,\n actionIndex = 0,\n view3DEnvMap = false,\n castShadow = false,\n receiveShadow = false,\n ...otherProps\n}) {\n const group = useRef<THREE.Group | null>(null);\n const mixer = useRef<THREE.AnimationMixer | null>(null);\n const { envMap } = useViewContext();\n\n // Material Props\n const materialProps = useMemo(\n function updateMaterialProps() {\n // No Material Props\n if (!otherProps || Object.keys(otherProps).length === 0) {\n return undefined;\n }\n\n // Acceptable Material Props\n const materialPropsKeys = [\n \"color\",\n \"wireframe\",\n \"opacity\",\n \"transparent\",\n \"side\",\n \"depthWrite\",\n \"depthTest\"\n ];\n\n // Extract Acceptable Props\n const props = {};\n materialPropsKeys.map(propName => {\n if (otherProps[propName]) {\n props[propName] = otherProps[propName];\n }\n\n return null;\n });\n\n return Object.keys(props).length > 0 ? props : undefined;\n },\n [otherProps]\n );\n\n // Environment Map\n const _envMap = useMemo(\n function updateEnvMap() {\n if (view3DEnvMap) {\n return envMap;\n }\n\n return null;\n },\n [view3DEnvMap, envMap]\n );\n\n // Loading Text\n const loadingText = useMemo(\n function updateLoadText() {\n return fbxURL || \"No fbxURL\";\n },\n [fbxURL]\n );\n\n // Load FBX and Animation Mixer\n useEffect(\n function updateFBXandMixer() {\n if (group) {\n loadFBX({\n group,\n fbxPath,\n fbxURL,\n mixer,\n envMap: _envMap,\n castShadow,\n receiveShadow,\n materialProps,\n actionIndex\n });\n }\n },\n [\n group,\n fbxPath,\n fbxURL,\n actionIndex,\n _envMap,\n castShadow,\n receiveShadow,\n materialProps\n ]\n );\n\n // Animation Mixer Update\n const clock = new THREE.Clock();\n useFrame(function updateMixer() {\n const delta = clock.getDelta();\n if (mixer.current) {\n mixer.current.update(delta);\n }\n });\n\n return (\n <Group ref={group} {...otherProps}>\n <Label text={loadingText} textColor=\"red\" />\n </Group>\n );\n};\n\nconst FBXMemo = memo(FBX);\nFBXMemo.displayName = \"FBX\";\nexport default FBXMemo;\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tFloat32BufferAttribute,\n\tInstancedBufferAttribute,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tTrianglesDrawMode,\n\tVector3,\n} from 'three';\n\n/**\n * @module BufferGeometryUtils\n * @three_import import * as BufferGeometryUtils from 'three/addons/utils/BufferGeometryUtils.js';\n */\n\n/**\n * Computes vertex tangents using the MikkTSpace algorithm. MikkTSpace generates the same tangents consistently,\n * and is used in most modelling tools and normal map bakers. Use MikkTSpace for materials with normal maps,\n * because inconsistent tangents may lead to subtle visual issues in the normal map, particularly around mirrored\n * UV seams.\n *\n * In comparison to this method, {@link BufferGeometry#computeTangents} (a custom algorithm) generates tangents that\n * probably will not match the tangents in other software. The custom algorithm is sufficient for general use with a\n * custom material, and may be faster than MikkTSpace.\n *\n * Returns the original BufferGeometry. Indexed geometries will be de-indexed. Requires position, normal, and uv attributes.\n *\n * @param {BufferGeometry} geometry - The geometry to compute tangents for.\n * @param {Object} MikkTSpace - Instance of `examples/jsm/libs/mikktspace.module.js`, or `mikktspace` npm package.\n * Await `MikkTSpace.ready` before use.\n * @param {boolean} [negateSign=true] - Whether to negate the sign component (.w) of each tangent.\n * Required for normal map conventions in some formats, including glTF.\n * @return {BufferGeometry} The updated geometry.\n */\nfunction computeMikkTSpaceTangents( geometry, MikkTSpace, negateSign = true ) {\n\n\tif ( ! MikkTSpace || ! MikkTSpace.isReady ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Initialized MikkTSpace library required.' );\n\n\t}\n\n\tif ( ! geometry.hasAttribute( 'position' ) || ! geometry.hasAttribute( 'normal' ) || ! geometry.hasAttribute( 'uv' ) ) {\n\n\t\tthrow new Error( 'BufferGeometryUtils: Tangents require \"position\", \"normal\", and \"uv\" attributes.' );\n\n\t}\n\n\tfunction getAttributeArray( attribute ) {\n\n\t\tif ( attribute.normalized || attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst dstArray = new Float32Array( attribute.count * attribute.itemSize );\n\n\t\t\tfor ( let i = 0, j = 0; i < attribute.count; i ++ ) {\n\n\t\t\t\tdstArray[ j ++ ] = attribute.getX( i );\n\t\t\t\tdstArray[ j ++ ] = attribute.getY( i );\n\n\t\t\t\tif ( attribute.itemSize > 2 ) {\n\n\t\t\t\t\tdstArray[ j ++ ] = attribute.getZ( i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t\tif ( attribute.array instanceof Float32Array ) {\n\n\t\t\treturn attribute.array;\n\n\t\t}\n\n\t\treturn new Float32Array( attribute.array );\n\n\t}\n\n\t// MikkTSpace algorithm requires non-indexed input.\n\n\tconst _geometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\n\t// Compute vertex tangents.\n\n\tconst tangents = MikkTSpace.generateTangents(\n\n\t\tgetAttributeArray( _geometry.attributes.position ),\n\t\tgetAttributeArray( _geometry.attributes.normal ),\n\t\tgetAttributeArray( _geometry.attributes.uv )\n\n\t);\n\n\t// Texture coordinate convention of glTF differs from the apparent\n\t// default of the MikkTSpace library; .w component must be flipped.\n\n\tif ( negateSign ) {\n\n\t\tfor ( let i = 3; i < tangents.length; i += 4 ) {\n\n\t\t\ttangents[ i ] *= - 1;\n\n\t\t}\n\n\t}\n\n\t//\n\n\t_geometry.setAttribute( 'tangent', new BufferAttribute( tangents, 4 ) );\n\n\tif ( geometry !== _geometry ) {\n\n\t\tgeometry.copy( _geometry );\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * Merges a set of geometries into a single instance. All geometries must have compatible attributes.\n *\n * @param {Array<BufferGeometry>} geometries - The geometries to merge.\n * @param {boolean} [useGroups=false] - Whether to use groups or not.\n * @return {?BufferGeometry} The merged geometry. Returns `null` if the merge does not succeed.\n */\nfunction mergeGeometries( geometries, useGroups = false ) {\n\n\tconst isIndexed = geometries[ 0 ].index !== null;\n\n\tconst attributesUsed = new Set( Object.keys( geometries[ 0 ].attributes ) );\n\tconst morphAttributesUsed = new Set( Object.keys( geometries[ 0 ].morphAttributes ) );\n\n\tconst attributes = {};\n\tconst morphAttributes = {};\n\n\tconst morphTargetsRelative = geometries[ 0 ].morphTargetsRelative;\n\n\tconst mergedGeometry = new BufferGeometry();\n\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\tconst geometry = geometries[ i ];\n\t\tlet attributesCount = 0;\n\n\t\t// ensure that all geometries are indexed, or none\n\n\t\tif ( isIndexed !== ( geometry.index !== null ) ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather attributes, exit early if they're different\n\n\t\tfor ( const name in geometry.attributes ) {\n\n\t\t\tif ( ! attributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( attributes[ name ] === undefined ) attributes[ name ] = [];\n\n\t\t\tattributes[ name ].push( geometry.attributes[ name ] );\n\n\t\t\tattributesCount ++;\n\n\t\t}\n\n\t\t// ensure geometries have the same number of attributes\n\n\t\tif ( attributesCount !== attributesUsed.size ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. Make sure all geometries have the same number of attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\t// gather morph attributes, exit early if they're different\n\n\t\tif ( morphTargetsRelative !== geometry.morphTargetsRelative ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphTargetsRelative must be consistent throughout all geometries.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tfor ( const name in geometry.morphAttributes ) {\n\n\t\t\tif ( ! morphAttributesUsed.has( name ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. .morphAttributes must be consistent throughout all geometries.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tif ( morphAttributes[ name ] === undefined ) morphAttributes[ name ] = [];\n\n\t\t\tmorphAttributes[ name ].push( geometry.morphAttributes[ name ] );\n\n\t\t}\n\n\t\tif ( useGroups ) {\n\n\t\t\tlet count;\n\n\t\t\tif ( isIndexed ) {\n\n\t\t\t\tcount = geometry.index.count;\n\n\t\t\t} else if ( geometry.attributes.position !== undefined ) {\n\n\t\t\t\tcount = geometry.attributes.position.count;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed with geometry at index ' + i + '. The geometry must have either an index or a position attribute' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.addGroup( offset, count, i );\n\n\t\t\toffset += count;\n\n\t\t}\n\n\t}\n\n\t// merge indices\n\n\tif ( isIndexed ) {\n\n\t\tlet indexOffset = 0;\n\t\tconst mergedIndex = [];\n\n\t\tfor ( let i = 0; i < geometries.length; ++ i ) {\n\n\t\t\tconst index = geometries[ i ].index;\n\n\t\t\tfor ( let j = 0; j < index.count; ++ j ) {\n\n\t\t\t\tmergedIndex.push( index.getX( j ) + indexOffset );\n\n\t\t\t}\n\n\t\t\tindexOffset += geometries[ i ].attributes.position.count;\n\n\t\t}\n\n\t\tmergedGeometry.setIndex( mergedIndex );\n\n\t}\n\n\t// merge attributes\n\n\tfor ( const name in attributes ) {\n\n\t\tconst mergedAttribute = mergeAttributes( attributes[ name ] );\n\n\t\tif ( ! mergedAttribute ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' attribute.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tmergedGeometry.setAttribute( name, mergedAttribute );\n\n\t}\n\n\t// merge morph attributes\n\n\tfor ( const name in morphAttributes ) {\n\n\t\tconst numMorphTargets = morphAttributes[ name ][ 0 ].length;\n\n\t\tif ( numMorphTargets === 0 ) break;\n\n\t\tmergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n\t\tmergedGeometry.morphAttributes[ name ] = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; ++ i ) {\n\n\t\t\tconst morphAttributesToMerge = [];\n\n\t\t\tfor ( let j = 0; j < morphAttributes[ name ].length; ++ j ) {\n\n\t\t\t\tmorphAttributesToMerge.push( morphAttributes[ name ][ j ][ i ] );\n\n\t\t\t}\n\n\t\t\tconst mergedMorphAttribute = mergeAttributes( morphAttributesToMerge );\n\n\t\t\tif ( ! mergedMorphAttribute ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeGeometries() failed while trying to merge the ' + name + ' morphAttribute.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tmergedGeometry.morphAttributes[ name ].push( mergedMorphAttribute );\n\n\t\t}\n\n\t}\n\n\treturn mergedGeometry;\n\n}\n\n/**\n * Merges a set of attributes into a single instance. All attributes must have compatible properties and types.\n * Instances of {@link InterleavedBufferAttribute} are not supported.\n *\n * @param {Array<BufferAttribute>} attributes - The attributes to merge.\n * @return {?BufferAttribute} The merged attribute. Returns `null` if the merge does not succeed.\n */\nfunction mergeAttributes( attributes ) {\n\n\tlet TypedArray;\n\tlet itemSize;\n\tlet normalized;\n\tlet gpuType = - 1;\n\tlet arrayLength = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( itemSize === undefined ) itemSize = attribute.itemSize;\n\t\tif ( itemSize !== attribute.itemSize ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( normalized === undefined ) normalized = attribute.normalized;\n\t\tif ( normalized !== attribute.normalized ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tif ( gpuType === - 1 ) gpuType = attribute.gpuType;\n\t\tif ( gpuType !== attribute.gpuType ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils: .mergeAttributes() failed. BufferAttribute.gpuType must be consistent across matching attributes.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.count * itemSize;\n\n\t}\n\n\tconst array = new TypedArray( arrayLength );\n\tconst result = new BufferAttribute( array, itemSize, normalized );\n\tlet offset = 0;\n\n\tfor ( let i = 0; i < attributes.length; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\tconst tupleOffset = offset / itemSize;\n\t\t\tfor ( let j = 0, l = attribute.count; j < l; j ++ ) {\n\n\t\t\t\tfor ( let c = 0; c < itemSize; c ++ ) {\n\n\t\t\t\t\tconst value = attribute.getComponent( j, c );\n\t\t\t\t\tresult.setComponent( j + tupleOffset, c, value );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tarray.set( attribute.array, offset );\n\n\t\t}\n\n\t\toffset += attribute.count * itemSize;\n\n\t}\n\n\tif ( gpuType !== undefined ) {\n\n\t\tresult.gpuType = gpuType;\n\n\t}\n\n\treturn result;\n\n}\n\n/**\n * Performs a deep clone of the given buffer attribute.\n *\n * @param {BufferAttribute} attribute - The attribute to clone.\n * @return {BufferAttribute} The cloned attribute.\n */\nfunction deepCloneAttribute( attribute ) {\n\n\tif ( attribute.isInstancedInterleavedBufferAttribute || attribute.isInterleavedBufferAttribute ) {\n\n\t\treturn deinterleaveAttribute( attribute );\n\n\t}\n\n\tif ( attribute.isInstancedBufferAttribute ) {\n\n\t\treturn new InstancedBufferAttribute().copy( attribute );\n\n\t}\n\n\treturn new BufferAttribute().copy( attribute );\n\n}\n\n/**\n * Interleaves a set of attributes and returns a new array of corresponding attributes that share a\n * single {@link InterleavedBuffer} instance. All attributes must have compatible types.\n *\n * @param {Array<BufferAttribute>} attributes - The attributes to interleave.\n * @return {Array<InterleavedBufferAttribute>} An array of interleaved attributes. If interleave does not succeed, the method returns `null`.\n */\nfunction interleaveAttributes( attributes ) {\n\n\t// Interleaves the provided attributes into an InterleavedBuffer and returns\n\t// a set of InterleavedBufferAttributes for each attribute\n\tlet TypedArray;\n\tlet arrayLength = 0;\n\tlet stride = 0;\n\n\t// calculate the length and type of the interleavedBuffer\n\tfor ( let i = 0, l = attributes.length; i < l; ++ i ) {\n\n\t\tconst attribute = attributes[ i ];\n\n\t\tif ( TypedArray === undefined ) TypedArray = attribute.array.constructor;\n\t\tif ( TypedArray !== attribute.array.constructor ) {\n\n\t\t\tconsole.error( 'AttributeBuffers of different types cannot be interleaved' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tarrayLength += attribute.array.length;\n\t\tstride += attribute.itemSize;\n\n\t}\n\n\t// Create the set of buffer attributes\n\tconst interleavedBuffer = new InterleavedBuffer( new TypedArray( arrayLength ), stride );\n\tlet offset = 0;\n\tconst res = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\tfor ( let j = 0, l = attributes.length; j < l; j ++ ) {\n\n\t\tconst attribute = attributes[ j ];\n\t\tconst itemSize = attribute.itemSize;\n\t\tconst count = attribute.count;\n\t\tconst iba = new InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, attribute.normalized );\n\t\tres.push( iba );\n\n\t\toffset += itemSize;\n\n\t\t// Move the data for each attribute into the new interleavedBuffer\n\t\t// at the appropriate offset\n\t\tfor ( let c = 0; c < count; c ++ ) {\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\tiba[ setters[ k ] ]( c, attribute[ getters[ k ] ]( c ) );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\n/**\n * Returns a new, non-interleaved version of the given attribute.\n *\n * @param {InterleavedBufferAttribute} attribute - The interleaved attribute.\n * @return {BufferAttribute} The non-interleaved attribute.\n */\nfunction deinterleaveAttribute( attribute ) {\n\n\tconst cons = attribute.data.array.constructor;\n\tconst count = attribute.count;\n\tconst itemSize = attribute.itemSize;\n\tconst normalized = attribute.normalized;\n\n\tconst array = new cons( count * itemSize );\n\tlet newAttribute;\n\tif ( attribute.isInstancedInterleavedBufferAttribute ) {\n\n\t\tnewAttribute = new InstancedBufferAttribute( array, itemSize, normalized, attribute.meshPerAttribute );\n\n\t} else {\n\n\t\tnewAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t}\n\n\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\tnewAttribute.setX( i, attribute.getX( i ) );\n\n\t\tif ( itemSize >= 2 ) {\n\n\t\t\tnewAttribute.setY( i, attribute.getY( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 3 ) {\n\n\t\t\tnewAttribute.setZ( i, attribute.getZ( i ) );\n\n\t\t}\n\n\t\tif ( itemSize >= 4 ) {\n\n\t\t\tnewAttribute.setW( i, attribute.getW( i ) );\n\n\t\t}\n\n\t}\n\n\treturn newAttribute;\n\n}\n\n/**\n * Deinterleaves all attributes on the given geometry.\n *\n * @param {BufferGeometry} geometry - The geometry to deinterleave.\n */\nfunction deinterleaveGeometry( geometry ) {\n\n\tconst attributes = geometry.attributes;\n\tconst morphTargets = geometry.morphTargets;\n\tconst attrMap = new Map();\n\n\tfor ( const key in attributes ) {\n\n\t\tconst attr = attributes[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tattributes[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n\tfor ( const key in morphTargets ) {\n\n\t\tconst attr = morphTargets[ key ];\n\t\tif ( attr.isInterleavedBufferAttribute ) {\n\n\t\t\tif ( ! attrMap.has( attr ) ) {\n\n\t\t\t\tattrMap.set( attr, deinterleaveAttribute( attr ) );\n\n\t\t\t}\n\n\t\t\tmorphTargets[ key ] = attrMap.get( attr );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Returns the amount of bytes used by all attributes to represent the geometry.\n *\n * @param {BufferGeometry} geometry - The geometry.\n * @return {number} The estimate bytes used.\n */\nfunction estimateBytesUsed( geometry ) {\n\n\t// Return the estimated memory used by this geometry in bytes\n\t// Calculate using itemSize, count, and BYTES_PER_ELEMENT to account\n\t// for InterleavedBufferAttributes.\n\tlet mem = 0;\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst attr = geometry.getAttribute( name );\n\t\tmem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n\n\t}\n\n\tconst indices = geometry.getIndex();\n\tmem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n\treturn mem;\n\n}\n\n/**\n * Returns a new geometry with vertices for which all similar vertex attributes (within tolerance) are merged.\n *\n * @param {BufferGeometry} geometry - The geometry to merge vertices for.\n * @param {number} [tolerance=1e-4] - The tolerance value.\n * @return {BufferGeometry} - The new geometry with merged vertices.\n */\nfunction mergeVertices( geometry, tolerance = 1e-4 ) {\n\n\ttolerance = Math.max( tolerance, Number.EPSILON );\n\n\t// Generate an index buffer if the geometry doesn't have one, or optimize it\n\t// if it's already available.\n\tconst hashToIndex = {};\n\tconst indices = geometry.getIndex();\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst vertexCount = indices ? indices.count : positions.count;\n\n\t// next value for triangle indices\n\tlet nextIndex = 0;\n\n\t// attributes and new attribute arrays\n\tconst attributeNames = Object.keys( geometry.attributes );\n\tconst tmpAttributes = {};\n\tconst tmpMorphAttributes = {};\n\tconst newIndices = [];\n\tconst getters = [ 'getX', 'getY', 'getZ', 'getW' ];\n\tconst setters = [ 'setX', 'setY', 'setZ', 'setW' ];\n\n\t// Initialize the arrays, allocating space conservatively. Extra\n\t// space will be trimmed in the last step.\n\tfor ( let i = 0, l = attributeNames.length; i < l; i ++ ) {\n\n\t\tconst name = attributeNames[ i ];\n\t\tconst attr = geometry.attributes[ name ];\n\n\t\ttmpAttributes[ name ] = new attr.constructor(\n\t\t\tnew attr.array.constructor( attr.count * attr.itemSize ),\n\t\t\tattr.itemSize,\n\t\t\tattr.normalized\n\t\t);\n\n\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\tif ( morphAttributes ) {\n\n\t\t\tif ( ! tmpMorphAttributes[ name ] ) tmpMorphAttributes[ name ] = [];\n\t\t\tmorphAttributes.forEach( ( morphAttr, i ) => {\n\n\t\t\t\tconst array = new morphAttr.array.constructor( morphAttr.count * morphAttr.itemSize );\n\t\t\t\ttmpMorphAttributes[ name ][ i ] = new morphAttr.constructor( array, morphAttr.itemSize, morphAttr.normalized );\n\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n\t// convert the error tolerance to an amount of decimal places to truncate to\n\tconst halfTolerance = tolerance * 0.5;\n\tconst exponent = Math.log10( 1 / tolerance );\n\tconst hashMultiplier = Math.pow( 10, exponent );\n\tconst hashAdditive = halfTolerance * hashMultiplier;\n\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\tconst index = indices ? indices.getX( i ) : i;\n\n\t\t// Generate a hash for the vertex attributes at the current index 'i'\n\t\tlet hash = '';\n\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\tconst name = attributeNames[ j ];\n\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\tconst itemSize = attribute.itemSize;\n\n\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t// double tilde truncates the decimal value\n\t\t\t\thash += `${ ~ ~ ( attribute[ getters[ k ] ]( index ) * hashMultiplier + hashAdditive ) },`;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Add another reference to the vertex if it's already\n\t\t// used by another index\n\t\tif ( hash in hashToIndex ) {\n\n\t\t\tnewIndices.push( hashToIndex[ hash ] );\n\n\t\t} else {\n\n\t\t\t// copy data to the new index in the temporary attributes\n\t\t\tfor ( let j = 0, l = attributeNames.length; j < l; j ++ ) {\n\n\t\t\t\tconst name = attributeNames[ j ];\n\t\t\t\tconst attribute = geometry.getAttribute( name );\n\t\t\t\tconst morphAttributes = geometry.morphAttributes[ name ];\n\t\t\t\tconst itemSize = attribute.itemSize;\n\t\t\t\tconst newArray = tmpAttributes[ name ];\n\t\t\t\tconst newMorphArrays = tmpMorphAttributes[ name ];\n\n\t\t\t\tfor ( let k = 0; k < itemSize; k ++ ) {\n\n\t\t\t\t\tconst getterFunc = getters[ k ];\n\t\t\t\t\tconst setterFunc = setters[ k ];\n\t\t\t\t\tnewArray[ setterFunc ]( nextIndex, attribute[ getterFunc ]( index ) );\n\n\t\t\t\t\tif ( morphAttributes ) {\n\n\t\t\t\t\t\tfor ( let m = 0, ml = morphAttributes.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tnewMorphArrays[ m ][ setterFunc ]( nextIndex, morphAttributes[ m ][ getterFunc ]( index ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\thashToIndex[ hash ] = nextIndex;\n\t\t\tnewIndices.push( nextIndex );\n\t\t\tnextIndex ++;\n\n\t\t}\n\n\t}\n\n\t// generate result BufferGeometry\n\tconst result = geometry.clone();\n\tfor ( const name in geometry.attributes ) {\n\n\t\tconst tmpAttribute = tmpAttributes[ name ];\n\n\t\tresult.setAttribute( name, new tmpAttribute.constructor(\n\t\t\ttmpAttribute.array.slice( 0, nextIndex * tmpAttribute.itemSize ),\n\t\t\ttmpAttribute.itemSize,\n\t\t\ttmpAttribute.normalized,\n\t\t) );\n\n\t\tif ( ! ( name in tmpMorphAttributes ) ) continue;\n\n\t\tfor ( let j = 0; j < tmpMorphAttributes[ name ].length; j ++ ) {\n\n\t\t\tconst tmpMorphAttribute = tmpMorphAttributes[ name ][ j ];\n\n\t\t\tresult.morphAttributes[ name ][ j ] = new tmpMorphAttribute.constructor(\n\t\t\t\ttmpMorphAttribute.array.slice( 0, nextIndex * tmpMorphAttribute.itemSize ),\n\t\t\t\ttmpMorphAttribute.itemSize,\n\t\t\t\ttmpMorphAttribute.normalized,\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\t// indices\n\n\tresult.setIndex( newIndices );\n\n\treturn result;\n\n}\n\n/**\n * Returns a new indexed geometry based on `TrianglesDrawMode` draw mode.\n * This mode corresponds to the `gl.TRIANGLES` primitive in WebGL.\n *\n * @param {BufferGeometry} geometry - The geometry to convert.\n * @param {number} drawMode - The current draw mode.\n * @return {BufferGeometry} The new geometry using `TrianglesDrawMode`.\n */\nfunction toTrianglesDrawMode( geometry, drawMode ) {\n\n\tif ( drawMode === TrianglesDrawMode ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.' );\n\t\treturn geometry;\n\n\t}\n\n\tif ( drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode ) {\n\n\t\tlet index = geometry.getIndex();\n\n\t\t// generate index if not present\n\n\t\tif ( index === null ) {\n\n\t\t\tconst indices = [];\n\n\t\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tfor ( let i = 0; i < position.count; i ++ ) {\n\n\t\t\t\t\tindices.push( i );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.setIndex( indices );\n\t\t\t\tindex = geometry.getIndex();\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );\n\t\t\t\treturn geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tconst numberOfTriangles = index.count - 2;\n\t\tconst newIndices = [];\n\n\t\tif ( drawMode === TriangleFanDrawMode ) {\n\n\t\t\t// gl.TRIANGLE_FAN\n\n\t\t\tfor ( let i = 1; i <= numberOfTriangles; i ++ ) {\n\n\t\t\t\tnewIndices.push( index.getX( 0 ) );\n\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// gl.TRIANGLE_STRIP\n\n\t\t\tfor ( let i = 0; i < numberOfTriangles; i ++ ) {\n\n\t\t\t\tif ( i % 2 === 0 ) {\n\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewIndices.push( index.getX( i + 2 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i + 1 ) );\n\t\t\t\t\tnewIndices.push( index.getX( i ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( ( newIndices.length / 3 ) !== numberOfTriangles ) {\n\n\t\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );\n\n\t\t}\n\n\t\t// build final geometry\n\n\t\tconst newGeometry = geometry.clone();\n\t\tnewGeometry.setIndex( newIndices );\n\t\tnewGeometry.clearGroups();\n\n\t\treturn newGeometry;\n\n\t} else {\n\n\t\tconsole.error( 'THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:', drawMode );\n\t\treturn geometry;\n\n\t}\n\n}\n\n/**\n * Calculates the morphed attributes of a morphed/skinned BufferGeometry.\n *\n * Helpful for Raytracing or Decals (i.e. a `DecalGeometry` applied to a morphed Object with a `BufferGeometry`\n * will use the original `BufferGeometry`, not the morphed/skinned one, generating an incorrect result.\n * Using this function to create a shadow `Object3`D the `DecalGeometry` can be correctly generated).\n *\n * @param {Mesh|Line|Points} object - The 3D object to compute morph attributes for.\n * @return {Object} An object with original position/normal attributes and morphed ones.\n */\nfunction computeMorphedAttributes( object ) {\n\n\tconst _vA = new Vector3();\n\tconst _vB = new Vector3();\n\tconst _vC = new Vector3();\n\n\tconst _tempA = new Vector3();\n\tconst _tempB = new Vector3();\n\tconst _tempC = new Vector3();\n\n\tconst _morphA = new Vector3();\n\tconst _morphB = new Vector3();\n\tconst _morphC = new Vector3();\n\n\tfunction _calculateMorphedAttributeData(\n\t\tobject,\n\t\tattribute,\n\t\tmorphAttribute,\n\t\tmorphTargetsRelative,\n\t\ta,\n\t\tb,\n\t\tc,\n\t\tmodifiedAttributeArray\n\t) {\n\n\t\t_vA.fromBufferAttribute( attribute, a );\n\t\t_vB.fromBufferAttribute( attribute, b );\n\t\t_vC.fromBufferAttribute( attribute, c );\n\n\t\tconst morphInfluences = object.morphTargetInfluences;\n\n\t\tif ( morphAttribute && morphInfluences ) {\n\n\t\t\t_morphA.set( 0, 0, 0 );\n\t\t\t_morphB.set( 0, 0, 0 );\n\t\t\t_morphC.set( 0, 0, 0 );\n\n\t\t\tfor ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {\n\n\t\t\t\tconst influence = morphInfluences[ i ];\n\t\t\t\tconst morph = morphAttribute[ i ];\n\n\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t_tempA.fromBufferAttribute( morph, a );\n\t\t\t\t_tempB.fromBufferAttribute( morph, b );\n\t\t\t\t_tempC.fromBufferAttribute( morph, c );\n\n\t\t\t\tif ( morphTargetsRelative ) {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA, influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB, influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC, influence );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_morphA.addScaledVector( _tempA.sub( _vA ), influence );\n\t\t\t\t\t_morphB.addScaledVector( _tempB.sub( _vB ), influence );\n\t\t\t\t\t_morphC.addScaledVector( _tempC.sub( _vC ), influence );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_vA.add( _morphA );\n\t\t\t_vB.add( _morphB );\n\t\t\t_vC.add( _morphC );\n\n\t\t}\n\n\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\tobject.applyBoneTransform( a, _vA );\n\t\t\tobject.applyBoneTransform( b, _vB );\n\t\t\tobject.applyBoneTransform( c, _vC );\n\n\t\t}\n\n\t\tmodifiedAttributeArray[ a * 3 + 0 ] = _vA.x;\n\t\tmodifiedAttributeArray[ a * 3 + 1 ] = _vA.y;\n\t\tmodifiedAttributeArray[ a * 3 + 2 ] = _vA.z;\n\t\tmodifiedAttributeArray[ b * 3 + 0 ] = _vB.x;\n\t\tmodifiedAttributeArray[ b * 3 + 1 ] = _vB.y;\n\t\tmodifiedAttributeArray[ b * 3 + 2 ] = _vB.z;\n\t\tmodifiedAttributeArray[ c * 3 + 0 ] = _vC.x;\n\t\tmodifiedAttributeArray[ c * 3 + 1 ] = _vC.y;\n\t\tmodifiedAttributeArray[ c * 3 + 2 ] = _vC.z;\n\n\t}\n\n\tconst geometry = object.geometry;\n\tconst material = object.material;\n\n\tlet a, b, c;\n\tconst index = geometry.index;\n\tconst positionAttribute = geometry.attributes.position;\n\tconst morphPosition = geometry.morphAttributes.position;\n\tconst morphTargetsRelative = geometry.morphTargetsRelative;\n\tconst normalAttribute = geometry.attributes.normal;\n\tconst morphNormal = geometry.morphAttributes.position;\n\n\tconst groups = geometry.groups;\n\tconst drawRange = geometry.drawRange;\n\tlet i, j, il, jl;\n\tlet group;\n\tlet start, end;\n\n\tconst modifiedPosition = new Float32Array( positionAttribute.count * positionAttribute.itemSize );\n\tconst modifiedNormal = new Float32Array( normalAttribute.count * normalAttribute.itemSize );\n\n\tif ( index !== null ) {\n\n\t\t// indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = index.getX( j );\n\t\t\t\t\tb = index.getX( j + 1 );\n\t\t\t\t\tc = index.getX( j + 2 );\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( index.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = index.getX( i );\n\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\t// non-indexed buffer geometry\n\n\t\tif ( Array.isArray( material ) ) {\n\n\t\t\tfor ( i = 0, il = groups.length; i < il; i ++ ) {\n\n\t\t\t\tgroup = groups[ i ];\n\n\t\t\t\tstart = Math.max( group.start, drawRange.start );\n\t\t\t\tend = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) );\n\n\t\t\t\tfor ( j = start, jl = end; j < jl; j += 3 ) {\n\n\t\t\t\t\ta = j;\n\t\t\t\t\tb = j + 1;\n\t\t\t\t\tc = j + 2;\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tpositionAttribute,\n\t\t\t\t\t\tmorphPosition,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedPosition\n\t\t\t\t\t);\n\n\t\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\t\tobject,\n\t\t\t\t\t\tnormalAttribute,\n\t\t\t\t\t\tmorphNormal,\n\t\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\t\ta, b, c,\n\t\t\t\t\t\tmodifiedNormal\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tstart = Math.max( 0, drawRange.start );\n\t\t\tend = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );\n\n\t\t\tfor ( i = start, il = end; i < il; i += 3 ) {\n\n\t\t\t\ta = i;\n\t\t\t\tb = i + 1;\n\t\t\t\tc = i + 2;\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tpositionAttribute,\n\t\t\t\t\tmorphPosition,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedPosition\n\t\t\t\t);\n\n\t\t\t\t_calculateMorphedAttributeData(\n\t\t\t\t\tobject,\n\t\t\t\t\tnormalAttribute,\n\t\t\t\t\tmorphNormal,\n\t\t\t\t\tmorphTargetsRelative,\n\t\t\t\t\ta, b, c,\n\t\t\t\t\tmodifiedNormal\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tconst morphedPositionAttribute = new Float32BufferAttribute( modifiedPosition, 3 );\n\tconst morphedNormalAttribute = new Float32BufferAttribute( modifiedNormal, 3 );\n\n\treturn {\n\n\t\tpositionAttribute: positionAttribute,\n\t\tnormalAttribute: normalAttribute,\n\t\tmorphedPositionAttribute: morphedPositionAttribute,\n\t\tmorphedNormalAttribute: morphedNormalAttribute\n\n\t};\n\n}\n\n/**\n * Merges the {@link BufferGeometry#groups} for the given geometry.\n *\n * @param {BufferGeometry} geometry - The geometry to modify.\n * @return {BufferGeometry} - The updated geometry\n */\nfunction mergeGroups( geometry ) {\n\n\tif ( geometry.groups.length === 0 ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometryUtils.mergeGroups(): No groups are defined. Nothing to merge.' );\n\t\treturn geometry;\n\n\t}\n\n\tlet groups = geometry.groups;\n\n\t// sort groups by material index\n\n\tgroups = groups.sort( ( a, b ) => {\n\n\t\tif ( a.materialIndex !== b.materialIndex ) return a.materialIndex - b.materialIndex;\n\n\t\treturn a.start - b.start;\n\n\t} );\n\n\t// create index for non-indexed geometries\n\n\tif ( geometry.getIndex() === null ) {\n\n\t\tconst positionAttribute = geometry.getAttribute( 'position' );\n\t\tconst indices = [];\n\n\t\tfor ( let i = 0; i < positionAttribute.count; i += 3 ) {\n\n\t\t\tindices.push( i, i + 1, i + 2 );\n\n\t\t}\n\n\t\tgeometry.setIndex( indices );\n\n\t}\n\n\t// sort index\n\n\tconst index = geometry.getIndex();\n\n\tconst newIndices = [];\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tconst groupStart = group.start;\n\t\tconst groupLength = groupStart + group.count;\n\n\t\tfor ( let j = groupStart; j < groupLength; j ++ ) {\n\n\t\t\tnewIndices.push( index.getX( j ) );\n\n\t\t}\n\n\t}\n\n\tgeometry.dispose(); // Required to force buffer recreation\n\tgeometry.setIndex( newIndices );\n\n\t// update groups indices\n\n\tlet start = 0;\n\n\tfor ( let i = 0; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tgroup.start = start;\n\t\tstart += group.count;\n\n\t}\n\n\t// merge groups\n\n\tlet currentGroup = groups[ 0 ];\n\n\tgeometry.groups = [ currentGroup ];\n\n\tfor ( let i = 1; i < groups.length; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\n\t\tif ( currentGroup.materialIndex === group.materialIndex ) {\n\n\t\t\tcurrentGroup.count += group.count;\n\n\t\t} else {\n\n\t\t\tcurrentGroup = group;\n\t\t\tgeometry.groups.push( currentGroup );\n\n\t\t}\n\n\t}\n\n\treturn geometry;\n\n}\n\n/**\n * Modifies the supplied geometry if it is non-indexed, otherwise creates a new,\n * non-indexed geometry. Returns the geometry with smooth normals everywhere except\n * faces that meet at an angle greater than the crease angle.\n *\n * @param {BufferGeometry} geometry - The geometry to modify.\n * @param {number} [creaseAngle=Math.PI/3] - The crease angle in radians.\n * @return {BufferGeometry} - The updated geometry\n */\nfunction toCreasedNormals( geometry, creaseAngle = Math.PI / 3 /* 60 degrees */ ) {\n\n\tconst creaseDot = Math.cos( creaseAngle );\n\tconst hashMultiplier = ( 1 + 1e-10 ) * 1e2;\n\n\t// reusable vectors\n\tconst verts = [ new Vector3(), new Vector3(), new Vector3() ];\n\tconst tempVec1 = new Vector3();\n\tconst tempVec2 = new Vector3();\n\tconst tempNorm = new Vector3();\n\tconst tempNorm2 = new Vector3();\n\n\t// hashes a vector\n\tfunction hashVertex( v ) {\n\n\t\tconst x = ~ ~ ( v.x * hashMultiplier );\n\t\tconst y = ~ ~ ( v.y * hashMultiplier );\n\t\tconst z = ~ ~ ( v.z * hashMultiplier );\n\t\treturn `${x},${y},${z}`;\n\n\t}\n\n\t// BufferGeometry.toNonIndexed() warns if the geometry is non-indexed\n\t// and returns the original geometry\n\tconst resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n\tconst posAttr = resultGeometry.attributes.position;\n\tconst vertexMap = {};\n\n\t// find all the normals shared by commonly located vertices\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\t// add the normal to the map for all vertices\n\t\tconst normal = new Vector3().crossVectors( tempVec1, tempVec2 ).normalize();\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tif ( ! ( hash in vertexMap ) ) {\n\n\t\t\t\tvertexMap[ hash ] = [];\n\n\t\t\t}\n\n\t\t\tvertexMap[ hash ].push( normal );\n\n\t\t}\n\n\t}\n\n\t// average normals from all vertices that share a common location if they are within the\n\t// provided crease threshold\n\tconst normalArray = new Float32Array( posAttr.count * 3 );\n\tconst normAttr = new BufferAttribute( normalArray, 3, false );\n\tfor ( let i = 0, l = posAttr.count / 3; i < l; i ++ ) {\n\n\t\t// get the face normal for this vertex\n\t\tconst i3 = 3 * i;\n\t\tconst a = verts[ 0 ].fromBufferAttribute( posAttr, i3 + 0 );\n\t\tconst b = verts[ 1 ].fromBufferAttribute( posAttr, i3 + 1 );\n\t\tconst c = verts[ 2 ].fromBufferAttribute( posAttr, i3 + 2 );\n\n\t\ttempVec1.subVectors( c, b );\n\t\ttempVec2.subVectors( a, b );\n\n\t\ttempNorm.crossVectors( tempVec1, tempVec2 ).normalize();\n\n\t\t// average all normals that meet the threshold and set the normal value\n\t\tfor ( let n = 0; n < 3; n ++ ) {\n\n\t\t\tconst vert = verts[ n ];\n\t\t\tconst hash = hashVertex( vert );\n\t\t\tconst otherNormals = vertexMap[ hash ];\n\t\t\ttempNorm2.set( 0, 0, 0 );\n\n\t\t\tfor ( let k = 0, lk = otherNormals.length; k < lk; k ++ ) {\n\n\t\t\t\tconst otherNorm = otherNormals[ k ];\n\t\t\t\tif ( tempNorm.dot( otherNorm ) > creaseDot ) {\n\n\t\t\t\t\ttempNorm2.add( otherNorm );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ttempNorm2.normalize();\n\t\t\tnormAttr.setXYZ( i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z );\n\n\t\t}\n\n\t}\n\n\tresultGeometry.setAttribute( 'normal', normAttr );\n\treturn resultGeometry;\n\n}\n\nexport {\n\tcomputeMikkTSpaceTangents,\n\tmergeGeometries,\n\tmergeAttributes,\n\tdeepCloneAttribute,\n\tdeinterleaveAttribute,\n\tdeinterleaveGeometry,\n\tinterleaveAttributes,\n\testimateBytesUsed,\n\tmergeVertices,\n\ttoTrianglesDrawMode,\n\tcomputeMorphedAttributes,\n\tmergeGroups,\n\ttoCreasedNormals\n};\n","import {\n\tAnimationClip,\n\tBone,\n\tBox3,\n\tBufferAttribute,\n\tBufferGeometry,\n\tClampToEdgeWrapping,\n\tColor,\n\tColorManagement,\n\tDirectionalLight,\n\tDoubleSide,\n\tFileLoader,\n\tFrontSide,\n\tGroup,\n\tImageBitmapLoader,\n\tInstancedMesh,\n\tInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tInterpolant,\n\tInterpolateDiscrete,\n\tInterpolateLinear,\n\tLine,\n\tLineBasicMaterial,\n\tLineLoop,\n\tLineSegments,\n\tLinearFilter,\n\tLinearMipmapLinearFilter,\n\tLinearMipmapNearestFilter,\n\tLinearSRGBColorSpace,\n\tLoader,\n\tLoaderUtils,\n\tMaterial,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tMeshBasicMaterial,\n\tMeshPhysicalMaterial,\n\tMeshStandardMaterial,\n\tMirroredRepeatWrapping,\n\tNearestFilter,\n\tNearestMipmapLinearFilter,\n\tNearestMipmapNearestFilter,\n\tNumberKeyframeTrack,\n\tObject3D,\n\tOrthographicCamera,\n\tPerspectiveCamera,\n\tPointLight,\n\tPoints,\n\tPointsMaterial,\n\tPropertyBinding,\n\tQuaternion,\n\tQuaternionKeyframeTrack,\n\tRepeatWrapping,\n\tSkeleton,\n\tSkinnedMesh,\n\tSphere,\n\tSpotLight,\n\tTexture,\n\tTextureLoader,\n\tTriangleFanDrawMode,\n\tTriangleStripDrawMode,\n\tVector2,\n\tVector3,\n\tVectorKeyframeTrack,\n\tSRGBColorSpace,\n\tInstancedBufferAttribute\n} from 'three';\nimport { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';\n\n/**\n * A loader for the glTF 2.0 format.\n *\n * [glTF]{@link https://www.khronos.org/gltf/} (GL Transmission Format) is an [open format specification]{@link https://github.com/KhronosGroup/glTF/tree/main/specification/2.0}\n * for efficient delivery and loading of 3D content. Assets may be provided either in JSON (.gltf) or binary (.glb)\n * format. External files store textures (.jpg, .png) and additional binary data (.bin). A glTF asset may deliver\n * one or more scenes, including meshes, materials, textures, skins, skeletons, morph targets, animations, lights,\n * and/or cameras.\n *\n * `GLTFLoader` uses {@link ImageBitmapLoader} whenever possible. Be advised that image bitmaps are not\n * automatically GC-collected when they are no longer referenced, and they require special handling during\n * the disposal process.\n *\n * `GLTFLoader` supports the following glTF 2.0 extensions:\n * - KHR_draco_mesh_compression\n * - KHR_materials_clearcoat\n * - KHR_materials_dispersion\n * - KHR_materials_ior\n * - KHR_materials_specular\n * - KHR_materials_transmission\n * - KHR_materials_iridescence\n * - KHR_materials_unlit\n * - KHR_materials_volume\n * - KHR_mesh_quantization\n * - KHR_lights_punctual\n * - KHR_texture_basisu\n * - KHR_texture_transform\n * - EXT_texture_webp\n * - EXT_meshopt_compression\n * - EXT_mesh_gpu_instancing\n *\n * The following glTF 2.0 extension is supported by an external user plugin:\n * - [KHR_materials_variants]{@link https://github.com/takahirox/three-gltf-extensions}\n * - [MSFT_texture_dds]{@link https://github.com/takahirox/three-gltf-extensions}\n *\n * ```js\n * const loader = new GLTFLoader();\n *\n * // Optional: Provide a DRACOLoader instance to decode compressed mesh data\n * const dracoLoader = new DRACOLoader();\n * dracoLoader.setDecoderPath( '/examples/jsm/libs/draco/' );\n * loader.setDRACOLoader( dracoLoader );\n *\n * const gltf = await loader.loadAsync( 'models/gltf/duck/duck.gltf' );\n * scene.add( gltf.scene );\n * ```\n *\n * @augments Loader\n * @three_import import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';\n */\nclass GLTFLoader extends Loader {\n\n\t/**\n\t * Constructs a new glTF loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.dracoLoader = null;\n\t\tthis.ktx2Loader = null;\n\t\tthis.meshoptDecoder = null;\n\n\t\tthis.pluginCallbacks = [];\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsClearcoatExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsDispersionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureBasisUExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureWebPExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFTextureAVIFExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSheenExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsTransmissionExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsVolumeExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIorExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsEmissiveStrengthExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsSpecularExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsIridescenceExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsAnisotropyExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMaterialsBumpExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFLightsExtension( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshoptCompression( parser );\n\n\t\t} );\n\n\t\tthis.register( function ( parser ) {\n\n\t\t\treturn new GLTFMeshGpuInstancing( parser );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded glTF asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(GLTFLoader~LoadObject)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tlet resourcePath;\n\n\t\tif ( this.resourcePath !== '' ) {\n\n\t\t\tresourcePath = this.resourcePath;\n\n\t\t} else if ( this.path !== '' ) {\n\n\t\t\t// If a base path is set, resources will be relative paths from that plus the relative path of the gltf file\n\t\t\t// Example path = 'https://my-cnd-server.com/', url = 'assets/models/model.gltf'\n\t\t\t// resourcePath = 'https://my-cnd-server.com/assets/models/'\n\t\t\t// referenced resource 'model.bin' will be loaded from 'https://my-cnd-server.com/assets/models/model.bin'\n\t\t\t// referenced resource '../textures/texture.png' will be loaded from 'https://my-cnd-server.com/assets/textures/texture.png'\n\t\t\tconst relativeUrl = LoaderUtils.extractUrlBase( url );\n\t\t\tresourcePath = LoaderUtils.resolveURL( relativeUrl, this.path );\n\n\t\t} else {\n\n\t\t\tresourcePath = LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t\t// Tells the LoadingManager to track an extra item, which resolves after\n\t\t// the model is fully loaded. This means the count of items loaded will\n\t\t// be incorrect, but ensures manager.onLoad() does not fire early.\n\t\tthis.manager.itemStart( url );\n\n\t\tconst _onError = function ( e ) {\n\n\t\t\tif ( onError ) {\n\n\t\t\t\tonError( e );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( e );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t};\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tscope.parse( data, resourcePath, function ( gltf ) {\n\n\t\t\t\t\tonLoad( gltf );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, _onError );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\t_onError( e );\n\n\t\t\t}\n\n\t\t}, onProgress, _onError );\n\n\t}\n\n\t/**\n\t * Sets the given Draco loader to this loader. Required for decoding assets\n\t * compressed with the `KHR_draco_mesh_compression` extension.\n\t *\n\t * @param {DRACOLoader} dracoLoader - The Draco loader to set.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tsetDRACOLoader( dracoLoader ) {\n\n\t\tthis.dracoLoader = dracoLoader;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given KTX2 loader to this loader. Required for loading KTX2\n\t * compressed textures.\n\t *\n\t * @param {KTX2Loader} ktx2Loader - The KTX2 loader to set.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tsetKTX2Loader( ktx2Loader ) {\n\n\t\tthis.ktx2Loader = ktx2Loader;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the given meshopt decoder. Required for decoding assets\n\t * compressed with the `EXT_meshopt_compression` extension.\n\t *\n\t * @param {Object} meshoptDecoder - The meshopt decoder to set.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tsetMeshoptDecoder( meshoptDecoder ) {\n\n\t\tthis.meshoptDecoder = meshoptDecoder;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Registers a plugin callback. This API is internally used to implement the various\n\t * glTF extensions but can also used by third-party code to add additional logic\n\t * to the loader.\n\t *\n\t * @param {function(parser:GLTFParser)} callback - The callback function to register.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) === - 1 ) {\n\n\t\t\tthis.pluginCallbacks.push( callback );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Unregisters a plugin callback.\n\t *\n\t * @param {Function} callback - The callback function to unregister.\n\t * @return {GLTFLoader} A reference to this loader.\n\t */\n\tunregister( callback ) {\n\n\t\tif ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) {\n\n\t\t\tthis.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses the given FBX data and returns the resulting group.\n\t *\n\t * @param {string|ArrayBuffer} data - The raw glTF data.\n\t * @param {string} path - The URL base path.\n\t * @param {function(GLTFLoader~LoadObject)} onLoad - Executed when the loading process has been finished.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tparse( data, path, onLoad, onError ) {\n\n\t\tlet json;\n\t\tconst extensions = {};\n\t\tconst plugins = {};\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tif ( typeof data === 'string' ) {\n\n\t\t\tjson = JSON.parse( data );\n\n\t\t} else if ( data instanceof ArrayBuffer ) {\n\n\t\t\tconst magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );\n\n\t\t\tif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\t\ttry {\n\n\t\t\t\t\textensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tjson = JSON.parse( extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content );\n\n\t\t\t} else {\n\n\t\t\t\tjson = JSON.parse( textDecoder.decode( data ) );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tjson = data;\n\n\t\t}\n\n\t\tif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {\n\n\t\t\tif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst parser = new GLTFParser( json, {\n\n\t\t\tpath: path || this.resourcePath || '',\n\t\t\tcrossOrigin: this.crossOrigin,\n\t\t\trequestHeader: this.requestHeader,\n\t\t\tmanager: this.manager,\n\t\t\tktx2Loader: this.ktx2Loader,\n\t\t\tmeshoptDecoder: this.meshoptDecoder\n\n\t\t} );\n\n\t\tparser.fileLoader.setRequestHeader( this.requestHeader );\n\n\t\tfor ( let i = 0; i < this.pluginCallbacks.length; i ++ ) {\n\n\t\t\tconst plugin = this.pluginCallbacks[ i ]( parser );\n\n\t\t\tif ( ! plugin.name ) console.error( 'THREE.GLTFLoader: Invalid plugin found: missing name' );\n\n\t\t\tplugins[ plugin.name ] = plugin;\n\n\t\t\t// Workaround to avoid determining as unknown extension\n\t\t\t// in addUnknownExtensionsToUserData().\n\t\t\t// Remove this workaround if we move all the existing\n\t\t\t// extension handlers to plugin system\n\t\t\textensions[ plugin.name ] = true;\n\n\t\t}\n\n\t\tif ( json.extensionsUsed ) {\n\n\t\t\tfor ( let i = 0; i < json.extensionsUsed.length; ++ i ) {\n\n\t\t\t\tconst extensionName = json.extensionsUsed[ i ];\n\t\t\t\tconst extensionsRequired = json.extensionsRequired || [];\n\n\t\t\t\tswitch ( extensionName ) {\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MATERIALS_UNLIT:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMaterialsUnlitExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFTextureTransformExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase EXTENSIONS.KHR_MESH_QUANTIZATION:\n\t\t\t\t\t\textensions[ extensionName ] = new GLTFMeshQuantizationExtension();\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tparser.setExtensions( extensions );\n\t\tparser.setPlugins( plugins );\n\t\tparser.parse( onLoad, onError );\n\n\t}\n\n\t/**\n\t * Async version of {@link GLTFLoader#parse}.\n\t *\n\t * @async\n\t * @param {string|ArrayBuffer} data - The raw glTF data.\n\t * @param {string} path - The URL base path.\n\t * @return {Promise<GLTFLoader~LoadObject>} A Promise that resolves with the loaded glTF when the parsing has been finished.\n\t */\n\tparseAsync( data, path ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.parse( data, path, resolve, reject );\n\n\t\t} );\n\n\t}\n\n}\n\n/* GLTFREGISTRY */\n\nfunction GLTFRegistry() {\n\n\tlet objects = {};\n\n\treturn\t{\n\n\t\tget: function ( key ) {\n\n\t\t\treturn objects[ key ];\n\n\t\t},\n\n\t\tadd: function ( key, object ) {\n\n\t\t\tobjects[ key ] = object;\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete objects[ key ];\n\n\t\t},\n\n\t\tremoveAll: function () {\n\n\t\t\tobjects = {};\n\n\t\t}\n\n\t};\n\n}\n\n/*********************************/\n/********** EXTENSIONS ***********/\n/*********************************/\n\nconst EXTENSIONS = {\n\tKHR_BINARY_GLTF: 'KHR_binary_glTF',\n\tKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',\n\tKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',\n\tKHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat',\n\tKHR_MATERIALS_DISPERSION: 'KHR_materials_dispersion',\n\tKHR_MATERIALS_IOR: 'KHR_materials_ior',\n\tKHR_MATERIALS_SHEEN: 'KHR_materials_sheen',\n\tKHR_MATERIALS_SPECULAR: 'KHR_materials_specular',\n\tKHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',\n\tKHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',\n\tKHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',\n\tKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',\n\tKHR_MATERIALS_VOLUME: 'KHR_materials_volume',\n\tKHR_TEXTURE_BASISU: 'KHR_texture_basisu',\n\tKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',\n\tKHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',\n\tKHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',\n\tEXT_MATERIALS_BUMP: 'EXT_materials_bump',\n\tEXT_TEXTURE_WEBP: 'EXT_texture_webp',\n\tEXT_TEXTURE_AVIF: 'EXT_texture_avif',\n\tEXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',\n\tEXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'\n};\n\n/**\n * Punctual Lights Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n *\n * @private\n */\nclass GLTFLightsExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n\n\t\t// Object3D instance caches\n\t\tthis.cache = { refs: {}, uses: {} };\n\n\t}\n\n\t_markDefs() {\n\n\t\tconst parser = this.parser;\n\t\tconst nodeDefs = this.parser.json.nodes || [];\n\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.extensions\n\t\t\t\t\t&& nodeDef.extensions[ this.name ]\n\t\t\t\t\t&& nodeDef.extensions[ this.name ].light !== undefined ) {\n\n\t\t\t\tparser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_loadLight( lightIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst cacheKey = 'light:' + lightIndex;\n\t\tlet dependency = parser.cache.get( cacheKey );\n\n\t\tif ( dependency ) return dependency;\n\n\t\tconst json = parser.json;\n\t\tconst extensions = ( json.extensions && json.extensions[ this.name ] ) || {};\n\t\tconst lightDefs = extensions.lights || [];\n\t\tconst lightDef = lightDefs[ lightIndex ];\n\t\tlet lightNode;\n\n\t\tconst color = new Color( 0xffffff );\n\n\t\tif ( lightDef.color !== undefined ) color.setRGB( lightDef.color[ 0 ], lightDef.color[ 1 ], lightDef.color[ 2 ], LinearSRGBColorSpace );\n\n\t\tconst range = lightDef.range !== undefined ? lightDef.range : 0;\n\n\t\tswitch ( lightDef.type ) {\n\n\t\t\tcase 'directional':\n\t\t\t\tlightNode = new DirectionalLight( color );\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tcase 'point':\n\t\t\t\tlightNode = new PointLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\tbreak;\n\n\t\t\tcase 'spot':\n\t\t\t\tlightNode = new SpotLight( color );\n\t\t\t\tlightNode.distance = range;\n\t\t\t\t// Handle spotlight properties.\n\t\t\t\tlightDef.spot = lightDef.spot || {};\n\t\t\t\tlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;\n\t\t\t\tlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;\n\t\t\t\tlightNode.angle = lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n\t\t\t\tlightNode.target.position.set( 0, 0, - 1 );\n\t\t\t\tlightNode.add( lightNode.target );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type );\n\n\t\t}\n\n\t\t// Some lights (e.g. spot) default to a position other than the origin. Reset the position\n\t\t// here, because node-level parsing will only override position if explicitly specified.\n\t\tlightNode.position.set( 0, 0, 0 );\n\n\t\tassignExtrasToUserData( lightNode, lightDef );\n\n\t\tif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;\n\n\t\tlightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) );\n\n\t\tdependency = Promise.resolve( lightNode );\n\n\t\tparser.cache.add( cacheKey, dependency );\n\n\t\treturn dependency;\n\n\t}\n\n\tgetDependency( type, index ) {\n\n\t\tif ( type !== 'light' ) return;\n\n\t\treturn this._loadLight( index );\n\n\t}\n\n\tcreateNodeAttachment( nodeIndex ) {\n\n\t\tconst self = this;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\t\tconst lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {};\n\t\tconst lightIndex = lightDef.light;\n\n\t\tif ( lightIndex === undefined ) return null;\n\n\t\treturn this._loadLight( lightIndex ).then( function ( light ) {\n\n\t\t\treturn parser._getNodeRef( self.cache, lightIndex, light );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Unlit Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n *\n * @private\n */\nclass GLTFMaterialsUnlitExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n\n\t}\n\n\tgetMaterialType() {\n\n\t\treturn MeshBasicMaterial;\n\n\t}\n\n\textendParams( materialParams, materialDef, parser ) {\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\tmaterialParams.opacity = 1.0;\n\n\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness;\n\n\t\tif ( metallicRoughness ) {\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Emissive Strength Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/blob/5768b3ce0ef32bc39cdf1bef10b948586635ead3/extensions/2.0/Khronos/KHR_materials_emissive_strength/README.md\n *\n * @private\n */\nclass GLTFMaterialsEmissiveStrengthExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst emissiveStrength = materialDef.extensions[ this.name ].emissiveStrength;\n\n\t\tif ( emissiveStrength !== undefined ) {\n\n\t\t\tmaterialParams.emissiveIntensity = emissiveStrength;\n\n\t\t}\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Clearcoat Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat\n *\n * @private\n */\nclass GLTFMaterialsClearcoatExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.clearcoatFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoat = extension.clearcoatFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.clearcoatRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) );\n\n\t\t}\n\n\t\tif ( extension.clearcoatNormalTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) );\n\n\t\t\tif ( extension.clearcoatNormalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = extension.clearcoatNormalTexture.scale;\n\n\t\t\t\tmaterialParams.clearcoatNormalScale = new Vector2( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials dispersion Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_dispersion\n *\n * @private\n */\nclass GLTFMaterialsDispersionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.dispersion = extension.dispersion !== undefined ? extension.dispersion : 0;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Iridescence Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_iridescence\n *\n * @private\n */\nclass GLTFMaterialsIridescenceExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.iridescenceFactor !== undefined ) {\n\n\t\t\tmaterialParams.iridescence = extension.iridescenceFactor;\n\n\t\t}\n\n\t\tif ( extension.iridescenceTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceMap', extension.iridescenceTexture ) );\n\n\t\t}\n\n\t\tif ( extension.iridescenceIor !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceIOR = extension.iridescenceIor;\n\n\t\t}\n\n\t\tif ( materialParams.iridescenceThicknessRange === undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange = [ 100, 400 ];\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMinimum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 0 ] = extension.iridescenceThicknessMinimum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessMaximum !== undefined ) {\n\n\t\t\tmaterialParams.iridescenceThicknessRange[ 1 ] = extension.iridescenceThicknessMaximum;\n\n\t\t}\n\n\t\tif ( extension.iridescenceThicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'iridescenceThicknessMap', extension.iridescenceThicknessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Sheen Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_materials_sheen\n *\n * @private\n */\nclass GLTFMaterialsSheenExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tmaterialParams.sheenColor = new Color( 0, 0, 0 );\n\t\tmaterialParams.sheenRoughness = 0;\n\t\tmaterialParams.sheen = 1;\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.sheenColorFactor !== undefined ) {\n\n\t\t\tconst colorFactor = extension.sheenColorFactor;\n\t\t\tmaterialParams.sheenColor.setRGB( colorFactor[ 0 ], colorFactor[ 1 ], colorFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessFactor !== undefined ) {\n\n\t\t\tmaterialParams.sheenRoughness = extension.sheenRoughnessFactor;\n\n\t\t}\n\n\t\tif ( extension.sheenColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\tif ( extension.sheenRoughnessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'sheenRoughnessMap', extension.sheenRoughnessTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Transmission Materials Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission\n * Draft: https://github.com/KhronosGroup/glTF/pull/1698\n *\n * @private\n */\nclass GLTFMaterialsTransmissionExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.transmissionFactor !== undefined ) {\n\n\t\t\tmaterialParams.transmission = extension.transmissionFactor;\n\n\t\t}\n\n\t\tif ( extension.transmissionTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials Volume Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_volume\n *\n * @private\n */\nclass GLTFMaterialsVolumeExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.thickness = extension.thicknessFactor !== undefined ? extension.thicknessFactor : 0;\n\n\t\tif ( extension.thicknessTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'thicknessMap', extension.thicknessTexture ) );\n\n\t\t}\n\n\t\tmaterialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n\n\t\tconst colorArray = extension.attenuationColor || [ 1, 1, 1 ];\n\t\tmaterialParams.attenuationColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials ior Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_ior\n *\n * @private\n */\nclass GLTFMaterialsIorExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_IOR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.ior = extension.ior !== undefined ? extension.ior : 1.5;\n\n\t\treturn Promise.resolve();\n\n\t}\n\n}\n\n/**\n * Materials specular Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_specular\n *\n * @private\n */\nclass GLTFMaterialsSpecularExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.specularIntensity = extension.specularFactor !== undefined ? extension.specularFactor : 1.0;\n\n\t\tif ( extension.specularTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularIntensityMap', extension.specularTexture ) );\n\n\t\t}\n\n\t\tconst colorArray = extension.specularColorFactor || [ 1, 1, 1 ];\n\t\tmaterialParams.specularColor = new Color().setRGB( colorArray[ 0 ], colorArray[ 1 ], colorArray[ 2 ], LinearSRGBColorSpace );\n\n\t\tif ( extension.specularColorTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n\n/**\n * Materials bump Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_materials_bump\n *\n * @private\n */\nclass GLTFMaterialsBumpExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tmaterialParams.bumpScale = extension.bumpFactor !== undefined ? extension.bumpFactor : 1.0;\n\n\t\tif ( extension.bumpTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'bumpMap', extension.bumpTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * Materials anisotropy Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy\n *\n * @private\n */\nclass GLTFMaterialsAnisotropyExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n\n\t}\n\n\tgetMaterialType( materialIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;\n\n\t\treturn MeshPhysicalMaterial;\n\n\t}\n\n\textendMaterialParams( materialIndex, materialParams ) {\n\n\t\tconst parser = this.parser;\n\t\tconst materialDef = parser.json.materials[ materialIndex ];\n\n\t\tif ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {\n\n\t\t\treturn Promise.resolve();\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tconst extension = materialDef.extensions[ this.name ];\n\n\t\tif ( extension.anisotropyStrength !== undefined ) {\n\n\t\t\tmaterialParams.anisotropy = extension.anisotropyStrength;\n\n\t\t}\n\n\t\tif ( extension.anisotropyRotation !== undefined ) {\n\n\t\t\tmaterialParams.anisotropyRotation = extension.anisotropyRotation;\n\n\t\t}\n\n\t\tif ( extension.anisotropyTexture !== undefined ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n}\n\n/**\n * BasisU Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu\n *\n * @private\n */\nclass GLTFTextureBasisUExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ this.name ];\n\t\tconst loader = parser.options.ktx2Loader;\n\n\t\tif ( ! loader ) {\n\n\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' );\n\n\t\t\t} else {\n\n\t\t\t\t// Assumes that the extension is optional and that a fallback texture is present\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * WebP Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp\n *\n * @private\n */\nclass GLTFTextureWebPExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * AVIF Texture Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif\n *\n * @private\n */\nclass GLTFTextureAVIFExtension {\n\n\tconstructor( parser ) {\n\n\t\tthis.parser = parser;\n\t\tthis.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n\n\t}\n\n\tloadTexture( textureIndex ) {\n\n\t\tconst name = this.name;\n\t\tconst parser = this.parser;\n\t\tconst json = parser.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\n\t\tif ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst extension = textureDef.extensions[ name ];\n\t\tconst source = json.images[ extension.source ];\n\n\t\tlet loader = parser.textureLoader;\n\t\tif ( source.uri ) {\n\n\t\t\tconst handler = parser.options.manager.getHandler( source.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn parser.loadTextureImage( textureIndex, extension.source, loader );\n\n\t}\n\n}\n\n/**\n * meshopt BufferView Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression\n *\n * @private\n */\nclass GLTFMeshoptCompression {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n\t\tthis.parser = parser;\n\n\t}\n\n\tloadBufferView( index ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst bufferView = json.bufferViews[ index ];\n\n\t\tif ( bufferView.extensions && bufferView.extensions[ this.name ] ) {\n\n\t\t\tconst extensionDef = bufferView.extensions[ this.name ];\n\n\t\t\tconst buffer = this.parser.getDependency( 'buffer', extensionDef.buffer );\n\t\t\tconst decoder = this.parser.options.meshoptDecoder;\n\n\t\t\tif ( ! decoder || ! decoder.supported ) {\n\n\t\t\t\tif ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Assumes that the extension is optional and that fallback buffer data is present\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn buffer.then( function ( res ) {\n\n\t\t\t\tconst byteOffset = extensionDef.byteOffset || 0;\n\t\t\t\tconst byteLength = extensionDef.byteLength || 0;\n\n\t\t\t\tconst count = extensionDef.count;\n\t\t\t\tconst stride = extensionDef.byteStride;\n\n\t\t\t\tconst source = new Uint8Array( res, byteOffset, byteLength );\n\n\t\t\t\tif ( decoder.decodeGltfBufferAsync ) {\n\n\t\t\t\t\treturn decoder.decodeGltfBufferAsync( count, stride, source, extensionDef.mode, extensionDef.filter ).then( function ( res ) {\n\n\t\t\t\t\t\treturn res.buffer;\n\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Support for MeshoptDecoder 0.18 or earlier, without decodeGltfBufferAsync\n\t\t\t\t\treturn decoder.ready.then( function () {\n\n\t\t\t\t\t\tconst result = new ArrayBuffer( count * stride );\n\t\t\t\t\t\tdecoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter );\n\t\t\t\t\t\treturn result;\n\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * GPU Instancing Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing\n *\n * @private\n */\nclass GLTFMeshGpuInstancing {\n\n\tconstructor( parser ) {\n\n\t\tthis.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n\t\tthis.parser = parser;\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.parser.json;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( ! nodeDef.extensions || ! nodeDef.extensions[ this.name ] ||\n\t\t\tnodeDef.mesh === undefined ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst meshDef = json.meshes[ nodeDef.mesh ];\n\n\t\t// No Points or Lines + Instancing support yet\n\n\t\tfor ( const primitive of meshDef.primitives ) {\n\n\t\t\tif ( primitive.mode !== WEBGL_CONSTANTS.TRIANGLES &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP &&\n\t\t\t\t primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN &&\n\t\t\t\t primitive.mode !== undefined ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst extensionDef = nodeDef.extensions[ this.name ];\n\t\tconst attributesDef = extensionDef.attributes;\n\n\t\t// @TODO: Can we support InstancedMesh + SkinnedMesh?\n\n\t\tconst pending = [];\n\t\tconst attributes = {};\n\n\t\tfor ( const key in attributesDef ) {\n\n\t\t\tpending.push( this.parser.getDependency( 'accessor', attributesDef[ key ] ).then( accessor => {\n\n\t\t\t\tattributes[ key ] = accessor;\n\t\t\t\treturn attributes[ key ];\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tif ( pending.length < 1 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tpending.push( this.parser.createNodeMesh( nodeIndex ) );\n\n\t\treturn Promise.all( pending ).then( results => {\n\n\t\t\tconst nodeObject = results.pop();\n\t\t\tconst meshes = nodeObject.isGroup ? nodeObject.children : [ nodeObject ];\n\t\t\tconst count = results[ 0 ].count; // All attribute counts should be same\n\t\t\tconst instancedMeshes = [];\n\n\t\t\tfor ( const mesh of meshes ) {\n\n\t\t\t\t// Temporal variables\n\t\t\t\tconst m = new Matrix4();\n\t\t\t\tconst p = new Vector3();\n\t\t\t\tconst q = new Quaternion();\n\t\t\t\tconst s = new Vector3( 1, 1, 1 );\n\n\t\t\t\tconst instancedMesh = new InstancedMesh( mesh.geometry, mesh.material, count );\n\n\t\t\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\t\t\tif ( attributes.TRANSLATION ) {\n\n\t\t\t\t\t\tp.fromBufferAttribute( attributes.TRANSLATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.ROTATION ) {\n\n\t\t\t\t\t\tq.fromBufferAttribute( attributes.ROTATION, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attributes.SCALE ) {\n\n\t\t\t\t\t\ts.fromBufferAttribute( attributes.SCALE, i );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tinstancedMesh.setMatrixAt( i, m.compose( p, q, s ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Add instance attributes to the geometry, excluding TRS.\n\t\t\t\tfor ( const attributeName in attributes ) {\n\n\t\t\t\t\tif ( attributeName === '_COLOR_0' ) {\n\n\t\t\t\t\t\tconst attr = attributes[ attributeName ];\n\t\t\t\t\t\tinstancedMesh.instanceColor = new InstancedBufferAttribute( attr.array, attr.itemSize, attr.normalized );\n\n\t\t\t\t\t} else if ( attributeName !== 'TRANSLATION' &&\n\t\t\t\t\t\t attributeName !== 'ROTATION' &&\n\t\t\t\t\t\t attributeName !== 'SCALE' ) {\n\n\t\t\t\t\t\tmesh.geometry.setAttribute( attributeName, attributes[ attributeName ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Just in case\n\t\t\t\tObject3D.prototype.copy.call( instancedMesh, mesh );\n\n\t\t\t\tthis.parser.assignFinalMaterial( instancedMesh );\n\n\t\t\t\tinstancedMeshes.push( instancedMesh );\n\n\t\t\t}\n\n\t\t\tif ( nodeObject.isGroup ) {\n\n\t\t\t\tnodeObject.clear();\n\n\t\t\t\tnodeObject.add( ... instancedMeshes );\n\n\t\t\t\treturn nodeObject;\n\n\t\t\t}\n\n\t\t\treturn instancedMeshes[ 0 ];\n\n\t\t} );\n\n\t}\n\n}\n\n/* BINARY EXTENSION */\nconst BINARY_EXTENSION_HEADER_MAGIC = 'glTF';\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };\n\nclass GLTFBinaryExtension {\n\n\tconstructor( data ) {\n\n\t\tthis.name = EXTENSIONS.KHR_BINARY_GLTF;\n\t\tthis.content = null;\n\t\tthis.body = null;\n\n\t\tconst headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tconst textDecoder = new TextDecoder();\n\n\t\tthis.header = {\n\t\t\tmagic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),\n\t\t\tversion: headerView.getUint32( 4, true ),\n\t\t\tlength: headerView.getUint32( 8, true )\n\t\t};\n\n\t\tif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );\n\n\t\t} else if ( this.header.version < 2.0 ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected.' );\n\n\t\t}\n\n\t\tconst chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n\t\tconst chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );\n\t\tlet chunkIndex = 0;\n\n\t\twhile ( chunkIndex < chunkContentsLength ) {\n\n\t\t\tconst chunkLength = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tconst chunkType = chunkView.getUint32( chunkIndex, true );\n\t\t\tchunkIndex += 4;\n\n\t\t\tif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {\n\n\t\t\t\tconst contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );\n\t\t\t\tthis.content = textDecoder.decode( contentArray );\n\n\t\t\t} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {\n\n\t\t\t\tconst byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n\t\t\t\tthis.body = data.slice( byteOffset, byteOffset + chunkLength );\n\n\t\t\t}\n\n\t\t\t// Clients must ignore chunks with unknown types.\n\n\t\t\tchunkIndex += chunkLength;\n\n\t\t}\n\n\t\tif ( this.content === null ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * DRACO Mesh Compression Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n *\n * @private\n */\nclass GLTFDracoMeshCompressionExtension {\n\n\tconstructor( json, dracoLoader ) {\n\n\t\tif ( ! dracoLoader ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );\n\n\t\t}\n\n\t\tthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n\t\tthis.json = json;\n\t\tthis.dracoLoader = dracoLoader;\n\t\tthis.dracoLoader.preload();\n\n\t}\n\n\tdecodePrimitive( primitive, parser ) {\n\n\t\tconst json = this.json;\n\t\tconst dracoLoader = this.dracoLoader;\n\t\tconst bufferViewIndex = primitive.extensions[ this.name ].bufferView;\n\t\tconst gltfAttributeMap = primitive.extensions[ this.name ].attributes;\n\t\tconst threeAttributeMap = {};\n\t\tconst attributeNormalizedMap = {};\n\t\tconst attributeTypeMap = {};\n\n\t\tfor ( const attributeName in gltfAttributeMap ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];\n\n\t\t}\n\n\t\tfor ( const attributeName in primitive.attributes ) {\n\n\t\t\tconst threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();\n\n\t\t\tif ( gltfAttributeMap[ attributeName ] !== undefined ) {\n\n\t\t\t\tconst accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];\n\t\t\t\tconst componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t\tattributeTypeMap[ threeAttributeName ] = componentType.name;\n\t\t\t\tattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {\n\n\t\t\t\t\tfor ( const attributeName in geometry.attributes ) {\n\n\t\t\t\t\t\tconst attribute = geometry.attributes[ attributeName ];\n\t\t\t\t\t\tconst normalized = attributeNormalizedMap[ attributeName ];\n\n\t\t\t\t\t\tif ( normalized !== undefined ) attribute.normalized = normalized;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tresolve( geometry );\n\n\t\t\t\t}, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace, reject );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n\n/**\n * Texture Transform Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform\n *\n * @private\n */\nclass GLTFTextureTransformExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n\n\t}\n\n\textendTexture( texture, transform ) {\n\n\t\tif ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )\n\t\t\t&& transform.offset === undefined\n\t\t\t&& transform.rotation === undefined\n\t\t\t&& transform.scale === undefined ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21819.\n\t\t\treturn texture;\n\n\t\t}\n\n\t\ttexture = texture.clone();\n\n\t\tif ( transform.texCoord !== undefined ) {\n\n\t\t\ttexture.channel = transform.texCoord;\n\n\t\t}\n\n\t\tif ( transform.offset !== undefined ) {\n\n\t\t\ttexture.offset.fromArray( transform.offset );\n\n\t\t}\n\n\t\tif ( transform.rotation !== undefined ) {\n\n\t\t\ttexture.rotation = transform.rotation;\n\n\t\t}\n\n\t\tif ( transform.scale !== undefined ) {\n\n\t\t\ttexture.repeat.fromArray( transform.scale );\n\n\t\t}\n\n\t\ttexture.needsUpdate = true;\n\n\t\treturn texture;\n\n\t}\n\n}\n\n/**\n * Mesh Quantization Extension\n *\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization\n *\n * @private\n */\nclass GLTFMeshQuantizationExtension {\n\n\tconstructor() {\n\n\t\tthis.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n\n\t}\n\n}\n\n/*********************************/\n/********** INTERPOLATION ********/\n/*********************************/\n\n// Spline Interpolation\n// Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation\nclass GLTFCubicSplineInterpolant extends Interpolant {\n\n\tconstructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tsuper( parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tcopySampleValue_( index ) {\n\n\t\t// Copies a sample value to the result buffer. See description of glTF\n\t\t// CUBICSPLINE values layout in interpolate_() function below.\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tvalueSize = this.valueSize,\n\t\t\toffset = index * valueSize * 3 + valueSize;\n\n\t\tfor ( let i = 0; i !== valueSize; i ++ ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer;\n\t\tconst values = this.sampleValues;\n\t\tconst stride = this.valueSize;\n\n\t\tconst stride2 = stride * 2;\n\t\tconst stride3 = stride * 3;\n\n\t\tconst td = t1 - t0;\n\n\t\tconst p = ( t - t0 ) / td;\n\t\tconst pp = p * p;\n\t\tconst ppp = pp * p;\n\n\t\tconst offset1 = i1 * stride3;\n\t\tconst offset0 = offset1 - stride3;\n\n\t\tconst s2 = - 2 * ppp + 3 * pp;\n\t\tconst s3 = ppp - pp;\n\t\tconst s0 = 1 - s2;\n\t\tconst s1 = s3 - pp + p;\n\n\t\t// Layout of keyframe output values for CUBICSPLINE animations:\n\t\t// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ]\n\t\tfor ( let i = 0; i !== stride; i ++ ) {\n\n\t\t\tconst p0 = values[ offset0 + i + stride ]; // splineVertex_k\n\t\t\tconst m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)\n\t\t\tconst p1 = values[ offset1 + i + stride ]; // splineVertex_k+1\n\t\t\tconst m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)\n\n\t\t\tresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n}\n\nconst _quaternion = new Quaternion();\n\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n\n\tinterpolate_( i1, t0, t, t1 ) {\n\n\t\tconst result = super.interpolate_( i1, t0, t, t1 );\n\n\t\t_quaternion.fromArray( result ).normalize().toArray( result );\n\n\t\treturn result;\n\n\t}\n\n}\n\n\n/*********************************/\n/********** INTERNALS ************/\n/*********************************/\n\n/* CONSTANTS */\n\nconst WEBGL_CONSTANTS = {\n\tFLOAT: 5126,\n\t//FLOAT_MAT2: 35674,\n\tFLOAT_MAT3: 35675,\n\tFLOAT_MAT4: 35676,\n\tFLOAT_VEC2: 35664,\n\tFLOAT_VEC3: 35665,\n\tFLOAT_VEC4: 35666,\n\tLINEAR: 9729,\n\tREPEAT: 10497,\n\tSAMPLER_2D: 35678,\n\tPOINTS: 0,\n\tLINES: 1,\n\tLINE_LOOP: 2,\n\tLINE_STRIP: 3,\n\tTRIANGLES: 4,\n\tTRIANGLE_STRIP: 5,\n\tTRIANGLE_FAN: 6,\n\tUNSIGNED_BYTE: 5121,\n\tUNSIGNED_SHORT: 5123\n};\n\nconst WEBGL_COMPONENT_TYPES = {\n\t5120: Int8Array,\n\t5121: Uint8Array,\n\t5122: Int16Array,\n\t5123: Uint16Array,\n\t5125: Uint32Array,\n\t5126: Float32Array\n};\n\nconst WEBGL_FILTERS = {\n\t9728: NearestFilter,\n\t9729: LinearFilter,\n\t9984: NearestMipmapNearestFilter,\n\t9985: LinearMipmapNearestFilter,\n\t9986: NearestMipmapLinearFilter,\n\t9987: LinearMipmapLinearFilter\n};\n\nconst WEBGL_WRAPPINGS = {\n\t33071: ClampToEdgeWrapping,\n\t33648: MirroredRepeatWrapping,\n\t10497: RepeatWrapping\n};\n\nconst WEBGL_TYPE_SIZES = {\n\t'SCALAR': 1,\n\t'VEC2': 2,\n\t'VEC3': 3,\n\t'VEC4': 4,\n\t'MAT2': 4,\n\t'MAT3': 9,\n\t'MAT4': 16\n};\n\nconst ATTRIBUTES = {\n\tPOSITION: 'position',\n\tNORMAL: 'normal',\n\tTANGENT: 'tangent',\n\tTEXCOORD_0: 'uv',\n\tTEXCOORD_1: 'uv1',\n\tTEXCOORD_2: 'uv2',\n\tTEXCOORD_3: 'uv3',\n\tCOLOR_0: 'color',\n\tWEIGHTS_0: 'skinWeight',\n\tJOINTS_0: 'skinIndex',\n};\n\nconst PATH_PROPERTIES = {\n\tscale: 'scale',\n\ttranslation: 'position',\n\trotation: 'quaternion',\n\tweights: 'morphTargetInfluences'\n};\n\nconst INTERPOLATION = {\n\tCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n\t\t // keyframe track will be initialized with a default interpolation type, then modified.\n\tLINEAR: InterpolateLinear,\n\tSTEP: InterpolateDiscrete\n};\n\nconst ALPHA_MODES = {\n\tOPAQUE: 'OPAQUE',\n\tMASK: 'MASK',\n\tBLEND: 'BLEND'\n};\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material\n *\n * @private\n * @param {Object<string, Material>} cache\n * @return {Material}\n */\nfunction createDefaultMaterial( cache ) {\n\n\tif ( cache[ 'DefaultMaterial' ] === undefined ) {\n\n\t\tcache[ 'DefaultMaterial' ] = new MeshStandardMaterial( {\n\t\t\tcolor: 0xFFFFFF,\n\t\t\temissive: 0x000000,\n\t\t\tmetalness: 1,\n\t\t\troughness: 1,\n\t\t\ttransparent: false,\n\t\t\tdepthTest: true,\n\t\t\tside: FrontSide\n\t\t} );\n\n\t}\n\n\treturn cache[ 'DefaultMaterial' ];\n\n}\n\nfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {\n\n\t// Add unknown glTF extensions to an object's userData.\n\n\tfor ( const name in objectDef.extensions ) {\n\n\t\tif ( knownExtensions[ name ] === undefined ) {\n\n\t\t\tobject.userData.gltfExtensions = object.userData.gltfExtensions || {};\n\t\t\tobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];\n\n\t\t}\n\n\t}\n\n}\n\n/**\n *\n * @private\n * @param {Object3D|Material|BufferGeometry|Object} object\n * @param {GLTF.definition} gltfDef\n */\nfunction assignExtrasToUserData( object, gltfDef ) {\n\n\tif ( gltfDef.extras !== undefined ) {\n\n\t\tif ( typeof gltfDef.extras === 'object' ) {\n\n\t\t\tObject.assign( object.userData, gltfDef.extras );\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );\n\n\t\t}\n\n\t}\n\n}\n\n/**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets\n *\n * @private\n * @param {BufferGeometry} geometry\n * @param {Array<GLTF.Target>} targets\n * @param {GLTFParser} parser\n * @return {Promise<BufferGeometry>}\n */\nfunction addMorphTargets( geometry, targets, parser ) {\n\n\tlet hasMorphPosition = false;\n\tlet hasMorphNormal = false;\n\tlet hasMorphColor = false;\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( target.POSITION !== undefined ) hasMorphPosition = true;\n\t\tif ( target.NORMAL !== undefined ) hasMorphNormal = true;\n\t\tif ( target.COLOR_0 !== undefined ) hasMorphColor = true;\n\n\t\tif ( hasMorphPosition && hasMorphNormal && hasMorphColor ) break;\n\n\t}\n\n\tif ( ! hasMorphPosition && ! hasMorphNormal && ! hasMorphColor ) return Promise.resolve( geometry );\n\n\tconst pendingPositionAccessors = [];\n\tconst pendingNormalAccessors = [];\n\tconst pendingColorAccessors = [];\n\n\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\tconst target = targets[ i ];\n\n\t\tif ( hasMorphPosition ) {\n\n\t\t\tconst pendingAccessor = target.POSITION !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.POSITION )\n\t\t\t\t: geometry.attributes.position;\n\n\t\t\tpendingPositionAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphNormal ) {\n\n\t\t\tconst pendingAccessor = target.NORMAL !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.NORMAL )\n\t\t\t\t: geometry.attributes.normal;\n\n\t\t\tpendingNormalAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t\tif ( hasMorphColor ) {\n\n\t\t\tconst pendingAccessor = target.COLOR_0 !== undefined\n\t\t\t\t? parser.getDependency( 'accessor', target.COLOR_0 )\n\t\t\t\t: geometry.attributes.color;\n\n\t\t\tpendingColorAccessors.push( pendingAccessor );\n\n\t\t}\n\n\t}\n\n\treturn Promise.all( [\n\t\tPromise.all( pendingPositionAccessors ),\n\t\tPromise.all( pendingNormalAccessors ),\n\t\tPromise.all( pendingColorAccessors )\n\t] ).then( function ( accessors ) {\n\n\t\tconst morphPositions = accessors[ 0 ];\n\t\tconst morphNormals = accessors[ 1 ];\n\t\tconst morphColors = accessors[ 2 ];\n\n\t\tif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;\n\t\tif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;\n\t\tif ( hasMorphColor ) geometry.morphAttributes.color = morphColors;\n\t\tgeometry.morphTargetsRelative = true;\n\n\t\treturn geometry;\n\n\t} );\n\n}\n\n/**\n *\n * @private\n * @param {Mesh} mesh\n * @param {GLTF.Mesh} meshDef\n */\nfunction updateMorphTargets( mesh, meshDef ) {\n\n\tmesh.updateMorphTargets();\n\n\tif ( meshDef.weights !== undefined ) {\n\n\t\tfor ( let i = 0, il = meshDef.weights.length; i < il; i ++ ) {\n\n\t\t\tmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];\n\n\t\t}\n\n\t}\n\n\t// .extras has user-defined data, so check that .extras.targetNames is an array.\n\tif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {\n\n\t\tconst targetNames = meshDef.extras.targetNames;\n\n\t\tif ( mesh.morphTargetInfluences.length === targetNames.length ) {\n\n\t\t\tmesh.morphTargetDictionary = {};\n\n\t\t\tfor ( let i = 0, il = targetNames.length; i < il; i ++ ) {\n\n\t\t\t\tmesh.morphTargetDictionary[ targetNames[ i ] ] = i;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );\n\n\t\t}\n\n\t}\n\n}\n\nfunction createPrimitiveKey( primitiveDef ) {\n\n\tlet geometryKey;\n\n\tconst dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];\n\n\tif ( dracoExtension ) {\n\n\t\tgeometryKey = 'draco:' + dracoExtension.bufferView\n\t\t\t\t+ ':' + dracoExtension.indices\n\t\t\t\t+ ':' + createAttributesKey( dracoExtension.attributes );\n\n\t} else {\n\n\t\tgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;\n\n\t}\n\n\tif ( primitiveDef.targets !== undefined ) {\n\n\t\tfor ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {\n\n\t\t\tgeometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );\n\n\t\t}\n\n\t}\n\n\treturn geometryKey;\n\n}\n\nfunction createAttributesKey( attributes ) {\n\n\tlet attributesKey = '';\n\n\tconst keys = Object.keys( attributes ).sort();\n\n\tfor ( let i = 0, il = keys.length; i < il; i ++ ) {\n\n\t\tattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';\n\n\t}\n\n\treturn attributesKey;\n\n}\n\nfunction getNormalizedComponentScale( constructor ) {\n\n\t// Reference:\n\t// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data\n\n\tswitch ( constructor ) {\n\n\t\tcase Int8Array:\n\t\t\treturn 1 / 127;\n\n\t\tcase Uint8Array:\n\t\t\treturn 1 / 255;\n\n\t\tcase Int16Array:\n\t\t\treturn 1 / 32767;\n\n\t\tcase Uint16Array:\n\t\t\treturn 1 / 65535;\n\n\t\tdefault:\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Unsupported normalized accessor component type.' );\n\n\t}\n\n}\n\nfunction getImageURIMimeType( uri ) {\n\n\tif ( uri.search( /\\.jpe?g($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/jpeg/ ) === 0 ) return 'image/jpeg';\n\tif ( uri.search( /\\.webp($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/webp/ ) === 0 ) return 'image/webp';\n\tif ( uri.search( /\\.ktx2($|\\?)/i ) > 0 || uri.search( /^data\\:image\\/ktx2/ ) === 0 ) return 'image/ktx2';\n\n\treturn 'image/png';\n\n}\n\nconst _identityMatrix = new Matrix4();\n\n/* GLTF PARSER */\n\nclass GLTFParser {\n\n\tconstructor( json = {}, options = {} ) {\n\n\t\tthis.json = json;\n\t\tthis.extensions = {};\n\t\tthis.plugins = {};\n\t\tthis.options = options;\n\n\t\t// loader object cache\n\t\tthis.cache = new GLTFRegistry();\n\n\t\t// associations between Three.js objects and glTF elements\n\t\tthis.associations = new Map();\n\n\t\t// BufferGeometry caching\n\t\tthis.primitiveCache = {};\n\n\t\t// Node cache\n\t\tthis.nodeCache = {};\n\n\t\t// Object3D instance caches\n\t\tthis.meshCache = { refs: {}, uses: {} };\n\t\tthis.cameraCache = { refs: {}, uses: {} };\n\t\tthis.lightCache = { refs: {}, uses: {} };\n\n\t\tthis.sourceCache = {};\n\t\tthis.textureCache = {};\n\n\t\t// Track node names, to ensure no duplicates\n\t\tthis.nodeNamesUsed = {};\n\n\t\t// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the\n\t\t// expensive work of uploading a texture to the GPU off the main thread.\n\n\t\tlet isSafari = false;\n\t\tlet safariVersion = - 1;\n\t\tlet isFirefox = false;\n\t\tlet firefoxVersion = - 1;\n\n\t\tif ( typeof navigator !== 'undefined' ) {\n\n\t\t\tconst userAgent = navigator.userAgent;\n\n\t\t\tisSafari = /^((?!chrome|android).)*safari/i.test( userAgent ) === true;\n\t\t\tconst safariMatch = userAgent.match( /Version\\/(\\d+)/ );\n\t\t\tsafariVersion = isSafari && safariMatch ? parseInt( safariMatch[ 1 ], 10 ) : - 1;\n\n\t\t\tisFirefox = userAgent.indexOf( 'Firefox' ) > - 1;\n\t\t\tfirefoxVersion = isFirefox ? userAgent.match( /Firefox\\/([0-9]+)\\./ )[ 1 ] : - 1;\n\n\t\t}\n\n\t\tif ( typeof createImageBitmap === 'undefined' || ( isSafari && safariVersion < 17 ) || ( isFirefox && firefoxVersion < 98 ) ) {\n\n\t\t\tthis.textureLoader = new TextureLoader( this.options.manager );\n\n\t\t} else {\n\n\t\t\tthis.textureLoader = new ImageBitmapLoader( this.options.manager );\n\n\t\t}\n\n\t\tthis.textureLoader.setCrossOrigin( this.options.crossOrigin );\n\t\tthis.textureLoader.setRequestHeader( this.options.requestHeader );\n\n\t\tthis.fileLoader = new FileLoader( this.options.manager );\n\t\tthis.fileLoader.setResponseType( 'arraybuffer' );\n\n\t\tif ( this.options.crossOrigin === 'use-credentials' ) {\n\n\t\t\tthis.fileLoader.setWithCredentials( true );\n\n\t\t}\n\n\t}\n\n\tsetExtensions( extensions ) {\n\n\t\tthis.extensions = extensions;\n\n\t}\n\n\tsetPlugins( plugins ) {\n\n\t\tthis.plugins = plugins;\n\n\t}\n\n\tparse( onLoad, onError ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\t// Clear the loader cache\n\t\tthis.cache.removeAll();\n\t\tthis.nodeCache = {};\n\n\t\t// Mark the special nodes/meshes in json for efficient parse\n\t\tthis._invokeAll( function ( ext ) {\n\n\t\t\treturn ext._markDefs && ext._markDefs();\n\n\t\t} );\n\n\t\tPromise.all( this._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.beforeRoot && ext.beforeRoot();\n\n\t\t} ) ).then( function () {\n\n\t\t\treturn Promise.all( [\n\n\t\t\t\tparser.getDependencies( 'scene' ),\n\t\t\t\tparser.getDependencies( 'animation' ),\n\t\t\t\tparser.getDependencies( 'camera' ),\n\n\t\t\t] );\n\n\t\t} ).then( function ( dependencies ) {\n\n\t\t\tconst result = {\n\t\t\t\tscene: dependencies[ 0 ][ json.scene || 0 ],\n\t\t\t\tscenes: dependencies[ 0 ],\n\t\t\t\tanimations: dependencies[ 1 ],\n\t\t\t\tcameras: dependencies[ 2 ],\n\t\t\t\tasset: json.asset,\n\t\t\t\tparser: parser,\n\t\t\t\tuserData: {}\n\t\t\t};\n\n\t\t\taddUnknownExtensionsToUserData( extensions, result, json );\n\n\t\t\tassignExtrasToUserData( result, json );\n\n\t\t\treturn Promise.all( parser._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.afterRoot && ext.afterRoot( result );\n\n\t\t\t} ) ).then( function () {\n\n\t\t\t\tfor ( const scene of result.scenes ) {\n\n\t\t\t\t\tscene.updateMatrixWorld();\n\n\t\t\t\t}\n\n\t\t\t\tonLoad( result );\n\n\t\t\t} );\n\n\t\t} ).catch( onError );\n\n\t}\n\n\t/**\n\t * Marks the special nodes/meshes in json for efficient parse.\n\t *\n\t * @private\n\t */\n\t_markDefs() {\n\n\t\tconst nodeDefs = this.json.nodes || [];\n\t\tconst skinDefs = this.json.skins || [];\n\t\tconst meshDefs = this.json.meshes || [];\n\n\t\t// Nothing in the node definition indicates whether it is a Bone or an\n\t\t// Object3D. Use the skins' joint references to mark bones.\n\t\tfor ( let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {\n\n\t\t\tconst joints = skinDefs[ skinIndex ].joints;\n\n\t\t\tfor ( let i = 0, il = joints.length; i < il; i ++ ) {\n\n\t\t\t\tnodeDefs[ joints[ i ] ].isBone = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Iterate over all nodes, marking references to shared resources,\n\t\t// as well as skeleton joints.\n\t\tfor ( let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {\n\n\t\t\tconst nodeDef = nodeDefs[ nodeIndex ];\n\n\t\t\tif ( nodeDef.mesh !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.meshCache, nodeDef.mesh );\n\n\t\t\t\t// Nothing in the mesh definition indicates whether it is\n\t\t\t\t// a SkinnedMesh or Mesh. Use the node's mesh reference\n\t\t\t\t// to mark SkinnedMesh if node has skin.\n\t\t\t\tif ( nodeDef.skin !== undefined ) {\n\n\t\t\t\t\tmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\t\tthis._addNodeRef( this.cameraCache, nodeDef.camera );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Counts references to shared node / Object3D resources. These resources\n\t * can be reused, or \"instantiated\", at multiple nodes in the scene\n\t * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n\t * be marked. Non-scenegraph resources (like Materials, Geometries, and\n\t * Textures) can be reused directly and are not marked here.\n\t *\n\t * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n\t *\n\t * @private\n\t * @param {Object} cache\n\t * @param {Object3D} index\n\t */\n\t_addNodeRef( cache, index ) {\n\n\t\tif ( index === undefined ) return;\n\n\t\tif ( cache.refs[ index ] === undefined ) {\n\n\t\t\tcache.refs[ index ] = cache.uses[ index ] = 0;\n\n\t\t}\n\n\t\tcache.refs[ index ] ++;\n\n\t}\n\n\t/**\n\t * Returns a reference to a shared resource, cloning it if necessary.\n\t *\n\t * @private\n\t * @param {Object} cache\n\t * @param {number} index\n\t * @param {Object} object\n\t * @return {Object}\n\t */\n\t_getNodeRef( cache, index, object ) {\n\n\t\tif ( cache.refs[ index ] <= 1 ) return object;\n\n\t\tconst ref = object.clone();\n\n\t\t// Propagates mappings to the cloned object, prevents mappings on the\n\t\t// original object from being lost.\n\t\tconst updateMappings = ( original, clone ) => {\n\n\t\t\tconst mappings = this.associations.get( original );\n\t\t\tif ( mappings != null ) {\n\n\t\t\t\tthis.associations.set( clone, mappings );\n\n\t\t\t}\n\n\t\t\tfor ( const [ i, child ] of original.children.entries() ) {\n\n\t\t\t\tupdateMappings( child, clone.children[ i ] );\n\n\t\t\t}\n\n\t\t};\n\n\t\tupdateMappings( object, ref );\n\n\t\tref.name += '_instance_' + ( cache.uses[ index ] ++ );\n\n\t\treturn ref;\n\n\t}\n\n\t_invokeOne( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.push( this );\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) return result;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t_invokeAll( func ) {\n\n\t\tconst extensions = Object.values( this.plugins );\n\t\textensions.unshift( this );\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0; i < extensions.length; i ++ ) {\n\n\t\t\tconst result = func( extensions[ i ] );\n\n\t\t\tif ( result ) pending.push( result );\n\n\t\t}\n\n\t\treturn pending;\n\n\t}\n\n\t/**\n\t * Requests the specified dependency asynchronously, with caching.\n\t *\n\t * @private\n\t * @param {string} type\n\t * @param {number} index\n\t * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n\t */\n\tgetDependency( type, index ) {\n\n\t\tconst cacheKey = type + ':' + index;\n\t\tlet dependency = this.cache.get( cacheKey );\n\n\t\tif ( ! dependency ) {\n\n\t\t\tswitch ( type ) {\n\n\t\t\t\tcase 'scene':\n\t\t\t\t\tdependency = this.loadScene( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'node':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadNode && ext.loadNode( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'mesh':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMesh && ext.loadMesh( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'accessor':\n\t\t\t\t\tdependency = this.loadAccessor( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bufferView':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadBufferView && ext.loadBufferView( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'buffer':\n\t\t\t\t\tdependency = this.loadBuffer( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'material':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadMaterial && ext.loadMaterial( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'texture':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadTexture && ext.loadTexture( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'skin':\n\t\t\t\t\tdependency = this.loadSkin( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'animation':\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext.loadAnimation && ext.loadAnimation( index );\n\n\t\t\t\t\t} );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'camera':\n\t\t\t\t\tdependency = this.loadCamera( index );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tdependency = this._invokeOne( function ( ext ) {\n\n\t\t\t\t\t\treturn ext != this && ext.getDependency && ext.getDependency( type, index );\n\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( ! dependency ) {\n\n\t\t\t\t\t\tthrow new Error( 'Unknown type: ' + type );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tthis.cache.add( cacheKey, dependency );\n\n\t\t}\n\n\t\treturn dependency;\n\n\t}\n\n\t/**\n\t * Requests all dependencies of the specified type asynchronously, with caching.\n\t *\n\t * @private\n\t * @param {string} type\n\t * @return {Promise<Array<Object>>}\n\t */\n\tgetDependencies( type ) {\n\n\t\tlet dependencies = this.cache.get( type );\n\n\t\tif ( ! dependencies ) {\n\n\t\t\tconst parser = this;\n\t\t\tconst defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];\n\n\t\t\tdependencies = Promise.all( defs.map( function ( def, index ) {\n\n\t\t\t\treturn parser.getDependency( type, index );\n\n\t\t\t} ) );\n\n\t\t\tthis.cache.add( type, dependencies );\n\n\t\t}\n\n\t\treturn dependencies;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t *\n\t * @private\n\t * @param {number} bufferIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tloadBuffer( bufferIndex ) {\n\n\t\tconst bufferDef = this.json.buffers[ bufferIndex ];\n\t\tconst loader = this.fileLoader;\n\n\t\tif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );\n\n\t\t}\n\n\t\t// If present, GLB container is required to be the first buffer.\n\t\tif ( bufferDef.uri === undefined && bufferIndex === 0 ) {\n\n\t\t\treturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );\n\n\t\t}\n\n\t\tconst options = this.options;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tloader.load( LoaderUtils.resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {\n\n\t\t\t\treject( new Error( 'THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".' ) );\n\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n\t *\n\t * @private\n\t * @param {number} bufferViewIndex\n\t * @return {Promise<ArrayBuffer>}\n\t */\n\tloadBufferView( bufferViewIndex ) {\n\n\t\tconst bufferViewDef = this.json.bufferViews[ bufferViewIndex ];\n\n\t\treturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {\n\n\t\t\tconst byteLength = bufferViewDef.byteLength || 0;\n\t\t\tconst byteOffset = bufferViewDef.byteOffset || 0;\n\t\t\treturn buffer.slice( byteOffset, byteOffset + byteLength );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n\t *\n\t * @private\n\t * @param {number} accessorIndex\n\t * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n\t */\n\tloadAccessor( accessorIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst accessorDef = this.json.accessors[ accessorIndex ];\n\n\t\tif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\t\t\tconst normalized = accessorDef.normalized === true;\n\n\t\t\tconst array = new TypedArray( accessorDef.count * itemSize );\n\t\t\treturn Promise.resolve( new BufferAttribute( array, itemSize, normalized ) );\n\n\t\t}\n\n\t\tconst pendingBufferViews = [];\n\n\t\tif ( accessorDef.bufferView !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );\n\n\t\t} else {\n\n\t\t\tpendingBufferViews.push( null );\n\n\t\t}\n\n\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );\n\t\t\tpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );\n\n\t\t}\n\n\t\treturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {\n\n\t\t\tconst bufferView = bufferViews[ 0 ];\n\n\t\t\tconst itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];\n\t\t\tconst TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];\n\n\t\t\t// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.\n\t\t\tconst elementBytes = TypedArray.BYTES_PER_ELEMENT;\n\t\t\tconst itemBytes = elementBytes * itemSize;\n\t\t\tconst byteOffset = accessorDef.byteOffset || 0;\n\t\t\tconst byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;\n\t\t\tconst normalized = accessorDef.normalized === true;\n\t\t\tlet array, bufferAttribute;\n\n\t\t\t// The buffer is not interleaved if the stride is the item size in bytes.\n\t\t\tif ( byteStride && byteStride !== itemBytes ) {\n\n\t\t\t\t// Each \"slice\" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer\n\t\t\t\t// This makes sure that IBA.count reflects accessor.count properly\n\t\t\t\tconst ibSlice = Math.floor( byteOffset / byteStride );\n\t\t\t\tconst ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;\n\t\t\t\tlet ib = parser.cache.get( ibCacheKey );\n\n\t\t\t\tif ( ! ib ) {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );\n\n\t\t\t\t\t// Integer parameters to IB/IBA are in array elements, not bytes.\n\t\t\t\t\tib = new InterleavedBuffer( array, byteStride / elementBytes );\n\n\t\t\t\t\tparser.cache.add( ibCacheKey, ib );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );\n\n\t\t\t} else {\n\n\t\t\t\tif ( bufferView === null ) {\n\n\t\t\t\t\tarray = new TypedArray( accessorDef.count * itemSize );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute = new BufferAttribute( array, itemSize, normalized );\n\n\t\t\t}\n\n\t\t\t// https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors\n\t\t\tif ( accessorDef.sparse !== undefined ) {\n\n\t\t\t\tconst itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n\t\t\t\tconst TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];\n\n\t\t\t\tconst byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n\t\t\t\tconst byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n\n\t\t\t\tconst sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );\n\t\t\t\tconst sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );\n\n\t\t\t\tif ( bufferView !== null ) {\n\n\t\t\t\t\t// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.\n\t\t\t\t\tbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );\n\n\t\t\t\t}\n\n\t\t\t\t// Ignore normalized since we copy from sparse\n\t\t\t\tbufferAttribute.normalized = false;\n\n\t\t\t\tfor ( let i = 0, il = sparseIndices.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst index = sparseIndices[ i ];\n\n\t\t\t\t\tbufferAttribute.setX( index, sparseValues[ i * itemSize ] );\n\t\t\t\t\tif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );\n\t\t\t\t\tif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );\n\t\t\t\t\tif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );\n\t\t\t\t\tif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );\n\n\t\t\t\t}\n\n\t\t\t\tbufferAttribute.normalized = normalized;\n\n\t\t\t}\n\n\t\t\treturn bufferAttribute;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n\t *\n\t * @private\n\t * @param {number} textureIndex\n\t * @return {Promise<THREE.Texture|null>}\n\t */\n\tloadTexture( textureIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceIndex = textureDef.source;\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tlet loader = this.textureLoader;\n\n\t\tif ( sourceDef.uri ) {\n\n\t\t\tconst handler = options.manager.getHandler( sourceDef.uri );\n\t\t\tif ( handler !== null ) loader = handler;\n\n\t\t}\n\n\t\treturn this.loadTextureImage( textureIndex, sourceIndex, loader );\n\n\t}\n\n\tloadTextureImage( textureIndex, sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\n\t\tconst textureDef = json.textures[ textureIndex ];\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst cacheKey = ( sourceDef.uri || sourceDef.bufferView ) + ':' + textureDef.sampler;\n\n\t\tif ( this.textureCache[ cacheKey ] ) {\n\n\t\t\t// See https://github.com/mrdoob/three.js/issues/21559.\n\t\t\treturn this.textureCache[ cacheKey ];\n\n\t\t}\n\n\t\tconst promise = this.loadImageSource( sourceIndex, loader ).then( function ( texture ) {\n\n\t\t\ttexture.flipY = false;\n\n\t\t\ttexture.name = textureDef.name || sourceDef.name || '';\n\n\t\t\tif ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {\n\n\t\t\t\ttexture.name = sourceDef.uri;\n\n\t\t\t}\n\n\t\t\tconst samplers = json.samplers || {};\n\t\t\tconst sampler = samplers[ textureDef.sampler ] || {};\n\n\t\t\ttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;\n\t\t\ttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;\n\t\t\ttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;\n\t\t\ttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;\n\t\t\ttexture.generateMipmaps = ! texture.isCompressedTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t\t\tparser.associations.set( texture, { textures: textureIndex } );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function () {\n\n\t\t\treturn null;\n\n\t\t} );\n\n\t\tthis.textureCache[ cacheKey ] = promise;\n\n\t\treturn promise;\n\n\t}\n\n\tloadImageSource( sourceIndex, loader ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst options = this.options;\n\n\t\tif ( this.sourceCache[ sourceIndex ] !== undefined ) {\n\n\t\t\treturn this.sourceCache[ sourceIndex ].then( ( texture ) => texture.clone() );\n\n\t\t}\n\n\t\tconst sourceDef = json.images[ sourceIndex ];\n\n\t\tconst URL = self.URL || self.webkitURL;\n\n\t\tlet sourceURI = sourceDef.uri || '';\n\t\tlet isObjectURL = false;\n\n\t\tif ( sourceDef.bufferView !== undefined ) {\n\n\t\t\t// Load binary image data from bufferView, if provided.\n\n\t\t\tsourceURI = parser.getDependency( 'bufferView', sourceDef.bufferView ).then( function ( bufferView ) {\n\n\t\t\t\tisObjectURL = true;\n\t\t\t\tconst blob = new Blob( [ bufferView ], { type: sourceDef.mimeType } );\n\t\t\t\tsourceURI = URL.createObjectURL( blob );\n\t\t\t\treturn sourceURI;\n\n\t\t\t} );\n\n\t\t} else if ( sourceDef.uri === undefined ) {\n\n\t\t\tthrow new Error( 'THREE.GLTFLoader: Image ' + sourceIndex + ' is missing URI and bufferView' );\n\n\t\t}\n\n\t\tconst promise = Promise.resolve( sourceURI ).then( function ( sourceURI ) {\n\n\t\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\t\tlet onLoad = resolve;\n\n\t\t\t\tif ( loader.isImageBitmapLoader === true ) {\n\n\t\t\t\t\tonLoad = function ( imageBitmap ) {\n\n\t\t\t\t\t\tconst texture = new Texture( imageBitmap );\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tresolve( texture );\n\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tloader.load( LoaderUtils.resolveURL( sourceURI, options.path ), onLoad, undefined, reject );\n\n\t\t\t} );\n\n\t\t} ).then( function ( texture ) {\n\n\t\t\t// Clean up resources and configure Texture.\n\n\t\t\tif ( isObjectURL === true ) {\n\n\t\t\t\tURL.revokeObjectURL( sourceURI );\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( texture, sourceDef );\n\n\t\t\ttexture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType( sourceDef.uri );\n\n\t\t\treturn texture;\n\n\t\t} ).catch( function ( error ) {\n\n\t\t\tconsole.error( 'THREE.GLTFLoader: Couldn\\'t load texture', sourceURI );\n\t\t\tthrow error;\n\n\t\t} );\n\n\t\tthis.sourceCache[ sourceIndex ] = promise;\n\t\treturn promise;\n\n\t}\n\n\t/**\n\t * Asynchronously assigns a texture to the given material parameters.\n\t *\n\t * @private\n\t * @param {Object} materialParams\n\t * @param {string} mapName\n\t * @param {Object} mapDef\n\t * @param {string} [colorSpace]\n\t * @return {Promise<Texture>}\n\t */\n\tassignTexture( materialParams, mapName, mapDef, colorSpace ) {\n\n\t\tconst parser = this;\n\n\t\treturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {\n\n\t\t\tif ( ! texture ) return null;\n\n\t\t\tif ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {\n\n\t\t\t\ttexture = texture.clone();\n\t\t\t\ttexture.channel = mapDef.texCoord;\n\n\t\t\t}\n\n\t\t\tif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {\n\n\t\t\t\tconst transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;\n\n\t\t\t\tif ( transform ) {\n\n\t\t\t\t\tconst gltfReference = parser.associations.get( texture );\n\t\t\t\t\ttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );\n\t\t\t\t\tparser.associations.set( texture, gltfReference );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( colorSpace !== undefined ) {\n\n\t\t\t\ttexture.colorSpace = colorSpace;\n\n\t\t\t}\n\n\t\t\tmaterialParams[ mapName ] = texture;\n\n\t\t\treturn texture;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Assigns final material to a Mesh, Line, or Points instance. The instance\n\t * already has a material (generated from the glTF material options alone)\n\t * but reuse of the same glTF material may require multiple threejs materials\n\t * to accommodate different primitive types, defines, etc. New materials will\n\t * be created if necessary, and reused from a cache.\n\t *\n\t * @private\n\t * @param {Object3D} mesh Mesh, Line, or Points instance.\n\t */\n\tassignFinalMaterial( mesh ) {\n\n\t\tconst geometry = mesh.geometry;\n\t\tlet material = mesh.material;\n\n\t\tconst useDerivativeTangents = geometry.attributes.tangent === undefined;\n\t\tconst useVertexColors = geometry.attributes.color !== undefined;\n\t\tconst useFlatShading = geometry.attributes.normal === undefined;\n\n\t\tif ( mesh.isPoints ) {\n\n\t\t\tconst cacheKey = 'PointsMaterial:' + material.uuid;\n\n\t\t\tlet pointsMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! pointsMaterial ) {\n\n\t\t\t\tpointsMaterial = new PointsMaterial();\n\t\t\t\tMaterial.prototype.copy.call( pointsMaterial, material );\n\t\t\t\tpointsMaterial.color.copy( material.color );\n\t\t\t\tpointsMaterial.map = material.map;\n\t\t\t\tpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px\n\n\t\t\t\tthis.cache.add( cacheKey, pointsMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = pointsMaterial;\n\n\t\t} else if ( mesh.isLine ) {\n\n\t\t\tconst cacheKey = 'LineBasicMaterial:' + material.uuid;\n\n\t\t\tlet lineMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! lineMaterial ) {\n\n\t\t\t\tlineMaterial = new LineBasicMaterial();\n\t\t\t\tMaterial.prototype.copy.call( lineMaterial, material );\n\t\t\t\tlineMaterial.color.copy( material.color );\n\t\t\t\tlineMaterial.map = material.map;\n\n\t\t\t\tthis.cache.add( cacheKey, lineMaterial );\n\n\t\t\t}\n\n\t\t\tmaterial = lineMaterial;\n\n\t\t}\n\n\t\t// Clone the material if it will be modified\n\t\tif ( useDerivativeTangents || useVertexColors || useFlatShading ) {\n\n\t\t\tlet cacheKey = 'ClonedMaterial:' + material.uuid + ':';\n\n\t\t\tif ( useDerivativeTangents ) cacheKey += 'derivative-tangents:';\n\t\t\tif ( useVertexColors ) cacheKey += 'vertex-colors:';\n\t\t\tif ( useFlatShading ) cacheKey += 'flat-shading:';\n\n\t\t\tlet cachedMaterial = this.cache.get( cacheKey );\n\n\t\t\tif ( ! cachedMaterial ) {\n\n\t\t\t\tcachedMaterial = material.clone();\n\n\t\t\t\tif ( useVertexColors ) cachedMaterial.vertexColors = true;\n\t\t\t\tif ( useFlatShading ) cachedMaterial.flatShading = true;\n\n\t\t\t\tif ( useDerivativeTangents ) {\n\n\t\t\t\t\t// https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995\n\t\t\t\t\tif ( cachedMaterial.normalScale ) cachedMaterial.normalScale.y *= - 1;\n\t\t\t\t\tif ( cachedMaterial.clearcoatNormalScale ) cachedMaterial.clearcoatNormalScale.y *= - 1;\n\n\t\t\t\t}\n\n\t\t\t\tthis.cache.add( cacheKey, cachedMaterial );\n\n\t\t\t\tthis.associations.set( cachedMaterial, this.associations.get( material ) );\n\n\t\t\t}\n\n\t\t\tmaterial = cachedMaterial;\n\n\t\t}\n\n\t\tmesh.material = material;\n\n\t}\n\n\tgetMaterialType( /* materialIndex */ ) {\n\n\t\treturn MeshStandardMaterial;\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n\t *\n\t * @private\n\t * @param {number} materialIndex\n\t * @return {Promise<Material>}\n\t */\n\tloadMaterial( materialIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst materialDef = json.materials[ materialIndex ];\n\n\t\tlet materialType;\n\t\tconst materialParams = {};\n\t\tconst materialExtensions = materialDef.extensions || {};\n\n\t\tconst pending = [];\n\n\t\tif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {\n\n\t\t\tconst kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];\n\t\t\tmaterialType = kmuExtension.getMaterialType();\n\t\t\tpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );\n\n\t\t} else {\n\n\t\t\t// Specification:\n\t\t\t// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material\n\n\t\t\tconst metallicRoughness = materialDef.pbrMetallicRoughness || {};\n\n\t\t\tmaterialParams.color = new Color( 1.0, 1.0, 1.0 );\n\t\t\tmaterialParams.opacity = 1.0;\n\n\t\t\tif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {\n\n\t\t\t\tconst array = metallicRoughness.baseColorFactor;\n\n\t\t\t\tmaterialParams.color.setRGB( array[ 0 ], array[ 1 ], array[ 2 ], LinearSRGBColorSpace );\n\t\t\t\tmaterialParams.opacity = array[ 3 ];\n\n\t\t\t}\n\n\t\t\tif ( metallicRoughness.baseColorTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );\n\n\t\t\t}\n\n\t\t\tmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;\n\t\t\tmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;\n\n\t\t\tif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {\n\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\t\t\t\tpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );\n\n\t\t\t}\n\n\t\t\tmaterialType = this._invokeOne( function ( ext ) {\n\n\t\t\t\treturn ext.getMaterialType && ext.getMaterialType( materialIndex );\n\n\t\t\t} );\n\n\t\t\tpending.push( Promise.all( this._invokeAll( function ( ext ) {\n\n\t\t\t\treturn ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams );\n\n\t\t\t} ) ) );\n\n\t\t}\n\n\t\tif ( materialDef.doubleSided === true ) {\n\n\t\t\tmaterialParams.side = DoubleSide;\n\n\t\t}\n\n\t\tconst alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n\n\t\tif ( alphaMode === ALPHA_MODES.BLEND ) {\n\n\t\t\tmaterialParams.transparent = true;\n\n\t\t\t// See: https://github.com/mrdoob/three.js/issues/17706\n\t\t\tmaterialParams.depthWrite = false;\n\n\t\t} else {\n\n\t\t\tmaterialParams.transparent = false;\n\n\t\t\tif ( alphaMode === ALPHA_MODES.MASK ) {\n\n\t\t\t\tmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );\n\n\t\t\tmaterialParams.normalScale = new Vector2( 1, 1 );\n\n\t\t\tif ( materialDef.normalTexture.scale !== undefined ) {\n\n\t\t\t\tconst scale = materialDef.normalTexture.scale;\n\n\t\t\t\tmaterialParams.normalScale.set( scale, scale );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );\n\n\t\t\tif ( materialDef.occlusionTexture.strength !== undefined ) {\n\n\t\t\t\tmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tconst emissiveFactor = materialDef.emissiveFactor;\n\t\t\tmaterialParams.emissive = new Color().setRGB( emissiveFactor[ 0 ], emissiveFactor[ 1 ], emissiveFactor[ 2 ], LinearSRGBColorSpace );\n\n\t\t}\n\n\t\tif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {\n\n\t\t\tpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function () {\n\n\t\t\tconst material = new materialType( materialParams );\n\n\t\t\tif ( materialDef.name ) material.name = materialDef.name;\n\n\t\t\tassignExtrasToUserData( material, materialDef );\n\n\t\t\tparser.associations.set( material, { materials: materialIndex } );\n\n\t\t\tif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );\n\n\t\t\treturn material;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * When Object3D instances are targeted by animation, they need unique names.\n\t *\n\t * @private\n\t * @param {string} originalName\n\t * @return {string}\n\t */\n\tcreateUniqueName( originalName ) {\n\n\t\tconst sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );\n\n\t\tif ( sanitizedName in this.nodeNamesUsed ) {\n\n\t\t\treturn sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );\n\n\t\t} else {\n\n\t\t\tthis.nodeNamesUsed[ sanitizedName ] = 0;\n\n\t\t\treturn sanitizedName;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n\t *\n\t * Creates BufferGeometries from primitives.\n\t *\n\t * @private\n\t * @param {Array<GLTF.Primitive>} primitives\n\t * @return {Promise<Array<BufferGeometry>>}\n\t */\n\tloadGeometries( primitives ) {\n\n\t\tconst parser = this;\n\t\tconst extensions = this.extensions;\n\t\tconst cache = this.primitiveCache;\n\n\t\tfunction createDracoPrimitive( primitive ) {\n\n\t\t\treturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]\n\t\t\t\t.decodePrimitive( primitive, parser )\n\t\t\t\t.then( function ( geometry ) {\n\n\t\t\t\t\treturn addPrimitiveAttributes( geometry, primitive, parser );\n\n\t\t\t\t} );\n\n\t\t}\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst primitive = primitives[ i ];\n\t\t\tconst cacheKey = createPrimitiveKey( primitive );\n\n\t\t\t// See if we've already created this geometry\n\t\t\tconst cached = cache[ cacheKey ];\n\n\t\t\tif ( cached ) {\n\n\t\t\t\t// Use the cached geometry if it exists\n\t\t\t\tpending.push( cached.promise );\n\n\t\t\t} else {\n\n\t\t\t\tlet geometryPromise;\n\n\t\t\t\tif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {\n\n\t\t\t\t\t// Use DRACO geometry if available\n\t\t\t\t\tgeometryPromise = createDracoPrimitive( primitive );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Otherwise create a new geometry\n\t\t\t\t\tgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );\n\n\t\t\t\t}\n\n\t\t\t\t// Cache this geometry\n\t\t\t\tcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };\n\n\t\t\t\tpending.push( geometryPromise );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Promise.all( pending );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n\t *\n\t * @private\n\t * @param {number} meshIndex\n\t * @return {Promise<Group|Mesh|SkinnedMesh|Line|Points>}\n\t */\n\tloadMesh( meshIndex ) {\n\n\t\tconst parser = this;\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\n\t\tconst meshDef = json.meshes[ meshIndex ];\n\t\tconst primitives = meshDef.primitives;\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = primitives.length; i < il; i ++ ) {\n\n\t\t\tconst material = primitives[ i ].material === undefined\n\t\t\t\t? createDefaultMaterial( this.cache )\n\t\t\t\t: this.getDependency( 'material', primitives[ i ].material );\n\n\t\t\tpending.push( material );\n\n\t\t}\n\n\t\tpending.push( parser.loadGeometries( primitives ) );\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst materials = results.slice( 0, results.length - 1 );\n\t\t\tconst geometries = results[ results.length - 1 ];\n\n\t\t\tconst meshes = [];\n\n\t\t\tfor ( let i = 0, il = geometries.length; i < il; i ++ ) {\n\n\t\t\t\tconst geometry = geometries[ i ];\n\t\t\t\tconst primitive = primitives[ i ];\n\n\t\t\t\t// 1. create Mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tconst material = materials[ i ];\n\n\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||\n\t\t\t\t\t\tprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||\n\t\t\t\t\t\tprimitive.mode === undefined ) {\n\n\t\t\t\t\t// .isSkinnedMesh isn't in glTF spec. See ._markDefs()\n\t\t\t\t\tmesh = meshDef.isSkinnedMesh === true\n\t\t\t\t\t\t? new SkinnedMesh( geometry, material )\n\t\t\t\t\t\t: new Mesh( geometry, material );\n\n\t\t\t\t\tif ( mesh.isSkinnedMesh === true ) {\n\n\t\t\t\t\t\t// normalize skin weights to fix malformed assets (see #15319)\n\t\t\t\t\t\tmesh.normalizeSkinWeights();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode );\n\n\t\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {\n\n\t\t\t\t\t\tmesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {\n\n\t\t\t\t\tmesh = new LineSegments( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {\n\n\t\t\t\t\tmesh = new Line( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {\n\n\t\t\t\t\tmesh = new LineLoop( geometry, material );\n\n\t\t\t\t} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {\n\n\t\t\t\t\tmesh = new Points( geometry, material );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );\n\n\t\t\t\t}\n\n\t\t\t\tif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {\n\n\t\t\t\t\tupdateMorphTargets( mesh, meshDef );\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) );\n\n\t\t\t\tassignExtrasToUserData( mesh, meshDef );\n\n\t\t\t\tif ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive );\n\n\t\t\t\tparser.assignFinalMaterial( mesh );\n\n\t\t\t\tmeshes.push( mesh );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tparser.associations.set( meshes[ i ], {\n\t\t\t\t\tmeshes: meshIndex,\n\t\t\t\t\tprimitives: i\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( meshes.length === 1 ) {\n\n\t\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );\n\n\t\t\t\treturn meshes[ 0 ];\n\n\t\t\t}\n\n\t\t\tconst group = new Group();\n\n\t\t\tif ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );\n\n\t\t\tparser.associations.set( group, { meshes: meshIndex } );\n\n\t\t\tfor ( let i = 0, il = meshes.length; i < il; i ++ ) {\n\n\t\t\t\tgroup.add( meshes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn group;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n\t *\n\t * @private\n\t * @param {number} cameraIndex\n\t * @return {Promise<THREE.Camera>}\n\t */\n\tloadCamera( cameraIndex ) {\n\n\t\tlet camera;\n\t\tconst cameraDef = this.json.cameras[ cameraIndex ];\n\t\tconst params = cameraDef[ cameraDef.type ];\n\n\t\tif ( ! params ) {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( cameraDef.type === 'perspective' ) {\n\n\t\t\tcamera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );\n\n\t\t} else if ( cameraDef.type === 'orthographic' ) {\n\n\t\t\tcamera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar );\n\n\t\t}\n\n\t\tif ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name );\n\n\t\tassignExtrasToUserData( camera, cameraDef );\n\n\t\treturn Promise.resolve( camera );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n\t *\n\t * @private\n\t * @param {number} skinIndex\n\t * @return {Promise<Skeleton>}\n\t */\n\tloadSkin( skinIndex ) {\n\n\t\tconst skinDef = this.json.skins[ skinIndex ];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {\n\n\t\t\tpending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );\n\n\t\t}\n\n\t\tif ( skinDef.inverseBindMatrices !== undefined ) {\n\n\t\t\tpending.push( this.getDependency( 'accessor', skinDef.inverseBindMatrices ) );\n\n\t\t} else {\n\n\t\t\tpending.push( null );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( results ) {\n\n\t\t\tconst inverseBindMatrices = results.pop();\n\t\t\tconst jointNodes = results;\n\n\t\t\t// Note that bones (joint nodes) may or may not be in the\n\t\t\t// scene graph at this time.\n\n\t\t\tconst bones = [];\n\t\t\tconst boneInverses = [];\n\n\t\t\tfor ( let i = 0, il = jointNodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst jointNode = jointNodes[ i ];\n\n\t\t\t\tif ( jointNode ) {\n\n\t\t\t\t\tbones.push( jointNode );\n\n\t\t\t\t\tconst mat = new Matrix4();\n\n\t\t\t\t\tif ( inverseBindMatrices !== null ) {\n\n\t\t\t\t\t\tmat.fromArray( inverseBindMatrices.array, i * 16 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tboneInverses.push( mat );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new Skeleton( bones, boneInverses );\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n\t *\n\t * @private\n\t * @param {number} animationIndex\n\t * @return {Promise<AnimationClip>}\n\t */\n\tloadAnimation( animationIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst animationDef = json.animations[ animationIndex ];\n\t\tconst animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;\n\n\t\tconst pendingNodes = [];\n\t\tconst pendingInputAccessors = [];\n\t\tconst pendingOutputAccessors = [];\n\t\tconst pendingSamplers = [];\n\t\tconst pendingTargets = [];\n\n\t\tfor ( let i = 0, il = animationDef.channels.length; i < il; i ++ ) {\n\n\t\t\tconst channel = animationDef.channels[ i ];\n\t\t\tconst sampler = animationDef.samplers[ channel.sampler ];\n\t\t\tconst target = channel.target;\n\t\t\tconst name = target.node;\n\t\t\tconst input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;\n\t\t\tconst output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;\n\n\t\t\tif ( target.node === undefined ) continue;\n\n\t\t\tpendingNodes.push( this.getDependency( 'node', name ) );\n\t\t\tpendingInputAccessors.push( this.getDependency( 'accessor', input ) );\n\t\t\tpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );\n\t\t\tpendingSamplers.push( sampler );\n\t\t\tpendingTargets.push( target );\n\n\t\t}\n\n\t\treturn Promise.all( [\n\n\t\t\tPromise.all( pendingNodes ),\n\t\t\tPromise.all( pendingInputAccessors ),\n\t\t\tPromise.all( pendingOutputAccessors ),\n\t\t\tPromise.all( pendingSamplers ),\n\t\t\tPromise.all( pendingTargets )\n\n\t\t] ).then( function ( dependencies ) {\n\n\t\t\tconst nodes = dependencies[ 0 ];\n\t\t\tconst inputAccessors = dependencies[ 1 ];\n\t\t\tconst outputAccessors = dependencies[ 2 ];\n\t\t\tconst samplers = dependencies[ 3 ];\n\t\t\tconst targets = dependencies[ 4 ];\n\n\t\t\tconst tracks = [];\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tconst node = nodes[ i ];\n\t\t\t\tconst inputAccessor = inputAccessors[ i ];\n\t\t\t\tconst outputAccessor = outputAccessors[ i ];\n\t\t\t\tconst sampler = samplers[ i ];\n\t\t\t\tconst target = targets[ i ];\n\n\t\t\t\tif ( node === undefined ) continue;\n\n\t\t\t\tif ( node.updateMatrix ) {\n\n\t\t\t\t\tnode.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tconst createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );\n\n\t\t\t\tif ( createdTracks ) {\n\n\t\t\t\t\tfor ( let k = 0; k < createdTracks.length; k ++ ) {\n\n\t\t\t\t\t\ttracks.push( createdTracks[ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( animationName, undefined, tracks );\n\n\t\t} );\n\n\t}\n\n\tcreateNodeMesh( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tif ( nodeDef.mesh === undefined ) return null;\n\n\t\treturn parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {\n\n\t\t\tconst node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh );\n\n\t\t\t// if weights are provided on the node, override weights on the mesh.\n\t\t\tif ( nodeDef.weights !== undefined ) {\n\n\t\t\t\tnode.traverse( function ( o ) {\n\n\t\t\t\t\tif ( ! o.isMesh ) return;\n\n\t\t\t\t\tfor ( let i = 0, il = nodeDef.weights.length; i < il; i ++ ) {\n\n\t\t\t\t\t\to.morphTargetInfluences[ i ] = nodeDef.weights[ i ];\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n\t *\n\t * @private\n\t * @param {number} nodeIndex\n\t * @return {Promise<Object3D>}\n\t */\n\tloadNode( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst parser = this;\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\tconst nodePending = parser._loadNodeShallow( nodeIndex );\n\n\t\tconst childPending = [];\n\t\tconst childrenDef = nodeDef.children || [];\n\n\t\tfor ( let i = 0, il = childrenDef.length; i < il; i ++ ) {\n\n\t\t\tchildPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );\n\n\t\t}\n\n\t\tconst skeletonPending = nodeDef.skin === undefined\n\t\t\t? Promise.resolve( null )\n\t\t\t: parser.getDependency( 'skin', nodeDef.skin );\n\n\t\treturn Promise.all( [\n\t\t\tnodePending,\n\t\t\tPromise.all( childPending ),\n\t\t\tskeletonPending\n\t\t] ).then( function ( results ) {\n\n\t\t\tconst node = results[ 0 ];\n\t\t\tconst children = results[ 1 ];\n\t\t\tconst skeleton = results[ 2 ];\n\n\t\t\tif ( skeleton !== null ) {\n\n\t\t\t\t// This full traverse should be fine because\n\t\t\t\t// child glTF nodes have not been added to this node yet.\n\t\t\t\tnode.traverse( function ( mesh ) {\n\n\t\t\t\t\tif ( ! mesh.isSkinnedMesh ) return;\n\n\t\t\t\t\tmesh.bind( skeleton, _identityMatrix );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, il = children.length; i < il; i ++ ) {\n\n\t\t\t\tnode.add( children[ i ] );\n\n\t\t\t}\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t}\n\n\t// ._loadNodeShallow() parses a single node.\n\t// skin and child nodes are created and added in .loadNode() (no '_' prefix).\n\t_loadNodeShallow( nodeIndex ) {\n\n\t\tconst json = this.json;\n\t\tconst extensions = this.extensions;\n\t\tconst parser = this;\n\n\t\t// This method is called from .loadNode() and .loadSkin().\n\t\t// Cache a node to avoid duplication.\n\n\t\tif ( this.nodeCache[ nodeIndex ] !== undefined ) {\n\n\t\t\treturn this.nodeCache[ nodeIndex ];\n\n\t\t}\n\n\t\tconst nodeDef = json.nodes[ nodeIndex ];\n\n\t\t// reserve node's name before its dependencies, so the root has the intended name.\n\t\tconst nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';\n\n\t\tconst pending = [];\n\n\t\tconst meshPromise = parser._invokeOne( function ( ext ) {\n\n\t\t\treturn ext.createNodeMesh && ext.createNodeMesh( nodeIndex );\n\n\t\t} );\n\n\t\tif ( meshPromise ) {\n\n\t\t\tpending.push( meshPromise );\n\n\t\t}\n\n\t\tif ( nodeDef.camera !== undefined ) {\n\n\t\t\tpending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {\n\n\t\t\t\treturn parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );\n\n\t\t\t} ) );\n\n\t\t}\n\n\t\tparser._invokeAll( function ( ext ) {\n\n\t\t\treturn ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );\n\n\t\t} ).forEach( function ( promise ) {\n\n\t\t\tpending.push( promise );\n\n\t\t} );\n\n\t\tthis.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {\n\n\t\t\tlet node;\n\n\t\t\t// .isBone isn't in glTF spec. See ._markDefs\n\t\t\tif ( nodeDef.isBone === true ) {\n\n\t\t\t\tnode = new Bone();\n\n\t\t\t} else if ( objects.length > 1 ) {\n\n\t\t\t\tnode = new Group();\n\n\t\t\t} else if ( objects.length === 1 ) {\n\n\t\t\t\tnode = objects[ 0 ];\n\n\t\t\t} else {\n\n\t\t\t\tnode = new Object3D();\n\n\t\t\t}\n\n\t\t\tif ( node !== objects[ 0 ] ) {\n\n\t\t\t\tfor ( let i = 0, il = objects.length; i < il; i ++ ) {\n\n\t\t\t\t\tnode.add( objects[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( nodeDef.name ) {\n\n\t\t\t\tnode.userData.name = nodeDef.name;\n\t\t\t\tnode.name = nodeName;\n\n\t\t\t}\n\n\t\t\tassignExtrasToUserData( node, nodeDef );\n\n\t\t\tif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );\n\n\t\t\tif ( nodeDef.matrix !== undefined ) {\n\n\t\t\t\tconst matrix = new Matrix4();\n\t\t\t\tmatrix.fromArray( nodeDef.matrix );\n\t\t\t\tnode.applyMatrix4( matrix );\n\n\t\t\t} else {\n\n\t\t\t\tif ( nodeDef.translation !== undefined ) {\n\n\t\t\t\t\tnode.position.fromArray( nodeDef.translation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.rotation !== undefined ) {\n\n\t\t\t\t\tnode.quaternion.fromArray( nodeDef.rotation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( nodeDef.scale !== undefined ) {\n\n\t\t\t\t\tnode.scale.fromArray( nodeDef.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( ! parser.associations.has( node ) ) {\n\n\t\t\t\tparser.associations.set( node, {} );\n\n\t\t\t} else if ( nodeDef.mesh !== undefined && parser.meshCache.refs[ nodeDef.mesh ] > 1 ) {\n\n\t\t\t\tconst mapping = parser.associations.get( node );\n\t\t\t\tparser.associations.set( node, { ...mapping } );\n\n\t\t\t}\n\n\t\t\tparser.associations.get( node ).nodes = nodeIndex;\n\n\t\t\treturn node;\n\n\t\t} );\n\n\t\treturn this.nodeCache[ nodeIndex ];\n\n\t}\n\n\t/**\n\t * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n\t *\n\t * @private\n\t * @param {number} sceneIndex\n\t * @return {Promise<Group>}\n\t */\n\tloadScene( sceneIndex ) {\n\n\t\tconst extensions = this.extensions;\n\t\tconst sceneDef = this.json.scenes[ sceneIndex ];\n\t\tconst parser = this;\n\n\t\t// Loader returns Group, not Scene.\n\t\t// See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172\n\t\tconst scene = new Group();\n\t\tif ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name );\n\n\t\tassignExtrasToUserData( scene, sceneDef );\n\n\t\tif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );\n\n\t\tconst nodeIds = sceneDef.nodes || [];\n\n\t\tconst pending = [];\n\n\t\tfor ( let i = 0, il = nodeIds.length; i < il; i ++ ) {\n\n\t\t\tpending.push( parser.getDependency( 'node', nodeIds[ i ] ) );\n\n\t\t}\n\n\t\treturn Promise.all( pending ).then( function ( nodes ) {\n\n\t\t\tfor ( let i = 0, il = nodes.length; i < il; i ++ ) {\n\n\t\t\t\tscene.add( nodes[ i ] );\n\n\t\t\t}\n\n\t\t\t// Removes dangling associations, associations that reference a node that\n\t\t\t// didn't make it into the scene.\n\t\t\tconst reduceAssociations = ( node ) => {\n\n\t\t\t\tconst reducedAssociations = new Map();\n\n\t\t\t\tfor ( const [ key, value ] of parser.associations ) {\n\n\t\t\t\t\tif ( key instanceof Material || key instanceof Texture ) {\n\n\t\t\t\t\t\treducedAssociations.set( key, value );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tnode.traverse( ( node ) => {\n\n\t\t\t\t\tconst mappings = parser.associations.get( node );\n\n\t\t\t\t\tif ( mappings != null ) {\n\n\t\t\t\t\t\treducedAssociations.set( node, mappings );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\n\t\t\t\treturn reducedAssociations;\n\n\t\t\t};\n\n\t\t\tparser.associations = reduceAssociations( scene );\n\n\t\t\treturn scene;\n\n\t\t} );\n\n\t}\n\n\t_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {\n\n\t\tconst tracks = [];\n\n\t\tconst targetName = node.name ? node.name : node.uuid;\n\t\tconst targetNames = [];\n\n\t\tif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {\n\n\t\t\tnode.traverse( function ( object ) {\n\n\t\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\t\ttargetNames.push( object.name ? object.name : object.uuid );\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t} else {\n\n\t\t\ttargetNames.push( targetName );\n\n\t\t}\n\n\t\tlet TypedKeyframeTrack;\n\n\t\tswitch ( PATH_PROPERTIES[ target.path ] ) {\n\n\t\t\tcase PATH_PROPERTIES.weights:\n\n\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.rotation:\n\n\t\t\t\tTypedKeyframeTrack = QuaternionKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tcase PATH_PROPERTIES.translation:\n\t\t\tcase PATH_PROPERTIES.scale:\n\n\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tswitch ( outputAccessor.itemSize ) {\n\n\t\t\t\t\tcase 1:\n\t\t\t\t\t\tTypedKeyframeTrack = NumberKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 2:\n\t\t\t\t\tcase 3:\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tTypedKeyframeTrack = VectorKeyframeTrack;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tconst interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;\n\n\n\t\tconst outputArray = this._getArrayFromAccessor( outputAccessor );\n\n\t\tfor ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {\n\n\t\t\tconst track = new TypedKeyframeTrack(\n\t\t\t\ttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],\n\t\t\t\tinputAccessor.array,\n\t\t\t\toutputArray,\n\t\t\t\tinterpolation\n\t\t\t);\n\n\t\t\t// Override interpolation with custom factory method.\n\t\t\tif ( sampler.interpolation === 'CUBICSPLINE' ) {\n\n\t\t\t\tthis._createCubicSplineTrackInterpolant( track );\n\n\t\t\t}\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\treturn tracks;\n\n\t}\n\n\t_getArrayFromAccessor( accessor ) {\n\n\t\tlet outputArray = accessor.array;\n\n\t\tif ( accessor.normalized ) {\n\n\t\t\tconst scale = getNormalizedComponentScale( outputArray.constructor );\n\t\t\tconst scaled = new Float32Array( outputArray.length );\n\n\t\t\tfor ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {\n\n\t\t\t\tscaled[ j ] = outputArray[ j ] * scale;\n\n\t\t\t}\n\n\t\t\toutputArray = scaled;\n\n\t\t}\n\n\t\treturn outputArray;\n\n\t}\n\n\t_createCubicSplineTrackInterpolant( track ) {\n\n\t\ttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {\n\n\t\t\t// A CUBICSPLINE keyframe in glTF has three output values for each input value,\n\t\t\t// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()\n\t\t\t// must be divided by three to get the interpolant's sampleSize argument.\n\n\t\t\tconst interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n\n\t\t\treturn new interpolantType( this.times, this.values, this.getValueSize() / 3, result );\n\n\t\t};\n\n\t\t// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.\n\t\ttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n\n\t}\n\n}\n\n/**\n *\n * @private\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n */\nfunction computeBounds( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst box = new Box3();\n\n\tif ( attributes.POSITION !== undefined ) {\n\n\t\tconst accessor = parser.json.accessors[ attributes.POSITION ];\n\n\t\tconst min = accessor.min;\n\t\tconst max = accessor.max;\n\n\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\tbox.set(\n\t\t\t\tnew Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ),\n\t\t\t\tnew Vector3( max[ 0 ], max[ 1 ], max[ 2 ] )\n\t\t\t);\n\n\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\tbox.min.multiplyScalar( boxScale );\n\t\t\t\tbox.max.multiplyScalar( boxScale );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\treturn;\n\n\t\t}\n\n\t} else {\n\n\t\treturn;\n\n\t}\n\n\tconst targets = primitiveDef.targets;\n\n\tif ( targets !== undefined ) {\n\n\t\tconst maxDisplacement = new Vector3();\n\t\tconst vector = new Vector3();\n\n\t\tfor ( let i = 0, il = targets.length; i < il; i ++ ) {\n\n\t\t\tconst target = targets[ i ];\n\n\t\t\tif ( target.POSITION !== undefined ) {\n\n\t\t\t\tconst accessor = parser.json.accessors[ target.POSITION ];\n\t\t\t\tconst min = accessor.min;\n\t\t\t\tconst max = accessor.max;\n\n\t\t\t\t// glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement.\n\n\t\t\t\tif ( min !== undefined && max !== undefined ) {\n\n\t\t\t\t\t// we need to get max of absolute components because target weight is [-1,1]\n\t\t\t\t\tvector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) );\n\t\t\t\t\tvector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) );\n\t\t\t\t\tvector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) );\n\n\n\t\t\t\t\tif ( accessor.normalized ) {\n\n\t\t\t\t\t\tconst boxScale = getNormalizedComponentScale( WEBGL_COMPONENT_TYPES[ accessor.componentType ] );\n\t\t\t\t\t\tvector.multiplyScalar( boxScale );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative\n\t\t\t\t\t// to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets\n\t\t\t\t\t// are used to implement key-frame animations and as such only two are active at a time - this results in very large\n\t\t\t\t\t// boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size.\n\t\t\t\t\tmaxDisplacement.max( vector );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets.\n\t\tbox.expandByVector( maxDisplacement );\n\n\t}\n\n\tgeometry.boundingBox = box;\n\n\tconst sphere = new Sphere();\n\n\tbox.getCenter( sphere.center );\n\tsphere.radius = box.min.distanceTo( box.max ) / 2;\n\n\tgeometry.boundingSphere = sphere;\n\n}\n\n/**\n *\n * @private\n * @param {BufferGeometry} geometry\n * @param {GLTF.Primitive} primitiveDef\n * @param {GLTFParser} parser\n * @return {Promise<BufferGeometry>}\n */\nfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {\n\n\tconst attributes = primitiveDef.attributes;\n\n\tconst pending = [];\n\n\tfunction assignAttributeAccessor( accessorIndex, attributeName ) {\n\n\t\treturn parser.getDependency( 'accessor', accessorIndex )\n\t\t\t.then( function ( accessor ) {\n\n\t\t\t\tgeometry.setAttribute( attributeName, accessor );\n\n\t\t\t} );\n\n\t}\n\n\tfor ( const gltfAttributeName in attributes ) {\n\n\t\tconst threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();\n\n\t\t// Skip attributes already provided by e.g. Draco extension.\n\t\tif ( threeAttributeName in geometry.attributes ) continue;\n\n\t\tpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );\n\n\t}\n\n\tif ( primitiveDef.indices !== undefined && ! geometry.index ) {\n\n\t\tconst accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {\n\n\t\t\tgeometry.setIndex( accessor );\n\n\t\t} );\n\n\t\tpending.push( accessor );\n\n\t}\n\n\tif ( ColorManagement.workingColorSpace !== LinearSRGBColorSpace && 'COLOR_0' in attributes ) {\n\n\t\tconsole.warn( `THREE.GLTFLoader: Converting vertex colors from \"srgb-linear\" to \"${ColorManagement.workingColorSpace}\" not supported.` );\n\n\t}\n\n\tassignExtrasToUserData( geometry, primitiveDef );\n\n\tcomputeBounds( geometry, primitiveDef, parser );\n\n\treturn Promise.all( pending ).then( function () {\n\n\t\treturn primitiveDef.targets !== undefined\n\t\t\t? addMorphTargets( geometry, primitiveDef.targets, parser )\n\t\t\t: geometry;\n\n\t} );\n\n}\n\n/**\n * Loader result of `GLTFLoader`.\n *\n * @typedef {Object} GLTFLoader~LoadObject\n * @property {Array<AnimationClip>} animations - An array of animation clips.\n * @property {Object} asset - Meta data about the loaded asset.\n * @property {Array<Camera>} cameras - An array of cameras.\n * @property {GLTFParser} parser - A reference to the internal parser.\n * @property {Group} scene - The default scene.\n * @property {Array<Group>} scenes - glTF assets might define multiple scenes.\n * @property {Object} userData - Additional data.\n **/\n\nexport { GLTFLoader };\n","import {\n\tBufferAttribute,\n\tBufferGeometry,\n\tColor,\n\tColorManagement,\n\tFileLoader,\n\tLoader,\n\tLinearSRGBColorSpace,\n\tSRGBColorSpace\n} from 'three';\n\nconst _taskCache = new WeakMap();\n\n/**\n * A loader for the Draco format.\n *\n * [Draco]{@link https://google.github.io/draco/} is an open source library for compressing\n * and decompressing 3D meshes and point clouds. Compressed geometry can be significantly smaller,\n * at the cost of additional decoding time on the client device.\n *\n * Standalone Draco files have a `.drc` extension, and contain vertex positions, normals, colors,\n * and other attributes. Draco files do not contain materials, textures, animation, or node hierarchies –\n * to use these features, embed Draco geometry inside of a glTF file. A normal glTF file can be converted\n * to a Draco-compressed glTF file using [glTF-Pipeline]{@link https://github.com/CesiumGS/gltf-pipeline}.\n * When using Draco with glTF, an instance of `DRACOLoader` will be used internally by {@link GLTFLoader}.\n *\n * It is recommended to create one DRACOLoader instance and reuse it to avoid loading and creating\n * multiple decoder instances.\n *\n * `DRACOLoader` will automatically use either the JS or the WASM decoding library, based on\n * browser capabilities.\n *\n * ```js\n * const loader = new DRACOLoader();\n * loader.setDecoderPath( '/examples/jsm/libs/draco/' );\n *\n * const geometry = await dracoLoader.loadAsync( 'models/draco/bunny.drc' );\n * geometry.computeVertexNormals(); // optional\n *\n * dracoLoader.dispose();\n * ```\n *\n * @augments Loader\n * @three_import import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';\n */\nclass DRACOLoader extends Loader {\n\n\t/**\n\t * Constructs a new Draco loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\tthis.decoderPath = '';\n\t\tthis.decoderConfig = {};\n\t\tthis.decoderBinary = null;\n\t\tthis.decoderPending = null;\n\n\t\tthis.workerLimit = 4;\n\t\tthis.workerPool = [];\n\t\tthis.workerNextTaskID = 1;\n\t\tthis.workerSourceURL = '';\n\n\t\tthis.defaultAttributeIDs = {\n\t\t\tposition: 'POSITION',\n\t\t\tnormal: 'NORMAL',\n\t\t\tcolor: 'COLOR',\n\t\t\tuv: 'TEX_COORD'\n\t\t};\n\t\tthis.defaultAttributeTypes = {\n\t\t\tposition: 'Float32Array',\n\t\t\tnormal: 'Float32Array',\n\t\t\tcolor: 'Float32Array',\n\t\t\tuv: 'Float32Array'\n\t\t};\n\n\t}\n\n\t/**\n\t * Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.\n\t *\n\t * @param {string} path - The decoder path.\n\t * @return {DRACOLoader} A reference to this loader.\n\t */\n\tsetDecoderPath( path ) {\n\n\t\tthis.decoderPath = path;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Provides configuration for the decoder libraries. Configuration cannot be changed after decoding begins.\n\t *\n\t * @param {{type:('js'|'wasm')}} config - The decoder config.\n\t * @return {DRACOLoader} A reference to this loader.\n\t */\n\tsetDecoderConfig( config ) {\n\n\t\tthis.decoderConfig = config;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Sets the maximum number of Web Workers to be used during decoding.\n\t * A lower limit may be preferable if workers are also for other tasks in the application.\n\t *\n\t * @param {number} workerLimit - The worker limit.\n\t * @return {DRACOLoader} A reference to this loader.\n\t */\n\tsetWorkerLimit( workerLimit ) {\n\n\t\tthis.workerLimit = workerLimit;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded Draco asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\tloader.load( url, ( buffer ) => {\n\n\t\t\tthis.parse( buffer, onLoad, onError );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Parses the given Draco data.\n\t *\n\t * @param {ArrayBuffer} buffer - The raw Draco data as an array buffer.\n\t * @param {function(BufferGeometry)} onLoad - Executed when the loading/parsing process has been finished.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tparse( buffer, onLoad, onError = ()=>{} ) {\n\n\t\tthis.decodeDracoFile( buffer, onLoad, null, null, SRGBColorSpace, onError ).catch( onError );\n\n\t}\n\n\t//\n\n\tdecodeDracoFile( buffer, callback, attributeIDs, attributeTypes, vertexColorSpace = LinearSRGBColorSpace, onError = () => {} ) {\n\n\t\tconst taskConfig = {\n\t\t\tattributeIDs: attributeIDs || this.defaultAttributeIDs,\n\t\t\tattributeTypes: attributeTypes || this.defaultAttributeTypes,\n\t\t\tuseUniqueIDs: !! attributeIDs,\n\t\t\tvertexColorSpace: vertexColorSpace,\n\t\t};\n\n\t\treturn this.decodeGeometry( buffer, taskConfig ).then( callback ).catch( onError );\n\n\t}\n\n\tdecodeGeometry( buffer, taskConfig ) {\n\n\t\tconst taskKey = JSON.stringify( taskConfig );\n\n\t\t// Check for an existing task using this buffer. A transferred buffer cannot be transferred\n\t\t// again from this thread.\n\t\tif ( _taskCache.has( buffer ) ) {\n\n\t\t\tconst cachedTask = _taskCache.get( buffer );\n\n\t\t\tif ( cachedTask.key === taskKey ) {\n\n\t\t\t\treturn cachedTask.promise;\n\n\t\t\t} else if ( buffer.byteLength === 0 ) {\n\n\t\t\t\t// Technically, it would be possible to wait for the previous task to complete,\n\t\t\t\t// transfer the buffer back, and decode again with the second configuration. That\n\t\t\t\t// is complex, and I don't know of any reason to decode a Draco buffer twice in\n\t\t\t\t// different ways, so this is left unimplemented.\n\t\t\t\tthrow new Error(\n\n\t\t\t\t\t'THREE.DRACOLoader: Unable to re-decode a buffer with different ' +\n\t\t\t\t\t'settings. Buffer has already been transferred.'\n\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tlet worker;\n\t\tconst taskID = this.workerNextTaskID ++;\n\t\tconst taskCost = buffer.byteLength;\n\n\t\t// Obtain a worker and assign a task, and construct a geometry instance\n\t\t// when the task completes.\n\t\tconst geometryPending = this._getWorker( taskID, taskCost )\n\t\t\t.then( ( _worker ) => {\n\n\t\t\t\tworker = _worker;\n\n\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\t\t\tworker._callbacks[ taskID ] = { resolve, reject };\n\n\t\t\t\t\tworker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t} );\n\n\t\t\t} )\n\t\t\t.then( ( message ) => this._createGeometry( message.geometry ) );\n\n\t\t// Remove task from the task list.\n\t\t// Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416)\n\t\tgeometryPending\n\t\t\t.catch( () => true )\n\t\t\t.then( () => {\n\n\t\t\t\tif ( worker && taskID ) {\n\n\t\t\t\t\tthis._releaseTask( worker, taskID );\n\n\t\t\t\t\t// this.debug();\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t// Cache the task result.\n\t\t_taskCache.set( buffer, {\n\n\t\t\tkey: taskKey,\n\t\t\tpromise: geometryPending\n\n\t\t} );\n\n\t\treturn geometryPending;\n\n\t}\n\n\t_createGeometry( geometryData ) {\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( geometryData.index ) {\n\n\t\t\tgeometry.setIndex( new BufferAttribute( geometryData.index.array, 1 ) );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < geometryData.attributes.length; i ++ ) {\n\n\t\t\tconst result = geometryData.attributes[ i ];\n\t\t\tconst name = result.name;\n\t\t\tconst array = result.array;\n\t\t\tconst itemSize = result.itemSize;\n\n\t\t\tconst attribute = new BufferAttribute( array, itemSize );\n\n\t\t\tif ( name === 'color' ) {\n\n\t\t\t\tthis._assignVertexColorSpace( attribute, result.vertexColorSpace );\n\n\t\t\t\tattribute.normalized = ( array instanceof Float32Array ) === false;\n\n\t\t\t}\n\n\t\t\tgeometry.setAttribute( name, attribute );\n\n\t\t}\n\n\t\treturn geometry;\n\n\t}\n\n\t_assignVertexColorSpace( attribute, inputColorSpace ) {\n\n\t\t// While .drc files do not specify colorspace, the only 'official' tooling\n\t\t// is PLY and OBJ converters, which use sRGB. We'll assume sRGB when a .drc\n\t\t// file is passed into .load() or .parse(). GLTFLoader uses internal APIs\n\t\t// to decode geometry, and vertex colors are already Linear-sRGB in there.\n\n\t\tif ( inputColorSpace !== SRGBColorSpace ) return;\n\n\t\tconst _color = new Color();\n\n\t\tfor ( let i = 0, il = attribute.count; i < il; i ++ ) {\n\n\t\t\t_color.fromBufferAttribute( attribute, i );\n\t\t\tColorManagement.colorSpaceToWorking( _color, SRGBColorSpace );\n\t\t\tattribute.setXYZ( i, _color.r, _color.g, _color.b );\n\n\t\t}\n\n\t}\n\n\t_loadLibrary( url, responseType ) {\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.decoderPath );\n\t\tloader.setResponseType( responseType );\n\t\tloader.setWithCredentials( this.withCredentials );\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\n\t\t\tloader.load( url, resolve, undefined, reject );\n\n\t\t} );\n\n\t}\n\n\tpreload() {\n\n\t\tthis._initDecoder();\n\n\t\treturn this;\n\n\t}\n\n\t_initDecoder() {\n\n\t\tif ( this.decoderPending ) return this.decoderPending;\n\n\t\tconst useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js';\n\t\tconst librariesPending = [];\n\n\t\tif ( useJS ) {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) );\n\n\t\t} else {\n\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) );\n\t\t\tlibrariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) );\n\n\t\t}\n\n\t\tthis.decoderPending = Promise.all( librariesPending )\n\t\t\t.then( ( libraries ) => {\n\n\t\t\t\tconst jsContent = libraries[ 0 ];\n\n\t\t\t\tif ( ! useJS ) {\n\n\t\t\t\t\tthis.decoderConfig.wasmBinary = libraries[ 1 ];\n\n\t\t\t\t}\n\n\t\t\t\tconst fn = DRACOWorker.toString();\n\n\t\t\t\tconst body = [\n\t\t\t\t\t'/* draco decoder */',\n\t\t\t\t\tjsContent,\n\t\t\t\t\t'',\n\t\t\t\t\t'/* worker */',\n\t\t\t\t\tfn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) )\n\t\t\t\t].join( '\\n' );\n\n\t\t\t\tthis.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) );\n\n\t\t\t} );\n\n\t\treturn this.decoderPending;\n\n\t}\n\n\t_getWorker( taskID, taskCost ) {\n\n\t\treturn this._initDecoder().then( () => {\n\n\t\t\tif ( this.workerPool.length < this.workerLimit ) {\n\n\t\t\t\tconst worker = new Worker( this.workerSourceURL );\n\n\t\t\t\tworker._callbacks = {};\n\t\t\t\tworker._taskCosts = {};\n\t\t\t\tworker._taskLoad = 0;\n\n\t\t\t\tworker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } );\n\n\t\t\t\tworker.onmessage = function ( e ) {\n\n\t\t\t\t\tconst message = e.data;\n\n\t\t\t\t\tswitch ( message.type ) {\n\n\t\t\t\t\t\tcase 'decode':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].resolve( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'error':\n\t\t\t\t\t\t\tworker._callbacks[ message.id ].reject( message );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"' );\n\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tthis.workerPool.push( worker );\n\n\t\t\t} else {\n\n\t\t\t\tthis.workerPool.sort( function ( a, b ) {\n\n\t\t\t\t\treturn a._taskLoad > b._taskLoad ? - 1 : 1;\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tconst worker = this.workerPool[ this.workerPool.length - 1 ];\n\t\t\tworker._taskCosts[ taskID ] = taskCost;\n\t\t\tworker._taskLoad += taskCost;\n\t\t\treturn worker;\n\n\t\t} );\n\n\t}\n\n\t_releaseTask( worker, taskID ) {\n\n\t\tworker._taskLoad -= worker._taskCosts[ taskID ];\n\t\tdelete worker._callbacks[ taskID ];\n\t\tdelete worker._taskCosts[ taskID ];\n\n\t}\n\n\tdebug() {\n\n\t\tconsole.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) );\n\n\t}\n\n\tdispose() {\n\n\t\tfor ( let i = 0; i < this.workerPool.length; ++ i ) {\n\n\t\t\tthis.workerPool[ i ].terminate();\n\n\t\t}\n\n\t\tthis.workerPool.length = 0;\n\n\t\tif ( this.workerSourceURL !== '' ) {\n\n\t\t\tURL.revokeObjectURL( this.workerSourceURL );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n/* WEB WORKER */\n\nfunction DRACOWorker() {\n\n\tlet decoderConfig;\n\tlet decoderPending;\n\n\tonmessage = function ( e ) {\n\n\t\tconst message = e.data;\n\n\t\tswitch ( message.type ) {\n\n\t\t\tcase 'init':\n\t\t\t\tdecoderConfig = message.decoderConfig;\n\t\t\t\tdecoderPending = new Promise( function ( resolve/*, reject*/ ) {\n\n\t\t\t\t\tdecoderConfig.onModuleLoaded = function ( draco ) {\n\n\t\t\t\t\t\t// Module is Promise-like. Wrap before resolving to avoid loop.\n\t\t\t\t\t\tresolve( { draco: draco } );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tDracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t\tcase 'decode':\n\t\t\t\tconst buffer = message.buffer;\n\t\t\t\tconst taskConfig = message.taskConfig;\n\t\t\t\tdecoderPending.then( ( module ) => {\n\n\t\t\t\t\tconst draco = module.draco;\n\t\t\t\t\tconst decoder = new draco.Decoder();\n\n\t\t\t\t\ttry {\n\n\t\t\t\t\t\tconst geometry = decodeGeometry( draco, decoder, new Int8Array( buffer ), taskConfig );\n\n\t\t\t\t\t\tconst buffers = geometry.attributes.map( ( attr ) => attr.array.buffer );\n\n\t\t\t\t\t\tif ( geometry.index ) buffers.push( geometry.index.array.buffer );\n\n\t\t\t\t\t\tself.postMessage( { type: 'decode', id: message.id, geometry }, buffers );\n\n\t\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t\tconsole.error( error );\n\n\t\t\t\t\t\tself.postMessage( { type: 'error', id: message.id, error: error.message } );\n\n\t\t\t\t\t} finally {\n\n\t\t\t\t\t\tdraco.destroy( decoder );\n\n\t\t\t\t\t}\n\n\t\t\t\t} );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t};\n\n\tfunction decodeGeometry( draco, decoder, array, taskConfig ) {\n\n\t\tconst attributeIDs = taskConfig.attributeIDs;\n\t\tconst attributeTypes = taskConfig.attributeTypes;\n\n\t\tlet dracoGeometry;\n\t\tlet decodingStatus;\n\n\t\tconst geometryType = decoder.GetEncodedGeometryType( array );\n\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tdracoGeometry = new draco.Mesh();\n\t\t\tdecodingStatus = decoder.DecodeArrayToMesh( array, array.byteLength, dracoGeometry );\n\n\t\t} else if ( geometryType === draco.POINT_CLOUD ) {\n\n\t\t\tdracoGeometry = new draco.PointCloud();\n\t\t\tdecodingStatus = decoder.DecodeArrayToPointCloud( array, array.byteLength, dracoGeometry );\n\n\t\t} else {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Unexpected geometry type.' );\n\n\t\t}\n\n\t\tif ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) {\n\n\t\t\tthrow new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() );\n\n\t\t}\n\n\t\tconst geometry = { index: null, attributes: [] };\n\n\t\t// Gather all vertex attributes.\n\t\tfor ( const attributeName in attributeIDs ) {\n\n\t\t\tconst attributeType = self[ attributeTypes[ attributeName ] ];\n\n\t\t\tlet attribute;\n\t\t\tlet attributeID;\n\n\t\t\t// A Draco file may be created with default vertex attributes, whose attribute IDs\n\t\t\t// are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively,\n\t\t\t// a Draco file may contain a custom set of attributes, identified by known unique\n\t\t\t// IDs. glTF files always do the latter, and `.drc` files typically do the former.\n\t\t\tif ( taskConfig.useUniqueIDs ) {\n\n\t\t\t\tattributeID = attributeIDs[ attributeName ];\n\t\t\t\tattribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID );\n\n\t\t\t} else {\n\n\t\t\t\tattributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] );\n\n\t\t\t\tif ( attributeID === - 1 ) continue;\n\n\t\t\t\tattribute = decoder.GetAttribute( dracoGeometry, attributeID );\n\n\t\t\t}\n\n\t\t\tconst attributeResult = decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute );\n\n\t\t\tif ( attributeName === 'color' ) {\n\n\t\t\t\tattributeResult.vertexColorSpace = taskConfig.vertexColorSpace;\n\n\t\t\t}\n\n\t\t\tgeometry.attributes.push( attributeResult );\n\n\t\t}\n\n\t\t// Add index.\n\t\tif ( geometryType === draco.TRIANGULAR_MESH ) {\n\n\t\t\tgeometry.index = decodeIndex( draco, decoder, dracoGeometry );\n\n\t\t}\n\n\t\tdraco.destroy( dracoGeometry );\n\n\t\treturn geometry;\n\n\t}\n\n\tfunction decodeIndex( draco, decoder, dracoGeometry ) {\n\n\t\tconst numFaces = dracoGeometry.num_faces();\n\t\tconst numIndices = numFaces * 3;\n\t\tconst byteLength = numIndices * 4;\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr );\n\t\tconst index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn { array: index, itemSize: 1 };\n\n\t}\n\n\tfunction decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) {\n\n\t\tconst numComponents = attribute.num_components();\n\t\tconst numPoints = dracoGeometry.num_points();\n\t\tconst numValues = numPoints * numComponents;\n\t\tconst byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n\t\tconst dataType = getDracoDataType( draco, attributeType );\n\n\t\tconst ptr = draco._malloc( byteLength );\n\t\tdecoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dataType, byteLength, ptr );\n\t\tconst array = new attributeType( draco.HEAPF32.buffer, ptr, numValues ).slice();\n\t\tdraco._free( ptr );\n\n\t\treturn {\n\t\t\tname: attributeName,\n\t\t\tarray: array,\n\t\t\titemSize: numComponents\n\t\t};\n\n\t}\n\n\tfunction getDracoDataType( draco, attributeType ) {\n\n\t\tswitch ( attributeType ) {\n\n\t\t\tcase Float32Array: return draco.DT_FLOAT32;\n\t\t\tcase Int8Array: return draco.DT_INT8;\n\t\t\tcase Int16Array: return draco.DT_INT16;\n\t\t\tcase Int32Array: return draco.DT_INT32;\n\t\t\tcase Uint8Array: return draco.DT_UINT8;\n\t\t\tcase Uint16Array: return draco.DT_UINT16;\n\t\t\tcase Uint32Array: return draco.DT_UINT32;\n\n\t\t}\n\n\t}\n\n}\n\nexport { DRACOLoader };\n","// GLTF.tsx\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';\nimport Label from '../primitives/Label';\nimport Group, { GroupProps } from './Group';\nimport { useViewContext } from '../utils/hooks';\n\nconst { useEffect, useMemo, useRef, memo } = React;\n\nconst DRACO_DECODER_SOURCE =\n 'https://raw.githubusercontent.com/mrdoob/three.js/master/examples/jsm/libs/draco/';\n\ninterface GLTFProps extends GroupProps {\n gltfPath?: string;\n gltfURL: string;\n dracoDecoderPath?: string;\n}\n\nfunction updateAllMaterials(\n color: string,\n /* eslint-disable @typescript-eslint/no-explicit-any */\n children: any,\n materialProps: any\n /* eslint-enable @typescript-eslint/no-explicit-any */\n): void {\n if (children == null) {\n return;\n }\n\n const _children = Array.isArray(children) ? children : [children];\n\n _children.map(object => {\n // Recurse into Groups\n if (object.constructor.name === 'Group' && object.children) {\n updateAllMaterials(color, object.children, materialProps);\n }\n\n // @ts-ignore:TS2339 material does not exist on Object3D\n if (object.material) {\n if (color) {\n // @ts-ignore:TS2339 material does not exist on Object3D\n object.material.color.set(color);\n }\n Object.entries(materialProps).map(([propName, value]) => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore:TS2339 material does not exist on Object3D\n object.material[propName] = value;\n /* eslint-enable no-param-reassign */\n return null;\n });\n }\n\n return null;\n });\n}\n\ninterface LoadGLTFProps {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n group: React.MutableRefObject<any>;\n gltfPath: string;\n gltfURL: string;\n dracoDecoderPath: string;\n envMap: THREE.Texture;\n castShadow: boolean;\n receiveShadow: boolean;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n materialProps: any;\n}\n\nfunction loadGLTF({\n group,\n gltfPath,\n gltfURL,\n dracoDecoderPath,\n envMap,\n castShadow,\n receiveShadow,\n materialProps,\n}: LoadGLTFProps): void {\n // No GLTF\n if (gltfURL == null) {\n /* eslint-disable no-console */\n console.warn('[GLTF] No gltfURL');\n /* eslint-enable no-console */\n return;\n }\n\n // GLTF\n const gltfLoader = new GLTFLoader();\n const dracoLoader = new DRACOLoader();\n dracoLoader.setDecoderPath(dracoDecoderPath);\n gltfLoader.setDRACOLoader(dracoLoader);\n\n gltfLoader.setPath(gltfPath);\n gltfLoader.load(gltfURL, gltf => {\n if (group.current && gltf.scene && gltf.scene.children) {\n // Remove Loading Label or Previous OBJ\n if (group.current.children) {\n group.current.children.map(child => group.current.remove(child));\n }\n\n // Material Props\n if (materialProps) {\n const { color, ...otherMaterialProps } = materialProps;\n updateAllMaterials(color, gltf.scene.children, otherMaterialProps);\n }\n\n // Env Map + Shadows\n gltf.scene.traverse(mesh => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore\n if (mesh.isMesh) {\n if (envMap) {\n // @ts-ignore\n mesh.material.envMap = envMap;\n }\n mesh.castShadow = castShadow;\n mesh.receiveShadow = receiveShadow;\n }\n /* eslint-enable no-param-reassign */\n });\n\n // Add GLTF\n group.current.add(gltf.scene);\n }\n });\n}\n\nconst GLTF: React.FunctionComponent<GLTFProps> = function GLTF({\n gltfPath = '',\n gltfURL,\n dracoDecoderPath = DRACO_DECODER_SOURCE,\n view3DEnvMap = false,\n castShadow = false,\n receiveShadow = false,\n ...otherProps\n}) {\n const group = useRef<THREE.Group | null>(null);\n const { envMap } = useViewContext();\n\n // Material Props\n const materialProps = useMemo(\n function updateMaterialProps() {\n // No Material Props\n if (!otherProps || Object.keys(otherProps).length === 0) {\n return undefined;\n }\n\n // Acceptable Material Props\n const materialPropsKeys = [\n 'color',\n 'wireframe',\n 'opacity',\n 'transparent',\n 'side',\n 'depthWrite',\n 'depthTest',\n ];\n\n // Extract Acceptable Props\n const props = {};\n materialPropsKeys.map(propName => {\n if (otherProps[propName]) {\n props[propName] = otherProps[propName];\n }\n\n return null;\n });\n\n return Object.keys(props).length > 0 ? props : undefined;\n },\n [otherProps]\n );\n\n // Environment Map\n const _envMap = useMemo(\n function updateEnvMap() {\n if (view3DEnvMap) {\n return envMap;\n }\n\n return null;\n },\n [view3DEnvMap, envMap]\n );\n\n // Loading Text\n const loadingText = useMemo(\n function updateLoadText() {\n return gltfURL || 'No gltfURL';\n },\n [gltfURL]\n );\n\n // Load GLTF\n useEffect(\n function updateGLTF() {\n if (group) {\n loadGLTF({\n group,\n gltfPath,\n gltfURL,\n dracoDecoderPath,\n envMap: _envMap,\n castShadow,\n receiveShadow,\n materialProps,\n });\n }\n },\n [\n group,\n gltfPath,\n gltfURL,\n dracoDecoderPath,\n _envMap,\n castShadow,\n receiveShadow,\n materialProps,\n ]\n );\n\n return (\n <Group ref={group} {...otherProps}>\n <Label text={loadingText} textColor=\"red\" />\n </Group>\n );\n};\n\nconst GLTFMemo = memo(GLTF);\nGLTFMemo.displayName = 'GLTF';\nexport default GLTFMemo;\n","import {\n\tBufferGeometry,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tGroup,\n\tLineBasicMaterial,\n\tLineSegments,\n\tLoader,\n\tMaterial,\n\tMesh,\n\tMeshPhongMaterial,\n\tPoints,\n\tPointsMaterial,\n\tVector3,\n\tColor,\n\tSRGBColorSpace\n} from 'three';\n\n// o object_name | g group_name\nconst _object_pattern = /^[og]\\s*(.+)?/;\n// mtllib file_reference\nconst _material_library_pattern = /^mtllib /;\n// usemtl material_name\nconst _material_use_pattern = /^usemtl /;\n// usemap map_name\nconst _map_use_pattern = /^usemap /;\nconst _face_vertex_data_separator_pattern = /\\s+/;\n\nconst _vA = new Vector3();\nconst _vB = new Vector3();\nconst _vC = new Vector3();\n\nconst _ab = new Vector3();\nconst _cb = new Vector3();\n\nconst _color = new Color();\n\nfunction ParserState() {\n\n\tconst state = {\n\t\tobjects: [],\n\t\tobject: {},\n\n\t\tvertices: [],\n\t\tnormals: [],\n\t\tcolors: [],\n\t\tuvs: [],\n\n\t\tmaterials: {},\n\t\tmaterialLibraries: [],\n\n\t\tstartObject: function ( name, fromDeclaration ) {\n\n\t\t\t// If the current object (initial from reset) is not from a g/o declaration in the parsed\n\t\t\t// file. We need to use it for the first parsed g/o to keep things in sync.\n\t\t\tif ( this.object && this.object.fromDeclaration === false ) {\n\n\t\t\t\tthis.object.name = name;\n\t\t\t\tthis.object.fromDeclaration = ( fromDeclaration !== false );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst previousMaterial = ( this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined );\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t\tthis.object = {\n\t\t\t\tname: name || '',\n\t\t\t\tfromDeclaration: ( fromDeclaration !== false ),\n\n\t\t\t\tgeometry: {\n\t\t\t\t\tvertices: [],\n\t\t\t\t\tnormals: [],\n\t\t\t\t\tcolors: [],\n\t\t\t\t\tuvs: [],\n\t\t\t\t\thasUVIndices: false\n\t\t\t\t},\n\t\t\t\tmaterials: [],\n\t\t\t\tsmooth: true,\n\n\t\t\t\tstartMaterial: function ( name, libraries ) {\n\n\t\t\t\t\tconst previous = this._finalize( false );\n\n\t\t\t\t\t// New usemtl declaration overwrites an inherited material, except if faces were declared\n\t\t\t\t\t// after the material, then it must be preserved for proper MultiMaterial continuation.\n\t\t\t\t\tif ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {\n\n\t\t\t\t\t\tthis.materials.splice( previous.index, 1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst material = {\n\t\t\t\t\t\tindex: this.materials.length,\n\t\t\t\t\t\tname: name || '',\n\t\t\t\t\t\tmtllib: ( Array.isArray( libraries ) && libraries.length > 0 ? libraries[ libraries.length - 1 ] : '' ),\n\t\t\t\t\t\tsmooth: ( previous !== undefined ? previous.smooth : this.smooth ),\n\t\t\t\t\t\tgroupStart: ( previous !== undefined ? previous.groupEnd : 0 ),\n\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\tinherited: false,\n\n\t\t\t\t\t\tclone: function ( index ) {\n\n\t\t\t\t\t\t\tconst cloned = {\n\t\t\t\t\t\t\t\tindex: ( typeof index === 'number' ? index : this.index ),\n\t\t\t\t\t\t\t\tname: this.name,\n\t\t\t\t\t\t\t\tmtllib: this.mtllib,\n\t\t\t\t\t\t\t\tsmooth: this.smooth,\n\t\t\t\t\t\t\t\tgroupStart: 0,\n\t\t\t\t\t\t\t\tgroupEnd: - 1,\n\t\t\t\t\t\t\t\tgroupCount: - 1,\n\t\t\t\t\t\t\t\tinherited: false\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcloned.clone = this.clone.bind( cloned );\n\t\t\t\t\t\t\treturn cloned;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tthis.materials.push( material );\n\n\t\t\t\t\treturn material;\n\n\t\t\t\t},\n\n\t\t\t\tcurrentMaterial: function () {\n\n\t\t\t\t\tif ( this.materials.length > 0 ) {\n\n\t\t\t\t\t\treturn this.materials[ this.materials.length - 1 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t},\n\n\t\t\t\t_finalize: function ( end ) {\n\n\t\t\t\t\tconst lastMultiMaterial = this.currentMaterial();\n\t\t\t\t\tif ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {\n\n\t\t\t\t\t\tlastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n\t\t\t\t\t\tlastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n\t\t\t\t\t\tlastMultiMaterial.inherited = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore objects tail materials if no face declarations followed them before a new o/g started.\n\t\t\t\t\tif ( end && this.materials.length > 1 ) {\n\n\t\t\t\t\t\tfor ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {\n\n\t\t\t\t\t\t\tif ( this.materials[ mi ].groupCount <= 0 ) {\n\n\t\t\t\t\t\t\t\tthis.materials.splice( mi, 1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guarantee at least one empty material, this makes the creation later more straight forward.\n\t\t\t\t\tif ( end && this.materials.length === 0 ) {\n\n\t\t\t\t\t\tthis.materials.push( {\n\t\t\t\t\t\t\tname: '',\n\t\t\t\t\t\t\tsmooth: this.smooth\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn lastMultiMaterial;\n\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Inherit previous objects material.\n\t\t\t// Spec tells us that a declared material must be set to all objects until a new material is declared.\n\t\t\t// If a usemtl declaration is encountered while this new object is being parsed, it will\n\t\t\t// overwrite the inherited material. Exception being that there was already face declarations\n\t\t\t// to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n\t\t\tif ( previousMaterial && previousMaterial.name && typeof previousMaterial.clone === 'function' ) {\n\n\t\t\t\tconst declared = previousMaterial.clone( 0 );\n\t\t\t\tdeclared.inherited = true;\n\t\t\t\tthis.object.materials.push( declared );\n\n\t\t\t}\n\n\t\t\tthis.objects.push( this.object );\n\n\t\t},\n\n\t\tfinalize: function () {\n\n\t\t\tif ( this.object && typeof this.object._finalize === 'function' ) {\n\n\t\t\t\tthis.object._finalize( true );\n\n\t\t\t}\n\n\t\t},\n\n\t\tparseVertexIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseNormalIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 3 ) * 3;\n\n\t\t},\n\n\t\tparseUVIndex: function ( value, len ) {\n\n\t\t\tconst index = parseInt( value, 10 );\n\t\t\treturn ( index >= 0 ? index - 1 : index + len / 2 ) * 2;\n\n\t\t},\n\n\t\taddVertex: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddVertexPoint: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddVertexLine: function ( a ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.vertices;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\n\t\t},\n\n\t\taddNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.normals;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddFaceNormal: function ( a, b, c ) {\n\n\t\t\tconst src = this.vertices;\n\t\t\tconst dst = this.object.geometry.normals;\n\n\t\t\t_vA.fromArray( src, a );\n\t\t\t_vB.fromArray( src, b );\n\t\t\t_vC.fromArray( src, c );\n\n\t\t\t_cb.subVectors( _vC, _vB );\n\t\t\t_ab.subVectors( _vA, _vB );\n\t\t\t_cb.cross( _ab );\n\n\t\t\t_cb.normalize();\n\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\t\t\tdst.push( _cb.x, _cb.y, _cb.z );\n\n\t\t},\n\n\t\taddColor: function ( a, b, c ) {\n\n\t\t\tconst src = this.colors;\n\t\t\tconst dst = this.object.geometry.colors;\n\n\t\t\tif ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );\n\t\t\tif ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );\n\t\t\tif ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );\n\n\t\t},\n\n\t\taddUV: function ( a, b, c ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\t\t\tdst.push( src[ b + 0 ], src[ b + 1 ] );\n\t\t\tdst.push( src[ c + 0 ], src[ c + 1 ] );\n\n\t\t},\n\n\t\taddDefaultUV: function () {\n\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\t\t\tdst.push( 0, 0 );\n\n\t\t},\n\n\t\taddUVLine: function ( a ) {\n\n\t\t\tconst src = this.uvs;\n\t\t\tconst dst = this.object.geometry.uvs;\n\n\t\t\tdst.push( src[ a + 0 ], src[ a + 1 ] );\n\n\t\t},\n\n\t\taddFace: function ( a, b, c, ua, ub, uc, na, nb, nc ) {\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tlet ia = this.parseVertexIndex( a, vLen );\n\t\t\tlet ib = this.parseVertexIndex( b, vLen );\n\t\t\tlet ic = this.parseVertexIndex( c, vLen );\n\n\t\t\tthis.addVertex( ia, ib, ic );\n\t\t\tthis.addColor( ia, ib, ic );\n\n\t\t\t// normals\n\n\t\t\tif ( na !== undefined && na !== '' ) {\n\n\t\t\t\tconst nLen = this.normals.length;\n\n\t\t\t\tia = this.parseNormalIndex( na, nLen );\n\t\t\t\tib = this.parseNormalIndex( nb, nLen );\n\t\t\t\tic = this.parseNormalIndex( nc, nLen );\n\n\t\t\t\tthis.addNormal( ia, ib, ic );\n\n\t\t\t} else {\n\n\t\t\t\tthis.addFaceNormal( ia, ib, ic );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tif ( ua !== undefined && ua !== '' ) {\n\n\t\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\t\tia = this.parseUVIndex( ua, uvLen );\n\t\t\t\tib = this.parseUVIndex( ub, uvLen );\n\t\t\t\tic = this.parseUVIndex( uc, uvLen );\n\n\t\t\t\tthis.addUV( ia, ib, ic );\n\n\t\t\t\tthis.object.geometry.hasUVIndices = true;\n\n\t\t\t} else {\n\n\t\t\t\t// add placeholder values (for inconsistent face definitions)\n\n\t\t\t\tthis.addDefaultUV();\n\n\t\t\t}\n\n\t\t},\n\n\t\taddPointGeometry: function ( vertices ) {\n\n\t\t\tthis.object.geometry.type = 'Points';\n\n\t\t\tconst vLen = this.vertices.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tconst index = this.parseVertexIndex( vertices[ vi ], vLen );\n\n\t\t\t\tthis.addVertexPoint( index );\n\t\t\t\tthis.addColor( index );\n\n\t\t\t}\n\n\t\t},\n\n\t\taddLineGeometry: function ( vertices, uvs ) {\n\n\t\t\tthis.object.geometry.type = 'Line';\n\n\t\t\tconst vLen = this.vertices.length;\n\t\t\tconst uvLen = this.uvs.length;\n\n\t\t\tfor ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {\n\n\t\t\t\tthis.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );\n\n\t\t\t}\n\n\t\t\tfor ( let uvi = 0, l = uvs.length; uvi < l; uvi ++ ) {\n\n\t\t\t\tthis.addUVLine( this.parseUVIndex( uvs[ uvi ], uvLen ) );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tstate.startObject( '', false );\n\n\treturn state;\n\n}\n\n\n/**\n * A loader for the OBJ format.\n *\n * The [OBJ format]{@link https://en.wikipedia.org/wiki/Wavefront_.obj_file} is a simple data-format that\n * represents 3D geometry in a human readable format as the position of each vertex, the UV position of\n * each texture coordinate vertex, vertex normals, and the faces that make each polygon defined as a list\n * of vertices, and texture vertices.\n *\n * ```js\n * const loader = new OBJLoader();\n * const object = await loader.loadAsync( 'models/monster.obj' );\n * scene.add( object );\n * ```\n *\n * @augments Loader\n * @three_import import { OBJLoader } from 'three/addons/loaders/OBJLoader.js';\n */\nclass OBJLoader extends Loader {\n\n\t/**\n\t * Constructs a new OBJ loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * A reference to a material creator.\n\t\t *\n\t\t * @type {?MaterialCreator}\n\t\t * @default null\n\t\t */\n\t\tthis.materials = null;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded OBJ asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Group)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Sets the material creator for this OBJ. This object is loaded via {@link MTLLoader}.\n\t *\n\t * @param {MaterialCreator} materials - An object that creates the materials for this OBJ.\n\t * @return {OBJLoader} A reference to this loader.\n\t */\n\tsetMaterials( materials ) {\n\n\t\tthis.materials = materials;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses the given OBJ data and returns the resulting group.\n\t *\n\t * @param {string} text - The raw OBJ data as a string.\n\t * @return {Group} The parsed OBJ.\n\t */\n\tparse( text ) {\n\n\t\tconst state = new ParserState();\n\n\t\tif ( text.indexOf( '\\r\\n' ) !== - 1 ) {\n\n\t\t\t// This is faster than String.split with regex that splits on both\n\t\t\ttext = text.replace( /\\r\\n/g, '\\n' );\n\n\t\t}\n\n\t\tif ( text.indexOf( '\\\\\\n' ) !== - 1 ) {\n\n\t\t\t// join lines separated by a line continuation character (\\)\n\t\t\ttext = text.replace( /\\\\\\n/g, '' );\n\n\t\t}\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet result = [];\n\n\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\tconst line = lines[ i ].trimStart();\n\n\t\t\tif ( line.length === 0 ) continue;\n\n\t\t\tconst lineFirstChar = line.charAt( 0 );\n\n\t\t\t// @todo invoke passed in handler if any\n\t\t\tif ( lineFirstChar === '#' ) continue; // skip comments\n\n\t\t\tif ( lineFirstChar === 'v' ) {\n\n\t\t\t\tconst data = line.split( _face_vertex_data_separator_pattern );\n\n\t\t\t\tswitch ( data[ 0 ] ) {\n\n\t\t\t\t\tcase 'v':\n\t\t\t\t\t\tstate.vertices.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif ( data.length >= 7 ) {\n\n\t\t\t\t\t\t\t_color.setRGB(\n\t\t\t\t\t\t\t\tparseFloat( data[ 4 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 5 ] ),\n\t\t\t\t\t\t\t\tparseFloat( data[ 6 ] ),\n\t\t\t\t\t\t\t\tSRGBColorSpace\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tstate.colors.push( _color.r, _color.g, _color.b );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// if no colors are defined, add placeholders so color and vertex indices match\n\n\t\t\t\t\t\t\tstate.colors.push( undefined, undefined, undefined );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vn':\n\t\t\t\t\t\tstate.normals.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 3 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'vt':\n\t\t\t\t\t\tstate.uvs.push(\n\t\t\t\t\t\t\tparseFloat( data[ 1 ] ),\n\t\t\t\t\t\t\tparseFloat( data[ 2 ] )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'f' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst vertexData = lineData.split( _face_vertex_data_separator_pattern );\n\t\t\t\tconst faceVertices = [];\n\n\t\t\t\t// Parse the face vertex data into an easy to work with format\n\n\t\t\t\tfor ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {\n\n\t\t\t\t\tconst vertex = vertexData[ j ];\n\n\t\t\t\t\tif ( vertex.length > 0 ) {\n\n\t\t\t\t\t\tconst vertexParts = vertex.split( '/' );\n\t\t\t\t\t\tfaceVertices.push( vertexParts );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Draw an edge between the first vertex and all subsequent vertices to form an n-gon\n\n\t\t\t\tconst v1 = faceVertices[ 0 ];\n\n\t\t\t\tfor ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {\n\n\t\t\t\t\tconst v2 = faceVertices[ j ];\n\t\t\t\t\tconst v3 = faceVertices[ j + 1 ];\n\n\t\t\t\t\tstate.addFace(\n\t\t\t\t\t\tv1[ 0 ], v2[ 0 ], v3[ 0 ],\n\t\t\t\t\t\tv1[ 1 ], v2[ 1 ], v3[ 1 ],\n\t\t\t\t\t\tv1[ 2 ], v2[ 2 ], v3[ 2 ]\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t} else if ( lineFirstChar === 'l' ) {\n\n\t\t\t\tconst lineParts = line.substring( 1 ).trim().split( ' ' );\n\t\t\t\tlet lineVertices = [];\n\t\t\t\tconst lineUVs = [];\n\n\t\t\t\tif ( line.indexOf( '/' ) === - 1 ) {\n\n\t\t\t\t\tlineVertices = lineParts;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let li = 0, llen = lineParts.length; li < llen; li ++ ) {\n\n\t\t\t\t\t\tconst parts = lineParts[ li ].split( '/' );\n\n\t\t\t\t\t\tif ( parts[ 0 ] !== '' ) lineVertices.push( parts[ 0 ] );\n\t\t\t\t\t\tif ( parts[ 1 ] !== '' ) lineUVs.push( parts[ 1 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.addLineGeometry( lineVertices, lineUVs );\n\n\t\t\t} else if ( lineFirstChar === 'p' ) {\n\n\t\t\t\tconst lineData = line.slice( 1 ).trim();\n\t\t\t\tconst pointData = lineData.split( ' ' );\n\n\t\t\t\tstate.addPointGeometry( pointData );\n\n\t\t\t} else if ( ( result = _object_pattern.exec( line ) ) !== null ) {\n\n\t\t\t\t// o object_name\n\t\t\t\t// or\n\t\t\t\t// g group_name\n\n\t\t\t\t// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869\n\t\t\t\t// let name = result[ 0 ].slice( 1 ).trim();\n\t\t\t\tconst name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );\n\n\t\t\t\tstate.startObject( name );\n\n\t\t\t} else if ( _material_use_pattern.test( line ) ) {\n\n\t\t\t\t// material\n\n\t\t\t\tstate.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );\n\n\t\t\t} else if ( _material_library_pattern.test( line ) ) {\n\n\t\t\t\t// mtl file\n\n\t\t\t\tstate.materialLibraries.push( line.substring( 7 ).trim() );\n\n\t\t\t} else if ( _map_use_pattern.test( line ) ) {\n\n\t\t\t\t// the line is parsed but ignored since the loader assumes textures are defined MTL files\n\t\t\t\t// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.' );\n\n\t\t\t} else if ( lineFirstChar === 's' ) {\n\n\t\t\t\tresult = line.split( ' ' );\n\n\t\t\t\t// smooth shading\n\n\t\t\t\t// @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n\t\t\t\t// but does not define a usemtl for each face set.\n\t\t\t\t// This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n\t\t\t\t// This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n\t\t\t\t// where explicit usemtl defines geometry groups.\n\t\t\t\t// Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n\t\t\t\t/*\n\t\t\t\t\t * http://paulbourke.net/dataformats/obj/\n\t\t\t\t\t *\n\t\t\t\t\t * From chapter \"Grouping\" Syntax explanation \"s group_number\":\n\t\t\t\t\t * \"group_number is the smoothing group number. To turn off smoothing groups, use a value of 0 or off.\n\t\t\t\t\t * Polygonal elements use group numbers to put elements in different smoothing groups. For free-form\n\t\t\t\t\t * surfaces, smoothing groups are either turned on or off; there is no difference between values greater\n\t\t\t\t\t * than 0.\"\n\t\t\t\t\t */\n\t\t\t\tif ( result.length > 1 ) {\n\n\t\t\t\t\tconst value = result[ 1 ].trim().toLowerCase();\n\t\t\t\t\tstate.object.smooth = ( value !== '0' && value !== 'off' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ZBrush can produce \"s\" lines #11707\n\t\t\t\t\tstate.object.smooth = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst material = state.object.currentMaterial();\n\t\t\t\tif ( material ) material.smooth = state.object.smooth;\n\n\t\t\t} else {\n\n\t\t\t\t// Handle null terminated files without exception\n\t\t\t\tif ( line === '\\0' ) continue;\n\n\t\t\t\tconsole.warn( 'THREE.OBJLoader: Unexpected line: \"' + line + '\"' );\n\n\t\t\t}\n\n\t\t}\n\n\t\tstate.finalize();\n\n\t\tconst container = new Group();\n\t\tcontainer.materialLibraries = [].concat( state.materialLibraries );\n\n\t\tconst hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );\n\n\t\tif ( hasPrimitives === true ) {\n\n\t\t\tfor ( let i = 0, l = state.objects.length; i < l; i ++ ) {\n\n\t\t\t\tconst object = state.objects[ i ];\n\t\t\t\tconst geometry = object.geometry;\n\t\t\t\tconst materials = object.materials;\n\t\t\t\tconst isLine = ( geometry.type === 'Line' );\n\t\t\t\tconst isPoints = ( geometry.type === 'Points' );\n\t\t\t\tlet hasVertexColors = false;\n\n\t\t\t\t// Skip o/g line declarations that did not follow with any faces\n\t\t\t\tif ( geometry.vertices.length === 0 ) continue;\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( geometry.vertices, 3 ) );\n\n\t\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'normal', new Float32BufferAttribute( geometry.normals, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\t\thasVertexColors = true;\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( geometry.colors, 3 ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.hasUVIndices === true ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'uv', new Float32BufferAttribute( geometry.uvs, 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Create materials\n\n\t\t\t\tconst createdMaterials = [];\n\n\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\tconst materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;\n\t\t\t\t\tlet material = state.materials[ materialHash ];\n\n\t\t\t\t\tif ( this.materials !== null ) {\n\n\t\t\t\t\t\tmaterial = this.materials.create( sourceMaterial.name );\n\n\t\t\t\t\t\t// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n\t\t\t\t\t\tif ( isLine && material && ! ( material instanceof LineBasicMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialLine = new LineBasicMaterial();\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialLine, material );\n\t\t\t\t\t\t\tmaterialLine.color.copy( material.color );\n\t\t\t\t\t\t\tmaterial = materialLine;\n\n\t\t\t\t\t\t} else if ( isPoints && material && ! ( material instanceof PointsMaterial ) ) {\n\n\t\t\t\t\t\t\tconst materialPoints = new PointsMaterial( { size: 10, sizeAttenuation: false } );\n\t\t\t\t\t\t\tMaterial.prototype.copy.call( materialPoints, material );\n\t\t\t\t\t\t\tmaterialPoints.color.copy( material.color );\n\t\t\t\t\t\t\tmaterialPoints.map = material.map;\n\t\t\t\t\t\t\tmaterial = materialPoints;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( material === undefined ) {\n\n\t\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\t\tmaterial = new LineBasicMaterial();\n\n\t\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\t\tmaterial = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tmaterial = new MeshPhongMaterial();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterial.name = sourceMaterial.name;\n\t\t\t\t\t\tmaterial.flatShading = sourceMaterial.smooth ? false : true;\n\t\t\t\t\t\tmaterial.vertexColors = hasVertexColors;\n\n\t\t\t\t\t\tstate.materials[ materialHash ] = material;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcreatedMaterials.push( material );\n\n\t\t\t\t}\n\n\t\t\t\t// Create mesh\n\n\t\t\t\tlet mesh;\n\n\t\t\t\tif ( createdMaterials.length > 1 ) {\n\n\t\t\t\t\tfor ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {\n\n\t\t\t\t\t\tconst sourceMaterial = materials[ mi ];\n\t\t\t\t\t\tbuffergeometry.addGroup( sourceMaterial.groupStart, sourceMaterial.groupCount, mi );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( isLine ) {\n\n\t\t\t\t\t\tmesh = new LineSegments( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else if ( isPoints ) {\n\n\t\t\t\t\t\tmesh = new Points( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmesh = new Mesh( buffergeometry, createdMaterials[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmesh.name = object.name;\n\n\t\t\t\tcontainer.add( mesh );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// if there is only the default parser state object with no geometry data, interpret data as point cloud\n\n\t\t\tif ( state.vertices.length > 0 ) {\n\n\t\t\t\tconst material = new PointsMaterial( { size: 1, sizeAttenuation: false } );\n\n\t\t\t\tconst buffergeometry = new BufferGeometry();\n\n\t\t\t\tbuffergeometry.setAttribute( 'position', new Float32BufferAttribute( state.vertices, 3 ) );\n\n\t\t\t\tif ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {\n\n\t\t\t\t\tbuffergeometry.setAttribute( 'color', new Float32BufferAttribute( state.colors, 3 ) );\n\t\t\t\t\tmaterial.vertexColors = true;\n\n\t\t\t\t}\n\n\t\t\t\tconst points = new Points( buffergeometry, material );\n\t\t\t\tcontainer.add( points );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn container;\n\n\t}\n\n}\n\nexport { OBJLoader };\n","import {\n\tColor,\n\tColorManagement,\n\tDefaultLoadingManager,\n\tFileLoader,\n\tFrontSide,\n\tLoader,\n\tLoaderUtils,\n\tMeshPhongMaterial,\n\tRepeatWrapping,\n\tTextureLoader,\n\tVector2,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * A loader for the MTL format.\n *\n * The Material Template Library format (MTL) or .MTL File Format is a companion file format\n * to OBJ that describes surface shading (material) properties of objects within one or more\n * OBJ files.\n *\n * ```js\n * const loader = new MTLLoader();\n * const materials = await loader.loadAsync( 'models/obj/male02/male02.mtl' );\n *\n * const objLoader = new OBJLoader();\n * objLoader.setMaterials( materials );\n * ```\n *\n * @augments Loader\n * @three_import import { MTLLoader } from 'three/addons/loaders/MTLLoader.js';\n */\nclass MTLLoader extends Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded MTL asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(MaterialCreator)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;\n\n\t\tconst loader = new FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( text, path ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Sets the material options.\n\t *\n\t * @param {MTLLoader~MaterialOptions} value - The material options.\n\t * @return {MTLLoader} A reference to this loader.\n\t */\n\tsetMaterialOptions( value ) {\n\n\t\tthis.materialOptions = value;\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * Parses the given MTL data and returns the resulting material creator.\n\t *\n\t * @param {string} text - The raw MTL data as a string.\n\t * @param {string} path - The URL base path.\n\t * @return {MaterialCreator} The material creator.\n\t */\n\tparse( text, path ) {\n\n\t\tconst lines = text.split( '\\n' );\n\t\tlet info = {};\n\t\tconst delimiter_pattern = /\\s+/;\n\t\tconst materialsInfo = {};\n\n\t\tfor ( let i = 0; i < lines.length; i ++ ) {\n\n\t\t\tlet line = lines[ i ];\n\t\t\tline = line.trim();\n\n\t\t\tif ( line.length === 0 || line.charAt( 0 ) === '#' ) {\n\n\t\t\t\t// Blank line or comment ignore\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tconst pos = line.indexOf( ' ' );\n\n\t\t\tlet key = ( pos >= 0 ) ? line.substring( 0, pos ) : line;\n\t\t\tkey = key.toLowerCase();\n\n\t\t\tlet value = ( pos >= 0 ) ? line.substring( pos + 1 ) : '';\n\t\t\tvalue = value.trim();\n\n\t\t\tif ( key === 'newmtl' ) {\n\n\t\t\t\t// New material\n\n\t\t\t\tinfo = { name: value };\n\t\t\t\tmaterialsInfo[ value ] = info;\n\n\t\t\t} else {\n\n\t\t\t\tif ( key === 'ka' || key === 'kd' || key === 'ks' || key === 'ke' ) {\n\n\t\t\t\t\tconst ss = value.split( delimiter_pattern, 3 );\n\t\t\t\t\tinfo[ key ] = [ parseFloat( ss[ 0 ] ), parseFloat( ss[ 1 ] ), parseFloat( ss[ 2 ] ) ];\n\n\t\t\t\t} else {\n\n\t\t\t\t\tinfo[ key ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst materialCreator = new MaterialCreator( this.resourcePath || path, this.materialOptions );\n\t\tmaterialCreator.setCrossOrigin( this.crossOrigin );\n\t\tmaterialCreator.setManager( this.manager );\n\t\tmaterialCreator.setMaterials( materialsInfo );\n\t\treturn materialCreator;\n\n\t}\n\n}\n\n/**\n * Material options of `MTLLoader`.\n *\n * @typedef {Object} MTLLoader~MaterialOptions\n * @property {(FrontSide|BackSide|DoubleSide)} [side=FrontSide] - Which side to apply the material.\n * @property {(RepeatWrapping|ClampToEdgeWrapping|MirroredRepeatWrapping)} [wrap=RepeatWrapping] - What type of wrapping to apply for textures.\n * @property {boolean} [normalizeRGB=false] - Whether RGB colors should be normalized to `0-1` from `0-255`.\n * @property {boolean} [ignoreZeroRGBs=false] - Ignore values of RGBs (Ka,Kd,Ks) that are all 0's.\n */\n\nclass MaterialCreator {\n\n\tconstructor( baseUrl = '', options = {} ) {\n\n\t\tthis.baseUrl = baseUrl;\n\t\tthis.options = options;\n\t\tthis.materialsInfo = {};\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t\tthis.crossOrigin = 'anonymous';\n\n\t\tthis.side = ( this.options.side !== undefined ) ? this.options.side : FrontSide;\n\t\tthis.wrap = ( this.options.wrap !== undefined ) ? this.options.wrap : RepeatWrapping;\n\n\t}\n\n\tsetCrossOrigin( value ) {\n\n\t\tthis.crossOrigin = value;\n\t\treturn this;\n\n\t}\n\n\tsetManager( value ) {\n\n\t\tthis.manager = value;\n\n\t}\n\n\tsetMaterials( materialsInfo ) {\n\n\t\tthis.materialsInfo = this.convert( materialsInfo );\n\t\tthis.materials = {};\n\t\tthis.materialsArray = [];\n\t\tthis.nameLookup = {};\n\n\t}\n\n\tconvert( materialsInfo ) {\n\n\t\tif ( ! this.options ) return materialsInfo;\n\n\t\tconst converted = {};\n\n\t\tfor ( const mn in materialsInfo ) {\n\n\t\t\t// Convert materials info into normalized form based on options\n\n\t\t\tconst mat = materialsInfo[ mn ];\n\n\t\t\tconst covmat = {};\n\n\t\t\tconverted[ mn ] = covmat;\n\n\t\t\tfor ( const prop in mat ) {\n\n\t\t\t\tlet save = true;\n\t\t\t\tlet value = mat[ prop ];\n\t\t\t\tconst lprop = prop.toLowerCase();\n\n\t\t\t\tswitch ( lprop ) {\n\n\t\t\t\t\tcase 'kd':\n\t\t\t\t\tcase 'ka':\n\t\t\t\t\tcase 'ks':\n\n\t\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\t\tif ( this.options && this.options.normalizeRGB ) {\n\n\t\t\t\t\t\t\tvalue = [ value[ 0 ] / 255, value[ 1 ] / 255, value[ 2 ] / 255 ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( this.options && this.options.ignoreZeroRGBs ) {\n\n\t\t\t\t\t\t\tif ( value[ 0 ] === 0 && value[ 1 ] === 0 && value[ 2 ] === 0 ) {\n\n\t\t\t\t\t\t\t\t// ignore\n\n\t\t\t\t\t\t\t\tsave = false;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( save ) {\n\n\t\t\t\t\tcovmat[ lprop ] = value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn converted;\n\n\t}\n\n\tpreload() {\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.create( mn );\n\n\t\t}\n\n\t}\n\n\tgetIndex( materialName ) {\n\n\t\treturn this.nameLookup[ materialName ];\n\n\t}\n\n\tgetAsArray() {\n\n\t\tlet index = 0;\n\n\t\tfor ( const mn in this.materialsInfo ) {\n\n\t\t\tthis.materialsArray[ index ] = this.create( mn );\n\t\t\tthis.nameLookup[ mn ] = index;\n\t\t\tindex ++;\n\n\t\t}\n\n\t\treturn this.materialsArray;\n\n\t}\n\n\tcreate( materialName ) {\n\n\t\tif ( this.materials[ materialName ] === undefined ) {\n\n\t\t\tthis.createMaterial_( materialName );\n\n\t\t}\n\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tcreateMaterial_( materialName ) {\n\n\t\t// Create material\n\n\t\tconst scope = this;\n\t\tconst mat = this.materialsInfo[ materialName ];\n\t\tconst params = {\n\n\t\t\tname: materialName,\n\t\t\tside: this.side\n\n\t\t};\n\n\t\tfunction resolveURL( baseUrl, url ) {\n\n\t\t\tif ( typeof url !== 'string' || url === '' )\n\t\t\t\treturn '';\n\n\t\t\t// Absolute URL\n\t\t\tif ( /^https?:\\/\\//i.test( url ) ) return url;\n\n\t\t\treturn baseUrl + url;\n\n\t\t}\n\n\t\tfunction setMapForType( mapType, value ) {\n\n\t\t\tif ( params[ mapType ] ) return; // Keep the first encountered texture\n\n\t\t\tconst texParams = scope.getTextureParams( value, params );\n\t\t\tconst map = scope.loadTexture( resolveURL( scope.baseUrl, texParams.url ) );\n\n\t\t\tmap.repeat.copy( texParams.scale );\n\t\t\tmap.offset.copy( texParams.offset );\n\n\t\t\tmap.wrapS = scope.wrap;\n\t\t\tmap.wrapT = scope.wrap;\n\n\t\t\tif ( mapType === 'map' || mapType === 'emissiveMap' ) {\n\n\t\t\t\tmap.colorSpace = SRGBColorSpace;\n\n\t\t\t}\n\n\t\t\tparams[ mapType ] = map;\n\n\t\t}\n\n\t\tfor ( const prop in mat ) {\n\n\t\t\tconst value = mat[ prop ];\n\t\t\tlet n;\n\n\t\t\tif ( value === '' ) continue;\n\n\t\t\tswitch ( prop.toLowerCase() ) {\n\n\t\t\t\t// Ns is material specular exponent\n\n\t\t\t\tcase 'kd':\n\n\t\t\t\t\t// Diffuse color (color under white light) using RGB values\n\n\t\t\t\t\tparams.color = ColorManagement.colorSpaceToWorking( new Color().fromArray( value ), SRGBColorSpace );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ks':\n\n\t\t\t\t\t// Specular color (color when light is reflected from shiny surface) using RGB values\n\t\t\t\t\tparams.specular = ColorManagement.colorSpaceToWorking( new Color().fromArray( value ), SRGBColorSpace );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ke':\n\n\t\t\t\t\t// Emissive using RGB values\n\t\t\t\t\tparams.emissive = ColorManagement.colorSpaceToWorking( new Color().fromArray( value ), SRGBColorSpace );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_kd':\n\n\t\t\t\t\t// Diffuse texture map\n\n\t\t\t\t\tsetMapForType( 'map', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ks':\n\n\t\t\t\t\t// Specular map\n\n\t\t\t\t\tsetMapForType( 'specularMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_ke':\n\n\t\t\t\t\t// Emissive map\n\n\t\t\t\t\tsetMapForType( 'emissiveMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'norm':\n\n\t\t\t\t\tsetMapForType( 'normalMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_bump':\n\t\t\t\tcase 'bump':\n\n\t\t\t\t\t// Bump texture map\n\n\t\t\t\t\tsetMapForType( 'bumpMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'disp':\n\n\t\t\t\t\t// Displacement texture map\n\n\t\t\t\t\tsetMapForType( 'displacementMap', value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'map_d':\n\n\t\t\t\t\t// Alpha map\n\n\t\t\t\t\tsetMapForType( 'alphaMap', value );\n\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'ns':\n\n\t\t\t\t\t// The specular exponent (defines the focus of the specular highlight)\n\t\t\t\t\t// A high exponent results in a tight, concentrated highlight. Ns values normally range from 0 to 1000.\n\n\t\t\t\t\tparams.shininess = parseFloat( value );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'd':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( n < 1 ) {\n\n\t\t\t\t\t\tparams.opacity = n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'tr':\n\t\t\t\t\tn = parseFloat( value );\n\n\t\t\t\t\tif ( this.options && this.options.invertTrProperty ) n = 1 - n;\n\n\t\t\t\t\tif ( n > 0 ) {\n\n\t\t\t\t\t\tparams.opacity = 1 - n;\n\t\t\t\t\t\tparams.transparent = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.materials[ materialName ] = new MeshPhongMaterial( params );\n\t\treturn this.materials[ materialName ];\n\n\t}\n\n\tgetTextureParams( value, matParams ) {\n\n\t\tconst texParams = {\n\n\t\t\tscale: new Vector2( 1, 1 ),\n\t\t\toffset: new Vector2( 0, 0 )\n\n\t\t };\n\n\t\tconst items = value.split( /\\s+/ );\n\t\tlet pos;\n\n\t\tpos = items.indexOf( '-bm' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\tmatParams.bumpScale = parseFloat( items[ pos + 1 ] );\n\t\t\titems.splice( pos, 2 );\n\n\t\t}\n\n\t\tpos = items.indexOf( '-mm' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\tmatParams.displacementBias = parseFloat( items[ pos + 1 ] );\n\t\t\tmatParams.displacementScale = parseFloat( items[ pos + 2 ] );\n\t\t\titems.splice( pos, 3 );\n\n\t\t}\n\n\t\tpos = items.indexOf( '-s' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.scale.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\tpos = items.indexOf( '-o' );\n\n\t\tif ( pos >= 0 ) {\n\n\t\t\ttexParams.offset.set( parseFloat( items[ pos + 1 ] ), parseFloat( items[ pos + 2 ] ) );\n\t\t\titems.splice( pos, 4 ); // we expect 3 parameters here!\n\n\t\t}\n\n\t\ttexParams.url = items.join( ' ' ).trim();\n\t\treturn texParams;\n\n\t}\n\n\tloadTexture( url, mapping, onLoad, onProgress, onError ) {\n\n\t\tconst manager = ( this.manager !== undefined ) ? this.manager : DefaultLoadingManager;\n\t\tlet loader = manager.getHandler( url );\n\n\t\tif ( loader === null ) {\n\n\t\t\tloader = new TextureLoader( manager );\n\n\t\t}\n\n\t\tif ( loader.setCrossOrigin ) loader.setCrossOrigin( this.crossOrigin );\n\n\t\tconst texture = loader.load( url, onLoad, onProgress, onError );\n\n\t\tif ( mapping !== undefined ) texture.mapping = mapping;\n\n\t\treturn texture;\n\n\t}\n\n}\n\nexport { MTLLoader };\n","// OBJ.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport { OBJLoader } from \"three/examples/jsm/loaders/OBJLoader\";\nimport { MTLLoader } from \"three/examples/jsm/loaders/MTLLoader\";\nimport Label from \"../primitives/Label\";\nimport Group, { GroupProps } from \"./Group\";\nimport { useViewContext } from \"../utils/hooks\";\n\nconst { useEffect, useMemo, useRef, memo } = React;\n\ninterface OBJProps extends GroupProps {\n objPath: string;\n objURL: string;\n mtlPath?: string;\n mtlURL?: string;\n resourcePath?: string;\n}\n\ninterface LoadOBJ {\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n group: React.MutableRefObject<any>;\n objPath: string;\n objURL: string;\n castShadow: boolean;\n receiveShadow: boolean;\n}\n\nfunction loadOBJ({ group, objPath, objURL, castShadow, receiveShadow }): void {\n const loader = new OBJLoader();\n loader.setPath(objPath);\n loader.load(objURL, obj => {\n // Remove Loading Label or Previous OBJ\n if (group.current) {\n if (group.current.children) {\n group.current.children.map(child => group.current.remove(child));\n }\n\n // Shadows\n obj.traverse(mesh => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore:TS2339 isMesh does not exist on Object3D\n if (mesh.isMesh) {\n mesh.castShadow = castShadow;\n mesh.receiveShadow = receiveShadow;\n }\n /* eslint-enable no-param-reassign */\n });\n\n // Add OBJ\n group.current.add(obj);\n }\n });\n}\n\ninterface LoadOBJAndMTL extends LoadOBJ {\n mtlPath?: string;\n mtlURL?: string;\n resourcePath?: string;\n envMap?: THREE.Texture;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n materialProps?: any;\n}\n\nfunction loadOBJAndMTL({\n group,\n objPath,\n objURL,\n mtlPath,\n mtlURL,\n envMap,\n resourcePath,\n castShadow,\n receiveShadow,\n materialProps\n}: LoadOBJAndMTL): void {\n // No OBJ\n if (objURL == null) {\n /* eslint-disable-next-line no-console */\n console.warn(\"[OBJ] No objURL\");\n return;\n }\n\n // OBJ\n if (mtlPath == null || mtlURL == null) {\n loadOBJ({ group, objPath, objURL, castShadow, receiveShadow });\n return;\n }\n\n // OBJ + MTL\n const mtlLoader = new MTLLoader();\n mtlLoader.setPath(mtlPath);\n if (resourcePath) {\n // @ts-ignore:TS2339 property setResourcePath does not exist in MTLLoader\n mtlLoader.setResourcePath(resourcePath);\n }\n mtlLoader.load(mtlURL, mtl => {\n mtl.preload();\n const objLoader = new OBJLoader();\n objLoader.setMaterials(mtl);\n objLoader.setPath(objPath);\n objLoader.load(objURL, obj => {\n if (group.current) {\n // Remove Loading Label or Previous OBJ\n if (group.current.children) {\n group.current.children.map(child => group.current.remove(child));\n }\n\n // Material Props\n if (materialProps && obj.children) {\n const { color, ...otherMaterialProps } = materialProps;\n // Set Material Props for Each Mesh in OBJ Group of Meshes\n obj.children.map(mesh => {\n // @ts-ignore:TS2339 material does not exist on Object3D\n if (mesh.material) {\n if (color) {\n // @ts-ignore:TS2339 material does not exist on Object3D\n mesh.material.color.set(color);\n }\n Object.entries(otherMaterialProps).map(([propName, value]) => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore:TS2339 material does not exist on Object3D\n mesh.material[propName] = value;\n /* eslint-enable no-param-reassign */\n return null;\n });\n }\n\n return null;\n });\n }\n\n // Env Map + Shadows\n obj.traverse(mesh => {\n /* eslint-disable no-param-reassign */\n // @ts-ignore\n if (mesh.isMesh) {\n if (envMap) {\n // @ts-ignore\n mesh.material.envMap = envMap;\n }\n mesh.castShadow = castShadow;\n mesh.receiveShadow = receiveShadow;\n }\n /* eslint-enable no-param-reassign */\n });\n\n // Add OBJ + MTL\n group.current.add(obj);\n }\n });\n });\n}\n\n/**\n * OBJ\n *\n * This component may render a textured mesh from a .obj, .mtl, and corresponding set of\n * image files. If mtlURL is not provided, only an untextured mesh from the .obj file\n * will be rendered.\n *\n * resourcePath allows the texture files to located in a directory different from the\n * mtlPath.\n */\nconst OBJ: React.FunctionComponent<OBJProps> = function OBJ({\n objPath = \"\",\n objURL,\n mtlPath,\n mtlURL,\n resourcePath,\n view3DEnvMap = false,\n castShadow = false,\n receiveShadow = false,\n ...otherProps\n}) {\n const group = useRef<THREE.Group | null>(null);\n const { envMap } = useViewContext();\n\n // Material Props\n const materialProps = useMemo(\n function updateMaterialProps() {\n // No Material Props\n if (!otherProps || Object.keys(otherProps).length === 0) {\n return undefined;\n }\n\n // Acceptable Material Props\n const materialPropsKeys = [\n \"color\",\n \"wireframe\",\n \"opacity\",\n \"transparent\",\n \"side\",\n \"depthWrite\",\n \"depthTest\"\n ];\n\n // Extract Acceptable Props\n const props = {};\n materialPropsKeys.map(propName => {\n if (otherProps[propName]) {\n props[propName] = otherProps[propName];\n }\n\n return null;\n });\n\n return Object.keys(props).length > 0 ? props : undefined;\n },\n [otherProps]\n );\n\n // Environment Map\n const _envMap = useMemo(\n function updateEnvMap() {\n if (view3DEnvMap) {\n return envMap;\n }\n\n return null;\n },\n [view3DEnvMap, envMap]\n );\n\n // Loading Text\n const loadingText = useMemo(\n function updateLoadText() {\n return objURL || \"No objURL\";\n },\n [objURL]\n );\n\n // Load OBJ + MTL\n useEffect(\n function updateOBJAndMTL() {\n if (group) {\n loadOBJAndMTL({\n group,\n objPath,\n objURL,\n mtlPath,\n mtlURL,\n envMap: _envMap,\n resourcePath,\n castShadow,\n receiveShadow,\n materialProps\n });\n }\n },\n [\n objPath,\n objURL,\n mtlPath,\n mtlURL,\n resourcePath,\n _envMap,\n castShadow,\n receiveShadow,\n materialProps\n ]\n );\n\n return (\n <Group ref={group} {...otherProps}>\n <Label text={loadingText} textColor=\"red\" />\n </Group>\n );\n};\n\nconst OBJMemo = memo(OBJ);\nOBJMemo.displayName = \"OBJ\";\nexport default OBJMemo;\n","// Path.tsx\nimport * as React from \"react\";\nimport Group, { GroupProps, generateGroupProps } from \"./Group\";\nimport { Sphere, Cylinder, Text } from \"../primitives\";\nimport { areArraysEqual } from \"../utils/util\";\n\nconst { useRef, useMemo, memo } = React;\n\ninterface PathProps extends GroupProps {\n points?: Array<Array<number>>;\n frames?: Array<number>;\n thickness?: number;\n lineThickness?: number;\n pointRadius?: number;\n pointColor?: string;\n lineColor?: string;\n frame?: number;\n point?: Array<number>;\n /* eslint-disable @typescript-eslint/no-explicit-any */\n lineProps?: any;\n pointProps?: any;\n textProps?: any;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n enumerate?: boolean;\n}\n\n/**\n * Path\n *\n * In Standard View, Path is a Group comprised of Spheres and Cylinders which\n * update based on the array of points prop. Path will keep a hashset of\n * frames and append a new point if frame and point props are both new and\n * the frame number is greater than the last given frame. The new point will\n * have a Cylinder connecting from the last given point in chronological by\n * frame order, thus creating a chronological 3D path.\n */\nconst Path: React.FunctionComponent<PathProps> = function Path({\n points,\n frames,\n thickness = 0.1,\n lineThickness,\n pointRadius,\n pointColor,\n lineColor,\n frame,\n point,\n enumerate = false,\n ...otherProps\n}) {\n const { cleanedProps, groupProps } = generateGroupProps(otherProps);\n const {\n color,\n hoverColor,\n lineProps,\n pointProps,\n textProps,\n children,\n ...otherCleanedProps\n } = cleanedProps;\n const _points: React.MutableRefObject<Array<Array<number>>> = useRef([]);\n\n useMemo(\n function updatePoints() {\n // Add point\n if (!points) {\n // No point or frame\n if (!point || !frame) {\n return;\n }\n\n // Only add points for frames that do not already have a point\n if (!_points.current[frame]) {\n _points.current[frame] = point;\n }\n\n return;\n }\n\n const _frames = frames || Array.from(Array(points.length).keys());\n // Validate Arrays\n if (\n !Array.isArray(points) ||\n !Array.isArray(_frames) ||\n points.length !== _frames.length\n ) {\n console.warn(\n `[Path] number of elements in frames must match number of elements in points. points.length (${points &&\n points.length}) =/= frames.length (${_frames && _frames.length})`\n );\n return;\n }\n\n // Load _points\n if (points.length <= _points.current.length) {\n _points.current = _points.current.slice(0, points.length);\n }\n\n /* eslint-disable-next-line no-shadow */\n _frames.map((frame, index) => {\n // frames number check\n if (Number.isNaN(frame)) {\n console.warn(\n `[Path] frames must be Array<number>. frame[${index}] = ${frame}`\n );\n return null;\n }\n\n // points array check\n if (!Array.isArray(points[index]) || points[index].length !== 3) {\n console.warn(\n `[Path] points must be Array<Array<number>> where each point has 3 number elements. points[${index}] = ${points[index]}`\n );\n }\n\n // diff check\n const prevPoint = _points.current[frame];\n const newPoint = points[index];\n if (!areArraysEqual(prevPoint, newPoint)) {\n _points.current[frame] = newPoint;\n }\n\n return null;\n });\n },\n [points, frames, point, frame]\n );\n\n const _pointRadius = useMemo(\n function updatePointRadius() {\n return pointRadius || thickness;\n },\n [pointRadius, thickness]\n );\n\n const _pointProps = useMemo(\n function updatePointProps() {\n return pointProps != null ? pointProps : otherCleanedProps;\n },\n [pointProps, otherCleanedProps]\n );\n\n const _lineProps = useMemo(\n function updateLineProps() {\n return lineProps != null ? lineProps : otherCleanedProps;\n },\n [lineProps, otherCleanedProps]\n );\n\n return (\n <Group color={color} hoverColor={hoverColor} {...groupProps}>\n {_points.current\n .filter(p => !!p)\n /* eslint-disable-next-line no-shadow */\n .map((point, index) => {\n return (\n /* eslint-disable react/no-array-index-key */\n <Sphere\n key={`Sphere${index}`}\n track={false}\n position={point}\n radius={_pointRadius}\n color={pointColor}\n {..._pointProps}\n >\n {enumerate && (\n <Text\n text={`${index}`}\n align=\"bottom\"\n position={[0, 1.2, 0]}\n color=\"white\"\n {...textProps}\n />\n )}\n </Sphere>\n /* eslint-enable react/no-array-index-key */\n );\n })}\n {_points.current\n .filter(p => !!p)\n /* eslint-disable-next-line no-shadow */\n .map((point, index, points) => {\n // No Cylinder for first point\n if (points.length <= 1) {\n return null;\n }\n\n // No invalid points nor collapsed\n const prevPoint = points[index - 1];\n if (\n !Array.isArray(point) ||\n point.length !== 3 ||\n !Array.isArray(prevPoint) ||\n prevPoint.length !== 3 ||\n areArraysEqual(point, prevPoint)\n ) {\n return null;\n }\n\n return (\n /* eslint-disable react/no-array-index-key */\n <Cylinder\n key={`Cylinder${index}`}\n track={false}\n start={points[index - 1]}\n end={point}\n radius={lineThickness || thickness}\n color={lineColor}\n {..._lineProps}\n />\n /* eslint-enable react/no-array-index-key */\n );\n })}\n {children}\n </Group>\n );\n};\n\nconst PathMemo = memo(Path);\nPathMemo.displayName = \"Path\";\nexport default PathMemo;\n","import {\n\tBufferGeometry,\n\tColor,\n\tFileLoader,\n\tFloat32BufferAttribute,\n\tInt32BufferAttribute,\n\tLoader,\n\tPoints,\n\tPointsMaterial,\n\tSRGBColorSpace\n} from 'three';\n\n/**\n * A loader for the Point Cloud Data (PCD) format.\n *\n * PCDLoader supports ASCII and (compressed) binary files as well as the following PCD fields:\n * - x y z\n * - rgb\n * - normal_x normal_y normal_z\n * - intensity\n * - label\n *\n * ```js\n * const loader = new PCDLoader();\n *\n * const points = await loader.loadAsync( './models/pcd/binary/Zaghetto.pcd' );\n * points.geometry.center(); // optional\n * points.geometry.rotateX( Math.PI ); // optional\n * scene.add( points );\n * ```\n *\n * @augments Loader\n * @three_import import { PCDLoader } from 'three/addons/loaders/PCDLoader.js';\n */\nclass PCDLoader extends Loader {\n\n\t/**\n\t * Constructs a new PCD loader.\n\t *\n\t * @param {LoadingManager} [manager] - The loading manager.\n\t */\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t\t/**\n\t\t * Whether to use little Endian or not.\n\t\t *\n\t\t * @type {boolean}\n\t\t * @default true\n\t\t */\n\t\tthis.littleEndian = true;\n\n\t}\n\n\t/**\n\t * Starts loading from the given URL and passes the loaded PCD asset\n\t * to the `onLoad()` callback.\n\t *\n\t * @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.\n\t * @param {function(Points)} onLoad - Executed when the loading process has been finished.\n\t * @param {onProgressCallback} onProgress - Executed while the loading is in progress.\n\t * @param {onErrorCallback} onError - Executed when errors occur.\n\t */\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( data ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( data ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tif ( onError ) {\n\n\t\t\t\t\tonError( e );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( e );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\t/**\n\t * Get dataview value by field type and size.\n\t *\n\t * @param {DataView} dataview - The DataView to read from.\n\t * @param {number} offset - The offset to start reading from.\n\t * @param {'F' | 'U' | 'I'} type - Field type.\n\t * @param {number} size - Field size.\n\t * @returns {number} Field value.\n\t */\n\t_getDataView( dataview, offset, type, size ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 'F': {\n\n\t\t\t\tif ( size === 8 ) {\n\n\t\t\t\t\treturn dataview.getFloat64( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getFloat32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t\tcase 'I': {\n\n\t\t\t\tif ( size === 1 ) {\n\n\t\t\t\t\treturn dataview.getInt8( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( size === 2 ) {\n\n\t\t\t\t\treturn dataview.getInt16( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getInt32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t\tcase 'U': {\n\n\t\t\t\tif ( size === 1 ) {\n\n\t\t\t\t\treturn dataview.getUint8( offset );\n\n\t\t\t\t}\n\n\t\t\t\tif ( size === 2 ) {\n\n\t\t\t\t\treturn dataview.getUint16( offset, this.littleEndian );\n\n\t\t\t\t}\n\n\t\t\t\treturn dataview.getUint32( offset, this.littleEndian );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Parses the given PCD data and returns a point cloud.\n\t *\n\t * @param {ArrayBuffer} data - The raw PCD data as an array buffer.\n\t * @return {Points} The parsed point cloud.\n\t */\n\tparse( data ) {\n\n\t\t// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js\n\n\t\tfunction decompressLZF( inData, outLength ) {\n\n\t\t\tconst inLength = inData.length;\n\t\t\tconst outData = new Uint8Array( outLength );\n\t\t\tlet inPtr = 0;\n\t\t\tlet outPtr = 0;\n\t\t\tlet ctrl;\n\t\t\tlet len;\n\t\t\tlet ref;\n\t\t\tdo {\n\n\t\t\t\tctrl = inData[ inPtr ++ ];\n\t\t\t\tif ( ctrl < ( 1 << 5 ) ) {\n\n\t\t\t\t\tctrl ++;\n\t\t\t\t\tif ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = inData[ inPtr ++ ];\n\n\t\t\t\t\t} while ( -- ctrl );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlen = ctrl >> 5;\n\t\t\t\t\tref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;\n\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( len === 7 ) {\n\n\t\t\t\t\t\tlen += inData[ inPtr ++ ];\n\t\t\t\t\t\tif ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tref -= inData[ inPtr ++ ];\n\t\t\t\t\tif ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );\n\t\t\t\t\tif ( ref < 0 ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tif ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );\n\t\t\t\t\tdo {\n\n\t\t\t\t\t\toutData[ outPtr ++ ] = outData[ ref ++ ];\n\n\t\t\t\t\t} while ( -- len + 2 );\n\n\t\t\t\t}\n\n\t\t\t} while ( inPtr < inLength );\n\n\t\t\treturn outData;\n\n\t\t}\n\n\t\tfunction parseHeader( binaryData ) {\n\n\t\t\tconst PCDheader = {};\n\n\t\t\tconst buffer = new Uint8Array( binaryData );\n\n\t\t\tlet data = '', line = '', i = 0, end = false;\n\n\t\t\tconst max = buffer.length;\n\n\t\t\twhile ( i < max && end === false ) {\n\n\t\t\t\tconst char = String.fromCharCode( buffer[ i ++ ] );\n\n\t\t\t\tif ( char === '\\n' || char === '\\r' ) {\n\n\t\t\t\t\tif ( line.trim().toLowerCase().startsWith( 'data' ) ) {\n\n\t\t\t\t\t\tend = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tline = '';\n\n\t\t\t\t} else {\n\n\t\t\t\t\tline += char;\n\n\t\t\t\t}\n\n\t\t\t\tdata += char;\n\n\t\t\t}\n\n\t\t\tconst result1 = data.search( /[\\r\\n]DATA\\s(\\S*)\\s/i );\n\t\t\tconst result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec( data.slice( result1 - 1 ) );\n\n\t\t\tPCDheader.data = result2[ 1 ];\n\t\t\tPCDheader.headerLen = result2[ 0 ].length + result1;\n\t\t\tPCDheader.str = data.slice( 0, PCDheader.headerLen );\n\n\t\t\t// remove comments\n\n\t\t\tPCDheader.str = PCDheader.str.replace( /#.*/gi, '' );\n\n\t\t\t// parse\n\n\t\t\tPCDheader.version = /^VERSION (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.fields = /^FIELDS (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.size = /^SIZE (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.type = /^TYPE (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.count = /^COUNT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.width = /^WIDTH (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.height = /^HEIGHT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.viewpoint = /^VIEWPOINT (.*)/im.exec( PCDheader.str );\n\t\t\tPCDheader.points = /^POINTS (.*)/im.exec( PCDheader.str );\n\n\t\t\t// evaluate\n\n\t\t\tif ( PCDheader.version !== null )\n\t\t\t\tPCDheader.version = parseFloat( PCDheader.version[ 1 ] );\n\n\t\t\tPCDheader.fields = ( PCDheader.fields !== null ) ? PCDheader.fields[ 1 ].split( ' ' ) : [];\n\n\t\t\tif ( PCDheader.type !== null )\n\t\t\t\tPCDheader.type = PCDheader.type[ 1 ].split( ' ' );\n\n\t\t\tif ( PCDheader.width !== null )\n\t\t\t\tPCDheader.width = parseInt( PCDheader.width[ 1 ] );\n\n\t\t\tif ( PCDheader.height !== null )\n\t\t\t\tPCDheader.height = parseInt( PCDheader.height[ 1 ] );\n\n\t\t\tif ( PCDheader.viewpoint !== null )\n\t\t\t\tPCDheader.viewpoint = PCDheader.viewpoint[ 1 ];\n\n\t\t\tif ( PCDheader.points !== null )\n\t\t\t\tPCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );\n\n\t\t\tif ( PCDheader.points === null )\n\t\t\t\tPCDheader.points = PCDheader.width * PCDheader.height;\n\n\t\t\tif ( PCDheader.size !== null ) {\n\n\t\t\t\tPCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( PCDheader.count !== null ) {\n\n\t\t\t\tPCDheader.count = PCDheader.count[ 1 ].split( ' ' ).map( function ( x ) {\n\n\t\t\t\t\treturn parseInt( x, 10 );\n\n\t\t\t\t} );\n\n\t\t\t} else {\n\n\t\t\t\tPCDheader.count = [];\n\n\t\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\t\tPCDheader.count.push( 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tPCDheader.offset = {};\n\n\t\t\tlet sizeSum = 0;\n\n\t\t\tfor ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {\n\n\t\t\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = i;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tPCDheader.offset[ PCDheader.fields[ i ] ] = sizeSum;\n\t\t\t\t\tsizeSum += PCDheader.size[ i ] * PCDheader.count[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// for binary only\n\n\t\t\tPCDheader.rowSize = sizeSum;\n\n\t\t\treturn PCDheader;\n\n\t\t}\n\n\t\t// parse header\n\n\t\tconst PCDheader = parseHeader( data );\n\n\t\t// parse data\n\n\t\tconst position = [];\n\t\tconst normal = [];\n\t\tconst color = [];\n\t\tconst intensity = [];\n\t\tconst label = [];\n\n\t\tconst c = new Color();\n\n\t\t// ascii\n\n\t\tif ( PCDheader.data === 'ascii' ) {\n\n\t\t\tconst offset = PCDheader.offset;\n\t\t\tconst textData = new TextDecoder().decode( data );\n\t\t\tconst pcdData = textData.slice( PCDheader.headerLen );\n\t\t\tconst lines = pcdData.split( '\\n' );\n\n\t\t\tfor ( let i = 0, l = lines.length; i < l; i ++ ) {\n\n\t\t\t\tif ( lines[ i ] === '' ) continue;\n\n\t\t\t\tconst line = lines[ i ].split( ' ' );\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tposition.push( parseFloat( line[ offset.x ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.y ] ) );\n\t\t\t\t\tposition.push( parseFloat( line[ offset.z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgb_field_index = PCDheader.fields.findIndex( ( field ) => field === 'rgb' );\n\t\t\t\t\tconst rgb_type = PCDheader.type[ rgb_field_index ];\n\n\t\t\t\t\tconst float = parseFloat( line[ offset.rgb ] );\n\t\t\t\t\tlet rgb = float;\n\n\t\t\t\t\tif ( rgb_type === 'F' ) {\n\n\t\t\t\t\t\t// treat float values as int\n\t\t\t\t\t\t// https://github.com/daavoo/pyntcloud/pull/204/commits/7b4205e64d5ed09abe708b2e91b615690c24d518\n\t\t\t\t\t\tconst farr = new Float32Array( 1 );\n\t\t\t\t\t\tfarr[ 0 ] = float;\n\t\t\t\t\t\trgb = new Int32Array( farr.buffer )[ 0 ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst r = ( ( rgb >> 16 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst g = ( ( rgb >> 8 ) & 0x0000ff ) / 255;\n\t\t\t\t\tconst b = ( ( rgb >> 0 ) & 0x0000ff ) / 255;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_x ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_y ] ) );\n\t\t\t\t\tnormal.push( parseFloat( line[ offset.normal_z ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tintensity.push( parseFloat( line[ offset.intensity ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( parseInt( line[ offset.label ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary-compressed\n\n\t\t// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB\n\t\t// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB\n\t\t// that requires a totally different parsing approach compared to non-compressed data\n\n\t\tif ( PCDheader.data === 'binary_compressed' ) {\n\n\t\t\tconst sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );\n\t\t\tconst compressedSize = sizes[ 0 ];\n\t\t\tconst decompressedSize = sizes[ 1 ];\n\t\t\tconst decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );\n\t\t\tconst dataview = new DataView( decompressed.buffer );\n\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0; i < PCDheader.points; i ++ ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst rgbIndex = PCDheader.fields.indexOf( 'rgb' );\n\n\t\t\t\t\tconst r = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( this._getDataView( dataview, ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tconst labelIndex = PCDheader.fields.indexOf( 'label' );\n\t\t\t\t\tlabel.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// binary\n\n\t\tif ( PCDheader.data === 'binary' ) {\n\n\t\t\tconst dataview = new DataView( data, PCDheader.headerLen );\n\t\t\tconst offset = PCDheader.offset;\n\n\t\t\tfor ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {\n\n\t\t\t\tif ( offset.x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'z' );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tposition.push( this._getDataView( dataview, row + offset.z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.rgb !== undefined ) {\n\n\t\t\t\t\tconst r = dataview.getUint8( row + offset.rgb + 2 ) / 255.0;\n\t\t\t\t\tconst g = dataview.getUint8( row + offset.rgb + 1 ) / 255.0;\n\t\t\t\t\tconst b = dataview.getUint8( row + offset.rgb + 0 ) / 255.0;\n\n\t\t\t\t\tc.setRGB( r, g, b, SRGBColorSpace );\n\n\t\t\t\t\tcolor.push( c.r, c.g, c.b );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.normal_x !== undefined ) {\n\n\t\t\t\t\tconst xIndex = PCDheader.fields.indexOf( 'normal_x' );\n\t\t\t\t\tconst yIndex = PCDheader.fields.indexOf( 'normal_y' );\n\t\t\t\t\tconst zIndex = PCDheader.fields.indexOf( 'normal_z' );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_x, PCDheader.type[ xIndex ], PCDheader.size[ xIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_y, PCDheader.type[ yIndex ], PCDheader.size[ yIndex ] ) );\n\t\t\t\t\tnormal.push( this._getDataView( dataview, row + offset.normal_z, PCDheader.type[ zIndex ], PCDheader.size[ zIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.intensity !== undefined ) {\n\n\t\t\t\t\tconst intensityIndex = PCDheader.fields.indexOf( 'intensity' );\n\t\t\t\t\tintensity.push( this._getDataView( dataview, row + offset.intensity, PCDheader.type[ intensityIndex ], PCDheader.size[ intensityIndex ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( offset.label !== undefined ) {\n\n\t\t\t\t\tlabel.push( dataview.getInt32( row + offset.label, this.littleEndian ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tconst geometry = new BufferGeometry();\n\n\t\tif ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\t\tif ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );\n\t\tif ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );\n\t\tif ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );\n\t\tif ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );\n\n\t\tgeometry.computeBoundingSphere();\n\n\t\t// build material\n\n\t\tconst material = new PointsMaterial( { size: 0.005 } );\n\n\t\tif ( color.length > 0 ) {\n\n\t\t\tmaterial.vertexColors = true;\n\n\t\t}\n\n\t\t// build point cloud\n\n\t\treturn new Points( geometry, material );\n\n\t}\n\n}\n\nexport { PCDLoader };\n","// PCD.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport { PCDLoader } from \"three/examples/jsm/loaders/PCDLoader\";\nimport Label from \"../primitives/Label\";\nimport Group, { GroupProps } from \"./Group\";\n\nconst { useRef, useEffect, useMemo, memo } = React;\n\nfunction loadPCD(\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n group: React.MutableRefObject<any>,\n pcdPath: string,\n pcdURL: string,\n pointSize: number\n): void {\n // No PCD\n if (pcdURL == null) {\n /* eslint-disable-next-line no-console */\n console.warn(\"[PCD] No pcdURL\");\n }\n\n // PCD\n const pcdLoader = new PCDLoader();\n pcdLoader.setPath(pcdPath);\n pcdLoader.load(pcdURL, pcd => {\n if (group.current) {\n // Remove Loading Label or Previous PCD\n if (group.current.children) {\n group.current.children.map(child => group.current.remove(child));\n }\n\n // Material Props\n if (pcd.material) {\n /* eslint-disable no-param-reassign */\n // @ts-ignore:TS2339 size does not exist\n pcd.material.size = pointSize;\n /* eslint-enable no-param-reassign */\n }\n\n // Add PCD\n group.current.add(pcd);\n }\n });\n}\n\ninterface PCDProps extends GroupProps {\n pcdPath: string;\n pcdURL: string;\n pointSize: number;\n}\n\nconst PCD: React.FunctionComponent<PCDProps> = function PCD({\n pcdPath = \"\",\n pcdURL,\n pointSize = 0.01,\n ...otherProps\n}) {\n const group = useRef<THREE.Group | null>(null);\n\n const loadingText = useMemo(\n function updateLoadText() {\n return pcdURL || \"No pcdURL\";\n },\n [pcdURL]\n );\n\n // Load PCD\n useEffect(\n function updatePCD() {\n if (group) {\n loadPCD(group, pcdPath, pcdURL, pointSize);\n }\n },\n [group, pcdPath, pcdURL, pointSize]\n );\n\n return (\n <Group ref={group} {...otherProps}>\n <Label text={loadingText} textColor=\"red\" />\n </Group>\n );\n};\n\nconst PCDMemo = memo(PCD);\nPCDMemo.displayName = \"PCD\";\nexport default PCDMemo;\n","// AmbientalLight.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\n\nconst { useMemo, memo } = React;\n\ninterface AmbientLightProps {\n color?: string | THREE.Color;\n intensity?: number;\n}\n\nconst AmbientLight: React.FunctionComponent<\n AmbientLightProps\n> = function AmbientLight({ color = \"white\", intensity = 1, ...otherProps }) {\n const _color = useMemo(\n function updateColor() {\n return new THREE.Color(color);\n },\n [color]\n );\n\n return (\n // @ts-ignore: Property 'ambientLight' does not exist on type 'JSX.IntrinsicElements'\n <ambientLight color={_color} intensity={intensity} {...otherProps} />\n );\n};\n\nconst AmbientLightMemo = memo(AmbientLight);\nAmbientLightMemo.displayName = \"AmbientLight\";\nexport default AmbientLightMemo;\n","// LightWithShadows.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport { useFrame, useViewContext } from \"../utils/hooks\";\nimport { nextPowerOfTwo, EPS } from \"../utils/math\";\n\nconst { useEffect, useMemo, memo } = React;\n\n// -------------------------------------- //\n// ----- CommonLightWithShadows ----- //\n// -------------------------------------- //\nexport interface CommonLightWithShadowsProps {\n position?: Array<number>;\n intensity?: number;\n color?: string | THREE.Color;\n castShadow?: boolean;\n shadowCameraNear?: number;\n shadowCameraFar?: number;\n shadowMapWidth?: number;\n shadowMapHeight?: number;\n helper?: boolean;\n helperColor?: string;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n children?: any;\n}\n\n// -------------------------------- //\n// ----- LightWithShadows ----- //\n// -------------------------------- //\n\ninterface LightWithShadowsProps extends CommonLightWithShadowsProps {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n THREELight: any;\n THREEHelper: any;\n lightParams: Array<any>;\n helperParams: Array<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n target?: Array<number>;\n}\n\n/**\n * LightWithShadows\n *\n * Similar to the Mesh component, the Light component is what most lights\n * are under the hood.\n *\n * However, unlike Mesh--which actually boils down to a\n * three.js Mesh component, Light does not boil down to any specific three.js\n * component. Instead, Light is like an abstraction to reduce repetitive setup\n * that is common to DirectionalLight, SpotLight, and PointLight.\n *\n * Technically, the specific three.js light constructor and helper constructor\n * is passed in through the THREELight and THREEHelper props.\n *\n * Just as in three.js, Light is an abstract base class, in Standard View, Light\n * is like an \"abstract\" base component.\n */\nconst LightWithShadows: React.FunctionComponent<\n LightWithShadowsProps\n> = function LightWithShadows({\n THREELight,\n THREEHelper,\n lightParams,\n helperParams,\n position = [0, 0, 1],\n target,\n castShadow = false,\n shadowCameraNear = 0.1,\n shadowCameraFar = 100,\n shadowMapWidth = 1024,\n shadowMapHeight = 1024,\n helper = false,\n ...otherProps\n}) {\n // Light\n const light = useMemo(\n function createLight() {\n return new THREELight(...lightParams);\n },\n [lightParams, THREELight]\n );\n\n // Position\n useEffect(\n function updatePosition() {\n // @ts-ignore:TS2569 spread\n light.position.set(...position);\n },\n [light, position]\n );\n\n // Target\n const { scene } = useViewContext();\n useEffect(\n function updateTarget() {\n if (light.target && target) {\n // light.target must be Object3D\n if (Array.isArray(target)) {\n light.target.position.set(...target);\n }\n\n scene.add(light.target);\n }\n },\n [light, scene, target]\n );\n\n // Check position overlap with target\n useEffect(\n function checkPositionTarget() {\n if (!light.target) {\n return;\n }\n\n // Check position overlap target\n const pos = position;\n const tpos = light.target.position;\n if (pos[0] === tpos.x && pos[1] === tpos.y && pos[2] === tpos.z) {\n /* eslint-disable-next-line no-console */\n console.warn(\n \"[LightWithShadows] position and target cannot be the same!\"\n );\n\n /* eslint-disable no-param-reassign */\n position[2] += EPS;\n light.position.z += EPS;\n /* eslint-enable no-param-reassign */\n }\n },\n [light, position, target]\n );\n\n // Shadows\n useEffect(\n function updateShadows() {\n light.castShadow = castShadow;\n light.shadow.camera.near = shadowCameraNear;\n light.shadow.camera.far = shadowCameraFar;\n light.shadow.mapSize.width = nextPowerOfTwo(shadowMapWidth);\n light.shadow.mapSize.height = nextPowerOfTwo(shadowMapHeight);\n },\n [\n light,\n castShadow,\n shadowCameraNear,\n shadowCameraFar,\n shadowMapWidth,\n shadowMapHeight\n ]\n );\n\n // Helper Params\n // Helper needs a reference to light as the first param.\n const _helperParams = useMemo(\n function updateHelperParams() {\n return [light, ...helperParams];\n },\n [light, helperParams]\n );\n\n return (\n <>\n {/*\n // @ts-ignore:2339 property primitive does not exist */}\n <primitive object={light} {...otherProps} />\n {helper && (\n <LightWithShadowsHelper\n THREEHelper={THREEHelper}\n helperParams={_helperParams}\n helper={helper}\n />\n )}\n </>\n );\n};\n\nconst LightWithShadowsMemo = memo(LightWithShadows);\nLightWithShadowsMemo.displayName = \"LightWithShadows\";\nexport default LightWithShadowsMemo;\n\n// -------------------------------------- //\n// ----- LightWithShadowsHelper ----- //\n// -------------------------------------- //\n/**\n * UpdateLightWithShadowsHelper\n *\n * Isolates the useFrame hook to avoid larger components, namely\n * CreateLightHelper, from re-rendering up to 3 times--this is\n * a bug from @react-three/fiber.\n * Any @react-three/fiber hook call incurs additional renders.\n */\nfunction UpdateLightWithShadowsHelper({ helper, lightHelper }): null {\n useFrame(function updateHelper() {\n if (helper) {\n lightHelper.update();\n }\n }, 2);\n\n return null;\n}\n\ninterface LightWithShadowsHelperProps {\n /* eslint-disable @typescript-eslint/no-explicit-any */\n THREEHelper: any;\n helperParams: Array<any>;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n helper: boolean;\n}\n\n/**\n * LightWithShadowsHelper\n *\n * Generates light helper object and also adds the update\n * function in three.js's render loop.\n */\nconst LightWithShadowsHelper: React.FunctionComponent<\n LightWithShadowsHelperProps\n> = function LightWithShadowsHelper({ THREEHelper, helperParams, helper }) {\n const lightHelper = useMemo(\n function updateTHREEHelper() {\n return new THREEHelper(...helperParams);\n },\n [helperParams, THREEHelper]\n );\n\n if (!helper) {\n return null;\n }\n\n return (\n <>\n <UpdateLightWithShadowsHelper helper={helper} lightHelper={lightHelper} />\n {/* @ts-ignore: Property 'primitive' does not exist on type 'JSX.IntrinsicElements' */}\n <primitive object={lightHelper} />\n </>\n );\n};\n","// DirectionalLight.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport LightWithShadows, {\n CommonLightWithShadowsProps\n} from \"./LightWithShadows\";\n\nconst { useMemo, memo } = React;\n\ninterface DirectionalLightProps extends CommonLightWithShadowsProps {\n target?: Array<number>;\n helperSize?: number;\n}\n\nconst DirectionalLight: React.FunctionComponent<\n DirectionalLightProps\n> = function DirectionalLight({\n color = \"white\",\n intensity = 1,\n helperSize = 1,\n helperColor,\n ...otherProps\n}) {\n const lightParams = useMemo(\n function updateLightParams() {\n return [color, intensity];\n },\n [color, intensity]\n );\n\n const helperParams = useMemo(\n function updateHelperParams() {\n return [helperSize, helperColor || color];\n },\n [helperSize, helperColor, color]\n );\n\n return (\n <LightWithShadows\n THREELight={THREE.DirectionalLight}\n THREEHelper={THREE.DirectionalLightHelper}\n lightParams={lightParams}\n helperParams={helperParams}\n {...otherProps}\n />\n );\n};\n\nconst DirectionalLightMemo = memo(DirectionalLight);\nDirectionalLightMemo.displayName = \"DirectionalLight\";\nexport default DirectionalLightMemo;\n","// HemispherealLight.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Sphere from \"../primitives/Sphere\";\n\nconst { useMemo, memo } = React;\n\ninterface HemispherealLightHelperProps {\n helperSize: number;\n color: string | THREE.Color;\n groundColor: string;\n}\n\n/**\n * HemisphereLightHelper\n *\n * @react-three/fiber's reconciler switchInstance function for re-rendering\n * components with new arguments, the order of execution is removeChild,\n * recursiveRemove, dispose, and delete. Since children are removed before\n * disposing a three.js object, if the dispose function references the\n * children, an array reference crash occurs.\n *\n * HemisphereLightHelper's dispose function calls:\n * this.children[0].geometry.dispose();\n * this.children[0].material.dispose();\n * where this.children[0] is refering to the Octahedron that represents the\n * hemisphere light. Unfortunatley, three.js's poor choice of array\n * referencing and @react-three/fiber's order of component removal causes\n * an array reference crash (since the children were recursively removed,\n * and only an empty array exists at the HemisphereLightHelper's dispose call).\n *\n * See RectAreaLight.js for more details, since the same issue exists for\n * that light helper too.\n *\n * Ultimately, THREE.HemisphereLightHelper / hemisphereLightHelper cannot\n * safely re-render through @react-three/fiber's reconciler.\n *\n * This is the custom HemisphereLightHelper.\n */\nfunction HemisphereLightHelper({\n helperSize,\n color,\n groundColor\n}): React.ClassicElement<HemispherealLightHelperProps> {\n return (\n <>\n <Sphere\n radius={helperSize}\n widthSegments={10}\n heightSegments={10}\n thetaStart={0}\n thetaLength={Math.PI * 0.5}\n color={color}\n wireframe\n />\n <Sphere\n radius={helperSize}\n widthSegments={10}\n heightSegments={10}\n thetaStart={Math.PI * 0.5}\n thetaLength={Math.PI}\n color={groundColor}\n wireframe\n />\n </>\n );\n}\n\ninterface HemisphereLightProps {\n position?: Array<number>;\n color?: string;\n skyColor?: string;\n groundColor?: string;\n intensity?: number;\n helper?: boolean;\n helperSize?: number;\n /* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n children?: any;\n}\n\nconst HemisphereLight: React.FunctionComponent<\n HemisphereLightProps\n> = function HemisphereLight({\n position = [0, 10, 0],\n color = \"lightskyblue\",\n groundColor = \"sandybrown\",\n intensity = 1,\n helper = false,\n helperSize = 1,\n skyColor,\n ...otherProps\n}) {\n const _color = useMemo(\n function updatedColor() {\n return new THREE.Color(skyColor || color);\n },\n [color, skyColor]\n );\n\n const _groundColor = useMemo(\n function updateGroundColor() {\n return new THREE.Color(groundColor);\n },\n [groundColor]\n );\n\n const helperProps = useMemo(\n function updateHelperProps() {\n return {\n helperSize,\n color: _color,\n groundColor: _groundColor\n };\n },\n [helperSize, _color, _groundColor]\n );\n\n return (\n // @ts-ignore: Property 'hemisphereLight' does not exist on type 'JSX.IntrinsicElements'\n <hemisphereLight\n color={_color}\n groundColor={_groundColor}\n position={position as [number, number, number]}\n intensity={intensity}\n {...otherProps}\n >\n {helper && <HemisphereLightHelper {...helperProps} />}\n {/* @ts-ignore: Property 'hemisphereLight' does not exist on type 'JSX.IntrinsicElements' */}\n </hemisphereLight>\n );\n};\n\nconst HemisphereLightMemo = memo(HemisphereLight);\nHemisphereLightMemo.displayName = \"HemisphereLight\";\nexport default HemisphereLightMemo;\n","// PointLight.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport LightWithShadows, {\n CommonLightWithShadowsProps\n} from \"./LightWithShadows\";\n\nconst { useMemo, memo } = React;\n\ninterface PointLightProps extends CommonLightWithShadowsProps {\n distance?: number;\n decay?: number;\n helperSize?: number;\n}\n\nconst PointLight: React.FunctionComponent<\n PointLightProps\n> = function PointLight({\n color = \"white\",\n intensity = 1,\n distance = 0,\n decay = 1,\n helperSize = 1,\n helperColor,\n ...otherProps\n}) {\n const lightParams = useMemo(\n function updateLightParams() {\n return [color, intensity, distance, decay];\n },\n [color, intensity, distance, decay]\n );\n\n const helperParams = useMemo(\n function updateHelperParams() {\n return [helperSize, helperColor || color];\n },\n [helperSize, helperColor, color]\n );\n\n return (\n <LightWithShadows\n THREELight={THREE.PointLight}\n THREEHelper={THREE.PointLightHelper}\n lightParams={lightParams}\n helperParams={helperParams}\n {...otherProps}\n />\n );\n};\n\nconst PointLightMemo = memo(PointLight);\nPointLightMemo.displayName = \"PointLight\";\nexport default PointLightMemo;\n","// RectAreaLight.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport Plane from \"../primitives/Plane\";\nimport Cylinder from \"../primitives/Cylinder\";\nimport { EPS } from \"../utils/math\";\n\nconst { useEffect, useMemo, memo } = React;\n\ninterface RectAreaLightHelperProps {\n position: Array<number>;\n target: Array<number>;\n width: number;\n height: number;\n helperColor: string;\n}\n\n/**\n * RectAreaLightHelper\n *\n * During a re-render, @react-three/fiber's reconciler executes a switchInstance\n * function if a component has new arguments. This switchInstance basically creates\n * a newInstance with the new arguments and removes old instance.\n *\n * The old instance of the component is removed via a removeChild function which\n * also invokes a removeRecursive function that also removes children of the child,\n * recursively. This ensures all nested children are removed.\n *\n * Unfortunately, @react-three/fiber's removeChild function first removes the child,\n * then recursively removes its children, and then checks if the child has a\n * dispose function and calls it--which allows for three.js cleanup code to execute\n * upon removal, and finally deletes the reference.\n *\n * Due to this order of remove, recursively remove, dispose, and delete,\n * an invalid reference crash occurs.\n *\n * This bug is due to the fact that three.js normally stores the geometry and material\n * of a Mesh/Object3D in class variables named geometry and material.\n * However, for RectAreaLightHelper, the Line's (outlining the plane of the helper) has\n * its geometry and material stored in variables of those names, but another Mesh (of\n * the quad) is stored as a child.\n *\n * Normally this is fine, since all children are recursively removed by @react-three/fiber,\n * but unfortunatley, RectAreaLightHelper's dispose function spefically calls:\n * this.children[0].geometry.dispose()\n * this.children[0].material.dispose()\n * refering to the quad mesh as `this.children[0]`. By the time RectAreaLightHelper's\n * dispose function is called, @react-three/fiber has already recursively removed the\n * children, hence this.childern is an empty array, resulting in an array reference crash.\n *\n * For other light helpers, the geometry and material are not stored in the children\n * property of the helper, but just in the named variables such as\n * PointLight: `geometry`, `material`,\n * SpotLight: `cone.geometry`, `cone.material`,\n * DirectionalLight: `lightPlane.geometry`, `lightPlane.material`,\n * `targetLine.geometry`, `targetLine.material`,\n * and those helpers' dispose function does not reference any children.\n *\n * Therefore, THREE.RectAreaLightHelper / rectAreaLightHelper cannot safely re-render\n * through @react-three/fiber's reconciler.\n *\n * This is the custom RectAreaLightHelper.\n */\nfunction RectAreaLightHelper({\n position,\n target,\n width,\n height,\n helperColor\n}): React.ClassicElement<RectAreaLightHelperProps> {\n const dist = useMemo(\n function updateDist() {\n const posVec = new THREE.Vector3(...position);\n const targetVec = new THREE.Vector3(...target);\n return posVec.distanceTo(targetVec);\n },\n [position, target]\n );\n\n return (\n <>\n <Plane\n scale={[width, height, 1]}\n color={helperColor}\n side={THREE.FrontSide}\n wireframe\n />\n <Plane\n scale={[width, height, 1]}\n color={helperColor}\n side={THREE.BackSide}\n />\n <Cylinder\n start={[0, 0, 0]}\n end={[0, 0, -dist]}\n radius={0.02}\n color={helperColor}\n />\n </>\n );\n}\n\ninterface RectAreaLightProps {\n position?: Array<number>;\n intensity?: number;\n color?: string;\n target?: Array<number>;\n width?: number;\n height?: number;\n helper?: boolean;\n helperColor?: string;\n}\n\n/**\n * RectAreaLight\n */\nconst RectAreaLight: React.FunctionComponent<\n RectAreaLightProps\n> = function RectAreaLight({\n position = [0, 10, 0],\n target = [0, 0, 0],\n color = \"white\",\n intensity = 1,\n width = 1,\n height = 1,\n helper = false,\n helperColor,\n ...otherProps\n}) {\n const _helperColor = useMemo(\n function updateHelperColor() {\n return helperColor || color;\n },\n [helperColor, color]\n );\n\n const { _width, _height } = useMemo(\n function updateDimensions() {\n return { _width: Math.max(width, EPS), _height: Math.max(height, EPS) };\n },\n [width, height]\n );\n\n const light = useMemo(function createLight() {\n return new THREE.RectAreaLight(color, intensity, _width, _height);\n /* eslint-disable-next-line react-hooks/exhaustive-deps */\n }, []);\n\n const helperProps = useMemo(\n function updateHelperProps() {\n return {\n position,\n target,\n width: _width,\n height: _height,\n helperColor: _helperColor\n };\n },\n [position, target, _width, _height, _helperColor]\n );\n\n useEffect(\n function updateColor() {\n light.color.set(color);\n },\n [light, color]\n );\n\n useEffect(\n function updateIntensity() {\n light.intensity = intensity;\n },\n [light, intensity]\n );\n\n useEffect(\n function updateDimensions() {\n light.width = _width;\n light.height = _height;\n },\n [light, _width, _height]\n );\n\n useEffect(\n function updatePosition() {\n // @ts-ignore:TS2556 // sphread\n light.position.set(...position);\n },\n [light, position]\n );\n\n useEffect(\n function updateTarget() {\n // @ts-ignore:TS2556 spread\n light.lookAt(...target);\n },\n [light, target]\n );\n\n return (\n // @ts-ignore:2339 property primitive does not exist\n <primitive object={light} {...otherProps}>\n {helper && <RectAreaLightHelper {...helperProps} />}\n {/*\n // @ts-ignore:2339 property primitive does not exist */}\n </primitive>\n );\n};\n\nconst RectAreaLightMemo = memo(RectAreaLight);\nRectAreaLightMemo.displayName = \"RectAreaLight\";\nexport default RectAreaLightMemo;\n","// SpotLight.tsx\nimport * as React from \"react\";\nimport * as THREE from \"three\";\nimport LightWithShadows, {\n CommonLightWithShadowsProps\n} from \"./LightWithShadows\";\n\nconst { useMemo, memo } = React;\n\ninterface SpotLightProps extends CommonLightWithShadowsProps {\n distance?: number;\n decay?: number;\n angle?: number;\n penumbra?: number;\n}\n\nconst SpotLight: React.FunctionComponent<SpotLightProps> = function SpotLight({\n color = \"white\",\n intensity = 1,\n distance = 0,\n decay = 1,\n angle = Math.PI * 0.333,\n penumbra = 0,\n helperColor,\n ...otherProps\n}) {\n const lightParams = useMemo(\n function updateLightParams() {\n return [color, intensity, distance, angle, penumbra, decay];\n },\n [color, intensity, distance, angle, penumbra, decay]\n );\n\n const helperParams = useMemo(\n function updateHelperParams() {\n return [helperColor || color];\n },\n [helperColor, color]\n );\n\n return (\n <LightWithShadows\n THREELight={THREE.SpotLight}\n THREEHelper={THREE.SpotLightHelper}\n lightParams={lightParams}\n helperParams={helperParams}\n {...otherProps}\n />\n );\n};\n\nconst SpotLightMemo = memo(SpotLight);\nSpotLightMemo.displayName = \"SpotLight\";\nexport default SpotLightMemo;\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","useState","createContext","memo","ViewContext","ViewContextProvider","canvasProps","viewContextValue","setViewContextValue","jsx","useToggle","initialValue","alternate","setValue","alternateValue","useMemo","toggleValue","useFrame","f","priority","override","p","r3rUseFrame","useViewContext","useContext","useCallback","useAnimationFrame","callback","dependencies","requestRef","useRef","animate","useEffect","SetRenderer","glProps","gl","scene","camera","SetRendererMemo","RGBELoader","DataTextureLoader","manager","HalfFloatType","buffer","rgbe_error","rgbe_error_code","msg","NEWLINE","fgets","lineLimit","consume","i","len","s","chunk","RGBE_ReadHeader","magic_token_re","gamma_re","exposure_re","format_re","dimensions_re","header","line","match","RGBE_ReadPixels_RLE","w","h","scanline_width","data_rgba","offset","pos","ptr_end","rgbeStart","scanline_buffer","num_scanlines","ptr","count","isEncodedRun","byteValue","l","off","RGBEByteToRGBFloat","sourceArray","sourceOffset","destArray","destOffset","e","scale","RGBEByteToRGBHalf","DataUtils","byteArray","rgbe_header_info","image_rgba_data","data","numElements","FloatType","floatArray","j","halfArray","url","onLoad","onProgress","onError","onLoadCallback","texture","texData","LinearSRGBColorSpace","LinearFilter","Z_AXIS","THREE","Y_AXIS","X_AXIS","DEFAULT_UP_VEC3","DEFAULT_NORMAL_VEC3","DEFAULT_RIGHT_VEC3","DEFAULT_NORMAL","DEFAULT_UP","DEFAULT_RIGHT","SIDE_TYPES","EULER_ORDERS","CONTROLS_TYPES","CAMERA_TYPES","SYNONYMOUS_CONTROLS_PROPS","ANTONYMOUS_CONTROLS_PROPS","SYNONYMOUS_CAMERA_PROPS","MATERIAL_TYPES","ANCHORS","ANCHOR_SYNONYMS","module","this","a","c","u","d","g","r","t","v","m","n","q","b","useEffectfulState","fn","deps","cb","state","set","Stats","showPanel","className","parent","stats","StatsImpl","classNames","cls","begin","addEffect","end","addAfterEffect","getAlignmentOffset","oldAnchor","newAnchor","diagonal","posVec","val","index","diagonalVec","oldAnchorVec","newAnchorVec","reconcileSynonymousProps","synonymousProps","correctType","opposite","propNames","correctName","synnonyms","synnonym","areArraysEqual","array1","array2","FPS","objectToArray","obj","order","array","component","toQuaternion","quaternion","filterArrayLength","length","defaultArray","billboard","mesh","SetBackground","backgroundColor","backgroundTextureURL","backgroundEquirectangularTextureURL","backgroundEquirectangularRGBEURL","setViewContext","pmremGenerator","PMREMGenerator","path","envMap","SetBackgroundMemo","RectAreaLightTexturesLib","LTC_MAT_1","LTC_MAT_2","ltc_float_1","ltc_float_2","LTC_FLOAT_1","DataTexture","RGBAFormat","UVMapping","ClampToEdgeWrapping","NearestFilter","LTC_FLOAT_2","ltc_half_1","x","ltc_half_2","LTC_HALF_1","LTC_HALF_2","RectAreaLightUniformsLib","UniformsLib","SetShadows","shadowMapEnabled","shadowType","SetShadowsMemo","_changeEvent","_startEvent","_endEvent","_EPS","_STATE","_v2","Vector2","_mouseChange","_objectUp","Vector3","_pan","_axis","_quaternion","Quaternion","_eyeDirection","_objectUpDirection","_objectSidewaysDirection","_moveDirection","TrackballControls","Controls","object","domElement","MOUSE","onPointerMove","onPointerDown","onPointerUp","onPointerCancel","onContextMenu","onMouseWheel","onKeyDown","onKeyUp","onTouchStart","onTouchMove","onTouchEnd","onMouseDown","onMouseMove","onMouseUp","element","box","scale_x","scale_y","angle","factor","MathUtils","pageX","pageY","event","position","pointer","mouseAction","dx","dy","y","_ray","Ray","_plane","Plane","_TILT_LIMIT","_v","_twoPI","OrbitControls","TOUCH","Spherical","interceptControlDown","interceptControlUp","deltaTime","min","max","zoomChanged","prevRadius","newRadius","radiusDelta","mouseBefore","prevZoom","mouseAfter","delta","normalizedDelta","distance","objectMatrix","deltaX","deltaY","targetDistance","dollyScale","rect","dist","needsUpdate","centerX","centerY","pointerId","mode","newEvent","MapControls","EPS","EPS_NANO","nextPowerOfTwo","minmax","target","isEqual","SetControls","controlsType","cameraExtrinsics","polarAngle","azimuthAngle","controlsProps","CameraControls","_controlsProps","setControlsProps","_cameraExtrinsics","setCameraExtrinsics","up","rotation","roll","look","lookVec","rollQ","param","SetControlsMemo","UpdateControls","ContextListener","context","values","GenerateContextListeners","contexts","ContextBridge","update","prev","child","Context","View3D","trackballControls","orbitControls","mapControls","controls","orthographic","otherProps","version","_contexts","glParameters","glParameterKeys","backgroundProps","shadowProps","cameraType","cameraProps","contextListeners","jsxs","Fragment","Canvas","SetCanvasProps","View3DMemo","useThree","DEFAULT_COLOR","checkPropagation","mousePropagation","handleClick","clickSensitivity","eventProps","onClick","onDoubleClick","currentTime","initialClickTime","AnimationComponent","animation","timers","performanceStart","stopwatchMode","timer","performanceEnd","time","forwardRef","MaterialComponent","materialType","material","hasMaterialChild","materialProps","MeshMaterial","Mesh","geometry","eulerOrder","normal","color","hoverColor","opacity","transparent","roughness","metalness","reflectivity","texturePath","textureURL","map","aoMap","aoMapIntensity","bumpMap","bumpScale","normalMap","normalMapType","normalMapScale","displacementMap","displacementMapScale","displacementBias","roughnessMap","metalnessMap","alphaMap","envMapIntensity","view3DEnvMap","wireframe","side","depthWrite","depthTest","anisotropy","groupMember","onWheel","onPointerOver","onPointerOut","hoverable","ignoreMouseEvents","receiveShadow","ref","viewContextEnvMap","_position","normalVec","normalQ","rotationQ","_eulerOrder","euler","_scale","_color","setColor","mapProps","_textureURL","_map","tex","prop","_envMap","otherMaps","_side","_metalness","_roughness","_reflectivity","allMaterialProps","cleanedMaterialProps","_children","_material","meshRef","_state","setState","_ignoreMouseEvents","clickProps","_onPointerOver","_onPointerOut","_onPointerDown","_onPointerUp","_onPointerMove","_onWheel","_onClick","_animation","_receiveShadow","MeshMemo","Box","BoxMemo","Circle","radius","segments","thetaStart","thetaLength","circleArgs","CircleMemo","Cylinder","start","radiusTop","radiusBottom","height","radialSegments","heightSegments","openEnded","dispVec","_start","_end","startV","endV","dispV","rot","cylinderArgs","CylinderMemo","billboardAnimation","PlaneMemo","Label","text","fontName","fontStyle","noBackground","borderColor","borderThickness","noBorder","textColor","resolution","align","_transparent","font","aspect","canvas","ctx","textWidth","width","asp","labelGeometry","prevAspect","prevAlign","alignmentOffset","LabelMemo","Line","points","castShadow","vertices","point","lineGeometry","geom","GeometryComponent","LineMemo","Triangle","indices","_indices","triangle","TriangleMemo","Quad","coplanarThreshold","_points","ind","p0","p1","p2","p3","p01","p02","p03","p01x02","p01x03","QuadMemo","Sphere","widthSegments","phiStart","phiLength","sphereArgs","SphereMemo","TextGeometry","ExtrudeGeometry","parameters","shapes","Font","size","paths","createPaths","pl","chars","line_height","offsetX","offsetY","char","ret","createPath","glyph","ShapePath","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","FONT_SOURCE","FONTS","getFont","cacheFont","loadFont","res","Text","fontFile","depth","curveSegments","bevelEnabled","bevelThickness","bevelSize","bevelOffset","bevelSegments","_","_fontName","_loaded","textGeometry","fontParams","boundingBox","TextMemo","Polygon","shape","options","PolygonMemo","Group","edges","edgeColor","edgeThresholdAngle","groupRef","group","childProps","GroupMemo","generateGroupProps","cleanedProps","Axis","groupProps","z","xColor","yColor","zColor","labelColor","xLabel","yLabel","zLabel","labelSize","labelDepth","labelRotation","thickness","offX","offY","offsetZ","offZ","AxisMemo","Arrow","tail","head","shaftRadius","headBaseRadius","headTipRadius","headRatio","magnitude","_tail","_head","_headBase","_headRatio","_magnitude","tailVec","arrowVec","headBaseVec","_shaftRadius","_headBaseRadius","ArrowMemo","updateAllOpacity","originalOpacity","newOpacity","restore","oldOpacity","setAllOpacity","CullCoverage","frustum","cull","coverageColor","coverageOpacity","restoreAllOpacity","Camera","left","right","top","bottom","near","far","fov","helper","showUp","showNormal","showRoll","showLookAt","showLabel","labelOffset","labelText","wireframeColor","initialNormal","lookAtVec","cam","_left","_right","_top","_bottom","upAlignAngle","qNormalAndRotation","givenUpVec","rightVec","projectedUpVec","trueUpVec","upAlignSign","_roll","cameraNormal","cameraLookAt","cameraHelper","frus","CameraMemo","BoundingBox","otherGroupProps","disp","_min","_max","_pos","minVec","maxVec","displacement","center","BoundingBoxMemo","Capsule","startNorm","endNorm","centerVec","startVec","endVec","startN","endN","_radius","CapsuleMemo","u8","u16","i32","fleb","fdeb","clim","freb","eb","_a","fl","revfl","_b","fd","rev","hMap","cd","mb","le","co","rvb","sv","r_1","flt","fdt","flrm","fdrm","bits","o","bits16","shft","slc","ec","err","nt","inflt","dat","st","buf","dict","sl","dl","noBuf","resize","noSt","cbuf","bl","nbuf","final","bt","lm","dm","lbt","dbt","tbts","hLit","hcLen","tl","ldt","clt","clb","clbmsk","clm","lt","dt","lms","dms","lpos","sym","add","dsym","shift","dend","et","zls","unzlibSync","opts","td","tds","findSpan","U","low","high","mid","calcBasisFunctions","span","N","saved","rv","lv","temp","calcBSplinePoint","P","C","Vector4","Nj","wNj","calcBasisFunctionDerivatives","zeroArr","ders","ndu","s1","s2","rk","pk","j1","j2","calcBSplineDerivatives","nd","du","CK","nders","Pw","calcKoverI","nom","denom","calcRationalCurveDerivatives","Pders","Aders","wders","calcNURBSDerivatives","NURBSCurve","Curve","degree","knots","controlPoints","startKnot","endKnot","knotsLength","pointsLength","optionalTarget","hpoint","NURBSUtils.calcBSplinePoint","tangent","NURBSUtils.calcNURBSDerivatives","json","fbxTree","connections","sceneGraph","FBXLoader","Loader","scope","LoaderUtils","loader","FileLoader","FBXBuffer","isFbxFormatBinary","BinaryParser","FBXText","convertArrayBufferToString","isFbxFormatASCII","getFbxVersion","TextParser","textureLoader","TextureLoader","FBXTreeParser","images","textures","materials","deformers","geometryMap","GeometryParser","connectionMap","rawConnection","fromID","toID","relationship","parentRelationship","childRelationship","blobs","videoNodes","nodeID","videoNode","id","arrayBufferContent","base64Content","image","filename","content","fileName","extension","textureMap","textureNodes","textureNode","wrapModeU","wrapModeV","valueU","valueV","RepeatWrapping","loaderPath","Texture","materialMap","materialNodes","materialNode","ID","MeshPhongMaterial","MeshLambertMaterial","ColorManagement","Color","SRGBColorSpace","EquirectangularReflectionMapping","skeletons","morphTargets","DeformerNodes","deformerNode","relationships","skeleton","morphTarget","deformerNodes","rawBones","boneNode","rawBone","Matrix4","rawMorphTargets","morphTargetNode","rawMorphTarget","modelMap","modelNodes","model","modelNode","connection","transform","generateTransform","animations","AnimationParser","Bone","PropertyBinding","bone","subBone","cameraAttribute","attr","Object3D","nearClippingPlane","farClippingPlane","focalLength","PerspectiveCamera","lightAttribute","intensity","decay","PointLight","DirectionalLight","penumbra","SpotLight","needsDefaultMaterial","il","defaultMaterial","SkinnedMesh","geo","LineBasicMaterial","transformData","getEulerOrder","lookAtTarget","bindMatrices","geoID","geoConnParent","Skeleton","BindPoseNode","poseNodes","poseNode","ambientColor","AmbientLight","geoNodes","geoNode","preTransform","BufferGeometry","geoInfo","buffers","positionAttribute","Float32BufferAttribute","Uint16BufferAttribute","normalMatrix","Matrix3","normalAttribute","uvBuffer","prevMaterialIndex","startIndex","currentIndex","lastGroup","lastIndex","polygonIndex","faceLength","displayedWeightsWarning","facePositionIndexes","faceNormals","faceColors","faceUVs","faceWeights","faceWeightIndices","vertexIndex","polygonVertexIndex","materialIndex","endOfFace","weightIndices","weights","getData","wt","wIndex","Weight","weight","weightIndex","currentWeight","comparedWeight","comparedWeightIndex","comparedWeightArray","tmp","uv","current","next","normalVector","bitangent","vertex","normalTangent","normalBitangent","triangles","positions","triangulationInput","ShapeUtils","i0","i1","i2","parentGeo","parentGeoNode","rawTarget","morphGeoNode","basePositions","baseIndices","morphPositionsSparse","morphIndices","morphPositions","morphIndex","morphGeoInfo","morphBuffers","NormalNode","mappingType","referenceType","indexBuffer","UVNode","ColorNode","MaterialNode","materialIndexBuffer","materialIndices","pointsValues","animationClips","rawClips","rawClip","clip","curveNodesMap","layersMap","rawCurveNodes","rawCurveNode","curveNode","rawCurves","animationCurve","convertFBXTimeToSeconds","animationCurveID","animationCurveRelationship","rawLayers","layerCurveNodes","modelID","rawModel","deformerID","morpherID","rawStacks","layer","tracks","rawTracks","AnimationClip","initialPosition","initialScale","positionTrack","rotationTrack","scaleTrack","morphTrack","modelName","curves","times","VectorKeyframeTrack","preRotation","postRotation","result","defaultEulerOrder","Euler","quaternionValues","QuaternionKeyframeTrack","morphNum","NumberKeyframeTrack","targetIndex","lastValue","currentValue","prevValue","xIndex","yIndex","zIndex","xValue","yValue","zValue","curvex","curvey","curvez","initialValueRad","currentValueRad","valuesSpan","absoluteSpan","numSubIntervals","E1","E2","Q1","Q2","initialTime","timeSpan","Q","E","FBXTree","split","matchComment","matchEmpty","matchBeginning","matchProperty","matchEnd","property","nodeName","nodeAttrs","attrs","currentNode","contentLine","propValue","connProps","from","to","rest","elem","append","parseNumberArray","innerPropName","innerPropType1","innerPropType2","innerPropFlag","innerPropValue","reader","BinaryReader","allNodes","endOffset","numProperties","nameLen","propertyList","attrName","attrType","subNode","arrayLength","encoding","compressedLength","fflate.unzlibSync","reader2","littleEndian","nullByte","CORRECT","cursor","read","versionRegExp","dataArray","infoObject","slice","tempEuler","tempVec","lTranslationM","lPreRotationM","lRotationM","lPostRotationM","lScalingM","lScalingPivotM","lScalingOffsetM","lRotationOffsetM","lRotationPivotM","lParentGX","lParentLX","lGlobalT","inheritType","lLRM","lParentGRM","lParentTM","lParentGRSM","lParentGSM","lLSM","lGlobalRS","lParentLSM_inv","lParentGSM_noLocal","lRotationPivotM_inv","lScalingPivotM_inv","lTransform","lLocalTWithAllPivotAndOffsetInfo","lGlobalTranslation","enums","updateAllMaterials","loadFBX","fbxPath","fbxURL","mixer","actionIndex","fbxLoader","fbx","otherMaterialProps","FBX","materialPropsKeys","loadingText","clock","FBXMemo","toTrianglesDrawMode","drawMode","TrianglesDrawMode","TriangleFanDrawMode","TriangleStripDrawMode","numberOfTriangles","newIndices","newGeometry","GLTFLoader","parser","GLTFMaterialsClearcoatExtension","GLTFMaterialsDispersionExtension","GLTFTextureBasisUExtension","GLTFTextureWebPExtension","GLTFTextureAVIFExtension","GLTFMaterialsSheenExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsEmissiveStrengthExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsIridescenceExtension","GLTFMaterialsAnisotropyExtension","GLTFMaterialsBumpExtension","GLTFLightsExtension","GLTFMeshoptCompression","GLTFMeshGpuInstancing","resourcePath","relativeUrl","_onError","gltf","dracoLoader","ktx2Loader","meshoptDecoder","extensions","plugins","textDecoder","BINARY_EXTENSION_HEADER_MAGIC","EXTENSIONS","GLTFBinaryExtension","error","GLTFParser","plugin","extensionName","extensionsRequired","GLTFMaterialsUnlitExtension","GLTFDracoMeshCompressionExtension","GLTFTextureTransformExtension","GLTFMeshQuantizationExtension","resolve","reject","GLTFRegistry","objects","nodeDefs","nodeIndex","nodeLength","nodeDef","lightIndex","cacheKey","dependency","lightDef","lightNode","range","assignExtrasToUserData","light","MeshBasicMaterial","materialParams","materialDef","pending","metallicRoughness","emissiveStrength","MeshPhysicalMaterial","colorFactor","colorArray","textureIndex","textureDef","handler","bufferView","extensionDef","decoder","byteOffset","byteLength","stride","meshDef","primitive","WEBGL_CONSTANTS","attributesDef","attributes","accessor","results","nodeObject","meshes","instancedMeshes","instancedMesh","InstancedMesh","attributeName","InstancedBufferAttribute","BINARY_EXTENSION_HEADER_LENGTH","BINARY_EXTENSION_CHUNK_TYPES","headerView","chunkContentsLength","chunkView","chunkIndex","chunkLength","chunkType","contentArray","bufferViewIndex","gltfAttributeMap","threeAttributeMap","attributeNormalizedMap","attributeTypeMap","threeAttributeName","ATTRIBUTES","accessorDef","componentType","WEBGL_COMPONENT_TYPES","attribute","normalized","GLTFCubicSplineInterpolant","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","valueSize","t0","t1","stride2","stride3","pp","ppp","offset1","offset0","s3","s0","m0","m1","GLTFCubicSplineQuaternionInterpolant","WEBGL_FILTERS","NearestMipmapNearestFilter","LinearMipmapNearestFilter","NearestMipmapLinearFilter","LinearMipmapLinearFilter","WEBGL_WRAPPINGS","MirroredRepeatWrapping","WEBGL_TYPE_SIZES","PATH_PROPERTIES","INTERPOLATION","InterpolateLinear","InterpolateDiscrete","ALPHA_MODES","createDefaultMaterial","cache","MeshStandardMaterial","FrontSide","addUnknownExtensionsToUserData","knownExtensions","objectDef","gltfDef","addMorphTargets","targets","hasMorphPosition","hasMorphNormal","hasMorphColor","pendingPositionAccessors","pendingNormalAccessors","pendingColorAccessors","pendingAccessor","accessors","morphNormals","morphColors","updateMorphTargets","targetNames","createPrimitiveKey","primitiveDef","geometryKey","dracoExtension","createAttributesKey","attributesKey","getNormalizedComponentScale","constructor","getImageURIMimeType","uri","_identityMatrix","isSafari","safariVersion","isFirefox","firefoxVersion","userAgent","safariMatch","ImageBitmapLoader","ext","skinDefs","meshDefs","skinIndex","skinLength","joints","updateMappings","original","clone","mappings","func","defs","def","bufferIndex","bufferDef","bufferViewDef","accessorIndex","itemSize","TypedArray","BufferAttribute","pendingBufferViews","bufferViews","elementBytes","itemBytes","byteStride","bufferAttribute","ibSlice","ibCacheKey","ib","InterleavedBuffer","InterleavedBufferAttribute","itemSizeIndices","TypedArrayIndices","byteOffsetIndices","byteOffsetValues","sparseIndices","sparseValues","sourceIndex","sourceDef","promise","sampler","URL","sourceURI","isObjectURL","blob","imageBitmap","mapName","mapDef","colorSpace","gltfReference","useDerivativeTangents","useVertexColors","useFlatShading","pointsMaterial","PointsMaterial","Material","lineMaterial","cachedMaterial","materialExtensions","kmuExtension","DoubleSide","alphaMode","emissiveFactor","originalName","sanitizedName","primitives","createDracoPrimitive","addPrimitiveAttributes","cached","geometryPromise","meshIndex","geometries","LineSegments","LineLoop","Points","cameraIndex","cameraDef","params","OrthographicCamera","skinDef","inverseBindMatrices","jointNodes","bones","boneInverses","jointNode","mat","animationIndex","animationDef","animationName","pendingNodes","pendingInputAccessors","pendingOutputAccessors","pendingSamplers","pendingTargets","channel","input","output","nodes","inputAccessors","outputAccessors","samplers","inputAccessor","outputAccessor","createdTracks","nodePending","childPending","childrenDef","skeletonPending","meshPromise","matrix","mapping","sceneIndex","sceneDef","nodeIds","reduceAssociations","reducedAssociations","targetName","TypedKeyframeTrack","interpolation","outputArray","jl","track","scaled","interpolantType","computeBounds","Box3","boxScale","maxDisplacement","vector","sphere","assignAttributeAccessor","gltfAttributeName","_taskCache","DRACOLoader","workerLimit","attributeIDs","attributeTypes","vertexColorSpace","taskConfig","taskKey","cachedTask","worker","taskID","taskCost","geometryPending","_worker","message","geometryData","inputColorSpace","responseType","useJS","librariesPending","libraries","jsContent","DRACOWorker","body","decoderConfig","decoderPending","draco","decodeGeometry","dracoGeometry","decodingStatus","geometryType","attributeType","attributeID","attributeResult","decodeAttribute","decodeIndex","numIndices","numComponents","numValues","dataType","getDracoDataType","DRACO_DECODER_SOURCE","loadGLTF","gltfPath","gltfURL","dracoDecoderPath","gltfLoader","GLTF","GLTFMemo","_object_pattern","_material_library_pattern","_material_use_pattern","_map_use_pattern","_face_vertex_data_separator_pattern","_vA","_vB","_vC","_ab","_cb","ParserState","fromDeclaration","previousMaterial","previous","cloned","lastMultiMaterial","mi","declared","src","dst","ua","ub","uc","na","nb","nc","vLen","ia","ic","nLen","uvLen","vi","uvs","uvi","OBJLoader","lines","lineFirstChar","vertexData","faceVertices","vertexParts","v1","v2","v3","lineParts","lineVertices","lineUVs","li","llen","parts","pointData","container","isLine","isPoints","hasVertexColors","buffergeometry","createdMaterials","miLen","sourceMaterial","materialHash","materialLine","materialPoints","MTLLoader","info","delimiter_pattern","materialsInfo","ss","materialCreator","MaterialCreator","baseUrl","converted","mn","covmat","save","lprop","materialName","resolveURL","setMapForType","mapType","texParams","matParams","items","DefaultLoadingManager","loadOBJ","objPath","objURL","loadOBJAndMTL","mtlPath","mtlURL","mtlLoader","mtl","objLoader","OBJ","OBJMemo","Path","frames","lineThickness","pointRadius","pointColor","lineColor","frame","enumerate","lineProps","pointProps","textProps","otherCleanedProps","_frames","prevPoint","newPoint","_pointRadius","_pointProps","_lineProps","PathMemo","PCDLoader","dataview","decompressLZF","inData","outLength","inLength","outData","inPtr","outPtr","ctrl","parseHeader","binaryData","PCDheader","result1","result2","sizeSum","label","rgb_field_index","field","rgb_type","float","rgb","farr","sizes","compressedSize","decompressedSize","decompressed","rgbIndex","intensityIndex","labelIndex","row","Int32BufferAttribute","loadPCD","pcdPath","pcdURL","pointSize","pcdLoader","pcd","PCD","PCDMemo","AmbientLightMemo","LightWithShadows","THREELight","THREEHelper","lightParams","helperParams","shadowCameraNear","shadowCameraFar","shadowMapWidth","shadowMapHeight","tpos","_helperParams","LightWithShadowsHelper","LightWithShadowsMemo","UpdateLightWithShadowsHelper","lightHelper","helperSize","helperColor","DirectionalLightMemo","HemisphereLightHelper","groundColor","HemisphereLight","skyColor","_groundColor","helperProps","HemisphereLightMemo","PointLightMemo","RectAreaLightHelper","targetVec","RectAreaLight","_helperColor","_width","_height","RectAreaLightMemo","SpotLightMemo"],"mappings":"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,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG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,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,SAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,YAAa,GAAG,UAAY,SAAS,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,QAAQ,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,QAAQ,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,QAAQ,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,QAAQ,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,SAAS,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,SAAS,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,SAAS,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,SAAS,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,QAAU,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,QAAQ,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,SAAW,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,QAAQ,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,YAAa,GAAG,UAAU,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,UAAY,GAAG,WAAY,UAAU,YAAa,GAAG,UAAW,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,SAAS,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,YAAa,GAAG,WAAY,SAAS,YAAa,GAAG,WAAY,UAAU,YAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,YAAa,UAAU,YAAa,GAAG,WAAa,UAAU,YAAa,GAAG,WAAY,UAAU,SAAW,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,SAAW,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG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,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,SAAS,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,WAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,GAAG,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,YAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,UAAW,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,SAAS,OAAO,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,SAAS,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,SAAS,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,SAAS,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,QAAQ,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,SAAS,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,UAAW,UAAU,WAAa,GAAG,WAAW,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,QAAQ,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,SAAW,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,UAAY,GAAG,WAAW,UAAU,WAAa,GAAG,WAAW,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAa,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,WAAa,GAAG,GAAG,GAAG,UAAY,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,GAAG,UAAU,WAAa,GAAG,YAAa,UAAU,WAAa,GAAG,WAAa,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAa,UAAU,UAAW,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,UAAW,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,SAAU,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,SAAU,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,UAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,QAAQ,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,SAAU,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,QAAQ,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAa,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,SAAS,WAAY,GAAG,GAAG,UAAU,UAAW,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,UAAW,QAAQ,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,SAAU,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,WAAY,SAAS,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,WAAW,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,GAAG,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,GAAG,UAAU,WAAY,GAAG,YAAa,UAAU,WAAY,GAAG,WAAa,UAAU,WAAY,GAAG,UAAW,UAAU,WAAY,GAAG,WAAY,UAAU,SAAU,GAAG,WAAY,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,WAAW,SAAS,WAAY,GAAG,WAAW,UAAU,UAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,UAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,QAAS,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,QAAQ,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,UAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,UAAY,UAAU,UAAU,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,OAAO,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,SAAS,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,QAAQ,WAAY,GAAG,SAAS,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,SAAS,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAW,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,SAAS,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,SAAS,GAAG,GAAG,UAAU,WAAW,GAAG,YAAa,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,GAAG,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,WAAW,GAAG,WAAa,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,WAAY,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,WAAW,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,UAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,SAAS,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,MAAM,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,OAAO,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,UAAW,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,UAAU,UAAU,WAAY,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,QAAQ,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,QAAQ,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,SAAS,UAAU,GAAG,WAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,QAAQ,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAY,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,YAAa,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,QAAQ,WAAW,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAa,SAAS,UAAU,GAAG,WAAY,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,QAAQ,SAAS,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,QAAQ,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,QAAQ,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,SAAS,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,UAAU,UAAU,GAAG,WAAY,UAAU,UAAU,GAAG,WAAW,UAAU,SAAS,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,SAAS,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,SAAS,GAAG,SAAS,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,SAAS,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG,QAAQ,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,QAAQ,SAAS,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,SAAS,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,UAAU,UAAU,WAAW,GAAG,SAAS,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,GAAG,GAAG,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,WAAW,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,SAAS,SAAS,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,UAAU,UAAU,GAAG,UAAU,SAAS,UAAU,GAAG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","x_google_ignoreList":[0,1,2,6,8,9,10,13,14,16,17,18,36,37,46,47,48,49,51,52,53,55,56,59]}
|