From ec59e95b87524186589dc57ad8d1722076e9eb06 Mon Sep 17 00:00:00 2001 From: howard Date: Sun, 21 Mar 2021 03:42:14 -0700 Subject: [PATCH] working wasm connection --- dist/CDemo.js | 1 + dist/CDemo.wasm | Bin 0 -> 115903 bytes dist/bundle.js | 1358 +++++++++++++++++++++++++- dist/index.html | 3 +- dist/solver.js | 2353 ++++++++++++++++++++++++++++++++++++++++++++++ dist/solver.wasm | Bin 0 -> 18343 bytes src/Sketcher.js | 33 +- src/scratch.js | 1 + wasm/libslvs.a | Bin 0 -> 21289420 bytes wasm/notes | 1 + wasm/slvs.h | 404 ++++++++ wasm/solver.c | 281 ++++++ 12 files changed, 4424 insertions(+), 11 deletions(-) create mode 100644 dist/CDemo.js create mode 100755 dist/CDemo.wasm create mode 100644 dist/solver.js create mode 100755 dist/solver.wasm create mode 100644 src/scratch.js create mode 100644 wasm/libslvs.a create mode 100644 wasm/notes create mode 100644 wasm/slvs.h create mode 100644 wasm/solver.c diff --git a/dist/CDemo.js b/dist/CDemo.js new file mode 100644 index 0000000..e99c7b3 --- /dev/null +++ b/dist/CDemo.js @@ -0,0 +1 @@ +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function allocateUTF8OnStack(str){var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8Array(str,HEAP8,ret,size);return ret}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||134217728;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function preMain(){callRuntimeCallbacks(__ATMAIN__)}function exitRuntime(){runtimeExited=true}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="CDemo.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["j"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["p"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var ExceptionInfoAttrs={DESTRUCTOR_OFFSET:0,REFCOUNT_OFFSET:4,TYPE_OFFSET:8,CAUGHT_OFFSET:12,RETHROWN_OFFSET:13,SIZE:16};function ___cxa_allocate_exception(size){return _malloc(size+ExceptionInfoAttrs.SIZE)+ExceptionInfoAttrs.SIZE}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-ExceptionInfoAttrs.SIZE;this.set_type=function(type){HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]=type};this.get_type=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.TYPE_OFFSET>>2]};this.set_destructor=function(destructor){HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]=destructor};this.get_destructor=function(){return HEAP32[this.ptr+ExceptionInfoAttrs.DESTRUCTOR_OFFSET>>2]};this.set_refcount=function(refcount){HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=refcount};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.CAUGHT_OFFSET>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+ExceptionInfoAttrs.RETHROWN_OFFSET>>0]!=0};this.init=function(type,destructor){this.set_type(type);this.set_destructor(destructor);this.set_refcount(0);this.set_caught(false);this.set_rethrown(false)};this.add_ref=function(){var value=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=value+1};this.release_ref=function(){var prev=HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2];HEAP32[this.ptr+ExceptionInfoAttrs.REFCOUNT_OFFSET>>2]=prev-1;return prev===1}}var exceptionLast=0;var uncaughtExceptionCount=0;function ___cxa_throw(ptr,type,destructor){var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw ptr}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){abortOnCannotGrowMemory(requestedSize)}function _exit(status){exit(status)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){}function _fd_write(fd,iov,iovcnt,pnum){var num=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}var asmLibraryArg={"h":___cxa_allocate_exception,"g":___cxa_throw,"b":_abort,"d":_emscripten_memcpy_big,"e":_emscripten_resize_heap,"i":_exit,"f":_fd_close,"c":_fd_seek,"a":_fd_write};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["k"]).apply(null,arguments)};var _Example2d=Module["_Example2d"]=function(){return(_Example2d=Module["_Example2d"]=Module["asm"]["l"]).apply(null,arguments)};var _solost=Module["_solost"]=function(){return(_solost=Module["_solost"]=Module["asm"]["m"]).apply(null,arguments)};var _main=Module["_main"]=function(){return(_main=Module["_main"]=Module["asm"]["n"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["o"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["q"]).apply(null,arguments)};var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}var calledMain=false;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args){var entryFunction=Module["_main"];args=args||[];var argc=args.length+1;var argv=stackAlloc((argc+1)*4);HEAP32[argv>>2]=allocateUTF8OnStack(thisProgram);for(var i=1;i>2)+i]=allocateUTF8OnStack(args[i-1])}HEAP32[(argv>>2)+argc]=0;try{var ret=entryFunction(argc,argv);exit(ret,true)}catch(e){if(e instanceof ExitStatus){return}else if(e=="unwind"){noExitRuntime=true;return}else{var toLog=e;if(e&&typeof e==="object"&&e.stack){toLog=[e,e.stack]}err("exception thrown: "+toLog);quit_(1,e)}}finally{calledMain=true}}function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){if(implicit&&noExitRuntime&&status===0){return}if(noExitRuntime){}else{EXITSTATUS=status;exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); diff --git a/dist/CDemo.wasm b/dist/CDemo.wasm new file mode 100755 index 0000000000000000000000000000000000000000..dca050947588e4fa93f96e1e99506a7809c0a344 GIT binary patch literal 115903 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 literal 0 HcmV?d00001 diff --git a/dist/bundle.js b/dist/bundle.js index f45b25f..baba7e7 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -280,6 +280,216 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/Three.Legacy.js": +/*!************************************************!*\ + !*** ./node_modules/three/src/Three.Legacy.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Math\": () => (/* reexport safe */ _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_41__.MathUtils),\n/* harmony export */ \"LineStrip\": () => (/* binding */ LineStrip),\n/* harmony export */ \"LinePieces\": () => (/* binding */ LinePieces),\n/* harmony export */ \"NoColors\": () => (/* binding */ NoColors),\n/* harmony export */ \"FaceColors\": () => (/* binding */ FaceColors),\n/* harmony export */ \"VertexColors\": () => (/* binding */ VertexColors),\n/* harmony export */ \"MeshFaceMaterial\": () => (/* binding */ MeshFaceMaterial),\n/* harmony export */ \"MultiMaterial\": () => (/* binding */ MultiMaterial),\n/* harmony export */ \"PointCloud\": () => (/* binding */ PointCloud),\n/* harmony export */ \"Particle\": () => (/* binding */ Particle),\n/* harmony export */ \"ParticleSystem\": () => (/* binding */ ParticleSystem),\n/* harmony export */ \"PointCloudMaterial\": () => (/* binding */ PointCloudMaterial),\n/* harmony export */ \"ParticleBasicMaterial\": () => (/* binding */ ParticleBasicMaterial),\n/* harmony export */ \"ParticleSystemMaterial\": () => (/* binding */ ParticleSystemMaterial),\n/* harmony export */ \"Vertex\": () => (/* binding */ Vertex),\n/* harmony export */ \"DynamicBufferAttribute\": () => (/* binding */ DynamicBufferAttribute),\n/* harmony export */ \"Int8Attribute\": () => (/* binding */ Int8Attribute),\n/* harmony export */ \"Uint8Attribute\": () => (/* binding */ Uint8Attribute),\n/* harmony export */ \"Uint8ClampedAttribute\": () => (/* binding */ Uint8ClampedAttribute),\n/* harmony export */ \"Int16Attribute\": () => (/* binding */ Int16Attribute),\n/* harmony export */ \"Uint16Attribute\": () => (/* binding */ Uint16Attribute),\n/* harmony export */ \"Int32Attribute\": () => (/* binding */ Int32Attribute),\n/* harmony export */ \"Uint32Attribute\": () => (/* binding */ Uint32Attribute),\n/* harmony export */ \"Float32Attribute\": () => (/* binding */ Float32Attribute),\n/* harmony export */ \"Float64Attribute\": () => (/* binding */ Float64Attribute),\n/* harmony export */ \"AxisHelper\": () => (/* binding */ AxisHelper),\n/* harmony export */ \"BoundingBoxHelper\": () => (/* binding */ BoundingBoxHelper),\n/* harmony export */ \"EdgesHelper\": () => (/* binding */ EdgesHelper),\n/* harmony export */ \"WireframeHelper\": () => (/* binding */ WireframeHelper),\n/* harmony export */ \"XHRLoader\": () => (/* binding */ XHRLoader),\n/* harmony export */ \"BinaryTextureLoader\": () => (/* binding */ BinaryTextureLoader),\n/* harmony export */ \"WebGLRenderTargetCube\": () => (/* binding */ WebGLRenderTargetCube),\n/* harmony export */ \"CanvasRenderer\": () => (/* binding */ CanvasRenderer),\n/* harmony export */ \"JSONLoader\": () => (/* binding */ JSONLoader),\n/* harmony export */ \"SceneUtils\": () => (/* binding */ SceneUtils),\n/* harmony export */ \"LensFlare\": () => (/* binding */ LensFlare)\n/* harmony export */ });\n/* harmony import */ var _audio_Audio_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./audio/Audio.js */ \"./node_modules/three/src/audio/Audio.js\");\n/* harmony import */ var _audio_AudioAnalyser_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./audio/AudioAnalyser.js */ \"./node_modules/three/src/audio/AudioAnalyser.js\");\n/* harmony import */ var _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cameras/PerspectiveCamera.js */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_InstancedBufferGeometry_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./core/InstancedBufferGeometry.js */ \"./node_modules/three/src/core/InstancedBufferGeometry.js\");\n/* harmony import */ var _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./core/InterleavedBuffer.js */ \"./node_modules/three/src/core/InterleavedBuffer.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _core_Uniform_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./core/Uniform.js */ \"./node_modules/three/src/core/Uniform.js\");\n/* harmony import */ var _core_Raycaster_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./core/Raycaster.js */ \"./node_modules/three/src/core/Raycaster.js\");\n/* harmony import */ var _extras_core_Curve_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./extras/core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _extras_core_Path_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./extras/core/Path.js */ \"./node_modules/three/src/extras/core/Path.js\");\n/* harmony import */ var _helpers_AxesHelper_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./helpers/AxesHelper.js */ \"./node_modules/three/src/helpers/AxesHelper.js\");\n/* harmony import */ var _helpers_BoxHelper_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./helpers/BoxHelper.js */ \"./node_modules/three/src/helpers/BoxHelper.js\");\n/* harmony import */ var _helpers_GridHelper_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./helpers/GridHelper.js */ \"./node_modules/three/src/helpers/GridHelper.js\");\n/* harmony import */ var _helpers_SkeletonHelper_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./helpers/SkeletonHelper.js */ \"./node_modules/three/src/helpers/SkeletonHelper.js\");\n/* harmony import */ var _geometries_EdgesGeometry_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./geometries/EdgesGeometry.js */ \"./node_modules/three/src/geometries/EdgesGeometry.js\");\n/* harmony import */ var _geometries_ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./geometries/ExtrudeGeometry.js */ \"./node_modules/three/src/geometries/ExtrudeGeometry.js\");\n/* harmony import */ var _geometries_ShapeGeometry_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./geometries/ShapeGeometry.js */ \"./node_modules/three/src/geometries/ShapeGeometry.js\");\n/* harmony import */ var _geometries_WireframeGeometry_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./geometries/WireframeGeometry.js */ \"./node_modules/three/src/geometries/WireframeGeometry.js\");\n/* harmony import */ var _lights_Light_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./lights/Light.js */ \"./node_modules/three/src/lights/Light.js\");\n/* harmony import */ var _loaders_Loader_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./loaders/Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n/* harmony import */ var _loaders_LoaderUtils_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./loaders/LoaderUtils.js */ \"./node_modules/three/src/loaders/LoaderUtils.js\");\n/* harmony import */ var _loaders_FileLoader_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./loaders/FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _loaders_AudioLoader_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./loaders/AudioLoader.js */ \"./node_modules/three/src/loaders/AudioLoader.js\");\n/* harmony import */ var _loaders_CubeTextureLoader_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./loaders/CubeTextureLoader.js */ \"./node_modules/three/src/loaders/CubeTextureLoader.js\");\n/* harmony import */ var _loaders_DataTextureLoader_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./loaders/DataTextureLoader.js */ \"./node_modules/three/src/loaders/DataTextureLoader.js\");\n/* harmony import */ var _loaders_TextureLoader_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./loaders/TextureLoader.js */ \"./node_modules/three/src/loaders/TextureLoader.js\");\n/* harmony import */ var _materials_Material_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./materials/Material.js */ \"./node_modules/three/src/materials/Material.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _materials_MeshPhongMaterial_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./materials/MeshPhongMaterial.js */ \"./node_modules/three/src/materials/MeshPhongMaterial.js\");\n/* harmony import */ var _materials_MeshPhysicalMaterial_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./materials/MeshPhysicalMaterial.js */ \"./node_modules/three/src/materials/MeshPhysicalMaterial.js\");\n/* harmony import */ var _materials_PointsMaterial_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./materials/PointsMaterial.js */ \"./node_modules/three/src/materials/PointsMaterial.js\");\n/* harmony import */ var _materials_ShaderMaterial_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./materials/ShaderMaterial.js */ \"./node_modules/three/src/materials/ShaderMaterial.js\");\n/* harmony import */ var _math_Box2_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./math/Box2.js */ \"./node_modules/three/src/math/Box2.js\");\n/* harmony import */ var _math_Box3_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./math/Box3.js */ \"./node_modules/three/src/math/Box3.js\");\n/* harmony import */ var _math_Sphere_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./math/Sphere.js */ \"./node_modules/three/src/math/Sphere.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _math_Frustum_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./math/Frustum.js */ \"./node_modules/three/src/math/Frustum.js\");\n/* harmony import */ var _math_Line3_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./math/Line3.js */ \"./node_modules/three/src/math/Line3.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _math_Matrix3_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./math/Matrix3.js */ \"./node_modules/three/src/math/Matrix3.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _math_Plane_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./math/Plane.js */ \"./node_modules/three/src/math/Plane.js\");\n/* harmony import */ var _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./math/Quaternion.js */ \"./node_modules/three/src/math/Quaternion.js\");\n/* harmony import */ var _math_Ray_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./math/Ray.js */ \"./node_modules/three/src/math/Ray.js\");\n/* harmony import */ var _math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./math/Triangle.js */ \"./node_modules/three/src/math/Triangle.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector4_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./math/Vector4.js */ \"./node_modules/three/src/math/Vector4.js\");\n/* harmony import */ var _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./objects/Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _objects_LOD_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./objects/LOD.js */ \"./node_modules/three/src/objects/LOD.js\");\n/* harmony import */ var _objects_Points_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./objects/Points.js */ \"./node_modules/three/src/objects/Points.js\");\n/* harmony import */ var _objects_Sprite_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./objects/Sprite.js */ \"./node_modules/three/src/objects/Sprite.js\");\n/* harmony import */ var _objects_Skeleton_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./objects/Skeleton.js */ \"./node_modules/three/src/objects/Skeleton.js\");\n/* harmony import */ var _objects_SkinnedMesh_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./objects/SkinnedMesh.js */ \"./node_modules/three/src/objects/SkinnedMesh.js\");\n/* harmony import */ var _renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./renderers/WebGLRenderer.js */ \"./node_modules/three/src/renderers/WebGLRenderer.js\");\n/* harmony import */ var _renderers_WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./renderers/WebGLRenderTarget.js */ \"./node_modules/three/src/renderers/WebGLRenderTarget.js\");\n/* harmony import */ var _renderers_WebGLCubeRenderTarget_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./renderers/WebGLCubeRenderTarget.js */ \"./node_modules/three/src/renderers/WebGLCubeRenderTarget.js\");\n/* harmony import */ var _renderers_webgl_WebGLShadowMap_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./renderers/webgl/WebGLShadowMap.js */ \"./node_modules/three/src/renderers/webgl/WebGLShadowMap.js\");\n/* harmony import */ var _extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./extras/ImageUtils.js */ \"./node_modules/three/src/extras/ImageUtils.js\");\n/* harmony import */ var _extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./extras/core/Shape.js */ \"./node_modules/three/src/extras/core/Shape.js\");\n/* harmony import */ var _cameras_CubeCamera_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./cameras/CubeCamera.js */ \"./node_modules/three/src/cameras/CubeCamera.js\");\n/* harmony import */ var _scenes_Scene_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./scenes/Scene.js */ \"./node_modules/three/src/scenes/Scene.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst LineStrip = 0;\nconst LinePieces = 1;\nconst NoColors = 0;\nconst FaceColors = 1;\nconst VertexColors = 2;\n\nfunction MeshFaceMaterial( materials ) {\n\n\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\treturn materials;\n\n}\n\nfunction MultiMaterial( materials = [] ) {\n\n\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\tmaterials.isMultiMaterial = true;\n\tmaterials.materials = materials;\n\tmaterials.clone = function () {\n\n\t\treturn materials.slice();\n\n\t};\n\n\treturn materials;\n\n}\n\nfunction PointCloud( geometry, material ) {\n\n\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\treturn new _objects_Points_js__WEBPACK_IMPORTED_MODULE_54__.Points( geometry, material );\n\n}\n\nfunction Particle( material ) {\n\n\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\treturn new _objects_Sprite_js__WEBPACK_IMPORTED_MODULE_55__.Sprite( material );\n\n}\n\nfunction ParticleSystem( geometry, material ) {\n\n\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\treturn new _objects_Points_js__WEBPACK_IMPORTED_MODULE_54__.Points( geometry, material );\n\n}\n\nfunction PointCloudMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new _materials_PointsMaterial_js__WEBPACK_IMPORTED_MODULE_33__.PointsMaterial( parameters );\n\n}\n\nfunction ParticleBasicMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new _materials_PointsMaterial_js__WEBPACK_IMPORTED_MODULE_33__.PointsMaterial( parameters );\n\n}\n\nfunction ParticleSystemMaterial( parameters ) {\n\n\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\treturn new _materials_PointsMaterial_js__WEBPACK_IMPORTED_MODULE_33__.PointsMaterial( parameters );\n\n}\n\nfunction Vertex( x, y, z ) {\n\n\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\treturn new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3( x, y, z );\n\n}\n\n//\n\nfunction DynamicBufferAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.BufferAttribute( array, itemSize ).setUsage( _constants_js__WEBPACK_IMPORTED_MODULE_3__.DynamicDrawUsage );\n\n}\n\nfunction Int8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Int8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Uint8BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Uint8ClampedBufferAttribute( array, itemSize );\n\n}\n\nfunction Int16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Int16BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint16Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Uint16BufferAttribute( array, itemSize );\n\n}\n\nfunction Int32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Int32BufferAttribute( array, itemSize );\n\n}\n\nfunction Uint32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Uint32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float32Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Float32BufferAttribute( array, itemSize );\n\n}\n\nfunction Float64Attribute( array, itemSize ) {\n\n\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\treturn new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Float64BufferAttribute( array, itemSize );\n\n}\n\n//\n\n_extras_core_Curve_js__WEBPACK_IMPORTED_MODULE_11__.Curve.create = function ( construct, getPoint ) {\n\n\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\tconstruct.prototype = Object.create( _extras_core_Curve_js__WEBPACK_IMPORTED_MODULE_11__.Curve.prototype );\n\tconstruct.prototype.constructor = construct;\n\tconstruct.prototype.getPoint = getPoint;\n\n\treturn construct;\n\n};\n\n//\n\n_extras_core_Path_js__WEBPACK_IMPORTED_MODULE_12__.Path.prototype.fromPoints = function ( points ) {\n\n\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\treturn this.setFromPoints( points );\n\n};\n\n//\n\nfunction AxisHelper( size ) {\n\n\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\treturn new _helpers_AxesHelper_js__WEBPACK_IMPORTED_MODULE_13__.AxesHelper( size );\n\n}\n\nfunction BoundingBoxHelper( object, color ) {\n\n\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\treturn new _helpers_BoxHelper_js__WEBPACK_IMPORTED_MODULE_14__.BoxHelper( object, color );\n\n}\n\nfunction EdgesHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\treturn new _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_52__.LineSegments( new _geometries_EdgesGeometry_js__WEBPACK_IMPORTED_MODULE_17__.EdgesGeometry( object.geometry ), new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_30__.LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n_helpers_GridHelper_js__WEBPACK_IMPORTED_MODULE_15__.GridHelper.prototype.setColors = function () {\n\n\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n};\n\n_helpers_SkeletonHelper_js__WEBPACK_IMPORTED_MODULE_16__.SkeletonHelper.prototype.update = function () {\n\n\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n};\n\nfunction WireframeHelper( object, hex ) {\n\n\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\treturn new _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_52__.LineSegments( new _geometries_WireframeGeometry_js__WEBPACK_IMPORTED_MODULE_20__.WireframeGeometry( object.geometry ), new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_30__.LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n}\n\n//\n\n_loaders_Loader_js__WEBPACK_IMPORTED_MODULE_22__.Loader.prototype.extractUrlBase = function ( url ) {\n\n\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\treturn _loaders_LoaderUtils_js__WEBPACK_IMPORTED_MODULE_23__.LoaderUtils.extractUrlBase( url );\n\n};\n\n_loaders_Loader_js__WEBPACK_IMPORTED_MODULE_22__.Loader.Handlers = {\n\n\tadd: function ( /* regex, loader */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' );\n\n\t},\n\n\tget: function ( /* file */ ) {\n\n\t\tconsole.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' );\n\n\t}\n\n};\n\nfunction XHRLoader( manager ) {\n\n\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\treturn new _loaders_FileLoader_js__WEBPACK_IMPORTED_MODULE_24__.FileLoader( manager );\n\n}\n\nfunction BinaryTextureLoader( manager ) {\n\n\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\treturn new _loaders_DataTextureLoader_js__WEBPACK_IMPORTED_MODULE_27__.DataTextureLoader( manager );\n\n}\n\n//\n\n_math_Box2_js__WEBPACK_IMPORTED_MODULE_35__.Box2.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\n_math_Box2_js__WEBPACK_IMPORTED_MODULE_35__.Box2.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\n_math_Box2_js__WEBPACK_IMPORTED_MODULE_35__.Box2.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\n_math_Box2_js__WEBPACK_IMPORTED_MODULE_35__.Box2.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\n_math_Box3_js__WEBPACK_IMPORTED_MODULE_36__.Box3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\n_math_Box3_js__WEBPACK_IMPORTED_MODULE_36__.Box3.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\n_math_Box3_js__WEBPACK_IMPORTED_MODULE_36__.Box3.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\n_math_Box3_js__WEBPACK_IMPORTED_MODULE_36__.Box3.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\n_math_Box3_js__WEBPACK_IMPORTED_MODULE_36__.Box3.prototype.size = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\treturn this.getSize( optionalTarget );\n\n};\n\n//\n\n_math_Sphere_js__WEBPACK_IMPORTED_MODULE_37__.Sphere.prototype.empty = function () {\n\n\tconsole.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' );\n\treturn this.isEmpty();\n\n};\n\n//\n\n_math_Frustum_js__WEBPACK_IMPORTED_MODULE_39__.Frustum.prototype.setFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' );\n\treturn this.setFromProjectionMatrix( m );\n\n};\n\n//\n\n_math_Line3_js__WEBPACK_IMPORTED_MODULE_40__.Line3.prototype.center = function ( optionalTarget ) {\n\n\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\treturn this.getCenter( optionalTarget );\n\n};\n\n//\n\n_math_MathUtils_js__WEBPACK_IMPORTED_MODULE_41__.MathUtils.random16 = function () {\n\n\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\treturn Math.random();\n\n};\n\n_math_MathUtils_js__WEBPACK_IMPORTED_MODULE_41__.MathUtils.nearestPowerOfTwo = function ( value ) {\n\n\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\treturn _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_41__.MathUtils.floorPowerOfTwo( value );\n\n};\n\n_math_MathUtils_js__WEBPACK_IMPORTED_MODULE_41__.MathUtils.nextPowerOfTwo = function ( value ) {\n\n\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\treturn _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_41__.MathUtils.ceilPowerOfTwo( value );\n\n};\n\n//\n\n_math_Matrix3_js__WEBPACK_IMPORTED_MODULE_42__.Matrix3.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\n_math_Matrix3_js__WEBPACK_IMPORTED_MODULE_42__.Matrix3.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\treturn vector.applyMatrix3( this );\n\n};\n\n_math_Matrix3_js__WEBPACK_IMPORTED_MODULE_42__.Matrix3.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n};\n\n_math_Matrix3_js__WEBPACK_IMPORTED_MODULE_42__.Matrix3.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' );\n\treturn attribute.applyMatrix3( this );\n\n};\n\n_math_Matrix3_js__WEBPACK_IMPORTED_MODULE_42__.Matrix3.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n};\n\n_math_Matrix3_js__WEBPACK_IMPORTED_MODULE_42__.Matrix3.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.extractPosition = function ( m ) {\n\n\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\treturn this.copyPosition( m );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.flattenToArrayOffset = function ( array, offset ) {\n\n\tconsole.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' );\n\treturn this.toArray( array, offset );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.getPosition = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\treturn new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3().setFromMatrixColumn( this, 3 );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.setRotationFromQuaternion = function ( q ) {\n\n\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\treturn this.makeRotationFromQuaternion( q );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.multiplyToArray = function () {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.multiplyVector4 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.multiplyVector3Array = function ( /* a */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.rotateAxis = function ( v ) {\n\n\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\tv.transformDirection( this );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.crossVector = function ( vector ) {\n\n\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\treturn vector.applyMatrix4( this );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.translate = function () {\n\n\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.rotateX = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.rotateY = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.rotateZ = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.rotateByAxis = function () {\n\n\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.applyToBufferAttribute = function ( attribute ) {\n\n\tconsole.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' );\n\treturn attribute.applyMatrix4( this );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.applyToVector3Array = function ( /* array, offset, length */ ) {\n\n\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.makeFrustum = function ( left, right, bottom, top, near, far ) {\n\n\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n};\n\n_math_Matrix4_js__WEBPACK_IMPORTED_MODULE_43__.Matrix4.prototype.getInverse = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' );\n\treturn this.copy( matrix ).invert();\n\n};\n\n//\n\n_math_Plane_js__WEBPACK_IMPORTED_MODULE_44__.Plane.prototype.isIntersectionLine = function ( line ) {\n\n\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\treturn this.intersectsLine( line );\n\n};\n\n//\n\n_math_Quaternion_js__WEBPACK_IMPORTED_MODULE_45__.Quaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\treturn vector.applyQuaternion( this );\n\n};\n\n_math_Quaternion_js__WEBPACK_IMPORTED_MODULE_45__.Quaternion.prototype.inverse = function ( ) {\n\n\tconsole.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' );\n\treturn this.invert();\n\n};\n\n//\n\n_math_Ray_js__WEBPACK_IMPORTED_MODULE_46__.Ray.prototype.isIntersectionBox = function ( box ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\treturn this.intersectsBox( box );\n\n};\n\n_math_Ray_js__WEBPACK_IMPORTED_MODULE_46__.Ray.prototype.isIntersectionPlane = function ( plane ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\treturn this.intersectsPlane( plane );\n\n};\n\n_math_Ray_js__WEBPACK_IMPORTED_MODULE_46__.Ray.prototype.isIntersectionSphere = function ( sphere ) {\n\n\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\treturn this.intersectsSphere( sphere );\n\n};\n\n//\n\n_math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.prototype.area = function () {\n\n\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\treturn this.getArea();\n\n};\n\n_math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.prototype.barycoordFromPoint = function ( point, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn this.getBarycoord( point, target );\n\n};\n\n_math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.prototype.midpoint = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\treturn this.getMidpoint( target );\n\n};\n\n_math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.prototypenormal = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn this.getNormal( target );\n\n};\n\n_math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.prototype.plane = function ( target ) {\n\n\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\treturn this.getPlane( target );\n\n};\n\n_math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.barycoordFromPoint = function ( point, a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\treturn _math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.getBarycoord( point, a, b, c, target );\n\n};\n\n_math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.normal = function ( a, b, c, target ) {\n\n\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\treturn _math_Triangle_js__WEBPACK_IMPORTED_MODULE_47__.Triangle.getNormal( a, b, c, target );\n\n};\n\n//\n\n_extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_63__.Shape.prototype.extractAllPoints = function ( divisions ) {\n\n\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\treturn this.extractPoints( divisions );\n\n};\n\n_extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_63__.Shape.prototype.extrude = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\treturn new _geometries_ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_18__.ExtrudeGeometry( this, options );\n\n};\n\n_extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_63__.Shape.prototype.makeGeometry = function ( options ) {\n\n\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\treturn new _geometries_ShapeGeometry_js__WEBPACK_IMPORTED_MODULE_19__.ShapeGeometry( this, options );\n\n};\n\n//\n\n_math_Vector2_js__WEBPACK_IMPORTED_MODULE_48__.Vector2.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\n_math_Vector2_js__WEBPACK_IMPORTED_MODULE_48__.Vector2.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\n_math_Vector2_js__WEBPACK_IMPORTED_MODULE_48__.Vector2.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.setEulerFromRotationMatrix = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.setEulerFromQuaternion = function () {\n\n\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.getPositionFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\treturn this.setFromMatrixPosition( m );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.getScaleFromMatrix = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\treturn this.setFromMatrixScale( m );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.getColumnFromMatrix = function ( index, matrix ) {\n\n\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\treturn this.setFromMatrixColumn( matrix, index );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.applyProjection = function ( m ) {\n\n\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\treturn this.applyMatrix4( m );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.distanceToManhattan = function ( v ) {\n\n\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\treturn this.manhattanDistanceTo( v );\n\n};\n\n_math_Vector3_js__WEBPACK_IMPORTED_MODULE_49__.Vector3.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\n_math_Vector4_js__WEBPACK_IMPORTED_MODULE_50__.Vector4.prototype.fromAttribute = function ( attribute, index, offset ) {\n\n\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\treturn this.fromBufferAttribute( attribute, index, offset );\n\n};\n\n_math_Vector4_js__WEBPACK_IMPORTED_MODULE_50__.Vector4.prototype.lengthManhattan = function () {\n\n\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\treturn this.manhattanLength();\n\n};\n\n//\n\n_core_Object3D_js__WEBPACK_IMPORTED_MODULE_8__.Object3D.prototype.getChildByName = function ( name ) {\n\n\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\treturn this.getObjectByName( name );\n\n};\n\n_core_Object3D_js__WEBPACK_IMPORTED_MODULE_8__.Object3D.prototype.renderDepth = function () {\n\n\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n};\n\n_core_Object3D_js__WEBPACK_IMPORTED_MODULE_8__.Object3D.prototype.translate = function ( distance, axis ) {\n\n\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\treturn this.translateOnAxis( axis, distance );\n\n};\n\n_core_Object3D_js__WEBPACK_IMPORTED_MODULE_8__.Object3D.prototype.getWorldRotation = function () {\n\n\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n};\n\n_core_Object3D_js__WEBPACK_IMPORTED_MODULE_8__.Object3D.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( _core_Object3D_js__WEBPACK_IMPORTED_MODULE_8__.Object3D.prototype, {\n\n\teulerOrder: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\treturn this.rotation.order;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\tthis.rotation.order = value;\n\n\t\t}\n\t},\n\tuseQuaternion: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t}\n\t}\n\n} );\n\n_objects_Mesh_js__WEBPACK_IMPORTED_MODULE_51__.Mesh.prototype.setDrawMode = function () {\n\n\tconsole.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n};\n\nObject.defineProperties( _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_51__.Mesh.prototype, {\n\n\tdrawMode: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' );\n\t\t\treturn _constants_js__WEBPACK_IMPORTED_MODULE_3__.TrianglesDrawMode;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( _objects_LOD_js__WEBPACK_IMPORTED_MODULE_53__.LOD.prototype, {\n\n\tobjects: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\treturn this.levels;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperty( _objects_Skeleton_js__WEBPACK_IMPORTED_MODULE_56__.Skeleton.prototype, 'useVertexTexture', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t},\n\tset: function () {\n\n\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t}\n\n} );\n\n_objects_SkinnedMesh_js__WEBPACK_IMPORTED_MODULE_57__.SkinnedMesh.prototype.initBones = function () {\n\n\tconsole.error( 'THREE.SkinnedMesh: initBones() has been removed.' );\n\n};\n\nObject.defineProperty( _extras_core_Curve_js__WEBPACK_IMPORTED_MODULE_11__.Curve.prototype, '__arcLengthDivisions', {\n\n\tget: function () {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\treturn this.arcLengthDivisions;\n\n\t},\n\tset: function ( value ) {\n\n\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\tthis.arcLengthDivisions = value;\n\n\t}\n\n} );\n\n//\n\n_cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_2__.PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\tconsole.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' +\n\t\t\t'Use .setFocalLength and .filmGauge for a photographic setup.' );\n\n\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\tthis.setFocalLength( focalLength );\n\n};\n\n//\n\nObject.defineProperties( _lights_Light_js__WEBPACK_IMPORTED_MODULE_21__.Light.prototype, {\n\tonlyShadow: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t}\n\t},\n\tshadowCameraFov: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\tthis.shadow.camera.fov = value;\n\n\t\t}\n\t},\n\tshadowCameraLeft: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\tthis.shadow.camera.left = value;\n\n\t\t}\n\t},\n\tshadowCameraRight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\tthis.shadow.camera.right = value;\n\n\t\t}\n\t},\n\tshadowCameraTop: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\tthis.shadow.camera.top = value;\n\n\t\t}\n\t},\n\tshadowCameraBottom: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t}\n\t},\n\tshadowCameraNear: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\tthis.shadow.camera.near = value;\n\n\t\t}\n\t},\n\tshadowCameraFar: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\tthis.shadow.camera.far = value;\n\n\t\t}\n\t},\n\tshadowCameraVisible: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t}\n\t},\n\tshadowBias: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\tthis.shadow.bias = value;\n\n\t\t}\n\t},\n\tshadowDarkness: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t}\n\t},\n\tshadowMapWidth: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t}\n\t},\n\tshadowMapHeight: {\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t}\n\t}\n} );\n\n//\n\nObject.defineProperties( _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.BufferAttribute.prototype, {\n\n\tlength: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\treturn this.array.length;\n\n\t\t}\n\t},\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === _constants_js__WEBPACK_IMPORTED_MODULE_3__.DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( _constants_js__WEBPACK_IMPORTED_MODULE_3__.DynamicDrawUsage );\n\n\t\t}\n\t}\n\n} );\n\n_core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.BufferAttribute.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? _constants_js__WEBPACK_IMPORTED_MODULE_3__.DynamicDrawUsage : _constants_js__WEBPACK_IMPORTED_MODULE_3__.StaticDrawUsage );\n\treturn this;\n\n};\n\n_core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.BufferAttribute.prototype.copyIndicesArray = function ( /* indices */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n},\n\n_core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.BufferAttribute.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\n_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype.addIndex = function ( index ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\tthis.setIndex( index );\n\n};\n\n_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype.addAttribute = function ( name, attribute ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' );\n\n\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\treturn this.setAttribute( name, new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t}\n\n\tif ( name === 'index' ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\tthis.setIndex( attribute );\n\n\t\treturn this;\n\n\t}\n\n\treturn this.setAttribute( name, attribute );\n\n};\n\n_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype.addDrawCall = function ( start, count, indexOffset ) {\n\n\tif ( indexOffset !== undefined ) {\n\n\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t}\n\n\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\tthis.addGroup( start, count );\n\n};\n\n_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype.clearDrawCalls = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\tthis.clearGroups();\n\n};\n\n_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype.computeOffsets = function () {\n\n\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n};\n\n_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype.removeAttribute = function ( name ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' );\n\n\treturn this.deleteAttribute( name );\n\n};\n\n_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype.applyMatrix = function ( matrix ) {\n\n\tconsole.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' );\n\treturn this.applyMatrix4( matrix );\n\n};\n\nObject.defineProperties( _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry.prototype, {\n\n\tdrawcalls: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t},\n\toffsets: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\treturn this.groups;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( _core_InstancedBufferGeometry_js__WEBPACK_IMPORTED_MODULE_6__.InstancedBufferGeometry.prototype, {\n\n\tmaxInstancedCount: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\treturn this.instanceCount;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' );\n\t\t\tthis.instanceCount = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( _core_Raycaster_js__WEBPACK_IMPORTED_MODULE_10__.Raycaster.prototype, {\n\n\tlinePrecision: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\treturn this.params.Line.threshold;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' );\n\t\t\tthis.params.Line.threshold = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_7__.InterleavedBuffer.prototype, {\n\n\tdynamic: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\treturn this.usage === _constants_js__WEBPACK_IMPORTED_MODULE_3__.DynamicDrawUsage;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' );\n\t\t\tthis.setUsage( value );\n\n\t\t}\n\t}\n\n} );\n\n_core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_7__.InterleavedBuffer.prototype.setDynamic = function ( value ) {\n\n\tconsole.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' );\n\tthis.setUsage( value === true ? _constants_js__WEBPACK_IMPORTED_MODULE_3__.DynamicDrawUsage : _constants_js__WEBPACK_IMPORTED_MODULE_3__.StaticDrawUsage );\n\treturn this;\n\n};\n\n_core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_7__.InterleavedBuffer.prototype.setArray = function ( /* array */ ) {\n\n\tconsole.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' );\n\n};\n\n//\n\n_geometries_ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_18__.ExtrudeGeometry.prototype.getArrays = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .getArrays() has been removed.' );\n\n};\n\n_geometries_ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_18__.ExtrudeGeometry.prototype.addShapeList = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShapeList() has been removed.' );\n\n};\n\n_geometries_ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_18__.ExtrudeGeometry.prototype.addShape = function () {\n\n\tconsole.error( 'THREE.ExtrudeGeometry: .addShape() has been removed.' );\n\n};\n\n//\n\n_scenes_Scene_js__WEBPACK_IMPORTED_MODULE_65__.Scene.prototype.dispose = function () {\n\n\tconsole.error( 'THREE.Scene: .dispose() has been removed.' );\n\n};\n\n//\n\nObject.defineProperties( _core_Uniform_js__WEBPACK_IMPORTED_MODULE_9__.Uniform.prototype, {\n\n\tdynamic: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t}\n\t},\n\tonUpdate: {\n\t\tvalue: function () {\n\n\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\treturn this;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( _materials_Material_js__WEBPACK_IMPORTED_MODULE_29__.Material.prototype, {\n\n\twrapAround: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t}\n\t},\n\n\toverdraw: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .overdraw has been removed.' );\n\n\t\t}\n\t},\n\n\twrapRGB: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\treturn new _math_Color_js__WEBPACK_IMPORTED_MODULE_38__.Color();\n\n\t\t}\n\t},\n\n\tshading: {\n\t\tget: function () {\n\n\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\tthis.flatShading = ( value === _constants_js__WEBPACK_IMPORTED_MODULE_3__.FlatShading );\n\n\t\t}\n\t},\n\n\tstencilMask: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\treturn this.stencilFuncMask;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' );\n\t\t\tthis.stencilFuncMask = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( _materials_MeshPhongMaterial_js__WEBPACK_IMPORTED_MODULE_31__.MeshPhongMaterial.prototype, {\n\n\tmetal: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( _materials_MeshPhysicalMaterial_js__WEBPACK_IMPORTED_MODULE_32__.MeshPhysicalMaterial.prototype, {\n\n\ttransparency: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\treturn this.transmission;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' );\n\t\t\tthis.transmission = value;\n\n\t\t}\n\t}\n\n} );\n\nObject.defineProperties( _materials_ShaderMaterial_js__WEBPACK_IMPORTED_MODULE_34__.ShaderMaterial.prototype, {\n\n\tderivatives: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\treturn this.extensions.derivatives;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\tthis.extensions.derivatives = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' );\n\tthis.setRenderTarget( renderTarget );\n\tthis.clear( color, depth, stencil );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.animate = function ( callback ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\tthis.setAnimationLoop( callback );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.getCurrentRenderTarget = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\treturn this.getRenderTarget();\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.getMaxAnisotropy = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\treturn this.capabilities.getMaxAnisotropy();\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.getPrecision = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\treturn this.capabilities.precision;\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.resetGLState = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\treturn this.state.reset();\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_float' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsHalfFloatTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\treturn this.extensions.get( 'OES_texture_half_float' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsStandardDerivatives = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsCompressedTextureS3TC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsCompressedTexturePVRTC = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsBlendMinMax = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsVertexTextures = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\treturn this.capabilities.vertexTextures;\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.supportsInstancedArrays = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.enableScissorTest = function ( boolean ) {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\tthis.setScissorTest( boolean );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.initMaterial = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.addPrePlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.addPostPlugin = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.updateShadowMap = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.setFaceCulling = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.allocTextureUnit = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.setTexture = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.setTexture2D = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.setTextureCube = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' );\n\n};\n\n_renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype.getActiveMipMapLevel = function () {\n\n\tconsole.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' );\n\treturn this.getActiveMipmapLevel();\n\n};\n\nObject.defineProperties( _renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_58__.WebGLRenderer.prototype, {\n\n\tshadowMapEnabled: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.enabled;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\tthis.shadowMap.enabled = value;\n\n\t\t}\n\t},\n\tshadowMapType: {\n\t\tget: function () {\n\n\t\t\treturn this.shadowMap.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\tthis.shadowMap.type = value;\n\n\t\t}\n\t},\n\tshadowMapCullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* value */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\tcontext: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' );\n\t\t\treturn this.getContext();\n\n\t\t}\n\t},\n\tvr: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' );\n\t\t\treturn this.xr;\n\n\t\t}\n\t},\n\tgammaInput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' );\n\n\t\t}\n\t},\n\tgammaOutput: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\treturn false;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' );\n\t\t\tthis.outputEncoding = ( value === true ) ? _constants_js__WEBPACK_IMPORTED_MODULE_3__.sRGBEncoding : _constants_js__WEBPACK_IMPORTED_MODULE_3__.LinearEncoding;\n\n\t\t}\n\t},\n\ttoneMappingWhitePoint: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\t\t\treturn 1.0;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' );\n\n\t\t}\n\t},\n\n} );\n\nObject.defineProperties( _renderers_webgl_WebGLShadowMap_js__WEBPACK_IMPORTED_MODULE_61__.WebGLShadowMap.prototype, {\n\n\tcullFace: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function ( /* cullFace */ ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderReverseSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t},\n\trenderSingleSided: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\treturn undefined;\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t}\n\t}\n\n} );\n\nfunction WebGLRenderTargetCube( width, height, options ) {\n\n\tconsole.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' );\n\treturn new _renderers_WebGLCubeRenderTarget_js__WEBPACK_IMPORTED_MODULE_60__.WebGLCubeRenderTarget( width, options );\n\n}\n\n//\n\nObject.defineProperties( _renderers_WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_59__.WebGLRenderTarget.prototype, {\n\n\twrapS: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\treturn this.texture.wrapS;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\tthis.texture.wrapS = value;\n\n\t\t}\n\t},\n\twrapT: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\treturn this.texture.wrapT;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\tthis.texture.wrapT = value;\n\n\t\t}\n\t},\n\tmagFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\treturn this.texture.magFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\tthis.texture.magFilter = value;\n\n\t\t}\n\t},\n\tminFilter: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\treturn this.texture.minFilter;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\tthis.texture.minFilter = value;\n\n\t\t}\n\t},\n\tanisotropy: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\treturn this.texture.anisotropy;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\tthis.texture.anisotropy = value;\n\n\t\t}\n\t},\n\toffset: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\treturn this.texture.offset;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\tthis.texture.offset = value;\n\n\t\t}\n\t},\n\trepeat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\treturn this.texture.repeat;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\tthis.texture.repeat = value;\n\n\t\t}\n\t},\n\tformat: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\treturn this.texture.format;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\tthis.texture.format = value;\n\n\t\t}\n\t},\n\ttype: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\treturn this.texture.type;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\tthis.texture.type = value;\n\n\t\t}\n\t},\n\tgenerateMipmaps: {\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\treturn this.texture.generateMipmaps;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t}\n\t}\n\n} );\n\n//\n\nObject.defineProperties( _audio_Audio_js__WEBPACK_IMPORTED_MODULE_0__.Audio.prototype, {\n\n\tload: {\n\t\tvalue: function ( file ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\t\tconst scope = this;\n\t\t\tconst audioLoader = new _loaders_AudioLoader_js__WEBPACK_IMPORTED_MODULE_25__.AudioLoader();\n\t\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\t\tscope.setBuffer( buffer );\n\n\t\t\t} );\n\t\t\treturn this;\n\n\t\t}\n\t},\n\tstartTime: {\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Audio: .startTime is now .play( delay ).' );\n\n\t\t}\n\t}\n\n} );\n\n_audio_AudioAnalyser_js__WEBPACK_IMPORTED_MODULE_1__.AudioAnalyser.prototype.getData = function () {\n\n\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\treturn this.getFrequencyData();\n\n};\n\n//\n\n_cameras_CubeCamera_js__WEBPACK_IMPORTED_MODULE_64__.CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\treturn this.update( renderer, scene );\n\n};\n\n_cameras_CubeCamera_js__WEBPACK_IMPORTED_MODULE_64__.CubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) {\n\n\tconsole.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' );\n\treturn this.renderTarget.clear( renderer, color, depth, stencil );\n\n};\n\n_extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_62__.ImageUtils.crossOrigin = undefined;\n\n_extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_62__.ImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\tconst loader = new _loaders_TextureLoader_js__WEBPACK_IMPORTED_MODULE_28__.TextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( url, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\n_extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_62__.ImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) {\n\n\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\tconst loader = new _loaders_CubeTextureLoader_js__WEBPACK_IMPORTED_MODULE_26__.CubeTextureLoader();\n\tloader.setCrossOrigin( this.crossOrigin );\n\n\tconst texture = loader.load( urls, onLoad, undefined, onError );\n\n\tif ( mapping ) texture.mapping = mapping;\n\n\treturn texture;\n\n};\n\n_extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_62__.ImageUtils.loadCompressedTexture = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n_extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_62__.ImageUtils.loadCompressedTextureCube = function () {\n\n\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n};\n\n//\n\nfunction CanvasRenderer() {\n\n\tconsole.error( 'THREE.CanvasRenderer has been removed' );\n\n}\n\n//\n\nfunction JSONLoader() {\n\n\tconsole.error( 'THREE.JSONLoader has been removed.' );\n\n}\n\n//\n\nconst SceneUtils = {\n\n\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t},\n\n\tattach: function ( /* child, scene, parent */ ) {\n\n\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' );\n\n\t}\n\n};\n\n//\n\nfunction LensFlare() {\n\n\tconsole.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' );\n\n}\n\n\n//# sourceURL=webpack:///./node_modules/three/src/Three.Legacy.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/Three.js": +/*!*****************************************!*\ + !*** ./node_modules/three/src/Three.js ***! + \*****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"WebGLMultisampleRenderTarget\": () => (/* reexport safe */ _renderers_WebGLMultisampleRenderTarget_js__WEBPACK_IMPORTED_MODULE_1__.WebGLMultisampleRenderTarget),\n/* harmony export */ \"WebGLCubeRenderTarget\": () => (/* reexport safe */ _renderers_WebGLCubeRenderTarget_js__WEBPACK_IMPORTED_MODULE_2__.WebGLCubeRenderTarget),\n/* harmony export */ \"WebGLRenderTarget\": () => (/* reexport safe */ _renderers_WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_3__.WebGLRenderTarget),\n/* harmony export */ \"WebGLRenderer\": () => (/* reexport safe */ _renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_4__.WebGLRenderer),\n/* harmony export */ \"WebGL1Renderer\": () => (/* reexport safe */ _renderers_WebGL1Renderer_js__WEBPACK_IMPORTED_MODULE_5__.WebGL1Renderer),\n/* harmony export */ \"ShaderLib\": () => (/* reexport safe */ _renderers_shaders_ShaderLib_js__WEBPACK_IMPORTED_MODULE_6__.ShaderLib),\n/* harmony export */ \"UniformsLib\": () => (/* reexport safe */ _renderers_shaders_UniformsLib_js__WEBPACK_IMPORTED_MODULE_7__.UniformsLib),\n/* harmony export */ \"UniformsUtils\": () => (/* reexport safe */ _renderers_shaders_UniformsUtils_js__WEBPACK_IMPORTED_MODULE_8__.UniformsUtils),\n/* harmony export */ \"ShaderChunk\": () => (/* reexport safe */ _renderers_shaders_ShaderChunk_js__WEBPACK_IMPORTED_MODULE_9__.ShaderChunk),\n/* harmony export */ \"FogExp2\": () => (/* reexport safe */ _scenes_FogExp2_js__WEBPACK_IMPORTED_MODULE_10__.FogExp2),\n/* harmony export */ \"Fog\": () => (/* reexport safe */ _scenes_Fog_js__WEBPACK_IMPORTED_MODULE_11__.Fog),\n/* harmony export */ \"Scene\": () => (/* reexport safe */ _scenes_Scene_js__WEBPACK_IMPORTED_MODULE_12__.Scene),\n/* harmony export */ \"Sprite\": () => (/* reexport safe */ _objects_Sprite_js__WEBPACK_IMPORTED_MODULE_13__.Sprite),\n/* harmony export */ \"LOD\": () => (/* reexport safe */ _objects_LOD_js__WEBPACK_IMPORTED_MODULE_14__.LOD),\n/* harmony export */ \"SkinnedMesh\": () => (/* reexport safe */ _objects_SkinnedMesh_js__WEBPACK_IMPORTED_MODULE_15__.SkinnedMesh),\n/* harmony export */ \"Skeleton\": () => (/* reexport safe */ _objects_Skeleton_js__WEBPACK_IMPORTED_MODULE_16__.Skeleton),\n/* harmony export */ \"Bone\": () => (/* reexport safe */ _objects_Bone_js__WEBPACK_IMPORTED_MODULE_17__.Bone),\n/* harmony export */ \"Mesh\": () => (/* reexport safe */ _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_18__.Mesh),\n/* harmony export */ \"InstancedMesh\": () => (/* reexport safe */ _objects_InstancedMesh_js__WEBPACK_IMPORTED_MODULE_19__.InstancedMesh),\n/* harmony export */ \"LineSegments\": () => (/* reexport safe */ _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_20__.LineSegments),\n/* harmony export */ \"LineLoop\": () => (/* reexport safe */ _objects_LineLoop_js__WEBPACK_IMPORTED_MODULE_21__.LineLoop),\n/* harmony export */ \"Line\": () => (/* reexport safe */ _objects_Line_js__WEBPACK_IMPORTED_MODULE_22__.Line),\n/* harmony export */ \"Points\": () => (/* reexport safe */ _objects_Points_js__WEBPACK_IMPORTED_MODULE_23__.Points),\n/* harmony export */ \"Group\": () => (/* reexport safe */ _objects_Group_js__WEBPACK_IMPORTED_MODULE_24__.Group),\n/* harmony export */ \"VideoTexture\": () => (/* reexport safe */ _textures_VideoTexture_js__WEBPACK_IMPORTED_MODULE_25__.VideoTexture),\n/* harmony export */ \"DataTexture\": () => (/* reexport safe */ _textures_DataTexture_js__WEBPACK_IMPORTED_MODULE_26__.DataTexture),\n/* harmony export */ \"DataTexture2DArray\": () => (/* reexport safe */ _textures_DataTexture2DArray_js__WEBPACK_IMPORTED_MODULE_27__.DataTexture2DArray),\n/* harmony export */ \"DataTexture3D\": () => (/* reexport safe */ _textures_DataTexture3D_js__WEBPACK_IMPORTED_MODULE_28__.DataTexture3D),\n/* harmony export */ \"CompressedTexture\": () => (/* reexport safe */ _textures_CompressedTexture_js__WEBPACK_IMPORTED_MODULE_29__.CompressedTexture),\n/* harmony export */ \"CubeTexture\": () => (/* reexport safe */ _textures_CubeTexture_js__WEBPACK_IMPORTED_MODULE_30__.CubeTexture),\n/* harmony export */ \"CanvasTexture\": () => (/* reexport safe */ _textures_CanvasTexture_js__WEBPACK_IMPORTED_MODULE_31__.CanvasTexture),\n/* harmony export */ \"DepthTexture\": () => (/* reexport safe */ _textures_DepthTexture_js__WEBPACK_IMPORTED_MODULE_32__.DepthTexture),\n/* harmony export */ \"Texture\": () => (/* reexport safe */ _textures_Texture_js__WEBPACK_IMPORTED_MODULE_33__.Texture),\n/* harmony export */ \"BoxBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.BoxBufferGeometry),\n/* harmony export */ \"BoxGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.BoxGeometry),\n/* harmony export */ \"CircleBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.CircleBufferGeometry),\n/* harmony export */ \"CircleGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.CircleGeometry),\n/* harmony export */ \"ConeBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ConeBufferGeometry),\n/* harmony export */ \"ConeGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ConeGeometry),\n/* harmony export */ \"CylinderBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.CylinderBufferGeometry),\n/* harmony export */ \"CylinderGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.CylinderGeometry),\n/* harmony export */ \"DodecahedronBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.DodecahedronBufferGeometry),\n/* harmony export */ \"DodecahedronGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.DodecahedronGeometry),\n/* harmony export */ \"EdgesGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.EdgesGeometry),\n/* harmony export */ \"ExtrudeBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ExtrudeBufferGeometry),\n/* harmony export */ \"ExtrudeGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ExtrudeGeometry),\n/* harmony export */ \"IcosahedronBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.IcosahedronBufferGeometry),\n/* harmony export */ \"IcosahedronGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.IcosahedronGeometry),\n/* harmony export */ \"LatheBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.LatheBufferGeometry),\n/* harmony export */ \"LatheGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.LatheGeometry),\n/* harmony export */ \"OctahedronBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.OctahedronBufferGeometry),\n/* harmony export */ \"OctahedronGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.OctahedronGeometry),\n/* harmony export */ \"ParametricBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ParametricBufferGeometry),\n/* harmony export */ \"ParametricGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ParametricGeometry),\n/* harmony export */ \"PlaneBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.PlaneBufferGeometry),\n/* harmony export */ \"PlaneGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.PlaneGeometry),\n/* harmony export */ \"PolyhedronBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.PolyhedronBufferGeometry),\n/* harmony export */ \"PolyhedronGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.PolyhedronGeometry),\n/* harmony export */ \"RingBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.RingBufferGeometry),\n/* harmony export */ \"RingGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.RingGeometry),\n/* harmony export */ \"ShapeBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ShapeBufferGeometry),\n/* harmony export */ \"ShapeGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.ShapeGeometry),\n/* harmony export */ \"SphereBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.SphereBufferGeometry),\n/* harmony export */ \"SphereGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.SphereGeometry),\n/* harmony export */ \"TetrahedronBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TetrahedronBufferGeometry),\n/* harmony export */ \"TetrahedronGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TetrahedronGeometry),\n/* harmony export */ \"TextBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TextBufferGeometry),\n/* harmony export */ \"TextGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TextGeometry),\n/* harmony export */ \"TorusBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TorusBufferGeometry),\n/* harmony export */ \"TorusGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TorusGeometry),\n/* harmony export */ \"TorusKnotBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TorusKnotBufferGeometry),\n/* harmony export */ \"TorusKnotGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TorusKnotGeometry),\n/* harmony export */ \"TubeBufferGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TubeBufferGeometry),\n/* harmony export */ \"TubeGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.TubeGeometry),\n/* harmony export */ \"WireframeGeometry\": () => (/* reexport safe */ _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__.WireframeGeometry),\n/* harmony export */ \"LineBasicMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.LineBasicMaterial),\n/* harmony export */ \"LineDashedMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.LineDashedMaterial),\n/* harmony export */ \"Material\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.Material),\n/* harmony export */ \"MeshBasicMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshBasicMaterial),\n/* harmony export */ \"MeshDepthMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshDepthMaterial),\n/* harmony export */ \"MeshDistanceMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshDistanceMaterial),\n/* harmony export */ \"MeshLambertMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshLambertMaterial),\n/* harmony export */ \"MeshMatcapMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshMatcapMaterial),\n/* harmony export */ \"MeshNormalMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshNormalMaterial),\n/* harmony export */ \"MeshPhongMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshPhongMaterial),\n/* harmony export */ \"MeshPhysicalMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshPhysicalMaterial),\n/* harmony export */ \"MeshStandardMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshStandardMaterial),\n/* harmony export */ \"MeshToonMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.MeshToonMaterial),\n/* harmony export */ \"PointsMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.PointsMaterial),\n/* harmony export */ \"RawShaderMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.RawShaderMaterial),\n/* harmony export */ \"ShaderMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.ShaderMaterial),\n/* harmony export */ \"ShadowMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.ShadowMaterial),\n/* harmony export */ \"SpriteMaterial\": () => (/* reexport safe */ _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__.SpriteMaterial),\n/* harmony export */ \"AnimationLoader\": () => (/* reexport safe */ _loaders_AnimationLoader_js__WEBPACK_IMPORTED_MODULE_36__.AnimationLoader),\n/* harmony export */ \"CompressedTextureLoader\": () => (/* reexport safe */ _loaders_CompressedTextureLoader_js__WEBPACK_IMPORTED_MODULE_37__.CompressedTextureLoader),\n/* harmony export */ \"CubeTextureLoader\": () => (/* reexport safe */ _loaders_CubeTextureLoader_js__WEBPACK_IMPORTED_MODULE_38__.CubeTextureLoader),\n/* harmony export */ \"DataTextureLoader\": () => (/* reexport safe */ _loaders_DataTextureLoader_js__WEBPACK_IMPORTED_MODULE_39__.DataTextureLoader),\n/* harmony export */ \"TextureLoader\": () => (/* reexport safe */ _loaders_TextureLoader_js__WEBPACK_IMPORTED_MODULE_40__.TextureLoader),\n/* harmony export */ \"ObjectLoader\": () => (/* reexport safe */ _loaders_ObjectLoader_js__WEBPACK_IMPORTED_MODULE_41__.ObjectLoader),\n/* harmony export */ \"MaterialLoader\": () => (/* reexport safe */ _loaders_MaterialLoader_js__WEBPACK_IMPORTED_MODULE_42__.MaterialLoader),\n/* harmony export */ \"BufferGeometryLoader\": () => (/* reexport safe */ _loaders_BufferGeometryLoader_js__WEBPACK_IMPORTED_MODULE_43__.BufferGeometryLoader),\n/* harmony export */ \"DefaultLoadingManager\": () => (/* reexport safe */ _loaders_LoadingManager_js__WEBPACK_IMPORTED_MODULE_44__.DefaultLoadingManager),\n/* harmony export */ \"LoadingManager\": () => (/* reexport safe */ _loaders_LoadingManager_js__WEBPACK_IMPORTED_MODULE_44__.LoadingManager),\n/* harmony export */ \"ImageLoader\": () => (/* reexport safe */ _loaders_ImageLoader_js__WEBPACK_IMPORTED_MODULE_45__.ImageLoader),\n/* harmony export */ \"ImageBitmapLoader\": () => (/* reexport safe */ _loaders_ImageBitmapLoader_js__WEBPACK_IMPORTED_MODULE_46__.ImageBitmapLoader),\n/* harmony export */ \"FontLoader\": () => (/* reexport safe */ _loaders_FontLoader_js__WEBPACK_IMPORTED_MODULE_47__.FontLoader),\n/* harmony export */ \"FileLoader\": () => (/* reexport safe */ _loaders_FileLoader_js__WEBPACK_IMPORTED_MODULE_48__.FileLoader),\n/* harmony export */ \"Loader\": () => (/* reexport safe */ _loaders_Loader_js__WEBPACK_IMPORTED_MODULE_49__.Loader),\n/* harmony export */ \"LoaderUtils\": () => (/* reexport safe */ _loaders_LoaderUtils_js__WEBPACK_IMPORTED_MODULE_50__.LoaderUtils),\n/* harmony export */ \"Cache\": () => (/* reexport safe */ _loaders_Cache_js__WEBPACK_IMPORTED_MODULE_51__.Cache),\n/* harmony export */ \"AudioLoader\": () => (/* reexport safe */ _loaders_AudioLoader_js__WEBPACK_IMPORTED_MODULE_52__.AudioLoader),\n/* harmony export */ \"SpotLight\": () => (/* reexport safe */ _lights_SpotLight_js__WEBPACK_IMPORTED_MODULE_53__.SpotLight),\n/* harmony export */ \"PointLight\": () => (/* reexport safe */ _lights_PointLight_js__WEBPACK_IMPORTED_MODULE_54__.PointLight),\n/* harmony export */ \"RectAreaLight\": () => (/* reexport safe */ _lights_RectAreaLight_js__WEBPACK_IMPORTED_MODULE_55__.RectAreaLight),\n/* harmony export */ \"HemisphereLight\": () => (/* reexport safe */ _lights_HemisphereLight_js__WEBPACK_IMPORTED_MODULE_56__.HemisphereLight),\n/* harmony export */ \"HemisphereLightProbe\": () => (/* reexport safe */ _lights_HemisphereLightProbe_js__WEBPACK_IMPORTED_MODULE_57__.HemisphereLightProbe),\n/* harmony export */ \"DirectionalLight\": () => (/* reexport safe */ _lights_DirectionalLight_js__WEBPACK_IMPORTED_MODULE_58__.DirectionalLight),\n/* harmony export */ \"AmbientLight\": () => (/* reexport safe */ _lights_AmbientLight_js__WEBPACK_IMPORTED_MODULE_59__.AmbientLight),\n/* harmony export */ \"AmbientLightProbe\": () => (/* reexport safe */ _lights_AmbientLightProbe_js__WEBPACK_IMPORTED_MODULE_60__.AmbientLightProbe),\n/* harmony export */ \"Light\": () => (/* reexport safe */ _lights_Light_js__WEBPACK_IMPORTED_MODULE_61__.Light),\n/* harmony export */ \"LightProbe\": () => (/* reexport safe */ _lights_LightProbe_js__WEBPACK_IMPORTED_MODULE_62__.LightProbe),\n/* harmony export */ \"StereoCamera\": () => (/* reexport safe */ _cameras_StereoCamera_js__WEBPACK_IMPORTED_MODULE_63__.StereoCamera),\n/* harmony export */ \"PerspectiveCamera\": () => (/* reexport safe */ _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_64__.PerspectiveCamera),\n/* harmony export */ \"OrthographicCamera\": () => (/* reexport safe */ _cameras_OrthographicCamera_js__WEBPACK_IMPORTED_MODULE_65__.OrthographicCamera),\n/* harmony export */ \"CubeCamera\": () => (/* reexport safe */ _cameras_CubeCamera_js__WEBPACK_IMPORTED_MODULE_66__.CubeCamera),\n/* harmony export */ \"ArrayCamera\": () => (/* reexport safe */ _cameras_ArrayCamera_js__WEBPACK_IMPORTED_MODULE_67__.ArrayCamera),\n/* harmony export */ \"Camera\": () => (/* reexport safe */ _cameras_Camera_js__WEBPACK_IMPORTED_MODULE_68__.Camera),\n/* harmony export */ \"AudioListener\": () => (/* reexport safe */ _audio_AudioListener_js__WEBPACK_IMPORTED_MODULE_69__.AudioListener),\n/* harmony export */ \"PositionalAudio\": () => (/* reexport safe */ _audio_PositionalAudio_js__WEBPACK_IMPORTED_MODULE_70__.PositionalAudio),\n/* harmony export */ \"AudioContext\": () => (/* reexport safe */ _audio_AudioContext_js__WEBPACK_IMPORTED_MODULE_71__.AudioContext),\n/* harmony export */ \"AudioAnalyser\": () => (/* reexport safe */ _audio_AudioAnalyser_js__WEBPACK_IMPORTED_MODULE_72__.AudioAnalyser),\n/* harmony export */ \"Audio\": () => (/* reexport safe */ _audio_Audio_js__WEBPACK_IMPORTED_MODULE_73__.Audio),\n/* harmony export */ \"VectorKeyframeTrack\": () => (/* reexport safe */ _animation_tracks_VectorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_74__.VectorKeyframeTrack),\n/* harmony export */ \"StringKeyframeTrack\": () => (/* reexport safe */ _animation_tracks_StringKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_75__.StringKeyframeTrack),\n/* harmony export */ \"QuaternionKeyframeTrack\": () => (/* reexport safe */ _animation_tracks_QuaternionKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_76__.QuaternionKeyframeTrack),\n/* harmony export */ \"NumberKeyframeTrack\": () => (/* reexport safe */ _animation_tracks_NumberKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_77__.NumberKeyframeTrack),\n/* harmony export */ \"ColorKeyframeTrack\": () => (/* reexport safe */ _animation_tracks_ColorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_78__.ColorKeyframeTrack),\n/* harmony export */ \"BooleanKeyframeTrack\": () => (/* reexport safe */ _animation_tracks_BooleanKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_79__.BooleanKeyframeTrack),\n/* harmony export */ \"PropertyMixer\": () => (/* reexport safe */ _animation_PropertyMixer_js__WEBPACK_IMPORTED_MODULE_80__.PropertyMixer),\n/* harmony export */ \"PropertyBinding\": () => (/* reexport safe */ _animation_PropertyBinding_js__WEBPACK_IMPORTED_MODULE_81__.PropertyBinding),\n/* harmony export */ \"KeyframeTrack\": () => (/* reexport safe */ _animation_KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_82__.KeyframeTrack),\n/* harmony export */ \"AnimationUtils\": () => (/* reexport safe */ _animation_AnimationUtils_js__WEBPACK_IMPORTED_MODULE_83__.AnimationUtils),\n/* harmony export */ \"AnimationObjectGroup\": () => (/* reexport safe */ _animation_AnimationObjectGroup_js__WEBPACK_IMPORTED_MODULE_84__.AnimationObjectGroup),\n/* harmony export */ \"AnimationMixer\": () => (/* reexport safe */ _animation_AnimationMixer_js__WEBPACK_IMPORTED_MODULE_85__.AnimationMixer),\n/* harmony export */ \"AnimationClip\": () => (/* reexport safe */ _animation_AnimationClip_js__WEBPACK_IMPORTED_MODULE_86__.AnimationClip),\n/* harmony export */ \"Uniform\": () => (/* reexport safe */ _core_Uniform_js__WEBPACK_IMPORTED_MODULE_87__.Uniform),\n/* harmony export */ \"InstancedBufferGeometry\": () => (/* reexport safe */ _core_InstancedBufferGeometry_js__WEBPACK_IMPORTED_MODULE_88__.InstancedBufferGeometry),\n/* harmony export */ \"BufferGeometry\": () => (/* reexport safe */ _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_89__.BufferGeometry),\n/* harmony export */ \"InterleavedBufferAttribute\": () => (/* reexport safe */ _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_90__.InterleavedBufferAttribute),\n/* harmony export */ \"InstancedInterleavedBuffer\": () => (/* reexport safe */ _core_InstancedInterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_91__.InstancedInterleavedBuffer),\n/* harmony export */ \"InterleavedBuffer\": () => (/* reexport safe */ _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_92__.InterleavedBuffer),\n/* harmony export */ \"InstancedBufferAttribute\": () => (/* reexport safe */ _core_InstancedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_93__.InstancedBufferAttribute),\n/* harmony export */ \"GLBufferAttribute\": () => (/* reexport safe */ _core_GLBufferAttribute_js__WEBPACK_IMPORTED_MODULE_94__.GLBufferAttribute),\n/* harmony export */ \"BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.BufferAttribute),\n/* harmony export */ \"Float16BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Float16BufferAttribute),\n/* harmony export */ \"Float32BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Float32BufferAttribute),\n/* harmony export */ \"Float64BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Float64BufferAttribute),\n/* harmony export */ \"Int16BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Int16BufferAttribute),\n/* harmony export */ \"Int32BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Int32BufferAttribute),\n/* harmony export */ \"Int8BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Int8BufferAttribute),\n/* harmony export */ \"Uint16BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Uint16BufferAttribute),\n/* harmony export */ \"Uint32BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Uint32BufferAttribute),\n/* harmony export */ \"Uint8BufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Uint8BufferAttribute),\n/* harmony export */ \"Uint8ClampedBufferAttribute\": () => (/* reexport safe */ _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__.Uint8ClampedBufferAttribute),\n/* harmony export */ \"Object3D\": () => (/* reexport safe */ _core_Object3D_js__WEBPACK_IMPORTED_MODULE_96__.Object3D),\n/* harmony export */ \"Raycaster\": () => (/* reexport safe */ _core_Raycaster_js__WEBPACK_IMPORTED_MODULE_97__.Raycaster),\n/* harmony export */ \"Layers\": () => (/* reexport safe */ _core_Layers_js__WEBPACK_IMPORTED_MODULE_98__.Layers),\n/* harmony export */ \"EventDispatcher\": () => (/* reexport safe */ _core_EventDispatcher_js__WEBPACK_IMPORTED_MODULE_99__.EventDispatcher),\n/* harmony export */ \"Clock\": () => (/* reexport safe */ _core_Clock_js__WEBPACK_IMPORTED_MODULE_100__.Clock),\n/* harmony export */ \"QuaternionLinearInterpolant\": () => (/* reexport safe */ _math_interpolants_QuaternionLinearInterpolant_js__WEBPACK_IMPORTED_MODULE_101__.QuaternionLinearInterpolant),\n/* harmony export */ \"LinearInterpolant\": () => (/* reexport safe */ _math_interpolants_LinearInterpolant_js__WEBPACK_IMPORTED_MODULE_102__.LinearInterpolant),\n/* harmony export */ \"DiscreteInterpolant\": () => (/* reexport safe */ _math_interpolants_DiscreteInterpolant_js__WEBPACK_IMPORTED_MODULE_103__.DiscreteInterpolant),\n/* harmony export */ \"CubicInterpolant\": () => (/* reexport safe */ _math_interpolants_CubicInterpolant_js__WEBPACK_IMPORTED_MODULE_104__.CubicInterpolant),\n/* harmony export */ \"Interpolant\": () => (/* reexport safe */ _math_Interpolant_js__WEBPACK_IMPORTED_MODULE_105__.Interpolant),\n/* harmony export */ \"Triangle\": () => (/* reexport safe */ _math_Triangle_js__WEBPACK_IMPORTED_MODULE_106__.Triangle),\n/* harmony export */ \"MathUtils\": () => (/* reexport safe */ _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_107__.MathUtils),\n/* harmony export */ \"Spherical\": () => (/* reexport safe */ _math_Spherical_js__WEBPACK_IMPORTED_MODULE_108__.Spherical),\n/* harmony export */ \"Cylindrical\": () => (/* reexport safe */ _math_Cylindrical_js__WEBPACK_IMPORTED_MODULE_109__.Cylindrical),\n/* harmony export */ \"Plane\": () => (/* reexport safe */ _math_Plane_js__WEBPACK_IMPORTED_MODULE_110__.Plane),\n/* harmony export */ \"Frustum\": () => (/* reexport safe */ _math_Frustum_js__WEBPACK_IMPORTED_MODULE_111__.Frustum),\n/* harmony export */ \"Sphere\": () => (/* reexport safe */ _math_Sphere_js__WEBPACK_IMPORTED_MODULE_112__.Sphere),\n/* harmony export */ \"Ray\": () => (/* reexport safe */ _math_Ray_js__WEBPACK_IMPORTED_MODULE_113__.Ray),\n/* harmony export */ \"Matrix4\": () => (/* reexport safe */ _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_114__.Matrix4),\n/* harmony export */ \"Matrix3\": () => (/* reexport safe */ _math_Matrix3_js__WEBPACK_IMPORTED_MODULE_115__.Matrix3),\n/* harmony export */ \"Box3\": () => (/* reexport safe */ _math_Box3_js__WEBPACK_IMPORTED_MODULE_116__.Box3),\n/* harmony export */ \"Box2\": () => (/* reexport safe */ _math_Box2_js__WEBPACK_IMPORTED_MODULE_117__.Box2),\n/* harmony export */ \"Line3\": () => (/* reexport safe */ _math_Line3_js__WEBPACK_IMPORTED_MODULE_118__.Line3),\n/* harmony export */ \"Euler\": () => (/* reexport safe */ _math_Euler_js__WEBPACK_IMPORTED_MODULE_119__.Euler),\n/* harmony export */ \"Vector4\": () => (/* reexport safe */ _math_Vector4_js__WEBPACK_IMPORTED_MODULE_120__.Vector4),\n/* harmony export */ \"Vector3\": () => (/* reexport safe */ _math_Vector3_js__WEBPACK_IMPORTED_MODULE_121__.Vector3),\n/* harmony export */ \"Vector2\": () => (/* reexport safe */ _math_Vector2_js__WEBPACK_IMPORTED_MODULE_122__.Vector2),\n/* harmony export */ \"Quaternion\": () => (/* reexport safe */ _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_123__.Quaternion),\n/* harmony export */ \"Color\": () => (/* reexport safe */ _math_Color_js__WEBPACK_IMPORTED_MODULE_124__.Color),\n/* harmony export */ \"SphericalHarmonics3\": () => (/* reexport safe */ _math_SphericalHarmonics3_js__WEBPACK_IMPORTED_MODULE_125__.SphericalHarmonics3),\n/* harmony export */ \"ImmediateRenderObject\": () => (/* reexport safe */ _extras_objects_ImmediateRenderObject_js__WEBPACK_IMPORTED_MODULE_126__.ImmediateRenderObject),\n/* harmony export */ \"SpotLightHelper\": () => (/* reexport safe */ _helpers_SpotLightHelper_js__WEBPACK_IMPORTED_MODULE_127__.SpotLightHelper),\n/* harmony export */ \"SkeletonHelper\": () => (/* reexport safe */ _helpers_SkeletonHelper_js__WEBPACK_IMPORTED_MODULE_128__.SkeletonHelper),\n/* harmony export */ \"PointLightHelper\": () => (/* reexport safe */ _helpers_PointLightHelper_js__WEBPACK_IMPORTED_MODULE_129__.PointLightHelper),\n/* harmony export */ \"HemisphereLightHelper\": () => (/* reexport safe */ _helpers_HemisphereLightHelper_js__WEBPACK_IMPORTED_MODULE_130__.HemisphereLightHelper),\n/* harmony export */ \"GridHelper\": () => (/* reexport safe */ _helpers_GridHelper_js__WEBPACK_IMPORTED_MODULE_131__.GridHelper),\n/* harmony export */ \"PolarGridHelper\": () => (/* reexport safe */ _helpers_PolarGridHelper_js__WEBPACK_IMPORTED_MODULE_132__.PolarGridHelper),\n/* harmony export */ \"DirectionalLightHelper\": () => (/* reexport safe */ _helpers_DirectionalLightHelper_js__WEBPACK_IMPORTED_MODULE_133__.DirectionalLightHelper),\n/* harmony export */ \"CameraHelper\": () => (/* reexport safe */ _helpers_CameraHelper_js__WEBPACK_IMPORTED_MODULE_134__.CameraHelper),\n/* harmony export */ \"BoxHelper\": () => (/* reexport safe */ _helpers_BoxHelper_js__WEBPACK_IMPORTED_MODULE_135__.BoxHelper),\n/* harmony export */ \"Box3Helper\": () => (/* reexport safe */ _helpers_Box3Helper_js__WEBPACK_IMPORTED_MODULE_136__.Box3Helper),\n/* harmony export */ \"PlaneHelper\": () => (/* reexport safe */ _helpers_PlaneHelper_js__WEBPACK_IMPORTED_MODULE_137__.PlaneHelper),\n/* harmony export */ \"ArrowHelper\": () => (/* reexport safe */ _helpers_ArrowHelper_js__WEBPACK_IMPORTED_MODULE_138__.ArrowHelper),\n/* harmony export */ \"AxesHelper\": () => (/* reexport safe */ _helpers_AxesHelper_js__WEBPACK_IMPORTED_MODULE_139__.AxesHelper),\n/* harmony export */ \"ArcCurve\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.ArcCurve),\n/* harmony export */ \"CatmullRomCurve3\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.CatmullRomCurve3),\n/* harmony export */ \"CubicBezierCurve\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.CubicBezierCurve),\n/* harmony export */ \"CubicBezierCurve3\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.CubicBezierCurve3),\n/* harmony export */ \"EllipseCurve\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.EllipseCurve),\n/* harmony export */ \"LineCurve\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.LineCurve),\n/* harmony export */ \"LineCurve3\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.LineCurve3),\n/* harmony export */ \"QuadraticBezierCurve\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.QuadraticBezierCurve),\n/* harmony export */ \"QuadraticBezierCurve3\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.QuadraticBezierCurve3),\n/* harmony export */ \"SplineCurve\": () => (/* reexport safe */ _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__.SplineCurve),\n/* harmony export */ \"Shape\": () => (/* reexport safe */ _extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_141__.Shape),\n/* harmony export */ \"Path\": () => (/* reexport safe */ _extras_core_Path_js__WEBPACK_IMPORTED_MODULE_142__.Path),\n/* harmony export */ \"ShapePath\": () => (/* reexport safe */ _extras_core_ShapePath_js__WEBPACK_IMPORTED_MODULE_143__.ShapePath),\n/* harmony export */ \"Font\": () => (/* reexport safe */ _extras_core_Font_js__WEBPACK_IMPORTED_MODULE_144__.Font),\n/* harmony export */ \"CurvePath\": () => (/* reexport safe */ _extras_core_CurvePath_js__WEBPACK_IMPORTED_MODULE_145__.CurvePath),\n/* harmony export */ \"Curve\": () => (/* reexport safe */ _extras_core_Curve_js__WEBPACK_IMPORTED_MODULE_146__.Curve),\n/* harmony export */ \"DataUtils\": () => (/* reexport safe */ _extras_DataUtils_js__WEBPACK_IMPORTED_MODULE_147__.DataUtils),\n/* harmony export */ \"ImageUtils\": () => (/* reexport safe */ _extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_148__.ImageUtils),\n/* harmony export */ \"ShapeUtils\": () => (/* reexport safe */ _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_149__.ShapeUtils),\n/* harmony export */ \"PMREMGenerator\": () => (/* reexport safe */ _extras_PMREMGenerator_js__WEBPACK_IMPORTED_MODULE_150__.PMREMGenerator),\n/* harmony export */ \"WebGLUtils\": () => (/* reexport safe */ _renderers_webgl_WebGLUtils_js__WEBPACK_IMPORTED_MODULE_151__.WebGLUtils),\n/* harmony export */ \"ACESFilmicToneMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ACESFilmicToneMapping),\n/* harmony export */ \"AddEquation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.AddEquation),\n/* harmony export */ \"AddOperation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.AddOperation),\n/* harmony export */ \"AdditiveAnimationBlendMode\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.AdditiveAnimationBlendMode),\n/* harmony export */ \"AdditiveBlending\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.AdditiveBlending),\n/* harmony export */ \"AlphaFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.AlphaFormat),\n/* harmony export */ \"AlwaysDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.AlwaysDepth),\n/* harmony export */ \"AlwaysStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.AlwaysStencilFunc),\n/* harmony export */ \"BackSide\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.BackSide),\n/* harmony export */ \"BasicDepthPacking\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.BasicDepthPacking),\n/* harmony export */ \"BasicShadowMap\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.BasicShadowMap),\n/* harmony export */ \"ByteType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ByteType),\n/* harmony export */ \"CineonToneMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CineonToneMapping),\n/* harmony export */ \"ClampToEdgeWrapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping),\n/* harmony export */ \"CubeReflectionMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeReflectionMapping),\n/* harmony export */ \"CubeRefractionMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeRefractionMapping),\n/* harmony export */ \"CubeUVReflectionMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeUVReflectionMapping),\n/* harmony export */ \"CubeUVRefractionMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeUVRefractionMapping),\n/* harmony export */ \"CullFaceBack\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CullFaceBack),\n/* harmony export */ \"CullFaceFront\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CullFaceFront),\n/* harmony export */ \"CullFaceFrontBack\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CullFaceFrontBack),\n/* harmony export */ \"CullFaceNone\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CullFaceNone),\n/* harmony export */ \"CustomBlending\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CustomBlending),\n/* harmony export */ \"CustomToneMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.CustomToneMapping),\n/* harmony export */ \"DecrementStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DecrementStencilOp),\n/* harmony export */ \"DecrementWrapStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DecrementWrapStencilOp),\n/* harmony export */ \"DepthFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DepthFormat),\n/* harmony export */ \"DepthStencilFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DepthStencilFormat),\n/* harmony export */ \"DoubleSide\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DoubleSide),\n/* harmony export */ \"DstAlphaFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DstAlphaFactor),\n/* harmony export */ \"DstColorFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DstColorFactor),\n/* harmony export */ \"DynamicCopyUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DynamicCopyUsage),\n/* harmony export */ \"DynamicDrawUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DynamicDrawUsage),\n/* harmony export */ \"DynamicReadUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.DynamicReadUsage),\n/* harmony export */ \"EqualDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.EqualDepth),\n/* harmony export */ \"EqualStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.EqualStencilFunc),\n/* harmony export */ \"EquirectangularReflectionMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.EquirectangularReflectionMapping),\n/* harmony export */ \"EquirectangularRefractionMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.EquirectangularRefractionMapping),\n/* harmony export */ \"FlatShading\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.FlatShading),\n/* harmony export */ \"FloatType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.FloatType),\n/* harmony export */ \"FrontSide\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.FrontSide),\n/* harmony export */ \"GLSL1\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GLSL1),\n/* harmony export */ \"GLSL3\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GLSL3),\n/* harmony export */ \"GammaEncoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GammaEncoding),\n/* harmony export */ \"GreaterDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GreaterDepth),\n/* harmony export */ \"GreaterEqualDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GreaterEqualDepth),\n/* harmony export */ \"GreaterEqualStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GreaterEqualStencilFunc),\n/* harmony export */ \"GreaterStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GreaterStencilFunc),\n/* harmony export */ \"HalfFloatType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.HalfFloatType),\n/* harmony export */ \"IncrementStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.IncrementStencilOp),\n/* harmony export */ \"IncrementWrapStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.IncrementWrapStencilOp),\n/* harmony export */ \"IntType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.IntType),\n/* harmony export */ \"InterpolateDiscrete\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateDiscrete),\n/* harmony export */ \"InterpolateLinear\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateLinear),\n/* harmony export */ \"InterpolateSmooth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateSmooth),\n/* harmony export */ \"InvertStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.InvertStencilOp),\n/* harmony export */ \"KeepStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.KeepStencilOp),\n/* harmony export */ \"LessDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LessDepth),\n/* harmony export */ \"LessEqualDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LessEqualDepth),\n/* harmony export */ \"LessEqualStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LessEqualStencilFunc),\n/* harmony export */ \"LessStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LessStencilFunc),\n/* harmony export */ \"LinearEncoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding),\n/* harmony export */ \"LinearFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter),\n/* harmony export */ \"LinearMipMapLinearFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearMipMapLinearFilter),\n/* harmony export */ \"LinearMipMapNearestFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearMipMapNearestFilter),\n/* harmony export */ \"LinearMipmapLinearFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapLinearFilter),\n/* harmony export */ \"LinearMipmapNearestFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapNearestFilter),\n/* harmony export */ \"LinearToneMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearToneMapping),\n/* harmony export */ \"LogLuvEncoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LogLuvEncoding),\n/* harmony export */ \"LoopOnce\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LoopOnce),\n/* harmony export */ \"LoopPingPong\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LoopPingPong),\n/* harmony export */ \"LoopRepeat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LoopRepeat),\n/* harmony export */ \"LuminanceAlphaFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LuminanceAlphaFormat),\n/* harmony export */ \"LuminanceFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LuminanceFormat),\n/* harmony export */ \"MOUSE\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.MOUSE),\n/* harmony export */ \"MaxEquation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.MaxEquation),\n/* harmony export */ \"MinEquation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.MinEquation),\n/* harmony export */ \"MirroredRepeatWrapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.MirroredRepeatWrapping),\n/* harmony export */ \"MixOperation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.MixOperation),\n/* harmony export */ \"MultiplyBlending\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.MultiplyBlending),\n/* harmony export */ \"MultiplyOperation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.MultiplyOperation),\n/* harmony export */ \"NearestFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestFilter),\n/* harmony export */ \"NearestMipMapLinearFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestMipMapLinearFilter),\n/* harmony export */ \"NearestMipMapNearestFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestMipMapNearestFilter),\n/* harmony export */ \"NearestMipmapLinearFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestMipmapLinearFilter),\n/* harmony export */ \"NearestMipmapNearestFilter\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestMipmapNearestFilter),\n/* harmony export */ \"NeverDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NeverDepth),\n/* harmony export */ \"NeverStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NeverStencilFunc),\n/* harmony export */ \"NoBlending\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NoBlending),\n/* harmony export */ \"NoToneMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NoToneMapping),\n/* harmony export */ \"NormalAnimationBlendMode\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NormalAnimationBlendMode),\n/* harmony export */ \"NormalBlending\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NormalBlending),\n/* harmony export */ \"NotEqualDepth\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NotEqualDepth),\n/* harmony export */ \"NotEqualStencilFunc\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.NotEqualStencilFunc),\n/* harmony export */ \"ObjectSpaceNormalMap\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ObjectSpaceNormalMap),\n/* harmony export */ \"OneFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.OneFactor),\n/* harmony export */ \"OneMinusDstAlphaFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.OneMinusDstAlphaFactor),\n/* harmony export */ \"OneMinusDstColorFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.OneMinusDstColorFactor),\n/* harmony export */ \"OneMinusSrcAlphaFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.OneMinusSrcAlphaFactor),\n/* harmony export */ \"OneMinusSrcColorFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.OneMinusSrcColorFactor),\n/* harmony export */ \"PCFShadowMap\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.PCFShadowMap),\n/* harmony export */ \"PCFSoftShadowMap\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.PCFSoftShadowMap),\n/* harmony export */ \"REVISION\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.REVISION),\n/* harmony export */ \"RGBADepthPacking\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBADepthPacking),\n/* harmony export */ \"RGBAFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBAFormat),\n/* harmony export */ \"RGBAIntegerFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBAIntegerFormat),\n/* harmony export */ \"RGBA_ASTC_10x10_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_10x10_Format),\n/* harmony export */ \"RGBA_ASTC_10x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_10x5_Format),\n/* harmony export */ \"RGBA_ASTC_10x6_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_10x6_Format),\n/* harmony export */ \"RGBA_ASTC_10x8_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_10x8_Format),\n/* harmony export */ \"RGBA_ASTC_12x10_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_12x10_Format),\n/* harmony export */ \"RGBA_ASTC_12x12_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_12x12_Format),\n/* harmony export */ \"RGBA_ASTC_4x4_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_4x4_Format),\n/* harmony export */ \"RGBA_ASTC_5x4_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_5x4_Format),\n/* harmony export */ \"RGBA_ASTC_5x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_5x5_Format),\n/* harmony export */ \"RGBA_ASTC_6x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_6x5_Format),\n/* harmony export */ \"RGBA_ASTC_6x6_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_6x6_Format),\n/* harmony export */ \"RGBA_ASTC_8x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_8x5_Format),\n/* harmony export */ \"RGBA_ASTC_8x6_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_8x6_Format),\n/* harmony export */ \"RGBA_ASTC_8x8_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ASTC_8x8_Format),\n/* harmony export */ \"RGBA_BPTC_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_BPTC_Format),\n/* harmony export */ \"RGBA_ETC2_EAC_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_ETC2_EAC_Format),\n/* harmony export */ \"RGBA_PVRTC_2BPPV1_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_PVRTC_2BPPV1_Format),\n/* harmony export */ \"RGBA_PVRTC_4BPPV1_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_PVRTC_4BPPV1_Format),\n/* harmony export */ \"RGBA_S3TC_DXT1_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_S3TC_DXT1_Format),\n/* harmony export */ \"RGBA_S3TC_DXT3_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_S3TC_DXT3_Format),\n/* harmony export */ \"RGBA_S3TC_DXT5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBA_S3TC_DXT5_Format),\n/* harmony export */ \"RGBDEncoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBDEncoding),\n/* harmony export */ \"RGBEEncoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBEEncoding),\n/* harmony export */ \"RGBEFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBEFormat),\n/* harmony export */ \"RGBFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBFormat),\n/* harmony export */ \"RGBIntegerFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBIntegerFormat),\n/* harmony export */ \"RGBM16Encoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBM16Encoding),\n/* harmony export */ \"RGBM7Encoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBM7Encoding),\n/* harmony export */ \"RGB_ETC1_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGB_ETC1_Format),\n/* harmony export */ \"RGB_ETC2_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGB_ETC2_Format),\n/* harmony export */ \"RGB_PVRTC_2BPPV1_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGB_PVRTC_2BPPV1_Format),\n/* harmony export */ \"RGB_PVRTC_4BPPV1_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGB_PVRTC_4BPPV1_Format),\n/* harmony export */ \"RGB_S3TC_DXT1_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGB_S3TC_DXT1_Format),\n/* harmony export */ \"RGFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGFormat),\n/* harmony export */ \"RGIntegerFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGIntegerFormat),\n/* harmony export */ \"RedFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RedFormat),\n/* harmony export */ \"RedIntegerFormat\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RedIntegerFormat),\n/* harmony export */ \"ReinhardToneMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ReinhardToneMapping),\n/* harmony export */ \"RepeatWrapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping),\n/* harmony export */ \"ReplaceStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ReplaceStencilOp),\n/* harmony export */ \"ReverseSubtractEquation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ReverseSubtractEquation),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_10x10_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_10x10_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_10x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_10x5_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_10x6_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_10x6_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_10x8_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_10x8_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_12x10_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_12x10_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_12x12_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_12x12_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_4x4_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_4x4_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_5x4_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_5x4_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_5x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_5x5_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_6x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_6x5_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_6x6_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_6x6_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_8x5_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_8x5_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_8x6_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_8x6_Format),\n/* harmony export */ \"SRGB8_ALPHA8_ASTC_8x8_Format\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SRGB8_ALPHA8_ASTC_8x8_Format),\n/* harmony export */ \"ShortType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ShortType),\n/* harmony export */ \"SmoothShading\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SmoothShading),\n/* harmony export */ \"SrcAlphaFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SrcAlphaFactor),\n/* harmony export */ \"SrcAlphaSaturateFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SrcAlphaSaturateFactor),\n/* harmony export */ \"SrcColorFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SrcColorFactor),\n/* harmony export */ \"StaticCopyUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.StaticCopyUsage),\n/* harmony export */ \"StaticDrawUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.StaticDrawUsage),\n/* harmony export */ \"StaticReadUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.StaticReadUsage),\n/* harmony export */ \"StreamCopyUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.StreamCopyUsage),\n/* harmony export */ \"StreamDrawUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.StreamDrawUsage),\n/* harmony export */ \"StreamReadUsage\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.StreamReadUsage),\n/* harmony export */ \"SubtractEquation\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SubtractEquation),\n/* harmony export */ \"SubtractiveBlending\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.SubtractiveBlending),\n/* harmony export */ \"TOUCH\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.TOUCH),\n/* harmony export */ \"TangentSpaceNormalMap\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.TangentSpaceNormalMap),\n/* harmony export */ \"TriangleFanDrawMode\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.TriangleFanDrawMode),\n/* harmony export */ \"TriangleStripDrawMode\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.TriangleStripDrawMode),\n/* harmony export */ \"TrianglesDrawMode\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.TrianglesDrawMode),\n/* harmony export */ \"UVMapping\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UVMapping),\n/* harmony export */ \"UnsignedByteType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedByteType),\n/* harmony export */ \"UnsignedInt248Type\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedInt248Type),\n/* harmony export */ \"UnsignedIntType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedIntType),\n/* harmony export */ \"UnsignedShort4444Type\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedShort4444Type),\n/* harmony export */ \"UnsignedShort5551Type\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedShort5551Type),\n/* harmony export */ \"UnsignedShort565Type\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedShort565Type),\n/* harmony export */ \"UnsignedShortType\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedShortType),\n/* harmony export */ \"VSMShadowMap\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.VSMShadowMap),\n/* harmony export */ \"WrapAroundEnding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.WrapAroundEnding),\n/* harmony export */ \"ZeroCurvatureEnding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroCurvatureEnding),\n/* harmony export */ \"ZeroFactor\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroFactor),\n/* harmony export */ \"ZeroSlopeEnding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroSlopeEnding),\n/* harmony export */ \"ZeroStencilOp\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroStencilOp),\n/* harmony export */ \"sRGBEncoding\": () => (/* reexport safe */ _constants_js__WEBPACK_IMPORTED_MODULE_0__.sRGBEncoding),\n/* harmony export */ \"AxisHelper\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.AxisHelper),\n/* harmony export */ \"BinaryTextureLoader\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.BinaryTextureLoader),\n/* harmony export */ \"BoundingBoxHelper\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.BoundingBoxHelper),\n/* harmony export */ \"CanvasRenderer\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.CanvasRenderer),\n/* harmony export */ \"DynamicBufferAttribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.DynamicBufferAttribute),\n/* harmony export */ \"EdgesHelper\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.EdgesHelper),\n/* harmony export */ \"FaceColors\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.FaceColors),\n/* harmony export */ \"Float32Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Float32Attribute),\n/* harmony export */ \"Float64Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Float64Attribute),\n/* harmony export */ \"Int16Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Int16Attribute),\n/* harmony export */ \"Int32Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Int32Attribute),\n/* harmony export */ \"Int8Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Int8Attribute),\n/* harmony export */ \"JSONLoader\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.JSONLoader),\n/* harmony export */ \"LensFlare\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.LensFlare),\n/* harmony export */ \"LinePieces\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.LinePieces),\n/* harmony export */ \"LineStrip\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.LineStrip),\n/* harmony export */ \"Math\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Math),\n/* harmony export */ \"MeshFaceMaterial\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.MeshFaceMaterial),\n/* harmony export */ \"MultiMaterial\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.MultiMaterial),\n/* harmony export */ \"NoColors\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.NoColors),\n/* harmony export */ \"Particle\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Particle),\n/* harmony export */ \"ParticleBasicMaterial\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.ParticleBasicMaterial),\n/* harmony export */ \"ParticleSystem\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.ParticleSystem),\n/* harmony export */ \"ParticleSystemMaterial\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.ParticleSystemMaterial),\n/* harmony export */ \"PointCloud\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.PointCloud),\n/* harmony export */ \"PointCloudMaterial\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.PointCloudMaterial),\n/* harmony export */ \"SceneUtils\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.SceneUtils),\n/* harmony export */ \"Uint16Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Uint16Attribute),\n/* harmony export */ \"Uint32Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Uint32Attribute),\n/* harmony export */ \"Uint8Attribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Uint8Attribute),\n/* harmony export */ \"Uint8ClampedAttribute\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Uint8ClampedAttribute),\n/* harmony export */ \"Vertex\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.Vertex),\n/* harmony export */ \"VertexColors\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.VertexColors),\n/* harmony export */ \"WebGLRenderTargetCube\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.WebGLRenderTargetCube),\n/* harmony export */ \"WireframeHelper\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.WireframeHelper),\n/* harmony export */ \"XHRLoader\": () => (/* reexport safe */ _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__.XHRLoader)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _renderers_WebGLMultisampleRenderTarget_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./renderers/WebGLMultisampleRenderTarget.js */ \"./node_modules/three/src/renderers/WebGLMultisampleRenderTarget.js\");\n/* harmony import */ var _renderers_WebGLCubeRenderTarget_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderers/WebGLCubeRenderTarget.js */ \"./node_modules/three/src/renderers/WebGLCubeRenderTarget.js\");\n/* harmony import */ var _renderers_WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./renderers/WebGLRenderTarget.js */ \"./node_modules/three/src/renderers/WebGLRenderTarget.js\");\n/* harmony import */ var _renderers_WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./renderers/WebGLRenderer.js */ \"./node_modules/three/src/renderers/WebGLRenderer.js\");\n/* harmony import */ var _renderers_WebGL1Renderer_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./renderers/WebGL1Renderer.js */ \"./node_modules/three/src/renderers/WebGL1Renderer.js\");\n/* harmony import */ var _renderers_shaders_ShaderLib_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./renderers/shaders/ShaderLib.js */ \"./node_modules/three/src/renderers/shaders/ShaderLib.js\");\n/* harmony import */ var _renderers_shaders_UniformsLib_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./renderers/shaders/UniformsLib.js */ \"./node_modules/three/src/renderers/shaders/UniformsLib.js\");\n/* harmony import */ var _renderers_shaders_UniformsUtils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./renderers/shaders/UniformsUtils.js */ \"./node_modules/three/src/renderers/shaders/UniformsUtils.js\");\n/* harmony import */ var _renderers_shaders_ShaderChunk_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./renderers/shaders/ShaderChunk.js */ \"./node_modules/three/src/renderers/shaders/ShaderChunk.js\");\n/* harmony import */ var _scenes_FogExp2_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./scenes/FogExp2.js */ \"./node_modules/three/src/scenes/FogExp2.js\");\n/* harmony import */ var _scenes_Fog_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./scenes/Fog.js */ \"./node_modules/three/src/scenes/Fog.js\");\n/* harmony import */ var _scenes_Scene_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./scenes/Scene.js */ \"./node_modules/three/src/scenes/Scene.js\");\n/* harmony import */ var _objects_Sprite_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./objects/Sprite.js */ \"./node_modules/three/src/objects/Sprite.js\");\n/* harmony import */ var _objects_LOD_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./objects/LOD.js */ \"./node_modules/three/src/objects/LOD.js\");\n/* harmony import */ var _objects_SkinnedMesh_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./objects/SkinnedMesh.js */ \"./node_modules/three/src/objects/SkinnedMesh.js\");\n/* harmony import */ var _objects_Skeleton_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./objects/Skeleton.js */ \"./node_modules/three/src/objects/Skeleton.js\");\n/* harmony import */ var _objects_Bone_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./objects/Bone.js */ \"./node_modules/three/src/objects/Bone.js\");\n/* harmony import */ var _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./objects/Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _objects_InstancedMesh_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./objects/InstancedMesh.js */ \"./node_modules/three/src/objects/InstancedMesh.js\");\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _objects_LineLoop_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./objects/LineLoop.js */ \"./node_modules/three/src/objects/LineLoop.js\");\n/* harmony import */ var _objects_Line_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./objects/Line.js */ \"./node_modules/three/src/objects/Line.js\");\n/* harmony import */ var _objects_Points_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./objects/Points.js */ \"./node_modules/three/src/objects/Points.js\");\n/* harmony import */ var _objects_Group_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./objects/Group.js */ \"./node_modules/three/src/objects/Group.js\");\n/* harmony import */ var _textures_VideoTexture_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./textures/VideoTexture.js */ \"./node_modules/three/src/textures/VideoTexture.js\");\n/* harmony import */ var _textures_DataTexture_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./textures/DataTexture.js */ \"./node_modules/three/src/textures/DataTexture.js\");\n/* harmony import */ var _textures_DataTexture2DArray_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./textures/DataTexture2DArray.js */ \"./node_modules/three/src/textures/DataTexture2DArray.js\");\n/* harmony import */ var _textures_DataTexture3D_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./textures/DataTexture3D.js */ \"./node_modules/three/src/textures/DataTexture3D.js\");\n/* harmony import */ var _textures_CompressedTexture_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./textures/CompressedTexture.js */ \"./node_modules/three/src/textures/CompressedTexture.js\");\n/* harmony import */ var _textures_CubeTexture_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./textures/CubeTexture.js */ \"./node_modules/three/src/textures/CubeTexture.js\");\n/* harmony import */ var _textures_CanvasTexture_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./textures/CanvasTexture.js */ \"./node_modules/three/src/textures/CanvasTexture.js\");\n/* harmony import */ var _textures_DepthTexture_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./textures/DepthTexture.js */ \"./node_modules/three/src/textures/DepthTexture.js\");\n/* harmony import */ var _textures_Texture_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./textures/Texture.js */ \"./node_modules/three/src/textures/Texture.js\");\n/* harmony import */ var _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./geometries/Geometries.js */ \"./node_modules/three/src/geometries/Geometries.js\");\n/* harmony import */ var _materials_Materials_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./materials/Materials.js */ \"./node_modules/three/src/materials/Materials.js\");\n/* harmony import */ var _loaders_AnimationLoader_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./loaders/AnimationLoader.js */ \"./node_modules/three/src/loaders/AnimationLoader.js\");\n/* harmony import */ var _loaders_CompressedTextureLoader_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./loaders/CompressedTextureLoader.js */ \"./node_modules/three/src/loaders/CompressedTextureLoader.js\");\n/* harmony import */ var _loaders_CubeTextureLoader_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./loaders/CubeTextureLoader.js */ \"./node_modules/three/src/loaders/CubeTextureLoader.js\");\n/* harmony import */ var _loaders_DataTextureLoader_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./loaders/DataTextureLoader.js */ \"./node_modules/three/src/loaders/DataTextureLoader.js\");\n/* harmony import */ var _loaders_TextureLoader_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./loaders/TextureLoader.js */ \"./node_modules/three/src/loaders/TextureLoader.js\");\n/* harmony import */ var _loaders_ObjectLoader_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./loaders/ObjectLoader.js */ \"./node_modules/three/src/loaders/ObjectLoader.js\");\n/* harmony import */ var _loaders_MaterialLoader_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./loaders/MaterialLoader.js */ \"./node_modules/three/src/loaders/MaterialLoader.js\");\n/* harmony import */ var _loaders_BufferGeometryLoader_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./loaders/BufferGeometryLoader.js */ \"./node_modules/three/src/loaders/BufferGeometryLoader.js\");\n/* harmony import */ var _loaders_LoadingManager_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./loaders/LoadingManager.js */ \"./node_modules/three/src/loaders/LoadingManager.js\");\n/* harmony import */ var _loaders_ImageLoader_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./loaders/ImageLoader.js */ \"./node_modules/three/src/loaders/ImageLoader.js\");\n/* harmony import */ var _loaders_ImageBitmapLoader_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./loaders/ImageBitmapLoader.js */ \"./node_modules/three/src/loaders/ImageBitmapLoader.js\");\n/* harmony import */ var _loaders_FontLoader_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./loaders/FontLoader.js */ \"./node_modules/three/src/loaders/FontLoader.js\");\n/* harmony import */ var _loaders_FileLoader_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./loaders/FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _loaders_Loader_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./loaders/Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n/* harmony import */ var _loaders_LoaderUtils_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./loaders/LoaderUtils.js */ \"./node_modules/three/src/loaders/LoaderUtils.js\");\n/* harmony import */ var _loaders_Cache_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./loaders/Cache.js */ \"./node_modules/three/src/loaders/Cache.js\");\n/* harmony import */ var _loaders_AudioLoader_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./loaders/AudioLoader.js */ \"./node_modules/three/src/loaders/AudioLoader.js\");\n/* harmony import */ var _lights_SpotLight_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./lights/SpotLight.js */ \"./node_modules/three/src/lights/SpotLight.js\");\n/* harmony import */ var _lights_PointLight_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./lights/PointLight.js */ \"./node_modules/three/src/lights/PointLight.js\");\n/* harmony import */ var _lights_RectAreaLight_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./lights/RectAreaLight.js */ \"./node_modules/three/src/lights/RectAreaLight.js\");\n/* harmony import */ var _lights_HemisphereLight_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./lights/HemisphereLight.js */ \"./node_modules/three/src/lights/HemisphereLight.js\");\n/* harmony import */ var _lights_HemisphereLightProbe_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./lights/HemisphereLightProbe.js */ \"./node_modules/three/src/lights/HemisphereLightProbe.js\");\n/* harmony import */ var _lights_DirectionalLight_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./lights/DirectionalLight.js */ \"./node_modules/three/src/lights/DirectionalLight.js\");\n/* harmony import */ var _lights_AmbientLight_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./lights/AmbientLight.js */ \"./node_modules/three/src/lights/AmbientLight.js\");\n/* harmony import */ var _lights_AmbientLightProbe_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./lights/AmbientLightProbe.js */ \"./node_modules/three/src/lights/AmbientLightProbe.js\");\n/* harmony import */ var _lights_Light_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./lights/Light.js */ \"./node_modules/three/src/lights/Light.js\");\n/* harmony import */ var _lights_LightProbe_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./lights/LightProbe.js */ \"./node_modules/three/src/lights/LightProbe.js\");\n/* harmony import */ var _cameras_StereoCamera_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./cameras/StereoCamera.js */ \"./node_modules/three/src/cameras/StereoCamera.js\");\n/* harmony import */ var _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./cameras/PerspectiveCamera.js */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n/* harmony import */ var _cameras_OrthographicCamera_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./cameras/OrthographicCamera.js */ \"./node_modules/three/src/cameras/OrthographicCamera.js\");\n/* harmony import */ var _cameras_CubeCamera_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./cameras/CubeCamera.js */ \"./node_modules/three/src/cameras/CubeCamera.js\");\n/* harmony import */ var _cameras_ArrayCamera_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./cameras/ArrayCamera.js */ \"./node_modules/three/src/cameras/ArrayCamera.js\");\n/* harmony import */ var _cameras_Camera_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./cameras/Camera.js */ \"./node_modules/three/src/cameras/Camera.js\");\n/* harmony import */ var _audio_AudioListener_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./audio/AudioListener.js */ \"./node_modules/three/src/audio/AudioListener.js\");\n/* harmony import */ var _audio_PositionalAudio_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./audio/PositionalAudio.js */ \"./node_modules/three/src/audio/PositionalAudio.js\");\n/* harmony import */ var _audio_AudioContext_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./audio/AudioContext.js */ \"./node_modules/three/src/audio/AudioContext.js\");\n/* harmony import */ var _audio_AudioAnalyser_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./audio/AudioAnalyser.js */ \"./node_modules/three/src/audio/AudioAnalyser.js\");\n/* harmony import */ var _audio_Audio_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./audio/Audio.js */ \"./node_modules/three/src/audio/Audio.js\");\n/* harmony import */ var _animation_tracks_VectorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./animation/tracks/VectorKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/VectorKeyframeTrack.js\");\n/* harmony import */ var _animation_tracks_StringKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(/*! ./animation/tracks/StringKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/StringKeyframeTrack.js\");\n/* harmony import */ var _animation_tracks_QuaternionKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(/*! ./animation/tracks/QuaternionKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js\");\n/* harmony import */ var _animation_tracks_NumberKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(/*! ./animation/tracks/NumberKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/NumberKeyframeTrack.js\");\n/* harmony import */ var _animation_tracks_ColorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(/*! ./animation/tracks/ColorKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/ColorKeyframeTrack.js\");\n/* harmony import */ var _animation_tracks_BooleanKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(/*! ./animation/tracks/BooleanKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js\");\n/* harmony import */ var _animation_PropertyMixer_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(/*! ./animation/PropertyMixer.js */ \"./node_modules/three/src/animation/PropertyMixer.js\");\n/* harmony import */ var _animation_PropertyBinding_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(/*! ./animation/PropertyBinding.js */ \"./node_modules/three/src/animation/PropertyBinding.js\");\n/* harmony import */ var _animation_KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(/*! ./animation/KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n/* harmony import */ var _animation_AnimationUtils_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(/*! ./animation/AnimationUtils.js */ \"./node_modules/three/src/animation/AnimationUtils.js\");\n/* harmony import */ var _animation_AnimationObjectGroup_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(/*! ./animation/AnimationObjectGroup.js */ \"./node_modules/three/src/animation/AnimationObjectGroup.js\");\n/* harmony import */ var _animation_AnimationMixer_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(/*! ./animation/AnimationMixer.js */ \"./node_modules/three/src/animation/AnimationMixer.js\");\n/* harmony import */ var _animation_AnimationClip_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(/*! ./animation/AnimationClip.js */ \"./node_modules/three/src/animation/AnimationClip.js\");\n/* harmony import */ var _core_Uniform_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(/*! ./core/Uniform.js */ \"./node_modules/three/src/core/Uniform.js\");\n/* harmony import */ var _core_InstancedBufferGeometry_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(/*! ./core/InstancedBufferGeometry.js */ \"./node_modules/three/src/core/InstancedBufferGeometry.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(/*! ./core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(/*! ./core/InterleavedBufferAttribute.js */ \"./node_modules/three/src/core/InterleavedBufferAttribute.js\");\n/* harmony import */ var _core_InstancedInterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(/*! ./core/InstancedInterleavedBuffer.js */ \"./node_modules/three/src/core/InstancedInterleavedBuffer.js\");\n/* harmony import */ var _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(/*! ./core/InterleavedBuffer.js */ \"./node_modules/three/src/core/InterleavedBuffer.js\");\n/* harmony import */ var _core_InstancedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(/*! ./core/InstancedBufferAttribute.js */ \"./node_modules/three/src/core/InstancedBufferAttribute.js\");\n/* harmony import */ var _core_GLBufferAttribute_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(/*! ./core/GLBufferAttribute.js */ \"./node_modules/three/src/core/GLBufferAttribute.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(/*! ./core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(/*! ./core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _core_Raycaster_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(/*! ./core/Raycaster.js */ \"./node_modules/three/src/core/Raycaster.js\");\n/* harmony import */ var _core_Layers_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(/*! ./core/Layers.js */ \"./node_modules/three/src/core/Layers.js\");\n/* harmony import */ var _core_EventDispatcher_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(/*! ./core/EventDispatcher.js */ \"./node_modules/three/src/core/EventDispatcher.js\");\n/* harmony import */ var _core_Clock_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(/*! ./core/Clock.js */ \"./node_modules/three/src/core/Clock.js\");\n/* harmony import */ var _math_interpolants_QuaternionLinearInterpolant_js__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(/*! ./math/interpolants/QuaternionLinearInterpolant.js */ \"./node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js\");\n/* harmony import */ var _math_interpolants_LinearInterpolant_js__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(/*! ./math/interpolants/LinearInterpolant.js */ \"./node_modules/three/src/math/interpolants/LinearInterpolant.js\");\n/* harmony import */ var _math_interpolants_DiscreteInterpolant_js__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(/*! ./math/interpolants/DiscreteInterpolant.js */ \"./node_modules/three/src/math/interpolants/DiscreteInterpolant.js\");\n/* harmony import */ var _math_interpolants_CubicInterpolant_js__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(/*! ./math/interpolants/CubicInterpolant.js */ \"./node_modules/three/src/math/interpolants/CubicInterpolant.js\");\n/* harmony import */ var _math_Interpolant_js__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(/*! ./math/Interpolant.js */ \"./node_modules/three/src/math/Interpolant.js\");\n/* harmony import */ var _math_Triangle_js__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(/*! ./math/Triangle.js */ \"./node_modules/three/src/math/Triangle.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(/*! ./math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _math_Spherical_js__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(/*! ./math/Spherical.js */ \"./node_modules/three/src/math/Spherical.js\");\n/* harmony import */ var _math_Cylindrical_js__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(/*! ./math/Cylindrical.js */ \"./node_modules/three/src/math/Cylindrical.js\");\n/* harmony import */ var _math_Plane_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(/*! ./math/Plane.js */ \"./node_modules/three/src/math/Plane.js\");\n/* harmony import */ var _math_Frustum_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(/*! ./math/Frustum.js */ \"./node_modules/three/src/math/Frustum.js\");\n/* harmony import */ var _math_Sphere_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(/*! ./math/Sphere.js */ \"./node_modules/three/src/math/Sphere.js\");\n/* harmony import */ var _math_Ray_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(/*! ./math/Ray.js */ \"./node_modules/three/src/math/Ray.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(/*! ./math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _math_Matrix3_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(/*! ./math/Matrix3.js */ \"./node_modules/three/src/math/Matrix3.js\");\n/* harmony import */ var _math_Box3_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(/*! ./math/Box3.js */ \"./node_modules/three/src/math/Box3.js\");\n/* harmony import */ var _math_Box2_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(/*! ./math/Box2.js */ \"./node_modules/three/src/math/Box2.js\");\n/* harmony import */ var _math_Line3_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(/*! ./math/Line3.js */ \"./node_modules/three/src/math/Line3.js\");\n/* harmony import */ var _math_Euler_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(/*! ./math/Euler.js */ \"./node_modules/three/src/math/Euler.js\");\n/* harmony import */ var _math_Vector4_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(/*! ./math/Vector4.js */ \"./node_modules/three/src/math/Vector4.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(/*! ./math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(/*! ./math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(/*! ./math/Quaternion.js */ \"./node_modules/three/src/math/Quaternion.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(/*! ./math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _math_SphericalHarmonics3_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(/*! ./math/SphericalHarmonics3.js */ \"./node_modules/three/src/math/SphericalHarmonics3.js\");\n/* harmony import */ var _extras_objects_ImmediateRenderObject_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(/*! ./extras/objects/ImmediateRenderObject.js */ \"./node_modules/three/src/extras/objects/ImmediateRenderObject.js\");\n/* harmony import */ var _helpers_SpotLightHelper_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(/*! ./helpers/SpotLightHelper.js */ \"./node_modules/three/src/helpers/SpotLightHelper.js\");\n/* harmony import */ var _helpers_SkeletonHelper_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(/*! ./helpers/SkeletonHelper.js */ \"./node_modules/three/src/helpers/SkeletonHelper.js\");\n/* harmony import */ var _helpers_PointLightHelper_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(/*! ./helpers/PointLightHelper.js */ \"./node_modules/three/src/helpers/PointLightHelper.js\");\n/* harmony import */ var _helpers_HemisphereLightHelper_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(/*! ./helpers/HemisphereLightHelper.js */ \"./node_modules/three/src/helpers/HemisphereLightHelper.js\");\n/* harmony import */ var _helpers_GridHelper_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(/*! ./helpers/GridHelper.js */ \"./node_modules/three/src/helpers/GridHelper.js\");\n/* harmony import */ var _helpers_PolarGridHelper_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(/*! ./helpers/PolarGridHelper.js */ \"./node_modules/three/src/helpers/PolarGridHelper.js\");\n/* harmony import */ var _helpers_DirectionalLightHelper_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(/*! ./helpers/DirectionalLightHelper.js */ \"./node_modules/three/src/helpers/DirectionalLightHelper.js\");\n/* harmony import */ var _helpers_CameraHelper_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(/*! ./helpers/CameraHelper.js */ \"./node_modules/three/src/helpers/CameraHelper.js\");\n/* harmony import */ var _helpers_BoxHelper_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(/*! ./helpers/BoxHelper.js */ \"./node_modules/three/src/helpers/BoxHelper.js\");\n/* harmony import */ var _helpers_Box3Helper_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(/*! ./helpers/Box3Helper.js */ \"./node_modules/three/src/helpers/Box3Helper.js\");\n/* harmony import */ var _helpers_PlaneHelper_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(/*! ./helpers/PlaneHelper.js */ \"./node_modules/three/src/helpers/PlaneHelper.js\");\n/* harmony import */ var _helpers_ArrowHelper_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(/*! ./helpers/ArrowHelper.js */ \"./node_modules/three/src/helpers/ArrowHelper.js\");\n/* harmony import */ var _helpers_AxesHelper_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(/*! ./helpers/AxesHelper.js */ \"./node_modules/three/src/helpers/AxesHelper.js\");\n/* harmony import */ var _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(/*! ./extras/curves/Curves.js */ \"./node_modules/three/src/extras/curves/Curves.js\");\n/* harmony import */ var _extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(/*! ./extras/core/Shape.js */ \"./node_modules/three/src/extras/core/Shape.js\");\n/* harmony import */ var _extras_core_Path_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(/*! ./extras/core/Path.js */ \"./node_modules/three/src/extras/core/Path.js\");\n/* harmony import */ var _extras_core_ShapePath_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(/*! ./extras/core/ShapePath.js */ \"./node_modules/three/src/extras/core/ShapePath.js\");\n/* harmony import */ var _extras_core_Font_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(/*! ./extras/core/Font.js */ \"./node_modules/three/src/extras/core/Font.js\");\n/* harmony import */ var _extras_core_CurvePath_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(/*! ./extras/core/CurvePath.js */ \"./node_modules/three/src/extras/core/CurvePath.js\");\n/* harmony import */ var _extras_core_Curve_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(/*! ./extras/core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _extras_DataUtils_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(/*! ./extras/DataUtils.js */ \"./node_modules/three/src/extras/DataUtils.js\");\n/* harmony import */ var _extras_ImageUtils_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(/*! ./extras/ImageUtils.js */ \"./node_modules/three/src/extras/ImageUtils.js\");\n/* harmony import */ var _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(/*! ./extras/ShapeUtils.js */ \"./node_modules/three/src/extras/ShapeUtils.js\");\n/* harmony import */ var _extras_PMREMGenerator_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(/*! ./extras/PMREMGenerator.js */ \"./node_modules/three/src/extras/PMREMGenerator.js\");\n/* harmony import */ var _renderers_webgl_WebGLUtils_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(/*! ./renderers/webgl/WebGLUtils.js */ \"./node_modules/three/src/renderers/webgl/WebGLUtils.js\");\n/* harmony import */ var _Three_Legacy_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(/*! ./Three.Legacy.js */ \"./node_modules/three/src/Three.Legacy.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nif ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {\n\n\t/* eslint-disable no-undef */\n\t__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {\n\t\trevision: _constants_js__WEBPACK_IMPORTED_MODULE_0__.REVISION,\n\t} } ) );\n\t/* eslint-enable no-undef */\n\n}\n\nif ( typeof window !== 'undefined' ) {\n\n\tif ( window.__THREE__ ) {\n\n\t\tconsole.warn( 'WARNING: Multiple instances of Three.js being imported.' );\n\n\t} else {\n\n\t\twindow.__THREE__ = _constants_js__WEBPACK_IMPORTED_MODULE_0__.REVISION;\n\n\t}\n\n}\n\n\n//# sourceURL=webpack:///./node_modules/three/src/Three.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/AnimationAction.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/animation/AnimationAction.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AnimationAction\": () => (/* binding */ AnimationAction)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n\n\n\nclass AnimationAction {\n\n\tconstructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot;\n\t\tthis.blendMode = blendMode;\n\n\t\tconst tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tconst interpolantSettings = {\n\t\t\tendingStart: _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroCurvatureEnding,\n\t\t\tendingEnd: _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants; // bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null; // for the memory manager\n\t\tthis._byClipCacheIndex = null; // for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = _constants_js__WEBPACK_IMPORTED_MODULE_0__.LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; // no. of repetitions when looping\n\n\t\tthis.paused = false; // true -> zero effective time scale\n\t\tthis.enabled = true; // false -> zero effective weight\n\n\t\tthis.clampWhenFinished = false;// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart = true;// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd = true;// clips for start, loop and end\n\n\t}\n\n\t// State & Scheduling\n\n\tplay() {\n\n\t\tthis._mixer._activateAction( this );\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tthis._mixer._deactivateAction( this );\n\n\t\treturn this.reset();\n\n\t}\n\n\treset() {\n\n\t\tthis.paused = false;\n\t\tthis.enabled = true;\n\n\t\tthis.time = 0; // restart clip\n\t\tthis._loopCount = - 1;// forget previous loops\n\t\tthis._startTime = null;// forget scheduling\n\n\t\treturn this.stopFading().stopWarping();\n\n\t}\n\n\tisRunning() {\n\n\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t}\n\n\t// return true when play has been called\n\tisScheduled() {\n\n\t\treturn this._mixer._isActiveAction( this );\n\n\t}\n\n\tstartAt( time ) {\n\n\t\tthis._startTime = time;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoop( mode, repetitions ) {\n\n\t\tthis.loop = mode;\n\t\tthis.repetitions = repetitions;\n\n\t\treturn this;\n\n\t}\n\n\t// Weight\n\n\t// set the weight stopping any scheduled fading\n\t// although .enabled = false yields an effective weight of zero, this\n\t// method does *not* change .enabled, because it would be confusing\n\tsetEffectiveWeight( weight ) {\n\n\t\tthis.weight = weight;\n\n\t\t// note: same logic as when updated at runtime\n\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\treturn this.stopFading();\n\n\t}\n\n\t// return the weight considering fading and .enabled\n\tgetEffectiveWeight() {\n\n\t\treturn this._effectiveWeight;\n\n\t}\n\n\tfadeIn( duration ) {\n\n\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t}\n\n\tfadeOut( duration ) {\n\n\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t}\n\n\tcrossFadeFrom( fadeOutAction, duration, warp ) {\n\n\t\tfadeOutAction.fadeOut( duration );\n\t\tthis.fadeIn( duration );\n\n\t\tif ( warp ) {\n\n\t\t\tconst fadeInDuration = this._clip.duration,\n\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tcrossFadeTo( fadeInAction, duration, warp ) {\n\n\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t}\n\n\tstopFading() {\n\n\t\tconst weightInterpolant = this._weightInterpolant;\n\n\t\tif ( weightInterpolant !== null ) {\n\n\t\t\tthis._weightInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Time Scale Control\n\n\t// set the time scale stopping any scheduled warping\n\t// although .paused = true yields an effective time scale of zero, this\n\t// method does *not* change .paused, because it would be confusing\n\tsetEffectiveTimeScale( timeScale ) {\n\n\t\tthis.timeScale = timeScale;\n\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\t// return the time scale considering warping and .paused\n\tgetEffectiveTimeScale() {\n\n\t\treturn this._effectiveTimeScale;\n\n\t}\n\n\tsetDuration( duration ) {\n\n\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\tsyncWith( action ) {\n\n\t\tthis.time = action.time;\n\t\tthis.timeScale = action.timeScale;\n\n\t\treturn this.stopWarping();\n\n\t}\n\n\thalt( duration ) {\n\n\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t}\n\n\twarp( startTimeScale, endTimeScale, duration ) {\n\n\t\tconst mixer = this._mixer,\n\t\t\tnow = mixer.time,\n\t\t\ttimeScale = this.timeScale;\n\n\t\tlet interpolant = this._timeScaleInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\ttimes[ 1 ] = now + duration;\n\n\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\treturn this;\n\n\t}\n\n\tstopWarping() {\n\n\t\tconst timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\tthis._timeScaleInterpolant = null;\n\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Object Accessors\n\n\tgetMixer() {\n\n\t\treturn this._mixer;\n\n\t}\n\n\tgetClip() {\n\n\t\treturn this._clip;\n\n\t}\n\n\tgetRoot() {\n\n\t\treturn this._localRoot || this._mixer._root;\n\n\t}\n\n\t// Interna\n\n\t_update( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t// called by the mixer\n\n\t\tif ( ! this.enabled ) {\n\n\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\tthis._updateWeight( time );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst startTime = this._startTime;\n\n\t\tif ( startTime !== null ) {\n\n\t\t\t// check for scheduled start of action\n\n\t\t\tconst timeRunning = ( time - startTime ) * timeDirection;\n\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t}\n\n\t\t\t// start\n\n\t\t\tthis._startTime = null; // unschedule\n\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t}\n\n\t\t// apply time scale and advance time\n\n\t\tdeltaTime *= this._updateTimeScale( time );\n\t\tconst clipTime = this._updateTime( deltaTime );\n\n\t\t// note: _updateTime may disable the action resulting in\n\t\t// an effective weight of 0\n\n\t\tconst weight = this._updateWeight( time );\n\n\t\tif ( weight > 0 ) {\n\n\t\t\tconst interpolants = this._interpolants;\n\t\t\tconst propertyMixers = this._propertyBindings;\n\n\t\t\tswitch ( this.blendMode ) {\n\n\t\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.AdditiveAnimationBlendMode:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulateAdditive( weight );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.NormalAnimationBlendMode:\n\t\t\t\tdefault:\n\n\t\t\t\t\tfor ( let j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_updateWeight( time ) {\n\n\t\tlet weight = 0;\n\n\t\tif ( this.enabled ) {\n\n\t\t\tweight = this.weight;\n\t\t\tconst interpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\tthis.enabled = false;\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\tthis._effectiveWeight = weight;\n\t\treturn weight;\n\n\t}\n\n\t_updateTimeScale( time ) {\n\n\t\tlet timeScale = 0;\n\n\t\tif ( ! this.paused ) {\n\n\t\t\ttimeScale = this.timeScale;\n\n\t\t\tconst interpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\tconst interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\tthis.timeScale = timeScale;\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\tthis._effectiveTimeScale = timeScale;\n\t\treturn timeScale;\n\n\t}\n\n\t_updateTime( deltaTime ) {\n\n\t\tconst duration = this._clip.duration;\n\t\tconst loop = this.loop;\n\n\t\tlet time = this.time + deltaTime;\n\t\tlet loopCount = this._loopCount;\n\n\t\tconst pingPong = ( loop === _constants_js__WEBPACK_IMPORTED_MODULE_0__.LoopPingPong );\n\n\t\tif ( deltaTime === 0 ) {\n\n\t\t\tif ( loopCount === - 1 ) return time;\n\n\t\t\treturn ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;\n\n\t\t}\n\n\t\tif ( loop === _constants_js__WEBPACK_IMPORTED_MODULE_0__.LoopOnce ) {\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tthis._loopCount = 0;\n\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t}\n\n\t\t\thandle_stop: {\n\n\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\ttime = duration;\n\n\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\ttime = 0;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tbreak handle_stop;\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\telse this.enabled = false;\n\n\t\t\t\tthis.time = time;\n\n\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t// just started\n\n\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t// wrap around\n\n\t\t\t\tconst loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\tconst pending = this.repetitions - loopCount;\n\n\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// keep running\n\n\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\tconst atStart = deltaTime < 0;\n\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\tthis.time = time;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.time = time;\n\n\t\t\t}\n\n\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\treturn duration - time;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn time;\n\n\t}\n\n\t_setEndings( atStart, atEnd, pingPong ) {\n\n\t\tconst settings = this._interpolantSettings;\n\n\t\tif ( pingPong ) {\n\n\t\t\tsettings.endingStart = _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroSlopeEnding;\n\t\t\tsettings.endingEnd = _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroSlopeEnding;\n\n\t\t} else {\n\n\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\tif ( atStart ) {\n\n\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroSlopeEnding : _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingStart = _constants_js__WEBPACK_IMPORTED_MODULE_0__.WrapAroundEnding;\n\n\t\t\t}\n\n\t\t\tif ( atEnd ) {\n\n\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroSlopeEnding : _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroCurvatureEnding;\n\n\t\t\t} else {\n\n\t\t\t\tsettings.endingEnd \t = _constants_js__WEBPACK_IMPORTED_MODULE_0__.WrapAroundEnding;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_scheduleFading( duration, weightNow, weightThen ) {\n\n\t\tconst mixer = this._mixer, now = mixer.time;\n\t\tlet interpolant = this._weightInterpolant;\n\n\t\tif ( interpolant === null ) {\n\n\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t}\n\n\t\tconst times = interpolant.parameterPositions,\n\t\t\tvalues = interpolant.sampleValues;\n\n\t\ttimes[ 0 ] = now;\n\t\tvalues[ 0 ] = weightNow;\n\t\ttimes[ 1 ] = now + duration;\n\t\tvalues[ 1 ] = weightThen;\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/AnimationAction.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/AnimationClip.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/animation/AnimationClip.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AnimationClip\": () => (/* binding */ AnimationClip)\n/* harmony export */ });\n/* harmony import */ var _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AnimationUtils.js */ \"./node_modules/three/src/animation/AnimationUtils.js\");\n/* harmony import */ var _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n/* harmony import */ var _tracks_BooleanKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tracks/BooleanKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js\");\n/* harmony import */ var _tracks_ColorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tracks/ColorKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/ColorKeyframeTrack.js\");\n/* harmony import */ var _tracks_NumberKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tracks/NumberKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/NumberKeyframeTrack.js\");\n/* harmony import */ var _tracks_QuaternionKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tracks/QuaternionKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js\");\n/* harmony import */ var _tracks_StringKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tracks/StringKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/StringKeyframeTrack.js\");\n/* harmony import */ var _tracks_VectorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tracks/VectorKeyframeTrack.js */ \"./node_modules/three/src/animation/tracks/VectorKeyframeTrack.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n\n\n\n\n\n\n\n\n\n\n\nclass AnimationClip {\n\n\tconstructor( name, duration = - 1, tracks, blendMode = _constants_js__WEBPACK_IMPORTED_MODULE_9__.NormalAnimationBlendMode ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = duration;\n\t\tthis.blendMode = blendMode;\n\n\t\tthis.uuid = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_8__.MathUtils.generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t}\n\n\n\tstatic parse( json ) {\n\n\t\tconst tracks = [],\n\t\t\tjsonTracks = json.tracks,\n\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\tfor ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t}\n\n\t\tconst clip = new this( json.name, json.duration, tracks, json.blendMode );\n\t\tclip.uuid = json.uuid;\n\n\t\treturn clip;\n\n\t}\n\n\tstatic toJSON( clip ) {\n\n\t\tconst tracks = [],\n\t\t\tclipTracks = clip.tracks;\n\n\t\tconst json = {\n\n\t\t\t'name': clip.name,\n\t\t\t'duration': clip.duration,\n\t\t\t'tracks': tracks,\n\t\t\t'uuid': clip.uuid,\n\t\t\t'blendMode': clip.blendMode\n\n\t\t};\n\n\t\tfor ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\ttracks.push( _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__.KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t}\n\n\t\treturn json;\n\n\t}\n\n\tstatic CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {\n\n\t\tconst numMorphTargets = morphTargetSequence.length;\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\tlet times = [];\n\t\t\tlet values = [];\n\n\t\t\ttimes.push(\n\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\ti,\n\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\tconst order = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_0__.AnimationUtils.getKeyframeOrder( times );\n\t\t\ttimes = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_0__.AnimationUtils.sortedArray( times, 1, order );\n\t\t\tvalues = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_0__.AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t// last frame as well for perfect loop.\n\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t}\n\n\t\t\ttracks.push(\n\t\t\t\tnew _tracks_NumberKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_4__.NumberKeyframeTrack(\n\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\ttimes, values\n\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t}\n\n\t\treturn new this( name, - 1, tracks );\n\n\t}\n\n\tstatic findByName( objectOrClipArray, name ) {\n\n\t\tlet clipArray = objectOrClipArray;\n\n\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\tconst o = objectOrClipArray;\n\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t}\n\n\t\tfor ( let i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\treturn clipArray[ i ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\tstatic CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {\n\n\t\tconst animationToMorphTargets = {};\n\n\t\t// tested with https://regex101.com/ on trick sequences\n\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\tconst pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t// sort morph target names into animation groups based\n\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\tfor ( let i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\tconst morphTarget = morphTargets[ i ];\n\t\t\tconst parts = morphTarget.name.match( pattern );\n\n\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\tconst name = parts[ 1 ];\n\n\t\t\t\tlet animationMorphTargets = animationToMorphTargets[ name ];\n\n\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t}\n\n\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst clips = [];\n\n\t\tfor ( const name in animationToMorphTargets ) {\n\n\t\t\tclips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t}\n\n\t\treturn clips;\n\n\t}\n\n\t// parse the animation.hierarchy format\n\tstatic parseAnimation( animation, bones ) {\n\n\t\tif ( ! animation ) {\n\n\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t// only return track if there are actually keys.\n\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\tconst times = [];\n\t\t\t\tconst values = [];\n\n\t\t\t\t_AnimationUtils_js__WEBPACK_IMPORTED_MODULE_0__.AnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tconst tracks = [];\n\n\t\tconst clipName = animation.name || 'default';\n\t\tconst fps = animation.fps || 30;\n\t\tconst blendMode = animation.blendMode;\n\n\t\t// automatic length determination in AnimationClip.\n\t\tlet duration = animation.length || - 1;\n\n\t\tconst hierarchyTracks = animation.hierarchy || [];\n\n\t\tfor ( let h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\tconst animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t// skip empty tracks\n\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t// process morph targets\n\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\tconst morphTargetNames = {};\n\n\t\t\t\tlet k;\n\n\t\t\t\tfor ( k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\tfor ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\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\t// create a track for each morph target with all zero\n\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t// the morphTarget is named.\n\t\t\t\tfor ( const morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\tconst times = [];\n\t\t\t\t\tconst values = [];\n\n\t\t\t\t\tfor ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\tconst animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttracks.push( new _tracks_NumberKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_4__.NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t}\n\n\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t} else {\n\n\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\tconst boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t_tracks_VectorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_7__.VectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t_tracks_QuaternionKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_5__.QuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t_tracks_VectorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_7__.VectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tracks.length === 0 ) {\n\n\t\t\treturn null;\n\n\t\t}\n\n\t\tconst clip = new this( clipName, duration, tracks, blendMode );\n\n\t\treturn clip;\n\n\t}\n\n\tresetDuration() {\n\n\t\tconst tracks = this.tracks;\n\t\tlet duration = 0;\n\n\t\tfor ( let i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\tconst track = this.tracks[ i ];\n\n\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t}\n\n\t\tthis.duration = duration;\n\n\t\treturn this;\n\n\t}\n\n\ttrim() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tvalid = valid && this.tracks[ i ].validate();\n\n\t\t}\n\n\t\treturn valid;\n\n\t}\n\n\toptimize() {\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\tthis.tracks[ i ].optimize();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\ttracks.push( this.tracks[ i ].clone() );\n\n\t\t}\n\n\t\treturn new this.constructor( this.name, this.duration, tracks, this.blendMode );\n\n\t}\n\n\ttoJSON() {\n\n\t\treturn this.constructor.toJSON( this );\n\n\t}\n\n}\n\nfunction getTrackTypeForValueTypeName( typeName ) {\n\n\tswitch ( typeName.toLowerCase() ) {\n\n\t\tcase 'scalar':\n\t\tcase 'double':\n\t\tcase 'float':\n\t\tcase 'number':\n\t\tcase 'integer':\n\n\t\t\treturn _tracks_NumberKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_4__.NumberKeyframeTrack;\n\n\t\tcase 'vector':\n\t\tcase 'vector2':\n\t\tcase 'vector3':\n\t\tcase 'vector4':\n\n\t\t\treturn _tracks_VectorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_7__.VectorKeyframeTrack;\n\n\t\tcase 'color':\n\n\t\t\treturn _tracks_ColorKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_3__.ColorKeyframeTrack;\n\n\t\tcase 'quaternion':\n\n\t\t\treturn _tracks_QuaternionKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_5__.QuaternionKeyframeTrack;\n\n\t\tcase 'bool':\n\t\tcase 'boolean':\n\n\t\t\treturn _tracks_BooleanKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_2__.BooleanKeyframeTrack;\n\n\t\tcase 'string':\n\n\t\t\treturn _tracks_StringKeyframeTrack_js__WEBPACK_IMPORTED_MODULE_6__.StringKeyframeTrack;\n\n\t}\n\n\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n}\n\nfunction parseKeyframeTrack( json ) {\n\n\tif ( json.type === undefined ) {\n\n\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t}\n\n\tconst trackType = getTrackTypeForValueTypeName( json.type );\n\n\tif ( json.times === undefined ) {\n\n\t\tconst times = [], values = [];\n\n\t\t_AnimationUtils_js__WEBPACK_IMPORTED_MODULE_0__.AnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\tjson.times = times;\n\t\tjson.values = values;\n\n\t}\n\n\t// derived classes can define a static parse method\n\tif ( trackType.parse !== undefined ) {\n\n\t\treturn trackType.parse( json );\n\n\t} else {\n\n\t\t// by default, we assume a constructor compatible with the base\n\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/AnimationClip.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/AnimationMixer.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/animation/AnimationMixer.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AnimationMixer\": () => (/* binding */ AnimationMixer)\n/* harmony export */ });\n/* harmony import */ var _AnimationAction_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AnimationAction.js */ \"./node_modules/three/src/animation/AnimationAction.js\");\n/* harmony import */ var _core_EventDispatcher_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/EventDispatcher.js */ \"./node_modules/three/src/core/EventDispatcher.js\");\n/* harmony import */ var _math_interpolants_LinearInterpolant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/interpolants/LinearInterpolant.js */ \"./node_modules/three/src/math/interpolants/LinearInterpolant.js\");\n/* harmony import */ var _PropertyBinding_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./PropertyBinding.js */ \"./node_modules/three/src/animation/PropertyBinding.js\");\n/* harmony import */ var _PropertyMixer_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./PropertyMixer.js */ \"./node_modules/three/src/animation/PropertyMixer.js\");\n/* harmony import */ var _AnimationClip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./AnimationClip.js */ \"./node_modules/three/src/animation/AnimationClip.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n\n\n\n\n\n\n\n\nclass AnimationMixer extends _core_EventDispatcher_js__WEBPACK_IMPORTED_MODULE_1__.EventDispatcher {\n\n\tconstructor( root ) {\n\n\t\tsuper();\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\t\tthis.time = 0;\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\t_bindAction( action, prototypeAction ) {\n\n\t\tconst root = action._localRoot || this._root,\n\t\t\ttracks = action._clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tbindings = action._propertyBindings,\n\t\t\tinterpolants = action._interpolants,\n\t\t\trootUuid = root.uuid,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName;\n\n\t\tlet bindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingsByName === undefined ) {\n\n\t\t\tbindingsByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t}\n\n\t\tfor ( let i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tconst track = tracks[ i ],\n\t\t\t\ttrackName = track.name;\n\n\t\t\tlet binding = bindingsByName[ trackName ];\n\n\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t} else {\n\n\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tconst path = prototypeAction && prototypeAction.\n\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\tbinding = new _PropertyMixer_js__WEBPACK_IMPORTED_MODULE_4__.PropertyMixer(\n\t\t\t\t\t_PropertyBinding_js__WEBPACK_IMPORTED_MODULE_3__.PropertyBinding.create( root, trackName, path ),\n\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t++ binding.referenceCount;\n\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t}\n\n\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t}\n\n\t}\n\n\t_activateAction( action ) {\n\n\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\tconst rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\tthis._bindAction( action,\n\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t}\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// increment reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._lendAction( action );\n\n\t\t}\n\n\t}\n\n\t_deactivateAction( action ) {\n\n\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\tconst bindings = action._propertyBindings;\n\n\t\t\t// decrement reference counts / sort out state\n\t\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tconst binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._takeBackAction( action );\n\n\t\t}\n\n\t}\n\n\t// Memory manager\n\n\t_initMemoryManager() {\n\n\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\tthis._nActiveActions = 0;\n\n\t\tthis._actionsByClip = {};\n\t\t// inside:\n\t\t// {\n\t\t// \tknownActions: Array< AnimationAction > - used as prototypes\n\t\t// \tactionByRoot: AnimationAction - lookup\n\t\t// }\n\n\n\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\tthis._nActiveBindings = 0;\n\n\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\tthis._controlInterpolants = []; // same game as above\n\t\tthis._nActiveControlInterpolants = 0;\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tactions: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tbindings: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tcontrolInterpolants: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t// Memory management for AnimationAction objects\n\n\t_isActiveAction( action ) {\n\n\t\tconst index = action._cacheIndex;\n\t\treturn index !== null && index < this._nActiveActions;\n\n\t}\n\n\t_addInactiveAction( action, clipUuid, rootUuid ) {\n\n\t\tconst actions = this._actions,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tlet actionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip === undefined ) {\n\n\t\t\tactionsForClip = {\n\n\t\t\t\tknownActions: [ action ],\n\t\t\t\tactionByRoot: {}\n\n\t\t\t};\n\n\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t} else {\n\n\t\t\tconst knownActions = actionsForClip.knownActions;\n\n\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\tknownActions.push( action );\n\n\t\t}\n\n\t\taction._cacheIndex = actions.length;\n\t\tactions.push( action );\n\n\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t}\n\n\t_removeInactiveAction( action ) {\n\n\t\tconst actions = this._actions,\n\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\tcacheIndex = action._cacheIndex;\n\n\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\tactions.pop();\n\n\t\taction._cacheIndex = null;\n\n\n\t\tconst clipUuid = action._clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\tlastKnownAction =\n\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\tknownActionsForClip.pop();\n\n\t\taction._byClipCacheIndex = null;\n\n\n\t\tconst actionByRoot = actionsForClip.actionByRoot,\n\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\tdelete actionByRoot[ rootUuid ];\n\n\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t\tthis._removeInactiveBindingsForAction( action );\n\n\t}\n\n\t_removeInactiveBindingsForAction( action ) {\n\n\t\tconst bindings = action._propertyBindings;\n\n\t\tfor ( let i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tconst binding = bindings[ i ];\n\n\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_lendAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions >| inactive actions ]\n\t\t// s a\n\t\t// <-swap->\n\t\t// a s\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\taction._cacheIndex = lastActiveIndex;\n\t\tactions[ lastActiveIndex ] = action;\n\n\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t}\n\n\t_takeBackAction( action ) {\n\n\t\t// [ active actions | inactive actions ]\n\t\t// [ active actions |< inactive actions ]\n\t\t// a s\n\t\t// <-swap->\n\t\t// s a\n\n\t\tconst actions = this._actions,\n\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\taction._cacheIndex = firstInactiveIndex;\n\t\tactions[ firstInactiveIndex ] = action;\n\n\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t}\n\n\t// Memory management for PropertyMixer objects\n\n\t_addInactiveBinding( binding, rootUuid, trackName ) {\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindings = this._bindings;\n\n\t\tlet bindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName === undefined ) {\n\n\t\t\tbindingByName = {};\n\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t}\n\n\t\tbindingByName[ trackName ] = binding;\n\n\t\tbinding._cacheIndex = bindings.length;\n\t\tbindings.push( binding );\n\n\t}\n\n\t_removeInactiveBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tpropBinding = binding.binding,\n\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\ttrackName = propBinding.path,\n\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\tbindings.pop();\n\n\t\tdelete bindingByName[ trackName ];\n\n\t\tif ( Object.keys( bindingByName ).length === 0 ) {\n\n\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t}\n\n\t}\n\n\t_lendBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\tbinding._cacheIndex = lastActiveIndex;\n\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t}\n\n\t_takeBackBinding( binding ) {\n\n\t\tconst bindings = this._bindings,\n\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t}\n\n\n\t// Memory management of Interpolants for weight and time scale\n\n\t_lendControlInterpolant() {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++;\n\n\t\tlet interpolant = interpolants[ lastActiveIndex ];\n\n\t\tif ( interpolant === undefined ) {\n\n\t\t\tinterpolant = new _math_interpolants_LinearInterpolant_js__WEBPACK_IMPORTED_MODULE_2__.LinearInterpolant(\n\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t}\n\n\t\treturn interpolant;\n\n\t}\n\n\t_takeBackControlInterpolant( interpolant ) {\n\n\t\tconst interpolants = this._controlInterpolants,\n\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t}\n\n\t// return an action for a clip optionally using a custom root target\n\t// object (this method allocates a lot of dynamic memory in case a\n\t// previously unknown clip/root combination is specified)\n\tclipAction( clip, optionalRoot, blendMode ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid;\n\n\t\tlet clipObject = typeof clip === 'string' ? _AnimationClip_js__WEBPACK_IMPORTED_MODULE_5__.AnimationClip.findByName( root, clip ) : clip;\n\n\t\tconst clipUuid = clipObject !== null ? clipObject.uuid : clip;\n\n\t\tconst actionsForClip = this._actionsByClip[ clipUuid ];\n\t\tlet prototypeAction = null;\n\n\t\tif ( blendMode === undefined ) {\n\n\t\t\tif ( clipObject !== null ) {\n\n\t\t\t\tblendMode = clipObject.blendMode;\n\n\t\t\t} else {\n\n\t\t\t\tblendMode = _constants_js__WEBPACK_IMPORTED_MODULE_6__.NormalAnimationBlendMode;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\tconst existingAction = actionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\tif ( existingAction !== undefined && existingAction.blendMode === blendMode ) {\n\n\t\t\t\treturn existingAction;\n\n\t\t\t}\n\n\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t// the bindings again but can just copy\n\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t// also, take the clip from the prototype action\n\t\t\tif ( clipObject === null )\n\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t}\n\n\t\t// clip must be known when specified via string\n\t\tif ( clipObject === null ) return null;\n\n\t\t// allocate all resources required to run it\n\t\tconst newAction = new _AnimationAction_js__WEBPACK_IMPORTED_MODULE_0__.AnimationAction( this, clipObject, optionalRoot, blendMode );\n\n\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t// and make the action known to the memory manager\n\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\treturn newAction;\n\n\t}\n\n\t// get an existing action\n\texistingAction( clip, optionalRoot ) {\n\n\t\tconst root = optionalRoot || this._root,\n\t\t\trootUuid = root.uuid,\n\n\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\t_AnimationClip_js__WEBPACK_IMPORTED_MODULE_5__.AnimationClip.findByName( root, clip ) : clip,\n\n\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\t// deactivates all previously scheduled actions\n\tstopAllAction() {\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions;\n\n\t\tfor ( let i = nActions - 1; i >= 0; -- i ) {\n\n\t\t\tactions[ i ].stop();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// advance the time and update apply the animation\n\tupdate( deltaTime ) {\n\n\t\tdeltaTime *= this.timeScale;\n\n\t\tconst actions = this._actions,\n\t\t\tnActions = this._nActiveActions,\n\n\t\t\ttime = this.time += deltaTime,\n\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t// run active actions\n\n\t\tfor ( let i = 0; i !== nActions; ++ i ) {\n\n\t\t\tconst action = actions[ i ];\n\n\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t}\n\n\t\t// update scene graph\n\n\t\tconst bindings = this._bindings,\n\t\t\tnBindings = this._nActiveBindings;\n\n\t\tfor ( let i = 0; i !== nBindings; ++ i ) {\n\n\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// Allows you to seek to a specific time in an animation.\n\tsetTime( timeInSeconds ) {\n\n\t\tthis.time = 0; // Zero out time attribute for AnimationMixer object;\n\t\tfor ( let i = 0; i < this._actions.length; i ++ ) {\n\n\t\t\tthis._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.\n\n\t\t}\n\n\t\treturn this.update( timeInSeconds ); // Update used to set exact time. Returns \"this\" AnimationMixer object.\n\n\t}\n\n\t// return this mixer's root target object\n\tgetRoot() {\n\n\t\treturn this._root;\n\n\t}\n\n\t// free all resources specific to a particular clip\n\tuncacheClip( clip ) {\n\n\t\tconst actions = this._actions,\n\t\t\tclipUuid = clip.uuid,\n\t\t\tactionsByClip = this._actionsByClip,\n\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t// iteration state and also require updating the state we can\n\t\t\t// just throw away\n\n\t\t\tconst actionsToRemove = actionsForClip.knownActions;\n\n\t\t\tfor ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\tconst action = actionsToRemove[ i ];\n\n\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\tconst cacheIndex = action._cacheIndex,\n\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\taction._cacheIndex = null;\n\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\tactions.pop();\n\n\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t}\n\n\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t}\n\n\t}\n\n\t// free all resources specific to a particular root target object\n\tuncacheRoot( root ) {\n\n\t\tconst rootUuid = root.uuid,\n\t\t\tactionsByClip = this._actionsByClip;\n\n\t\tfor ( const clipUuid in actionsByClip ) {\n\n\t\t\tconst actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\tif ( action !== undefined ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst bindingsByRoot = this._bindingsByRootAndName,\n\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\tif ( bindingByName !== undefined ) {\n\n\t\t\tfor ( const trackName in bindingByName ) {\n\n\t\t\t\tconst binding = bindingByName[ trackName ];\n\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remove a targeted clip from the cache\n\tuncacheAction( clip, optionalRoot ) {\n\n\t\tconst action = this.existingAction( clip, optionalRoot );\n\n\t\tif ( action !== null ) {\n\n\t\t\tthis._deactivateAction( action );\n\t\t\tthis._removeInactiveAction( action );\n\n\t\t}\n\n\t}\n\n}\n\nAnimationMixer.prototype._controlInterpolantsResultBuffer = new Float32Array( 1 );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/AnimationMixer.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/AnimationObjectGroup.js": +/*!******************************************************************!*\ + !*** ./node_modules/three/src/animation/AnimationObjectGroup.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AnimationObjectGroup\": () => (/* binding */ AnimationObjectGroup)\n/* harmony export */ });\n/* harmony import */ var _PropertyBinding_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PropertyBinding.js */ \"./node_modules/three/src/animation/PropertyBinding.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n\n\n\n/**\n *\n * A group of objects that receives a shared animation state.\n *\n * Usage:\n *\n * - Add objects you would otherwise pass as 'root' to the\n * constructor or the .clipAction method of AnimationMixer.\n *\n * - Instead pass this object as 'root'.\n *\n * - You can also add and remove objects later when the mixer\n * is running.\n *\n * Note:\n *\n * Objects of this class appear as one object to the mixer,\n * so cache control of the individual objects must be done\n * on the group.\n *\n * Limitation:\n *\n * - The animated properties must be compatible among the\n * all objects in the group.\n *\n * - A single property can either be controlled through a\n * target group or directly, but not both.\n */\n\nclass AnimationObjectGroup {\n\n\tconstructor() {\n\n\t\tthis.uuid = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__.MathUtils.generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0; // threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tconst indices = {};\n\t\tthis._indicesByUUID = indices; // for bookkeeping\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = []; // inside: string\n\t\tthis._parsedPaths = []; // inside: { we don't care, here }\n\t\tthis._bindings = []; // inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; // inside: indices in these arrays\n\n\t\tconst scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tadd() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tpaths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet knownObject = undefined,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid;\n\t\t\tlet index = indicesByUUID[ uuid ];\n\n\t\t\tif ( index === undefined ) {\n\n\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\tindex = nObjects ++;\n\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\tobjects.push( object );\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tbindings[ j ].push( new _PropertyBinding_js__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t}\n\n\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ];\n\n\t\t\t\t\tlet binding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\tbinding = new _PropertyBinding_js__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t} // else the object is already where we want it to be\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\tremove() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\tconst lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// remove & forget\n\tuncache() {\n\n\t\tconst objects = this._objects,\n\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\tbindings = this._bindings,\n\t\t\tnBindings = bindings.length;\n\n\t\tlet nCachedObjects = this.nCachedObjects_,\n\t\t\tnObjects = objects.length;\n\n\t\tfor ( let i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tconst object = arguments[ i ],\n\t\t\t\tuuid = object.uuid,\n\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\tconst firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\tconst lastIndex = -- nObjects,\n\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( let j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tconst bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t}\n\n\t\t\t\t} // cached or active\n\n\t\t\t} // if object is known\n\n\t\t} // for arguments\n\n\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t}\n\n\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\tsubscribe_( path, parsedPath ) {\n\n\t\t// returns an array of bindings for the given path that is changed\n\t\t// according to the contained objects in the group\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath;\n\t\tlet index = indicesByPath[ path ];\n\t\tconst bindings = this._bindings;\n\n\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\tconst paths = this._paths,\n\t\t\tparsedPaths = this._parsedPaths,\n\t\t\tobjects = this._objects,\n\t\t\tnObjects = objects.length,\n\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\tindex = bindings.length;\n\n\t\tindicesByPath[ path ] = index;\n\n\t\tpaths.push( path );\n\t\tparsedPaths.push( parsedPath );\n\t\tbindings.push( bindingsForPath );\n\n\t\tfor ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\tconst object = objects[ i ];\n\t\t\tbindingsForPath[ i ] = new _PropertyBinding_js__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding( object, path, parsedPath );\n\n\t\t}\n\n\t\treturn bindingsForPath;\n\n\t}\n\n\tunsubscribe_( path ) {\n\n\t\t// tells the group to forget about a property path and no longer\n\t\t// update the array previously obtained with 'subscribe_'\n\n\t\tconst indicesByPath = this._bindingsIndicesByPath,\n\t\t\tindex = indicesByPath[ path ];\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\tbindings[ index ] = lastBindings;\n\t\t\tbindings.pop();\n\n\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\tparsedPaths.pop();\n\n\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\tpaths.pop();\n\n\t\t}\n\n\t}\n\n}\n\nAnimationObjectGroup.prototype.isAnimationObjectGroup = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/AnimationObjectGroup.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/AnimationUtils.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/animation/AnimationUtils.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AnimationUtils\": () => (/* binding */ AnimationUtils)\n/* harmony export */ });\n/* harmony import */ var _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Quaternion.js */ \"./node_modules/three/src/math/Quaternion.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n\n\n\nconst AnimationUtils = {\n\n\t// same as Array.prototype.slice, but also works on typed arrays\n\tarraySlice: function ( array, from, to ) {\n\n\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t}\n\n\t\treturn array.slice( from, to );\n\n\t},\n\n\t// converts an array to a specific type\n\tconvertArray: function ( array, type, forceClone ) {\n\n\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\treturn new type( array ); // create typed array\n\n\t\t}\n\n\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t},\n\n\tisTypedArray: function ( object ) {\n\n\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t! ( object instanceof DataView );\n\n\t},\n\n\t// returns an array by which times and values can be sorted\n\tgetKeyframeOrder: function ( times ) {\n\n\t\tfunction compareTime( i, j ) {\n\n\t\t\treturn times[ i ] - times[ j ];\n\n\t\t}\n\n\t\tconst n = times.length;\n\t\tconst result = new Array( n );\n\t\tfor ( let i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\tresult.sort( compareTime );\n\n\t\treturn result;\n\n\t},\n\n\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\tsortedArray: function ( values, stride, order ) {\n\n\t\tconst nValues = values.length;\n\t\tconst result = new values.constructor( nValues );\n\n\t\tfor ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\tconst srcOffset = order[ i ] * stride;\n\n\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// function for parsing AOS keyframe formats\n\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\tlet i = 1, key = jsonKeys[ 0 ];\n\n\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t}\n\n\t\tif ( key === undefined ) return; // no data\n\n\t\tlet value = key[ valuePropertyName ];\n\t\tif ( value === undefined ) return; // no data\n\n\t\tif ( Array.isArray( value ) ) {\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t// ...assume THREE.Math-ish\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t} else {\n\n\t\t\t// otherwise push as-is\n\n\t\t\tdo {\n\n\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t}\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t} while ( key !== undefined );\n\n\t\t}\n\n\t},\n\n\tsubclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) {\n\n\t\tconst clip = sourceClip.clone();\n\n\t\tclip.name = name;\n\n\t\tconst tracks = [];\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tconst track = clip.tracks[ i ];\n\t\t\tconst valueSize = track.getValueSize();\n\n\t\t\tconst times = [];\n\t\t\tconst values = [];\n\n\t\t\tfor ( let j = 0; j < track.times.length; ++ j ) {\n\n\t\t\t\tconst frame = track.times[ j ] * fps;\n\n\t\t\t\tif ( frame < startFrame || frame >= endFrame ) continue;\n\n\t\t\t\ttimes.push( track.times[ j ] );\n\n\t\t\t\tfor ( let k = 0; k < valueSize; ++ k ) {\n\n\t\t\t\t\tvalues.push( track.values[ j * valueSize + k ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( times.length === 0 ) continue;\n\n\t\t\ttrack.times = AnimationUtils.convertArray( times, track.times.constructor );\n\t\t\ttrack.values = AnimationUtils.convertArray( values, track.values.constructor );\n\n\t\t\ttracks.push( track );\n\n\t\t}\n\n\t\tclip.tracks = tracks;\n\n\t\t// find minimum .times value across all tracks in the trimmed clip\n\n\t\tlet minStartTime = Infinity;\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tif ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {\n\n\t\t\t\tminStartTime = clip.tracks[ i ].times[ 0 ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// shift all tracks such that clip begins at t=0\n\n\t\tfor ( let i = 0; i < clip.tracks.length; ++ i ) {\n\n\t\t\tclip.tracks[ i ].shift( - 1 * minStartTime );\n\n\t\t}\n\n\t\tclip.resetDuration();\n\n\t\treturn clip;\n\n\t},\n\n\tmakeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {\n\n\t\tif ( fps <= 0 ) fps = 30;\n\n\t\tconst numTracks = referenceClip.tracks.length;\n\t\tconst referenceTime = referenceFrame / fps;\n\n\t\t// Make each track's values relative to the values at the reference frame\n\t\tfor ( let i = 0; i < numTracks; ++ i ) {\n\n\t\t\tconst referenceTrack = referenceClip.tracks[ i ];\n\t\t\tconst referenceTrackType = referenceTrack.ValueTypeName;\n\n\t\t\t// Skip this track if it's non-numeric\n\t\t\tif ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;\n\n\t\t\t// Find the track in the target clip whose name and type matches the reference track\n\t\t\tconst targetTrack = targetClip.tracks.find( function ( track ) {\n\n\t\t\t\treturn track.name === referenceTrack.name\n\t\t\t\t\t&& track.ValueTypeName === referenceTrackType;\n\n\t\t\t} );\n\n\t\t\tif ( targetTrack === undefined ) continue;\n\n\t\t\tlet referenceOffset = 0;\n\t\t\tconst referenceValueSize = referenceTrack.getValueSize();\n\n\t\t\tif ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\treferenceOffset = referenceValueSize / 3;\n\n\t\t\t}\n\n\t\t\tlet targetOffset = 0;\n\t\t\tconst targetValueSize = targetTrack.getValueSize();\n\n\t\t\tif ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {\n\n\t\t\t\ttargetOffset = targetValueSize / 3;\n\n\t\t\t}\n\n\t\t\tconst lastIndex = referenceTrack.times.length - 1;\n\t\t\tlet referenceValue;\n\n\t\t\t// Find the value to subtract out of the track\n\t\t\tif ( referenceTime <= referenceTrack.times[ 0 ] ) {\n\n\t\t\t\t// Reference frame is earlier than the first keyframe, so just use the first keyframe\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {\n\n\t\t\t\t// Reference frame is after the last keyframe, so just use the last keyframe\n\t\t\t\tconst startIndex = lastIndex * referenceValueSize + referenceOffset;\n\t\t\t\tconst endIndex = startIndex + referenceValueSize - referenceOffset;\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex );\n\n\t\t\t} else {\n\n\t\t\t\t// Interpolate to the reference value\n\t\t\t\tconst interpolant = referenceTrack.createInterpolant();\n\t\t\t\tconst startIndex = referenceOffset;\n\t\t\t\tconst endIndex = referenceValueSize - referenceOffset;\n\t\t\t\tinterpolant.evaluate( referenceTime );\n\t\t\t\treferenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex );\n\n\t\t\t}\n\n\t\t\t// Conjugate the quaternion\n\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\tconst referenceQuat = new _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_0__.Quaternion().fromArray( referenceValue ).normalize().conjugate();\n\t\t\t\treferenceQuat.toArray( referenceValue );\n\n\t\t\t}\n\n\t\t\t// Subtract the reference value from all of the track values\n\n\t\t\tconst numTimes = targetTrack.times.length;\n\t\t\tfor ( let j = 0; j < numTimes; ++ j ) {\n\n\t\t\t\tconst valueStart = j * targetValueSize + targetOffset;\n\n\t\t\t\tif ( referenceTrackType === 'quaternion' ) {\n\n\t\t\t\t\t// Multiply the conjugate for quaternion track types\n\t\t\t\t\t_math_Quaternion_js__WEBPACK_IMPORTED_MODULE_0__.Quaternion.multiplyQuaternionsFlat(\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart,\n\t\t\t\t\t\treferenceValue,\n\t\t\t\t\t\t0,\n\t\t\t\t\t\ttargetTrack.values,\n\t\t\t\t\t\tvalueStart\n\t\t\t\t\t);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst valueEnd = targetValueSize - targetOffset * 2;\n\n\t\t\t\t\t// Subtract each value for all other numeric track types\n\t\t\t\t\tfor ( let k = 0; k < valueEnd; ++ k ) {\n\n\t\t\t\t\t\ttargetTrack.values[ valueStart + k ] -= referenceValue[ k ];\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\ttargetClip.blendMode = _constants_js__WEBPACK_IMPORTED_MODULE_1__.AdditiveAnimationBlendMode;\n\n\t\treturn targetClip;\n\n\t}\n\n};\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/AnimationUtils.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/KeyframeTrack.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/animation/KeyframeTrack.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KeyframeTrack\": () => (/* binding */ KeyframeTrack)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _math_interpolants_CubicInterpolant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/interpolants/CubicInterpolant.js */ \"./node_modules/three/src/math/interpolants/CubicInterpolant.js\");\n/* harmony import */ var _math_interpolants_LinearInterpolant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/interpolants/LinearInterpolant.js */ \"./node_modules/three/src/math/interpolants/LinearInterpolant.js\");\n/* harmony import */ var _math_interpolants_DiscreteInterpolant_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/interpolants/DiscreteInterpolant.js */ \"./node_modules/three/src/math/interpolants/DiscreteInterpolant.js\");\n/* harmony import */ var _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AnimationUtils.js */ \"./node_modules/three/src/animation/AnimationUtils.js\");\n\n\n\n\n\n\nclass KeyframeTrack {\n\n\tconstructor( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t}\n\n\t// Serialization (in static context, because of constructor invocation\n\t// and automatic invocation of .toJSON):\n\n\tstatic toJSON( track ) {\n\n\t\tconst trackType = track.constructor;\n\n\t\tlet json;\n\n\t\t// derived classes can define a static toJSON method\n\t\tif ( trackType.toJSON !== this.toJSON ) {\n\n\t\t\tjson = trackType.toJSON( track );\n\n\t\t} else {\n\n\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\tjson = {\n\n\t\t\t\t'name': track.name,\n\t\t\t\t'times': _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t'values': _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t};\n\n\t\t\tconst interpolation = track.getInterpolation();\n\n\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t}\n\n\t\t}\n\n\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\treturn json;\n\n\t}\n\n\tInterpolantFactoryMethodDiscrete( result ) {\n\n\t\treturn new _math_interpolants_DiscreteInterpolant_js__WEBPACK_IMPORTED_MODULE_3__.DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new _math_interpolants_LinearInterpolant_js__WEBPACK_IMPORTED_MODULE_2__.LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tInterpolantFactoryMethodSmooth( result ) {\n\n\t\treturn new _math_interpolants_CubicInterpolant_js__WEBPACK_IMPORTED_MODULE_1__.CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n\tsetInterpolation( interpolation ) {\n\n\t\tlet factoryMethod;\n\n\t\tswitch ( interpolation ) {\n\n\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateDiscrete:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\tbreak;\n\n\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateLinear:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\tbreak;\n\n\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateSmooth:\n\n\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tif ( factoryMethod === undefined ) {\n\n\t\t\tconst message = 'unsupported interpolation for ' +\n\t\t\t\tthis.ValueTypeName + ' keyframe track named ' + this.name;\n\n\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\treturn this;\n\n\t\t}\n\n\t\tthis.createInterpolant = factoryMethod;\n\n\t\treturn this;\n\n\t}\n\n\tgetInterpolation() {\n\n\t\tswitch ( this.createInterpolant ) {\n\n\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\treturn _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateDiscrete;\n\n\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\treturn _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateLinear;\n\n\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\treturn _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateSmooth;\n\n\t\t}\n\n\t}\n\n\tgetValueSize() {\n\n\t\treturn this.values.length / this.times.length;\n\n\t}\n\n\t// move all keyframes either forwards or backwards in time\n\tshift( timeOffset ) {\n\n\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\tscale( timeScale ) {\n\n\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\tconst times = this.times;\n\n\t\t\tfor ( let i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\ttrim( startTime, endTime ) {\n\n\t\tconst times = this.times,\n\t\t\tnKeys = times.length;\n\n\t\tlet from = 0,\n\t\t\tto = nKeys - 1;\n\n\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t++ from;\n\n\t\t}\n\n\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t-- to;\n\n\t\t}\n\n\t\t++ to; // inclusive -> exclusive bound\n\n\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\tif ( from >= to ) {\n\n\t\t\t\tto = Math.max( to, 1 );\n\t\t\t\tfrom = to - 1;\n\n\t\t\t}\n\n\t\t\tconst stride = this.getValueSize();\n\t\t\tthis.times = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( times, from, to );\n\t\t\tthis.values = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\tvalidate() {\n\n\t\tlet valid = true;\n\n\t\tconst valueSize = this.getValueSize();\n\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tconst times = this.times,\n\t\t\tvalues = this.values,\n\n\t\t\tnKeys = times.length;\n\n\t\tif ( nKeys === 0 ) {\n\n\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\tvalid = false;\n\n\t\t}\n\n\t\tlet prevTime = null;\n\n\t\tfor ( let i = 0; i !== nKeys; i ++ ) {\n\n\t\t\tconst currTime = times[ i ];\n\n\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\tvalid = false;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tprevTime = currTime;\n\n\t\t}\n\n\t\tif ( values !== undefined ) {\n\n\t\t\tif ( _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\tfor ( let i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\tconst value = values[ i ];\n\n\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\tbreak;\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 valid;\n\n\t}\n\n\t// removes equivalent sequential keys as common in morph target sequences\n\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\toptimize() {\n\n\t\t// times or values may be shared with other tracks, so overwriting is unsafe\n\t\tconst times = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( this.times ),\n\t\t\tvalues = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( this.values ),\n\t\t\tstride = this.getValueSize(),\n\n\t\t\tsmoothInterpolation = this.getInterpolation() === _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateSmooth,\n\n\t\t\tlastIndex = times.length - 1;\n\n\t\tlet writeIndex = 1;\n\n\t\tfor ( let i = 1; i < lastIndex; ++ i ) {\n\n\t\t\tlet keep = false;\n\n\t\t\tconst time = times[ i ];\n\t\t\tconst timeNext = times[ i + 1 ];\n\n\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\tif ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {\n\n\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\tconst offset = i * stride,\n\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tconst value = values[ offset + j ];\n\n\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tkeep = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// in-place compaction\n\n\t\t\tif ( keep ) {\n\n\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\tconst readOffset = i * stride,\n\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\tfor ( let j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// flush last keyframe (compaction looks ahead)\n\n\t\tif ( lastIndex > 0 ) {\n\n\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\tfor ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t}\n\n\t\t\t++ writeIndex;\n\n\t\t}\n\n\t\tif ( writeIndex !== times.length ) {\n\n\t\t\tthis.times = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\tthis.values = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t} else {\n\n\t\t\tthis.times = times;\n\t\t\tthis.values = values;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\tconst times = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( this.times, 0 );\n\t\tconst values = _AnimationUtils_js__WEBPACK_IMPORTED_MODULE_4__.AnimationUtils.arraySlice( this.values, 0 );\n\n\t\tconst TypedKeyframeTrack = this.constructor;\n\t\tconst track = new TypedKeyframeTrack( this.name, times, values );\n\n\t\t// Interpolant argument to constructor is not saved, so copy the factory method directly.\n\t\ttrack.createInterpolant = this.createInterpolant;\n\n\t\treturn track;\n\n\t}\n\n}\n\nKeyframeTrack.prototype.TimeBufferType = Float32Array;\nKeyframeTrack.prototype.ValueBufferType = Float32Array;\nKeyframeTrack.prototype.DefaultInterpolation = _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateLinear;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/KeyframeTrack.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/PropertyBinding.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/animation/PropertyBinding.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PropertyBinding\": () => (/* binding */ PropertyBinding)\n/* harmony export */ });\n// Characters [].:/ are reserved for track binding syntax.\nconst _RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\nconst _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );\n\n// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n// only latin characters, and the unicode \\p{L} is not yet supported. So\n// instead, we exclude reserved characters and match everything else.\nconst _wordChar = '[^' + _RESERVED_CHARS_RE + ']';\nconst _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n// Parent directories, delimited by '/' or ':'. Currently unused, but must\n// be matched to parse the rest of the track name.\nconst _directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', _wordChar );\n\n// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\nconst _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );\n\n// Object on target node, and accessor. May not contain reserved\n// characters. Accessor may contain any character except closing bracket.\nconst _objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', _wordChar );\n\n// Property and accessor. May not contain reserved characters. Accessor may\n// contain any non-bracket characters.\nconst _propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', _wordChar );\n\nconst _trackRe = new RegExp( ''\n\t+ '^'\n\t+ _directoryRe\n\t+ _nodeRe\n\t+ _objectRe\n\t+ _propertyRe\n\t+ '$'\n);\n\nconst _supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\nfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\tconst parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis._targetGroup = targetGroup;\n\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n}\n\nObject.assign( Composite.prototype, {\n\n\tgetValue: function ( array, offset ) {\n\n\t\tthis.bind(); // bind all binding\n\n\t\tconst firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t// and only call .getValue on the first\n\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t},\n\n\tsetValue: function ( array, offset ) {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t}\n\n\t},\n\n\tbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].bind();\n\n\t\t}\n\n\t},\n\n\tunbind: function () {\n\n\t\tconst bindings = this._bindings;\n\n\t\tfor ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\tbindings[ i ].unbind();\n\n\t\t}\n\n\t}\n\n} );\n\n\nfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\tthis.path = path;\n\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\tthis.rootNode = rootNode;\n\n}\n\nObject.assign( PropertyBinding, {\n\n\tComposite: Composite,\n\n\tcreate: function ( root, path, parsedPath ) {\n\n\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t} else {\n\n\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t}\n\n\t},\n\n\t/**\n\t * Replaces spaces with underscores and removes unsupported characters from\n\t * node names, to ensure compatibility with parseTrackName().\n\t *\n\t * @param {string} name Node name to be sanitized.\n\t * @return {string}\n\t */\n\tsanitizeNodeName: function ( name ) {\n\n\t\treturn name.replace( /\\s/g, '_' ).replace( _reservedRe, '' );\n\n\t},\n\n\tparseTrackName: function ( trackName ) {\n\n\t\tconst matches = _trackRe.exec( trackName );\n\n\t\tif ( ! matches ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t}\n\n\t\tconst results = {\n\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\tnodeName: matches[ 2 ],\n\t\t\tobjectName: matches[ 3 ],\n\t\t\tobjectIndex: matches[ 4 ],\n\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\tpropertyIndex: matches[ 6 ]\n\t\t};\n\n\t\tconst lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\tconst objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t// Object names must be checked against an allowlist. Otherwise, there\n\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t// include '.' characters).\n\t\t\tif ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\tresults.objectName = objectName;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t}\n\n\t\treturn results;\n\n\t},\n\n\tfindNode: function ( root, nodeName ) {\n\n\t\tif ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\treturn root;\n\n\t\t}\n\n\t\t// search into skeleton bones.\n\t\tif ( root.skeleton ) {\n\n\t\t\tconst bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// search into node subtree.\n\t\tif ( root.children ) {\n\n\t\t\tconst searchNodeSubtree = function ( children ) {\n\n\t\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tconst childNode = children[ i ];\n\n\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\n\t\t\t};\n\n\t\t\tconst subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\tif ( subTreeNode ) {\n\n\t\t\t\treturn subTreeNode;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n} );\n\nObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t// these are used to \"bind\" a nonexistent property\n\t_getValue_unavailable: function () {},\n\t_setValue_unavailable: function () {},\n\n\tBindingType: {\n\t\tDirect: 0,\n\t\tEntireArray: 1,\n\t\tArrayElement: 2,\n\t\tHasFromToArray: 3\n\t},\n\n\tVersioning: {\n\t\tNone: 0,\n\t\tNeedsUpdate: 1,\n\t\tMatrixWorldNeedsUpdate: 2\n\t},\n\n\tGetterByBindingType: [\n\n\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t},\n\n\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\tconst source = this.resolvedProperty;\n\n\t\t\tfor ( let i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t}\n\n\t\t},\n\n\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t},\n\n\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t}\n\n\t],\n\n\tSetterByBindingTypeAndVersioning: [\n\n\t\t[\n\t\t\t// Direct\n\n\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// EntireArray\n\n\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tconst dest = this.resolvedProperty;\n\n\t\t\t\tfor ( let i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t}\n\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// ArrayElement\n\n\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t], [\n\n\t\t\t// HasToFromArray\n\n\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t},\n\n\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t}\n\n\t\t]\n\n\t],\n\n\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.getValue( targetArray, offset );\n\n\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t// prototype version of these methods with one that represents\n\t\t// the bound state. When the property is not found, the methods\n\t\t// become no-ops.\n\n\t},\n\n\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\tthis.bind();\n\t\tthis.setValue( sourceArray, offset );\n\n\t},\n\n\t// create getter / setter pair for a property in the scene graph\n\tbind: function () {\n\n\t\tlet targetObject = this.node;\n\t\tconst parsedPath = this.parsedPath;\n\n\t\tconst objectName = parsedPath.objectName;\n\t\tconst propertyName = parsedPath.propertyName;\n\t\tlet propertyIndex = parsedPath.propertyIndex;\n\n\t\tif ( ! targetObject ) {\n\n\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\tthis.node = targetObject;\n\n\t\t}\n\n\t\t// set fail state so we can just 'return' on error\n\t\tthis.getValue = this._getValue_unavailable;\n\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t// ensure there is a value node\n\t\tif ( ! targetObject ) {\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( objectName ) {\n\n\t\t\tlet objectIndex = parsedPath.objectIndex;\n\n\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\tswitch ( objectName ) {\n\n\t\t\t\tcase 'materials':\n\n\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'bones':\n\n\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tfor ( let i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t}\n\n\n\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// resolve property\n\t\tconst nodeProperty = targetObject[ propertyName ];\n\n\t\tif ( nodeProperty === undefined ) {\n\n\t\t\tconst nodeName = parsedPath.nodeName;\n\n\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// determine versioning scheme\n\t\tlet versioning = this.Versioning.None;\n\n\t\tthis.targetObject = targetObject;\n\n\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\tversioning = this.Versioning.NeedsUpdate;\n\n\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\n\t\t}\n\n\t\t// determine how the property gets bound\n\t\tlet bindingType = this.BindingType.Direct;\n\n\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\tif ( propertyName === 'morphTargetInfluences' ) {\n\n\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {\n\n\t\t\t\t\t\tpropertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];\n\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t} else {\n\n\t\t\tthis.propertyName = propertyName;\n\n\t\t}\n\n\t\t// select getter / setter\n\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t},\n\n\tunbind: function () {\n\n\t\tthis.node = null;\n\n\t\t// back to the prototype version of getValue / setValue\n\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\tthis.getValue = this._getValue_unbound;\n\t\tthis.setValue = this._setValue_unbound;\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( PropertyBinding.prototype, {\n\n\t// initial state of these methods that calls 'bind'\n\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n} );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/PropertyBinding.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/PropertyMixer.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/animation/PropertyMixer.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PropertyMixer\": () => (/* binding */ PropertyMixer)\n/* harmony export */ });\n/* harmony import */ var _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Quaternion.js */ \"./node_modules/three/src/math/Quaternion.js\");\n\n\nclass PropertyMixer {\n\n\tconstructor( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tlet mixFunction,\n\t\t\tmixFunctionAdditive,\n\t\t\tsetIdentity;\n\n\t\t// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\t\t//\n\t\t// 'add' is used for additive cumulative results\n\t\t//\n\t\t// 'work' is optional and is only present for quaternion types. It is used\n\t\t// to store intermediate quaternion multiplication results\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tmixFunctionAdditive = this._slerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityQuaternion;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 6 );\n\t\t\t\tthis._workIndex = 5;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tmixFunction = this._select;\n\n\t\t\t\t// Use the regular mix function and for additive on these types,\n\t\t\t\t// additive is not relevant for non-numeric types\n\t\t\t\tmixFunctionAdditive = this._select;\n\n\t\t\t\tsetIdentity = this._setAdditiveIdentityOther;\n\n\t\t\t\tthis.buffer = new Array( valueSize * 5 );\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\t\t\t\tmixFunctionAdditive = this._lerpAdditive;\n\t\t\t\tsetIdentity = this._setAdditiveIdentityNumeric;\n\n\t\t\t\tthis.buffer = new Float64Array( valueSize * 5 );\n\n\t\t}\n\n\t\tthis._mixBufferRegion = mixFunction;\n\t\tthis._mixBufferRegionAdditive = mixFunctionAdditive;\n\t\tthis._setIdentity = setIdentity;\n\t\tthis._origIndex = 3;\n\t\tthis._addIndex = 4;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'accu'\n\taccumulate( accuIndex, weight ) {\n\n\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t// the weight and shouldn't have made the call in the first place\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = accuIndex * stride + stride;\n\n\t\tlet currentWeight = this.cumulativeWeight;\n\n\t\tif ( currentWeight === 0 ) {\n\n\t\t\t// accuN := incoming * weight\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t}\n\n\t\t\tcurrentWeight = weight;\n\n\t\t} else {\n\n\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\tcurrentWeight += weight;\n\t\t\tconst mix = weight / currentWeight;\n\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t}\n\n\t\tthis.cumulativeWeight = currentWeight;\n\n\t}\n\n\t// accumulate data in the 'incoming' region into 'add'\n\taccumulateAdditive( weight ) {\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = stride * this._addIndex;\n\n\t\tif ( this.cumulativeWeightAdditive === 0 ) {\n\n\t\t\t// add = identity\n\n\t\t\tthis._setIdentity();\n\n\t\t}\n\n\t\t// add := add + incoming * weight\n\n\t\tthis._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );\n\t\tthis.cumulativeWeightAdditive += weight;\n\n\t}\n\n\t// apply the state of 'accu' to the binding when accus differ\n\tapply( accuIndex ) {\n\n\t\tconst stride = this.valueSize,\n\t\t\tbuffer = this.buffer,\n\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\tweight = this.cumulativeWeight,\n\t\t\tweightAdditive = this.cumulativeWeightAdditive,\n\n\t\t\tbinding = this.binding;\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t\tif ( weight < 1 ) {\n\n\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\tconst originalValueOffset = stride * this._origIndex;\n\n\t\t\tthis._mixBufferRegion(\n\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t}\n\n\t\tif ( weightAdditive > 0 ) {\n\n\t\t\t// accuN := accuN + additive accuN\n\n\t\t\tthis._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );\n\n\t\t}\n\n\t\tfor ( let i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// remember the state of the bound property and copy it to both accus\n\tsaveOriginalState() {\n\n\t\tconst binding = this.binding;\n\n\t\tconst buffer = this.buffer,\n\t\t\tstride = this.valueSize,\n\n\t\t\toriginalValueOffset = stride * this._origIndex;\n\n\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\tfor ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t}\n\n\t\t// Add to identity for additive\n\t\tthis._setIdentity();\n\n\t\tthis.cumulativeWeight = 0;\n\t\tthis.cumulativeWeightAdditive = 0;\n\n\t}\n\n\t// apply the state previously taken via 'saveOriginalState' to the binding\n\trestoreOriginalState() {\n\n\t\tconst originalValueOffset = this.valueSize * 3;\n\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t}\n\n\t_setAdditiveIdentityNumeric() {\n\n\t\tconst startIndex = this._addIndex * this.valueSize;\n\t\tconst endIndex = startIndex + this.valueSize;\n\n\t\tfor ( let i = startIndex; i < endIndex; i ++ ) {\n\n\t\t\tthis.buffer[ i ] = 0;\n\n\t\t}\n\n\t}\n\n\t_setAdditiveIdentityQuaternion() {\n\n\t\tthis._setAdditiveIdentityNumeric();\n\t\tthis.buffer[ this._addIndex * this.valueSize + 3 ] = 1;\n\n\t}\n\n\t_setAdditiveIdentityOther() {\n\n\t\tconst startIndex = this._origIndex * this.valueSize;\n\t\tconst targetIndex = this._addIndex * this.valueSize;\n\n\t\tfor ( let i = 0; i < this.valueSize; i ++ ) {\n\n\t\t\tthis.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];\n\n\t\t}\n\n\t}\n\n\n\t// mix functions\n\n\t_select( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tif ( t >= 0.5 ) {\n\n\t\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t_slerp( buffer, dstOffset, srcOffset, t ) {\n\n\t\t_math_Quaternion_js__WEBPACK_IMPORTED_MODULE_0__.Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t}\n\n\t_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst workOffset = this._workIndex * stride;\n\n\t\t// Store result in intermediate buffer offset\n\t\t_math_Quaternion_js__WEBPACK_IMPORTED_MODULE_0__.Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );\n\n\t\t// Slerp to the intermediate result\n\t\t_math_Quaternion_js__WEBPACK_IMPORTED_MODULE_0__.Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );\n\n\t}\n\n\t_lerp( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tconst s = 1 - t;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n\t_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tconst j = dstOffset + i;\n\n\t\t\tbuffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/PropertyMixer.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js": +/*!*************************************************************************!*\ + !*** ./node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BooleanKeyframeTrack\": () => (/* binding */ BooleanKeyframeTrack)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n\n\n\n/**\n * A Track of Boolean keyframe values.\n */\nclass BooleanKeyframeTrack extends _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__.KeyframeTrack {}\n\nBooleanKeyframeTrack.prototype.ValueTypeName = 'bool';\nBooleanKeyframeTrack.prototype.ValueBufferType = Array;\nBooleanKeyframeTrack.prototype.DefaultInterpolation = _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateDiscrete;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nBooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n// Note: Actually this track could have a optimized / compressed\n// representation of a single value and a custom interpolant that\n// computes \"firstValue ^ isOdd( index )\".\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/tracks/BooleanKeyframeTrack.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/tracks/ColorKeyframeTrack.js": +/*!***********************************************************************!*\ + !*** ./node_modules/three/src/animation/tracks/ColorKeyframeTrack.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ColorKeyframeTrack\": () => (/* binding */ ColorKeyframeTrack)\n/* harmony export */ });\n/* harmony import */ var _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n\n\n/**\n * A Track of keyframe values that represent color.\n */\nclass ColorKeyframeTrack extends _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_0__.KeyframeTrack {}\n\nColorKeyframeTrack.prototype.ValueTypeName = 'color';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited\n\n// Note: Very basic implementation and nothing special yet.\n// However, this is the place for color space parameterization.\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/tracks/ColorKeyframeTrack.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/tracks/NumberKeyframeTrack.js": +/*!************************************************************************!*\ + !*** ./node_modules/three/src/animation/tracks/NumberKeyframeTrack.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"NumberKeyframeTrack\": () => (/* binding */ NumberKeyframeTrack)\n/* harmony export */ });\n/* harmony import */ var _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n\n\n/**\n * A Track of numeric keyframe values.\n */\nclass NumberKeyframeTrack extends _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_0__.KeyframeTrack {}\n\nNumberKeyframeTrack.prototype.ValueTypeName = 'number';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/tracks/NumberKeyframeTrack.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js": +/*!****************************************************************************!*\ + !*** ./node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"QuaternionKeyframeTrack\": () => (/* binding */ QuaternionKeyframeTrack)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n/* harmony import */ var _math_interpolants_QuaternionLinearInterpolant_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../math/interpolants/QuaternionLinearInterpolant.js */ \"./node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js\");\n\n\n\n\n/**\n * A Track of quaternion keyframe values.\n */\nclass QuaternionKeyframeTrack extends _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__.KeyframeTrack {\n\n\tInterpolantFactoryMethodLinear( result ) {\n\n\t\treturn new _math_interpolants_QuaternionLinearInterpolant_js__WEBPACK_IMPORTED_MODULE_2__.QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t}\n\n}\n\nQuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';\n// ValueBufferType is inherited\nQuaternionKeyframeTrack.prototype.DefaultInterpolation = _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateLinear;\nQuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/tracks/QuaternionKeyframeTrack.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/tracks/StringKeyframeTrack.js": +/*!************************************************************************!*\ + !*** ./node_modules/three/src/animation/tracks/StringKeyframeTrack.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"StringKeyframeTrack\": () => (/* binding */ StringKeyframeTrack)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n\n\n\n/**\n * A Track that interpolates Strings\n */\nclass StringKeyframeTrack extends _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_1__.KeyframeTrack {}\n\nStringKeyframeTrack.prototype.ValueTypeName = 'string';\nStringKeyframeTrack.prototype.ValueBufferType = Array;\nStringKeyframeTrack.prototype.DefaultInterpolation = _constants_js__WEBPACK_IMPORTED_MODULE_0__.InterpolateDiscrete;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;\nStringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/tracks/StringKeyframeTrack.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/animation/tracks/VectorKeyframeTrack.js": +/*!************************************************************************!*\ + !*** ./node_modules/three/src/animation/tracks/VectorKeyframeTrack.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"VectorKeyframeTrack\": () => (/* binding */ VectorKeyframeTrack)\n/* harmony export */ });\n/* harmony import */ var _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../KeyframeTrack.js */ \"./node_modules/three/src/animation/KeyframeTrack.js\");\n\n\n/**\n * A Track of vectored keyframe values.\n */\nclass VectorKeyframeTrack extends _KeyframeTrack_js__WEBPACK_IMPORTED_MODULE_0__.KeyframeTrack {}\n\nVectorKeyframeTrack.prototype.ValueTypeName = 'vector';\n// ValueBufferType is inherited\n// DefaultInterpolation is inherited\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/animation/tracks/VectorKeyframeTrack.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/audio/Audio.js": +/*!***********************************************!*\ + !*** ./node_modules/three/src/audio/Audio.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Audio\": () => (/* binding */ Audio)\n/* harmony export */ });\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n\n\nclass Audio extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__.Object3D {\n\n\tconstructor( listener ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.listener = listener;\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.detune = 0;\n\t\tthis.loop = false;\n\t\tthis.loopStart = 0;\n\t\tthis.loopEnd = 0;\n\t\tthis.offset = 0;\n\t\tthis.duration = undefined;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.source = null;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis._startedAt = 0;\n\t\tthis._progress = 0;\n\t\tthis._connected = false;\n\n\t\tthis.filters = [];\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tsetNodeSource( audioNode ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'audioNode';\n\t\tthis.source = audioNode;\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaElementSource( mediaElement ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaNode';\n\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetMediaStreamSource( mediaStream ) {\n\n\t\tthis.hasPlaybackControl = false;\n\t\tthis.sourceType = 'mediaStreamNode';\n\t\tthis.source = this.context.createMediaStreamSource( mediaStream );\n\t\tthis.connect();\n\n\t\treturn this;\n\n\t}\n\n\tsetBuffer( audioBuffer ) {\n\n\t\tthis.buffer = audioBuffer;\n\t\tthis.sourceType = 'buffer';\n\n\t\tif ( this.autoplay ) this.play();\n\n\t\treturn this;\n\n\t}\n\n\tplay( delay = 0 ) {\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._startedAt = this.context.currentTime + delay;\n\n\t\tconst source = this.context.createBufferSource();\n\t\tsource.buffer = this.buffer;\n\t\tsource.loop = this.loop;\n\t\tsource.loopStart = this.loopStart;\n\t\tsource.loopEnd = this.loopEnd;\n\t\tsource.onended = this.onEnded.bind( this );\n\t\tsource.start( this._startedAt, this._progress + this.offset, this.duration );\n\n\t\tthis.isPlaying = true;\n\n\t\tthis.source = source;\n\n\t\tthis.setDetune( this.detune );\n\t\tthis.setPlaybackRate( this.playbackRate );\n\n\t\treturn this.connect();\n\n\t}\n\n\tpause() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\t// update current progress\n\n\t\t\tthis._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;\n\n\t\t\tif ( this.loop === true ) {\n\n\t\t\t\t// ensure _progress does not exceed duration with looped audios\n\n\t\t\t\tthis._progress = this._progress % ( this.duration || this.buffer.duration );\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.source.onended = null;\n\n\t\t\tthis.isPlaying = false;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tstop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis._progress = 0;\n\n\t\tthis.source.stop();\n\t\tthis.source.onended = null;\n\t\tthis.isPlaying = false;\n\n\t\treturn this;\n\n\t}\n\n\tconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = true;\n\n\t\treturn this;\n\n\t}\n\n\tdisconnect() {\n\n\t\tif ( this.filters.length > 0 ) {\n\n\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\tfor ( let i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t}\n\n\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t} else {\n\n\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t}\n\n\t\tthis._connected = false;\n\n\t\treturn this;\n\n\t}\n\n\tgetFilters() {\n\n\t\treturn this.filters;\n\n\t}\n\n\tsetFilters( value ) {\n\n\t\tif ( ! value ) value = [];\n\n\t\tif ( this._connected === true ) {\n\n\t\t\tthis.disconnect();\n\t\t\tthis.filters = value.slice();\n\t\t\tthis.connect();\n\n\t\t} else {\n\n\t\t\tthis.filters = value.slice();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetDetune( value ) {\n\n\t\tthis.detune = value;\n\n\t\tif ( this.source.detune === undefined ) return; // only set detune when available\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetDetune() {\n\n\t\treturn this.detune;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.getFilters()[ 0 ];\n\n\t}\n\n\tsetFilter( filter ) {\n\n\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t}\n\n\tsetPlaybackRate( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.playbackRate = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetPlaybackRate() {\n\n\t\treturn this.playbackRate;\n\n\t}\n\n\tonEnded() {\n\n\t\tthis.isPlaying = false;\n\n\t}\n\n\tgetLoop() {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn false;\n\n\t\t}\n\n\t\treturn this.loop;\n\n\t}\n\n\tsetLoop( value ) {\n\n\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tthis.loop = value;\n\n\t\tif ( this.isPlaying === true ) {\n\n\t\t\tthis.source.loop = this.loop;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopStart( value ) {\n\n\t\tthis.loopStart = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetLoopEnd( value ) {\n\n\t\tthis.loopEnd = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/audio/Audio.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/audio/AudioAnalyser.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/audio/AudioAnalyser.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AudioAnalyser\": () => (/* binding */ AudioAnalyser)\n/* harmony export */ });\nclass AudioAnalyser {\n\n\tconstructor( audio, fftSize = 2048 ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\n\tgetFrequencyData() {\n\n\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\treturn this.data;\n\n\t}\n\n\tgetAverageFrequency() {\n\n\t\tlet value = 0;\n\t\tconst data = this.getFrequencyData();\n\n\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\tvalue += data[ i ];\n\n\t\t}\n\n\t\treturn value / data.length;\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/audio/AudioAnalyser.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/audio/AudioContext.js": +/*!******************************************************!*\ + !*** ./node_modules/three/src/audio/AudioContext.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AudioContext\": () => (/* binding */ AudioContext)\n/* harmony export */ });\nlet _context;\n\nconst AudioContext = {\n\n\tgetContext: function () {\n\n\t\tif ( _context === undefined ) {\n\n\t\t\t_context = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t}\n\n\t\treturn _context;\n\n\t},\n\n\tsetContext: function ( value ) {\n\n\t\t_context = value;\n\n\t}\n\n};\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/audio/AudioContext.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/audio/AudioListener.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/audio/AudioListener.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AudioListener\": () => (/* binding */ AudioListener)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Quaternion.js */ \"./node_modules/three/src/math/Quaternion.js\");\n/* harmony import */ var _core_Clock_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Clock.js */ \"./node_modules/three/src/core/Clock.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _AudioContext_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./AudioContext.js */ \"./node_modules/three/src/audio/AudioContext.js\");\n\n\n\n\n\n\nconst _position = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _quaternion = /*@__PURE__*/ new _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_1__.Quaternion();\nconst _scale = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _orientation = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\nclass AudioListener extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_3__.Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = _AudioContext_js__WEBPACK_IMPORTED_MODULE_4__.AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t\tthis.timeDelta = 0;\n\n\t\t// private\n\n\t\tthis._clock = new _core_Clock_js__WEBPACK_IMPORTED_MODULE_2__.Clock();\n\n\t}\n\n\tgetInput() {\n\n\t\treturn this.gain;\n\n\t}\n\n\tremoveFilter() {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\tthis.gain.connect( this.context.destination );\n\t\t\tthis.filter = null;\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tgetFilter() {\n\n\t\treturn this.filter;\n\n\t}\n\n\tsetFilter( value ) {\n\n\t\tif ( this.filter !== null ) {\n\n\t\t\tthis.gain.disconnect( this.filter );\n\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t} else {\n\n\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t}\n\n\t\tthis.filter = value;\n\t\tthis.gain.connect( this.filter );\n\t\tthis.filter.connect( this.context.destination );\n\n\t\treturn this;\n\n\t}\n\n\tgetMasterVolume() {\n\n\t\treturn this.gain.gain.value;\n\n\t}\n\n\tsetMasterVolume( value ) {\n\n\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tconst listener = this.context.listener;\n\t\tconst up = this.up;\n\n\t\tthis.timeDelta = this._clock.getDelta();\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion );\n\n\t\tif ( listener.positionX ) {\n\n\t\t\t// code path for Chrome (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.timeDelta;\n\n\t\t\tlistener.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tlistener.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tlistener.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tlistener.forwardX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tlistener.forwardY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tlistener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime );\n\t\t\tlistener.upX.linearRampToValueAtTime( up.x, endTime );\n\t\t\tlistener.upY.linearRampToValueAtTime( up.y, endTime );\n\t\t\tlistener.upZ.linearRampToValueAtTime( up.z, endTime );\n\n\t\t} else {\n\n\t\t\tlistener.setPosition( _position.x, _position.y, _position.z );\n\t\t\tlistener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z );\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/audio/AudioListener.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/audio/PositionalAudio.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/audio/PositionalAudio.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PositionalAudio\": () => (/* binding */ PositionalAudio)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Quaternion.js */ \"./node_modules/three/src/math/Quaternion.js\");\n/* harmony import */ var _Audio_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Audio.js */ \"./node_modules/three/src/audio/Audio.js\");\n\n\n\n\nconst _position = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _quaternion = /*@__PURE__*/ new _math_Quaternion_js__WEBPACK_IMPORTED_MODULE_1__.Quaternion();\nconst _scale = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _orientation = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\nclass PositionalAudio extends _Audio_js__WEBPACK_IMPORTED_MODULE_2__.Audio {\n\n\tconstructor( listener ) {\n\n\t\tsuper( listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.panningModel = 'HRTF';\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tgetOutput() {\n\n\t\treturn this.panner;\n\n\t}\n\n\tgetRefDistance() {\n\n\t\treturn this.panner.refDistance;\n\n\t}\n\n\tsetRefDistance( value ) {\n\n\t\tthis.panner.refDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetRolloffFactor() {\n\n\t\treturn this.panner.rolloffFactor;\n\n\t}\n\n\tsetRolloffFactor( value ) {\n\n\t\tthis.panner.rolloffFactor = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetDistanceModel() {\n\n\t\treturn this.panner.distanceModel;\n\n\t}\n\n\tsetDistanceModel( value ) {\n\n\t\tthis.panner.distanceModel = value;\n\n\t\treturn this;\n\n\t}\n\n\tgetMaxDistance() {\n\n\t\treturn this.panner.maxDistance;\n\n\t}\n\n\tsetMaxDistance( value ) {\n\n\t\tthis.panner.maxDistance = value;\n\n\t\treturn this;\n\n\t}\n\n\tsetDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {\n\n\t\tthis.panner.coneInnerAngle = coneInnerAngle;\n\t\tthis.panner.coneOuterAngle = coneOuterAngle;\n\t\tthis.panner.coneOuterGain = coneOuterGain;\n\n\t\treturn this;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t\tif ( this.hasPlaybackControl === true && this.isPlaying === false ) return;\n\n\t\tthis.matrixWorld.decompose( _position, _quaternion, _scale );\n\n\t\t_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );\n\n\t\tconst panner = this.panner;\n\n\t\tif ( panner.positionX ) {\n\n\t\t\t// code path for Chrome and Firefox (see #14393)\n\n\t\t\tconst endTime = this.context.currentTime + this.listener.timeDelta;\n\n\t\t\tpanner.positionX.linearRampToValueAtTime( _position.x, endTime );\n\t\t\tpanner.positionY.linearRampToValueAtTime( _position.y, endTime );\n\t\t\tpanner.positionZ.linearRampToValueAtTime( _position.z, endTime );\n\t\t\tpanner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );\n\t\t\tpanner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );\n\t\t\tpanner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );\n\n\t\t} else {\n\n\t\t\tpanner.setPosition( _position.x, _position.y, _position.z );\n\t\t\tpanner.setOrientation( _orientation.x, _orientation.y, _orientation.z );\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/audio/PositionalAudio.js?"); + +/***/ }), + /***/ "./node_modules/three/src/cameras/ArrayCamera.js": /*!*******************************************************!*\ !*** ./node_modules/three/src/cameras/ArrayCamera.js ***! @@ -330,6 +540,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/cameras/StereoCamera.js": +/*!********************************************************!*\ + !*** ./node_modules/three/src/cameras/StereoCamera.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"StereoCamera\": () => (/* binding */ StereoCamera)\n/* harmony export */ });\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./PerspectiveCamera.js */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n\n\n\n\nconst _eyeRight = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_0__.Matrix4();\nconst _eyeLeft = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_0__.Matrix4();\n\nclass StereoCamera {\n\n\tconstructor() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new _PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_2__.PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new _PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_2__.PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t\tthis._cache = {\n\t\t\tfocus: null,\n\t\t\tfov: null,\n\t\t\taspect: null,\n\t\t\tnear: null,\n\t\t\tfar: null,\n\t\t\tzoom: null,\n\t\t\teyeSep: null\n\t\t};\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst cache = this._cache;\n\n\t\tconst needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||\n\t\t\tcache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||\n\t\t\tcache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;\n\n\t\tif ( needsUpdate ) {\n\n\t\t\tcache.focus = camera.focus;\n\t\t\tcache.fov = camera.fov;\n\t\t\tcache.aspect = camera.aspect * this.aspect;\n\t\t\tcache.near = camera.near;\n\t\t\tcache.far = camera.far;\n\t\t\tcache.zoom = camera.zoom;\n\t\t\tcache.eyeSep = this.eyeSep;\n\n\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\tconst projectionMatrix = camera.projectionMatrix.clone();\n\t\t\tconst eyeSepHalf = cache.eyeSep / 2;\n\t\t\tconst eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;\n\t\t\tconst ymax = ( cache.near * Math.tan( _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__.MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;\n\t\t\tlet xmin, xmax;\n\n\t\t\t// translate xOffset\n\n\t\t\t_eyeLeft.elements[ 12 ] = - eyeSepHalf;\n\t\t\t_eyeRight.elements[ 12 ] = eyeSepHalf;\n\n\t\t\t// for left eye\n\n\t\t\txmin = - ymax * cache.aspect + eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect + eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t// for right eye\n\n\t\t\txmin = - ymax * cache.aspect - eyeSepOnProjection;\n\t\t\txmax = ymax * cache.aspect - eyeSepOnProjection;\n\n\t\t\tprojectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );\n\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t}\n\n\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );\n\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/cameras/StereoCamera.js?"); + +/***/ }), + /***/ "./node_modules/three/src/constants.js": /*!*********************************************!*\ !*** ./node_modules/three/src/constants.js ***! @@ -360,6 +580,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/core/Clock.js": +/*!**********************************************!*\ + !*** ./node_modules/three/src/core/Clock.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Clock\": () => (/* binding */ Clock)\n/* harmony export */ });\nclass Clock {\n\n\tconstructor( autoStart ) {\n\n\t\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tstart() {\n\n\t\tthis.startTime = now();\n\n\t\tthis.oldTime = this.startTime;\n\t\tthis.elapsedTime = 0;\n\t\tthis.running = true;\n\n\t}\n\n\tstop() {\n\n\t\tthis.getElapsedTime();\n\t\tthis.running = false;\n\t\tthis.autoStart = false;\n\n\t}\n\n\tgetElapsedTime() {\n\n\t\tthis.getDelta();\n\t\treturn this.elapsedTime;\n\n\t}\n\n\tgetDelta() {\n\n\t\tlet diff = 0;\n\n\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\tthis.start();\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tif ( this.running ) {\n\n\t\t\tconst newTime = now();\n\n\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\tthis.oldTime = newTime;\n\n\t\t\tthis.elapsedTime += diff;\n\n\t\t}\n\n\t\treturn diff;\n\n\t}\n\n}\n\nfunction now() {\n\n\treturn ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/Clock.js?"); + +/***/ }), + /***/ "./node_modules/three/src/core/EventDispatcher.js": /*!********************************************************!*\ !*** ./node_modules/three/src/core/EventDispatcher.js ***! @@ -370,6 +600,66 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/core/GLBufferAttribute.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/core/GLBufferAttribute.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"GLBufferAttribute\": () => (/* binding */ GLBufferAttribute)\n/* harmony export */ });\nfunction GLBufferAttribute( buffer, type, itemSize, elementSize, count ) {\n\n\tthis.buffer = buffer;\n\tthis.type = type;\n\tthis.itemSize = itemSize;\n\tthis.elementSize = elementSize;\n\tthis.count = count;\n\n\tthis.version = 0;\n\n}\n\nObject.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( GLBufferAttribute.prototype, {\n\n\tisGLBufferAttribute: true,\n\n\tsetBuffer: function ( buffer ) {\n\n\t\tthis.buffer = buffer;\n\n\t\treturn this;\n\n\t},\n\n\tsetType: function ( type, elementSize ) {\n\n\t\tthis.type = type;\n\t\tthis.elementSize = elementSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetItemSize: function ( itemSize ) {\n\n\t\tthis.itemSize = itemSize;\n\n\t\treturn this;\n\n\t},\n\n\tsetCount: function ( count ) {\n\n\t\tthis.count = count;\n\n\t\treturn this;\n\n\t},\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/GLBufferAttribute.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/core/InstancedBufferAttribute.js": +/*!*****************************************************************!*\ + !*** ./node_modules/three/src/core/InstancedBufferAttribute.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"InstancedBufferAttribute\": () => (/* binding */ InstancedBufferAttribute)\n/* harmony export */ });\n/* harmony import */ var _BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n\n\nfunction InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) {\n\n\tif ( typeof ( normalized ) === 'number' ) {\n\n\t\tmeshPerAttribute = normalized;\n\n\t\tnormalized = false;\n\n\t\tconsole.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' );\n\n\t}\n\n\t_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute.call( this, array, itemSize, normalized );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedBufferAttribute.prototype = Object.assign( Object.create( _BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute.prototype ), {\n\n\tconstructor: InstancedBufferAttribute,\n\n\tisInstancedBufferAttribute: true,\n\n\tcopy: function ( source ) {\n\n\t\t_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ()\t{\n\n\t\tconst data = _BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute.prototype.toJSON.call( this );\n\n\t\tdata.meshPerAttribute = this.meshPerAttribute;\n\n\t\tdata.isInstancedBufferAttribute = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/InstancedBufferAttribute.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/core/InstancedBufferGeometry.js": +/*!****************************************************************!*\ + !*** ./node_modules/three/src/core/InstancedBufferGeometry.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"InstancedBufferGeometry\": () => (/* binding */ InstancedBufferGeometry)\n/* harmony export */ });\n/* harmony import */ var _BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n\n\nfunction InstancedBufferGeometry() {\n\n\t_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.call( this );\n\n\tthis.type = 'InstancedBufferGeometry';\n\tthis.instanceCount = Infinity;\n\n}\n\nInstancedBufferGeometry.prototype = Object.assign( Object.create( _BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.prototype ), {\n\n\tconstructor: InstancedBufferGeometry,\n\n\tisInstancedBufferGeometry: true,\n\n\tcopy: function ( source ) {\n\n\t\t_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.prototype.copy.call( this, source );\n\n\t\tthis.instanceCount = source.instanceCount;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = _BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.instanceCount = this.instanceCount;\n\n\t\tdata.isInstancedBufferGeometry = true;\n\n\t\treturn data;\n\n\t}\n\n} );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/InstancedBufferGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/core/InstancedInterleavedBuffer.js": +/*!*******************************************************************!*\ + !*** ./node_modules/three/src/core/InstancedInterleavedBuffer.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"InstancedInterleavedBuffer\": () => (/* binding */ InstancedInterleavedBuffer)\n/* harmony export */ });\n/* harmony import */ var _InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InterleavedBuffer.js */ \"./node_modules/three/src/core/InterleavedBuffer.js\");\n\n\nfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\t_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_0__.InterleavedBuffer.call( this, array, stride );\n\n\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n}\n\nInstancedInterleavedBuffer.prototype = Object.assign( Object.create( _InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_0__.InterleavedBuffer.prototype ), {\n\n\tconstructor: InstancedInterleavedBuffer,\n\n\tisInstancedInterleavedBuffer: true,\n\n\tcopy: function ( source ) {\n\n\t\t_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_0__.InterleavedBuffer.prototype.copy.call( this, source );\n\n\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tconst ib = _InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_0__.InterleavedBuffer.prototype.clone.call( this, data );\n\n\t\tib.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn ib;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tconst json = _InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_0__.InterleavedBuffer.prototype.toJSON.call( this, data );\n\n\t\tjson.isInstancedInterleavedBuffer = true;\n\t\tjson.meshPerAttribute = this.meshPerAttribute;\n\n\t\treturn json;\n\n\t}\n\n} );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/InstancedInterleavedBuffer.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/core/InterleavedBuffer.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/core/InterleavedBuffer.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"InterleavedBuffer\": () => (/* binding */ InterleavedBuffer)\n/* harmony export */ });\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n\n\n\nfunction InterleavedBuffer( array, stride ) {\n\n\tthis.array = array;\n\tthis.stride = stride;\n\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\tthis.usage = _constants_js__WEBPACK_IMPORTED_MODULE_1__.StaticDrawUsage;\n\tthis.updateRange = { offset: 0, count: - 1 };\n\n\tthis.version = 0;\n\n\tthis.uuid = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_0__.MathUtils.generateUUID();\n\n}\n\nObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\tset: function ( value ) {\n\n\t\tif ( value === true ) this.version ++;\n\n\t}\n\n} );\n\nObject.assign( InterleavedBuffer.prototype, {\n\n\tisInterleavedBuffer: true,\n\n\tonUploadCallback: function () {},\n\n\tsetUsage: function ( value ) {\n\n\t\tthis.usage = value;\n\n\t\treturn this;\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.array = new source.array.constructor( source.array );\n\t\tthis.count = source.count;\n\t\tthis.stride = source.stride;\n\t\tthis.usage = source.usage;\n\n\t\treturn this;\n\n\t},\n\n\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\tindex1 *= this.stride;\n\t\tindex2 *= attribute.stride;\n\n\t\tfor ( let i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tset: function ( value, offset = 0 ) {\n\n\t\tthis.array.set( value, offset );\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_0__.MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;\n\n\t\t}\n\n\t\tconst array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );\n\n\t\tconst ib = new InterleavedBuffer( array, this.stride );\n\t\tib.setUsage( this.usage );\n\n\t\treturn ib;\n\n\t},\n\n\tonUpload: function ( callback ) {\n\n\t\tthis.onUploadCallback = callback;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data.arrayBuffers === undefined ) {\n\n\t\t\tdata.arrayBuffers = {};\n\n\t\t}\n\n\t\t// generate UUID for array buffer if necessary\n\n\t\tif ( this.array.buffer._uuid === undefined ) {\n\n\t\t\tthis.array.buffer._uuid = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_0__.MathUtils.generateUUID();\n\n\t\t}\n\n\t\tif ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {\n\n\t\t\tdata.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) );\n\n\t\t}\n\n\t\t//\n\n\t\treturn {\n\t\t\tuuid: this.uuid,\n\t\t\tbuffer: this.array.buffer._uuid,\n\t\t\ttype: this.array.constructor.name,\n\t\t\tstride: this.stride\n\t\t};\n\n\t}\n\n} );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/InterleavedBuffer.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/core/InterleavedBufferAttribute.js": +/*!*******************************************************************!*\ + !*** ./node_modules/three/src/core/InterleavedBufferAttribute.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"InterleavedBufferAttribute\": () => (/* binding */ InterleavedBufferAttribute)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n\n\n\nconst _vector = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\nfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\tthis.name = '';\n\n\tthis.data = interleavedBuffer;\n\tthis.itemSize = itemSize;\n\tthis.offset = offset;\n\n\tthis.normalized = normalized === true;\n\n}\n\nObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\tcount: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.count;\n\n\t\t}\n\n\t},\n\n\tarray: {\n\n\t\tget: function () {\n\n\t\t\treturn this.data.array;\n\n\t\t}\n\n\t},\n\n\tneedsUpdate: {\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.data.needsUpdate = value;\n\n\t\t}\n\n\t}\n\n} );\n\nObject.assign( InterleavedBufferAttribute.prototype, {\n\n\tisInterleavedBufferAttribute: true,\n\n\tapplyMatrix4: function ( m ) {\n\n\t\tfor ( let i = 0, l = this.data.count; i < l; i ++ ) {\n\n\t\t\t_vector.x = this.getX( i );\n\t\t\t_vector.y = this.getY( i );\n\t\t\t_vector.z = this.getZ( i );\n\n\t\t\t_vector.applyMatrix4( m );\n\n\t\t\tthis.setXYZ( i, _vector.x, _vector.y, _vector.z );\n\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tsetX: function ( index, x ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\treturn this;\n\n\t},\n\n\tsetY: function ( index, y ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetZ: function ( index, z ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetW: function ( index, w ) {\n\n\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tgetX: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t},\n\n\tgetY: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t},\n\n\tgetZ: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t},\n\n\tgetW: function ( index ) {\n\n\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t},\n\n\tsetXY: function ( index, x, y ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZ: function ( index, x, y, z ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\n\t\treturn this;\n\n\t},\n\n\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\tindex = index * this.data.stride + this.offset;\n\n\t\tthis.data.array[ index + 0 ] = x;\n\t\tthis.data.array[ index + 1 ] = y;\n\t\tthis.data.array[ index + 2 ] = z;\n\t\tthis.data.array[ index + 3 ] = w;\n\n\t\treturn this;\n\n\t},\n\n\tclone: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn new _BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );\n\n\t\t} else {\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );\n\n\t\t\t}\n\n\t\t\treturn new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );\n\n\t\t}\n\n\t},\n\n\ttoJSON: function ( data ) {\n\n\t\tif ( data === undefined ) {\n\n\t\t\tconsole.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' );\n\n\t\t\tconst array = [];\n\n\t\t\tfor ( let i = 0; i < this.count; i ++ ) {\n\n\t\t\t\tconst index = i * this.data.stride + this.offset;\n\n\t\t\t\tfor ( let j = 0; j < this.itemSize; j ++ ) {\n\n\t\t\t\t\tarray.push( this.data.array[ index + j ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// deinterleave data and save it as an ordinary buffer attribute for now\n\n\t\t\treturn {\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\ttype: this.array.constructor.name,\n\t\t\t\tarray: array,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t} else {\n\n\t\t\t// save as true interlaved attribtue\n\n\t\t\tif ( data.interleavedBuffers === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers = {};\n\n\t\t\t}\n\n\t\t\tif ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {\n\n\t\t\t\tdata.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tisInterleavedBufferAttribute: true,\n\t\t\t\titemSize: this.itemSize,\n\t\t\t\tdata: this.data.uuid,\n\t\t\t\toffset: this.offset,\n\t\t\t\tnormalized: this.normalized\n\t\t\t};\n\n\t\t}\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/InterleavedBufferAttribute.js?"); + +/***/ }), + /***/ "./node_modules/three/src/core/Layers.js": /*!***********************************************!*\ !*** ./node_modules/three/src/core/Layers.js ***! @@ -400,6 +690,36 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/core/Uniform.js": +/*!************************************************!*\ + !*** ./node_modules/three/src/core/Uniform.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Uniform\": () => (/* binding */ Uniform)\n/* harmony export */ });\nclass Uniform {\n\n\tconstructor( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/core/Uniform.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/DataUtils.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/extras/DataUtils.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DataUtils\": () => (/* binding */ DataUtils)\n/* harmony export */ });\nconst _floatView = new Float32Array( 1 );\nconst _int32View = new Int32Array( _floatView.buffer );\n\nconst DataUtils = {\n\n\t// Converts float32 to float16 (stored as uint16 value).\n\n\ttoHalfFloat: function ( val ) {\n\n\t\t// Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410\n\n\t\t/* This method is faster than the OpenEXR implementation (very often\n\t\t* used, eg. in Ogre), with the additional benefit of rounding, inspired\n\t\t* by James Tursa?s half-precision code. */\n\n\t\t_floatView[ 0 ] = val;\n\t\tconst x = _int32View[ 0 ];\n\n\t\tlet bits = ( x >> 16 ) & 0x8000; /* Get the sign */\n\t\tlet m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */\n\t\tconst e = ( x >> 23 ) & 0xff; /* Using int is faster here */\n\n\t\t/* If zero, or denormal, or exponent underflows too much for a denormal\n\t\t\t* half, return signed zero. */\n\t\tif ( e < 103 ) return bits;\n\n\t\t/* If NaN, return NaN. If Inf or exponent overflow, return Inf. */\n\t\tif ( e > 142 ) {\n\n\t\t\tbits |= 0x7c00;\n\t\t\t/* If exponent was 0xff and one mantissa bit was set, it means NaN,\n\t\t\t\t\t\t* not Inf, so make sure we set one mantissa bit too. */\n\t\t\tbits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\t/* If exponent underflows but not too much, return a denormal */\n\t\tif ( e < 113 ) {\n\n\t\t\tm |= 0x0800;\n\t\t\t/* Extra rounding may overflow and set mantissa to 0 and exponent\n\t\t\t\t* to 1, which is OK. */\n\t\t\tbits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 );\n\t\t\treturn bits;\n\n\t\t}\n\n\t\tbits |= ( ( e - 112 ) << 10 ) | ( m >> 1 );\n\t\t/* Extra rounding. An overflow will set mantissa to 0 and increment\n\t\t\t* the exponent, which is OK. */\n\t\tbits += m & 1;\n\t\treturn bits;\n\n\t}\n\n};\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/DataUtils.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/Earcut.js": +/*!*************************************************!*\ + !*** ./node_modules/three/src/extras/Earcut.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Earcut\": () => (/* binding */ Earcut)\n/* harmony export */ });\n/**\n * Port from https://github.com/mapbox/earcut (v2.2.2)\n */\n\nconst Earcut = {\n\n\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\tdim = dim || 2;\n\n\t\tconst hasHoles = holeIndices && holeIndices.length;\n\t\tconst outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;\n\t\tlet outerNode = linkedList( data, 0, outerLen, dim, true );\n\t\tconst triangles = [];\n\n\t\tif ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;\n\n\t\tlet minX, minY, maxX, maxY, x, y, invSize;\n\n\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\t\tif ( data.length > 80 * dim ) {\n\n\t\t\tminX = maxX = data[ 0 ];\n\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\tfor ( let i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\tx = data[ i ];\n\t\t\t\ty = data[ i + 1 ];\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t}\n\n\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t}\n\n\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\treturn triangles;\n\n\t}\n\n};\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList( data, start, end, dim, clockwise ) {\n\n\tlet i, last;\n\n\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t} else {\n\n\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t}\n\n\tif ( last && equals( last, last.next ) ) {\n\n\t\tremoveNode( last );\n\t\tlast = last.next;\n\n\t}\n\n\treturn last;\n\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints( start, end ) {\n\n\tif ( ! start ) return start;\n\tif ( ! end ) end = start;\n\n\tlet p = start,\n\t\tagain;\n\tdo {\n\n\t\tagain = false;\n\n\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\tremoveNode( p );\n\t\t\tp = end = p.prev;\n\t\t\tif ( p === p.next ) break;\n\t\t\tagain = true;\n\n\t\t} else {\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t} while ( again || p !== end );\n\n\treturn end;\n\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\tif ( ! ear ) return;\n\n\t// interlink polygon nodes in z-order\n\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\tlet stop = ear,\n\t\tprev, next;\n\n\t// iterate through ears, slicing them one by one\n\twhile ( ear.prev !== ear.next ) {\n\n\t\tprev = ear.prev;\n\t\tnext = ear.next;\n\n\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t// cut off the triangle\n\t\t\ttriangles.push( prev.i / dim );\n\t\t\ttriangles.push( ear.i / dim );\n\t\t\ttriangles.push( next.i / dim );\n\n\t\t\tremoveNode( ear );\n\n\t\t\t// skipping the next vertex leads to less sliver triangles\n\t\t\tear = next.next;\n\t\t\tstop = next.next;\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tear = next;\n\n\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\t\tif ( ear === stop ) {\n\n\t\t\t// try filtering points and slicing again\n\t\t\tif ( ! pass ) {\n\n\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\tear = cureLocalIntersections( filterPoints( ear ), triangles, dim );\n\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t}\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar( ear ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// now make sure we don't have other points inside the potential ear\n\tlet p = ear.next.next;\n\n\twhile ( p !== ear.prev ) {\n\n\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.next;\n\n\t}\n\n\treturn true;\n\n}\n\nfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\tconst a = ear.prev,\n\t\tb = ear,\n\t\tc = ear.next;\n\n\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t// triangle bbox; min & max are calculated like this for speed\n\tconst minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t// z-order range for the current triangle bbox;\n\tconst minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\tlet p = ear.prevZ,\n\t\tn = ear.nextZ;\n\n\t// look for points inside the triangle in both directions\n\twhile ( p && p.z >= minZ && n && n.z <= maxZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\t// look for remaining points in decreasing z-order\n\twhile ( p && p.z >= minZ ) {\n\n\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\tp = p.prevZ;\n\n\t}\n\n\t// look for remaining points in increasing z-order\n\twhile ( n && n.z <= maxZ ) {\n\n\t\tif ( n !== ear.prev && n !== ear.next &&\n\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) &&\n\t\t\tarea( n.prev, n, n.next ) >= 0 ) return false;\n\t\tn = n.nextZ;\n\n\t}\n\n\treturn true;\n\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections( start, triangles, dim ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tconst a = p.prev,\n\t\t\tb = p.next.next;\n\n\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\ttriangles.push( a.i / dim );\n\t\t\ttriangles.push( p.i / dim );\n\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t// remove two nodes involved\n\t\t\tremoveNode( p );\n\t\t\tremoveNode( p.next );\n\n\t\t\tp = start = b;\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn filterPoints( p );\n\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t// look for a valid diagonal that divides the polygon into two\n\tlet a = start;\n\tdo {\n\n\t\tlet b = a.next.next;\n\t\twhile ( b !== a.prev ) {\n\n\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t// split the polygon in two by the diagonal\n\t\t\t\tlet c = splitPolygon( a, b );\n\n\t\t\t\t// filter colinear points around the cuts\n\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t// run earcut on each half\n\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tb = b.next;\n\n\t\t}\n\n\t\ta = a.next;\n\n\t} while ( a !== start );\n\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\tconst queue = [];\n\tlet i, len, start, end, list;\n\n\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\tstart = holeIndices[ i ] * dim;\n\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\tlist = linkedList( data, start, end, dim, false );\n\t\tif ( list === list.next ) list.steiner = true;\n\t\tqueue.push( getLeftmost( list ) );\n\n\t}\n\n\tqueue.sort( compareX );\n\n\t// process holes from left to right\n\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\teliminateHole( queue[ i ], outerNode );\n\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t}\n\n\treturn outerNode;\n\n}\n\nfunction compareX( a, b ) {\n\n\treturn a.x - b.x;\n\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole( hole, outerNode ) {\n\n\touterNode = findHoleBridge( hole, outerNode );\n\tif ( outerNode ) {\n\n\t\tconst b = splitPolygon( outerNode, hole );\n\n\t\t// filter collinear points around the cuts\n\t\tfilterPoints( outerNode, outerNode.next );\n\t\tfilterPoints( b, b.next );\n\n\t}\n\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge( hole, outerNode ) {\n\n\tlet p = outerNode;\n\tconst hx = hole.x;\n\tconst hy = hole.y;\n\tlet qx = - Infinity, m;\n\n\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t// segment's endpoint with lesser x will be potential connection point\n\tdo {\n\n\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\tconst x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\tqx = x;\n\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t}\n\n\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== outerNode );\n\n\tif ( ! m ) return null;\n\n\tif ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint\n\n\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t// if there are no points found, we have a valid connection;\n\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\tconst stop = m,\n\t\tmx = m.x,\n\t\tmy = m.y;\n\tlet tanMin = Infinity, tan;\n\n\tp = m;\n\n\tdo {\n\n\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\tif ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {\n\n\t\t\t\tm = p;\n\t\t\t\ttanMin = tan;\n\n\t\t\t}\n\n\t\t}\n\n\t\tp = p.next;\n\n\t} while ( p !== stop );\n\n\treturn m;\n\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector( m, p ) {\n\n\treturn area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;\n\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve( start, minX, minY, invSize ) {\n\n\tlet p = start;\n\tdo {\n\n\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\tp.prevZ = p.prev;\n\t\tp.nextZ = p.next;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\tp.prevZ.nextZ = null;\n\tp.prevZ = null;\n\n\tsortLinked( p );\n\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked( list ) {\n\n\tlet i, p, q, e, tail, numMerges, pSize, qSize,\n\t\tinSize = 1;\n\n\tdo {\n\n\t\tp = list;\n\t\tlist = null;\n\t\ttail = null;\n\t\tnumMerges = 0;\n\n\t\twhile ( p ) {\n\n\t\t\tnumMerges ++;\n\t\t\tq = p;\n\t\t\tpSize = 0;\n\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\tpSize ++;\n\t\t\t\tq = q.nextZ;\n\t\t\t\tif ( ! q ) break;\n\n\t\t\t}\n\n\t\t\tqSize = inSize;\n\n\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\te = p;\n\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\tpSize --;\n\n\t\t\t\t} else {\n\n\t\t\t\t\te = q;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tqSize --;\n\n\t\t\t\t}\n\n\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\telse list = e;\n\n\t\t\t\te.prevZ = tail;\n\t\t\t\ttail = e;\n\n\t\t\t}\n\n\t\t\tp = q;\n\n\t\t}\n\n\t\ttail.nextZ = null;\n\t\tinSize *= 2;\n\n\t} while ( numMerges > 1 );\n\n\treturn list;\n\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t// coords are transformed into non-negative 15-bit integer range\n\tx = 32767 * ( x - minX ) * invSize;\n\ty = 32767 * ( y - minY ) * invSize;\n\n\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\treturn x | ( y << 1 );\n\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost( start ) {\n\n\tlet p = start,\n\t\tleftmost = start;\n\tdo {\n\n\t\tif ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;\n\t\tp = p.next;\n\n\t} while ( p !== start );\n\n\treturn leftmost;\n\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t\t( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t\t( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal( a, b ) {\n\n\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges\n\t\t( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible\n\t\t( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors\n\t\tequals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case\n\n}\n\n// signed area of a triangle\nfunction area( p, q, r ) {\n\n\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n}\n\n// check if two points are equal\nfunction equals( p1, p2 ) {\n\n\treturn p1.x === p2.x && p1.y === p2.y;\n\n}\n\n// check if two segments intersect\nfunction intersects( p1, q1, p2, q2 ) {\n\n\tconst o1 = sign( area( p1, q1, p2 ) );\n\tconst o2 = sign( area( p1, q1, q2 ) );\n\tconst o3 = sign( area( p2, q2, p1 ) );\n\tconst o4 = sign( area( p2, q2, q1 ) );\n\n\tif ( o1 !== o2 && o3 !== o4 ) return true; // general case\n\n\tif ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n\tif ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n\tif ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n\tif ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n\treturn false;\n\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment( p, q, r ) {\n\n\treturn q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );\n\n}\n\nfunction sign( num ) {\n\n\treturn num > 0 ? 1 : num < 0 ? - 1 : 0;\n\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon( a, b ) {\n\n\tlet p = a;\n\tdo {\n\n\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\tintersects( p, p.next, a, b ) ) return true;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn false;\n\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside( a, b ) {\n\n\treturn area( a.prev, a, a.next ) < 0 ?\n\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside( a, b ) {\n\n\tlet p = a,\n\t\tinside = false;\n\tconst px = ( a.x + b.x ) / 2,\n\t\tpy = ( a.y + b.y ) / 2;\n\tdo {\n\n\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )\n\t\t\tinside = ! inside;\n\t\tp = p.next;\n\n\t} while ( p !== a );\n\n\treturn inside;\n\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon( a, b ) {\n\n\tconst a2 = new Node( a.i, a.x, a.y ),\n\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\tan = a.next,\n\t\tbp = b.prev;\n\n\ta.next = b;\n\tb.prev = a;\n\n\ta2.next = an;\n\tan.prev = a2;\n\n\tb2.next = a2;\n\ta2.prev = b2;\n\n\tbp.next = b2;\n\tb2.prev = bp;\n\n\treturn b2;\n\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode( i, x, y, last ) {\n\n\tconst p = new Node( i, x, y );\n\n\tif ( ! last ) {\n\n\t\tp.prev = p;\n\t\tp.next = p;\n\n\t} else {\n\n\t\tp.next = last.next;\n\t\tp.prev = last;\n\t\tlast.next.prev = p;\n\t\tlast.next = p;\n\n\t}\n\n\treturn p;\n\n}\n\nfunction removeNode( p ) {\n\n\tp.next.prev = p.prev;\n\tp.prev.next = p.next;\n\n\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n}\n\nfunction Node( i, x, y ) {\n\n\t// vertex index in coordinates array\n\tthis.i = i;\n\n\t// vertex coordinates\n\tthis.x = x;\n\tthis.y = y;\n\n\t// previous and next vertex nodes in a polygon ring\n\tthis.prev = null;\n\tthis.next = null;\n\n\t// z-order curve value\n\tthis.z = null;\n\n\t// previous and next nodes in z-order\n\tthis.prevZ = null;\n\tthis.nextZ = null;\n\n\t// indicates whether this is a steiner point\n\tthis.steiner = false;\n\n}\n\nfunction signedArea( data, start, end, dim ) {\n\n\tlet sum = 0;\n\tfor ( let i = start, j = end - dim; i < end; i += dim ) {\n\n\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\tj = i;\n\n\t}\n\n\treturn sum;\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/Earcut.js?"); + +/***/ }), + /***/ "./node_modules/three/src/extras/ImageUtils.js": /*!*****************************************************!*\ !*** ./node_modules/three/src/extras/ImageUtils.js ***! @@ -410,6 +730,216 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/extras/PMREMGenerator.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/extras/PMREMGenerator.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PMREMGenerator\": () => (/* binding */ PMREMGenerator)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../objects/Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _cameras_OrthographicCamera_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../cameras/OrthographicCamera.js */ \"./node_modules/three/src/cameras/OrthographicCamera.js\");\n/* harmony import */ var _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../cameras/PerspectiveCamera.js */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n/* harmony import */ var _materials_RawShaderMaterial_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../materials/RawShaderMaterial.js */ \"./node_modules/three/src/materials/RawShaderMaterial.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _renderers_WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../renderers/WebGLRenderTarget.js */ \"./node_modules/three/src/renderers/WebGLRenderTarget.js\");\n/* harmony import */ var _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../materials/MeshBasicMaterial.js */ \"./node_modules/three/src/materials/MeshBasicMaterial.js\");\n/* harmony import */ var _geometries_BoxGeometry_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../geometries/BoxGeometry.js */ \"./node_modules/three/src/geometries/BoxGeometry.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst LOD_MIN = 4;\nconst LOD_MAX = 8;\nconst SIZE_MAX = Math.pow( 2, LOD_MAX );\n\n// The standard deviations (radians) associated with the extra mips. These are\n// chosen to approximate a Trowbridge-Reitz distribution function times the\n// geometric shadowing function. These sigma values squared must match the\n// variance #defines in cube_uv_reflection_fragment.glsl.js.\nconst EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];\n\nconst TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;\n\n// The maximum length of the blur for loop. Smaller sigmas will use fewer\n// samples and exit early, but not recompile the shader.\nconst MAX_SAMPLES = 20;\n\nconst ENCODINGS = {\n\t[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding ]: 0,\n\t[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.sRGBEncoding ]: 1,\n\t[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBEEncoding ]: 2,\n\t[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBM7Encoding ]: 3,\n\t[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBM16Encoding ]: 4,\n\t[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBDEncoding ]: 5,\n\t[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.GammaEncoding ]: 6\n};\n\nconst backgroundMaterial = new _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_11__.MeshBasicMaterial( {\n\tside: _constants_js__WEBPACK_IMPORTED_MODULE_0__.BackSide,\n\tdepthWrite: false,\n\tdepthTest: false,\n} );\nconst backgroundBox = new _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_3__.Mesh( new _geometries_BoxGeometry_js__WEBPACK_IMPORTED_MODULE_12__.BoxBufferGeometry(), backgroundMaterial );\n\nconst _flatCamera = /*@__PURE__*/ new _cameras_OrthographicCamera_js__WEBPACK_IMPORTED_MODULE_4__.OrthographicCamera();\nconst { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes();\nconst _clearColor = /*@__PURE__*/ new _math_Color_js__WEBPACK_IMPORTED_MODULE_9__.Color();\nlet _oldTarget = null;\n\n// Golden Ratio\nconst PHI = ( 1 + Math.sqrt( 5 ) ) / 2;\nconst INV_PHI = 1 / PHI;\n\n// Vertices of a dodecahedron (except the opposites, which represent the\n// same axis), used as axis directions evenly spread on a sphere.\nconst _axisDirections = [\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( 1, 1, 1 ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( - 1, 1, 1 ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( 1, 1, - 1 ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( - 1, 1, - 1 ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( 0, PHI, INV_PHI ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( 0, PHI, - INV_PHI ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( - INV_PHI, 0, PHI ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( PHI, INV_PHI, 0 ),\n\t/*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( - PHI, INV_PHI, 0 ) ];\n\n/**\n * This class generates a Prefiltered, Mipmapped Radiance Environment Map\n * (PMREM) from a cubeMap environment texture. This allows different levels of\n * blur to be quickly accessed based on material roughness. It is packed into a\n * special CubeUV format that allows us to perform custom interpolation so that\n * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap\n * chain, it only goes down to the LOD_MIN level (above), and then creates extra\n * even more filtered 'mips' at the same LOD_MIN resolution, associated with\n * higher roughness levels. In this way we maintain resolution to smoothly\n * interpolate diffuse lighting while limiting sampling computation.\n */\n\nfunction convertLinearToRGBE( color ) {\n\n\tconst maxComponent = Math.max( color.r, color.g, color.b );\n\tconst fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 );\n\tcolor.multiplyScalar( Math.pow( 2.0, - fExp ) );\n\n\tconst alpha = ( fExp + 128.0 ) / 255.0;\n\treturn alpha;\n\n}\n\nclass PMREMGenerator {\n\n\tconstructor( renderer ) {\n\n\t\tthis._renderer = renderer;\n\t\tthis._pingPongRenderTarget = null;\n\n\t\tthis._blurMaterial = _getBlurShader( MAX_SAMPLES );\n\t\tthis._equirectShader = null;\n\t\tthis._cubemapShader = null;\n\n\t\tthis._compileMaterial( this._blurMaterial );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from a supplied Scene, which can be faster than using an\n\t * image if networking bandwidth is low. Optional sigma specifies a blur radius\n\t * in radians to be applied to the scene before PMREM generation. Optional near\n\t * and far planes ensure the scene is rendered in its entirety (the cubeCamera\n\t * is placed at the origin).\n\t */\n\tfromScene( scene, sigma = 0, near = 0.1, far = 100 ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets();\n\n\t\tthis._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );\n\t\tif ( sigma > 0 ) {\n\n\t\t\tthis._blur( cubeUVRenderTarget, 0, 0, sigma );\n\n\t\t}\n\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an equirectangular texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512),\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromEquirectangular( equirectangular ) {\n\n\t\treturn this._fromTexture( equirectangular );\n\n\t}\n\n\t/**\n\t * Generates a PMREM from an cubemap texture, which can be either LDR\n\t * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256,\n\t * as this matches best with the 256 x 256 cubemap output.\n\t */\n\tfromCubemap( cubemap ) {\n\n\t\treturn this._fromTexture( cubemap );\n\n\t}\n\n\t/**\n\t * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileCubemapShader() {\n\n\t\tif ( this._cubemapShader === null ) {\n\n\t\t\tthis._cubemapShader = _getCubemapShader();\n\t\t\tthis._compileMaterial( this._cubemapShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during\n\t * your texture's network fetch for increased concurrency.\n\t */\n\tcompileEquirectangularShader() {\n\n\t\tif ( this._equirectShader === null ) {\n\n\t\t\tthis._equirectShader = _getEquirectShader();\n\t\t\tthis._compileMaterial( this._equirectShader );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,\n\t * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on\n\t * one of them will cause any others to also become unusable.\n\t */\n\tdispose() {\n\n\t\tthis._blurMaterial.dispose();\n\n\t\tif ( this._cubemapShader !== null ) this._cubemapShader.dispose();\n\t\tif ( this._equirectShader !== null ) this._equirectShader.dispose();\n\n\t\tfor ( let i = 0; i < _lodPlanes.length; i ++ ) {\n\n\t\t\t_lodPlanes[ i ].dispose();\n\n\t\t}\n\n\t}\n\n\t// private interface\n\n\t_cleanup( outputTarget ) {\n\n\t\tthis._pingPongRenderTarget.dispose();\n\t\tthis._renderer.setRenderTarget( _oldTarget );\n\t\toutputTarget.scissorTest = false;\n\t\t_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );\n\n\t}\n\n\t_fromTexture( texture ) {\n\n\t\t_oldTarget = this._renderer.getRenderTarget();\n\t\tconst cubeUVRenderTarget = this._allocateTargets( texture );\n\t\tthis._textureToCubeUV( texture, cubeUVRenderTarget );\n\t\tthis._applyPMREM( cubeUVRenderTarget );\n\t\tthis._cleanup( cubeUVRenderTarget );\n\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_allocateTargets( texture ) { // warning: null texture is valid\n\n\t\tconst params = {\n\t\t\tmagFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestFilter,\n\t\t\tminFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestFilter,\n\t\t\tgenerateMipmaps: false,\n\t\t\ttype: _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedByteType,\n\t\t\tformat: _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBEFormat,\n\t\t\tencoding: _isLDR( texture ) ? texture.encoding : _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBEEncoding,\n\t\t\tdepthBuffer: false\n\t\t};\n\n\t\tconst cubeUVRenderTarget = _createRenderTarget( params );\n\t\tcubeUVRenderTarget.depthBuffer = texture ? false : true;\n\t\tthis._pingPongRenderTarget = _createRenderTarget( params );\n\t\treturn cubeUVRenderTarget;\n\n\t}\n\n\t_compileMaterial( material ) {\n\n\t\tconst tmpMesh = new _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_3__.Mesh( _lodPlanes[ 0 ], material );\n\t\tthis._renderer.compile( tmpMesh, _flatCamera );\n\n\t}\n\n\t_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {\n\n\t\tconst fov = 90;\n\t\tconst aspect = 1;\n\t\tconst cubeCamera = new _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_5__.PerspectiveCamera( fov, aspect, near, far );\n\t\tconst upSign = [ 1, - 1, 1, 1, 1, 1 ];\n\t\tconst forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];\n\t\tconst renderer = this._renderer;\n\n\t\tconst originalAutoClear = renderer.autoClear;\n\t\tconst outputEncoding = renderer.outputEncoding;\n\t\tconst toneMapping = renderer.toneMapping;\n\t\trenderer.getClearColor( _clearColor );\n\n\t\trenderer.toneMapping = _constants_js__WEBPACK_IMPORTED_MODULE_0__.NoToneMapping;\n\t\trenderer.outputEncoding = _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding;\n\t\trenderer.autoClear = false;\n\n\t\tlet useSolidColor = false;\n\t\tconst background = scene.background;\n\t\tif ( background ) {\n\n\t\t\tif ( background.isColor ) {\n\n\t\t\t\tbackgroundMaterial.color.copy( background ).convertSRGBToLinear();\n\t\t\t\tscene.background = null;\n\n\t\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\t\tuseSolidColor = true;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tbackgroundMaterial.color.copy( _clearColor ).convertSRGBToLinear();\n\n\t\t\tconst alpha = convertLinearToRGBE( backgroundMaterial.color );\n\t\t\tbackgroundMaterial.opacity = alpha;\n\t\t\tuseSolidColor = true;\n\n\t\t}\n\n\n\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\tconst col = i % 3;\n\t\t\tif ( col == 0 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( forwardSign[ i ], 0, 0 );\n\n\t\t\t} else if ( col == 1 ) {\n\n\t\t\t\tcubeCamera.up.set( 0, 0, upSign[ i ] );\n\t\t\t\tcubeCamera.lookAt( 0, forwardSign[ i ], 0 );\n\n\t\t\t} else {\n\n\t\t\t\tcubeCamera.up.set( 0, upSign[ i ], 0 );\n\t\t\t\tcubeCamera.lookAt( 0, 0, forwardSign[ i ] );\n\n\t\t\t}\n\n\t\t\t_setViewport( cubeUVRenderTarget,\n\t\t\t\tcol * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX );\n\t\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\n\t\t\tif ( useSolidColor ) {\n\n\t\t\t\trenderer.render( backgroundBox, cubeCamera );\n\n\t\t\t}\n\n\t\t\trenderer.render( scene, cubeCamera );\n\n\t\t}\n\n\t\trenderer.toneMapping = toneMapping;\n\t\trenderer.outputEncoding = outputEncoding;\n\t\trenderer.autoClear = originalAutoClear;\n\n\t}\n\n\t_textureToCubeUV( texture, cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\n\t\tif ( texture.isCubeTexture ) {\n\n\t\t\tif ( this._cubemapShader == null ) {\n\n\t\t\t\tthis._cubemapShader = _getCubemapShader();\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( this._equirectShader == null ) {\n\n\t\t\t\tthis._equirectShader = _getEquirectShader();\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader;\n\t\tconst mesh = new _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_3__.Mesh( _lodPlanes[ 0 ], material );\n\n\t\tconst uniforms = material.uniforms;\n\n\t\tuniforms[ 'envMap' ].value = texture;\n\n\t\tif ( ! texture.isCubeTexture ) {\n\n\t\t\tuniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height );\n\n\t\t}\n\n\t\tuniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ];\n\t\tuniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ];\n\n\t\t_setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX );\n\n\t\trenderer.setRenderTarget( cubeUVRenderTarget );\n\t\trenderer.render( mesh, _flatCamera );\n\n\t}\n\n\t_applyPMREM( cubeUVRenderTarget ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst autoClear = renderer.autoClear;\n\t\trenderer.autoClear = false;\n\n\t\tfor ( let i = 1; i < TOTAL_LODS; i ++ ) {\n\n\t\t\tconst sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] );\n\n\t\t\tconst poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];\n\n\t\t\tthis._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );\n\n\t\t}\n\n\t\trenderer.autoClear = autoClear;\n\n\t}\n\n\t/**\n\t * This is a two-pass Gaussian blur for a cubemap. Normally this is done\n\t * vertically and horizontally, but this breaks down on a cube. Here we apply\n\t * the blur latitudinally (around the poles), and then longitudinally (towards\n\t * the poles) to approximate the orthogonally-separable blur. It is least\n\t * accurate at the poles, but still does a decent job.\n\t */\n\t_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {\n\n\t\tconst pingPongRenderTarget = this._pingPongRenderTarget;\n\n\t\tthis._halfBlur(\n\t\t\tcubeUVRenderTarget,\n\t\t\tpingPongRenderTarget,\n\t\t\tlodIn,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'latitudinal',\n\t\t\tpoleAxis );\n\n\t\tthis._halfBlur(\n\t\t\tpingPongRenderTarget,\n\t\t\tcubeUVRenderTarget,\n\t\t\tlodOut,\n\t\t\tlodOut,\n\t\t\tsigma,\n\t\t\t'longitudinal',\n\t\t\tpoleAxis );\n\n\t}\n\n\t_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {\n\n\t\tconst renderer = this._renderer;\n\t\tconst blurMaterial = this._blurMaterial;\n\n\t\tif ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {\n\n\t\t\tconsole.error(\n\t\t\t\t'blur direction must be either latitudinal or longitudinal!' );\n\n\t\t}\n\n\t\t// Number of standard deviations at which to cut off the discrete approximation.\n\t\tconst STANDARD_DEVIATIONS = 3;\n\n\t\tconst blurMesh = new _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_3__.Mesh( _lodPlanes[ lodOut ], blurMaterial );\n\t\tconst blurUniforms = blurMaterial.uniforms;\n\n\t\tconst pixels = _sizeLods[ lodIn ] - 1;\n\t\tconst radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );\n\t\tconst sigmaPixels = sigmaRadians / radiansPerPixel;\n\t\tconst samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;\n\n\t\tif ( samples > MAX_SAMPLES ) {\n\n\t\t\tconsole.warn( `sigmaRadians, ${\n\t\t\t\tsigmaRadians}, is too large and will clip, as it requested ${\n\t\t\t\tsamples} samples when the maximum is set to ${MAX_SAMPLES}` );\n\n\t\t}\n\n\t\tconst weights = [];\n\t\tlet sum = 0;\n\n\t\tfor ( let i = 0; i < MAX_SAMPLES; ++ i ) {\n\n\t\t\tconst x = i / sigmaPixels;\n\t\t\tconst weight = Math.exp( - x * x / 2 );\n\t\t\tweights.push( weight );\n\n\t\t\tif ( i == 0 ) {\n\n\t\t\t\tsum += weight;\n\n\t\t\t} else if ( i < samples ) {\n\n\t\t\t\tsum += 2 * weight;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < weights.length; i ++ ) {\n\n\t\t\tweights[ i ] = weights[ i ] / sum;\n\n\t\t}\n\n\t\tblurUniforms[ 'envMap' ].value = targetIn.texture;\n\t\tblurUniforms[ 'samples' ].value = samples;\n\t\tblurUniforms[ 'weights' ].value = weights;\n\t\tblurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';\n\n\t\tif ( poleAxis ) {\n\n\t\t\tblurUniforms[ 'poleAxis' ].value = poleAxis;\n\n\t\t}\n\n\t\tblurUniforms[ 'dTheta' ].value = radiansPerPixel;\n\t\tblurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn;\n\t\tblurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\t\tblurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ];\n\n\t\tconst outputSize = _sizeLods[ lodOut ];\n\t\tconst x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize );\n\t\tconst y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 );\n\n\t\t_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );\n\t\trenderer.setRenderTarget( targetOut );\n\t\trenderer.render( blurMesh, _flatCamera );\n\n\t}\n\n}\n\nfunction _isLDR( texture ) {\n\n\tif ( texture === undefined || texture.type !== _constants_js__WEBPACK_IMPORTED_MODULE_0__.UnsignedByteType ) return false;\n\n\treturn texture.encoding === _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding || texture.encoding === _constants_js__WEBPACK_IMPORTED_MODULE_0__.sRGBEncoding || texture.encoding === _constants_js__WEBPACK_IMPORTED_MODULE_0__.GammaEncoding;\n\n}\n\nfunction _createPlanes() {\n\n\tconst _lodPlanes = [];\n\tconst _sizeLods = [];\n\tconst _sigmas = [];\n\n\tlet lod = LOD_MAX;\n\n\tfor ( let i = 0; i < TOTAL_LODS; i ++ ) {\n\n\t\tconst sizeLod = Math.pow( 2, lod );\n\t\t_sizeLods.push( sizeLod );\n\t\tlet sigma = 1.0 / sizeLod;\n\n\t\tif ( i > LOD_MAX - LOD_MIN ) {\n\n\t\t\tsigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ];\n\n\t\t} else if ( i == 0 ) {\n\n\t\t\tsigma = 0;\n\n\t\t}\n\n\t\t_sigmas.push( sigma );\n\n\t\tconst texelSize = 1.0 / ( sizeLod - 1 );\n\t\tconst min = - texelSize / 2;\n\t\tconst max = 1 + texelSize / 2;\n\t\tconst uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];\n\n\t\tconst cubeFaces = 6;\n\t\tconst vertices = 6;\n\t\tconst positionSize = 3;\n\t\tconst uvSize = 2;\n\t\tconst faceIndexSize = 1;\n\n\t\tconst position = new Float32Array( positionSize * vertices * cubeFaces );\n\t\tconst uv = new Float32Array( uvSize * vertices * cubeFaces );\n\t\tconst faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );\n\n\t\tfor ( let face = 0; face < cubeFaces; face ++ ) {\n\n\t\t\tconst x = ( face % 3 ) * 2 / 3 - 1;\n\t\t\tconst y = face > 2 ? 0 : - 1;\n\t\t\tconst coordinates = [\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y, 0,\n\t\t\t\tx + 2 / 3, y + 1, 0,\n\t\t\t\tx, y + 1, 0\n\t\t\t];\n\t\t\tposition.set( coordinates, positionSize * vertices * face );\n\t\t\tuv.set( uv1, uvSize * vertices * face );\n\t\t\tconst fill = [ face, face, face, face, face, face ];\n\t\t\tfaceIndex.set( fill, faceIndexSize * vertices * face );\n\n\t\t}\n\n\t\tconst planes = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_2__.BufferGeometry();\n\t\tplanes.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.BufferAttribute( position, positionSize ) );\n\t\tplanes.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.BufferAttribute( uv, uvSize ) );\n\t\tplanes.setAttribute( 'faceIndex', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.BufferAttribute( faceIndex, faceIndexSize ) );\n\t\t_lodPlanes.push( planes );\n\n\t\tif ( lod > LOD_MIN ) {\n\n\t\t\tlod --;\n\n\t\t}\n\n\t}\n\n\treturn { _lodPlanes, _sizeLods, _sigmas };\n\n}\n\nfunction _createRenderTarget( params ) {\n\n\tconst cubeUVRenderTarget = new _renderers_WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_10__.WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params );\n\tcubeUVRenderTarget.texture.mapping = _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeUVReflectionMapping;\n\tcubeUVRenderTarget.texture.name = 'PMREM.cubeUv';\n\tcubeUVRenderTarget.scissorTest = true;\n\treturn cubeUVRenderTarget;\n\n}\n\nfunction _setViewport( target, x, y, width, height ) {\n\n\ttarget.viewport.set( x, y, width, height );\n\ttarget.scissor.set( x, y, width, height );\n\n}\n\nfunction _getBlurShader( maxSamples ) {\n\n\tconst weights = new Float32Array( maxSamples );\n\tconst poleAxis = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( 0, 1, 0 );\n\tconst shaderMaterial = new _materials_RawShaderMaterial_js__WEBPACK_IMPORTED_MODULE_6__.RawShaderMaterial( {\n\n\t\tname: 'SphericalGaussianBlur',\n\n\t\tdefines: { 'n': maxSamples },\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'samples': { value: 1 },\n\t\t\t'weights': { value: weights },\n\t\t\t'latitudinal': { value: false },\n\t\t\t'dTheta': { value: 0 },\n\t\t\t'mipInt': { value: 0 },\n\t\t\t'poleAxis': { value: poleAxis },\n\t\t\t'inputEncoding': { value: ENCODINGS[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform int samples;\n\t\t\tuniform float weights[ n ];\n\t\t\tuniform bool latitudinal;\n\t\t\tuniform float dTheta;\n\t\t\tuniform float mipInt;\n\t\t\tuniform vec3 poleAxis;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getEquirectShader() {\n\n\tconst texelSize = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_7__.Vector2( 1, 1 );\n\tconst shaderMaterial = new _materials_RawShaderMaterial_js__WEBPACK_IMPORTED_MODULE_6__.RawShaderMaterial( {\n\n\t\tname: 'EquirectangularToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'texelSize': { value: texelSize },\n\t\t\t'inputEncoding': { value: ENCODINGS[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCubemapShader() {\n\n\tconst shaderMaterial = new _materials_RawShaderMaterial_js__WEBPACK_IMPORTED_MODULE_6__.RawShaderMaterial( {\n\n\t\tname: 'CubemapToCubeUV',\n\n\t\tuniforms: {\n\t\t\t'envMap': { value: null },\n\t\t\t'inputEncoding': { value: ENCODINGS[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding ] },\n\t\t\t'outputEncoding': { value: ENCODINGS[ _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearEncoding ] }\n\t\t},\n\n\t\tvertexShader: _getCommonVertexShader(),\n\n\t\tfragmentShader: /* glsl */`\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t${ _getEncodings() }\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t`,\n\n\t\tblending: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NoBlending,\n\t\tdepthTest: false,\n\t\tdepthWrite: false\n\n\t} );\n\n\treturn shaderMaterial;\n\n}\n\nfunction _getCommonVertexShader() {\n\n\treturn /* glsl */`\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t`;\n\n}\n\nfunction _getEncodings() {\n\n\treturn /* glsl */`\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t`;\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/PMREMGenerator.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/ShapeUtils.js": +/*!*****************************************************!*\ + !*** ./node_modules/three/src/extras/ShapeUtils.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShapeUtils\": () => (/* binding */ ShapeUtils)\n/* harmony export */ });\n/* harmony import */ var _Earcut_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Earcut.js */ \"./node_modules/three/src/extras/Earcut.js\");\n\n\nconst ShapeUtils = {\n\n\t// calculate area of the contour polygon\n\n\tarea: function ( contour ) {\n\n\t\tconst n = contour.length;\n\t\tlet a = 0.0;\n\n\t\tfor ( let p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t}\n\n\t\treturn a * 0.5;\n\n\t},\n\n\tisClockWise: function ( pts ) {\n\n\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t},\n\n\ttriangulateShape: function ( contour, holes ) {\n\n\t\tconst vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\tconst holeIndices = []; // array of hole indices\n\t\tconst faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\tremoveDupEndPts( contour );\n\t\taddContour( vertices, contour );\n\n\t\t//\n\n\t\tlet holeIndex = contour.length;\n\n\t\tholes.forEach( removeDupEndPts );\n\n\t\tfor ( let i = 0; i < holes.length; i ++ ) {\n\n\t\t\tholeIndices.push( holeIndex );\n\t\t\tholeIndex += holes[ i ].length;\n\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t}\n\n\t\t//\n\n\t\tconst triangles = _Earcut_js__WEBPACK_IMPORTED_MODULE_0__.Earcut.triangulate( vertices, holeIndices );\n\n\t\t//\n\n\t\tfor ( let i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t}\n\n\t\treturn faces;\n\n\t}\n\n};\n\nfunction removeDupEndPts( points ) {\n\n\tconst l = points.length;\n\n\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\tpoints.pop();\n\n\t}\n\n}\n\nfunction addContour( vertices, contour ) {\n\n\tfor ( let i = 0; i < contour.length; i ++ ) {\n\n\t\tvertices.push( contour[ i ].x );\n\t\tvertices.push( contour[ i ].y );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/ShapeUtils.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/core/Curve.js": +/*!*****************************************************!*\ + !*** ./node_modules/three/src/extras/core/Curve.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Curve\": () => (/* binding */ Curve)\n/* harmony export */ });\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n\n\n\n\n\n/**\n * Extensible curve object.\n *\n * Some common of curve methods:\n * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )\n * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )\n * .getPoints(), .getSpacedPoints()\n * .getLength()\n * .updateArcLengths()\n *\n * This following curves inherit from THREE.Curve:\n *\n * -- 2D curves --\n * THREE.ArcCurve\n * THREE.CubicBezierCurve\n * THREE.EllipseCurve\n * THREE.LineCurve\n * THREE.QuadraticBezierCurve\n * THREE.SplineCurve\n *\n * -- 3D curves --\n * THREE.CatmullRomCurve3\n * THREE.CubicBezierCurve3\n * THREE.LineCurve3\n * THREE.QuadraticBezierCurve3\n *\n * A series of curves can be represented as a THREE.CurvePath.\n *\n **/\n\nfunction Curve() {\n\n\tthis.type = 'Curve';\n\n\tthis.arcLengthDivisions = 200;\n\n}\n\nObject.assign( Curve.prototype, {\n\n\t// Virtual base class method to overwrite and implement in subclasses\n\t//\t- t [0 .. 1]\n\n\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\treturn null;\n\n\t},\n\n\t// Get point at relative position in curve according to arc length\n\t// - u [0 .. 1]\n\n\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getPoint( t, optionalTarget );\n\n\t},\n\n\t// Get sequence of points using getPoint( t )\n\n\tgetPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get sequence of points using getPointAt( u )\n\n\tgetSpacedPoints: function ( divisions = 5 ) {\n\n\t\tconst points = [];\n\n\t\tfor ( let d = 0; d <= divisions; d ++ ) {\n\n\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t}\n\n\t\treturn points;\n\n\t},\n\n\t// Get total curve arc length\n\n\tgetLength: function () {\n\n\t\tconst lengths = this.getLengths();\n\t\treturn lengths[ lengths.length - 1 ];\n\n\t},\n\n\t// Get list of cumulative segment lengths\n\n\tgetLengths: function ( divisions ) {\n\n\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\tif ( this.cacheArcLengths &&\n\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t! this.needsUpdate ) {\n\n\t\t\treturn this.cacheArcLengths;\n\n\t\t}\n\n\t\tthis.needsUpdate = false;\n\n\t\tconst cache = [];\n\t\tlet current, last = this.getPoint( 0 );\n\t\tlet sum = 0;\n\n\t\tcache.push( 0 );\n\n\t\tfor ( let p = 1; p <= divisions; p ++ ) {\n\n\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\tsum += current.distanceTo( last );\n\t\t\tcache.push( sum );\n\t\t\tlast = current;\n\n\t\t}\n\n\t\tthis.cacheArcLengths = cache;\n\n\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t},\n\n\tupdateArcLengths: function () {\n\n\t\tthis.needsUpdate = true;\n\t\tthis.getLengths();\n\n\t},\n\n\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\tgetUtoTmapping: function ( u, distance ) {\n\n\t\tconst arcLengths = this.getLengths();\n\n\t\tlet i = 0;\n\t\tconst il = arcLengths.length;\n\n\t\tlet targetArcLength; // The targeted u distance value to get\n\n\t\tif ( distance ) {\n\n\t\t\ttargetArcLength = distance;\n\n\t\t} else {\n\n\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t}\n\n\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\tlet low = 0, high = il - 1, comparison;\n\n\t\twhile ( low <= high ) {\n\n\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\tlow = i + 1;\n\n\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\thigh = i - 1;\n\n\t\t\t} else {\n\n\t\t\t\thigh = i;\n\t\t\t\tbreak;\n\n\t\t\t\t// DONE\n\n\t\t\t}\n\n\t\t}\n\n\t\ti = high;\n\n\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\treturn i / ( il - 1 );\n\n\t\t}\n\n\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\tconst lengthBefore = arcLengths[ i ];\n\t\tconst lengthAfter = arcLengths[ i + 1 ];\n\n\t\tconst segmentLength = lengthAfter - lengthBefore;\n\n\t\t// determine where we are between the 'before' and 'after' points\n\n\t\tconst segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t// add that fractional amount to t\n\n\t\tconst t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\treturn t;\n\n\t},\n\n\t// Returns a unit vector tangent at t\n\t// In case any sub curve does not implement its tangent derivation,\n\t// 2 points a small delta apart will be used to find its gradient\n\t// which seems to give a reasonable approximation\n\n\tgetTangent: function ( t, optionalTarget ) {\n\n\t\tconst delta = 0.0001;\n\t\tlet t1 = t - delta;\n\t\tlet t2 = t + delta;\n\n\t\t// Capping in case of danger\n\n\t\tif ( t1 < 0 ) t1 = 0;\n\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\tconst pt1 = this.getPoint( t1 );\n\t\tconst pt2 = this.getPoint( t2 );\n\n\t\tconst tangent = optionalTarget || ( ( pt1.isVector2 ) ? new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2() : new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3() );\n\n\t\ttangent.copy( pt2 ).sub( pt1 ).normalize();\n\n\t\treturn tangent;\n\n\t},\n\n\tgetTangentAt: function ( u, optionalTarget ) {\n\n\t\tconst t = this.getUtoTmapping( u );\n\t\treturn this.getTangent( t, optionalTarget );\n\n\t},\n\n\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\tconst normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\tconst tangents = [];\n\t\tconst normals = [];\n\t\tconst binormals = [];\n\n\t\tconst vec = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst mat = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_3__.Matrix4();\n\n\t\t// compute the tangent vectors for each segment on the curve\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst u = i / segments;\n\n\t\t\ttangents[ i ] = this.getTangentAt( u, new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3() );\n\t\t\ttangents[ i ].normalize();\n\n\t\t}\n\n\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t// and in the direction of the minimum tangent xyz component\n\n\t\tnormals[ 0 ] = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tbinormals[ 0 ] = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tlet min = Number.MAX_VALUE;\n\t\tconst tx = Math.abs( tangents[ 0 ].x );\n\t\tconst ty = Math.abs( tangents[ 0 ].y );\n\t\tconst tz = Math.abs( tangents[ 0 ].z );\n\n\t\tif ( tx <= min ) {\n\n\t\t\tmin = tx;\n\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t}\n\n\t\tif ( ty <= min ) {\n\n\t\t\tmin = ty;\n\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t}\n\n\t\tif ( tz <= min ) {\n\n\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t}\n\n\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\tvec.normalize();\n\n\t\t\t\tconst theta = Math.acos( _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t}\n\n\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t}\n\n\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\tif ( closed === true ) {\n\n\t\t\tlet theta = Math.acos( _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\ttheta /= segments;\n\n\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\ttheta = - theta;\n\n\t\t\t}\n\n\t\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t// twist a little...\n\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttangents: tangents,\n\t\t\tnormals: normals,\n\t\t\tbinormals: binormals\n\t\t};\n\n\t},\n\n\tclone: function () {\n\n\t\treturn new this.constructor().copy( this );\n\n\t},\n\n\tcopy: function ( source ) {\n\n\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\treturn this;\n\n\t},\n\n\ttoJSON: function () {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Curve',\n\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t}\n\t\t};\n\n\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\tdata.type = this.type;\n\n\t\treturn data;\n\n\t},\n\n\tfromJSON: function ( json ) {\n\n\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\treturn this;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/core/Curve.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/core/CurvePath.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/extras/core/CurvePath.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CurvePath\": () => (/* binding */ CurvePath)\n/* harmony export */ });\n/* harmony import */ var _Curve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _curves_Curves_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../curves/Curves.js */ \"./node_modules/three/src/extras/curves/Curves.js\");\n\n\n\n/**************************************************************\n *\tCurved Path - a curve path is simply a array of connected\n * curves, but retains the api of a curve\n **************************************************************/\n\nclass CurvePath extends _Curve_js__WEBPACK_IMPORTED_MODULE_0__.Curve {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tadd( curve ) {\n\n\t\tthis.curves.push( curve );\n\n\t}\n\n\tclosePath() {\n\n\t\t// Add a line curve if start and end of lines are not connected\n\t\tconst startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\tconst endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\tthis.curves.push( new _curves_Curves_js__WEBPACK_IMPORTED_MODULE_1__.LineCurve( endPoint, startPoint ) );\n\n\t\t}\n\n\t}\n\n\t// To get accurate point with reference to\n\t// entire path distance at time t,\n\t// following has to be done:\n\n\t// 1. Length of each sub path have to be known\n\t// 2. Locate and identify type of curve\n\t// 3. Get t for the curve\n\t// 4. Return curve.getPointAt(t')\n\n\tgetPoint( t ) {\n\n\t\tconst d = t * this.getLength();\n\t\tconst curveLengths = this.getCurveLengths();\n\t\tlet i = 0;\n\n\t\t// To think about boundaries points.\n\n\t\twhile ( i < curveLengths.length ) {\n\n\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\tconst diff = curveLengths[ i ] - d;\n\t\t\t\tconst curve = this.curves[ i ];\n\n\t\t\t\tconst segmentLength = curve.getLength();\n\t\t\t\tconst u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t}\n\n\t\t\ti ++;\n\n\t\t}\n\n\t\treturn null;\n\n\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.push( points[ 0 ] );\n\n\t\t}\n\n\t\treturn points;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = source.curves[ i ];\n\n\t\t\tthis.curves.push( curve.clone() );\n\n\t\t}\n\n\t\tthis.autoClose = source.autoClose;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.autoClose = this.autoClose;\n\t\tdata.curves = [];\n\n\t\tfor ( let i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = this.curves[ i ];\n\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.autoClose = json.autoClose;\n\t\tthis.curves = [];\n\n\t\tfor ( let i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\tconst curve = json.curves[ i ];\n\t\t\tthis.curves.push( new _curves_Curves_js__WEBPACK_IMPORTED_MODULE_1__[ curve.type ]().fromJSON( curve ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/core/CurvePath.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/core/Font.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/extras/core/Font.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Font\": () => (/* binding */ Font)\n/* harmony export */ });\n/* harmony import */ var _ShapePath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ShapePath.js */ \"./node_modules/three/src/extras/core/ShapePath.js\");\n\n\nclass Font {\n\n\tconstructor( data ) {\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\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\tArray.prototype.push.apply( shapes, 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_js__WEBPACK_IMPORTED_MODULE_0__.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\nFont.prototype.isFont = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/core/Font.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/core/Interpolations.js": +/*!**************************************************************!*\ + !*** ./node_modules/three/src/extras/core/Interpolations.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CatmullRom\": () => (/* binding */ CatmullRom),\n/* harmony export */ \"QuadraticBezier\": () => (/* binding */ QuadraticBezier),\n/* harmony export */ \"CubicBezier\": () => (/* binding */ CubicBezier)\n/* harmony export */ });\n/**\n * Bezier Curves formulas obtained from\n * http://en.wikipedia.org/wiki/Bézier_curve\n */\n\nfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\tconst v0 = ( p2 - p0 ) * 0.5;\n\tconst v1 = ( p3 - p1 ) * 0.5;\n\tconst t2 = t * t;\n\tconst t3 = t * t2;\n\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n}\n\n//\n\nfunction QuadraticBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * p;\n\n}\n\nfunction QuadraticBezierP1( t, p ) {\n\n\treturn 2 * ( 1 - t ) * t * p;\n\n}\n\nfunction QuadraticBezierP2( t, p ) {\n\n\treturn t * t * p;\n\n}\n\nfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\tQuadraticBezierP2( t, p2 );\n\n}\n\n//\n\nfunction CubicBezierP0( t, p ) {\n\n\tconst k = 1 - t;\n\treturn k * k * k * p;\n\n}\n\nfunction CubicBezierP1( t, p ) {\n\n\tconst k = 1 - t;\n\treturn 3 * k * k * t * p;\n\n}\n\nfunction CubicBezierP2( t, p ) {\n\n\treturn 3 * ( 1 - t ) * t * t * p;\n\n}\n\nfunction CubicBezierP3( t, p ) {\n\n\treturn t * t * t * p;\n\n}\n\nfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\tCubicBezierP3( t, p3 );\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/core/Interpolations.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/core/Path.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/extras/core/Path.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Path\": () => (/* binding */ Path)\n/* harmony export */ });\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _CurvePath_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CurvePath.js */ \"./node_modules/three/src/extras/core/CurvePath.js\");\n/* harmony import */ var _curves_EllipseCurve_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../curves/EllipseCurve.js */ \"./node_modules/three/src/extras/curves/EllipseCurve.js\");\n/* harmony import */ var _curves_SplineCurve_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../curves/SplineCurve.js */ \"./node_modules/three/src/extras/curves/SplineCurve.js\");\n/* harmony import */ var _curves_CubicBezierCurve_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../curves/CubicBezierCurve.js */ \"./node_modules/three/src/extras/curves/CubicBezierCurve.js\");\n/* harmony import */ var _curves_QuadraticBezierCurve_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../curves/QuadraticBezierCurve.js */ \"./node_modules/three/src/extras/curves/QuadraticBezierCurve.js\");\n/* harmony import */ var _curves_LineCurve_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../curves/LineCurve.js */ \"./node_modules/three/src/extras/curves/LineCurve.js\");\n\n\n\n\n\n\n\n\nclass Path extends _CurvePath_js__WEBPACK_IMPORTED_MODULE_1__.CurvePath {\n\n\tconstructor( points ) {\n\n\t\tsuper();\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\tfor ( let i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tconst curve = new _curves_LineCurve_js__WEBPACK_IMPORTED_MODULE_2__.LineCurve( this.currentPoint.clone(), new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( x, y ) );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tconst curve = new _curves_QuadraticBezierCurve_js__WEBPACK_IMPORTED_MODULE_3__.QuadraticBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( aCPx, aCPy ),\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tconst curve = new _curves_CubicBezierCurve_js__WEBPACK_IMPORTED_MODULE_4__.CubicBezierCurve(\n\t\t\tthis.currentPoint.clone(),\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( aCP1x, aCP1y ),\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( aCP2x, aCP2y ),\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( aX, aY )\n\t\t);\n\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.set( aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts /*Array of Vector*/ ) {\n\n\t\tconst npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\tconst curve = new _curves_SplineCurve_js__WEBPACK_IMPORTED_MODULE_5__.SplineCurve( npts );\n\t\tthis.curves.push( curve );\n\n\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\treturn this;\n\n\t}\n\n\tarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tabsarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\treturn this;\n\n\t}\n\n\tellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst x0 = this.currentPoint.x;\n\t\tconst y0 = this.currentPoint.y;\n\n\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\treturn this;\n\n\t}\n\n\tabsellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tconst curve = new _curves_EllipseCurve_js__WEBPACK_IMPORTED_MODULE_6__.EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t// if a previous curve is present, attempt to join\n\t\t\tconst firstPoint = curve.getPoint( 0 );\n\n\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.curves.push( curve );\n\n\t\tconst lastPoint = curve.getPoint( 1 );\n\t\tthis.currentPoint.copy( lastPoint );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/core/Path.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/core/Shape.js": +/*!*****************************************************!*\ + !*** ./node_modules/three/src/extras/core/Shape.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Shape\": () => (/* binding */ Shape)\n/* harmony export */ });\n/* harmony import */ var _Path_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Path.js */ \"./node_modules/three/src/extras/core/Path.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n\n\n\nclass Shape extends _Path_js__WEBPACK_IMPORTED_MODULE_0__.Path {\n\n\tconstructor( points ) {\n\n\t\tsuper( points );\n\n\t\tthis.uuid = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__.MathUtils.generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tgetPointsHoles( divisions ) {\n\n\t\tconst holesPts = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t}\n\n\t\treturn holesPts;\n\n\t}\n\n\t// get points of shape and holes (keypoints based on segments parameter)\n\n\textractPoints( divisions ) {\n\n\t\treturn {\n\n\t\t\tshape: this.getPoints( divisions ),\n\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t};\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = source.holes[ i ];\n\n\t\t\tthis.holes.push( hole.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.uuid = this.uuid;\n\t\tdata.holes = [];\n\n\t\tfor ( let i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = this.holes[ i ];\n\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.uuid = json.uuid;\n\t\tthis.holes = [];\n\n\t\tfor ( let i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\tconst hole = json.holes[ i ];\n\t\t\tthis.holes.push( new _Path_js__WEBPACK_IMPORTED_MODULE_0__.Path().fromJSON( hole ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/core/Shape.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/core/ShapePath.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/extras/core/ShapePath.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShapePath\": () => (/* binding */ ShapePath)\n/* harmony export */ });\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _Path_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Path.js */ \"./node_modules/three/src/extras/core/Path.js\");\n/* harmony import */ var _Shape_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Shape.js */ \"./node_modules/three/src/extras/core/Shape.js\");\n/* harmony import */ var _ShapeUtils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ShapeUtils.js */ \"./node_modules/three/src/extras/ShapeUtils.js\");\n\n\n\n\n\nclass ShapePath {\n\n\tconstructor() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tmoveTo( x, y ) {\n\n\t\tthis.currentPath = new _Path_js__WEBPACK_IMPORTED_MODULE_1__.Path();\n\t\tthis.subPaths.push( this.currentPath );\n\t\tthis.currentPath.moveTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tlineTo( x, y ) {\n\n\t\tthis.currentPath.lineTo( x, y );\n\n\t\treturn this;\n\n\t}\n\n\tquadraticCurveTo( aCPx, aCPy, aX, aY ) {\n\n\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tbezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\treturn this;\n\n\t}\n\n\tsplineThru( pts ) {\n\n\t\tthis.currentPath.splineThru( pts );\n\n\t\treturn this;\n\n\t}\n\n\ttoShapes( isCCW, noHoles ) {\n\n\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\tconst shapes = [];\n\n\t\t\tfor ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\tconst tmpPath = inSubpaths[ i ];\n\n\t\t\t\tconst tmpShape = new _Shape_js__WEBPACK_IMPORTED_MODULE_2__.Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\tconst polyLen = inPolygon.length;\n\n\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\tlet inside = false;\n\t\t\tfor ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\tlet edgeLowPt = inPolygon[ p ];\n\t\t\t\tlet edgeHighPt = inPolygon[ q ];\n\n\t\t\t\tlet edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\tlet edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not parallel\n\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// parallel or collinear\n\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t// continue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn\tinside;\n\n\t\t}\n\n\t\tconst isClockWise = _ShapeUtils_js__WEBPACK_IMPORTED_MODULE_3__.ShapeUtils.isClockWise;\n\n\t\tconst subPaths = this.subPaths;\n\t\tif ( subPaths.length === 0 ) return [];\n\n\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tlet solid, tmpPath, tmpShape;\n\t\tconst shapes = [];\n\n\t\tif ( subPaths.length === 1 ) {\n\n\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\ttmpShape = new _Shape_js__WEBPACK_IMPORTED_MODULE_2__.Shape();\n\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\tshapes.push( tmpShape );\n\t\t\treturn shapes;\n\n\t\t}\n\n\t\tlet holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\tconst betterShapeHoles = [];\n\t\tconst newShapes = [];\n\t\tlet newShapeHoles = [];\n\t\tlet mainIdx = 0;\n\t\tlet tmpPoints;\n\n\t\tnewShapes[ mainIdx ] = undefined;\n\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\tfor ( let i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\ttmpPath = subPaths[ i ];\n\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\tif ( solid ) {\n\n\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\tnewShapes[ mainIdx ] = { s: new _Shape_js__WEBPACK_IMPORTED_MODULE_2__.Shape(), p: tmpPoints };\n\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t//console.log('cw', i);\n\n\t\t\t} else {\n\n\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t//console.log('ccw', i);\n\n\t\t\t}\n\n\t\t}\n\n\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\tif ( newShapes.length > 1 ) {\n\n\t\t\tlet ambiguous = false;\n\t\t\tconst toChange = [];\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t}\n\n\t\t\tfor ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\tconst sho = newShapeHoles[ sIdx ];\n\n\t\t\t\tfor ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\tconst ho = sho[ hIdx ];\n\t\t\t\t\tlet hole_unassigned = true;\n\n\t\t\t\t\tfor ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tambiguous = true;\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\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\n\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlet tmpHoles;\n\n\t\tfor ( let i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\tshapes.push( tmpShape );\n\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\tfor ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//console.log(\"shape\", shapes);\n\n\t\treturn shapes;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/core/ShapePath.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/ArcCurve.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/extras/curves/ArcCurve.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ArcCurve\": () => (/* binding */ ArcCurve)\n/* harmony export */ });\n/* harmony import */ var _EllipseCurve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./EllipseCurve.js */ \"./node_modules/three/src/extras/curves/EllipseCurve.js\");\n\n\nclass ArcCurve extends _EllipseCurve_js__WEBPACK_IMPORTED_MODULE_0__.EllipseCurve {\n\n\tconstructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tsuper( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n}\n\nArcCurve.prototype.isArcCurve = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/ArcCurve.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/CatmullRomCurve3.js": +/*!******************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/CatmullRomCurve3.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CatmullRomCurve3\": () => (/* binding */ CatmullRomCurve3)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n\n\n\n/**\n * Centripetal CatmullRom Curve - which is useful for avoiding\n * cusps and self-intersections in non-uniform catmull rom curves.\n * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n *\n * curve.type accepts centripetal(default), chordal and catmullrom\n * curve.tension is used for catmullrom which defaults to 0.5\n */\n\n\n/*\nBased on an optimized c++ solution in\n - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n - http://ideone.com/NoEbVM\n\nThis CubicPoly class could be used for reusing some variables and calculations,\nbut for three.js curve use, it could be possible inlined and flatten into a single function call\nwhich can be placed in CurveUtils.\n*/\n\nfunction CubicPoly() {\n\n\tlet c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t/*\n\t * Compute coefficients for a cubic polynomial\n\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t * such that\n\t * p(0) = x0, p(1) = x1\n\t * and\n\t * p'(0) = t0, p'(1) = t1.\n\t */\n\tfunction init( x0, x1, t0, t1 ) {\n\n\t\tc0 = x0;\n\t\tc1 = t0;\n\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t}\n\n\treturn {\n\n\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t},\n\n\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\tlet t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\tlet t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\tt1 *= dt1;\n\t\t\tt2 *= dt1;\n\n\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t},\n\n\t\tcalc: function ( t ) {\n\n\t\t\tconst t2 = t * t;\n\t\t\tconst t3 = t2 * t;\n\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t}\n\n\t};\n\n}\n\n//\n\nconst tmp = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\nclass CatmullRomCurve3 extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_1__.Curve {\n\n\tconstructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points;\n\t\tthis.closed = closed;\n\t\tthis.curveType = curveType;\n\t\tthis.tension = tension;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst l = points.length;\n\n\t\tconst p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tlet intPoint = Math.floor( p );\n\t\tlet weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tlet p0, p3; // 4 points (p1 & p2 defined below)\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tconst p1 = points[ intPoint % l ];\n\t\tconst p2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tconst pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tlet dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tlet dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tlet dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t}\n\n}\n\nCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/CatmullRomCurve3.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/CubicBezierCurve.js": +/*!******************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/CubicBezierCurve.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CubicBezierCurve\": () => (/* binding */ CubicBezierCurve)\n/* harmony export */ });\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Interpolations.js */ \"./node_modules/three/src/extras/core/Interpolations.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\n\n\nclass CubicBezierCurve extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__.Curve {\n\n\tconstructor( v0 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2(), v1 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2(), v2 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2(), v3 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.CubicBezier)( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.CubicBezier)( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/CubicBezierCurve.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/CubicBezierCurve3.js": +/*!*******************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/CubicBezierCurve3.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CubicBezierCurve3\": () => (/* binding */ CubicBezierCurve3)\n/* harmony export */ });\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Interpolations.js */ \"./node_modules/three/src/extras/core/Interpolations.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\nclass CubicBezierCurve3 extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__.Curve {\n\n\tconstructor( v0 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3(), v1 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3(), v2 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3(), v3 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\t\tthis.v3 = v3;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.CubicBezier)( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.CubicBezier)( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.CubicBezier)( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/CubicBezierCurve3.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/Curves.js": +/*!********************************************************!*\ + !*** ./node_modules/three/src/extras/curves/Curves.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ArcCurve\": () => (/* reexport safe */ _ArcCurve_js__WEBPACK_IMPORTED_MODULE_0__.ArcCurve),\n/* harmony export */ \"CatmullRomCurve3\": () => (/* reexport safe */ _CatmullRomCurve3_js__WEBPACK_IMPORTED_MODULE_1__.CatmullRomCurve3),\n/* harmony export */ \"CubicBezierCurve\": () => (/* reexport safe */ _CubicBezierCurve_js__WEBPACK_IMPORTED_MODULE_2__.CubicBezierCurve),\n/* harmony export */ \"CubicBezierCurve3\": () => (/* reexport safe */ _CubicBezierCurve3_js__WEBPACK_IMPORTED_MODULE_3__.CubicBezierCurve3),\n/* harmony export */ \"EllipseCurve\": () => (/* reexport safe */ _EllipseCurve_js__WEBPACK_IMPORTED_MODULE_4__.EllipseCurve),\n/* harmony export */ \"LineCurve\": () => (/* reexport safe */ _LineCurve_js__WEBPACK_IMPORTED_MODULE_5__.LineCurve),\n/* harmony export */ \"LineCurve3\": () => (/* reexport safe */ _LineCurve3_js__WEBPACK_IMPORTED_MODULE_6__.LineCurve3),\n/* harmony export */ \"QuadraticBezierCurve\": () => (/* reexport safe */ _QuadraticBezierCurve_js__WEBPACK_IMPORTED_MODULE_7__.QuadraticBezierCurve),\n/* harmony export */ \"QuadraticBezierCurve3\": () => (/* reexport safe */ _QuadraticBezierCurve3_js__WEBPACK_IMPORTED_MODULE_8__.QuadraticBezierCurve3),\n/* harmony export */ \"SplineCurve\": () => (/* reexport safe */ _SplineCurve_js__WEBPACK_IMPORTED_MODULE_9__.SplineCurve)\n/* harmony export */ });\n/* harmony import */ var _ArcCurve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ArcCurve.js */ \"./node_modules/three/src/extras/curves/ArcCurve.js\");\n/* harmony import */ var _CatmullRomCurve3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CatmullRomCurve3.js */ \"./node_modules/three/src/extras/curves/CatmullRomCurve3.js\");\n/* harmony import */ var _CubicBezierCurve_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./CubicBezierCurve.js */ \"./node_modules/three/src/extras/curves/CubicBezierCurve.js\");\n/* harmony import */ var _CubicBezierCurve3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CubicBezierCurve3.js */ \"./node_modules/three/src/extras/curves/CubicBezierCurve3.js\");\n/* harmony import */ var _EllipseCurve_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./EllipseCurve.js */ \"./node_modules/three/src/extras/curves/EllipseCurve.js\");\n/* harmony import */ var _LineCurve_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./LineCurve.js */ \"./node_modules/three/src/extras/curves/LineCurve.js\");\n/* harmony import */ var _LineCurve3_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./LineCurve3.js */ \"./node_modules/three/src/extras/curves/LineCurve3.js\");\n/* harmony import */ var _QuadraticBezierCurve_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./QuadraticBezierCurve.js */ \"./node_modules/three/src/extras/curves/QuadraticBezierCurve.js\");\n/* harmony import */ var _QuadraticBezierCurve3_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./QuadraticBezierCurve3.js */ \"./node_modules/three/src/extras/curves/QuadraticBezierCurve3.js\");\n/* harmony import */ var _SplineCurve_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./SplineCurve.js */ \"./node_modules/three/src/extras/curves/SplineCurve.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/Curves.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/EllipseCurve.js": +/*!**************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/EllipseCurve.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EllipseCurve\": () => (/* binding */ EllipseCurve)\n/* harmony export */ });\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\n\nclass EllipseCurve extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__.Curve {\n\n\tconstructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX;\n\t\tthis.aY = aY;\n\n\t\tthis.xRadius = xRadius;\n\t\tthis.yRadius = yRadius;\n\n\t\tthis.aStartAngle = aStartAngle;\n\t\tthis.aEndAngle = aEndAngle;\n\n\t\tthis.aClockwise = aClockwise;\n\n\t\tthis.aRotation = aRotation;\n\n\t}\n\n\tgetPoint( t, optionalTarget ) {\n\n\t\tconst point = optionalTarget || new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2();\n\n\t\tconst twoPi = Math.PI * 2;\n\t\tlet deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tconst samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst angle = this.aStartAngle + t * deltaAngle;\n\t\tlet x = this.aX + this.xRadius * Math.cos( angle );\n\t\tlet y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tconst cos = Math.cos( this.aRotation );\n\t\t\tconst sin = Math.sin( this.aRotation );\n\n\t\t\tconst tx = x - this.aX;\n\t\t\tconst ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t}\n\n}\n\nEllipseCurve.prototype.isEllipseCurve = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/EllipseCurve.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/LineCurve.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/extras/curves/LineCurve.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LineCurve\": () => (/* binding */ LineCurve)\n/* harmony export */ });\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n\n\n\nclass LineCurve extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_1__.Curve {\n\n\tconstructor( v1 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2(), v2 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\n\tgetTangent( t, optionalTarget ) {\n\n\t\tconst tangent = optionalTarget || new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\ttangent.copy( this.v2 ).sub( this.v1 ).normalize();\n\n\t\treturn tangent;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nLineCurve.prototype.isLineCurve = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/LineCurve.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/LineCurve3.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/LineCurve3.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LineCurve3\": () => (/* binding */ LineCurve3)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n\n\n\nclass LineCurve3 extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_1__.Curve {\n\n\tconstructor( v1 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3(), v2 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LineCurve3';\n\t\tthis.isLineCurve3 = true;\n\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\tgetPoint( t, optionalTarget = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t}\n\t// Line curve is linear, so we can overwrite default getPointAt\n\tgetPointAt( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t}\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/LineCurve3.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/QuadraticBezierCurve.js": +/*!**********************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/QuadraticBezierCurve.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"QuadraticBezierCurve\": () => (/* binding */ QuadraticBezierCurve)\n/* harmony export */ });\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Interpolations.js */ \"./node_modules/three/src/extras/core/Interpolations.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\n\n\nclass QuadraticBezierCurve extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__.Curve {\n\n\tconstructor( v0 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2(), v1 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2(), v2 = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.QuadraticBezier)( t, v0.x, v1.x, v2.x ),\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.QuadraticBezier)( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/QuadraticBezierCurve.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/QuadraticBezierCurve3.js": +/*!***********************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/QuadraticBezierCurve3.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"QuadraticBezierCurve3\": () => (/* binding */ QuadraticBezierCurve3)\n/* harmony export */ });\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Interpolations.js */ \"./node_modules/three/src/extras/core/Interpolations.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\nclass QuadraticBezierCurve3 extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__.Curve {\n\n\tconstructor( v0 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3(), v1 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3(), v2 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3() ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0;\n\t\tthis.v1 = v1;\n\t\tthis.v2 = v2;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.QuadraticBezier)( t, v0.x, v1.x, v2.x ),\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.QuadraticBezier)( t, v0.y, v1.y, v2.y ),\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.QuadraticBezier)( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t}\n\n}\n\nQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/QuadraticBezierCurve3.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/curves/SplineCurve.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/extras/curves/SplineCurve.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SplineCurve\": () => (/* binding */ SplineCurve)\n/* harmony export */ });\n/* harmony import */ var _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Curve.js */ \"./node_modules/three/src/extras/core/Curve.js\");\n/* harmony import */ var _core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Interpolations.js */ \"./node_modules/three/src/extras/core/Interpolations.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\n\n\nclass SplineCurve extends _core_Curve_js__WEBPACK_IMPORTED_MODULE_0__.Curve {\n\n\tconstructor( points = [] ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points;\n\n\t}\n\n\tgetPoint( t, optionalTarget = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2() ) {\n\n\t\tconst point = optionalTarget;\n\n\t\tconst points = this.points;\n\t\tconst p = ( points.length - 1 ) * t;\n\n\t\tconst intPoint = Math.floor( p );\n\t\tconst weight = p - intPoint;\n\n\t\tconst p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tconst p1 = points[ intPoint ];\n\t\tconst p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tconst p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.CatmullRom)( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\t(0,_core_Interpolations_js__WEBPACK_IMPORTED_MODULE_2__.CatmullRom)( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = super.toJSON();\n\n\t\tdata.points = [];\n\n\t\tfor ( let i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tsuper.fromJSON( json );\n\n\t\tthis.points = [];\n\n\t\tfor ( let i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tconst point = json.points[ i ];\n\t\t\tthis.points.push( new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n}\n\nSplineCurve.prototype.isSplineCurve = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/curves/SplineCurve.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/extras/objects/ImmediateRenderObject.js": +/*!************************************************************************!*\ + !*** ./node_modules/three/src/extras/objects/ImmediateRenderObject.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ImmediateRenderObject\": () => (/* binding */ ImmediateRenderObject)\n/* harmony export */ });\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n\n\nfunction ImmediateRenderObject( material ) {\n\n\t_core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__.Object3D.call( this );\n\n\tthis.material = material;\n\tthis.render = function ( /* renderCallback */ ) {};\n\n\tthis.hasPositions = false;\n\tthis.hasNormals = false;\n\tthis.hasColors = false;\n\tthis.hasUvs = false;\n\n\tthis.positionArray = null;\n\tthis.normalArray = null;\n\tthis.colorArray = null;\n\tthis.uvArray = null;\n\n\tthis.count = 0;\n\n}\n\nImmediateRenderObject.prototype = Object.create( _core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__.Object3D.prototype );\nImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\nImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/extras/objects/ImmediateRenderObject.js?"); + +/***/ }), + /***/ "./node_modules/three/src/geometries/BoxGeometry.js": /*!**********************************************************!*\ !*** ./node_modules/three/src/geometries/BoxGeometry.js ***! @@ -420,6 +950,116 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/geometries/CircleGeometry.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/geometries/CircleGeometry.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CircleGeometry\": () => (/* binding */ CircleGeometry),\n/* harmony export */ \"CircleBufferGeometry\": () => (/* binding */ CircleGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\n\n\n\nclass CircleGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tsegments = Math.max( 3, segments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst uv = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__.Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tconst segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/CircleGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/ConeGeometry.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/geometries/ConeGeometry.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ConeGeometry\": () => (/* binding */ ConeGeometry),\n/* harmony export */ \"ConeBufferGeometry\": () => (/* binding */ ConeGeometry)\n/* harmony export */ });\n/* harmony import */ var _CylinderGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./CylinderGeometry.js */ \"./node_modules/three/src/geometries/CylinderGeometry.js\");\n\n\nclass ConeGeometry extends _CylinderGeometry_js__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry {\n\n\tconstructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/ConeGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/CylinderGeometry.js": +/*!***************************************************************!*\ + !*** ./node_modules/three/src/geometries/CylinderGeometry.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CylinderGeometry\": () => (/* binding */ CylinderGeometry),\n/* harmony export */ \"CylinderBufferGeometry\": () => (/* binding */ CylinderGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\n\n\n\nclass CylinderGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tconst scope = this;\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\theightSegments = Math.floor( heightSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet index = 0;\n\t\tconst indexArray = [];\n\t\tconst halfHeight = height / 2;\n\t\tlet groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tconst normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tconst slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( let y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tconst indexRow = [];\n\n\t\t\t\tconst v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tconst radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tconst u = x / radialSegments;\n\n\t\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tconst sinTheta = Math.sin( theta );\n\t\t\t\t\tconst cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( let y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tconst a = indexArray[ y ][ x ];\n\t\t\t\t\tconst b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tconst c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tconst d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\t// save the index of the first center vertex\n\t\t\tconst centerIndexStart = index;\n\n\t\t\tconst uv = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__.Vector2();\n\t\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\tlet groupCount = 0;\n\n\t\t\tconst radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tconst sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( let x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\t\t\tconst centerIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( let x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tconst u = x / radialSegments;\n\t\t\t\tconst theta = u * thetaLength + thetaStart;\n\n\t\t\t\tconst cosTheta = Math.cos( theta );\n\t\t\t\tconst sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( let x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tconst c = centerIndexStart + x;\n\t\t\t\tconst i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/CylinderGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/DodecahedronGeometry.js": +/*!*******************************************************************!*\ + !*** ./node_modules/three/src/geometries/DodecahedronGeometry.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DodecahedronGeometry\": () => (/* binding */ DodecahedronGeometry),\n/* harmony export */ \"DodecahedronBufferGeometry\": () => (/* binding */ DodecahedronGeometry)\n/* harmony export */ });\n/* harmony import */ var _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PolyhedronGeometry.js */ \"./node_modules/three/src/geometries/PolyhedronGeometry.js\");\n\n\nclass DodecahedronGeometry extends _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__.PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tconst r = 1 / t;\n\n\t\tconst vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t0, - r, - t, 0, - r, t,\n\t\t\t0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\tr, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tconst indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/DodecahedronGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/EdgesGeometry.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/geometries/EdgesGeometry.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"EdgesGeometry\": () => (/* binding */ EdgesGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _math_Triangle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Triangle.js */ \"./node_modules/three/src/math/Triangle.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\n\n\nconst _v0 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3();\nconst _v1 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3();\nconst _normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3();\nconst _triangle = new _math_Triangle_js__WEBPACK_IMPORTED_MODULE_3__.Triangle();\n\nclass EdgesGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( geometry, thresholdAngle ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\tif ( geometry.isGeometry === true ) {\n\n\t\t\tconsole.error( 'THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\tconst precisionPoints = 4;\n\t\tconst precision = Math.pow( 10, precisionPoints );\n\t\tconst thresholdDot = Math.cos( _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.MathUtils.DEG2RAD * thresholdAngle );\n\n\t\tconst indexAttr = geometry.getIndex();\n\t\tconst positionAttr = geometry.getAttribute( 'position' );\n\t\tconst indexCount = indexAttr ? indexAttr.count : positionAttr.count;\n\n\t\tconst indexArr = [ 0, 0, 0 ];\n\t\tconst vertKeys = [ 'a', 'b', 'c' ];\n\t\tconst hashes = new Array( 3 );\n\n\t\tconst edgeData = {};\n\t\tconst vertices = [];\n\t\tfor ( let i = 0; i < indexCount; i += 3 ) {\n\n\t\t\tif ( indexAttr ) {\n\n\t\t\t\tindexArr[ 0 ] = indexAttr.getX( i );\n\t\t\t\tindexArr[ 1 ] = indexAttr.getX( i + 1 );\n\t\t\t\tindexArr[ 2 ] = indexAttr.getX( i + 2 );\n\n\t\t\t} else {\n\n\t\t\t\tindexArr[ 0 ] = i;\n\t\t\t\tindexArr[ 1 ] = i + 1;\n\t\t\t\tindexArr[ 2 ] = i + 2;\n\n\t\t\t}\n\n\t\t\tconst { a, b, c } = _triangle;\n\t\t\ta.fromBufferAttribute( positionAttr, indexArr[ 0 ] );\n\t\t\tb.fromBufferAttribute( positionAttr, indexArr[ 1 ] );\n\t\t\tc.fromBufferAttribute( positionAttr, indexArr[ 2 ] );\n\t\t\t_triangle.getNormal( _normal );\n\n\t\t\t// create hashes for the edge from the vertices\n\t\t\thashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;\n\t\t\thashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;\n\t\t\thashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;\n\n\t\t\t// skip degenerate triangles\n\t\t\tif ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// iterate over every edge\n\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t// get the first and next vertex making up the edge\n\t\t\t\tconst jNext = ( j + 1 ) % 3;\n\t\t\t\tconst vecHash0 = hashes[ j ];\n\t\t\t\tconst vecHash1 = hashes[ jNext ];\n\t\t\t\tconst v0 = _triangle[ vertKeys[ j ] ];\n\t\t\t\tconst v1 = _triangle[ vertKeys[ jNext ] ];\n\n\t\t\t\tconst hash = `${ vecHash0 }_${ vecHash1 }`;\n\t\t\t\tconst reverseHash = `${ vecHash1 }_${ vecHash0 }`;\n\n\t\t\t\tif ( reverseHash in edgeData && edgeData[ reverseHash ] ) {\n\n\t\t\t\t\t// if we found a sibling edge add it into the vertex array if\n\t\t\t\t\t// it meets the angle threshold and delete the edge from the map.\n\t\t\t\t\tif ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {\n\n\t\t\t\t\t\tvertices.push( v0.x, v0.y, v0.z );\n\t\t\t\t\t\tvertices.push( v1.x, v1.y, v1.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tedgeData[ reverseHash ] = null;\n\n\t\t\t\t} else if ( ! ( hash in edgeData ) ) {\n\n\t\t\t\t\t// if we've already got an edge here then skip adding a new one\n\t\t\t\t\tedgeData[ hash ] = {\n\n\t\t\t\t\t\tindex0: indexArr[ j ],\n\t\t\t\t\t\tindex1: indexArr[ jNext ],\n\t\t\t\t\t\tnormal: _normal.clone(),\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\t// iterate over all remaining, unmatched edges and add them to the vertex array\n\t\tfor ( const key in edgeData ) {\n\n\t\t\tif ( edgeData[ key ] ) {\n\n\t\t\t\tconst { index0, index1 } = edgeData[ key ];\n\t\t\t\t_v0.fromBufferAttribute( positionAttr, index0 );\n\t\t\t\t_v1.fromBufferAttribute( positionAttr, index1 );\n\n\t\t\t\tvertices.push( _v0.x, _v0.y, _v0.z );\n\t\t\t\tvertices.push( _v1.x, _v1.y, _v1.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/EdgesGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/ExtrudeGeometry.js": +/*!**************************************************************!*\ + !*** ./node_modules/three/src/geometries/ExtrudeGeometry.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ExtrudeGeometry\": () => (/* binding */ ExtrudeGeometry),\n/* harmony export */ \"ExtrudeBufferGeometry\": () => (/* binding */ ExtrudeGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../extras/ShapeUtils.js */ \"./node_modules/three/src/extras/ShapeUtils.js\");\n/**\n * Creates extruded geometry from a path shape.\n *\n * parameters = {\n *\n * curveSegments: , // number of points on the curves\n * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n * depth: , // Depth to extrude the shape\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into the original shape bevel goes\n * bevelSize: , // how far from shape outline (including bevelOffset) is bevel\n * bevelOffset: , // how far from shape outline does bevel start\n * bevelSegments: , // number of bevel layers\n *\n * extrudePath: // curve to extrude shape along\n *\n * UVGenerator: // object that provides UV generator functions\n *\n * }\n */\n\n\n\n\n\n\n\nclass ExtrudeGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( shapes, options ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tconst scope = this;\n\n\t\tconst verticesArray = [];\n\t\tconst uvArray = [];\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst placeholder = [];\n\n\t\t\t// options\n\n\t\t\tconst curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tconst steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tlet depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\tlet bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tlet bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\tlet bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\tlet bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;\n\t\t\tlet bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tconst extrudePath = options.extrudePath;\n\n\t\t\tconst uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tlet extrudePts, extrudeByPath = false;\n\t\t\tlet splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__.Vector3();\n\t\t\t\tnormal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__.Vector3();\n\t\t\t\tposition2 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__.Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\t\t\t\tbevelOffset = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tconst shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tlet vertices = shapePoints.shape;\n\t\t\tconst holes = shapePoints.holes;\n\n\t\t\tconst reverse = ! _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_4__.ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\t\tif ( _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_4__.ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tconst faces = _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_4__.ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tconst contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tconst vlen = vertices.length, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tlet v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tconst v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tconst v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tconst v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tconst collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tconst v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tconst v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tconst ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tconst ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tconst ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tconst ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tconst sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tconst v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tlet direction_eq = false; // assumes: opposite\n\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\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\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tconst contourMovements = [];\n\n\t\t\tfor ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tconst holesMovements = [];\n\t\t\tlet oneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tconst ahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( let b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst bs = bevelSize + bevelOffset;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tfor ( let s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( let i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tconst vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( let b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tconst t = b / bevelSegments;\n\t\t\t\tconst z = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tconst bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( let i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst vert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( let i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\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\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tlet layer = 0; // steps + 1\n\t\t\t\t\tlet offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( let i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tconst face = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tconst start = verticesArray.length / 3;\n\t\t\t\tlet layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( let h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tconst ahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tlet i = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tconst j = i;\n\t\t\t\t\tlet k = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tfor ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {\n\n\t\t\t\t\t\tconst slen1 = vlen * s;\n\t\t\t\t\t\tconst slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tconst a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tconst nextIndex = verticesArray.length / 3;\n\t\t\t\tconst uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\t\tconst options = this.parameters.options;\n\n\t\treturn toJSON( shapes, options, data );\n\n\t}\n\n}\n\nconst WorldUVGenerator = {\n\n\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\n\t\treturn [\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( a_x, a_y ),\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( b_x, b_y ),\n\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( c_x, c_y )\n\t\t];\n\n\t},\n\n\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\tconst a_x = vertices[ indexA * 3 ];\n\t\tconst a_y = vertices[ indexA * 3 + 1 ];\n\t\tconst a_z = vertices[ indexA * 3 + 2 ];\n\t\tconst b_x = vertices[ indexB * 3 ];\n\t\tconst b_y = vertices[ indexB * 3 + 1 ];\n\t\tconst b_z = vertices[ indexB * 3 + 2 ];\n\t\tconst c_x = vertices[ indexC * 3 ];\n\t\tconst c_y = vertices[ indexC * 3 + 1 ];\n\t\tconst c_z = vertices[ indexC * 3 + 2 ];\n\t\tconst d_x = vertices[ indexD * 3 ];\n\t\tconst d_y = vertices[ indexD * 3 + 1 ];\n\t\tconst d_z = vertices[ indexD * 3 + 2 ];\n\n\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\treturn [\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( a_x, 1 - a_z ),\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( b_x, 1 - b_z ),\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( c_x, 1 - c_z ),\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( d_x, 1 - d_z )\n\t\t\t];\n\n\t\t} else {\n\n\t\t\treturn [\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( a_y, 1 - a_z ),\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( b_y, 1 - b_z ),\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( c_y, 1 - c_z ),\n\t\t\t\tnew _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2( d_y, 1 - d_z )\n\t\t\t];\n\n\t\t}\n\n\t}\n\n};\n\nfunction toJSON( shapes, options, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\treturn data;\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/ExtrudeGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/Geometries.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/geometries/Geometries.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BoxBufferGeometry\": () => (/* reexport safe */ _BoxGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BoxBufferGeometry),\n/* harmony export */ \"BoxGeometry\": () => (/* reexport safe */ _BoxGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry),\n/* harmony export */ \"CircleBufferGeometry\": () => (/* reexport safe */ _CircleGeometry_js__WEBPACK_IMPORTED_MODULE_1__.CircleBufferGeometry),\n/* harmony export */ \"CircleGeometry\": () => (/* reexport safe */ _CircleGeometry_js__WEBPACK_IMPORTED_MODULE_1__.CircleGeometry),\n/* harmony export */ \"ConeBufferGeometry\": () => (/* reexport safe */ _ConeGeometry_js__WEBPACK_IMPORTED_MODULE_2__.ConeBufferGeometry),\n/* harmony export */ \"ConeGeometry\": () => (/* reexport safe */ _ConeGeometry_js__WEBPACK_IMPORTED_MODULE_2__.ConeGeometry),\n/* harmony export */ \"CylinderBufferGeometry\": () => (/* reexport safe */ _CylinderGeometry_js__WEBPACK_IMPORTED_MODULE_3__.CylinderBufferGeometry),\n/* harmony export */ \"CylinderGeometry\": () => (/* reexport safe */ _CylinderGeometry_js__WEBPACK_IMPORTED_MODULE_3__.CylinderGeometry),\n/* harmony export */ \"DodecahedronBufferGeometry\": () => (/* reexport safe */ _DodecahedronGeometry_js__WEBPACK_IMPORTED_MODULE_4__.DodecahedronBufferGeometry),\n/* harmony export */ \"DodecahedronGeometry\": () => (/* reexport safe */ _DodecahedronGeometry_js__WEBPACK_IMPORTED_MODULE_4__.DodecahedronGeometry),\n/* harmony export */ \"EdgesGeometry\": () => (/* reexport safe */ _EdgesGeometry_js__WEBPACK_IMPORTED_MODULE_5__.EdgesGeometry),\n/* harmony export */ \"ExtrudeBufferGeometry\": () => (/* reexport safe */ _ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_6__.ExtrudeBufferGeometry),\n/* harmony export */ \"ExtrudeGeometry\": () => (/* reexport safe */ _ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_6__.ExtrudeGeometry),\n/* harmony export */ \"IcosahedronBufferGeometry\": () => (/* reexport safe */ _IcosahedronGeometry_js__WEBPACK_IMPORTED_MODULE_7__.IcosahedronBufferGeometry),\n/* harmony export */ \"IcosahedronGeometry\": () => (/* reexport safe */ _IcosahedronGeometry_js__WEBPACK_IMPORTED_MODULE_7__.IcosahedronGeometry),\n/* harmony export */ \"LatheBufferGeometry\": () => (/* reexport safe */ _LatheGeometry_js__WEBPACK_IMPORTED_MODULE_8__.LatheBufferGeometry),\n/* harmony export */ \"LatheGeometry\": () => (/* reexport safe */ _LatheGeometry_js__WEBPACK_IMPORTED_MODULE_8__.LatheGeometry),\n/* harmony export */ \"OctahedronBufferGeometry\": () => (/* reexport safe */ _OctahedronGeometry_js__WEBPACK_IMPORTED_MODULE_9__.OctahedronBufferGeometry),\n/* harmony export */ \"OctahedronGeometry\": () => (/* reexport safe */ _OctahedronGeometry_js__WEBPACK_IMPORTED_MODULE_9__.OctahedronGeometry),\n/* harmony export */ \"ParametricBufferGeometry\": () => (/* reexport safe */ _ParametricGeometry_js__WEBPACK_IMPORTED_MODULE_10__.ParametricBufferGeometry),\n/* harmony export */ \"ParametricGeometry\": () => (/* reexport safe */ _ParametricGeometry_js__WEBPACK_IMPORTED_MODULE_10__.ParametricGeometry),\n/* harmony export */ \"PlaneBufferGeometry\": () => (/* reexport safe */ _PlaneGeometry_js__WEBPACK_IMPORTED_MODULE_11__.PlaneBufferGeometry),\n/* harmony export */ \"PlaneGeometry\": () => (/* reexport safe */ _PlaneGeometry_js__WEBPACK_IMPORTED_MODULE_11__.PlaneGeometry),\n/* harmony export */ \"PolyhedronBufferGeometry\": () => (/* reexport safe */ _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_12__.PolyhedronBufferGeometry),\n/* harmony export */ \"PolyhedronGeometry\": () => (/* reexport safe */ _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_12__.PolyhedronGeometry),\n/* harmony export */ \"RingBufferGeometry\": () => (/* reexport safe */ _RingGeometry_js__WEBPACK_IMPORTED_MODULE_13__.RingBufferGeometry),\n/* harmony export */ \"RingGeometry\": () => (/* reexport safe */ _RingGeometry_js__WEBPACK_IMPORTED_MODULE_13__.RingGeometry),\n/* harmony export */ \"ShapeBufferGeometry\": () => (/* reexport safe */ _ShapeGeometry_js__WEBPACK_IMPORTED_MODULE_14__.ShapeBufferGeometry),\n/* harmony export */ \"ShapeGeometry\": () => (/* reexport safe */ _ShapeGeometry_js__WEBPACK_IMPORTED_MODULE_14__.ShapeGeometry),\n/* harmony export */ \"SphereBufferGeometry\": () => (/* reexport safe */ _SphereGeometry_js__WEBPACK_IMPORTED_MODULE_15__.SphereBufferGeometry),\n/* harmony export */ \"SphereGeometry\": () => (/* reexport safe */ _SphereGeometry_js__WEBPACK_IMPORTED_MODULE_15__.SphereGeometry),\n/* harmony export */ \"TetrahedronBufferGeometry\": () => (/* reexport safe */ _TetrahedronGeometry_js__WEBPACK_IMPORTED_MODULE_16__.TetrahedronBufferGeometry),\n/* harmony export */ \"TetrahedronGeometry\": () => (/* reexport safe */ _TetrahedronGeometry_js__WEBPACK_IMPORTED_MODULE_16__.TetrahedronGeometry),\n/* harmony export */ \"TextBufferGeometry\": () => (/* reexport safe */ _TextGeometry_js__WEBPACK_IMPORTED_MODULE_17__.TextBufferGeometry),\n/* harmony export */ \"TextGeometry\": () => (/* reexport safe */ _TextGeometry_js__WEBPACK_IMPORTED_MODULE_17__.TextGeometry),\n/* harmony export */ \"TorusBufferGeometry\": () => (/* reexport safe */ _TorusGeometry_js__WEBPACK_IMPORTED_MODULE_18__.TorusBufferGeometry),\n/* harmony export */ \"TorusGeometry\": () => (/* reexport safe */ _TorusGeometry_js__WEBPACK_IMPORTED_MODULE_18__.TorusGeometry),\n/* harmony export */ \"TorusKnotBufferGeometry\": () => (/* reexport safe */ _TorusKnotGeometry_js__WEBPACK_IMPORTED_MODULE_19__.TorusKnotBufferGeometry),\n/* harmony export */ \"TorusKnotGeometry\": () => (/* reexport safe */ _TorusKnotGeometry_js__WEBPACK_IMPORTED_MODULE_19__.TorusKnotGeometry),\n/* harmony export */ \"TubeBufferGeometry\": () => (/* reexport safe */ _TubeGeometry_js__WEBPACK_IMPORTED_MODULE_20__.TubeBufferGeometry),\n/* harmony export */ \"TubeGeometry\": () => (/* reexport safe */ _TubeGeometry_js__WEBPACK_IMPORTED_MODULE_20__.TubeGeometry),\n/* harmony export */ \"WireframeGeometry\": () => (/* reexport safe */ _WireframeGeometry_js__WEBPACK_IMPORTED_MODULE_21__.WireframeGeometry)\n/* harmony export */ });\n/* harmony import */ var _BoxGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./BoxGeometry.js */ \"./node_modules/three/src/geometries/BoxGeometry.js\");\n/* harmony import */ var _CircleGeometry_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CircleGeometry.js */ \"./node_modules/three/src/geometries/CircleGeometry.js\");\n/* harmony import */ var _ConeGeometry_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ConeGeometry.js */ \"./node_modules/three/src/geometries/ConeGeometry.js\");\n/* harmony import */ var _CylinderGeometry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./CylinderGeometry.js */ \"./node_modules/three/src/geometries/CylinderGeometry.js\");\n/* harmony import */ var _DodecahedronGeometry_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DodecahedronGeometry.js */ \"./node_modules/three/src/geometries/DodecahedronGeometry.js\");\n/* harmony import */ var _EdgesGeometry_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./EdgesGeometry.js */ \"./node_modules/three/src/geometries/EdgesGeometry.js\");\n/* harmony import */ var _ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ExtrudeGeometry.js */ \"./node_modules/three/src/geometries/ExtrudeGeometry.js\");\n/* harmony import */ var _IcosahedronGeometry_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./IcosahedronGeometry.js */ \"./node_modules/three/src/geometries/IcosahedronGeometry.js\");\n/* harmony import */ var _LatheGeometry_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./LatheGeometry.js */ \"./node_modules/three/src/geometries/LatheGeometry.js\");\n/* harmony import */ var _OctahedronGeometry_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./OctahedronGeometry.js */ \"./node_modules/three/src/geometries/OctahedronGeometry.js\");\n/* harmony import */ var _ParametricGeometry_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ParametricGeometry.js */ \"./node_modules/three/src/geometries/ParametricGeometry.js\");\n/* harmony import */ var _PlaneGeometry_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./PlaneGeometry.js */ \"./node_modules/three/src/geometries/PlaneGeometry.js\");\n/* harmony import */ var _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./PolyhedronGeometry.js */ \"./node_modules/three/src/geometries/PolyhedronGeometry.js\");\n/* harmony import */ var _RingGeometry_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./RingGeometry.js */ \"./node_modules/three/src/geometries/RingGeometry.js\");\n/* harmony import */ var _ShapeGeometry_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./ShapeGeometry.js */ \"./node_modules/three/src/geometries/ShapeGeometry.js\");\n/* harmony import */ var _SphereGeometry_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./SphereGeometry.js */ \"./node_modules/three/src/geometries/SphereGeometry.js\");\n/* harmony import */ var _TetrahedronGeometry_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./TetrahedronGeometry.js */ \"./node_modules/three/src/geometries/TetrahedronGeometry.js\");\n/* harmony import */ var _TextGeometry_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./TextGeometry.js */ \"./node_modules/three/src/geometries/TextGeometry.js\");\n/* harmony import */ var _TorusGeometry_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./TorusGeometry.js */ \"./node_modules/three/src/geometries/TorusGeometry.js\");\n/* harmony import */ var _TorusKnotGeometry_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./TorusKnotGeometry.js */ \"./node_modules/three/src/geometries/TorusKnotGeometry.js\");\n/* harmony import */ var _TubeGeometry_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./TubeGeometry.js */ \"./node_modules/three/src/geometries/TubeGeometry.js\");\n/* harmony import */ var _WireframeGeometry_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./WireframeGeometry.js */ \"./node_modules/three/src/geometries/WireframeGeometry.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/Geometries.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/IcosahedronGeometry.js": +/*!******************************************************************!*\ + !*** ./node_modules/three/src/geometries/IcosahedronGeometry.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"IcosahedronGeometry\": () => (/* binding */ IcosahedronGeometry),\n/* harmony export */ \"IcosahedronBufferGeometry\": () => (/* binding */ IcosahedronGeometry)\n/* harmony export */ });\n/* harmony import */ var _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PolyhedronGeometry.js */ \"./node_modules/three/src/geometries/PolyhedronGeometry.js\");\n\n\nclass IcosahedronGeometry extends _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__.PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tconst vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\tt, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/IcosahedronGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/LatheGeometry.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/geometries/LatheGeometry.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LatheGeometry\": () => (/* binding */ LatheGeometry),\n/* harmony export */ \"LatheBufferGeometry\": () => (/* binding */ LatheGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n\n\n\n\n\n\nclass LatheGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_1__.BufferGeometry {\n\n\tconstructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments );\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_4__.MathUtils.clamp( phiLength, 0, Math.PI * 2 );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst inverseSegments = 1.0 / segments;\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst uv = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__.Vector2();\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( let i = 0; i <= segments; i ++ ) {\n\n\t\t\tconst phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tconst sin = Math.sin( phi );\n\t\t\tconst cos = Math.cos( phi );\n\n\t\t\tfor ( let j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( let j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tconst base = j + i * points.length;\n\n\t\t\t\tconst a = base;\n\t\t\t\tconst b = base + points.length;\n\t\t\t\tconst c = base + points.length + 1;\n\t\t\t\tconst d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tconst normals = this.attributes.normal.array;\n\t\t\tconst n1 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\t\tconst n2 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\t\tconst n = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tconst base = segments * points.length * 3;\n\n\t\t\tfor ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/LatheGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/OctahedronGeometry.js": +/*!*****************************************************************!*\ + !*** ./node_modules/three/src/geometries/OctahedronGeometry.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"OctahedronGeometry\": () => (/* binding */ OctahedronGeometry),\n/* harmony export */ \"OctahedronBufferGeometry\": () => (/* binding */ OctahedronGeometry)\n/* harmony export */ });\n/* harmony import */ var _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PolyhedronGeometry.js */ \"./node_modules/three/src/geometries/PolyhedronGeometry.js\");\n\n\nclass OctahedronGeometry extends _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__.PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/OctahedronGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/ParametricGeometry.js": +/*!*****************************************************************!*\ + !*** ./node_modules/three/src/geometries/ParametricGeometry.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ParametricGeometry\": () => (/* binding */ ParametricGeometry),\n/* harmony export */ \"ParametricBufferGeometry\": () => (/* binding */ ParametricGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/**\n * Parametric Surfaces Geometry\n * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html\n */\n\n\n\n\n\nfunction ParametricGeometry( func, slices, stacks ) {\n\n\t_core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.call( this );\n\n\tthis.type = 'ParametricGeometry';\n\n\tthis.parameters = {\n\t\tfunc: func,\n\t\tslices: slices,\n\t\tstacks: stacks\n\t};\n\n\t// buffers\n\n\tconst indices = [];\n\tconst vertices = [];\n\tconst normals = [];\n\tconst uvs = [];\n\n\tconst EPS = 0.00001;\n\n\tconst normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\tconst p0 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3(), p1 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\tconst pu = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3(), pv = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\tif ( func.length < 3 ) {\n\n\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t}\n\n\t// generate vertices, normals and uvs\n\n\tconst sliceCount = slices + 1;\n\n\tfor ( let i = 0; i <= stacks; i ++ ) {\n\n\t\tconst v = i / stacks;\n\n\t\tfor ( let j = 0; j <= slices; j ++ ) {\n\n\t\t\tconst u = j / slices;\n\n\t\t\t// vertex\n\n\t\t\tfunc( u, v, p0 );\n\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t// normal\n\n\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t} else {\n\n\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t}\n\n\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t// uv\n\n\t\t\tuvs.push( u, v );\n\n\t\t}\n\n\t}\n\n\t// generate indices\n\n\tfor ( let i = 0; i < stacks; i ++ ) {\n\n\t\tfor ( let j = 0; j < slices; j ++ ) {\n\n\t\t\tconst a = i * sliceCount + j;\n\t\t\tconst b = i * sliceCount + j + 1;\n\t\t\tconst c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\tconst d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t// faces one and two\n\n\t\t\tindices.push( a, b, d );\n\t\t\tindices.push( b, c, d );\n\n\t\t}\n\n\t}\n\n\t// build geometry\n\n\tthis.setIndex( indices );\n\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n}\n\nParametricGeometry.prototype = Object.create( _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.prototype );\nParametricGeometry.prototype.constructor = ParametricGeometry;\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/ParametricGeometry.js?"); + +/***/ }), + /***/ "./node_modules/three/src/geometries/PlaneGeometry.js": /*!************************************************************!*\ !*** ./node_modules/three/src/geometries/PlaneGeometry.js ***! @@ -430,6 +1070,116 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/geometries/PolyhedronGeometry.js": +/*!*****************************************************************!*\ + !*** ./node_modules/three/src/geometries/PolyhedronGeometry.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PolyhedronGeometry\": () => (/* binding */ PolyhedronGeometry),\n/* harmony export */ \"PolyhedronBufferGeometry\": () => (/* binding */ PolyhedronGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\n\n\n\nclass PolyhedronGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( vertices, indices, radius = 1, detail = 0 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\t// default buffer data\n\n\t\tconst vertexBuffer = [];\n\t\tconst uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tapplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tconst a = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\t\tconst b = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\t\tconst c = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( let i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tconst cols = detail + 1;\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tconst v = [];\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( let i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tconst aj = a.clone().lerp( c, i / cols );\n\t\t\t\tconst bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tconst rows = cols - i;\n\n\t\t\t\tfor ( let j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( let i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tconst k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\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\tfunction applyRadius( radius ) {\n\n\t\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\tfor ( let i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tconst u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tconst v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( let i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tconst x0 = uvBuffer[ i + 0 ];\n\t\t\t\tconst x1 = uvBuffer[ i + 2 ];\n\t\t\t\tconst x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tconst max = Math.max( x0, x1, x2 );\n\t\t\t\tconst min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tconst stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tconst a = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\t\tconst b = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\t\tconst c = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\tconst centroid = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t\tconst uvA = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__.Vector2();\n\t\t\tconst uvB = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__.Vector2();\n\t\t\tconst uvC = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__.Vector2();\n\n\t\t\tfor ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tconst azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/PolyhedronGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/RingGeometry.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/geometries/RingGeometry.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RingGeometry\": () => (/* binding */ RingGeometry),\n/* harmony export */ \"RingBufferGeometry\": () => (/* binding */ RingGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\n\nclass RingGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthetaSegments = Math.max( 3, thetaSegments );\n\t\tphiSegments = Math.max( 1, phiSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// some helper variables\n\n\t\tlet radius = innerRadius;\n\t\tconst radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__.Vector3();\n\t\tconst uv = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tconst segment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tconst thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( let i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tconst segment = i + thetaSegmentLevel;\n\n\t\t\t\tconst a = segment;\n\t\t\t\tconst b = segment + thetaSegments + 1;\n\t\t\t\tconst c = segment + thetaSegments + 2;\n\t\t\t\tconst d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/RingGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/ShapeGeometry.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/geometries/ShapeGeometry.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ShapeGeometry\": () => (/* binding */ ShapeGeometry),\n/* harmony export */ \"ShapeBufferGeometry\": () => (/* binding */ ShapeGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../extras/ShapeUtils.js */ \"./node_modules/three/src/extras/ShapeUtils.js\");\n\n\n\n\nclass ShapeGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( shapes, curveSegments = 12 ) {\n\n\t\tsuper();\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tlet groupStart = 0;\n\t\tlet groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( let i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tconst indexOffset = vertices.length / 3;\n\t\t\tconst points = shape.extractPoints( curveSegments );\n\n\t\t\tlet shapeVertices = points.shape;\n\t\t\tconst shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_2__.ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t}\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\n\t\t\t\tif ( _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_2__.ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tconst faces = _extras_ShapeUtils_js__WEBPACK_IMPORTED_MODULE_2__.ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tconst shapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tconst vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( let i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tconst face = faces[ i ];\n\n\t\t\t\tconst a = face[ 0 ] + indexOffset;\n\t\t\t\tconst b = face[ 1 ] + indexOffset;\n\t\t\t\tconst c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.prototype.toJSON.call( this );\n\n\t\tconst shapes = this.parameters.shapes;\n\n\t\treturn toJSON( shapes, data );\n\n\t}\n\n}\n\nfunction toJSON( shapes, data ) {\n\n\tdata.shapes = [];\n\n\tif ( Array.isArray( shapes ) ) {\n\n\t\tfor ( let i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tconst shape = shapes[ i ];\n\n\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t}\n\n\t} else {\n\n\t\tdata.shapes.push( shapes.uuid );\n\n\t}\n\n\treturn data;\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/ShapeGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/SphereGeometry.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/geometries/SphereGeometry.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SphereGeometry\": () => (/* binding */ SphereGeometry),\n/* harmony export */ \"SphereBufferGeometry\": () => (/* binding */ SphereGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\nclass SphereGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {\n\n\t\tsuper();\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) );\n\n\t\tconst thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );\n\n\t\tlet index = 0;\n\t\tconst grid = [];\n\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tconst verticesRow = [];\n\n\t\t\tconst v = iy / heightSegments;\n\n\t\t\t// special case for the poles\n\n\t\t\tlet uOffset = 0;\n\n\t\t\tif ( iy == 0 && thetaStart == 0 ) {\n\n\t\t\t\tuOffset = 0.5 / widthSegments;\n\n\t\t\t} else if ( iy == heightSegments && thetaEnd == Math.PI ) {\n\n\t\t\t\tuOffset = - 0.5 / widthSegments;\n\n\t\t\t}\n\n\t\t\tfor ( let ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tconst u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.copy( vertex ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u + uOffset, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( let iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( let ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tconst a = grid[ iy ][ ix + 1 ];\n\t\t\t\tconst b = grid[ iy ][ ix ];\n\t\t\t\tconst c = grid[ iy + 1 ][ ix ];\n\t\t\t\tconst d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/SphereGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/TetrahedronGeometry.js": +/*!******************************************************************!*\ + !*** ./node_modules/three/src/geometries/TetrahedronGeometry.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TetrahedronGeometry\": () => (/* binding */ TetrahedronGeometry),\n/* harmony export */ \"TetrahedronBufferGeometry\": () => (/* binding */ TetrahedronGeometry)\n/* harmony export */ });\n/* harmony import */ var _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./PolyhedronGeometry.js */ \"./node_modules/three/src/geometries/PolyhedronGeometry.js\");\n\n\nclass TetrahedronGeometry extends _PolyhedronGeometry_js__WEBPACK_IMPORTED_MODULE_0__.PolyhedronGeometry {\n\n\tconstructor( radius = 1, detail = 0 ) {\n\n\t\tconst vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tconst indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tsuper( vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/TetrahedronGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/TextGeometry.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/geometries/TextGeometry.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TextGeometry\": () => (/* binding */ TextGeometry),\n/* harmony export */ \"TextBufferGeometry\": () => (/* binding */ TextGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ExtrudeGeometry.js */ \"./node_modules/three/src/geometries/ExtrudeGeometry.js\");\n/**\n * Text = 3D Text\n *\n * parameters = {\n * font: , // font\n *\n * size: , // size of the text\n * height: , // thickness to extrude text\n * curveSegments: , // number of points on the curves\n *\n * bevelEnabled: , // turn on bevel\n * bevelThickness: , // how deep into text bevel goes\n * bevelSize: , // how far from text outline (including bevelOffset) is bevel\n * bevelOffset: // how far from text outline does bevel start\n * }\n */\n\n\n\n\nclass TextGeometry extends _ExtrudeGeometry_js__WEBPACK_IMPORTED_MODULE_1__.ExtrudeGeometry {\n\n\tconstructor( text, parameters = {} ) {\n\n\t\tconst font = parameters.font;\n\n\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\treturn new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();\n\n\t\t}\n\n\t\tconst shapes = font.generateShapes( text, parameters.size );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t// defaults\n\n\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\tsuper( shapes, parameters );\n\n\t\tthis.type = 'TextGeometry';\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/TextGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/TorusGeometry.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/geometries/TorusGeometry.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TorusGeometry\": () => (/* binding */ TorusGeometry),\n/* harmony export */ \"TorusBufferGeometry\": () => (/* binding */ TorusGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\nclass TorusGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradialSegments = Math.floor( radialSegments );\n\t\ttubularSegments = Math.floor( tubularSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst center = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tconst u = i / tubularSegments * arc;\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tconst b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tconst c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tconst d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/TorusGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/TorusKnotGeometry.js": +/*!****************************************************************!*\ + !*** ./node_modules/three/src/geometries/TorusKnotGeometry.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TorusKnotGeometry\": () => (/* binding */ TorusKnotGeometry),\n/* harmony export */ \"TorusKnotBufferGeometry\": () => (/* binding */ TorusKnotGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\nclass TorusKnotGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {\n\n\t\tsuper();\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\ttubularSegments = Math.floor( tubularSegments );\n\t\tradialSegments = Math.floor( radialSegments );\n\n\t\t// buffers\n\n\t\tconst indices = [];\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\n\t\t// helper variables\n\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\tconst P1 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst P2 = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\tconst B = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst T = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\t\tconst N = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( let i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tconst u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( let j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\t\t\t\tconst cx = - tube * Math.cos( v );\n\t\t\t\tconst cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tconst cu = Math.cos( u );\n\t\t\tconst su = Math.sin( u );\n\t\t\tconst quOverP = q / p * u;\n\t\t\tconst cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/TorusKnotGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/TubeGeometry.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/geometries/TubeGeometry.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TubeGeometry\": () => (/* binding */ TubeGeometry),\n/* harmony export */ \"TubeBufferGeometry\": () => (/* binding */ TubeGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\n\nclass TubeGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {\n\n\t\tsuper();\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tconst frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__.Vector3();\n\t\tconst normal = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__.Vector3();\n\t\tconst uv = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_2__.Vector2();\n\t\tlet P = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_3__.Vector3();\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\t\tconst normals = [];\n\t\tconst uvs = [];\n\t\tconst indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.setAttribute( 'normal', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( normals, 3 ) );\n\t\tthis.setAttribute( 'uv', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( let i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tconst N = frames.normals[ i ];\n\t\t\tconst B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tconst v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tconst sin = Math.sin( v );\n\t\t\t\tconst cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( let j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( let i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tconst a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tconst b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tconst c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tconst d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( let i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\ttoJSON() {\n\n\t\tconst data = _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry.prototype.toJSON.call( this );\n\n\t\tdata.path = this.parameters.path.toJSON();\n\n\t\treturn data;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/TubeGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/geometries/WireframeGeometry.js": +/*!****************************************************************!*\ + !*** ./node_modules/three/src/geometries/WireframeGeometry.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"WireframeGeometry\": () => (/* binding */ WireframeGeometry)\n/* harmony export */ });\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\nclass WireframeGeometry extends _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry {\n\n\tconstructor( geometry ) {\n\n\t\tsuper();\n\t\tthis.type = 'WireframeGeometry';\n\n\t\tif ( geometry.isGeometry === true ) {\n\n\t\t\tconsole.error( 'THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' );\n\t\t\treturn;\n\n\t\t}\n\n\t\t// buffer\n\n\t\tconst vertices = [];\n\n\t\t// helper variables\n\n\t\tconst edge = [ 0, 0 ], edges = {};\n\n\t\tconst vertex = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\n\t\tif ( geometry.index !== null ) {\n\n\t\t\t// indexed BufferGeometry\n\n\t\t\tconst position = geometry.attributes.position;\n\t\t\tconst indices = geometry.index;\n\t\t\tlet groups = geometry.groups;\n\n\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t}\n\n\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\tfor ( let o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\tconst group = groups[ o ];\n\n\t\t\t\tconst start = group.start;\n\t\t\t\tconst count = group.count;\n\n\t\t\t\tfor ( let i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\tconst edge1 = indices.getX( i + j );\n\t\t\t\t\t\tconst edge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\tconst key = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\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\t// generate vertices\n\n\t\t\tfor ( const key in edges ) {\n\n\t\t\t\tconst e = edges[ key ];\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// non-indexed BufferGeometry\n\n\t\t\tconst position = geometry.attributes.position;\n\n\t\t\tfor ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\tconst index1 = 3 * i + j;\n\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tconst index2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/geometries/WireframeGeometry.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/helpers/ArrowHelper.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/helpers/ArrowHelper.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ArrowHelper\": () => (/* binding */ ArrowHelper)\n/* harmony export */ });\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _geometries_CylinderGeometry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../geometries/CylinderGeometry.js */ \"./node_modules/three/src/geometries/CylinderGeometry.js\");\n/* harmony import */ var _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../materials/MeshBasicMaterial.js */ \"./node_modules/three/src/materials/MeshBasicMaterial.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../objects/Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _objects_Line_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../objects/Line.js */ \"./node_modules/three/src/objects/Line.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n\n\n\n\n\n\n\n\nconst _axis = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3();\nlet _lineGeometry, _coneGeometry;\n\nclass ArrowHelper extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__.Object3D {\n\n\t// dir is assumed to be normalized\n\n\tconstructor( dir = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( 0, 0, 1 ), origin = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_8__.Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'ArrowHelper';\n\n\t\tif ( _lineGeometry === undefined ) {\n\n\t\t\t_lineGeometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_1__.BufferGeometry();\n\t\t\t_lineGeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\t_coneGeometry = new _geometries_CylinderGeometry_js__WEBPACK_IMPORTED_MODULE_3__.CylinderGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\t_coneGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new _objects_Line_js__WEBPACK_IMPORTED_MODULE_7__.Line( _lineGeometry, new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_5__.LineBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_6__.Mesh( _coneGeometry, new _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_4__.MeshBasicMaterial( { color: color, toneMapped: false } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tsetDirection( dir ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t} else {\n\n\t\t\t_axis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\tconst radians = Math.acos( dir.y );\n\n\t\t\tthis.quaternion.setFromAxisAngle( _axis, radians );\n\n\t\t}\n\n\t}\n\n\tsetLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {\n\n\t\tthis.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t}\n\n\tsetColor( color ) {\n\n\t\tthis.line.material.color.set( color );\n\t\tthis.cone.material.color.set( color );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tthis.line.copy( source.line );\n\t\tthis.cone.copy( source.cone );\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/ArrowHelper.js?"); + +/***/ }), + /***/ "./node_modules/three/src/helpers/AxesHelper.js": /*!******************************************************!*\ !*** ./node_modules/three/src/helpers/AxesHelper.js ***! @@ -440,6 +1190,26 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/helpers/Box3Helper.js": +/*!******************************************************!*\ + !*** ./node_modules/three/src/helpers/Box3Helper.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Box3Helper\": () => (/* binding */ Box3Helper)\n/* harmony export */ });\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n\n\n\n\n\n\nclass Box3Helper extends _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__.LineSegments {\n\n\tconstructor( box, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tconst positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tconst geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__.BufferGeometry();\n\n\t\tgeometry.setIndex( new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.Float32BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__.LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.box = box;\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/Box3Helper.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/helpers/BoxHelper.js": +/*!*****************************************************!*\ + !*** ./node_modules/three/src/helpers/BoxHelper.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BoxHelper\": () => (/* binding */ BoxHelper)\n/* harmony export */ });\n/* harmony import */ var _math_Box3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Box3.js */ \"./node_modules/three/src/math/Box3.js\");\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n\n\n\n\n\n\nconst _box = /*@__PURE__*/ new _math_Box3_js__WEBPACK_IMPORTED_MODULE_0__.Box3();\n\nclass BoxHelper extends _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_1__.LineSegments {\n\n\tconstructor( object, color = 0xffff00 ) {\n\n\t\tconst indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tconst positions = new Float32Array( 8 * 3 );\n\n\t\tconst geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_4__.BufferGeometry();\n\t\tgeometry.setIndex( new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_3__.BufferAttribute( indices, 1 ) );\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_3__.BufferAttribute( positions, 3 ) );\n\n\t\tsuper( geometry, new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_2__.LineBasicMaterial( { color: color, toneMapped: false } ) );\n\n\t\tthis.object = object;\n\t\tthis.type = 'BoxHelper';\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tupdate( object ) {\n\n\t\tif ( object !== undefined ) {\n\n\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t}\n\n\t\tif ( this.object !== undefined ) {\n\n\t\t\t_box.setFromObject( this.object );\n\n\t\t}\n\n\t\tif ( _box.isEmpty() ) return;\n\n\t\tconst min = _box.min;\n\t\tconst max = _box.max;\n\n\t\t/*\n\t\t\t5____4\n\t\t1/___0/|\n\t\t| 6__|_7\n\t\t2/___3/\n\n\t\t0: max.x, max.y, max.z\n\t\t1: min.x, max.y, max.z\n\t\t2: min.x, min.y, max.z\n\t\t3: max.x, min.y, max.z\n\t\t4: max.x, max.y, min.z\n\t\t5: min.x, max.y, min.z\n\t\t6: min.x, min.y, min.z\n\t\t7: max.x, min.y, min.z\n\t\t*/\n\n\t\tconst position = this.geometry.attributes.position;\n\t\tconst array = position.array;\n\n\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\tposition.needsUpdate = true;\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\n\t}\n\n\tsetFromObject( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t}\n\n\tcopy( source ) {\n\n\t\t_objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_1__.LineSegments.prototype.copy.call( this, source );\n\n\t\tthis.object = source.object;\n\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/BoxHelper.js?"); + +/***/ }), + /***/ "./node_modules/three/src/helpers/CameraHelper.js": /*!********************************************************!*\ !*** ./node_modules/three/src/helpers/CameraHelper.js ***! @@ -450,6 +1220,36 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/helpers/DirectionalLightHelper.js": +/*!******************************************************************!*\ + !*** ./node_modules/three/src/helpers/DirectionalLightHelper.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DirectionalLightHelper\": () => (/* binding */ DirectionalLightHelper)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _objects_Line_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../objects/Line.js */ \"./node_modules/three/src/objects/Line.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n\n\n\n\n\n\n\nconst _v1 = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _v2 = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _v3 = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\nclass DirectionalLightHelper extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_1__.Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tlet geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_4__.BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_3__.Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tconst material = new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_5__.LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.lightPlane = new _objects_Line_js__WEBPACK_IMPORTED_MODULE_2__.Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_4__.BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_3__.Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new _objects_Line_js__WEBPACK_IMPORTED_MODULE_2__.Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\t_v1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t_v2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t_v3.subVectors( _v2, _v1 );\n\n\t\tthis.lightPlane.lookAt( _v2 );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\tthis.targetLine.lookAt( _v2 );\n\t\tthis.targetLine.scale.z = _v3.length();\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/DirectionalLightHelper.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/helpers/GridHelper.js": +/*!******************************************************!*\ + !*** ./node_modules/three/src/helpers/GridHelper.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"GridHelper\": () => (/* binding */ GridHelper)\n/* harmony export */ });\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n\n\n\n\n\n\nclass GridHelper extends _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__.LineSegments {\n\n\tconstructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_4__.Color( color1 );\n\t\tcolor2 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_4__.Color( color2 );\n\n\t\tconst center = divisions / 2;\n\t\tconst step = size / divisions;\n\t\tconst halfSize = size / 2;\n\n\t\tconst vertices = [], colors = [];\n\n\t\tfor ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tconst color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tconst geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__.BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__.LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'GridHelper';\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/GridHelper.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/helpers/HemisphereLightHelper.js": +/*!*****************************************************************!*\ + !*** ./node_modules/three/src/helpers/HemisphereLightHelper.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HemisphereLightHelper\": () => (/* binding */ HemisphereLightHelper)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../objects/Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../materials/MeshBasicMaterial.js */ \"./node_modules/three/src/materials/MeshBasicMaterial.js\");\n/* harmony import */ var _geometries_OctahedronGeometry_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../geometries/OctahedronGeometry.js */ \"./node_modules/three/src/geometries/OctahedronGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n\n\n\n\n\n\n\n\nconst _vector = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _color1 = /*@__PURE__*/ new _math_Color_js__WEBPACK_IMPORTED_MODULE_1__.Color();\nconst _color2 = /*@__PURE__*/ new _math_Color_js__WEBPACK_IMPORTED_MODULE_1__.Color();\n\nclass HemisphereLightHelper extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__.Object3D {\n\n\tconstructor( light, size, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new _geometries_OctahedronGeometry_js__WEBPACK_IMPORTED_MODULE_5__.OctahedronGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_4__.MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = true;\n\n\t\tconst position = geometry.getAttribute( 'position' );\n\t\tconst colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.setAttribute( 'color', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_6__.BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_3__.Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tconst mesh = this.children[ 0 ];\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tconst colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t_color1.copy( this.light.color );\n\t\t\t_color2.copy( this.light.groundColor );\n\n\t\t\tfor ( let i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\tconst color = ( i < ( l / 2 ) ) ? _color1 : _color2;\n\n\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t\tcolors.needsUpdate = true;\n\n\t\t}\n\n\t\tmesh.lookAt( _vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/HemisphereLightHelper.js?"); + +/***/ }), + /***/ "./node_modules/three/src/helpers/PlaneHelper.js": /*!*******************************************************!*\ !*** ./node_modules/three/src/helpers/PlaneHelper.js ***! @@ -460,6 +1260,66 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/helpers/PointLightHelper.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/helpers/PointLightHelper.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PointLightHelper\": () => (/* binding */ PointLightHelper)\n/* harmony export */ });\n/* harmony import */ var _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../objects/Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../materials/MeshBasicMaterial.js */ \"./node_modules/three/src/materials/MeshBasicMaterial.js\");\n/* harmony import */ var _geometries_SphereGeometry_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../geometries/SphereGeometry.js */ \"./node_modules/three/src/geometries/SphereGeometry.js\");\n\n\n\n\nclass PointLightHelper extends _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_0__.Mesh {\n\n\tconstructor( light, sphereSize, color ) {\n\n\t\tconst geometry = new _geometries_SphereGeometry_js__WEBPACK_IMPORTED_MODULE_2__.SphereGeometry( sphereSize, 4, 2 );\n\t\tconst material = new _materials_MeshBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__.MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tthis.type = 'PointLightHelper';\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t// TODO: delete this comment?\n\tconst distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 );\n\tconst distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\tconst d = light.distance;\n\n\tif ( d === 0.0 ) {\n\n\t\tthis.lightDistance.visible = false;\n\n\t} else {\n\n\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t}\n\n\tthis.add( this.lightDistance );\n\t*/\n\n\t}\n\n\tdispose() {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tconst d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/PointLightHelper.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/helpers/PolarGridHelper.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/helpers/PolarGridHelper.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PolarGridHelper\": () => (/* binding */ PolarGridHelper)\n/* harmony export */ });\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n\n\n\n\n\n\nclass PolarGridHelper extends _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__.LineSegments {\n\n\tconstructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {\n\n\t\tcolor1 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_4__.Color( color1 );\n\t\tcolor2 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_4__.Color( color2 );\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\t// create the radials\n\n\t\tfor ( let i = 0; i <= radials; i ++ ) {\n\n\t\t\tconst v = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tconst x = Math.sin( v ) * radius;\n\t\t\tconst z = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( let i = 0; i <= circles; i ++ ) {\n\n\t\t\tconst color = ( i & 1 ) ? color1 : color2;\n\n\t\t\tconst r = radius - ( radius / circles * i );\n\n\t\t\tfor ( let j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tlet v = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tlet x = Math.sin( v ) * r;\n\t\t\t\tlet z = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__.BufferGeometry();\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_1__.LineBasicMaterial( { vertexColors: true, toneMapped: false } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'PolarGridHelper';\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/PolarGridHelper.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/helpers/SkeletonHelper.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/helpers/SkeletonHelper.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SkeletonHelper\": () => (/* binding */ SkeletonHelper)\n/* harmony export */ });\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n\n\n\n\n\n\n\n\nconst _vector = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3();\nconst _boneMatrix = /*@__PURE__*/ new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\nconst _matrixWorldInv = /*@__PURE__*/ new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\n\n\nclass SkeletonHelper extends _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_0__.LineSegments {\n\n\tconstructor( object ) {\n\n\t\tconst bones = getBoneList( object );\n\n\t\tconst geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry();\n\n\t\tconst vertices = [];\n\t\tconst colors = [];\n\n\t\tconst color1 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_3__.Color( 0, 0, 1 );\n\t\tconst color2 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_3__.Color( 0, 1, 0 );\n\n\t\tfor ( let i = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_6__.Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.setAttribute( 'color', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_6__.Float32BufferAttribute( colors, 3 ) );\n\n\t\tconst material = new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_2__.LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'SkeletonHelper';\n\t\tthis.isSkeletonHelper = true;\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tupdateMatrixWorld( force ) {\n\n\t\tconst bones = this.bones;\n\n\t\tconst geometry = this.geometry;\n\t\tconst position = geometry.getAttribute( 'position' );\n\n\t\t_matrixWorldInv.copy( this.root.matrixWorld ).invert();\n\n\t\tfor ( let i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );\n\t\t\t\t_vector.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j, _vector.x, _vector.y, _vector.z );\n\n\t\t\t\t_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t_vector.setFromMatrixPosition( _boneMatrix );\n\t\t\t\tposition.setXYZ( j + 1, _vector.x, _vector.y, _vector.z );\n\n\t\t\t\tj += 2;\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\tsuper.updateMatrixWorld( force );\n\n\t}\n\n}\n\n\nfunction getBoneList( object ) {\n\n\tconst boneList = [];\n\n\tif ( object && object.isBone ) {\n\n\t\tboneList.push( object );\n\n\t}\n\n\tfor ( let i = 0; i < object.children.length; i ++ ) {\n\n\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t}\n\n\treturn boneList;\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/SkeletonHelper.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/helpers/SpotLightHelper.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/helpers/SpotLightHelper.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SpotLightHelper\": () => (/* binding */ SpotLightHelper)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../materials/LineBasicMaterial.js */ \"./node_modules/three/src/materials/LineBasicMaterial.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n\n\n\n\n\n\n\nconst _vector = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\nclass SpotLightHelper extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_1__.Object3D {\n\n\tconstructor( light, color ) {\n\n\t\tsuper();\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tconst geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry();\n\n\t\tconst positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tconst p1 = ( i / l ) * Math.PI * 2;\n\t\t\tconst p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.setAttribute( 'position', new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_4__.Float32BufferAttribute( positions, 3 ) );\n\n\t\tconst material = new _materials_LineBasicMaterial_js__WEBPACK_IMPORTED_MODULE_3__.LineBasicMaterial( { fog: false, toneMapped: false } );\n\n\t\tthis.cone = new _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_2__.LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tdispose() {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t}\n\n\tupdate() {\n\n\t\tthis.light.updateMatrixWorld();\n\n\t\tconst coneLength = this.light.distance ? this.light.distance : 1000;\n\t\tconst coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t_vector.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\tthis.cone.lookAt( _vector );\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t}\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/helpers/SpotLightHelper.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/lights/AmbientLight.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/lights/AmbientLight.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AmbientLight\": () => (/* binding */ AmbientLight)\n/* harmony export */ });\n/* harmony import */ var _Light_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Light.js */ \"./node_modules/three/src/lights/Light.js\");\n\n\nclass AmbientLight extends _Light_js__WEBPACK_IMPORTED_MODULE_0__.Light {\n\n\tconstructor( color, intensity ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t}\n\n}\n\nAmbientLight.prototype.isAmbientLight = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/AmbientLight.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/lights/AmbientLightProbe.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/lights/AmbientLightProbe.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AmbientLightProbe\": () => (/* binding */ AmbientLightProbe)\n/* harmony export */ });\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _LightProbe_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LightProbe.js */ \"./node_modules/three/src/lights/LightProbe.js\");\n\n\n\nclass AmbientLightProbe extends _LightProbe_js__WEBPACK_IMPORTED_MODULE_1__.LightProbe {\n\n\tconstructor( color, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color().set( color );\n\n\t\t// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );\n\t\tthis.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );\n\n\t}\n\n}\n\nAmbientLightProbe.prototype.isAmbientLightProbe = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/AmbientLightProbe.js?"); + +/***/ }), + /***/ "./node_modules/three/src/lights/DirectionalLight.js": /*!***********************************************************!*\ !*** ./node_modules/three/src/lights/DirectionalLight.js ***! @@ -480,6 +1340,26 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/lights/HemisphereLight.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/lights/HemisphereLight.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HemisphereLight\": () => (/* binding */ HemisphereLight)\n/* harmony export */ });\n/* harmony import */ var _Light_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Light.js */ \"./node_modules/three/src/lights/Light.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n\n\n\n\nclass HemisphereLight extends _Light_js__WEBPACK_IMPORTED_MODULE_0__.Light {\n\n\tconstructor( skyColor, groundColor, intensity ) {\n\n\t\tsuper( skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.position.copy( _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__.Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new _math_Color_js__WEBPACK_IMPORTED_MODULE_1__.Color( groundColor );\n\n\t}\n\n\tcopy( source ) {\n\n\t\t_Light_js__WEBPACK_IMPORTED_MODULE_0__.Light.prototype.copy.call( this, source );\n\n\t\tthis.groundColor.copy( source.groundColor );\n\n\t\treturn this;\n\n\t}\n\n}\n\nHemisphereLight.prototype.isHemisphereLight = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/HemisphereLight.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/lights/HemisphereLightProbe.js": +/*!***************************************************************!*\ + !*** ./node_modules/three/src/lights/HemisphereLightProbe.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"HemisphereLightProbe\": () => (/* binding */ HemisphereLightProbe)\n/* harmony export */ });\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _LightProbe_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./LightProbe.js */ \"./node_modules/three/src/lights/LightProbe.js\");\n\n\n\n\nclass HemisphereLightProbe extends _LightProbe_js__WEBPACK_IMPORTED_MODULE_2__.LightProbe {\n\n\tconstructor( skyColor, groundColor, intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tconst color1 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color().set( skyColor );\n\t\tconst color2 = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color().set( groundColor );\n\n\t\tconst sky = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3( color1.r, color1.g, color1.b );\n\t\tconst ground = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3( color2.r, color2.g, color2.b );\n\n\t\t// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );\n\t\tconst c0 = Math.sqrt( Math.PI );\n\t\tconst c1 = c0 * Math.sqrt( 0.75 );\n\n\t\tthis.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );\n\t\tthis.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );\n\n\t}\n\n}\n\nHemisphereLightProbe.prototype.isHemisphereLightProbe = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/HemisphereLightProbe.js?"); + +/***/ }), + /***/ "./node_modules/three/src/lights/Light.js": /*!************************************************!*\ !*** ./node_modules/three/src/lights/Light.js ***! @@ -490,6 +1370,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/lights/LightProbe.js": +/*!*****************************************************!*\ + !*** ./node_modules/three/src/lights/LightProbe.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LightProbe\": () => (/* binding */ LightProbe)\n/* harmony export */ });\n/* harmony import */ var _math_SphericalHarmonics3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/SphericalHarmonics3.js */ \"./node_modules/three/src/math/SphericalHarmonics3.js\");\n/* harmony import */ var _Light_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Light.js */ \"./node_modules/three/src/lights/Light.js\");\n\n\n\nclass LightProbe extends _Light_js__WEBPACK_IMPORTED_MODULE_1__.Light {\n\n\tconstructor( sh = new _math_SphericalHarmonics3_js__WEBPACK_IMPORTED_MODULE_0__.SphericalHarmonics3(), intensity = 1 ) {\n\n\t\tsuper( undefined, intensity );\n\n\t\tthis.sh = sh;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.sh.copy( source.sh );\n\n\t\treturn this;\n\n\t}\n\n\tfromJSON( json ) {\n\n\t\tthis.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();\n\t\tthis.sh.fromArray( json.sh );\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.sh = this.sh.toArray();\n\n\t\treturn data;\n\n\t}\n\n}\n\nLightProbe.prototype.isLightProbe = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/LightProbe.js?"); + +/***/ }), + /***/ "./node_modules/three/src/lights/LightShadow.js": /*!******************************************************!*\ !*** ./node_modules/three/src/lights/LightShadow.js ***! @@ -500,6 +1390,226 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/lights/PointLight.js": +/*!*****************************************************!*\ + !*** ./node_modules/three/src/lights/PointLight.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PointLight\": () => (/* binding */ PointLight)\n/* harmony export */ });\n/* harmony import */ var _Light_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Light.js */ \"./node_modules/three/src/lights/Light.js\");\n/* harmony import */ var _PointLightShadow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PointLightShadow.js */ \"./node_modules/three/src/lights/PointLightShadow.js\");\n\n\n\nclass PointLight extends _Light_js__WEBPACK_IMPORTED_MODULE_0__.Light {\n\n\tconstructor( color, intensity, distance = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tthis.distance = distance;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new _PointLightShadow_js__WEBPACK_IMPORTED_MODULE_1__.PointLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * 4 * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.decay = source.decay;\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nPointLight.prototype.isPointLight = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/PointLight.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/lights/PointLightShadow.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/lights/PointLightShadow.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PointLightShadow\": () => (/* binding */ PointLightShadow)\n/* harmony export */ });\n/* harmony import */ var _LightShadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LightShadow.js */ \"./node_modules/three/src/lights/LightShadow.js\");\n/* harmony import */ var _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../cameras/PerspectiveCamera.js */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../math/Vector4.js */ \"./node_modules/three/src/math/Vector4.js\");\n\n\n\n\n\n\n\nconst _projScreenMatrix = /*@__PURE__*/ new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_2__.Matrix4();\nconst _lightPositionWorld = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3();\nconst _lookTarget = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3();\n\nclass PointLightShadow extends _LightShadow_js__WEBPACK_IMPORTED_MODULE_0__.LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_1__.PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t\tthis._frameExtents = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_3__.Vector2( 4, 2 );\n\n\t\tthis._viewportCount = 6;\n\n\t\tthis._viewports = [\n\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t// following orientation:\n\t\t\t//\n\t\t\t// xzXZ\n\t\t\t// y Y\n\t\t\t//\n\t\t\t// X - Positive x direction\n\t\t\t// x - Negative x direction\n\t\t\t// Y - Positive y direction\n\t\t\t// y - Negative y direction\n\t\t\t// Z - Positive z direction\n\t\t\t// z - Negative z direction\n\n\t\t\t// positive X\n\t\t\tnew _math_Vector4_js__WEBPACK_IMPORTED_MODULE_5__.Vector4( 2, 1, 1, 1 ),\n\t\t\t// negative X\n\t\t\tnew _math_Vector4_js__WEBPACK_IMPORTED_MODULE_5__.Vector4( 0, 1, 1, 1 ),\n\t\t\t// positive Z\n\t\t\tnew _math_Vector4_js__WEBPACK_IMPORTED_MODULE_5__.Vector4( 3, 1, 1, 1 ),\n\t\t\t// negative Z\n\t\t\tnew _math_Vector4_js__WEBPACK_IMPORTED_MODULE_5__.Vector4( 1, 1, 1, 1 ),\n\t\t\t// positive Y\n\t\t\tnew _math_Vector4_js__WEBPACK_IMPORTED_MODULE_5__.Vector4( 3, 0, 1, 1 ),\n\t\t\t// negative Y\n\t\t\tnew _math_Vector4_js__WEBPACK_IMPORTED_MODULE_5__.Vector4( 1, 0, 1, 1 )\n\t\t];\n\n\t\tthis._cubeDirections = [\n\t\t\tnew _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 1, 0, 0 ), new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( - 1, 0, 0 ), new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 0, 1 ),\n\t\t\tnew _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 0, - 1 ), new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 1, 0 ), new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tthis._cubeUps = [\n\t\t\tnew _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 1, 0 ), new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 1, 0 ), new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 1, 0 ),\n\t\t\tnew _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 1, 0 ), new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 0, 1 ),\tnew _math_Vector3_js__WEBPACK_IMPORTED_MODULE_4__.Vector3( 0, 0, - 1 )\n\t\t];\n\n\t}\n\n\tupdateMatrices( light, viewportIndex = 0 ) {\n\n\t\tconst camera = this.camera;\n\t\tconst shadowMatrix = this.matrix;\n\n\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\tcamera.position.copy( _lightPositionWorld );\n\n\t\t_lookTarget.copy( camera.position );\n\t\t_lookTarget.add( this._cubeDirections[ viewportIndex ] );\n\t\tcamera.up.copy( this._cubeUps[ viewportIndex ] );\n\t\tcamera.lookAt( _lookTarget );\n\t\tcamera.updateMatrixWorld();\n\n\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\tthis._frustum.setFromProjectionMatrix( _projScreenMatrix );\n\n\t}\n\n}\n\nPointLightShadow.prototype.isPointLightShadow = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/PointLightShadow.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/lights/RectAreaLight.js": +/*!********************************************************!*\ + !*** ./node_modules/three/src/lights/RectAreaLight.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RectAreaLight\": () => (/* binding */ RectAreaLight)\n/* harmony export */ });\n/* harmony import */ var _Light_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Light.js */ \"./node_modules/three/src/lights/Light.js\");\n\n\nclass RectAreaLight extends _Light_js__WEBPACK_IMPORTED_MODULE_0__.Light {\n\n\tconstructor( color, intensity, width = 10, height = 10 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.width = source.width;\n\t\tthis.height = source.height;\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tdata.object.width = this.width;\n\t\tdata.object.height = this.height;\n\n\t\treturn data;\n\n\t}\n\n}\n\nRectAreaLight.prototype.isRectAreaLight = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/RectAreaLight.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/lights/SpotLight.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/lights/SpotLight.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SpotLight\": () => (/* binding */ SpotLight)\n/* harmony export */ });\n/* harmony import */ var _Light_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Light.js */ \"./node_modules/three/src/lights/Light.js\");\n/* harmony import */ var _SpotLightShadow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SpotLightShadow.js */ \"./node_modules/three/src/lights/SpotLightShadow.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n\n\n\n\nclass SpotLight extends _Light_js__WEBPACK_IMPORTED_MODULE_0__.Light {\n\n\tconstructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 1 ) {\n\n\t\tsuper( color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__.Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new _core_Object3D_js__WEBPACK_IMPORTED_MODULE_2__.Object3D();\n\n\t\tthis.distance = distance;\n\t\tthis.angle = angle;\n\t\tthis.penumbra = penumbra;\n\t\tthis.decay = decay; // for physically correct lights, should be 2.\n\n\t\tthis.shadow = new _SpotLightShadow_js__WEBPACK_IMPORTED_MODULE_1__.SpotLightShadow();\n\n\t}\n\n\tget power() {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\treturn this.intensity * Math.PI;\n\n\t}\n\n\tset power( power ) {\n\n\t\t// intensity = power per solid angle.\n\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tthis.intensity = power / Math.PI;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tthis.distance = source.distance;\n\t\tthis.angle = source.angle;\n\t\tthis.penumbra = source.penumbra;\n\t\tthis.decay = source.decay;\n\n\t\tthis.target = source.target.clone();\n\n\t\tthis.shadow = source.shadow.clone();\n\n\t\treturn this;\n\n\t}\n\n}\n\nSpotLight.prototype.isSpotLight = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/SpotLight.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/lights/SpotLightShadow.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/lights/SpotLightShadow.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SpotLightShadow\": () => (/* binding */ SpotLightShadow)\n/* harmony export */ });\n/* harmony import */ var _LightShadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LightShadow.js */ \"./node_modules/three/src/lights/LightShadow.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n/* harmony import */ var _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../cameras/PerspectiveCamera.js */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n\n\n\n\nclass SpotLightShadow extends _LightShadow_js__WEBPACK_IMPORTED_MODULE_0__.LightShadow {\n\n\tconstructor() {\n\n\t\tsuper( new _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_2__.PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t\tthis.focus = 1;\n\n\t}\n\n\tupdateMatrices( light ) {\n\n\t\tconst camera = this.camera;\n\n\t\tconst fov = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_1__.MathUtils.RAD2DEG * 2 * light.angle * this.focus;\n\t\tconst aspect = this.mapSize.width / this.mapSize.height;\n\t\tconst far = light.distance || camera.far;\n\n\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\tcamera.fov = fov;\n\t\t\tcamera.aspect = aspect;\n\t\t\tcamera.far = far;\n\t\t\tcamera.updateProjectionMatrix();\n\n\t\t}\n\n\t\tsuper.updateMatrices( light );\n\n\t}\n\n}\n\nSpotLightShadow.prototype.isSpotLightShadow = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/lights/SpotLightShadow.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/AnimationLoader.js": +/*!***********************************************************!*\ + !*** ./node_modules/three/src/loaders/AnimationLoader.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AnimationLoader\": () => (/* binding */ AnimationLoader)\n/* harmony export */ });\n/* harmony import */ var _animation_AnimationClip_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../animation/AnimationClip.js */ \"./node_modules/three/src/animation/AnimationClip.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\n\nclass AnimationLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_2__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__.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( JSON.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\tparse( json ) {\n\n\t\tconst animations = [];\n\n\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\tconst clip = _animation_AnimationClip_js__WEBPACK_IMPORTED_MODULE_0__.AnimationClip.parse( json[ i ] );\n\n\t\t\tanimations.push( clip );\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/AnimationLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/AudioLoader.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/loaders/AudioLoader.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AudioLoader\": () => (/* binding */ AudioLoader)\n/* harmony export */ });\n/* harmony import */ var _audio_AudioContext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../audio/AudioContext.js */ \"./node_modules/three/src/audio/AudioContext.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\n\nclass AudioLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_2__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__.FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( this.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\ttry {\n\n\t\t\t\t// Create a copy of the buffer. The `decodeAudioData` method\n\t\t\t\t// detaches the buffer when complete, preventing reuse.\n\t\t\t\tconst bufferCopy = buffer.slice( 0 );\n\n\t\t\t\tconst context = _audio_AudioContext_js__WEBPACK_IMPORTED_MODULE_0__.AudioContext.getContext();\n\t\t\t\tcontext.decodeAudioData( bufferCopy, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\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}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/AudioLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/BufferGeometryLoader.js": +/*!****************************************************************!*\ + !*** ./node_modules/three/src/loaders/BufferGeometryLoader.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BufferGeometryLoader\": () => (/* binding */ BufferGeometryLoader)\n/* harmony export */ });\n/* harmony import */ var _math_Sphere_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Sphere.js */ \"./node_modules/three/src/math/Sphere.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n/* harmony import */ var _core_InstancedBufferGeometry_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../core/InstancedBufferGeometry.js */ \"./node_modules/three/src/core/InstancedBufferGeometry.js\");\n/* harmony import */ var _core_InstancedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/InstancedBufferAttribute.js */ \"./node_modules/three/src/core/InstancedBufferAttribute.js\");\n/* harmony import */ var _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../core/InterleavedBufferAttribute.js */ \"./node_modules/three/src/core/InterleavedBufferAttribute.js\");\n/* harmony import */ var _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../core/InterleavedBuffer.js */ \"./node_modules/three/src/core/InterleavedBuffer.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils.js */ \"./node_modules/three/src/utils.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nclass BufferGeometryLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_5__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_4__.FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.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\tparse( json ) {\n\n\t\tconst interleavedBufferMap = {};\n\t\tconst arrayBufferMap = {};\n\n\t\tfunction getInterleavedBuffer( json, uuid ) {\n\n\t\t\tif ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];\n\n\t\t\tconst interleavedBuffers = json.interleavedBuffers;\n\t\t\tconst interleavedBuffer = interleavedBuffers[ uuid ];\n\n\t\t\tconst buffer = getArrayBuffer( json, interleavedBuffer.buffer );\n\n\t\t\tconst array = (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.getTypedArray)( interleavedBuffer.type, buffer );\n\t\t\tconst ib = new _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_9__.InterleavedBuffer( array, interleavedBuffer.stride );\n\t\t\tib.uuid = interleavedBuffer.uuid;\n\n\t\t\tinterleavedBufferMap[ uuid ] = ib;\n\n\t\t\treturn ib;\n\n\t\t}\n\n\t\tfunction getArrayBuffer( json, uuid ) {\n\n\t\t\tif ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];\n\n\t\t\tconst arrayBuffers = json.arrayBuffers;\n\t\t\tconst arrayBuffer = arrayBuffers[ uuid ];\n\n\t\t\tconst ab = new Uint32Array( arrayBuffer ).buffer;\n\n\t\t\tarrayBufferMap[ uuid ] = ab;\n\n\t\t\treturn ab;\n\n\t\t}\n\n\t\tconst geometry = json.isInstancedBufferGeometry ? new _core_InstancedBufferGeometry_js__WEBPACK_IMPORTED_MODULE_6__.InstancedBufferGeometry() : new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_3__.BufferGeometry();\n\n\t\tconst index = json.data.index;\n\n\t\tif ( index !== undefined ) {\n\n\t\t\tconst typedArray = (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.getTypedArray)( index.type, index.array );\n\t\t\tgeometry.setIndex( new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.BufferAttribute( typedArray, 1 ) );\n\n\t\t}\n\n\t\tconst attributes = json.data.attributes;\n\n\t\tfor ( const key in attributes ) {\n\n\t\t\tconst attribute = attributes[ key ];\n\t\t\tlet bufferAttribute;\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\tbufferAttribute = new _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_8__.InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t} else {\n\n\t\t\t\tconst typedArray = (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.getTypedArray)( attribute.type, attribute.array );\n\t\t\t\tconst bufferAttributeConstr = attribute.isInstancedBufferAttribute ? _core_InstancedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_7__.InstancedBufferAttribute : _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.BufferAttribute;\n\t\t\t\tbufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t}\n\n\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\tgeometry.setAttribute( key, bufferAttribute );\n\n\t\t}\n\n\t\tconst morphAttributes = json.data.morphAttributes;\n\n\t\tif ( morphAttributes ) {\n\n\t\t\tfor ( const key in morphAttributes ) {\n\n\t\t\t\tconst attributeArray = morphAttributes[ key ];\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, il = attributeArray.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst attribute = attributeArray[ i ];\n\t\t\t\t\tlet bufferAttribute;\n\n\t\t\t\t\tif ( attribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\tconst interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );\n\t\t\t\t\t\tbufferAttribute = new _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_8__.InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconst typedArray = (0,_utils_js__WEBPACK_IMPORTED_MODULE_10__.getTypedArray)( attribute.type, attribute.array );\n\t\t\t\t\t\tbufferAttribute = new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_2__.BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;\n\t\t\t\t\tarray.push( bufferAttribute );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.morphAttributes[ key ] = array;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst morphTargetsRelative = json.data.morphTargetsRelative;\n\n\t\tif ( morphTargetsRelative ) {\n\n\t\t\tgeometry.morphTargetsRelative = true;\n\n\t\t}\n\n\t\tconst groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\tif ( groups !== undefined ) {\n\n\t\t\tfor ( let i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\tconst group = groups[ i ];\n\n\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst boundingSphere = json.data.boundingSphere;\n\n\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\tconst center = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3();\n\n\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t}\n\n\t\t\tgeometry.boundingSphere = new _math_Sphere_js__WEBPACK_IMPORTED_MODULE_0__.Sphere( center, boundingSphere.radius );\n\n\t\t}\n\n\t\tif ( json.name ) geometry.name = json.name;\n\t\tif ( json.userData ) geometry.userData = json.userData;\n\n\t\treturn geometry;\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/BufferGeometryLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/Cache.js": +/*!*************************************************!*\ + !*** ./node_modules/three/src/loaders/Cache.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Cache\": () => (/* binding */ Cache)\n/* harmony export */ });\nconst Cache = {\n\n\tenabled: false,\n\n\tfiles: {},\n\n\tadd: function ( key, file ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\tthis.files[ key ] = file;\n\n\t},\n\n\tget: function ( key ) {\n\n\t\tif ( this.enabled === false ) return;\n\n\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\treturn this.files[ key ];\n\n\t},\n\n\tremove: function ( key ) {\n\n\t\tdelete this.files[ key ];\n\n\t},\n\n\tclear: function () {\n\n\t\tthis.files = {};\n\n\t}\n\n};\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/Cache.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/CompressedTextureLoader.js": +/*!*******************************************************************!*\ + !*** ./node_modules/three/src/loaders/CompressedTextureLoader.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CompressedTextureLoader\": () => (/* binding */ CompressedTextureLoader)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _textures_CompressedTexture_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../textures/CompressedTexture.js */ \"./node_modules/three/src/textures/CompressedTexture.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\n\n\n/**\n * Abstract Base class to block based textures loader (dds, pvr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction CompressedTextureLoader( manager ) {\n\n\t_Loader_js__WEBPACK_IMPORTED_MODULE_3__.Loader.call( this, manager );\n\n}\n\nCompressedTextureLoader.prototype = Object.assign( Object.create( _Loader_js__WEBPACK_IMPORTED_MODULE_3__.Loader.prototype ), {\n\n\tconstructor: CompressedTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst images = [];\n\n\t\tconst texture = new _textures_CompressedTexture_js__WEBPACK_IMPORTED_MODULE_2__.CompressedTexture();\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__.FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\timages[ i ] = {\n\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t};\n\n\t\t\t\tloaded += 1;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) texture.minFilter = _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;\n\n\t\t\t\t\ttexture.image = images;\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\tif ( Array.isArray( url ) ) {\n\n\t\t\tfor ( let i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tconst texDatas = scope.parse( buffer, true );\n\n\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\tconst faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\tfor ( let f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\tfor ( let i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.image = images;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\ttexture.minFilter = _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/CompressedTextureLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/CubeTextureLoader.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/loaders/CubeTextureLoader.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CubeTextureLoader\": () => (/* binding */ CubeTextureLoader)\n/* harmony export */ });\n/* harmony import */ var _ImageLoader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ImageLoader.js */ \"./node_modules/three/src/loaders/ImageLoader.js\");\n/* harmony import */ var _textures_CubeTexture_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../textures/CubeTexture.js */ \"./node_modules/three/src/textures/CubeTexture.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\n\nclass CubeTextureLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_2__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( urls, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new _textures_CubeTexture_js__WEBPACK_IMPORTED_MODULE_1__.CubeTexture();\n\n\t\tconst loader = new _ImageLoader_js__WEBPACK_IMPORTED_MODULE_0__.ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tlet loaded = 0;\n\n\t\tfunction loadTexture( i ) {\n\n\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\tloaded ++;\n\n\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, undefined, onError );\n\n\t\t}\n\n\t\tfor ( let i = 0; i < urls.length; ++ i ) {\n\n\t\t\tloadTexture( i );\n\n\t\t}\n\n\t\treturn texture;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/CubeTextureLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/DataTextureLoader.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/loaders/DataTextureLoader.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DataTextureLoader\": () => (/* binding */ DataTextureLoader)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _textures_DataTexture_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../textures/DataTexture.js */ \"./node_modules/three/src/textures/DataTexture.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\n\n\n/**\n * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n *\n * Sub classes have to implement the parse() method which will be used in load().\n */\n\nfunction DataTextureLoader( manager ) {\n\n\t_Loader_js__WEBPACK_IMPORTED_MODULE_3__.Loader.call( this, manager );\n\n}\n\nDataTextureLoader.prototype = Object.assign( Object.create( _Loader_js__WEBPACK_IMPORTED_MODULE_3__.Loader.prototype ), {\n\n\tconstructor: DataTextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst texture = new _textures_DataTexture_js__WEBPACK_IMPORTED_MODULE_2__.DataTexture();\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__.FileLoader( this.manager );\n\t\tloader.setResponseType( 'arraybuffer' );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setPath( this.path );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( buffer ) {\n\n\t\t\tconst texData = scope.parse( buffer );\n\n\t\t\tif ( ! texData ) return;\n\n\t\t\tif ( texData.image !== undefined ) {\n\n\t\t\t\ttexture.image = texData.image;\n\n\t\t\t} else if ( texData.data !== undefined ) {\n\n\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t}\n\n\t\t\ttexture.wrapS = texData.wrapS !== undefined ? texData.wrapS : _constants_js__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping;\n\t\t\ttexture.wrapT = texData.wrapT !== undefined ? texData.wrapT : _constants_js__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping;\n\n\t\t\ttexture.magFilter = texData.magFilter !== undefined ? texData.magFilter : _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;\n\t\t\ttexture.minFilter = texData.minFilter !== undefined ? texData.minFilter : _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;\n\n\t\t\ttexture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;\n\n\t\t\tif ( texData.encoding !== undefined ) {\n\n\t\t\t\ttexture.encoding = texData.encoding;\n\n\t\t\t}\n\n\t\t\tif ( texData.flipY !== undefined ) {\n\n\t\t\t\ttexture.flipY = texData.flipY;\n\n\t\t\t}\n\n\t\t\tif ( texData.format !== undefined ) {\n\n\t\t\t\ttexture.format = texData.format;\n\n\t\t\t}\n\n\t\t\tif ( texData.type !== undefined ) {\n\n\t\t\t\ttexture.type = texData.type;\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmaps !== undefined ) {\n\n\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\t\t\t\ttexture.minFilter = _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapLinearFilter; // presumably...\n\n\t\t\t}\n\n\t\t\tif ( texData.mipmapCount === 1 ) {\n\n\t\t\t\ttexture.minFilter = _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;\n\n\t\t\t}\n\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t}, onProgress, onError );\n\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/DataTextureLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/FileLoader.js": +/*!******************************************************!*\ + !*** ./node_modules/three/src/loaders/FileLoader.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FileLoader\": () => (/* binding */ FileLoader)\n/* harmony export */ });\n/* harmony import */ var _Cache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Cache.js */ \"./node_modules/three/src/loaders/Cache.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\nconst loading = {};\n\nfunction FileLoader( manager ) {\n\n\t_Loader_js__WEBPACK_IMPORTED_MODULE_1__.Loader.call( this, manager );\n\n}\n\nFileLoader.prototype = Object.assign( Object.create( _Loader_js__WEBPACK_IMPORTED_MODULE_1__.Loader.prototype ), {\n\n\tconstructor: FileLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = _Cache_js__WEBPACK_IMPORTED_MODULE_0__.Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\t// Check if request is duplicate\n\n\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// Check for data: URI\n\t\tconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\tconst dataUriRegexResult = url.match( dataUriRegex );\n\t\tlet request;\n\n\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\tif ( dataUriRegexResult ) {\n\n\t\t\tconst mimeType = dataUriRegexResult[ 1 ];\n\t\t\tconst isBase64 = !! dataUriRegexResult[ 2 ];\n\n\t\t\tlet data = dataUriRegexResult[ 3 ];\n\t\t\tdata = decodeURIComponent( data );\n\n\t\t\tif ( isBase64 ) data = atob( data );\n\n\t\t\ttry {\n\n\t\t\t\tlet response;\n\t\t\t\tconst responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\tconst view = new Uint8Array( data.length );\n\n\t\t\t\t\t\tfor ( let i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\tconst parser = new DOMParser();\n\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// Initialise array for duplicate requests\n\n\t\t\tloading[ url ] = [];\n\n\t\t\tloading[ url ].push( {\n\n\t\t\t\tonLoad: onLoad,\n\t\t\t\tonProgress: onProgress,\n\t\t\t\tonError: onError\n\n\t\t\t} );\n\n\t\t\trequest = new XMLHttpRequest();\n\n\t\t\trequest.open( 'GET', url, true );\n\n\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\tconst response = this.response;\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t// Add to cache only on HTTP success, so that we do not cache\n\t\t\t\t\t// error response bodies as proper responses to requests.\n\t\t\t\t\t_Cache_js__WEBPACK_IMPORTED_MODULE_0__.Cache.add( url, response );\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemError( url );\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t}\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\trequest.addEventListener( 'abort', function ( event ) {\n\n\t\t\t\tconst callbacks = loading[ url ];\n\n\t\t\t\tdelete loading[ url ];\n\n\t\t\t\tfor ( let i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\tconst callback = callbacks[ i ];\n\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t}\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, false );\n\n\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\tfor ( const header in this.requestHeader ) {\n\n\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t}\n\n\t\t\trequest.send( null );\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\treturn request;\n\n\t},\n\n\tsetResponseType: function ( value ) {\n\n\t\tthis.responseType = value;\n\t\treturn this;\n\n\t},\n\n\tsetMimeType: function ( value ) {\n\n\t\tthis.mimeType = value;\n\t\treturn this;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/FileLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/FontLoader.js": +/*!******************************************************!*\ + !*** ./node_modules/three/src/loaders/FontLoader.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FontLoader\": () => (/* binding */ FontLoader)\n/* harmony export */ });\n/* harmony import */ var _extras_core_Font_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../extras/core/Font.js */ \"./node_modules/three/src/extras/core/Font.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\n\nclass FontLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_2__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_1__.FileLoader( this.manager );\n\t\tloader.setPath( this.path );\n\t\tloader.setRequestHeader( this.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\tlet json;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t}\n\n\t\t\tconst font = scope.parse( json );\n\n\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json ) {\n\n\t\treturn new _extras_core_Font_js__WEBPACK_IMPORTED_MODULE_0__.Font( json );\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/FontLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/ImageBitmapLoader.js": +/*!*************************************************************!*\ + !*** ./node_modules/three/src/loaders/ImageBitmapLoader.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ImageBitmapLoader\": () => (/* binding */ ImageBitmapLoader)\n/* harmony export */ });\n/* harmony import */ var _Cache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Cache.js */ \"./node_modules/three/src/loaders/Cache.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\nfunction ImageBitmapLoader( manager ) {\n\n\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t}\n\n\tif ( typeof fetch === 'undefined' ) {\n\n\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t}\n\n\t_Loader_js__WEBPACK_IMPORTED_MODULE_1__.Loader.call( this, manager );\n\n\tthis.options = { premultiplyAlpha: 'none' };\n\n}\n\nImageBitmapLoader.prototype = Object.assign( Object.create( _Loader_js__WEBPACK_IMPORTED_MODULE_1__.Loader.prototype ), {\n\n\tconstructor: ImageBitmapLoader,\n\n\tisImageBitmapLoader: true,\n\n\tsetOptions: function setOptions( options ) {\n\n\t\tthis.options = options;\n\n\t\treturn this;\n\n\t},\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tif ( url === undefined ) url = '';\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = _Cache_js__WEBPACK_IMPORTED_MODULE_0__.Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst fetchOptions = {};\n\t\tfetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';\n\t\tfetchOptions.headers = this.requestHeader;\n\n\t\tfetch( url, fetchOptions ).then( function ( res ) {\n\n\t\t\treturn res.blob();\n\n\t\t} ).then( function ( blob ) {\n\n\t\t\treturn createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );\n\n\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\t_Cache_js__WEBPACK_IMPORTED_MODULE_0__.Cache.add( url, imageBitmap );\n\n\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} ).catch( function ( e ) {\n\n\t\t\tif ( onError ) onError( e );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t} );\n\n\t\tscope.manager.itemStart( url );\n\n\t}\n\n} );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/ImageBitmapLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/ImageLoader.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/loaders/ImageLoader.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ImageLoader\": () => (/* binding */ ImageLoader)\n/* harmony export */ });\n/* harmony import */ var _Cache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Cache.js */ \"./node_modules/three/src/loaders/Cache.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\nclass ImageLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_1__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\turl = this.manager.resolveURL( url );\n\n\t\tconst scope = this;\n\n\t\tconst cached = _Cache_js__WEBPACK_IMPORTED_MODULE_0__.Cache.get( url );\n\n\t\tif ( cached !== undefined ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\tsetTimeout( function () {\n\n\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, 0 );\n\n\t\t\treturn cached;\n\n\t\t}\n\n\t\tconst image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\tfunction onImageLoad() {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\t_Cache_js__WEBPACK_IMPORTED_MODULE_0__.Cache.add( url, this );\n\n\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\tfunction onImageError( event ) {\n\n\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\tif ( onError ) onError( event );\n\n\t\t\tscope.manager.itemError( url );\n\t\t\tscope.manager.itemEnd( url );\n\n\t\t}\n\n\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t}\n\n\t\tscope.manager.itemStart( url );\n\n\t\timage.src = url;\n\n\t\treturn image;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/ImageLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/Loader.js": +/*!**************************************************!*\ + !*** ./node_modules/three/src/loaders/Loader.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Loader\": () => (/* binding */ Loader)\n/* harmony export */ });\n/* harmony import */ var _LoadingManager_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./LoadingManager.js */ \"./node_modules/three/src/loaders/LoadingManager.js\");\n\n\nfunction Loader( manager ) {\n\n\tthis.manager = ( manager !== undefined ) ? manager : _LoadingManager_js__WEBPACK_IMPORTED_MODULE_0__.DefaultLoadingManager;\n\n\tthis.crossOrigin = 'anonymous';\n\tthis.withCredentials = false;\n\tthis.path = '';\n\tthis.resourcePath = '';\n\tthis.requestHeader = {};\n\n}\n\nObject.assign( Loader.prototype, {\n\n\tload: function ( /* url, onLoad, onProgress, onError */ ) {},\n\n\tloadAsync: function ( url, onProgress ) {\n\n\t\tconst scope = this;\n\n\t\treturn new Promise( function ( resolve, reject ) {\n\n\t\t\tscope.load( url, resolve, onProgress, reject );\n\n\t\t} );\n\n\t},\n\n\tparse: function ( /* data */ ) {},\n\n\tsetCrossOrigin: function ( crossOrigin ) {\n\n\t\tthis.crossOrigin = crossOrigin;\n\t\treturn this;\n\n\t},\n\n\tsetWithCredentials: function ( value ) {\n\n\t\tthis.withCredentials = value;\n\t\treturn this;\n\n\t},\n\n\tsetPath: function ( path ) {\n\n\t\tthis.path = path;\n\t\treturn this;\n\n\t},\n\n\tsetResourcePath: function ( resourcePath ) {\n\n\t\tthis.resourcePath = resourcePath;\n\t\treturn this;\n\n\t},\n\n\tsetRequestHeader: function ( requestHeader ) {\n\n\t\tthis.requestHeader = requestHeader;\n\t\treturn this;\n\n\t}\n\n} );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/Loader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/LoaderUtils.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/loaders/LoaderUtils.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LoaderUtils\": () => (/* binding */ LoaderUtils)\n/* harmony export */ });\nconst LoaderUtils = {\n\n\tdecodeText: function ( array ) {\n\n\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\treturn new TextDecoder().decode( array );\n\n\t\t}\n\n\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\tlet s = '';\n\n\t\tfor ( let i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t// Implicitly assumes little-endian.\n\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t}\n\n\t\ttry {\n\n\t\t\t// merges multi-byte utf-8 characters.\n\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t} catch ( e ) { // see #16358\n\n\t\t\treturn s;\n\n\t\t}\n\n\t},\n\n\textractUrlBase: function ( url ) {\n\n\t\tconst index = url.lastIndexOf( '/' );\n\n\t\tif ( index === - 1 ) return './';\n\n\t\treturn url.substr( 0, index + 1 );\n\n\t}\n\n};\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/LoaderUtils.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/LoadingManager.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/loaders/LoadingManager.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DefaultLoadingManager\": () => (/* binding */ DefaultLoadingManager),\n/* harmony export */ \"LoadingManager\": () => (/* binding */ LoadingManager)\n/* harmony export */ });\nfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\tconst scope = this;\n\n\tlet isLoading = false;\n\tlet itemsLoaded = 0;\n\tlet itemsTotal = 0;\n\tlet urlModifier = undefined;\n\tconst handlers = [];\n\n\t// Refer to #5689 for the reason why we don't set .onStart\n\t// in the constructor\n\n\tthis.onStart = undefined;\n\tthis.onLoad = onLoad;\n\tthis.onProgress = onProgress;\n\tthis.onError = onError;\n\n\tthis.itemStart = function ( url ) {\n\n\t\titemsTotal ++;\n\n\t\tif ( isLoading === false ) {\n\n\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t}\n\n\t\tisLoading = true;\n\n\t};\n\n\tthis.itemEnd = function ( url ) {\n\n\t\titemsLoaded ++;\n\n\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t}\n\n\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\tisLoading = false;\n\n\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\tscope.onLoad();\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.itemError = function ( url ) {\n\n\t\tif ( scope.onError !== undefined ) {\n\n\t\t\tscope.onError( url );\n\n\t\t}\n\n\t};\n\n\tthis.resolveURL = function ( url ) {\n\n\t\tif ( urlModifier ) {\n\n\t\t\treturn urlModifier( url );\n\n\t\t}\n\n\t\treturn url;\n\n\t};\n\n\tthis.setURLModifier = function ( transform ) {\n\n\t\turlModifier = transform;\n\n\t\treturn this;\n\n\t};\n\n\tthis.addHandler = function ( regex, loader ) {\n\n\t\thandlers.push( regex, loader );\n\n\t\treturn this;\n\n\t};\n\n\tthis.removeHandler = function ( regex ) {\n\n\t\tconst index = handlers.indexOf( regex );\n\n\t\tif ( index !== - 1 ) {\n\n\t\t\thandlers.splice( index, 2 );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tthis.getHandler = function ( file ) {\n\n\t\tfor ( let i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\tconst regex = handlers[ i ];\n\t\t\tconst loader = handlers[ i + 1 ];\n\n\t\t\tif ( regex.global ) regex.lastIndex = 0; // see #17920\n\n\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\treturn loader;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn null;\n\n\t};\n\n}\n\nconst DefaultLoadingManager = new LoadingManager();\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/LoadingManager.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/MaterialLoader.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/loaders/MaterialLoader.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"MaterialLoader\": () => (/* binding */ MaterialLoader)\n/* harmony export */ });\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector4_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector4.js */ \"./node_modules/three/src/math/Vector4.js\");\n/* harmony import */ var _math_Matrix3_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../math/Matrix3.js */ \"./node_modules/three/src/math/Matrix3.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n/* harmony import */ var _materials_Materials_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../materials/Materials.js */ \"./node_modules/three/src/materials/Materials.js\");\n\n\n\n\n\n\n\n\n\n\nclass MaterialLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_7__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\t\tthis.textures = {};\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_6__.FileLoader( scope.manager );\n\t\tloader.setPath( scope.path );\n\t\tloader.setRequestHeader( scope.requestHeader );\n\t\tloader.setWithCredentials( scope.withCredentials );\n\t\tloader.load( url, function ( text ) {\n\n\t\t\ttry {\n\n\t\t\t\tonLoad( scope.parse( JSON.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\tparse( json ) {\n\n\t\tconst textures = this.textures;\n\n\t\tfunction getTexture( name ) {\n\n\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t}\n\n\t\t\treturn textures[ name ];\n\n\t\t}\n\n\t\tconst material = new _materials_Materials_js__WEBPACK_IMPORTED_MODULE_8__[ json.type ]();\n\n\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\tif ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );\n\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\tif ( json.sheen !== undefined ) material.sheen = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color().setHex( json.sheen );\n\t\tif ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\tif ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );\n\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\tif ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;\n\t\tif ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;\n\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\tif ( json.combine !== undefined ) material.combine = json.combine;\n\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\n\t\tif ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;\n\t\tif ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;\n\t\tif ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;\n\t\tif ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;\n\t\tif ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;\n\t\tif ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;\n\t\tif ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;\n\t\tif ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;\n\n\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\tif ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals;\n\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\tif ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents;\n\n\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\n\t\tif ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;\n\n\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\tif ( json.vertexColors !== undefined ) {\n\n\t\t\tif ( typeof json.vertexColors === 'number' ) {\n\n\t\t\t\tmaterial.vertexColors = ( json.vertexColors > 0 ) ? true : false;\n\n\t\t\t} else {\n\n\t\t\t\tmaterial.vertexColors = json.vertexColors;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Shader Material\n\n\t\tif ( json.uniforms !== undefined ) {\n\n\t\t\tfor ( const name in json.uniforms ) {\n\n\t\t\t\tconst uniform = json.uniforms[ name ];\n\n\t\t\t\tmaterial.uniforms[ name ] = {};\n\n\t\t\t\tswitch ( uniform.type ) {\n\n\t\t\t\t\tcase 't':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = getTexture( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'c':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color().setHex( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v2':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'v4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new _math_Vector4_js__WEBPACK_IMPORTED_MODULE_3__.Vector4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm3':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new _math_Matrix3_js__WEBPACK_IMPORTED_MODULE_4__.Matrix3().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'm4':\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_5__.Matrix4().fromArray( uniform.value );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tmaterial.uniforms[ name ].value = uniform.value;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json.defines !== undefined ) material.defines = json.defines;\n\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\n\t\tif ( json.extensions !== undefined ) {\n\n\t\t\tfor ( const key in json.extensions ) {\n\n\t\t\t\tmaterial.extensions[ key ] = json.extensions[ key ];\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Deprecated\n\n\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t// for PointsMaterial\n\n\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t// maps\n\n\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\t\tif ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );\n\n\t\tif ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );\n\n\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\tif ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;\n\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\tlet normalScale = json.normalScale;\n\n\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t}\n\n\t\t\tmaterial.normalScale = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2().fromArray( normalScale );\n\n\t\t}\n\n\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\t\tif ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;\n\n\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\t\tif ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;\n\n\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\tif ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );\n\t\tif ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );\n\t\tif ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );\n\t\tif ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_1__.Vector2().fromArray( json.clearcoatNormalScale );\n\n\t\tif ( json.transmission !== undefined ) material.transmission = json.transmission;\n\t\tif ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );\n\n\t\treturn material;\n\n\t}\n\n\tsetTextures( value ) {\n\n\t\tthis.textures = value;\n\t\treturn this;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/MaterialLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/ObjectLoader.js": +/*!********************************************************!*\ + !*** ./node_modules/three/src/loaders/ObjectLoader.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ObjectLoader\": () => (/* binding */ ObjectLoader)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _objects_Group_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../objects/Group.js */ \"./node_modules/three/src/objects/Group.js\");\n/* harmony import */ var _objects_InstancedMesh_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../objects/InstancedMesh.js */ \"./node_modules/three/src/objects/InstancedMesh.js\");\n/* harmony import */ var _objects_Sprite_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../objects/Sprite.js */ \"./node_modules/three/src/objects/Sprite.js\");\n/* harmony import */ var _objects_Points_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../objects/Points.js */ \"./node_modules/three/src/objects/Points.js\");\n/* harmony import */ var _objects_Line_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../objects/Line.js */ \"./node_modules/three/src/objects/Line.js\");\n/* harmony import */ var _objects_LineLoop_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../objects/LineLoop.js */ \"./node_modules/three/src/objects/LineLoop.js\");\n/* harmony import */ var _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../objects/LineSegments.js */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _objects_LOD_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../objects/LOD.js */ \"./node_modules/three/src/objects/LOD.js\");\n/* harmony import */ var _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../objects/Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _objects_SkinnedMesh_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../objects/SkinnedMesh.js */ \"./node_modules/three/src/objects/SkinnedMesh.js\");\n/* harmony import */ var _objects_Bone_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../objects/Bone.js */ \"./node_modules/three/src/objects/Bone.js\");\n/* harmony import */ var _objects_Skeleton_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../objects/Skeleton.js */ \"./node_modules/three/src/objects/Skeleton.js\");\n/* harmony import */ var _extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../extras/core/Shape.js */ \"./node_modules/three/src/extras/core/Shape.js\");\n/* harmony import */ var _scenes_Fog_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../scenes/Fog.js */ \"./node_modules/three/src/scenes/Fog.js\");\n/* harmony import */ var _scenes_FogExp2_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../scenes/FogExp2.js */ \"./node_modules/three/src/scenes/FogExp2.js\");\n/* harmony import */ var _lights_HemisphereLight_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../lights/HemisphereLight.js */ \"./node_modules/three/src/lights/HemisphereLight.js\");\n/* harmony import */ var _lights_SpotLight_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../lights/SpotLight.js */ \"./node_modules/three/src/lights/SpotLight.js\");\n/* harmony import */ var _lights_PointLight_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../lights/PointLight.js */ \"./node_modules/three/src/lights/PointLight.js\");\n/* harmony import */ var _lights_DirectionalLight_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../lights/DirectionalLight.js */ \"./node_modules/three/src/lights/DirectionalLight.js\");\n/* harmony import */ var _lights_AmbientLight_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../lights/AmbientLight.js */ \"./node_modules/three/src/lights/AmbientLight.js\");\n/* harmony import */ var _lights_RectAreaLight_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../lights/RectAreaLight.js */ \"./node_modules/three/src/lights/RectAreaLight.js\");\n/* harmony import */ var _lights_LightProbe_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../lights/LightProbe.js */ \"./node_modules/three/src/lights/LightProbe.js\");\n/* harmony import */ var _cameras_OrthographicCamera_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../cameras/OrthographicCamera.js */ \"./node_modules/three/src/cameras/OrthographicCamera.js\");\n/* harmony import */ var _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../cameras/PerspectiveCamera.js */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n/* harmony import */ var _scenes_Scene_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../scenes/Scene.js */ \"./node_modules/three/src/scenes/Scene.js\");\n/* harmony import */ var _textures_CubeTexture_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../textures/CubeTexture.js */ \"./node_modules/three/src/textures/CubeTexture.js\");\n/* harmony import */ var _textures_Texture_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../textures/Texture.js */ \"./node_modules/three/src/textures/Texture.js\");\n/* harmony import */ var _textures_DataTexture_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../textures/DataTexture.js */ \"./node_modules/three/src/textures/DataTexture.js\");\n/* harmony import */ var _ImageLoader_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./ImageLoader.js */ \"./node_modules/three/src/loaders/ImageLoader.js\");\n/* harmony import */ var _LoadingManager_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./LoadingManager.js */ \"./node_modules/three/src/loaders/LoadingManager.js\");\n/* harmony import */ var _animation_AnimationClip_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ../animation/AnimationClip.js */ \"./node_modules/three/src/animation/AnimationClip.js\");\n/* harmony import */ var _MaterialLoader_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./MaterialLoader.js */ \"./node_modules/three/src/loaders/MaterialLoader.js\");\n/* harmony import */ var _LoaderUtils_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./LoaderUtils.js */ \"./node_modules/three/src/loaders/LoaderUtils.js\");\n/* harmony import */ var _BufferGeometryLoader_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./BufferGeometryLoader.js */ \"./node_modules/three/src/loaders/BufferGeometryLoader.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n/* harmony import */ var _FileLoader_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./FileLoader.js */ \"./node_modules/three/src/loaders/FileLoader.js\");\n/* harmony import */ var _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ../geometries/Geometries.js */ \"./node_modules/three/src/geometries/Geometries.js\");\n/* harmony import */ var _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ../extras/curves/Curves.js */ \"./node_modules/three/src/extras/curves/Curves.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ../utils.js */ \"./node_modules/three/src/utils.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass ObjectLoader extends _Loader_js__WEBPACK_IMPORTED_MODULE_38__.Loader {\n\n\tconstructor( manager ) {\n\n\t\tsuper( manager );\n\n\t}\n\n\tload( url, onLoad, onProgress, onError ) {\n\n\t\tconst scope = this;\n\n\t\tconst path = ( this.path === '' ) ? _LoaderUtils_js__WEBPACK_IMPORTED_MODULE_36__.LoaderUtils.extractUrlBase( url ) : this.path;\n\t\tthis.resourcePath = this.resourcePath || path;\n\n\t\tconst loader = new _FileLoader_js__WEBPACK_IMPORTED_MODULE_39__.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\tlet json = null;\n\n\t\t\ttry {\n\n\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tconst metadata = json.metadata;\n\n\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tscope.parse( json, onLoad );\n\n\t\t}, onProgress, onError );\n\n\t}\n\n\tparse( json, onLoad ) {\n\n\t\tconst animations = this.parseAnimations( json.animations );\n\t\tconst shapes = this.parseShapes( json.shapes );\n\t\tconst geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\tconst images = this.parseImages( json.images, function () {\n\n\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t} );\n\n\t\tconst textures = this.parseTextures( json.textures, images );\n\t\tconst materials = this.parseMaterials( json.materials, textures );\n\n\t\tconst object = this.parseObject( json.object, geometries, materials, animations );\n\t\tconst skeletons = this.parseSkeletons( json.skeletons, object );\n\n\t\tthis.bindSkeletons( object, skeletons );\n\n\t\t//\n\n\t\tif ( onLoad !== undefined ) {\n\n\t\t\tlet hasImages = false;\n\n\t\t\tfor ( const uuid in images ) {\n\n\t\t\t\tif ( images[ uuid ] instanceof HTMLImageElement ) {\n\n\t\t\t\t\thasImages = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( hasImages === false ) onLoad( object );\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tparseShapes( json ) {\n\n\t\tconst shapes = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst shape = new _extras_core_Shape_js__WEBPACK_IMPORTED_MODULE_16__.Shape().fromJSON( json[ i ] );\n\n\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn shapes;\n\n\t}\n\n\tparseSkeletons( json, object ) {\n\n\t\tconst skeletons = {};\n\t\tconst bones = {};\n\n\t\t// generate bone lookup table\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isBone ) bones[ child.uuid ] = child;\n\n\t\t} );\n\n\t\t// create skeletons\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst skeleton = new _objects_Skeleton_js__WEBPACK_IMPORTED_MODULE_15__.Skeleton().fromJSON( json[ i ], bones );\n\n\t\t\t\tskeletons[ skeleton.uuid ] = skeleton;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn skeletons;\n\n\t}\n\n\tparseGeometries( json, shapes ) {\n\n\t\tconst geometries = {};\n\t\tlet geometryShapes;\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst bufferGeometryLoader = new _BufferGeometryLoader_js__WEBPACK_IMPORTED_MODULE_37__.BufferGeometryLoader();\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tlet geometry;\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\tcase 'BoxBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'TubeGeometry':\n\t\t\t\t\tcase 'TubeBufferGeometry':\n\n\t\t\t\t\t\t// This only works for built-in curves (e.g. CatmullRomCurve3).\n\t\t\t\t\t\t// User defined curves or instances of CurvePath will not be deserialized.\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tnew _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_41__[ data.path.type ]().fromJSON( data.path ),\n\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\tdata.closed\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\tgeometryShapes = [];\n\n\t\t\t\t\t\tfor ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\tconst shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\tdata.options.extrudePath = new _extras_curves_Curves_js__WEBPACK_IMPORTED_MODULE_41__[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry = new _geometries_Geometries_js__WEBPACK_IMPORTED_MODULE_40__[ data.type ](\n\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'BufferGeometry':\n\t\t\t\t\tcase 'InstancedBufferGeometry':\n\n\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.' );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn geometries;\n\n\t}\n\n\tparseMaterials( json, textures ) {\n\n\t\tconst cache = {}; // MultiMaterial\n\t\tconst materials = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tconst loader = new _MaterialLoader_js__WEBPACK_IMPORTED_MODULE_35__.MaterialLoader();\n\t\t\tloader.setTextures( textures );\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t// Deprecated\n\n\t\t\t\t\tconst array = [];\n\n\t\t\t\t\tfor ( let j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\tconst material = data.materials[ j ];\n\n\t\t\t\t\t\tif ( cache[ material.uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tcache[ material.uuid ] = loader.parse( material );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( cache[ material.uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( cache[ data.uuid ] === undefined ) {\n\n\t\t\t\t\t\tcache[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tmaterials[ data.uuid ] = cache[ data.uuid ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn materials;\n\n\t}\n\n\tparseAnimations( json ) {\n\n\t\tconst animations = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tconst clip = _animation_AnimationClip_js__WEBPACK_IMPORTED_MODULE_34__.AnimationClip.parse( data );\n\n\t\t\t\tanimations[ clip.uuid ] = clip;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn animations;\n\n\t}\n\n\tparseImages( json, onLoad ) {\n\n\t\tconst scope = this;\n\t\tconst images = {};\n\n\t\tlet loader;\n\n\t\tfunction loadImage( url ) {\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn loader.load( url, function () {\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}, undefined, function () {\n\n\t\t\t\tscope.manager.itemError( url );\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tfunction deserializeImage( image ) {\n\n\t\t\tif ( typeof image === 'string' ) {\n\n\t\t\t\tconst url = image;\n\n\t\t\t\tconst path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( url ) ? url : scope.resourcePath + url;\n\n\t\t\t\treturn loadImage( path );\n\n\t\t\t} else {\n\n\t\t\t\tif ( image.data ) {\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: (0,_utils_js__WEBPACK_IMPORTED_MODULE_42__.getTypedArray)( image.type, image.data ),\n\t\t\t\t\t\twidth: image.width,\n\t\t\t\t\t\theight: image.height\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\tconst manager = new _LoadingManager_js__WEBPACK_IMPORTED_MODULE_33__.LoadingManager( onLoad );\n\n\t\t\tloader = new _ImageLoader_js__WEBPACK_IMPORTED_MODULE_32__.ImageLoader( manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tfor ( let i = 0, il = json.length; i < il; i ++ ) {\n\n\t\t\t\tconst image = json[ i ];\n\t\t\t\tconst url = image.url;\n\n\t\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\t\t// load array of images e.g CubeTexture\n\n\t\t\t\t\timages[ image.uuid ] = [];\n\n\t\t\t\t\tfor ( let j = 0, jl = url.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tconst currentUrl = url[ j ];\n\n\t\t\t\t\t\tconst deserializedImage = deserializeImage( currentUrl );\n\n\t\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\t\tif ( deserializedImage instanceof HTMLImageElement ) {\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( deserializedImage );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// special case: handle array of data textures for cube textures\n\n\t\t\t\t\t\t\t\timages[ image.uuid ].push( new _textures_DataTexture_js__WEBPACK_IMPORTED_MODULE_31__.DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );\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} else {\n\n\t\t\t\t\t// load single image\n\n\t\t\t\t\tconst deserializedImage = deserializeImage( image.url );\n\n\t\t\t\t\tif ( deserializedImage !== null ) {\n\n\t\t\t\t\t\timages[ image.uuid ] = deserializedImage;\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 images;\n\n\t}\n\n\tparseTextures( json, images ) {\n\n\t\tfunction parseConstant( value, type ) {\n\n\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\treturn type[ value ];\n\n\t\t}\n\n\t\tconst textures = {};\n\n\t\tif ( json !== undefined ) {\n\n\t\t\tfor ( let i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\tconst data = json[ i ];\n\n\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t}\n\n\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t}\n\n\t\t\t\tlet texture;\n\t\t\t\tconst image = images[ data.image ];\n\n\t\t\t\tif ( Array.isArray( image ) ) {\n\n\t\t\t\t\ttexture = new _textures_CubeTexture_js__WEBPACK_IMPORTED_MODULE_29__.CubeTexture( image );\n\n\t\t\t\t\tif ( image.length === 6 ) texture.needsUpdate = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( image && image.data ) {\n\n\t\t\t\t\t\ttexture = new _textures_DataTexture_js__WEBPACK_IMPORTED_MODULE_31__.DataTexture( image.data, image.width, image.height );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture = new _textures_Texture_js__WEBPACK_IMPORTED_MODULE_30__.Texture( image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( image ) texture.needsUpdate = true; // textures can have undefined image data\n\n\t\t\t\t}\n\n\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\t\t\t\tif ( data.type !== undefined ) texture.type = data.type;\n\t\t\t\tif ( data.encoding !== undefined ) texture.encoding = data.encoding;\n\n\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\tif ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;\n\t\t\t\tif ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;\n\n\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn textures;\n\n\t}\n\n\tparseObject( data, geometries, materials, animations ) {\n\n\t\tlet object;\n\n\t\tfunction getGeometry( name ) {\n\n\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t}\n\n\t\t\treturn geometries[ name ];\n\n\t\t}\n\n\t\tfunction getMaterial( name ) {\n\n\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\tconst array = [];\n\n\t\t\t\tfor ( let i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\tconst uuid = name[ i ];\n\n\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn array;\n\n\t\t\t}\n\n\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t}\n\n\t\t\treturn materials[ name ];\n\n\t\t}\n\n\t\tlet geometry, material;\n\n\t\tswitch ( data.type ) {\n\n\t\t\tcase 'Scene':\n\n\t\t\t\tobject = new _scenes_Scene_js__WEBPACK_IMPORTED_MODULE_28__.Scene();\n\n\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\tobject.background = new _math_Color_js__WEBPACK_IMPORTED_MODULE_2__.Color( data.background );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\tobject.fog = new _scenes_Fog_js__WEBPACK_IMPORTED_MODULE_17__.Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\tobject.fog = new _scenes_FogExp2_js__WEBPACK_IMPORTED_MODULE_18__.FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\tobject = new _cameras_PerspectiveCamera_js__WEBPACK_IMPORTED_MODULE_27__.PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\tobject = new _cameras_OrthographicCamera_js__WEBPACK_IMPORTED_MODULE_26__.OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'AmbientLight':\n\n\t\t\t\tobject = new _lights_AmbientLight_js__WEBPACK_IMPORTED_MODULE_23__.AmbientLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'DirectionalLight':\n\n\t\t\t\tobject = new _lights_DirectionalLight_js__WEBPACK_IMPORTED_MODULE_22__.DirectionalLight( data.color, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointLight':\n\n\t\t\t\tobject = new _lights_PointLight_js__WEBPACK_IMPORTED_MODULE_21__.PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'RectAreaLight':\n\n\t\t\t\tobject = new _lights_RectAreaLight_js__WEBPACK_IMPORTED_MODULE_24__.RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SpotLight':\n\n\t\t\t\tobject = new _lights_SpotLight_js__WEBPACK_IMPORTED_MODULE_20__.SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'HemisphereLight':\n\n\t\t\t\tobject = new _lights_HemisphereLight_js__WEBPACK_IMPORTED_MODULE_19__.HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LightProbe':\n\n\t\t\t\tobject = new _lights_LightProbe_js__WEBPACK_IMPORTED_MODULE_25__.LightProbe().fromJSON( data );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t \tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new _objects_SkinnedMesh_js__WEBPACK_IMPORTED_MODULE_13__.SkinnedMesh( geometry, material );\n\n\t\t\t\tif ( data.bindMode !== undefined ) object.bindMode = data.bindMode;\n\t\t\t\tif ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );\n\t\t\t\tif ( data.skeleton !== undefined ) object.skeleton = data.skeleton;\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Mesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\n\t\t\t\tobject = new _objects_Mesh_js__WEBPACK_IMPORTED_MODULE_12__.Mesh( geometry, material );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'InstancedMesh':\n\n\t\t\t\tgeometry = getGeometry( data.geometry );\n\t\t\t\tmaterial = getMaterial( data.material );\n\t\t\t\tconst count = data.count;\n\t\t\t\tconst instanceMatrix = data.instanceMatrix;\n\n\t\t\t\tobject = new _objects_InstancedMesh_js__WEBPACK_IMPORTED_MODULE_5__.InstancedMesh( geometry, material, count );\n\t\t\t\tobject.instanceMatrix = new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_1__.BufferAttribute( new Float32Array( instanceMatrix.array ), 16 );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LOD':\n\n\t\t\t\tobject = new _objects_LOD_js__WEBPACK_IMPORTED_MODULE_11__.LOD();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Line':\n\n\t\t\t\tobject = new _objects_Line_js__WEBPACK_IMPORTED_MODULE_8__.Line( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineLoop':\n\n\t\t\t\tobject = new _objects_LineLoop_js__WEBPACK_IMPORTED_MODULE_9__.LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'LineSegments':\n\n\t\t\t\tobject = new _objects_LineSegments_js__WEBPACK_IMPORTED_MODULE_10__.LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'PointCloud':\n\t\t\tcase 'Points':\n\n\t\t\t\tobject = new _objects_Points_js__WEBPACK_IMPORTED_MODULE_7__.Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Sprite':\n\n\t\t\t\tobject = new _objects_Sprite_js__WEBPACK_IMPORTED_MODULE_6__.Sprite( getMaterial( data.material ) );\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Group':\n\n\t\t\t\tobject = new _objects_Group_js__WEBPACK_IMPORTED_MODULE_4__.Group();\n\n\t\t\t\tbreak;\n\n\t\t\tcase 'Bone':\n\n\t\t\t\tobject = new _objects_Bone_js__WEBPACK_IMPORTED_MODULE_14__.Bone();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tobject = new _core_Object3D_js__WEBPACK_IMPORTED_MODULE_3__.Object3D();\n\n\t\t}\n\n\t\tobject.uuid = data.uuid;\n\n\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\tif ( data.matrix !== undefined ) {\n\n\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t} else {\n\n\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t}\n\n\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\tif ( data.shadow ) {\n\n\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\tif ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;\n\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t}\n\n\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\t\tif ( data.layers !== undefined ) object.layers.mask = data.layers;\n\n\t\tif ( data.children !== undefined ) {\n\n\t\t\tconst children = data.children;\n\n\t\t\tfor ( let i = 0; i < children.length; i ++ ) {\n\n\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials, animations ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.animations !== undefined ) {\n\n\t\t\tconst objectAnimations = data.animations;\n\n\t\t\tfor ( let i = 0; i < objectAnimations.length; i ++ ) {\n\n\t\t\t\tconst uuid = objectAnimations[ i ];\n\n\t\t\t\tobject.animations.push( animations[ uuid ] );\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( data.type === 'LOD' ) {\n\n\t\t\tif ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;\n\n\t\t\tconst levels = data.levels;\n\n\t\t\tfor ( let l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tconst level = levels[ l ];\n\t\t\t\tconst child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn object;\n\n\t}\n\n\tbindSkeletons( object, skeletons ) {\n\n\t\tif ( Object.keys( skeletons ).length === 0 ) return;\n\n\t\tobject.traverse( function ( child ) {\n\n\t\t\tif ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {\n\n\t\t\t\tconst skeleton = skeletons[ child.skeleton ];\n\n\t\t\t\tif ( skeleton === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tchild.bind( skeleton, child.bindMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\t/* DEPRECATED */\n\n\tsetTexturePath( value ) {\n\n\t\tconsole.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' );\n\t\treturn this.setResourcePath( value );\n\n\t}\n\n}\n\nconst TEXTURE_MAPPING = {\n\tUVMapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.UVMapping,\n\tCubeReflectionMapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeReflectionMapping,\n\tCubeRefractionMapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeRefractionMapping,\n\tEquirectangularReflectionMapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.EquirectangularReflectionMapping,\n\tEquirectangularRefractionMapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.EquirectangularRefractionMapping,\n\tCubeUVReflectionMapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeUVReflectionMapping,\n\tCubeUVRefractionMapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.CubeUVRefractionMapping\n};\n\nconst TEXTURE_WRAPPING = {\n\tRepeatWrapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping,\n\tClampToEdgeWrapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping,\n\tMirroredRepeatWrapping: _constants_js__WEBPACK_IMPORTED_MODULE_0__.MirroredRepeatWrapping\n};\n\nconst TEXTURE_FILTER = {\n\tNearestFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestFilter,\n\tNearestMipmapNearestFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestMipmapNearestFilter,\n\tNearestMipmapLinearFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.NearestMipmapLinearFilter,\n\tLinearFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter,\n\tLinearMipmapNearestFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapNearestFilter,\n\tLinearMipmapLinearFilter: _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapLinearFilter\n};\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/ObjectLoader.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/loaders/TextureLoader.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/loaders/TextureLoader.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TextureLoader\": () => (/* binding */ TextureLoader)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _ImageLoader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ImageLoader.js */ \"./node_modules/three/src/loaders/ImageLoader.js\");\n/* harmony import */ var _textures_Texture_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../textures/Texture.js */ \"./node_modules/three/src/textures/Texture.js\");\n/* harmony import */ var _Loader_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Loader.js */ \"./node_modules/three/src/loaders/Loader.js\");\n\n\n\n\n\nfunction TextureLoader( manager ) {\n\n\t_Loader_js__WEBPACK_IMPORTED_MODULE_3__.Loader.call( this, manager );\n\n}\n\nTextureLoader.prototype = Object.assign( Object.create( _Loader_js__WEBPACK_IMPORTED_MODULE_3__.Loader.prototype ), {\n\n\tconstructor: TextureLoader,\n\n\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\tconst texture = new _textures_Texture_js__WEBPACK_IMPORTED_MODULE_2__.Texture();\n\n\t\tconst loader = new _ImageLoader_js__WEBPACK_IMPORTED_MODULE_1__.ImageLoader( this.manager );\n\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\tloader.setPath( this.path );\n\n\t\tloader.load( url, function ( image ) {\n\n\t\t\ttexture.image = image;\n\n\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\tconst isJPEG = url.search( /\\.jpe?g($|\\?)/i ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\ttexture.format = isJPEG ? _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBFormat : _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBAFormat;\n\t\t\ttexture.needsUpdate = true;\n\n\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\tonLoad( texture );\n\n\t\t\t}\n\n\t\t}, onProgress, onError );\n\n\t\treturn texture;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/loaders/TextureLoader.js?"); + +/***/ }), + /***/ "./node_modules/three/src/materials/LineBasicMaterial.js": /*!***************************************************************!*\ !*** ./node_modules/three/src/materials/LineBasicMaterial.js ***! @@ -690,6 +1800,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/math/Box2.js": +/*!*********************************************!*\ + !*** ./node_modules/three/src/math/Box2.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Box2\": () => (/* binding */ Box2)\n/* harmony export */ });\n/* harmony import */ var _Vector2_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n\n\nconst _vector = /*@__PURE__*/ new _Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\nclass Box2 {\n\n\tconstructor( min = new _Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( + Infinity, + Infinity ), max = new _Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( - Infinity, - Infinity ) ) {\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tset( min, max ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\n\t\treturn this;\n\n\t}\n\n\tsetFromPoints( points ) {\n\n\t\tthis.makeEmpty();\n\n\t\tfor ( let i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetFromCenterAndSize( center, size ) {\n\n\t\tconst halfSize = _vector.copy( size ).multiplyScalar( 0.5 );\n\t\tthis.min.copy( center ).sub( halfSize );\n\t\tthis.max.copy( center ).add( halfSize );\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tcopy( box ) {\n\n\t\tthis.min.copy( box.min );\n\t\tthis.max.copy( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tmakeEmpty() {\n\n\t\tthis.min.x = this.min.y = + Infinity;\n\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\treturn this;\n\n\t}\n\n\tisEmpty() {\n\n\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\ttarget = new _Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t}\n\n\tgetSize( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\ttarget = new _Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\t}\n\n\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t}\n\n\texpandByPoint( point ) {\n\n\t\tthis.min.min( point );\n\t\tthis.max.max( point );\n\n\t\treturn this;\n\n\t}\n\n\texpandByVector( vector ) {\n\n\t\tthis.min.sub( vector );\n\t\tthis.max.add( vector );\n\n\t\treturn this;\n\n\t}\n\n\texpandByScalar( scalar ) {\n\n\t\tthis.min.addScalar( - scalar );\n\t\tthis.max.addScalar( scalar );\n\n\t\treturn this;\n\n\t}\n\n\tcontainsPoint( point ) {\n\n\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t}\n\n\tcontainsBox( box ) {\n\n\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t}\n\n\tgetParameter( point, target ) {\n\n\t\t// This can potentially have a divide by zero if the box\n\t\t// has a size dimension of 0.\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\ttarget = new _Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\t}\n\n\t\treturn target.set(\n\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t);\n\n\t}\n\n\tintersectsBox( box ) {\n\n\t\t// using 4 splitting planes to rule out intersections\n\n\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t}\n\n\tclampPoint( point, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\ttarget = new _Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\t}\n\n\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t}\n\n\tdistanceToPoint( point ) {\n\n\t\tconst clampedPoint = _vector.copy( point ).clamp( this.min, this.max );\n\t\treturn clampedPoint.sub( point ).length();\n\n\t}\n\n\tintersect( box ) {\n\n\t\tthis.min.max( box.min );\n\t\tthis.max.min( box.max );\n\n\t\treturn this;\n\n\t}\n\n\tunion( box ) {\n\n\t\tthis.min.min( box.min );\n\t\tthis.max.max( box.max );\n\n\t\treturn this;\n\n\t}\n\n\ttranslate( offset ) {\n\n\t\tthis.min.add( offset );\n\t\tthis.max.add( offset );\n\n\t\treturn this;\n\n\t}\n\n\tequals( box ) {\n\n\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t}\n\n}\n\nBox2.prototype.isBox2 = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/Box2.js?"); + +/***/ }), + /***/ "./node_modules/three/src/math/Box3.js": /*!*********************************************!*\ !*** ./node_modules/three/src/math/Box3.js ***! @@ -710,6 +1830,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/math/Cylindrical.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/math/Cylindrical.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Cylindrical\": () => (/* binding */ Cylindrical)\n/* harmony export */ });\n/**\n * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n */\n\nclass Cylindrical {\n\n\tconstructor( radius = 1, theta = 0, y = 0 ) {\n\n\t\tthis.radius = radius; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = y; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tset( radius, theta, y ) {\n\n\t\tthis.radius = radius;\n\t\tthis.theta = theta;\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.radius = other.radius;\n\t\tthis.theta = other.theta;\n\t\tthis.y = other.y;\n\n\t\treturn this;\n\n\t}\n\n\tsetFromVector3( v ) {\n\n\t\treturn this.setFromCartesianCoords( v.x, v.y, v.z );\n\n\t}\n\n\tsetFromCartesianCoords( x, y, z ) {\n\n\t\tthis.radius = Math.sqrt( x * x + z * z );\n\t\tthis.theta = Math.atan2( x, z );\n\t\tthis.y = y;\n\n\t\treturn this;\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/Cylindrical.js?"); + +/***/ }), + /***/ "./node_modules/three/src/math/Euler.js": /*!**********************************************!*\ !*** ./node_modules/three/src/math/Euler.js ***! @@ -730,6 +1860,26 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/math/Interpolant.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/math/Interpolant.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Interpolant\": () => (/* binding */ Interpolant)\n/* harmony export */ });\n/**\n * Abstract base class of interpolants over parametric samples.\n *\n * The parameter domain is one dimensional, typically the time or a path\n * along a curve defined by the data.\n *\n * The sample values can have any dimensionality and derived classes may\n * apply special interpretations to the data.\n *\n * This class provides the interval seek in a Template Method, deferring\n * the actual interpolation to derived classes.\n *\n * Time complexity is O(1) for linear access crossing at most two points\n * and O(log N) for random access, where N is the number of positions.\n *\n * References:\n *\n * \t\thttp://www.oodesign.com/template-method-pattern.html\n *\n */\n\nfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\tthis.parameterPositions = parameterPositions;\n\tthis._cachedIndex = 0;\n\n\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\tthis.sampleValues = sampleValues;\n\tthis.valueSize = sampleSize;\n\n}\n\nObject.assign( Interpolant.prototype, {\n\n\tevaluate: function ( t ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet i1 = this._cachedIndex,\n\t\t\tt1 = pp[ i1 ],\n\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\tvalidate_interval: {\n\n\t\t\tseek: {\n\n\t\t\t\tlet right;\n\n\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\n\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t//- slower code:\n\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\tconst t1global = pp[ 1 ];\n\n\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\tfor ( let giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t} // linear scan\n\n\t\t\t\t// binary search\n\n\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\tconst mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t// check boundary cases, again\n\n\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t}\n\n\t\t\t} // seek\n\n\t\t\tthis._cachedIndex = i1;\n\n\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t} // validate_interval\n\n\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t},\n\n\tsettings: null, // optional, subclass-specific settings structure\n\t// Note: The indirection allows central control of many interpolants.\n\n\t// --- Protected interface\n\n\tDefaultSettings_: {},\n\n\tgetSettings_: function () {\n\n\t\treturn this.settings || this.DefaultSettings_;\n\n\t},\n\n\tcopySampleValue_: function ( index ) {\n\n\t\t// copies a sample value to the result buffer\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\t\t\toffset = index * stride;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t},\n\n\t// Template methods for derived classes:\n\n\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\tthrow new Error( 'call to abstract method' );\n\t\t// implementations shall return this.resultBuffer\n\n\t},\n\n\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t// empty\n\n\t}\n\n} );\n\n// DECLARE ALIAS AFTER assign prototype\nObject.assign( Interpolant.prototype, {\n\n\t//( 0, t, t0 ), returns this.resultBuffer\n\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t//( N-1, tN-1, t ), returns this.resultBuffer\n\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/Interpolant.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/math/Line3.js": +/*!**********************************************!*\ + !*** ./node_modules/three/src/math/Line3.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Line3\": () => (/* binding */ Line3)\n/* harmony export */ });\n/* harmony import */ var _Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _MathUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n\n\n\nconst _startP = /*@__PURE__*/ new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _startEnd = /*@__PURE__*/ new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\nclass Line3 {\n\n\tconstructor( start = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3(), end = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3() ) {\n\n\t\tthis.start = start;\n\t\tthis.end = end;\n\n\t}\n\n\tset( start, end ) {\n\n\t\tthis.start.copy( start );\n\t\tthis.end.copy( end );\n\n\t\treturn this;\n\n\t}\n\n\tcopy( line ) {\n\n\t\tthis.start.copy( line.start );\n\t\tthis.end.copy( line.end );\n\n\t\treturn this;\n\n\t}\n\n\tgetCenter( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\ttarget = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\t}\n\n\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t}\n\n\tdelta( target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\ttarget = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\t}\n\n\t\treturn target.subVectors( this.end, this.start );\n\n\t}\n\n\tdistanceSq() {\n\n\t\treturn this.start.distanceToSquared( this.end );\n\n\t}\n\n\tdistance() {\n\n\t\treturn this.start.distanceTo( this.end );\n\n\t}\n\n\tat( t, target ) {\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\ttarget = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tclosestPointToPointParameter( point, clampToLine ) {\n\n\t\t_startP.subVectors( point, this.start );\n\t\t_startEnd.subVectors( this.end, this.start );\n\n\t\tconst startEnd2 = _startEnd.dot( _startEnd );\n\t\tconst startEnd_startP = _startEnd.dot( _startP );\n\n\t\tlet t = startEnd_startP / startEnd2;\n\n\t\tif ( clampToLine ) {\n\n\t\t\tt = _MathUtils_js__WEBPACK_IMPORTED_MODULE_1__.MathUtils.clamp( t, 0, 1 );\n\n\t\t}\n\n\t\treturn t;\n\n\t}\n\n\tclosestPointToPoint( point, clampToLine, target ) {\n\n\t\tconst t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\tif ( target === undefined ) {\n\n\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\ttarget = new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\t}\n\n\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tthis.start.applyMatrix4( matrix );\n\t\tthis.end.applyMatrix4( matrix );\n\n\t\treturn this;\n\n\t}\n\n\tequals( line ) {\n\n\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/Line3.js?"); + +/***/ }), + /***/ "./node_modules/three/src/math/MathUtils.js": /*!**************************************************!*\ !*** ./node_modules/three/src/math/MathUtils.js ***! @@ -810,6 +1960,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/math/SphericalHarmonics3.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/math/SphericalHarmonics3.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SphericalHarmonics3\": () => (/* binding */ SphericalHarmonics3)\n/* harmony export */ });\n/* harmony import */ var _Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n\n\n/**\n * Primary reference:\n * https://graphics.stanford.edu/papers/envmap/envmap.pdf\n *\n * Secondary reference:\n * https://www.ppsloan.org/publications/StupidSH36.pdf\n */\n\n// 3-band SH defined by 9 coefficients\n\nclass SphericalHarmonics3 {\n\n\tconstructor() {\n\n\t\tthis.coefficients = [];\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients.push( new _Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3() );\n\n\t\t}\n\n\t}\n\n\tset( coefficients ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].copy( coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tzero() {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].set( 0, 0, 0 );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\t// get the radiance in the direction of the normal\n\t// target is a Vector3\n\tgetAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 0.488603 * y );\n\t\ttarget.addScaledVector( coeff[ 2 ], 0.488603 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 0.488603 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );\n\t\ttarget.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );\n\t\ttarget.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );\n\n\t\treturn target;\n\n\t}\n\n\t// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal\n\t// target is a Vector3\n\t// https://graphics.stanford.edu/papers/envmap/envmap.pdf\n\tgetIrradianceAt( normal, target ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\tconst coeff = this.coefficients;\n\n\t\t// band 0\n\t\ttarget.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095\n\n\t\t// band 1\n\t\ttarget.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603\n\t\ttarget.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );\n\t\ttarget.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );\n\n\t\t// band 2\n\t\ttarget.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548\n\t\ttarget.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );\n\t\ttarget.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3\n\t\ttarget.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );\n\t\ttarget.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274\n\n\t\treturn target;\n\n\t}\n\n\tadd( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].add( sh.coefficients[ i ] );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\taddScaledSH( sh, s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tscale( s ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].multiplyScalar( s );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tlerp( sh, alpha ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tthis.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tequals( sh ) {\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tif ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tcopy( sh ) {\n\n\t\treturn this.set( sh.coefficients );\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor().copy( this );\n\n\t}\n\n\tfromArray( array, offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].fromArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\ttoArray( array = [], offset = 0 ) {\n\n\t\tconst coefficients = this.coefficients;\n\n\t\tfor ( let i = 0; i < 9; i ++ ) {\n\n\t\t\tcoefficients[ i ].toArray( array, offset + ( i * 3 ) );\n\n\t\t}\n\n\t\treturn array;\n\n\t}\n\n\t// evaluate the basis functions\n\t// shBasis is an Array[ 9 ]\n\tstatic getBasisAt( normal, shBasis ) {\n\n\t\t// normal is assumed to be unit length\n\n\t\tconst x = normal.x, y = normal.y, z = normal.z;\n\n\t\t// band 0\n\t\tshBasis[ 0 ] = 0.282095;\n\n\t\t// band 1\n\t\tshBasis[ 1 ] = 0.488603 * y;\n\t\tshBasis[ 2 ] = 0.488603 * z;\n\t\tshBasis[ 3 ] = 0.488603 * x;\n\n\t\t// band 2\n\t\tshBasis[ 4 ] = 1.092548 * x * y;\n\t\tshBasis[ 5 ] = 1.092548 * y * z;\n\t\tshBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );\n\t\tshBasis[ 7 ] = 1.092548 * x * z;\n\t\tshBasis[ 8 ] = 0.546274 * ( x * x - y * y );\n\n\t}\n\n}\n\nSphericalHarmonics3.prototype.isSphericalHarmonics3 = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/SphericalHarmonics3.js?"); + +/***/ }), + /***/ "./node_modules/three/src/math/Triangle.js": /*!*************************************************!*\ !*** ./node_modules/three/src/math/Triangle.js ***! @@ -850,6 +2010,56 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/math/interpolants/CubicInterpolant.js": +/*!**********************************************************************!*\ + !*** ./node_modules/three/src/math/interpolants/CubicInterpolant.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CubicInterpolant\": () => (/* binding */ CubicInterpolant)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _Interpolant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Interpolant.js */ \"./node_modules/three/src/math/Interpolant.js\");\n\n\n\n\n/**\n * Fast and simple cubic spline interpolant.\n *\n * It was derived from a Hermitian construction setting the first derivative\n * at each sample position to the linear slope between neighboring positions\n * over their parameter interval.\n */\n\nfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t_Interpolant_js__WEBPACK_IMPORTED_MODULE_1__.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\tthis._weightPrev = - 0;\n\tthis._offsetPrev = - 0;\n\tthis._weightNext = - 0;\n\tthis._offsetNext = - 0;\n\n}\n\nCubicInterpolant.prototype = Object.assign( Object.create( _Interpolant_js__WEBPACK_IMPORTED_MODULE_1__.Interpolant.prototype ), {\n\n\tconstructor: CubicInterpolant,\n\n\tDefaultSettings_: {\n\n\t\tendingStart: _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroCurvatureEnding,\n\t\tendingEnd: _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroCurvatureEnding\n\n\t},\n\n\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\tconst pp = this.parameterPositions;\n\t\tlet iPrev = i1 - 2,\n\t\t\tiNext = i1 + 1,\n\n\t\t\ttPrev = pp[ iPrev ],\n\t\t\ttNext = pp[ iNext ];\n\n\t\tif ( tPrev === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\tiPrev = i1;\n\t\t\t\t\ttPrev = t1;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( tNext === undefined ) {\n\n\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.ZeroSlopeEnding:\n\n\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\tiNext = i1;\n\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase _constants_js__WEBPACK_IMPORTED_MODULE_0__.WrapAroundEnding:\n\n\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\tiNext = 1;\n\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\ttNext = t0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst halfDt = ( t1 - t0 ) * 0.5,\n\t\t\tstride = this.valueSize;\n\n\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\tthis._offsetPrev = iPrev * stride;\n\t\tthis._offsetNext = iNext * stride;\n\n\t},\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tpp = p * p,\n\t\t\tppp = pp * p;\n\n\t\t// evaluate polynomials\n\n\t\tconst sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\tconst s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\tconst s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\tconst sN = wN * ppp - wN * pp;\n\n\t\t// combine data linearly\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/interpolants/CubicInterpolant.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/math/interpolants/DiscreteInterpolant.js": +/*!*************************************************************************!*\ + !*** ./node_modules/three/src/math/interpolants/DiscreteInterpolant.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DiscreteInterpolant\": () => (/* binding */ DiscreteInterpolant)\n/* harmony export */ });\n/* harmony import */ var _Interpolant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Interpolant.js */ \"./node_modules/three/src/math/Interpolant.js\");\n\n\n/**\n *\n * Interpolant that evaluates to the sample value at the position preceeding\n * the parameter.\n */\n\nfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t_Interpolant_js__WEBPACK_IMPORTED_MODULE_0__.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nDiscreteInterpolant.prototype = Object.assign( Object.create( _Interpolant_js__WEBPACK_IMPORTED_MODULE_0__.Interpolant.prototype ), {\n\n\tconstructor: DiscreteInterpolant,\n\n\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/interpolants/DiscreteInterpolant.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/math/interpolants/LinearInterpolant.js": +/*!***********************************************************************!*\ + !*** ./node_modules/three/src/math/interpolants/LinearInterpolant.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LinearInterpolant\": () => (/* binding */ LinearInterpolant)\n/* harmony export */ });\n/* harmony import */ var _Interpolant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Interpolant.js */ \"./node_modules/three/src/math/Interpolant.js\");\n\n\nfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t_Interpolant_js__WEBPACK_IMPORTED_MODULE_0__.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nLinearInterpolant.prototype = Object.assign( Object.create( _Interpolant_js__WEBPACK_IMPORTED_MODULE_0__.Interpolant.prototype ), {\n\n\tconstructor: LinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\toffset1 = i1 * stride,\n\t\t\toffset0 = offset1 - stride,\n\n\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\tweight0 = 1 - weight1;\n\n\t\tfor ( let i = 0; i !== stride; ++ i ) {\n\n\t\t\tresult[ i ] =\n\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/interpolants/LinearInterpolant.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"QuaternionLinearInterpolant\": () => (/* binding */ QuaternionLinearInterpolant)\n/* harmony export */ });\n/* harmony import */ var _Interpolant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../Interpolant.js */ \"./node_modules/three/src/math/Interpolant.js\");\n/* harmony import */ var _Quaternion_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../Quaternion.js */ \"./node_modules/three/src/math/Quaternion.js\");\n\n\n\n/**\n * Spherical linear unit quaternion interpolant.\n */\n\nfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t_Interpolant_js__WEBPACK_IMPORTED_MODULE_0__.Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n}\n\nQuaternionLinearInterpolant.prototype = Object.assign( Object.create( _Interpolant_js__WEBPACK_IMPORTED_MODULE_0__.Interpolant.prototype ), {\n\n\tconstructor: QuaternionLinearInterpolant,\n\n\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\tconst result = this.resultBuffer,\n\t\t\tvalues = this.sampleValues,\n\t\t\tstride = this.valueSize,\n\n\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\tlet offset = i1 * stride;\n\n\t\tfor ( let end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\t_Quaternion_js__WEBPACK_IMPORTED_MODULE_1__.Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/math/interpolants/QuaternionLinearInterpolant.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/objects/Bone.js": +/*!************************************************!*\ + !*** ./node_modules/three/src/objects/Bone.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Bone\": () => (/* binding */ Bone)\n/* harmony export */ });\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n\n\nfunction Bone() {\n\n\t_core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__.Object3D.call( this );\n\n\tthis.type = 'Bone';\n\n}\n\nBone.prototype = Object.assign( Object.create( _core_Object3D_js__WEBPACK_IMPORTED_MODULE_0__.Object3D.prototype ), {\n\n\tconstructor: Bone,\n\n\tisBone: true\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/objects/Bone.js?"); + +/***/ }), + /***/ "./node_modules/three/src/objects/Group.js": /*!*************************************************!*\ !*** ./node_modules/three/src/objects/Group.js ***! @@ -860,6 +2070,26 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/objects/InstancedMesh.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/objects/InstancedMesh.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"InstancedMesh\": () => (/* binding */ InstancedMesh)\n/* harmony export */ });\n/* harmony import */ var _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/BufferAttribute.js */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _Mesh_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n\n\n\n\nconst _instanceLocalMatrix = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_2__.Matrix4();\nconst _instanceWorldMatrix = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_2__.Matrix4();\n\nconst _instanceIntersects = [];\n\nconst _mesh = new _Mesh_js__WEBPACK_IMPORTED_MODULE_1__.Mesh();\n\nfunction InstancedMesh( geometry, material, count ) {\n\n\t_Mesh_js__WEBPACK_IMPORTED_MODULE_1__.Mesh.call( this, geometry, material );\n\n\tthis.instanceMatrix = new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute( new Float32Array( count * 16 ), 16 );\n\tthis.instanceColor = null;\n\n\tthis.count = count;\n\n\tthis.frustumCulled = false;\n\n}\n\nInstancedMesh.prototype = Object.assign( Object.create( _Mesh_js__WEBPACK_IMPORTED_MODULE_1__.Mesh.prototype ), {\n\n\tconstructor: InstancedMesh,\n\n\tisInstancedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\t_Mesh_js__WEBPACK_IMPORTED_MODULE_1__.Mesh.prototype.copy.call( this, source );\n\n\t\tthis.instanceMatrix.copy( source.instanceMatrix );\n\n\t\tif ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();\n\n\t\tthis.count = source.count;\n\n\t\treturn this;\n\n\t},\n\n\tgetColorAt: function ( index, color ) {\n\n\t\tcolor.fromArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tgetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.fromArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\traycast: function ( raycaster, intersects ) {\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst raycastTimes = this.count;\n\n\t\t_mesh.geometry = this.geometry;\n\t\t_mesh.material = this.material;\n\n\t\tif ( _mesh.material === undefined ) return;\n\n\t\tfor ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {\n\n\t\t\t// calculate the world matrix for each instance\n\n\t\t\tthis.getMatrixAt( instanceId, _instanceLocalMatrix );\n\n\t\t\t_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );\n\n\t\t\t// the mesh represents this single instance\n\n\t\t\t_mesh.matrixWorld = _instanceWorldMatrix;\n\n\t\t\t_mesh.raycast( raycaster, _instanceIntersects );\n\n\t\t\t// process the result of raycast\n\n\t\t\tfor ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {\n\n\t\t\t\tconst intersect = _instanceIntersects[ i ];\n\t\t\t\tintersect.instanceId = instanceId;\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_instanceIntersects.length = 0;\n\n\t\t}\n\n\t},\n\n\tsetColorAt: function ( index, color ) {\n\n\t\tif ( this.instanceColor === null ) {\n\n\t\t\tthis.instanceColor = new _core_BufferAttribute_js__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute( new Float32Array( this.count * 3 ), 3 );\n\n\t\t}\n\n\t\tcolor.toArray( this.instanceColor.array, index * 3 );\n\n\t},\n\n\tsetMatrixAt: function ( index, matrix ) {\n\n\t\tmatrix.toArray( this.instanceMatrix.array, index * 16 );\n\n\t},\n\n\tupdateMorphTargets: function () {\n\n\t},\n\n\tdispose: function () {\n\n\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t}\n\n} );\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/objects/InstancedMesh.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/objects/LOD.js": +/*!***********************************************!*\ + !*** ./node_modules/three/src/objects/LOD.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LOD\": () => (/* binding */ LOD)\n/* harmony export */ });\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n\n\n\nconst _v1 = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\nconst _v2 = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\nclass LOD extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_1__.Object3D {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis._currentLevel = 0;\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t},\n\t\t\tisLOD: {\n\t\t\t\tvalue: true,\n\t\t\t}\n\t\t} );\n\n\t\tthis.autoUpdate = true;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source, false );\n\n\t\tconst levels = source.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t}\n\n\t\tthis.autoUpdate = source.autoUpdate;\n\n\t\treturn this;\n\n\t}\n\n\taddLevel( object, distance = 0 ) {\n\n\t\tdistance = Math.abs( distance );\n\n\t\tconst levels = this.levels;\n\n\t\tlet l;\n\n\t\tfor ( l = 0; l < levels.length; l ++ ) {\n\n\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\tthis.add( object );\n\n\t\treturn this;\n\n\t}\n\n\tgetCurrentLevel() {\n\n\t\treturn this._currentLevel;\n\n\t}\n\n\tgetObjectForDistance( distance ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t}\n\n\t\treturn null;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 0 ) {\n\n\t\t\t_v1.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = raycaster.ray.origin.distanceTo( _v1 );\n\n\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t}\n\n\t}\n\n\tupdate( camera ) {\n\n\t\tconst levels = this.levels;\n\n\t\tif ( levels.length > 1 ) {\n\n\t\t\t_v1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t_v2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\tconst distance = _v1.distanceTo( _v2 ) / camera.zoom;\n\n\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\tlet i, l;\n\n\t\t\tfor ( i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._currentLevel = i - 1;\n\n\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON( meta ) {\n\n\t\tconst data = super.toJSON( meta );\n\n\t\tif ( this.autoUpdate === false ) data.object.autoUpdate = false;\n\n\t\tdata.object.levels = [];\n\n\t\tconst levels = this.levels;\n\n\t\tfor ( let i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\tconst level = levels[ i ];\n\n\t\t\tdata.object.levels.push( {\n\t\t\t\tobject: level.object.uuid,\n\t\t\t\tdistance: level.distance\n\t\t\t} );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/objects/LOD.js?"); + +/***/ }), + /***/ "./node_modules/three/src/objects/Line.js": /*!************************************************!*\ !*** ./node_modules/three/src/objects/Line.js ***! @@ -870,6 +2100,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/objects/LineLoop.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/objects/LineLoop.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LineLoop\": () => (/* binding */ LineLoop)\n/* harmony export */ });\n/* harmony import */ var _Line_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Line.js */ \"./node_modules/three/src/objects/Line.js\");\n\n\nclass LineLoop extends _Line_js__WEBPACK_IMPORTED_MODULE_0__.Line {\n\n\tconstructor( geometry, material ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n}\n\nLineLoop.prototype.isLineLoop = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/objects/LineLoop.js?"); + +/***/ }), + /***/ "./node_modules/three/src/objects/LineSegments.js": /*!********************************************************!*\ !*** ./node_modules/three/src/objects/LineSegments.js ***! @@ -900,6 +2140,46 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/objects/Skeleton.js": +/*!****************************************************!*\ + !*** ./node_modules/three/src/objects/Skeleton.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Skeleton\": () => (/* binding */ Skeleton)\n/* harmony export */ });\n/* harmony import */ var _Bone_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Bone.js */ \"./node_modules/three/src/objects/Bone.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/MathUtils.js */ \"./node_modules/three/src/math/MathUtils.js\");\n\n\n\n\nconst _offsetMatrix = /*@__PURE__*/ new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\nconst _identityMatrix = /*@__PURE__*/ new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\n\nclass Skeleton {\n\n\tconstructor( bones = [], boneInverses = [] ) {\n\n\t\tthis.uuid = _math_MathUtils_js__WEBPACK_IMPORTED_MODULE_2__.MathUtils.generateUUID();\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneInverses = boneInverses;\n\t\tthis.boneMatrices = null;\n\n\t\tthis.boneTexture = null;\n\t\tthis.boneTextureSize = 0;\n\n\t\tthis.frame = - 1;\n\n\t\tthis.init();\n\n\t}\n\n\tinit() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tthis.boneMatrices = new Float32Array( bones.length * 16 );\n\n\t\t// calculate inverse bone matrices if necessary\n\n\t\tif ( boneInverses.length === 0 ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\t// handle special case\n\n\t\t\tif ( bones.length !== boneInverses.length ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tcalculateInverses() {\n\n\t\tthis.boneInverses.length = 0;\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst inverse = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\n\n\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\tinverse.copy( this.bones[ i ].matrixWorld ).invert();\n\n\t\t\t}\n\n\t\t\tthis.boneInverses.push( inverse );\n\n\t\t}\n\n\t}\n\n\tpose() {\n\n\t\t// recover the bind-time world matrices\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tbone.matrixWorld.copy( this.boneInverses[ i ] ).invert();\n\n\t\t\t}\n\n\t\t}\n\n\t\t// compute the local matrices, positions, rotations and scales\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone ) {\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tbone.matrix.copy( bone.parent.matrixWorld ).invert();\n\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tupdate() {\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\t\tconst boneMatrices = this.boneMatrices;\n\t\tconst boneTexture = this.boneTexture;\n\n\t\t// flatten bone matrices to array\n\n\t\tfor ( let i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t// compute the offset between the current and the original transform\n\n\t\t\tconst matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;\n\n\t\t\t_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t_offsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t}\n\n\t\tif ( boneTexture !== null ) {\n\n\t\t\tboneTexture.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t}\n\n\tgetBoneByName( name ) {\n\n\t\tfor ( let i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\tconst bone = this.bones[ i ];\n\n\t\t\tif ( bone.name === name ) {\n\n\t\t\t\treturn bone;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tdispose( ) {\n\n\t\tif ( this.boneTexture !== null ) {\n\n\t\t\tthis.boneTexture.dispose();\n\n\t\t\tthis.boneTexture = null;\n\n\t\t}\n\n\t}\n\n\tfromJSON( json, bones ) {\n\n\t\tthis.uuid = json.uuid;\n\n\t\tfor ( let i = 0, l = json.bones.length; i < l; i ++ ) {\n\n\t\t\tconst uuid = json.bones[ i ];\n\t\t\tlet bone = bones[ uuid ];\n\n\t\t\tif ( bone === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );\n\t\t\t\tbone = new _Bone_js__WEBPACK_IMPORTED_MODULE_0__.Bone();\n\n\t\t\t}\n\n\t\t\tthis.bones.push( bone );\n\t\t\tthis.boneInverses.push( new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4().fromArray( json.boneInverses[ i ] ) );\n\n\t\t}\n\n\t\tthis.init();\n\n\t\treturn this;\n\n\t}\n\n\ttoJSON() {\n\n\t\tconst data = {\n\t\t\tmetadata: {\n\t\t\t\tversion: 4.5,\n\t\t\t\ttype: 'Skeleton',\n\t\t\t\tgenerator: 'Skeleton.toJSON'\n\t\t\t},\n\t\t\tbones: [],\n\t\t\tboneInverses: []\n\t\t};\n\n\t\tdata.uuid = this.uuid;\n\n\t\tconst bones = this.bones;\n\t\tconst boneInverses = this.boneInverses;\n\n\t\tfor ( let i = 0, l = bones.length; i < l; i ++ ) {\n\n\t\t\tconst bone = bones[ i ];\n\t\t\tdata.bones.push( bone.uuid );\n\n\t\t\tconst boneInverse = boneInverses[ i ];\n\t\t\tdata.boneInverses.push( boneInverse.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/objects/Skeleton.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/objects/SkinnedMesh.js": +/*!*******************************************************!*\ + !*** ./node_modules/three/src/objects/SkinnedMesh.js ***! + \*******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SkinnedMesh\": () => (/* binding */ SkinnedMesh)\n/* harmony export */ });\n/* harmony import */ var _Mesh_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Mesh.js */ \"./node_modules/three/src/objects/Mesh.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Vector4_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Vector4.js */ \"./node_modules/three/src/math/Vector4.js\");\n\n\n\n\n\nconst _basePosition = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\n\nconst _skinIndex = new _math_Vector4_js__WEBPACK_IMPORTED_MODULE_3__.Vector4();\nconst _skinWeight = new _math_Vector4_js__WEBPACK_IMPORTED_MODULE_3__.Vector4();\n\nconst _vector = new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_2__.Vector3();\nconst _matrix = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\n\nfunction SkinnedMesh( geometry, material ) {\n\n\t_Mesh_js__WEBPACK_IMPORTED_MODULE_0__.Mesh.call( this, geometry, material );\n\n\tthis.type = 'SkinnedMesh';\n\n\tthis.bindMode = 'attached';\n\tthis.bindMatrix = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\n\tthis.bindMatrixInverse = new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_1__.Matrix4();\n\n}\n\nSkinnedMesh.prototype = Object.assign( Object.create( _Mesh_js__WEBPACK_IMPORTED_MODULE_0__.Mesh.prototype ), {\n\n\tconstructor: SkinnedMesh,\n\n\tisSkinnedMesh: true,\n\n\tcopy: function ( source ) {\n\n\t\t_Mesh_js__WEBPACK_IMPORTED_MODULE_0__.Mesh.prototype.copy.call( this, source );\n\n\t\tthis.bindMode = source.bindMode;\n\t\tthis.bindMatrix.copy( source.bindMatrix );\n\t\tthis.bindMatrixInverse.copy( source.bindMatrixInverse );\n\n\t\tthis.skeleton = source.skeleton;\n\n\t\treturn this;\n\n\t},\n\n\tbind: function ( skeleton, bindMatrix ) {\n\n\t\tthis.skeleton = skeleton;\n\n\t\tif ( bindMatrix === undefined ) {\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t}\n\n\t\tthis.bindMatrix.copy( bindMatrix );\n\t\tthis.bindMatrixInverse.copy( bindMatrix ).invert();\n\n\t},\n\n\tpose: function () {\n\n\t\tthis.skeleton.pose();\n\n\t},\n\n\tnormalizeSkinWeights: function () {\n\n\t\tconst vector = new _math_Vector4_js__WEBPACK_IMPORTED_MODULE_3__.Vector4();\n\n\t\tconst skinWeight = this.geometry.attributes.skinWeight;\n\n\t\tfor ( let i = 0, l = skinWeight.count; i < l; i ++ ) {\n\n\t\t\tvector.x = skinWeight.getX( i );\n\t\t\tvector.y = skinWeight.getY( i );\n\t\t\tvector.z = skinWeight.getZ( i );\n\t\t\tvector.w = skinWeight.getW( i );\n\n\t\t\tconst scale = 1.0 / vector.manhattanLength();\n\n\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\tvector.multiplyScalar( scale );\n\n\t\t\t} else {\n\n\t\t\t\tvector.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t}\n\n\t\t\tskinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );\n\n\t\t}\n\n\t},\n\n\tupdateMatrixWorld: function ( force ) {\n\n\t\t_Mesh_js__WEBPACK_IMPORTED_MODULE_0__.Mesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.matrixWorld ).invert();\n\n\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\tthis.bindMatrixInverse.copy( this.bindMatrix ).invert();\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t}\n\n\t},\n\n\tboneTransform: function ( index, target ) {\n\n\t\tconst skeleton = this.skeleton;\n\t\tconst geometry = this.geometry;\n\n\t\t_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );\n\t\t_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );\n\n\t\t_basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix );\n\n\t\ttarget.set( 0, 0, 0 );\n\n\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\tconst weight = _skinWeight.getComponent( i );\n\n\t\t\tif ( weight !== 0 ) {\n\n\t\t\t\tconst boneIndex = _skinIndex.getComponent( i );\n\n\t\t\t\t_matrix.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );\n\n\t\t\t\ttarget.addScaledVector( _vector.copy( _basePosition ).applyMatrix4( _matrix ), weight );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn target.applyMatrix4( this.bindMatrixInverse );\n\n\t}\n\n} );\n\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/objects/SkinnedMesh.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/objects/Sprite.js": +/*!**************************************************!*\ + !*** ./node_modules/three/src/objects/Sprite.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Sprite\": () => (/* binding */ Sprite)\n/* harmony export */ });\n/* harmony import */ var _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Vector2.js */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../math/Vector3.js */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../math/Matrix4.js */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _math_Triangle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../math/Triangle.js */ \"./node_modules/three/src/math/Triangle.js\");\n/* harmony import */ var _core_Object3D_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/Object3D.js */ \"./node_modules/three/src/core/Object3D.js\");\n/* harmony import */ var _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../core/BufferGeometry.js */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../core/InterleavedBuffer.js */ \"./node_modules/three/src/core/InterleavedBuffer.js\");\n/* harmony import */ var _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/InterleavedBufferAttribute.js */ \"./node_modules/three/src/core/InterleavedBufferAttribute.js\");\n/* harmony import */ var _materials_SpriteMaterial_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../materials/SpriteMaterial.js */ \"./node_modules/three/src/materials/SpriteMaterial.js\");\n\n\n\n\n\n\n\n\n\n\nlet _geometry;\n\nconst _intersectPoint = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3();\nconst _worldScale = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3();\nconst _mvPosition = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3();\n\nconst _alignedPosition = /*@__PURE__*/ new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\nconst _rotatedPosition = /*@__PURE__*/ new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\nconst _viewWorldMatrix = /*@__PURE__*/ new _math_Matrix4_js__WEBPACK_IMPORTED_MODULE_2__.Matrix4();\n\nconst _vA = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3();\nconst _vB = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3();\nconst _vC = /*@__PURE__*/ new _math_Vector3_js__WEBPACK_IMPORTED_MODULE_1__.Vector3();\n\nconst _uvA = /*@__PURE__*/ new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\nconst _uvB = /*@__PURE__*/ new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\nconst _uvC = /*@__PURE__*/ new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\nclass Sprite extends _core_Object3D_js__WEBPACK_IMPORTED_MODULE_4__.Object3D {\n\n\tconstructor( material ) {\n\n\t\tsuper();\n\n\t\tthis.type = 'Sprite';\n\n\t\tif ( _geometry === undefined ) {\n\n\t\t\t_geometry = new _core_BufferGeometry_js__WEBPACK_IMPORTED_MODULE_5__.BufferGeometry();\n\n\t\t\tconst float32Array = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0, 0,\n\t\t\t\t0.5, - 0.5, 0, 1, 0,\n\t\t\t\t0.5, 0.5, 0, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 0, 1\n\t\t\t] );\n\n\t\t\tconst interleavedBuffer = new _core_InterleavedBuffer_js__WEBPACK_IMPORTED_MODULE_6__.InterleavedBuffer( float32Array, 5 );\n\n\t\t\t_geometry.setIndex( [ 0, 1, 2,\t0, 2, 3 ] );\n\t\t\t_geometry.setAttribute( 'position', new _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_7__.InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );\n\t\t\t_geometry.setAttribute( 'uv', new _core_InterleavedBufferAttribute_js__WEBPACK_IMPORTED_MODULE_7__.InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );\n\n\t\t}\n\n\t\tthis.geometry = _geometry;\n\t\tthis.material = ( material !== undefined ) ? material : new _materials_SpriteMaterial_js__WEBPACK_IMPORTED_MODULE_8__.SpriteMaterial();\n\n\t\tthis.center = new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2( 0.5, 0.5 );\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tif ( raycaster.camera === null ) {\n\n\t\t\tconsole.error( 'THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.' );\n\n\t\t}\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\n\t\t_viewWorldMatrix.copy( raycaster.camera.matrixWorld );\n\t\tthis.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );\n\n\t\t_mvPosition.setFromMatrixPosition( this.modelViewMatrix );\n\n\t\tif ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {\n\n\t\t\t_worldScale.multiplyScalar( - _mvPosition.z );\n\n\t\t}\n\n\t\tconst rotation = this.material.rotation;\n\t\tlet sin, cos;\n\n\t\tif ( rotation !== 0 ) {\n\n\t\t\tcos = Math.cos( rotation );\n\t\t\tsin = Math.sin( rotation );\n\n\t\t}\n\n\t\tconst center = this.center;\n\n\t\ttransformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\ttransformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\n\t\t_uvA.set( 0, 0 );\n\t\t_uvB.set( 1, 0 );\n\t\t_uvC.set( 1, 1 );\n\n\t\t// check first triangle\n\t\tlet intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );\n\n\t\tif ( intersect === null ) {\n\n\t\t\t// check second triangle\n\t\t\ttransformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );\n\t\t\t_uvB.set( 0, 1 );\n\n\t\t\tintersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );\n\t\t\tif ( intersect === null ) {\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst distance = raycaster.ray.origin.distanceTo( _intersectPoint );\n\n\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\tintersects.push( {\n\n\t\t\tdistance: distance,\n\t\t\tpoint: _intersectPoint.clone(),\n\t\t\tuv: _math_Triangle_js__WEBPACK_IMPORTED_MODULE_3__.Triangle.getUV( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new _math_Vector2_js__WEBPACK_IMPORTED_MODULE_0__.Vector2() ),\n\t\t\tface: null,\n\t\t\tobject: this\n\n\t\t} );\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy( source );\n\n\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\tthis.material = source.material;\n\n\t\treturn this;\n\n\t}\n\n}\n\nSprite.prototype.isSprite = true;\n\nfunction transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {\n\n\t// compute position in camera space\n\t_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );\n\n\t// to check if rotation is not zero\n\tif ( sin !== undefined ) {\n\n\t\t_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );\n\t\t_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );\n\n\t} else {\n\n\t\t_rotatedPosition.copy( _alignedPosition );\n\n\t}\n\n\n\tvertexPosition.copy( mvPosition );\n\tvertexPosition.x += _rotatedPosition.x;\n\tvertexPosition.y += _rotatedPosition.y;\n\n\t// transform to world space\n\tvertexPosition.applyMatrix4( _viewWorldMatrix );\n\n}\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/objects/Sprite.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/renderers/WebGL1Renderer.js": +/*!************************************************************!*\ + !*** ./node_modules/three/src/renderers/WebGL1Renderer.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"WebGL1Renderer\": () => (/* binding */ WebGL1Renderer)\n/* harmony export */ });\n/* harmony import */ var _WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./WebGLRenderer.js */ \"./node_modules/three/src/renderers/WebGLRenderer.js\");\n\n\nclass WebGL1Renderer extends _WebGLRenderer_js__WEBPACK_IMPORTED_MODULE_0__.WebGLRenderer {}\n\nWebGL1Renderer.prototype.isWebGL1Renderer = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/renderers/WebGL1Renderer.js?"); + +/***/ }), + /***/ "./node_modules/three/src/renderers/WebGLCubeRenderTarget.js": /*!*******************************************************************!*\ !*** ./node_modules/three/src/renderers/WebGLCubeRenderTarget.js ***! @@ -910,6 +2190,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/renderers/WebGLMultisampleRenderTarget.js": +/*!**************************************************************************!*\ + !*** ./node_modules/three/src/renderers/WebGLMultisampleRenderTarget.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"WebGLMultisampleRenderTarget\": () => (/* binding */ WebGLMultisampleRenderTarget)\n/* harmony export */ });\n/* harmony import */ var _WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./WebGLRenderTarget.js */ \"./node_modules/three/src/renderers/WebGLRenderTarget.js\");\n\n\nclass WebGLMultisampleRenderTarget extends _WebGLRenderTarget_js__WEBPACK_IMPORTED_MODULE_0__.WebGLRenderTarget {\n\n\tconstructor( width, height, options ) {\n\n\t\tsuper( width, height, options );\n\n\t\tthis.samples = 4;\n\n\t}\n\n\tcopy( source ) {\n\n\t\tsuper.copy.call( this, source );\n\n\t\tthis.samples = source.samples;\n\n\t\treturn this;\n\n\t}\n\n}\n\nWebGLMultisampleRenderTarget.prototype.isWebGLMultisampleRenderTarget = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/renderers/WebGLMultisampleRenderTarget.js?"); + +/***/ }), + /***/ "./node_modules/three/src/renderers/WebGLRenderTarget.js": /*!***************************************************************!*\ !*** ./node_modules/three/src/renderers/WebGLRenderTarget.js ***! @@ -2590,6 +3880,26 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/scenes/Fog.js": +/*!**********************************************!*\ + !*** ./node_modules/three/src/scenes/Fog.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Fog\": () => (/* binding */ Fog)\n/* harmony export */ });\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n\n\nclass Fog {\n\n\tconstructor( color, near, far ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color( color );\n\n\t\tthis.near = ( near !== undefined ) ? near : 1;\n\t\tthis.far = ( far !== undefined ) ? far : 1000;\n\n\t}\n\n\tclone() {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t}\n\n}\n\nFog.prototype.isFog = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/scenes/Fog.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/scenes/FogExp2.js": +/*!**************************************************!*\ + !*** ./node_modules/three/src/scenes/FogExp2.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"FogExp2\": () => (/* binding */ FogExp2)\n/* harmony export */ });\n/* harmony import */ var _math_Color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../math/Color.js */ \"./node_modules/three/src/math/Color.js\");\n\n\nclass FogExp2 {\n\n\tconstructor( color, density ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new _math_Color_js__WEBPACK_IMPORTED_MODULE_0__.Color( color );\n\t\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n\t}\n\n\tclone() {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t}\n\n\ttoJSON( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t}\n\n}\n\nFogExp2.prototype.isFogExp2 = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/scenes/FogExp2.js?"); + +/***/ }), + /***/ "./node_modules/three/src/scenes/Scene.js": /*!************************************************!*\ !*** ./node_modules/three/src/scenes/Scene.js ***! @@ -2600,6 +3910,26 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/textures/CanvasTexture.js": +/*!**********************************************************!*\ + !*** ./node_modules/three/src/textures/CanvasTexture.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CanvasTexture\": () => (/* binding */ CanvasTexture)\n/* harmony export */ });\n/* harmony import */ var _Texture_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Texture.js */ \"./node_modules/three/src/textures/Texture.js\");\n\n\nclass CanvasTexture extends _Texture_js__WEBPACK_IMPORTED_MODULE_0__.Texture {\n\n\tconstructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nCanvasTexture.prototype.isCanvasTexture = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/textures/CanvasTexture.js?"); + +/***/ }), + +/***/ "./node_modules/three/src/textures/CompressedTexture.js": +/*!**************************************************************!*\ + !*** ./node_modules/three/src/textures/CompressedTexture.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CompressedTexture\": () => (/* binding */ CompressedTexture)\n/* harmony export */ });\n/* harmony import */ var _Texture_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Texture.js */ \"./node_modules/three/src/textures/Texture.js\");\n\n\nclass CompressedTexture extends _Texture_js__WEBPACK_IMPORTED_MODULE_0__.Texture {\n\n\tconstructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n}\n\nCompressedTexture.prototype.isCompressedTexture = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/textures/CompressedTexture.js?"); + +/***/ }), + /***/ "./node_modules/three/src/textures/CubeTexture.js": /*!********************************************************!*\ !*** ./node_modules/three/src/textures/CubeTexture.js ***! @@ -2640,6 +3970,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/textures/DepthTexture.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/textures/DepthTexture.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"DepthTexture\": () => (/* binding */ DepthTexture)\n/* harmony export */ });\n/* harmony import */ var _Texture_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Texture.js */ \"./node_modules/three/src/textures/Texture.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n\n\n\nclass DepthTexture extends _Texture_js__WEBPACK_IMPORTED_MODULE_0__.Texture {\n\n\tconstructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : _constants_js__WEBPACK_IMPORTED_MODULE_1__.DepthFormat;\n\n\t\tif ( format !== _constants_js__WEBPACK_IMPORTED_MODULE_1__.DepthFormat && format !== _constants_js__WEBPACK_IMPORTED_MODULE_1__.DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === _constants_js__WEBPACK_IMPORTED_MODULE_1__.DepthFormat ) type = _constants_js__WEBPACK_IMPORTED_MODULE_1__.UnsignedShortType;\n\t\tif ( type === undefined && format === _constants_js__WEBPACK_IMPORTED_MODULE_1__.DepthStencilFormat ) type = _constants_js__WEBPACK_IMPORTED_MODULE_1__.UnsignedInt248Type;\n\n\t\tsuper( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : _constants_js__WEBPACK_IMPORTED_MODULE_1__.NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : _constants_js__WEBPACK_IMPORTED_MODULE_1__.NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps\t= false;\n\n\t}\n\n\n}\n\nDepthTexture.prototype.isDepthTexture = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/textures/DepthTexture.js?"); + +/***/ }), + /***/ "./node_modules/three/src/textures/Texture.js": /*!****************************************************!*\ !*** ./node_modules/three/src/textures/Texture.js ***! @@ -2650,6 +3990,16 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/three/src/textures/VideoTexture.js": +/*!*********************************************************!*\ + !*** ./node_modules/three/src/textures/VideoTexture.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"VideoTexture\": () => (/* binding */ VideoTexture)\n/* harmony export */ });\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../constants.js */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _Texture_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Texture.js */ \"./node_modules/three/src/textures/Texture.js\");\n\n\n\nclass VideoTexture extends _Texture_js__WEBPACK_IMPORTED_MODULE_1__.Texture {\n\n\tconstructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tsuper( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.format = format !== undefined ? format : _constants_js__WEBPACK_IMPORTED_MODULE_0__.RGBFormat;\n\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : _constants_js__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;\n\n\t\tthis.generateMipmaps = false;\n\n\t\tconst scope = this;\n\n\t\tfunction updateVideo() {\n\n\t\t\tscope.needsUpdate = true;\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t\tif ( 'requestVideoFrameCallback' in video ) {\n\n\t\t\tvideo.requestVideoFrameCallback( updateVideo );\n\n\t\t}\n\n\t}\n\n\tclone() {\n\n\t\treturn new this.constructor( this.image ).copy( this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst video = this.image;\n\t\tconst hasVideoFrameCallback = 'requestVideoFrameCallback' in video;\n\n\t\tif ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t}\n\n}\n\nVideoTexture.prototype.isVideoTexture = true;\n\n\n\n\n//# sourceURL=webpack:///./node_modules/three/src/textures/VideoTexture.js?"); + +/***/ }), + /***/ "./node_modules/three/src/utils.js": /*!*****************************************!*\ !*** ./node_modules/three/src/utils.js ***! @@ -2666,7 +4016,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \******************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"OrbitControls\": () => (/* binding */ OrbitControls),\n/* harmony export */ \"MapControls\": () => (/* binding */ MapControls)\n/* harmony export */ });\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Quaternion.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Spherical.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/core/EventDispatcher.js\");\n\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, 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\nvar OrbitControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.05;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { LEFT: null, MIDDLE: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.MOUSE.ROTATE, RIGHT: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.MOUSE.PAN };\n\n\t// Touch fingers\n\tthis.touches = { ONE: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.ROTATE, TWO: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.DOLLY_PAN };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t// the target DOM element for key events\n\tthis._domElementKeyEvents = null;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.listenToKeyEvents = function ( domElement ) {\n\n\t\tdomElement.addEventListener( 'keydown', onKeyDown );\n\t\tthis._domElementKeyEvents = domElement;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n\t};\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Quaternion().setFromUnitVectors( object.up, new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().invert();\n\n\t\tvar lastPosition = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\t\tvar lastQuaternion = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Quaternion();\n\n\t\tvar twoPI = 2 * Math.PI;\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t} else {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t}\n\n\t\t\t// restrict theta to be between desired limits\n\n\t\t\tvar min = scope.minAzimuthAngle;\n\t\t\tvar max = scope.maxAzimuthAngle;\n\n\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t}\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\n\t\tif ( scope._domElementKeyEvents !== null ) {\n\n\t\t\tscope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\n\t\t}\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = {\n\t\tNONE: - 1,\n\t\tROTATE: 0,\n\t\tDOLLY: 1,\n\t\tPAN: 2,\n\t\tTOUCH_ROTATE: 3,\n\t\tTOUCH_PAN: 4,\n\t\tTOUCH_DOLLY_PAN: 5,\n\t\tTOUCH_DOLLY_ROTATE: 6\n\t};\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__.Spherical();\n\tvar sphericalDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__.Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\tvar rotateEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\tvar rotateDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\n\tvar panStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\tvar panEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\tvar panDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\n\tvar dollyStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\tvar dollyEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\tvar dollyDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\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\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\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\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\tvar needsUpdate = false;\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\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\tscope.update();\n\n\t\t}\n\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartPan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyStart.set( 0, distance );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t}\n\n\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateEnd.set( x, y );\n\n\t\t}\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t}\n\n\tfunction handleTouchMovePan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t}\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t}\n\n\tfunction handleTouchMoveDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyEnd.set( 0, distance );\n\n\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\tdollyOut( dollyDelta.y );\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t}\n\n\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t}\n\n\tfunction handleTouchEnd( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\t// Prevent the browser from scrolling.\n\t\tevent.preventDefault();\n\n\t\t// Manually set the focus since calling preventDefault above\n\t\t// prevents the browser from setting it automatically.\n\n\t\tscope.domElement.focus ? scope.domElement.focus() : window.focus();\n\n\t\tvar mouseAction;\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase 0:\n\n\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\n\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tmouseAction = - 1;\n\n\t\t}\n\n\t\tswitch ( mouseAction ) {\n\n\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.MOUSE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.MOUSE.ROTATE:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.MOUSE.PAN:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\n\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.PAN:\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\t\tevent.stopPropagation();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n\tscope.domElement.addEventListener( 'pointerdown', onPointerDown );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nOrbitControls.prototype = Object.create( _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_5__.EventDispatcher.prototype );\nOrbitControls.prototype.constructor = OrbitControls;\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\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\nvar MapControls = function ( object, domElement ) {\n\n\tOrbitControls.call( this, object, domElement );\n\n\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\tthis.mouseButtons.LEFT = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.MOUSE.PAN;\n\tthis.mouseButtons.RIGHT = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.MOUSE.ROTATE;\n\n\tthis.touches.ONE = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.PAN;\n\tthis.touches.TWO = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.TOUCH.DOLLY_ROTATE;\n\n};\n\nMapControls.prototype = Object.create( _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_5__.EventDispatcher.prototype );\nMapControls.prototype.constructor = MapControls;\n\n\n\n\n//# sourceURL=webpack:///./src/OrbitControls.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"OrbitControls\": () => (/* binding */ OrbitControls),\n/* harmony export */ \"MapControls\": () => (/* binding */ MapControls)\n/* harmony export */ });\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/Three.js\");\n\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, 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\nvar OrbitControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// Set to false to disable this control\n\tthis.enabled = true;\n\n\t// \"target\" sets the location of focus, where the object orbits around\n\tthis.target = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t// How far you can dolly in and out ( PerspectiveCamera only )\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\t// How far you can zoom in and out ( OrthographicCamera only )\n\tthis.minZoom = 0;\n\tthis.maxZoom = Infinity;\n\n\t// How far you can orbit vertically, upper and lower limits.\n\t// Range is 0 to Math.PI radians.\n\tthis.minPolarAngle = 0; // radians\n\tthis.maxPolarAngle = Math.PI; // radians\n\n\t// How far you can orbit horizontally, upper and lower limits.\n\t// If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n\tthis.minAzimuthAngle = - Infinity; // radians\n\tthis.maxAzimuthAngle = Infinity; // radians\n\n\t// Set to true to enable damping (inertia)\n\t// If damping is enabled, you must call controls.update() in your animation loop\n\tthis.enableDamping = false;\n\tthis.dampingFactor = 0.05;\n\n\t// This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n\t// Set to false to disable zooming\n\tthis.enableZoom = true;\n\tthis.zoomSpeed = 1.0;\n\n\t// Set to false to disable rotating\n\tthis.enableRotate = true;\n\tthis.rotateSpeed = 1.0;\n\n\t// Set to false to disable panning\n\tthis.enablePan = true;\n\tthis.panSpeed = 1.0;\n\tthis.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up\n\tthis.keyPanSpeed = 7.0;\t// pixels moved per arrow key push\n\n\t// Set to true to automatically rotate around the target\n\t// If auto-rotate is enabled, you must call controls.update() in your animation loop\n\tthis.autoRotate = false;\n\tthis.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60\n\n\t// The four arrow keys\n\tthis.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n\t// Mouse buttons\n\tthis.mouseButtons = { LEFT: null, MIDDLE: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE, RIGHT: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN };\n\n\t// Touch fingers\n\tthis.touches = { ONE: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.ROTATE, TWO: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_PAN };\n\n\t// for reset\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t// the target DOM element for key events\n\tthis._domElementKeyEvents = null;\n\n\t//\n\t// public methods\n\t//\n\n\tthis.getPolarAngle = function () {\n\n\t\treturn spherical.phi;\n\n\t};\n\n\tthis.getAzimuthalAngle = function () {\n\n\t\treturn spherical.theta;\n\n\t};\n\n\tthis.listenToKeyEvents = function ( domElement ) {\n\n\t\tdomElement.addEventListener( 'keydown', onKeyDown );\n\t\tthis._domElementKeyEvents = domElement;\n\n\t};\n\n\tthis.saveState = function () {\n\n\t\tscope.target0.copy( scope.target );\n\t\tscope.position0.copy( scope.object.position );\n\t\tscope.zoom0 = scope.object.zoom;\n\n\t};\n\n\tthis.reset = function () {\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tscope.update();\n\n\t\tstate = STATE.NONE;\n\n\t};\n\n\t// this method is exposed, but perhaps it would be better if we can make it private...\n\tthis.update = function () {\n\n\t\tvar offset = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\t// so camera.up is the orbit axis\n\t\tvar quat = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Quaternion().setFromUnitVectors( object.up, new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3( 0, 1, 0 ) );\n\t\tvar quatInverse = quat.clone().invert();\n\n\t\tvar lastPosition = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\t\tvar lastQuaternion = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Quaternion();\n\n\t\tvar twoPI = 2 * Math.PI;\n\n\t\treturn function update() {\n\n\t\t\tvar position = scope.object.position;\n\n\t\t\toffset.copy( position ).sub( scope.target );\n\n\t\t\t// rotate offset to \"y-axis-is-up\" space\n\t\t\toffset.applyQuaternion( quat );\n\n\t\t\t// angle from z-axis around y-axis\n\t\t\tspherical.setFromVector3( offset );\n\n\t\t\tif ( scope.autoRotate && state === STATE.NONE ) {\n\n\t\t\t\trotateLeft( getAutoRotationAngle() );\n\n\t\t\t}\n\n\t\t\tif ( scope.enableDamping ) {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta * scope.dampingFactor;\n\t\t\t\tspherical.phi += sphericalDelta.phi * scope.dampingFactor;\n\n\t\t\t} else {\n\n\t\t\t\tspherical.theta += sphericalDelta.theta;\n\t\t\t\tspherical.phi += sphericalDelta.phi;\n\n\t\t\t}\n\n\t\t\t// restrict theta to be between desired limits\n\n\t\t\tvar min = scope.minAzimuthAngle;\n\t\t\tvar max = scope.maxAzimuthAngle;\n\n\t\t\tif ( isFinite( min ) && isFinite( max ) ) {\n\n\t\t\t\tif ( min < - Math.PI ) min += twoPI; else if ( min > Math.PI ) min -= twoPI;\n\n\t\t\t\tif ( max < - Math.PI ) max += twoPI; else if ( max > Math.PI ) max -= twoPI;\n\n\t\t\t\tif ( min <= max ) {\n\n\t\t\t\t\tspherical.theta = Math.max( min, Math.min( max, spherical.theta ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tspherical.theta = ( spherical.theta > ( min + max ) / 2 ) ?\n\t\t\t\t\t\tMath.max( min, spherical.theta ) :\n\t\t\t\t\t\tMath.min( max, spherical.theta );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// restrict phi to be between desired limits\n\t\t\tspherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n\t\t\tspherical.makeSafe();\n\n\n\t\t\tspherical.radius *= scale;\n\n\t\t\t// restrict radius to be between desired limits\n\t\t\tspherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n\t\t\t// move target to panned location\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tscope.target.addScaledVector( panOffset, scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tscope.target.add( panOffset );\n\n\t\t\t}\n\n\t\t\toffset.setFromSpherical( spherical );\n\n\t\t\t// rotate offset back to \"camera-up-vector-is-up\" space\n\t\t\toffset.applyQuaternion( quatInverse );\n\n\t\t\tposition.copy( scope.target ).add( offset );\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( scope.enableDamping === true ) {\n\n\t\t\t\tsphericalDelta.theta *= ( 1 - scope.dampingFactor );\n\t\t\t\tsphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n\t\t\t\tpanOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n\t\t\t} else {\n\n\t\t\t\tsphericalDelta.set( 0, 0, 0 );\n\n\t\t\t\tpanOffset.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\tscale = 1;\n\n\t\t\t// update condition is:\n\t\t\t// min(camera displacement, camera rotation in radians)^2 > EPS\n\t\t\t// using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n\t\t\tif ( zoomChanged ||\n\t\t\t\tlastPosition.distanceToSquared( scope.object.position ) > EPS ||\n\t\t\t\t8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastQuaternion.copy( scope.object.quaternion );\n\t\t\t\tzoomChanged = false;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t};\n\n\t}();\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', onContextMenu );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.removeEventListener( 'wheel', onMouseWheel );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', onTouchStart );\n\t\tscope.domElement.removeEventListener( 'touchend', onTouchEnd );\n\t\tscope.domElement.removeEventListener( 'touchmove', onTouchMove );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\n\t\tif ( scope._domElementKeyEvents !== null ) {\n\n\t\t\tscope._domElementKeyEvents.removeEventListener( 'keydown', onKeyDown );\n\n\t\t}\n\n\t\t//scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n\t};\n\n\t//\n\t// internals\n\t//\n\n\tvar scope = this;\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\tvar STATE = {\n\t\tNONE: - 1,\n\t\tROTATE: 0,\n\t\tDOLLY: 1,\n\t\tPAN: 2,\n\t\tTOUCH_ROTATE: 3,\n\t\tTOUCH_PAN: 4,\n\t\tTOUCH_DOLLY_PAN: 5,\n\t\tTOUCH_DOLLY_ROTATE: 6\n\t};\n\n\tvar state = STATE.NONE;\n\n\tvar EPS = 0.000001;\n\n\t// current position in spherical coordinates\n\tvar spherical = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Spherical();\n\tvar sphericalDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Spherical();\n\n\tvar scale = 1;\n\tvar panOffset = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\tvar zoomChanged = false;\n\n\tvar rotateStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\tvar rotateEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\tvar rotateDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\tvar panStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\tvar panEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\tvar panDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\tvar dollyStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\tvar dollyEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\tvar dollyDelta = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\tfunction getAutoRotationAngle() {\n\n\t\treturn 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n\t}\n\n\tfunction getZoomScale() {\n\n\t\treturn Math.pow( 0.95, scope.zoomSpeed );\n\n\t}\n\n\tfunction rotateLeft( angle ) {\n\n\t\tsphericalDelta.theta -= angle;\n\n\t}\n\n\tfunction rotateUp( angle ) {\n\n\t\tsphericalDelta.phi -= angle;\n\n\t}\n\n\tvar panLeft = function () {\n\n\t\tvar v = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\treturn function panLeft( distance, objectMatrix ) {\n\n\t\t\tv.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n\t\t\tv.multiplyScalar( - distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\tvar panUp = function () {\n\n\t\tvar v = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\treturn function panUp( distance, objectMatrix ) {\n\n\t\t\tif ( scope.screenSpacePanning === true ) {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tv.setFromMatrixColumn( objectMatrix, 0 );\n\t\t\t\tv.crossVectors( scope.object.up, v );\n\n\t\t\t}\n\n\t\t\tv.multiplyScalar( distance );\n\n\t\t\tpanOffset.add( v );\n\n\t\t};\n\n\t}();\n\n\t// deltaX and deltaY are in pixels; right and down are positive\n\tvar pan = function () {\n\n\t\tvar offset = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\treturn function pan( deltaX, deltaY ) {\n\n\t\t\tvar element = scope.domElement;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t// perspective\n\t\t\t\tvar position = scope.object.position;\n\t\t\t\toffset.copy( position ).sub( scope.target );\n\t\t\t\tvar targetDistance = offset.length();\n\n\t\t\t\t// half of the fov is center to top of screen\n\t\t\t\ttargetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n\t\t\t\t// we use only clientHeight here so aspect ratio does not distort speed\n\t\t\t\tpanLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n\t\t\t\tpanUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t// orthographic\n\t\t\t\tpanLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n\t\t\t\tpanUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n\t\t\t} else {\n\n\t\t\t\t// camera neither orthographic nor perspective\n\t\t\t\tconsole.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n\t\t\t\tscope.enablePan = false;\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\tfunction dollyOut( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale /= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\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\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\tfunction dollyIn( dollyScale ) {\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscale *= dollyScale;\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n\t\t\tscope.object.updateProjectionMatrix();\n\t\t\tzoomChanged = true;\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\tscope.enableZoom = false;\n\n\t\t}\n\n\t}\n\n\t//\n\t// event callbacks - update the object state\n\t//\n\n\tfunction handleMouseDownRotate( event ) {\n\n\t\trotateStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownDolly( event ) {\n\n\t\tdollyStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseDownPan( event ) {\n\n\t\tpanStart.set( event.clientX, event.clientY );\n\n\t}\n\n\tfunction handleMouseMoveRotate( event ) {\n\n\t\trotateEnd.set( event.clientX, event.clientY );\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMoveDolly( event ) {\n\n\t\tdollyEnd.set( event.clientX, event.clientY );\n\n\t\tdollyDelta.subVectors( dollyEnd, dollyStart );\n\n\t\tif ( dollyDelta.y > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t} else if ( dollyDelta.y < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t}\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseMovePan( event ) {\n\n\t\tpanEnd.set( event.clientX, event.clientY );\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleMouseUp( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\tfunction handleMouseWheel( event ) {\n\n\t\tif ( event.deltaY < 0 ) {\n\n\t\t\tdollyIn( getZoomScale() );\n\n\t\t} else if ( event.deltaY > 0 ) {\n\n\t\t\tdollyOut( getZoomScale() );\n\n\t\t}\n\n\t\tscope.update();\n\n\t}\n\n\tfunction handleKeyDown( event ) {\n\n\t\tvar needsUpdate = false;\n\n\t\tswitch ( event.keyCode ) {\n\n\t\t\tcase scope.keys.UP:\n\t\t\t\tpan( 0, scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.BOTTOM:\n\t\t\t\tpan( 0, - scope.keyPanSpeed );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.LEFT:\n\t\t\t\tpan( scope.keyPanSpeed, 0 );\n\t\t\t\tneedsUpdate = true;\n\t\t\t\tbreak;\n\n\t\t\tcase scope.keys.RIGHT:\n\t\t\t\tpan( - scope.keyPanSpeed, 0 );\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\tscope.update();\n\n\t\t}\n\n\n\t}\n\n\tfunction handleTouchStartRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartPan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanStart.set( x, y );\n\n\t\t}\n\n\t}\n\n\tfunction handleTouchStartDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyStart.set( 0, distance );\n\n\t}\n\n\tfunction handleTouchStartDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchStartPan( event );\n\n\t}\n\n\tfunction handleTouchStartDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchStartDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchStartRotate( event );\n\n\t}\n\n\tfunction handleTouchMoveRotate( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\trotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\trotateEnd.set( x, y );\n\n\t\t}\n\n\t\trotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n\t\tvar element = scope.domElement;\n\n\t\trotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n\t\trotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n\t\trotateStart.copy( rotateEnd );\n\n\t}\n\n\tfunction handleTouchMovePan( event ) {\n\n\t\tif ( event.touches.length == 1 ) {\n\n\t\t\tpanEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n\t\t} else {\n\n\t\t\tvar x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n\t\t\tvar y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n\t\t\tpanEnd.set( x, y );\n\n\t\t}\n\n\t\tpanDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n\t\tpan( panDelta.x, panDelta.y );\n\n\t\tpanStart.copy( panEnd );\n\n\t}\n\n\tfunction handleTouchMoveDolly( event ) {\n\n\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n\t\tvar distance = Math.sqrt( dx * dx + dy * dy );\n\n\t\tdollyEnd.set( 0, distance );\n\n\t\tdollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n\t\tdollyOut( dollyDelta.y );\n\n\t\tdollyStart.copy( dollyEnd );\n\n\t}\n\n\tfunction handleTouchMoveDollyPan( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enablePan ) handleTouchMovePan( event );\n\n\t}\n\n\tfunction handleTouchMoveDollyRotate( event ) {\n\n\t\tif ( scope.enableZoom ) handleTouchMoveDolly( event );\n\n\t\tif ( scope.enableRotate ) handleTouchMoveRotate( event );\n\n\t}\n\n\tfunction handleTouchEnd( /*event*/ ) {\n\n\t\t// no-op\n\n\t}\n\n\t//\n\t// event handlers - FSM: listen for events and reset state\n\t//\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\t// Prevent the browser from scrolling.\n\t\tevent.preventDefault();\n\n\t\t// Manually set the focus since calling preventDefault above\n\t\t// prevents the browser from setting it automatically.\n\n\t\tscope.domElement.focus ? scope.domElement.focus() : window.focus();\n\n\t\tvar mouseAction;\n\n\t\tswitch ( event.button ) {\n\n\t\t\tcase 0:\n\n\t\t\t\tmouseAction = scope.mouseButtons.LEFT;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\n\t\t\t\tmouseAction = scope.mouseButtons.MIDDLE;\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tmouseAction = scope.mouseButtons.RIGHT;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tmouseAction = - 1;\n\n\t\t}\n\n\t\tswitch ( mouseAction ) {\n\n\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseDownDolly( event );\n\n\t\t\t\tstate = STATE.DOLLY;\n\n\t\t\t\tbreak;\n\n\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN:\n\n\t\t\t\tif ( event.ctrlKey || event.metaKey || event.shiftKey ) {\n\n\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\thandleMouseDownRotate( event );\n\n\t\t\t\t\tstate = STATE.ROTATE;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\thandleMouseDownPan( event );\n\n\t\t\t\t\tstate = STATE.PAN;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\t\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleMouseMoveRotate( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.DOLLY:\n\n\t\t\t\tif ( scope.enableZoom === false ) return;\n\n\t\t\t\thandleMouseMoveDolly( event );\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleMouseMovePan( event );\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleMouseUp( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onMouseWheel( event ) {\n\n\t\tif ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t\thandleMouseWheel( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction onKeyDown( event ) {\n\n\t\tif ( scope.enabled === false || scope.enablePan === false ) return;\n\n\t\thandleKeyDown( event );\n\n\t}\n\n\tfunction onTouchStart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\n\t\t\t\tswitch ( scope.touches.ONE ) {\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.PAN:\n\n\t\t\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase 2:\n\n\t\t\t\tswitch ( scope.touches.TWO ) {\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_PAN:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyPan( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_PAN;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_ROTATE:\n\n\t\t\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\t\t\thandleTouchStartDollyRotate( event );\n\n\t\t\t\t\t\tstate = STATE.TOUCH_DOLLY_ROTATE;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tstate = STATE.NONE;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t\tif ( state !== STATE.NONE ) {\n\n\t\t\tscope.dispatchEvent( startEvent );\n\n\t\t}\n\n\t}\n\n\tfunction onTouchMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault(); // prevent scrolling\n\t\tevent.stopPropagation();\n\n\t\tswitch ( state ) {\n\n\t\t\tcase STATE.TOUCH_ROTATE:\n\n\t\t\t\tif ( scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_PAN:\n\n\t\t\t\tif ( scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMovePan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_PAN:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n\t\t\t\thandleTouchMoveDollyPan( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tcase STATE.TOUCH_DOLLY_ROTATE:\n\n\t\t\t\tif ( scope.enableZoom === false && scope.enableRotate === false ) return;\n\n\t\t\t\thandleTouchMoveDollyRotate( event );\n\n\t\t\t\tscope.update();\n\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\n\t\t\t\tstate = STATE.NONE;\n\n\t\t}\n\n\t}\n\n\tfunction onTouchEnd( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\thandleTouchEnd( event );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t\tstate = STATE.NONE;\n\n\t}\n\n\tfunction onContextMenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\t//\n\n\tscope.domElement.addEventListener( 'contextmenu', onContextMenu );\n\n\tscope.domElement.addEventListener( 'pointerdown', onPointerDown );\n\tscope.domElement.addEventListener( 'wheel', onMouseWheel );\n\n\tscope.domElement.addEventListener( 'touchstart', onTouchStart );\n\tscope.domElement.addEventListener( 'touchend', onTouchEnd );\n\tscope.domElement.addEventListener( 'touchmove', onTouchMove );\n\n\t// force an update at start\n\n\tthis.update();\n\n};\n\nOrbitControls.prototype = Object.create( _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher.prototype );\nOrbitControls.prototype.constructor = OrbitControls;\n\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n// This is very similar to OrbitControls, another set of touch behavior\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\nvar MapControls = function ( object, domElement ) {\n\n\tOrbitControls.call( this, object, domElement );\n\n\tthis.screenSpacePanning = false; // pan orthogonal to world-space direction camera.up\n\n\tthis.mouseButtons.LEFT = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN;\n\tthis.mouseButtons.RIGHT = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE;\n\n\tthis.touches.ONE = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.PAN;\n\tthis.touches.TWO = _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_ROTATE;\n\n};\n\nMapControls.prototype = Object.create( _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher.prototype );\nMapControls.prototype.constructor = MapControls;\n\n\n\n\n//# sourceURL=webpack:///./src/OrbitControls.js?"); /***/ }), @@ -2676,7 +4026,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \*************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Sketcher\": () => (/* binding */ Sketcher)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! three */ \"./node_modules/three/build/three.module.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/objects/Group.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/helpers/PlaneHelper.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/materials/Materials.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/core/Raycaster.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Matrix4.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/core/BufferGeometry.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/core/BufferAttribute.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/objects/LineSegments.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/objects/Points.js\");\n\n\n\n\nclass Sketcher extends _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Group {\n constructor(camera, domElement, plane) {\n super()\n this.camera = camera;\n this.domElement = domElement;\n this.scene = scene;\n this.plane = plane;\n this.matrixAutoUpdate = false;\n this.sketchNormal = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(0, 0, 1)\n this.orientSketcher(plane)\n\n\n this.add(new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.PlaneHelper(this.plane, 1, 0xffff00));\n\n\n this.linesGroup = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Group()\n this.linesArr = this.linesGroup.children\n this.pointsGroup = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Group()\n this.ptsArr = this.pointsGroup.children\n this.add(this.linesGroup)\n this.add(this.pointsGroup)\n\n window.lg = this.linesArr\n window.pg = this.ptsArr\n\n this.pickThreshold = 100\n this.grabbedObject = null\n\n this.lineMaterial = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__.LineBasicMaterial({\n color: 0x555,\n })\n this.pointMaterial = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__.PointsMaterial({\n color: 0xAAA,\n size: 3,\n })\n\n this.pointStart = this.pointStart.bind(this);\n this.pointEnd = this.pointEnd.bind(this);\n this.move = this.move.bind(this);\n this.keyHandler = this.keyHandler.bind(this);\n this.picker = this.picker.bind(this);\n this.grabbedMove = this.grabbedMove.bind(this);\n this.grabEnd = this.grabEnd.bind(this);\n this.raycaster = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.Raycaster();\n\n\n window.addEventListener('keydown', this.keyHandler)\n domElement.addEventListener('pointerdown', this.picker)\n\n\n this.mode = \"\"\n this.keyTable = {\n 'l': this.addLine,\n 'Escape': this.clear\n }\n\n\n\n }\n\n orientSketcher() {\n\n const theta = this.sketchNormal.angleTo(this.plane.normal)\n const axis = this.sketchNormal.clone().cross(this.plane.normal).normalize()\n const rot = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_5__.Matrix4().makeRotationAxis(axis, theta)\n const trans = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_5__.Matrix4().makeTranslation(0, 0, this.plane.constant)\n\n this.matrix = rot.multiply(trans) // world matrix will auto update in next render\n this.inverse = this.matrix.clone().invert()\n\n }\n\n keyHandler(e) {\n switch (e.key) {\n case 'Escape':\n this.clear()\n this.mode = \"\"\n break;\n case 'l':\n this.addLine()\n this.mode = \"line\"\n break;\n case '=':\n this.plane.applyMatrix4(new three__WEBPACK_IMPORTED_MODULE_6__.Matrix4().makeRotationY(0.1))\n this.orientSketcher()\n\n this.dispatchEvent({ type: 'change' })\n break;\n case '-':\n this.plane.applyMatrix4(new three__WEBPACK_IMPORTED_MODULE_6__.Matrix4().makeRotationY(-0.1))\n this.orientSketcher()\n\n this.dispatchEvent({ type: 'change' })\n break;\n }\n }\n\n\n picker(e) {\n if (this.mode || e.buttons != 1) return\n this.raycaster.setFromCamera(\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_7__.Vector2(\n (e.clientX / window.innerWidth) * 2 - 1,\n - (e.clientY / window.innerHeight) * 2 + 1\n ),\n this.camera\n );\n\n // console.log(this.ptsArr)\n const candidates = this.raycaster.intersectObjects(this.ptsArr)\n // console.log(candidates)\n\n\n if (!candidates.length) return;\n\n let minDist = candidates[0].distanceToRay\n let idx = 0\n\n for (let i = 1; i < candidates.length; i++) {\n if (candidates.distanceToRay < minDist) {\n minDist = candidates.distanceToRay\n idx = i\n }\n }\n\n if (minDist < this.pickThreshold) {\n this.grabPtIdx = this.ptsArr.indexOf(\n candidates[idx].object\n )\n } else {\n return\n }\n\n this.domElement.addEventListener('pointermove', this.grabbedMove);\n this.domElement.addEventListener('pointerup', this.grabEnd);\n }\n\n grabbedMove(e) {\n const mouseLoc = this.getLocation(e);\n\n this.moveLinePt(this.grabPtIdx,mouseLoc)\n\n this.dispatchEvent({ type: 'change' })\n }\n\n moveLinePt(ptIdx, absPos) {\n this.ptsArr[ptIdx].geometry.attributes.position.set(absPos);\n this.ptsArr[ptIdx].geometry.attributes.position.needsUpdate = true;\n\n const lineIdx = Math.floor(ptIdx / 2)\n const endPtIdx = (ptIdx % 2) * 3\n this.linesArr[lineIdx].geometry.attributes.position.set(absPos, endPtIdx)\n this.linesArr[lineIdx].geometry.attributes.position.needsUpdate = true;\n }\n\n grabEnd() {\n this.domElement.removeEventListener('pointermove', this.grabbedMove)\n this.domElement.removeEventListener('pointerup', this.grabEnd)\n this.ptsArr[this.grabPtIdx].geometry.computeBoundingSphere()\n // this.grabbedObject = null\n }\n\n\n addLine() {\n this.domElement.addEventListener('pointerdown', this.pointStart)\n }\n\n clear() {\n if (this.mode == \"\") return\n\n this.domElement.removeEventListener('pointerdown', this.pointStart)\n this.domElement.removeEventListener('pointermove', this.move);\n this.domElement.removeEventListener('pointerdown', this.pointEnd);\n this.domElement.removeEventListener('pointerdown', this.pointEnd);\n\n const lastLine = this.linesArr[this.linesArr.length - 1]\n this.linesGroup.remove(lastLine)\n lastLine.geometry.dispose()\n\n const lastPoints = this.ptsArr.slice(this.ptsArr.length - 2)\n this.pointsGroup.remove(...lastPoints)\n lastPoints.forEach(obj => obj.geometry.dispose())\n\n this.dispatchEvent({ type: 'change' })\n }\n\n getLocation(e) {\n this.raycaster.setFromCamera(\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_7__.Vector2(\n (e.clientX / window.innerWidth) * 2 - 1,\n - (e.clientY / window.innerHeight) * 2 + 1\n ),\n this.camera\n );\n // return this.worldToLocal(this.raycaster.ray.intersectPlane(this.plane)).toArray()\n return this.raycaster.ray.intersectPlane(this.plane).applyMatrix4(this.inverse).toArray()\n }\n\n pointStart(e) {\n if (e.buttons !== 1) return\n const mouseLoc = this.getLocation(e);\n\n this.lineGeom = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_8__.BufferGeometry()\n this.lineGeom.setAttribute('position',\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_9__.BufferAttribute(\n new Float32Array(6), 3\n )\n );\n this.lineGeom.attributes.position.set(mouseLoc)\n this.line = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_10__.LineSegments(this.lineGeom, this.lineMaterial);\n this.line.frustumCulled = false;\n this.linesGroup.add(this.line)\n\n this.p1Geom = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_8__.BufferGeometry()\n this.p1Geom.setAttribute('position',\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_9__.BufferAttribute(\n new Float32Array(3), 3\n )\n );\n this.p1Geom.attributes.position.set(mouseLoc)\n this.p1 = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_11__.Points(this.p1Geom, this.pointMaterial);\n this.pointsGroup.add(this.p1)\n\n this.p2Geom = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_8__.BufferGeometry()\n this.p2Geom.setAttribute('position',\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_9__.BufferAttribute(\n new Float32Array(3), 3\n )\n );\n this.p2 = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_11__.Points(this.p2Geom, this.pointMaterial);\n this.pointsGroup.add(this.p2)\n\n this.domElement.removeEventListener('pointerdown', this.pointStart)\n this.domElement.addEventListener('pointermove', this.move)\n this.domElement.addEventListener('pointerdown', this.pointEnd)\n }\n\n\n move(e) {\n const mouseLoc = this.getLocation(e);\n this.lineGeom.attributes.position.set(mouseLoc, 3)\n this.lineGeom.attributes.position.needsUpdate = true;\n this.p2Geom.attributes.position.set(mouseLoc);\n this.p2Geom.attributes.position.needsUpdate = true;\n this.p2Geom.computeBoundingSphere();\n this.dispatchEvent({ type: 'change' })\n }\n\n pointEnd(e) {\n if (e.buttons !== 1) return;\n this.domElement.removeEventListener('pointermove', this.move);\n this.domElement.removeEventListener('pointerdown', this.pointEnd);\n\n\n this.pointStart(e)\n }\n\n\n}\n\n\n\n\n\n//# sourceURL=webpack:///./src/Sketcher.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Sketcher\": () => (/* binding */ Sketcher)\n/* harmony export */ });\n/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! three */ \"./node_modules/three/build/three.module.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/Three.js\");\n\n\n\n\n\nclass Sketcher extends _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Group {\n constructor(camera, domElement, plane) {\n super()\n this.camera = camera;\n this.domElement = domElement;\n this.scene = scene;\n this.plane = plane;\n this.matrixAutoUpdate = false;\n this.sketchNormal = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 1)\n this.orientSketcher(plane)\n\n\n this.add(new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.PlaneHelper(this.plane, 1, 0xffff00));\n\n\n this.linesGroup = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Group()\n this.linesArr = this.linesGroup.children\n this.pointsGroup = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Group()\n this.ptsArr = this.pointsGroup.children\n this.add(this.linesGroup)\n this.add(this.pointsGroup)\n\n window.lg = this.linesArr\n window.pg = this.ptsArr\n\n this.pickThreshold = 100\n this.grabbedObject = null\n\n this.lineMaterial = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.LineBasicMaterial({\n color: 0x555,\n })\n this.pointMaterial = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.PointsMaterial({\n color: 0xAAA,\n size: 3,\n })\n\n this.pointStart = this.pointStart.bind(this);\n this.pointEnd = this.pointEnd.bind(this);\n this.move = this.move.bind(this);\n this.keyHandler = this.keyHandler.bind(this);\n this.picker = this.picker.bind(this);\n this.grabbedMove = this.grabbedMove.bind(this);\n this.grabEnd = this.grabEnd.bind(this);\n this.raycaster = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Raycaster();\n\n\n window.addEventListener('keydown', this.keyHandler)\n domElement.addEventListener('pointerdown', this.picker)\n\n\n this.mode = \"\"\n\n\n }\n\n orientSketcher() {\n\n const theta = this.sketchNormal.angleTo(this.plane.normal)\n const axis = this.sketchNormal.clone().cross(this.plane.normal).normalize()\n const rot = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().makeRotationAxis(axis, theta)\n const trans = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().makeTranslation(0, 0, this.plane.constant)\n\n this.matrix = rot.multiply(trans) // world matrix will auto update in next render\n this.inverse = this.matrix.clone().invert()\n\n }\n\n keyHandler(e) {\n switch (e.key) {\n case 'Escape':\n this.clear()\n this.mode = \"\"\n break;\n case 'l':\n this.addLine()\n this.mode = \"line\"\n break;\n case 'b':\n this.writeBuff()\n break;\n case '=':\n this.plane.applyMatrix4(new three__WEBPACK_IMPORTED_MODULE_1__.Matrix4().makeRotationY(0.1))\n this.orientSketcher()\n\n this.dispatchEvent({ type: 'change' })\n break;\n case '-':\n this.plane.applyMatrix4(new three__WEBPACK_IMPORTED_MODULE_1__.Matrix4().makeRotationY(-0.1))\n this.orientSketcher()\n\n this.dispatchEvent({ type: 'change' })\n break;\n }\n }\n\n\n picker(e) {\n if (this.mode || e.buttons != 1) return\n this.raycaster.setFromCamera(\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(\n (e.clientX / window.innerWidth) * 2 - 1,\n - (e.clientY / window.innerHeight) * 2 + 1\n ),\n this.camera\n );\n\n // console.log(this.ptsArr)\n const candidates = this.raycaster.intersectObjects(this.ptsArr)\n // console.log(candidates)\n\n\n if (!candidates.length) return;\n\n let minDist = candidates[0].distanceToRay\n let idx = 0\n\n for (let i = 1; i < candidates.length; i++) {\n if (candidates.distanceToRay < minDist) {\n minDist = candidates.distanceToRay\n idx = i\n }\n }\n\n if (minDist < this.pickThreshold) {\n this.grabPtIdx = this.ptsArr.indexOf(\n candidates[idx].object\n )\n } else {\n return\n }\n\n this.domElement.addEventListener('pointermove', this.grabbedMove);\n this.domElement.addEventListener('pointerup', this.grabEnd);\n }\n\n grabbedMove(e) {\n const mouseLoc = this.getLocation(e);\n\n this.moveLinePt(this.grabPtIdx, mouseLoc)\n\n this.dispatchEvent({ type: 'change' })\n }\n\n moveLinePt(ptIdx, absPos) {\n this.ptsArr[ptIdx].geometry.attributes.position.set(absPos);\n this.ptsArr[ptIdx].geometry.attributes.position.needsUpdate = true;\n\n const lineIdx = Math.floor(ptIdx / 2)\n const endPtIdx = (ptIdx % 2) * 3\n this.linesArr[lineIdx].geometry.attributes.position.set(absPos, endPtIdx)\n this.linesArr[lineIdx].geometry.attributes.position.needsUpdate = true;\n }\n\n grabEnd() {\n this.domElement.removeEventListener('pointermove', this.grabbedMove)\n this.domElement.removeEventListener('pointerup', this.grabEnd)\n this.ptsArr[this.grabPtIdx].geometry.computeBoundingSphere()\n // this.grabbedObject = null\n }\n\n\n addLine() {\n this.domElement.addEventListener('pointerdown', this.pointStart)\n }\n\n clear() {\n if (this.mode == \"\") return\n\n this.domElement.removeEventListener('pointerdown', this.pointStart)\n this.domElement.removeEventListener('pointermove', this.move);\n this.domElement.removeEventListener('pointerdown', this.pointEnd);\n this.domElement.removeEventListener('pointerdown', this.pointEnd);\n\n const lastLine = this.linesArr[this.linesArr.length - 1]\n this.linesGroup.remove(lastLine)\n lastLine.geometry.dispose()\n\n const lastPoints = this.ptsArr.slice(this.ptsArr.length - 2)\n this.pointsGroup.remove(...lastPoints)\n lastPoints.forEach(obj => obj.geometry.dispose())\n\n this.dispatchEvent({ type: 'change' })\n }\n\n getLocation(e) {\n this.raycaster.setFromCamera(\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(\n (e.clientX / window.innerWidth) * 2 - 1,\n - (e.clientY / window.innerHeight) * 2 + 1\n ),\n this.camera\n );\n // return this.worldToLocal(this.raycaster.ray.intersectPlane(this.plane)).toArray()\n return this.raycaster.ray.intersectPlane(this.plane).applyMatrix4(this.inverse).toArray()\n }\n\n pointStart(e) {\n if (e.buttons !== 1) return\n const mouseLoc = this.getLocation(e);\n\n this.lineGeom = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry()\n this.lineGeom.setAttribute('position',\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(\n new Float32Array(6), 3\n )\n );\n this.lineGeom.attributes.position.set(mouseLoc)\n this.line = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.LineSegments(this.lineGeom, this.lineMaterial);\n this.line.frustumCulled = false;\n this.linesGroup.add(this.line)\n\n this.p1Geom = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry()\n this.p1Geom.setAttribute('position',\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(\n new Float32Array(3), 3\n )\n );\n this.p1Geom.attributes.position.set(mouseLoc)\n this.p1 = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Points(this.p1Geom, this.pointMaterial);\n this.pointsGroup.add(this.p1)\n\n this.p2Geom = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry()\n this.p2Geom.setAttribute('position',\n new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(\n new Float32Array(3), 3\n )\n );\n this.p2 = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Points(this.p2Geom, this.pointMaterial);\n this.pointsGroup.add(this.p2)\n\n this.domElement.removeEventListener('pointerdown', this.pointStart)\n this.domElement.addEventListener('pointermove', this.move)\n this.domElement.addEventListener('pointerdown', this.pointEnd)\n }\n\n\n move(e) {\n const mouseLoc = this.getLocation(e);\n this.lineGeom.attributes.position.set(mouseLoc, 3)\n this.lineGeom.attributes.position.needsUpdate = true;\n this.p2Geom.attributes.position.set(mouseLoc);\n this.p2Geom.attributes.position.needsUpdate = true;\n this.p2Geom.computeBoundingSphere();\n this.dispatchEvent({ type: 'change' })\n }\n\n pointEnd(e) {\n if (e.buttons !== 1) return;\n this.domElement.removeEventListener('pointermove', this.move);\n this.domElement.removeEventListener('pointerdown', this.pointEnd);\n\n\n this.pointStart(e)\n }\n\n writeBuff() {\n // const linesBuf = new Float32Array(this.linesArr.length * 4)\n // const xyOnly = [0,1,3,4];\n // let p = 0\n // for (let i = 0; i < this.linesArr.length; i++) {\n // for (let j of xyOnly) {\n // linesBuf[p++] = this.linesArr[i].geometry.attributes.position.array[j]\n // }\n // }\n\n let ptsBuf = new Float32Array(this.ptsArr.length * 2)\n for (let i = 0, p = 0; i < this.ptsArr.length; i++) {\n for (let j = 0; j < 2; j++) {\n ptsBuf[p++] = this.ptsArr[i].geometry.attributes.position.array[j]\n }\n }\n console.log(ptsBuf)\n\n buffer = Module._malloc(ptsBuf.length * ptsBuf.BYTES_PER_ELEMENT)\n Module.HEAPF32.set(ptsBuf, buffer >> 2)\n\n Module[\"_solver\"](buffer)\n }\n}\n\n\n\n\n\n//# sourceURL=webpack:///./src/Sketcher.js?"); /***/ }), @@ -2686,7 +4036,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac \**********************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/renderers/WebGLRenderer.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/scenes/Scene.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Color.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/objects/Group.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/cameras/OrthographicCamera.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/helpers/CameraHelper.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/cameras/PerspectiveCamera.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/helpers/AxesHelper.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Plane.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/lights/DirectionalLight.js\");\n/* harmony import */ var _OrbitControls__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./OrbitControls */ \"./src/OrbitControls.js\");\n/* harmony import */ var _trackball__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./trackball */ \"./src/trackball.js\");\n/* harmony import */ var _Sketcher__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Sketcher */ \"./src/Sketcher.js\");\n/* harmony import */ var _node_modules_dat_gui_src_dat_gui_GUI_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/dat.gui/src/dat/gui/GUI.js */ \"./node_modules/dat.gui/src/dat/gui/GUI.js\");\n/* harmony import */ var _node_modules_three_examples_jsm_libs_stats_module_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../node_modules/three/examples/jsm/libs/stats.module.js */ \"./node_modules/three/examples/jsm/libs/stats.module.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ \"./src/utils.js\");\n// class MinMaxGUIHelper {\n// constructor(obj, minProp, maxProp, minDif) {\n// this.obj = obj;\n// this.minProp = minProp;\n// this.maxProp = maxProp;\n// this.minDif = minDif;\n// }\n// get min() {\n// return this.obj[this.minProp];\n// }\n// set min(v) {\n// this.obj[this.minProp] = v;\n// this.obj[this.maxProp] = Math.max(this.obj[this.maxProp], v + this.minDif);\n// }\n// get max() {\n// return this.obj[this.maxProp];\n// }\n// set max(v) {\n// this.obj[this.maxProp] = v;\n// this.min = this.min; // this will call the min setter\n// }\n// }\n\n// const gui = new GUI();\n// gui.add(camera, 'zoom', 0.01, 1, 0.01).listen();\n// const minMaxGUIHelper = new MinMaxGUIHelper(camera, 'near', 'far', 0.1);\n// gui.add(minMaxGUIHelper, 'min', 0.1, 50, 0.1).name('near');\n// gui.add(minMaxGUIHelper, 'max', 0.1, 50, 0.1).name('far');\n\n\n\n\n\n\n\n\n\n\n\n\nfunction main() {\n\n const Controller = new _utils__WEBPACK_IMPORTED_MODULE_4__.KeyboardController()\n\n var stats = new _node_modules_three_examples_jsm_libs_stats_module_js__WEBPACK_IMPORTED_MODULE_5__.default();\n stats.showPanel(0); // 0: fps, 1: ms, 2: mb, 3+: custom\n document.body.appendChild(stats.dom);\n\n const canvas = document.querySelector('#c');\n const view1Elem = document.querySelector('#view1');\n const view2Elem = document.querySelector('#view2');\n const renderer = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_6__.WebGLRenderer({ canvas });\n\n const scene = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_7__.Scene();\n window.scene = scene;\n scene.background = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_8__.Color('pink');\n\n const helpersGroup = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_9__.Group();\n scene.add(helpersGroup);\n\n\n const size = 1;\n const near = 5;\n const far = 50;\n const camera = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_10__.OrthographicCamera(-size, size, size, -size, near, far);\n camera.zoom = 0.1;\n camera.position.set(0, 0, 20);\n const controls = new _OrbitControls__WEBPACK_IMPORTED_MODULE_0__.OrbitControls(camera, view1Elem);\n // const controls = new TrackballControls(camera, view1Elem);\n controls.target.set(0, 0, 0);\n controls.update()\n const cameraHelper = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_11__.CameraHelper(camera);\n helpersGroup.add(cameraHelper);\n\n\n const camera2 = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_12__.PerspectiveCamera(\n 60, // fov\n 2, // aspect\n 0.1, // near\n 500, // far\n );\n camera2.position.set(16, 28, 40);\n camera2.lookAt(0, 5, 0);\n const controls2 = new _OrbitControls__WEBPACK_IMPORTED_MODULE_0__.OrbitControls(camera2, view2Elem);\n controls2.target.set(0, 5, 0);\n controls2.update();\n\n\n\n const axesHelper = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_13__.AxesHelper(5);\n helpersGroup.add(axesHelper);\n\n const sketchPlane = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_14__.Plane(new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_15__.Vector3(0, 0, 1), 0);\n const sketcher = new _Sketcher__WEBPACK_IMPORTED_MODULE_2__.Sketcher(camera, view1Elem, sketchPlane)\n scene.add(sketcher)\n\n {\n const color = 0xFFFFFF;\n const intensity = 1;\n const light = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_16__.DirectionalLight(color, intensity);\n light.position.set(0, 10, 0);\n light.target.position.set(-5, 0, 0);\n scene.add(light);\n scene.add(light.target);\n }\n\n\n\n\n\n function resizeRendererToDisplaySize(renderer) {\n const canvas = renderer.domElement;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const needResize = canvas.width !== width || canvas.height !== height;\n if (needResize) {\n renderer.setSize(width, height, false);\n }\n return needResize;\n }\n\n function setScissorForElement(elem) {\n const canvasRect = canvas.getBoundingClientRect();\n const elemRect = elem.getBoundingClientRect();\n\n // compute a canvas relative rectangle\n const right = Math.min(elemRect.right, canvasRect.right) - canvasRect.left;\n const left = Math.max(0, elemRect.left - canvasRect.left);\n const bottom = Math.min(elemRect.bottom, canvasRect.bottom) - canvasRect.top;\n const top = Math.max(0, elemRect.top - canvasRect.top);\n\n const width = Math.min(canvasRect.width, right - left);\n const height = Math.min(canvasRect.height, bottom - top);\n\n // setup the scissor to only render to that part of the canvas\n const positiveYUpBottom = canvasRect.height - bottom;\n renderer.setScissor(left, positiveYUpBottom, width, height);\n renderer.setViewport(left, positiveYUpBottom, width, height);\n\n // return the aspect\n return width / height;\n }\n\n function render() {\n stats.begin();\n resizeRendererToDisplaySize(renderer);\n\n renderer.setScissorTest(true);\n {\n const aspect = setScissorForElement(view1Elem);\n camera.left = -aspect;\n camera.right = aspect;\n camera.updateProjectionMatrix();\n cameraHelper.update();\n cameraHelper.visible = false;\n renderer.render(scene, camera);\n }\n {\n const aspect = setScissorForElement(view2Elem);\n camera2.aspect = aspect;\n camera2.updateProjectionMatrix();\n cameraHelper.visible = true;\n renderer.render(scene, camera2);\n }\n\n stats.end();\n\n // requestAnimationFrame(render);\n }\n // requestAnimationFrame(render);\n\n\n controls.addEventListener('change', render);\n controls.addEventListener('start', render);\n controls2.addEventListener('change', render);\n sketcher.addEventListener('change', render);\n window.addEventListener('resize', render);\n render();\n}\n\nmain();\n\n\n//# sourceURL=webpack:///./src/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/Three.js\");\n/* harmony import */ var _OrbitControls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./OrbitControls */ \"./src/OrbitControls.js\");\n/* harmony import */ var _trackball__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./trackball */ \"./src/trackball.js\");\n/* harmony import */ var _Sketcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Sketcher */ \"./src/Sketcher.js\");\n/* harmony import */ var _node_modules_dat_gui_src_dat_gui_GUI_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../node_modules/dat.gui/src/dat/gui/GUI.js */ \"./node_modules/dat.gui/src/dat/gui/GUI.js\");\n/* harmony import */ var _node_modules_three_examples_jsm_libs_stats_module_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../node_modules/three/examples/jsm/libs/stats.module.js */ \"./node_modules/three/examples/jsm/libs/stats.module.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils */ \"./src/utils.js\");\n// class MinMaxGUIHelper {\n// constructor(obj, minProp, maxProp, minDif) {\n// this.obj = obj;\n// this.minProp = minProp;\n// this.maxProp = maxProp;\n// this.minDif = minDif;\n// }\n// get min() {\n// return this.obj[this.minProp];\n// }\n// set min(v) {\n// this.obj[this.minProp] = v;\n// this.obj[this.maxProp] = Math.max(this.obj[this.maxProp], v + this.minDif);\n// }\n// get max() {\n// return this.obj[this.maxProp];\n// }\n// set max(v) {\n// this.obj[this.maxProp] = v;\n// this.min = this.min; // this will call the min setter\n// }\n// }\n\n// const gui = new GUI();\n// gui.add(camera, 'zoom', 0.01, 1, 0.01).listen();\n// const minMaxGUIHelper = new MinMaxGUIHelper(camera, 'near', 'far', 0.1);\n// gui.add(minMaxGUIHelper, 'min', 0.1, 50, 0.1).name('near');\n// gui.add(minMaxGUIHelper, 'max', 0.1, 50, 0.1).name('far');\n\n\n\n\n\n\n\n\n\n\n\n\nfunction main() {\n\n const Controller = new _utils__WEBPACK_IMPORTED_MODULE_6__.KeyboardController()\n\n var stats = new _node_modules_three_examples_jsm_libs_stats_module_js__WEBPACK_IMPORTED_MODULE_5__.default();\n stats.showPanel(0); // 0: fps, 1: ms, 2: mb, 3+: custom\n document.body.appendChild(stats.dom);\n\n const canvas = document.querySelector('#c');\n const view1Elem = document.querySelector('#view1');\n const view2Elem = document.querySelector('#view2');\n const renderer = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.WebGLRenderer({ canvas });\n\n const scene = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Scene();\n window.scene = scene;\n scene.background = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Color('pink');\n\n const helpersGroup = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Group();\n scene.add(helpersGroup);\n\n\n const size = 1;\n const near = 5;\n const far = 50;\n const camera = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera(-size, size, size, -size, near, far);\n camera.zoom = 0.1;\n camera.position.set(0, 0, 20);\n const controls = new _OrbitControls__WEBPACK_IMPORTED_MODULE_1__.OrbitControls(camera, view1Elem);\n // const controls = new TrackballControls(camera, view1Elem);\n controls.target.set(0, 0, 0);\n controls.update()\n const cameraHelper = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.CameraHelper(camera);\n helpersGroup.add(cameraHelper);\n\n\n const camera2 = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera(\n 60, // fov\n 2, // aspect\n 0.1, // near\n 500, // far\n );\n camera2.position.set(16, 28, 40);\n camera2.lookAt(0, 5, 0);\n const controls2 = new _OrbitControls__WEBPACK_IMPORTED_MODULE_1__.OrbitControls(camera2, view2Elem);\n controls2.target.set(0, 5, 0);\n controls2.update();\n\n\n\n const axesHelper = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.AxesHelper(5);\n helpersGroup.add(axesHelper);\n\n const sketchPlane = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Plane(new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 1), 0);\n const sketcher = new _Sketcher__WEBPACK_IMPORTED_MODULE_3__.Sketcher(camera, view1Elem, sketchPlane)\n scene.add(sketcher)\n\n {\n const color = 0xFFFFFF;\n const intensity = 1;\n const light = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.DirectionalLight(color, intensity);\n light.position.set(0, 10, 0);\n light.target.position.set(-5, 0, 0);\n scene.add(light);\n scene.add(light.target);\n }\n\n\n\n\n\n function resizeRendererToDisplaySize(renderer) {\n const canvas = renderer.domElement;\n const width = canvas.clientWidth;\n const height = canvas.clientHeight;\n const needResize = canvas.width !== width || canvas.height !== height;\n if (needResize) {\n renderer.setSize(width, height, false);\n }\n return needResize;\n }\n\n function setScissorForElement(elem) {\n const canvasRect = canvas.getBoundingClientRect();\n const elemRect = elem.getBoundingClientRect();\n\n // compute a canvas relative rectangle\n const right = Math.min(elemRect.right, canvasRect.right) - canvasRect.left;\n const left = Math.max(0, elemRect.left - canvasRect.left);\n const bottom = Math.min(elemRect.bottom, canvasRect.bottom) - canvasRect.top;\n const top = Math.max(0, elemRect.top - canvasRect.top);\n\n const width = Math.min(canvasRect.width, right - left);\n const height = Math.min(canvasRect.height, bottom - top);\n\n // setup the scissor to only render to that part of the canvas\n const positiveYUpBottom = canvasRect.height - bottom;\n renderer.setScissor(left, positiveYUpBottom, width, height);\n renderer.setViewport(left, positiveYUpBottom, width, height);\n\n // return the aspect\n return width / height;\n }\n\n function render() {\n stats.begin();\n resizeRendererToDisplaySize(renderer);\n\n renderer.setScissorTest(true);\n {\n const aspect = setScissorForElement(view1Elem);\n camera.left = -aspect;\n camera.right = aspect;\n camera.updateProjectionMatrix();\n cameraHelper.update();\n cameraHelper.visible = false;\n renderer.render(scene, camera);\n }\n {\n const aspect = setScissorForElement(view2Elem);\n camera2.aspect = aspect;\n camera2.updateProjectionMatrix();\n cameraHelper.visible = true;\n renderer.render(scene, camera2);\n }\n\n stats.end();\n\n // requestAnimationFrame(render);\n }\n // requestAnimationFrame(render);\n\n\n controls.addEventListener('change', render);\n controls.addEventListener('start', render);\n controls2.addEventListener('change', render);\n sketcher.addEventListener('change', render);\n window.addEventListener('resize', render);\n render();\n}\n\nmain();\n\n\n//# sourceURL=webpack:///./src/index.js?"); /***/ }), @@ -2696,7 +4046,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod \**************************/ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TrackballControls\": () => (/* binding */ TrackballControls)\n/* harmony export */ });\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/constants.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Vector3.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Vector2.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/math/Quaternion.js\");\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/core/EventDispatcher.js\");\n\n\nvar TrackballControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.TrackballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tvar scope = this;\n\tvar STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// API\n\n\tthis.enabled = true;\n\n\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\tthis.rotateSpeed = 3.0;\n\tthis.zoomSpeed = 1.2;\n\tthis.panSpeed = 89.5;\n\n\tthis.noRotate = false;\n\tthis.noZoom = false;\n\tthis.noPan = false;\n\n\tthis.staticMoving = true;\n\tthis.dynamicDampingFactor = 0.2;\n\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\tthis.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ];\n\n\tthis.mouseButtons = { LEFT: null, MIDDLE: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE, RIGHT: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN };\n \n\t// internals\n\n\tthis.target = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3();\n\n\tvar EPS = 0.000001;\n\n\tvar lastPosition = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3();\n\tvar lastZoom = 1;\n\n\tvar _state = STATE.NONE,\n\t\t_keyState = STATE.NONE,\n\n\t\t_eye = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\n\t\t_movePrev = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2(),\n\t\t_moveCurr = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2(),\n\n\t\t_lastAxis = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\t\t_lastAngle = 0,\n\n\t\t_zoomStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2(),\n\t\t_zoomEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2(),\n\n\t\t_touchZoomDistanceStart = 0,\n\t\t_touchZoomDistanceEnd = 0,\n\n\t\t_panStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2(),\n\t\t_panEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2();\n\n\t// for reset\n\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.up0 = this.object.up.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t// events\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\n\t// methods\n\n\tthis.handleResize = function () {\n\n\t\tvar box = scope.domElement.getBoundingClientRect();\n\t\t// adjustments come from similar code in the jquery offset() function\n\t\tvar d = scope.domElement.ownerDocument.documentElement;\n\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\tscope.screen.width = box.width;\n\t\tscope.screen.height = box.height;\n\n\t};\n\n\tvar getMouseOnScreen = ( function () {\n\n\t\tvar vector = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2();\n\n\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tvar getMouseOnCircle = ( function () {\n\n\t\tvar vector = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2();\n\n\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tthis.rotateCamera = ( function () {\n\n\t\tvar axis = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\t\t\tquaternion = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_3__.Quaternion(),\n\t\t\teyeDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\t\t\tobjectUpDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\t\t\tobjectSidewaysDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\t\t\tmoveDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\t\t\tangle;\n\n\t\treturn function rotateCamera() {\n\n\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\tangle = moveDirection.length();\n\n\t\t\tif ( angle ) {\n\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t_lastAngle = angle;\n\n\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t}\n\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t};\n\n\t}() );\n\n\n\tthis.zoomCamera = function () {\n\n\t\tvar factor;\n\n\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom *= factor;\n\t\t\t\tscope.object.updateProjectionMatrix();\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 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom /= factor;\n\t\t\t\t\tscope.object.updateProjectionMatrix();\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 ( scope.staticMoving ) {\n\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t} else {\n\n\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.panCamera = ( function () {\n\n\t\tvar mouseChange = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_2__.Vector2(),\n\t\t\tobjectUp = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3(),\n\t\t\tpan = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_1__.Vector3();\n\n\t\treturn function panCamera() {\n\n\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tvar scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\tvar scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t}\n\n\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\tscope.object.position.add( pan );\n\t\t\t\tscope.target.add( pan );\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.checkDistances = function () {\n\n\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.update = function () {\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tif ( ! scope.noRotate ) {\n\n\t\t\tscope.rotateCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noZoom ) {\n\n\t\t\tscope.zoomCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noPan ) {\n\n\t\t\tscope.panCamera();\n\n\t\t}\n\n\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscope.checkDistances();\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastZoom = scope.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\tthis.reset = function () {\n\n\t\t_state = STATE.NONE;\n\t\t_keyState = STATE.NONE;\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.up.copy( scope.up0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tscope.object.lookAt( scope.target );\n\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tlastPosition.copy( scope.object.position );\n\t\tlastZoom = scope.object.zoom;\n\n\t};\n\n\t// listeners\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction keydown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\treturn;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t_keyState = STATE.ROTATE;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t_keyState = STATE.ZOOM;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t_keyState = STATE.PAN;\n\n\t\t}\n\n\t}\n\n\tfunction keyup() {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\t_keyState = STATE.NONE;\n\n\t\twindow.addEventListener( 'keydown', keydown );\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( _state === STATE.NONE ) {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\t_state = scope.mouseButtons.LEFT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = scope.mouseButtons.MIDDLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\t_state = scope.mouseButtons.RIGHT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t_state = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_panEnd.copy( _panStart );\n\n\t\t}\n\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t}\n scope.update()\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t_state = STATE.NONE;\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction mousewheel( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.noZoom === true ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.deltaMode ) {\n\n\t\t\tcase 2:\n\t\t\t\t// Zoom in pages\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t// Zoom in lines\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\tbreak;\n\n\t\t}\n scope.update()\n\t\tscope.dispatchEvent( startEvent );\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction touchstart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction touchmove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction touchend( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 0:\n\t\t\t\t_state = STATE.NONE;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction contextmenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.removeEventListener( 'wheel', mousewheel );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', touchstart );\n\t\tscope.domElement.removeEventListener( 'touchend', touchend );\n\t\tscope.domElement.removeEventListener( 'touchmove', touchmove );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\twindow.removeEventListener( 'keydown', keydown );\n\t\twindow.removeEventListener( 'keyup', keyup );\n\n\t};\n\n\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\n\tthis.domElement.addEventListener( 'pointerdown', onPointerDown );\n\tthis.domElement.addEventListener( 'wheel', mousewheel );\n\n\tthis.domElement.addEventListener( 'touchstart', touchstart );\n\tthis.domElement.addEventListener( 'touchend', touchend );\n\tthis.domElement.addEventListener( 'touchmove', touchmove );\n\n\tthis.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\tthis.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\twindow.addEventListener( 'keydown', keydown );\n\twindow.addEventListener( 'keyup', keyup );\n\n\tthis.handleResize();\n\n\t// force an update at start\n\tthis.update();\n\n};\n\nTrackballControls.prototype = Object.create( _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_4__.EventDispatcher.prototype );\nTrackballControls.prototype.constructor = TrackballControls;\n\n\n\n\n//# sourceURL=webpack:///./src/trackball.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"TrackballControls\": () => (/* binding */ TrackballControls)\n/* harmony export */ });\n/* harmony import */ var _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/three/src/Three */ \"./node_modules/three/src/Three.js\");\n\n\nvar TrackballControls = function ( object, domElement ) {\n\n\tif ( domElement === undefined ) console.warn( 'THREE.TrackballControls: The second parameter \"domElement\" is now mandatory.' );\n\tif ( domElement === document ) console.error( 'THREE.TrackballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.' );\n\n\tvar scope = this;\n\tvar STATE = { NONE: - 1, ROTATE: 0, ZOOM: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_ZOOM_PAN: 4 };\n\n\tthis.object = object;\n\tthis.domElement = domElement;\n\n\t// API\n\n\tthis.enabled = true;\n\n\tthis.screen = { left: 0, top: 0, width: 0, height: 0 };\n\n\tthis.rotateSpeed = 3.0;\n\tthis.zoomSpeed = 1.2;\n\tthis.panSpeed = 89.5;\n\n\tthis.noRotate = false;\n\tthis.noZoom = false;\n\tthis.noPan = false;\n\n\tthis.staticMoving = true;\n\tthis.dynamicDampingFactor = 0.2;\n\n\tthis.minDistance = 0;\n\tthis.maxDistance = Infinity;\n\n\tthis.keys = [ 65 /*A*/, 83 /*S*/, 68 /*D*/ ];\n\n\tthis.mouseButtons = { LEFT: null, MIDDLE: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE, RIGHT: _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN };\n \n\t// internals\n\n\tthis.target = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\tvar EPS = 0.000001;\n\n\tvar lastPosition = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\tvar lastZoom = 1;\n\n\tvar _state = STATE.NONE,\n\t\t_keyState = STATE.NONE,\n\n\t\t_eye = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\n\t\t_movePrev = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(),\n\t\t_moveCurr = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(),\n\n\t\t_lastAxis = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\t\t_lastAngle = 0,\n\n\t\t_zoomStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(),\n\t\t_zoomEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(),\n\n\t\t_touchZoomDistanceStart = 0,\n\t\t_touchZoomDistanceEnd = 0,\n\n\t\t_panStart = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(),\n\t\t_panEnd = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t// for reset\n\n\tthis.target0 = this.target.clone();\n\tthis.position0 = this.object.position.clone();\n\tthis.up0 = this.object.up.clone();\n\tthis.zoom0 = this.object.zoom;\n\n\t// events\n\n\tvar changeEvent = { type: 'change' };\n\tvar startEvent = { type: 'start' };\n\tvar endEvent = { type: 'end' };\n\n\n\t// methods\n\n\tthis.handleResize = function () {\n\n\t\tvar box = scope.domElement.getBoundingClientRect();\n\t\t// adjustments come from similar code in the jquery offset() function\n\t\tvar d = scope.domElement.ownerDocument.documentElement;\n\t\tscope.screen.left = box.left + window.pageXOffset - d.clientLeft;\n\t\tscope.screen.top = box.top + window.pageYOffset - d.clientTop;\n\t\tscope.screen.width = box.width;\n\t\tscope.screen.height = box.height;\n\n\t};\n\n\tvar getMouseOnScreen = ( function () {\n\n\t\tvar vector = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\treturn function getMouseOnScreen( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( pageX - scope.screen.left ) / scope.screen.width,\n\t\t\t\t( pageY - scope.screen.top ) / scope.screen.height\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tvar getMouseOnCircle = ( function () {\n\n\t\tvar vector = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2();\n\n\t\treturn function getMouseOnCircle( pageX, pageY ) {\n\n\t\t\tvector.set(\n\t\t\t\t( ( pageX - scope.screen.width * 0.5 - scope.screen.left ) / ( scope.screen.width * 0.5 ) ),\n\t\t\t\t( ( scope.screen.height + 2 * ( scope.screen.top - pageY ) ) / scope.screen.width ) // screen.width intentional\n\t\t\t);\n\n\t\t\treturn vector;\n\n\t\t};\n\n\t}() );\n\n\tthis.rotateCamera = ( function () {\n\n\t\tvar axis = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\t\t\tquaternion = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Quaternion(),\n\t\t\teyeDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\t\t\tobjectUpDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\t\t\tobjectSidewaysDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\t\t\tmoveDirection = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\t\t\tangle;\n\n\t\treturn function rotateCamera() {\n\n\t\t\tmoveDirection.set( _moveCurr.x - _movePrev.x, _moveCurr.y - _movePrev.y, 0 );\n\t\t\tangle = moveDirection.length();\n\n\t\t\tif ( angle ) {\n\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\n\t\t\t\teyeDirection.copy( _eye ).normalize();\n\t\t\t\tobjectUpDirection.copy( scope.object.up ).normalize();\n\t\t\t\tobjectSidewaysDirection.crossVectors( objectUpDirection, eyeDirection ).normalize();\n\n\t\t\t\tobjectUpDirection.setLength( _moveCurr.y - _movePrev.y );\n\t\t\t\tobjectSidewaysDirection.setLength( _moveCurr.x - _movePrev.x );\n\n\t\t\t\tmoveDirection.copy( objectUpDirection.add( objectSidewaysDirection ) );\n\n\t\t\t\taxis.crossVectors( moveDirection, _eye ).normalize();\n\n\t\t\t\tangle *= scope.rotateSpeed;\n\t\t\t\tquaternion.setFromAxisAngle( axis, angle );\n\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t\t_lastAxis.copy( axis );\n\t\t\t\t_lastAngle = angle;\n\n\t\t\t} else if ( ! scope.staticMoving && _lastAngle ) {\n\n\t\t\t\t_lastAngle *= Math.sqrt( 1.0 - scope.dynamicDampingFactor );\n\t\t\t\t_eye.copy( scope.object.position ).sub( scope.target );\n\t\t\t\tquaternion.setFromAxisAngle( _lastAxis, _lastAngle );\n\t\t\t\t_eye.applyQuaternion( quaternion );\n\t\t\t\tscope.object.up.applyQuaternion( quaternion );\n\n\t\t\t}\n\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t};\n\n\t}() );\n\n\n\tthis.zoomCamera = function () {\n\n\t\tvar factor;\n\n\t\tif ( _state === STATE.TOUCH_ZOOM_PAN ) {\n\n\t\t\tfactor = _touchZoomDistanceStart / _touchZoomDistanceEnd;\n\t\t\t_touchZoomDistanceStart = _touchZoomDistanceEnd;\n\n\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\tscope.object.zoom *= factor;\n\t\t\t\tscope.object.updateProjectionMatrix();\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 + ( _zoomEnd.y - _zoomStart.y ) * scope.zoomSpeed;\n\n\t\t\tif ( factor !== 1.0 && factor > 0.0 ) {\n\n\t\t\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\t\t\t_eye.multiplyScalar( factor );\n\n\t\t\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tscope.object.zoom /= factor;\n\t\t\t\t\tscope.object.updateProjectionMatrix();\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 ( scope.staticMoving ) {\n\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t} else {\n\n\t\t\t\t_zoomStart.y += ( _zoomEnd.y - _zoomStart.y ) * this.dynamicDampingFactor;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.panCamera = ( function () {\n\n\t\tvar mouseChange = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector2(),\n\t\t\tobjectUp = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3(),\n\t\t\tpan = new _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.Vector3();\n\n\t\treturn function panCamera() {\n\n\t\t\tmouseChange.copy( _panEnd ).sub( _panStart );\n\n\t\t\tif ( mouseChange.lengthSq() ) {\n\n\t\t\t\tif ( scope.object.isOrthographicCamera ) {\n\n\t\t\t\t\tvar scale_x = ( scope.object.right - scope.object.left ) / scope.object.zoom / scope.domElement.clientWidth;\n\t\t\t\t\tvar scale_y = ( scope.object.top - scope.object.bottom ) / scope.object.zoom / scope.domElement.clientWidth;\n\n\t\t\t\t\tmouseChange.x *= scale_x;\n\t\t\t\t\tmouseChange.y *= scale_y;\n\n\t\t\t\t}\n\n\t\t\t\tmouseChange.multiplyScalar( _eye.length() * scope.panSpeed );\n\n\t\t\t\tpan.copy( _eye ).cross( scope.object.up ).setLength( mouseChange.x );\n\t\t\t\tpan.add( objectUp.copy( scope.object.up ).setLength( mouseChange.y ) );\n\n\t\t\t\tscope.object.position.add( pan );\n\t\t\t\tscope.target.add( pan );\n\n\t\t\t\tif ( scope.staticMoving ) {\n\n\t\t\t\t\t_panStart.copy( _panEnd );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_panStart.add( mouseChange.subVectors( _panEnd, _panStart ).multiplyScalar( scope.dynamicDampingFactor ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tthis.checkDistances = function () {\n\n\t\tif ( ! scope.noZoom || ! scope.noPan ) {\n\n\t\t\tif ( _eye.lengthSq() > scope.maxDistance * scope.maxDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.maxDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t\tif ( _eye.lengthSq() < scope.minDistance * scope.minDistance ) {\n\n\t\t\t\tscope.object.position.addVectors( scope.target, _eye.setLength( scope.minDistance ) );\n\t\t\t\t_zoomStart.copy( _zoomEnd );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tthis.update = function () {\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tif ( ! scope.noRotate ) {\n\n\t\t\tscope.rotateCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noZoom ) {\n\n\t\t\tscope.zoomCamera();\n\n\t\t}\n\n\t\tif ( ! scope.noPan ) {\n\n\t\t\tscope.panCamera();\n\n\t\t}\n\n\t\tscope.object.position.addVectors( scope.target, _eye );\n\n\t\tif ( scope.object.isPerspectiveCamera ) {\n\n\t\t\tscope.checkDistances();\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\n\t\t\t}\n\n\t\t} else if ( scope.object.isOrthographicCamera ) {\n\n\t\t\tscope.object.lookAt( scope.target );\n\n\t\t\tif ( lastPosition.distanceToSquared( scope.object.position ) > EPS || lastZoom !== scope.object.zoom ) {\n\n\t\t\t\tscope.dispatchEvent( changeEvent );\n\n\t\t\t\tlastPosition.copy( scope.object.position );\n\t\t\t\tlastZoom = scope.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\tthis.reset = function () {\n\n\t\t_state = STATE.NONE;\n\t\t_keyState = STATE.NONE;\n\n\t\tscope.target.copy( scope.target0 );\n\t\tscope.object.position.copy( scope.position0 );\n\t\tscope.object.up.copy( scope.up0 );\n\t\tscope.object.zoom = scope.zoom0;\n\n\t\tscope.object.updateProjectionMatrix();\n\n\t\t_eye.subVectors( scope.object.position, scope.target );\n\n\t\tscope.object.lookAt( scope.target );\n\n\t\tscope.dispatchEvent( changeEvent );\n\n\t\tlastPosition.copy( scope.object.position );\n\t\tlastZoom = scope.object.zoom;\n\n\t};\n\n\t// listeners\n\n\tfunction onPointerDown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseDown( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseMove( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction onPointerUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.pointerType ) {\n\n\t\t\tcase 'mouse':\n\t\t\tcase 'pen':\n\t\t\t\tonMouseUp( event );\n\t\t\t\tbreak;\n\n\t\t\t// TODO touch\n\n\t\t}\n\n\t}\n\n\tfunction keydown( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\twindow.removeEventListener( 'keydown', keydown );\n\n\t\tif ( _keyState !== STATE.NONE ) {\n\n\t\t\treturn;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ROTATE ] && ! scope.noRotate ) {\n\n\t\t\t_keyState = STATE.ROTATE;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.ZOOM ] && ! scope.noZoom ) {\n\n\t\t\t_keyState = STATE.ZOOM;\n\n\t\t} else if ( event.keyCode === scope.keys[ STATE.PAN ] && ! scope.noPan ) {\n\n\t\t\t_keyState = STATE.PAN;\n\n\t\t}\n\n\t}\n\n\tfunction keyup() {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\t_keyState = STATE.NONE;\n\n\t\twindow.addEventListener( 'keydown', keydown );\n\n\t}\n\n\tfunction onMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tif ( _state === STATE.NONE ) {\n\n\t\t\tswitch ( event.button ) {\n\n\t\t\t\tcase 0:\n\t\t\t\t\t_state = scope.mouseButtons.LEFT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 1:\n\t\t\t\t\t_state = scope.mouseButtons.MIDDLE;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 2:\n\t\t\t\t\t_state = scope.mouseButtons.RIGHT;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\t_state = STATE.NONE;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\t\t\t_movePrev.copy( _moveCurr );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_zoomEnd.copy( _zoomStart );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panStart.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\t\t\t_panEnd.copy( _panStart );\n\n\t\t}\n\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction onMouseMove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tvar state = ( _keyState !== STATE.NONE ) ? _keyState : _state;\n\n\t\tif ( state === STATE.ROTATE && ! scope.noRotate ) {\n\n\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t_moveCurr.copy( getMouseOnCircle( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.ZOOM && ! scope.noZoom ) {\n\n\t\t\t_zoomEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t} else if ( state === STATE.PAN && ! scope.noPan ) {\n\n\t\t\t_panEnd.copy( getMouseOnScreen( event.pageX, event.pageY ) );\n\n\t\t}\n scope.update()\n\t}\n\n\tfunction onMouseUp( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\t_state = STATE.NONE;\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction mousewheel( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tif ( scope.noZoom === true ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.deltaMode ) {\n\n\t\t\tcase 2:\n\t\t\t\t// Zoom in pages\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.025;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t// Zoom in lines\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.01;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// undefined, 0, assume pixels\n\t\t\t\t_zoomStart.y -= event.deltaY * 0.00025;\n\t\t\t\tbreak;\n\n\t\t}\n scope.update()\n\t\tscope.dispatchEvent( startEvent );\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction touchstart( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\t_state = STATE.TOUCH_ZOOM_PAN;\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panStart.copy( getMouseOnScreen( x, y ) );\n\t\t\t\t_panEnd.copy( _panStart );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( startEvent );\n\n\t}\n\n\tfunction touchmove( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 1:\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\tbreak;\n\n\t\t\tdefault: // 2 or more\n\t\t\t\tvar dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n\t\t\t\tvar dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\t\t\t\t_touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );\n\n\t\t\t\tvar x = ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX ) / 2;\n\t\t\t\tvar y = ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY ) / 2;\n\t\t\t\t_panEnd.copy( getMouseOnScreen( x, y ) );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\tfunction touchend( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tswitch ( event.touches.length ) {\n\n\t\t\tcase 0:\n\t\t\t\t_state = STATE.NONE;\n\t\t\t\tbreak;\n\n\t\t\tcase 1:\n\t\t\t\t_state = STATE.TOUCH_ROTATE;\n\t\t\t\t_moveCurr.copy( getMouseOnCircle( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ) );\n\t\t\t\t_movePrev.copy( _moveCurr );\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\tscope.dispatchEvent( endEvent );\n\n\t}\n\n\tfunction contextmenu( event ) {\n\n\t\tif ( scope.enabled === false ) return;\n\n\t\tevent.preventDefault();\n\n\t}\n\n\tthis.dispose = function () {\n\n\t\tscope.domElement.removeEventListener( 'contextmenu', contextmenu );\n\n\t\tscope.domElement.removeEventListener( 'pointerdown', onPointerDown );\n\t\tscope.domElement.removeEventListener( 'wheel', mousewheel );\n\n\t\tscope.domElement.removeEventListener( 'touchstart', touchstart );\n\t\tscope.domElement.removeEventListener( 'touchend', touchend );\n\t\tscope.domElement.removeEventListener( 'touchmove', touchmove );\n\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove );\n\t\tscope.domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp );\n\n\t\twindow.removeEventListener( 'keydown', keydown );\n\t\twindow.removeEventListener( 'keyup', keyup );\n\n\t};\n\n\tthis.domElement.addEventListener( 'contextmenu', contextmenu );\n\n\tthis.domElement.addEventListener( 'pointerdown', onPointerDown );\n\tthis.domElement.addEventListener( 'wheel', mousewheel );\n\n\tthis.domElement.addEventListener( 'touchstart', touchstart );\n\tthis.domElement.addEventListener( 'touchend', touchend );\n\tthis.domElement.addEventListener( 'touchmove', touchmove );\n\n\tthis.domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove );\n\tthis.domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp );\n\n\twindow.addEventListener( 'keydown', keydown );\n\twindow.addEventListener( 'keyup', keyup );\n\n\tthis.handleResize();\n\n\t// force an update at start\n\tthis.update();\n\n};\n\nTrackballControls.prototype = Object.create( _node_modules_three_src_Three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher.prototype );\nTrackballControls.prototype.constructor = TrackballControls;\n\n\n\n\n//# sourceURL=webpack:///./src/trackball.js?"); /***/ }), diff --git a/dist/index.html b/dist/index.html index d1f2435..a8e2085 100644 --- a/dist/index.html +++ b/dist/index.html @@ -61,7 +61,8 @@
- + diff --git a/dist/solver.js b/dist/solver.js new file mode 100644 index 0000000..6adf626 --- /dev/null +++ b/dist/solver.js @@ -0,0 +1,2353 @@ + + +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(Module) { ..generated code.. } +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module !== 'undefined' ? Module : {}; + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) +// {{PRE_JSES}} + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {}; +var key; +for (key in Module) { + if (Module.hasOwnProperty(key)) { + moduleOverrides[key] = Module[key]; + } +} + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = function(status, toThrow) { + throw toThrow; +}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +var ENVIRONMENT_IS_WEB = false; +var ENVIRONMENT_IS_WORKER = false; +var ENVIRONMENT_IS_NODE = false; +var ENVIRONMENT_IS_SHELL = false; +ENVIRONMENT_IS_WEB = typeof window === 'object'; +ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string'; +ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -s ENVIRONMENT=web or -s ENVIRONMENT=node)'); +} + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var read_, + readAsync, + readBinary, + setWindowTitle; + +var nodeFS; +var nodePath; + +if (ENVIRONMENT_IS_NODE) { + if (ENVIRONMENT_IS_WORKER) { + scriptDirectory = require('path').dirname(scriptDirectory) + '/'; + } else { + scriptDirectory = __dirname + '/'; + } + +// include: node_shell_read.js + + +read_ = function shell_read(filename, binary) { + if (!nodeFS) nodeFS = require('fs'); + if (!nodePath) nodePath = require('path'); + filename = nodePath['normalize'](filename); + return nodeFS['readFileSync'](filename, binary ? null : 'utf8'); +}; + +readBinary = function readBinary(filename) { + var ret = read_(filename, true); + if (!ret.buffer) { + ret = new Uint8Array(ret); + } + assert(ret.buffer); + return ret; +}; + +// end include: node_shell_read.js + if (process['argv'].length > 1) { + thisProgram = process['argv'][1].replace(/\\/g, '/'); + } + + arguments_ = process['argv'].slice(2); + + if (typeof module !== 'undefined') { + module['exports'] = Module; + } + + process['on']('uncaughtException', function(ex) { + // suppress ExitStatus exceptions from showing an error + if (!(ex instanceof ExitStatus)) { + throw ex; + } + }); + + process['on']('unhandledRejection', abort); + + quit_ = function(status) { + process['exit'](status); + }; + + Module['inspect'] = function () { return '[Emscripten Module object]'; }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if (typeof read != 'undefined') { + read_ = function shell_read(f) { + return read(f); + }; + } + + readBinary = function readBinary(f) { + var data; + if (typeof readbuffer === 'function') { + return new Uint8Array(readbuffer(f)); + } + data = read(f, 'binary'); + assert(typeof data === 'object'); + return data; + }; + + if (typeof scriptArgs != 'undefined') { + arguments_ = scriptArgs; + } else if (typeof arguments != 'undefined') { + arguments_ = arguments; + } + + if (typeof quit === 'function') { + quit_ = function(status) { + quit(status); + }; + } + + if (typeof print !== 'undefined') { + // Prefer to use print/printErr where they exist, as they usually work better. + if (typeof console === 'undefined') console = /** @type{!Console} */({}); + console.log = /** @type{!function(this:Console, ...*): undefined} */ (print); + console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr !== 'undefined' ? printErr : print); + } + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document !== 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + if (scriptDirectory.indexOf('blob:') !== 0) { + scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf('/')+1); + } else { + scriptDirectory = ''; + } + + // Differentiate the Web Worker from the Node Worker case, as reading must + // be done differently. + { + +// include: web_or_worker_shell_read.js + + + read_ = function(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.send(null); + return xhr.responseText; + }; + + if (ENVIRONMENT_IS_WORKER) { + readBinary = function(url) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = function(url, onload, onerror) { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = function() { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + onload(xhr.response); + return; + } + onerror(); + }; + xhr.onerror = onerror; + xhr.send(null); + }; + +// end include: web_or_worker_shell_read.js + } + + setWindowTitle = function(title) { document.title = title }; +} else +{ + throw new Error('environment detection error'); +} + +// Set up the out() and err() hooks, which are how we can print to stdout or +// stderr, respectively. +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.warn.bind(console); + +// Merge back in the overrides +for (key in moduleOverrides) { + if (moduleOverrides.hasOwnProperty(key)) { + Module[key] = moduleOverrides[key]; + } +} +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. +moduleOverrides = null; + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments']; +if (!Object.getOwnPropertyDescriptor(Module, 'arguments')) { + Object.defineProperty(Module, 'arguments', { + configurable: true, + get: function() { + abort('Module.arguments has been replaced with plain arguments_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (Module['thisProgram']) thisProgram = Module['thisProgram']; +if (!Object.getOwnPropertyDescriptor(Module, 'thisProgram')) { + Object.defineProperty(Module, 'thisProgram', { + configurable: true, + get: function() { + abort('Module.thisProgram has been replaced with plain thisProgram (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (Module['quit']) quit_ = Module['quit']; +if (!Object.getOwnPropertyDescriptor(Module, 'quit')) { + Object.defineProperty(Module, 'quit', { + configurable: true, + get: function() { + abort('Module.quit has been replaced with plain quit_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] === 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] === 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] === 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] === 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] === 'undefined', 'Module.read option was removed (modify read_ in JS)'); +assert(typeof Module['readAsync'] === 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] === 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] === 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)'); +assert(typeof Module['TOTAL_MEMORY'] === 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); + +if (!Object.getOwnPropertyDescriptor(Module, 'read')) { + Object.defineProperty(Module, 'read', { + configurable: true, + get: function() { + abort('Module.read has been replaced with plain read_ (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (!Object.getOwnPropertyDescriptor(Module, 'readAsync')) { + Object.defineProperty(Module, 'readAsync', { + configurable: true, + get: function() { + abort('Module.readAsync has been replaced with plain readAsync (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (!Object.getOwnPropertyDescriptor(Module, 'readBinary')) { + Object.defineProperty(Module, 'readBinary', { + configurable: true, + get: function() { + abort('Module.readBinary has been replaced with plain readBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (!Object.getOwnPropertyDescriptor(Module, 'setWindowTitle')) { + Object.defineProperty(Module, 'setWindowTitle', { + configurable: true, + get: function() { + abort('Module.setWindowTitle has been replaced with plain setWindowTitle (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + + + + +var STACK_ALIGN = 16; + +function alignMemory(size, factor) { + if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default + return Math.ceil(size / factor) * factor; +} + +function getNativeTypeSize(type) { + switch (type) { + case 'i1': case 'i8': return 1; + case 'i16': return 2; + case 'i32': return 4; + case 'i64': return 8; + case 'float': return 4; + case 'double': return 8; + default: { + if (type[type.length-1] === '*') { + return 4; // A pointer + } else if (type[0] === 'i') { + var bits = Number(type.substr(1)); + assert(bits % 8 === 0, 'getNativeTypeSize invalid bits ' + bits + ', type ' + type); + return bits / 8; + } else { + return 0; + } + } + } +} + +function warnOnce(text) { + if (!warnOnce.shown) warnOnce.shown = {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + err(text); + } +} + +// include: runtime_functions.js + + +// Wraps a JS function as a wasm function with a given signature. +function convertJsFunctionToWasm(func, sig) { + + // If the type reflection proposal is available, use the new + // "WebAssembly.Function" constructor. + // Otherwise, construct a minimal wasm module importing the JS function and + // re-exporting it. + if (typeof WebAssembly.Function === "function") { + var typeNames = { + 'i': 'i32', + 'j': 'i64', + 'f': 'f32', + 'd': 'f64' + }; + var type = { + parameters: [], + results: sig[0] == 'v' ? [] : [typeNames[sig[0]]] + }; + for (var i = 1; i < sig.length; ++i) { + type.parameters.push(typeNames[sig[i]]); + } + return new WebAssembly.Function(type, func); + } + + // The module is static, with the exception of the type section, which is + // generated based on the signature passed in. + var typeSection = [ + 0x01, // id: section, + 0x00, // length: 0 (placeholder) + 0x01, // count: 1 + 0x60, // form: func + ]; + var sigRet = sig.slice(0, 1); + var sigParam = sig.slice(1); + var typeCodes = { + 'i': 0x7f, // i32 + 'j': 0x7e, // i64 + 'f': 0x7d, // f32 + 'd': 0x7c, // f64 + }; + + // Parameters, length + signatures + typeSection.push(sigParam.length); + for (var i = 0; i < sigParam.length; ++i) { + typeSection.push(typeCodes[sigParam[i]]); + } + + // Return values, length + signatures + // With no multi-return in MVP, either 0 (void) or 1 (anything else) + if (sigRet == 'v') { + typeSection.push(0x00); + } else { + typeSection = typeSection.concat([0x01, typeCodes[sigRet]]); + } + + // Write the overall length of the type section back into the section header + // (excepting the 2 bytes for the section id and length) + typeSection[1] = typeSection.length - 2; + + // Rest of the module is static + var bytes = new Uint8Array([ + 0x00, 0x61, 0x73, 0x6d, // magic ("\0asm") + 0x01, 0x00, 0x00, 0x00, // version: 1 + ].concat(typeSection, [ + 0x02, 0x07, // import section + // (import "e" "f" (func 0 (type 0))) + 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00, + 0x07, 0x05, // export section + // (export "f" (func 0 (type 0))) + 0x01, 0x01, 0x66, 0x00, 0x00, + ])); + + // We can compile this wasm module synchronously because it is very small. + // This accepts an import (at "e.f"), that it reroutes to an export (at "f") + var module = new WebAssembly.Module(bytes); + var instance = new WebAssembly.Instance(module, { + 'e': { + 'f': func + } + }); + var wrappedFunc = instance.exports['f']; + return wrappedFunc; +} + +var freeTableIndexes = []; + +// Weak map of functions in the table to their indexes, created on first use. +var functionsInTableMap; + +function getEmptyTableSlot() { + // Reuse a free index if there is one, otherwise grow. + if (freeTableIndexes.length) { + return freeTableIndexes.pop(); + } + // Grow the table + try { + wasmTable.grow(1); + } catch (err) { + if (!(err instanceof RangeError)) { + throw err; + } + throw 'Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.'; + } + return wasmTable.length - 1; +} + +// Add a wasm function to the table. +function addFunctionWasm(func, sig) { + // Check if the function is already in the table, to ensure each function + // gets a unique index. First, create the map if this is the first use. + if (!functionsInTableMap) { + functionsInTableMap = new WeakMap(); + for (var i = 0; i < wasmTable.length; i++) { + var item = wasmTable.get(i); + // Ignore null values. + if (item) { + functionsInTableMap.set(item, i); + } + } + } + if (functionsInTableMap.has(func)) { + return functionsInTableMap.get(func); + } + + // It's not in the table, add it now. + + var ret = getEmptyTableSlot(); + + // Set the new value. + try { + // Attempting to call this with JS function will cause of table.set() to fail + wasmTable.set(ret, func); + } catch (err) { + if (!(err instanceof TypeError)) { + throw err; + } + assert(typeof sig !== 'undefined', 'Missing signature argument to addFunction: ' + func); + var wrapped = convertJsFunctionToWasm(func, sig); + wasmTable.set(ret, wrapped); + } + + functionsInTableMap.set(func, ret); + + return ret; +} + +function removeFunction(index) { + functionsInTableMap.delete(wasmTable.get(index)); + freeTableIndexes.push(index); +} + +// 'sig' parameter is required for the llvm backend but only when func is not +// already a WebAssembly function. +function addFunction(func, sig) { + assert(typeof func !== 'undefined'); + + return addFunctionWasm(func, sig); +} + +// end include: runtime_functions.js +// include: runtime_debug.js + + +// end include: runtime_debug.js +function makeBigInt(low, high, unsigned) { + return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0)); +} + +var tempRet0 = 0; + +var setTempRet0 = function(value) { + tempRet0 = value; +}; + +var getTempRet0 = function() { + return tempRet0; +}; + +function getCompilerSetting(name) { + throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work'; +} + + + +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary; +if (Module['wasmBinary']) wasmBinary = Module['wasmBinary']; +if (!Object.getOwnPropertyDescriptor(Module, 'wasmBinary')) { + Object.defineProperty(Module, 'wasmBinary', { + configurable: true, + get: function() { + abort('Module.wasmBinary has been replaced with plain wasmBinary (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} +var noExitRuntime = Module['noExitRuntime'] || true; +if (!Object.getOwnPropertyDescriptor(Module, 'noExitRuntime')) { + Object.defineProperty(Module, 'noExitRuntime', { + configurable: true, + get: function() { + abort('Module.noExitRuntime has been replaced with plain noExitRuntime (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +if (typeof WebAssembly !== 'object') { + abort('no native wasm support detected'); +} + +// include: runtime_safe_heap.js + + +// In MINIMAL_RUNTIME, setValue() and getValue() are only available when building with safe heap enabled, for heap safety checking. +// In traditional runtime, setValue() and getValue() are always available (although their use is highly discouraged due to perf penalties) + +/** @param {number} ptr + @param {number} value + @param {string} type + @param {number|boolean=} noSafe */ +function setValue(ptr, value, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': HEAP8[((ptr)>>0)] = value; break; + case 'i8': HEAP8[((ptr)>>0)] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)] = tempI64[0],HEAP32[(((ptr)+(4))>>2)] = tempI64[1]); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + default: abort('invalid type for setValue: ' + type); + } +} + +/** @param {number} ptr + @param {string} type + @param {number|boolean=} noSafe */ +function getValue(ptr, type, noSafe) { + type = type || 'i8'; + if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + switch(type) { + case 'i1': return HEAP8[((ptr)>>0)]; + case 'i8': return HEAP8[((ptr)>>0)]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP32[((ptr)>>2)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + default: abort('invalid type for getValue: ' + type); + } + return null; +} + +// end include: runtime_safe_heap.js +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed: ' + text); + } +} + +// Returns the C function with a specified identifier (for C++, you need to do manual name mangling) +function getCFunc(ident) { + var func = Module['_' + ident]; // closure exported function + assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); + return func; +} + +// C calling interface. +/** @param {string|null=} returnType + @param {Array=} argTypes + @param {Arguments|Array=} args + @param {Object=} opts */ +function ccall(ident, returnType, argTypes, args, opts) { + // For fast lookup of conversion functions + var toC = { + 'string': function(str) { + var ret = 0; + if (str !== null && str !== undefined && str !== 0) { // null string + // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' + var len = (str.length << 2) + 1; + ret = stackAlloc(len); + stringToUTF8(str, ret, len); + } + return ret; + }, + 'array': function(arr) { + var ret = stackAlloc(arr.length); + writeArrayToMemory(arr, ret); + return ret; + } + }; + + function convertReturnValue(ret) { + if (returnType === 'string') return UTF8ToString(ret); + if (returnType === 'boolean') return Boolean(ret); + return ret; + } + + var func = getCFunc(ident); + var cArgs = []; + var stack = 0; + assert(returnType !== 'array', 'Return type should not be "array".'); + if (args) { + for (var i = 0; i < args.length; i++) { + var converter = toC[argTypes[i]]; + if (converter) { + if (stack === 0) stack = stackSave(); + cArgs[i] = converter(args[i]); + } else { + cArgs[i] = args[i]; + } + } + } + var ret = func.apply(null, cArgs); + + ret = convertReturnValue(ret); + if (stack !== 0) stackRestore(stack); + return ret; +} + +/** @param {string=} returnType + @param {Array=} argTypes + @param {Object=} opts */ +function cwrap(ident, returnType, argTypes, opts) { + return function() { + return ccall(ident, returnType, argTypes, arguments, opts); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort("free() called but not included in the build - add '_free' to EXPORTED_FUNCTIONS"); +} + +var ALLOC_NORMAL = 0; // Tries to use _malloc() +var ALLOC_STACK = 1; // Lives for the duration of the current function call + +// allocate(): This is for internal use. You can use it yourself as well, but the interface +// is a little tricky (see docs right below). The reason is that it is optimized +// for multiple syntaxes to save space in generated code. So you should +// normally not use allocate(), and instead allocate memory using _malloc(), +// initialize it with setValue(), and so forth. +// @slab: An array of data. +// @allocator: How to allocate memory, see ALLOC_* +/** @type {function((Uint8Array|Array), number)} */ +function allocate(slab, allocator) { + var ret; + assert(typeof allocator === 'number', 'allocate no longer takes a type argument') + assert(typeof slab !== 'number', 'allocate no longer takes a number as arg0') + + if (allocator == ALLOC_STACK) { + ret = stackAlloc(slab.length); + } else { + ret = _malloc(slab.length); + } + + if (slab.subarray || slab.slice) { + HEAPU8.set(/** @type {!Uint8Array} */(slab), ret); + } else { + HEAPU8.set(new Uint8Array(slab), ret); + } + return ret; +} + +// include: runtime_strings.js + + +// runtime_strings.js: Strings related runtime functions that are part of both MINIMAL_RUNTIME and regular runtime. + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns +// a copy of that string as a Javascript String object. + +var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; + +/** + * @param {number} idx + * @param {number=} maxBytesToRead + * @return {string} + */ +function UTF8ArrayToString(heap, idx, maxBytesToRead) { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, so that undefined means Infinity) + while (heap[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { + return UTF8Decoder.decode(heap.subarray(idx, endPtr)); + } else { + var str = ''; + // If building with TextDecoder, we have already computed the string length above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heap[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heap[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heap[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte 0x' + u0.toString(16) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heap[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + } + return str; +} + +// Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns a +// copy of that string as a Javascript String object. +// maxBytesToRead: an optional length that specifies the maximum number of bytes to read. You can omit +// this parameter to scan the string until the first \0 byte. If maxBytesToRead is +// passed, and the string at [ptr, ptr+maxBytesToReadr[ contains a null byte in the +// middle, then the string will cut short at that byte index (i.e. maxBytesToRead will +// not produce a string of exact length [ptr, ptr+maxBytesToRead[) +// N.B. mixing frequent uses of UTF8ToString() with and without maxBytesToRead may +// throw JS JIT optimizations off, so it is worth to consider consistently using one +// style or the other. +/** + * @param {number} ptr + * @param {number=} maxBytesToRead + * @return {string} + */ +function UTF8ToString(ptr, maxBytesToRead) { + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; +} + +// Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', +// encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// heap: the array to copy to. Each index in this array is assumed to be one 8-byte element. +// outIdx: The starting offset in the array to begin the copying. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. +// This count should include the null terminator, +// i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. +// maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { + if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u >= 0x200000) warnOnce('Invalid Unicode code point 0x' + u.toString(16) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x1FFFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. +// Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF8(str, outPtr, maxBytesToWrite) { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. +function lengthBytesUTF8(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); + if (u <= 0x7F) ++len; + else if (u <= 0x7FF) len += 2; + else if (u <= 0xFFFF) len += 3; + else len += 4; + } + return len; +} + +// end include: runtime_strings.js +// include: runtime_strings_extra.js + + +// runtime_strings_extra.js: Strings related runtime functions that are available only in regular runtime. + +// Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +function AsciiToString(ptr) { + var str = ''; + while (1) { + var ch = HEAPU8[((ptr++)>>0)]; + if (!ch) return str; + str += String.fromCharCode(ch); + } +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. + +function stringToAscii(str, outPtr) { + return writeAsciiToMemory(str, outPtr, false); +} + +// Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns +// a copy of that string as a Javascript String object. + +var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; + +function UTF16ToString(ptr, maxBytesToRead) { + assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); + var endPtr = ptr; + // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. + // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. + var idx = endPtr >> 1; + var maxIdx = idx + maxBytesToRead / 2; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + while (!(idx >= maxIdx) && HEAPU16[idx]) ++idx; + endPtr = idx << 1; + + if (endPtr - ptr > 32 && UTF16Decoder) { + return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); + } else { + var str = ''; + + // If maxBytesToRead is not passed explicitly, it will be undefined, and the for-loop's condition + // will always evaluate to true. The loop is then terminated on the first null char. + for (var i = 0; !(i >= maxBytesToRead / 2); ++i) { + var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; + if (codeUnit == 0) break; + // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. + str += String.fromCharCode(codeUnit); + } + + return str; + } +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. +// Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. +// maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF16(str, outPtr, maxBytesToWrite) { + assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 2) return 0; + maxBytesToWrite -= 2; // Null terminator. + var startPtr = outPtr; + var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; + for (var i = 0; i < numCharsToWrite; ++i) { + // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + HEAP16[((outPtr)>>1)] = codeUnit; + outPtr += 2; + } + // Null-terminate the pointer to the HEAP. + HEAP16[((outPtr)>>1)] = 0; + return outPtr - startPtr; +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF16(str) { + return str.length*2; +} + +function UTF32ToString(ptr, maxBytesToRead) { + assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); + var i = 0; + + var str = ''; + // If maxBytesToRead is not passed explicitly, it will be undefined, and this + // will always evaluate to true. This saves on code size. + while (!(i >= maxBytesToRead / 4)) { + var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; + if (utf32 == 0) break; + ++i; + // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + if (utf32 >= 0x10000) { + var ch = utf32 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } else { + str += String.fromCharCode(utf32); + } + } + return str; +} + +// Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', +// null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. +// Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. +// Parameters: +// str: the Javascript string to copy. +// outPtr: Byte address in Emscripten HEAP where to write the string to. +// maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null +// terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. +// maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. +// Returns the number of bytes written, EXCLUDING the null terminator. + +function stringToUTF32(str, outPtr, maxBytesToWrite) { + assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); + assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. + if (maxBytesToWrite === undefined) { + maxBytesToWrite = 0x7FFFFFFF; + } + if (maxBytesToWrite < 4) return 0; + var startPtr = outPtr; + var endPtr = startPtr + maxBytesToWrite - 4; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); // possibly a lead surrogate + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { + var trailSurrogate = str.charCodeAt(++i); + codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); + } + HEAP32[((outPtr)>>2)] = codeUnit; + outPtr += 4; + if (outPtr + 4 > endPtr) break; + } + // Null-terminate the pointer to the HEAP. + HEAP32[((outPtr)>>2)] = 0; + return outPtr - startPtr; +} + +// Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. + +function lengthBytesUTF32(str) { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var codeUnit = str.charCodeAt(i); + if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. + len += 4; + } + + return len; +} + +// Allocate heap space for a JS string, and write it there. +// It is the responsibility of the caller to free() that memory. +function allocateUTF8(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = _malloc(size); + if (ret) stringToUTF8Array(str, HEAP8, ret, size); + return ret; +} + +// Allocate stack space for a JS string, and write it there. +function allocateUTF8OnStack(str) { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8Array(str, HEAP8, ret, size); + return ret; +} + +// Deprecated: This function should not be called because it is unsafe and does not provide +// a maximum length limit of how many bytes it is allowed to write. Prefer calling the +// function stringToUTF8Array() instead, which takes in a maximum length that can be used +// to be secure from out of bounds writes. +/** @deprecated + @param {boolean=} dontAddNull */ +function writeStringToMemory(string, buffer, dontAddNull) { + warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); + + var /** @type {number} */ lastChar, /** @type {number} */ end; + if (dontAddNull) { + // stringToUTF8Array always appends null. If we don't want to do that, remember the + // character that existed at the location where the null will be placed, and restore + // that after the write (below). + end = buffer + lengthBytesUTF8(string); + lastChar = HEAP8[end]; + } + stringToUTF8(string, buffer, Infinity); + if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. +} + +function writeArrayToMemory(array, buffer) { + assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)') + HEAP8.set(array, buffer); +} + +/** @param {boolean=} dontAddNull */ +function writeAsciiToMemory(str, buffer, dontAddNull) { + for (var i = 0; i < str.length; ++i) { + assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); + HEAP8[((buffer++)>>0)] = str.charCodeAt(i); + } + // Null-terminate the pointer to the HEAP. + if (!dontAddNull) HEAP8[((buffer)>>0)] = 0; +} + +// end include: runtime_strings_extra.js +// Memory management + +function alignUp(x, multiple) { + if (x % multiple > 0) { + x += multiple - (x % multiple); + } + return x; +} + +var HEAP, +/** @type {ArrayBuffer} */ + buffer, +/** @type {Int8Array} */ + HEAP8, +/** @type {Uint8Array} */ + HEAPU8, +/** @type {Int16Array} */ + HEAP16, +/** @type {Uint16Array} */ + HEAPU16, +/** @type {Int32Array} */ + HEAP32, +/** @type {Uint32Array} */ + HEAPU32, +/** @type {Float32Array} */ + HEAPF32, +/** @type {Float64Array} */ + HEAPF64; + +function updateGlobalBufferAndViews(buf) { + buffer = buf; + Module['HEAP8'] = HEAP8 = new Int8Array(buf); + Module['HEAP16'] = HEAP16 = new Int16Array(buf); + Module['HEAP32'] = HEAP32 = new Int32Array(buf); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(buf); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(buf); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(buf); + Module['HEAPF32'] = HEAPF32 = new Float32Array(buf); + Module['HEAPF64'] = HEAPF64 = new Float64Array(buf); +} + +var TOTAL_STACK = 5242880; +if (Module['TOTAL_STACK']) assert(TOTAL_STACK === Module['TOTAL_STACK'], 'the stack size can no longer be determined at runtime') + +var INITIAL_MEMORY = Module['INITIAL_MEMORY'] || 16777216; +if (!Object.getOwnPropertyDescriptor(Module, 'INITIAL_MEMORY')) { + Object.defineProperty(Module, 'INITIAL_MEMORY', { + configurable: true, + get: function() { + abort('Module.INITIAL_MEMORY has been replaced with plain INITIAL_MEMORY (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)') + } + }); +} + +assert(INITIAL_MEMORY >= TOTAL_STACK, 'INITIAL_MEMORY should be larger than TOTAL_STACK, was ' + INITIAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); + +// check for full engine support (use string 'subarray' to avoid closure compiler confusion) +assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it. +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -s IMPORTED_MEMORY to define wasmMemory externally'); +assert(INITIAL_MEMORY == 16777216, 'Detected runtime INITIAL_MEMORY setting. Use -s IMPORTED_MEMORY to define wasmMemory dynamically'); + +// include: runtime_init_table.js +// In regular non-RELOCATABLE mode the table is exported +// from the wasm module and this will be assigned once +// the exports are available. +var wasmTable; + +// end include: runtime_init_table.js +// include: runtime_stack_check.js + + +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // The stack grows downwards + HEAPU32[(max >> 2)+1] = 0x2135467; + HEAPU32[(max >> 2)+2] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAP32[0] = 0x63736d65; /* 'emsc' */ +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + var cookie1 = HEAPU32[(max >> 2)+1]; + var cookie2 = HEAPU32[(max >> 2)+2]; + if (cookie1 != 0x2135467 || cookie2 != 0x89BACDFE) { + abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x2135467, but received 0x' + cookie2.toString(16) + ' ' + cookie1.toString(16)); + } + // Also test the global address 0 for integrity. + if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); +} + +// end include: runtime_stack_check.js +// include: runtime_assertions.js + + +// Endianness check (note: assumes compiler arch was little-endian) +(function() { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian!'; +})(); + +function abortFnPtrError(ptr, sig) { + abort("Invalid function pointer " + ptr + " called with signature '" + sig + "'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this). Build with ASSERTIONS=2 for more info."); +} + +// end include: runtime_assertions.js +var __ATPRERUN__ = []; // functions called before the runtime is initialized +var __ATINIT__ = []; // functions called during startup +var __ATMAIN__ = []; // functions called when main() is to be run +var __ATEXIT__ = []; // functions called during shutdown +var __ATPOSTRUN__ = []; // functions called after the main() is called + +var runtimeInitialized = false; +var runtimeExited = false; + +__ATINIT__.push({ func: function() { ___wasm_call_ctors() } }); + +function preRun() { + + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPRERUN__); +} + +function initRuntime() { + checkStackCookie(); + assert(!runtimeInitialized); + runtimeInitialized = true; + + + callRuntimeCallbacks(__ATINIT__); +} + +function preMain() { + checkStackCookie(); + + callRuntimeCallbacks(__ATMAIN__); +} + +function exitRuntime() { + checkStackCookie(); + runtimeExited = true; +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + + callRuntimeCallbacks(__ATPOSTRUN__); +} + +function addOnPreRun(cb) { + __ATPRERUN__.unshift(cb); +} + +function addOnInit(cb) { + __ATINIT__.unshift(cb); +} + +function addOnPreMain(cb) { + __ATMAIN__.unshift(cb); +} + +function addOnExit(cb) { +} + +function addOnPostRun(cb) { + __ATPOSTRUN__.unshift(cb); +} + +// include: runtime_math.js + + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32 + +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc + +assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); +assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); + +// end include: runtime_math.js +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var runDependencyWatcher = null; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(function() { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err('dependency: ' + dep); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + if (Module['monitorRunDependencies']) { + Module['monitorRunDependencies'](runDependencies); + } + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +Module["preloadedImages"] = {}; // maps url to image data +Module["preloadedAudios"] = {}; // maps url to audio data + +/** @param {string|number=} what */ +function abort(what) { + if (Module['onAbort']) { + Module['onAbort'](what); + } + + what += ''; + err(what); + + ABORT = true; + EXITSTATUS = 1; + + var output = 'abort(' + what + ') at ' + stackTrace(); + what = output; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// {{MEM_INITIALIZER}} + +// include: memoryprofiler.js + + +// end include: memoryprofiler.js +// show errors on likely calls to FS when it was not included +var FS = { + error: function() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -s FORCE_FILESYSTEM=1'); + }, + init: function() { FS.error() }, + createDataFile: function() { FS.error() }, + createPreloadedFile: function() { FS.error() }, + createLazyFile: function() { FS.error() }, + open: function() { FS.error() }, + mkdev: function() { FS.error() }, + registerDevice: function() { FS.error() }, + analyzePath: function() { FS.error() }, + loadFilesFromDB: function() { FS.error() }, + + ErrnoError: function ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + +// include: URIUtils.js + + +function hasPrefix(str, prefix) { + return String.prototype.startsWith ? + str.startsWith(prefix) : + str.indexOf(prefix) === 0; +} + +// Prefix of data URIs emitted by SINGLE_FILE and related options. +var dataURIPrefix = 'data:application/octet-stream;base64,'; + +// Indicates whether filename is a base64 data URI. +function isDataURI(filename) { + return hasPrefix(filename, dataURIPrefix); +} + +var fileURIPrefix = "file://"; + +// Indicates whether filename is delivered via file protocol (as opposed to http/https) +function isFileURI(filename) { + return hasPrefix(filename, fileURIPrefix); +} + +// end include: URIUtils.js +function createExportWrapper(name, fixedasm) { + return function() { + var displayName = name; + var asm = fixedasm; + if (!fixedasm) { + asm = Module['asm']; + } + assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization'); + assert(!runtimeExited, 'native function `' + displayName + '` called after runtime exit (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); + if (!asm[name]) { + assert(asm[name], 'exported native function `' + displayName + '` not found'); + } + return asm[name].apply(null, arguments); + }; +} + +var wasmBinaryFile = 'solver.wasm'; +if (!isDataURI(wasmBinaryFile)) { + wasmBinaryFile = locateFile(wasmBinaryFile); +} + +function getBinary(file) { + try { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } else { + throw "both async and sync fetching of the wasm failed"; + } + } + catch (err) { + abort(err); + } +} + +function getBinaryPromise() { + // If we don't have the binary yet, try to to load it asynchronously. + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use fetch if it is available and the url is not a file, otherwise fall back to XHR. + if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { + if (typeof fetch === 'function' + && !isFileURI(wasmBinaryFile) + ) { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function(response) { + if (!response['ok']) { + throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; + } + return response['arrayBuffer'](); + }).catch(function () { + return getBinary(wasmBinaryFile); + }); + } + else { + if (readAsync) { + // fetch is not available or url is file => try XHR (readAsync uses XHR internally) + return new Promise(function(resolve, reject) { + readAsync(wasmBinaryFile, function(response) { resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))) }, reject) + }); + } + } + } + + // Otherwise, getBinary should be able to get it synchronously + return Promise.resolve().then(function() { return getBinary(wasmBinaryFile); }); +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +function createWasm() { + // prepare imports + var info = { + 'env': asmLibraryArg, + 'wasi_snapshot_preview1': asmLibraryArg, + }; + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + var exports = instance.exports; + + Module['asm'] = exports; + + wasmMemory = Module['asm']['memory']; + assert(wasmMemory, "memory not found in wasm exports"); + // This assertion doesn't hold when emscripten is run in --post-link + // mode. + // TODO(sbc): Read INITIAL_MEMORY out of the wasm file in post-link mode. + //assert(wasmMemory.buffer.byteLength === 16777216); + updateGlobalBufferAndViews(wasmMemory.buffer); + + wasmTable = Module['asm']['__indirect_function_table']; + assert(wasmTable, "table not found in wasm exports"); + + removeRunDependency('wasm-instantiate'); + } + // we can't run yet (except in a pthread, where we have a custom sync instantiator) + addRunDependency('wasm-instantiate'); + + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiatedSource(output) { + // 'output' is a WebAssemblyInstantiatedSource object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above USE_PTHREADS-enabled path. + receiveInstance(output['instance']); + } + + function instantiateArrayBuffer(receiver) { + return getBinaryPromise().then(function(binary) { + return WebAssembly.instantiate(binary, info); + }).then(receiver, function(reason) { + err('failed to asynchronously prepare wasm: ' + reason); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err('warning: Loading from a file URI (' + wasmBinaryFile + ') is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing'); + } + abort(reason); + }); + } + + // Prefer streaming instantiation if available. + function instantiateAsync() { + if (!wasmBinary && + typeof WebAssembly.instantiateStreaming === 'function' && + !isDataURI(wasmBinaryFile) && + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + !isFileURI(wasmBinaryFile) && + typeof fetch === 'function') { + return fetch(wasmBinaryFile, { credentials: 'same-origin' }).then(function (response) { + var result = WebAssembly.instantiateStreaming(response, info); + return result.then(receiveInstantiatedSource, function(reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err('wasm streaming compile failed: ' + reason); + err('falling back to ArrayBuffer instantiation'); + return instantiateArrayBuffer(receiveInstantiatedSource); + }); + }); + } else { + return instantiateArrayBuffer(receiveInstantiatedSource); + } + } + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel + // to any other async startup actions they are performing. + if (Module['instantiateWasm']) { + try { + var exports = Module['instantiateWasm'](info, receiveInstance); + return exports; + } catch(e) { + err('Module.instantiateWasm callback failed with error: ' + e); + return false; + } + } + + instantiateAsync(); + return {}; // no exports yet; we'll fill them in later +} + +// Globals used by JS i64 conversions (see makeSetValue) +var tempDouble; +var tempI64; + +// === Body === + +var ASM_CONSTS = { + +}; + + + + + + + function callRuntimeCallbacks(callbacks) { + while(callbacks.length > 0) { + var callback = callbacks.shift(); + if (typeof callback == 'function') { + callback(Module); // Pass the module as the first argument. + continue; + } + var func = callback.func; + if (typeof func === 'number') { + if (callback.arg === undefined) { + wasmTable.get(func)(); + } else { + wasmTable.get(func)(callback.arg); + } + } else { + func(callback.arg === undefined ? null : callback.arg); + } + } + } + + function demangle(func) { + warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); + return func; + } + + function demangleAll(text) { + var regex = + /\b_Z[\w\d_]+/g; + return text.replace(regex, + function(x) { + var y = demangle(x); + return x === y ? x : (y + ' [' + x + ']'); + }); + } + + function jsStackTrace() { + var error = new Error(); + if (!error.stack) { + // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, + // so try that as a special-case. + try { + throw new Error(); + } catch(e) { + error = e; + } + if (!error.stack) { + return '(no stack trace available)'; + } + } + return error.stack.toString(); + } + + function stackTrace() { + var js = jsStackTrace(); + if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace'](); + return demangleAll(js); + } + + function _emscripten_memcpy_big(dest, src, num) { + HEAPU8.copyWithin(dest, src, src + num); + } + + function _emscripten_get_heap_size() { + return HEAPU8.length; + } + + function abortOnCannotGrowMemory(requestedSize) { + abort('Cannot enlarge memory arrays to size ' + requestedSize + ' bytes (OOM). Either (1) compile with -s INITIAL_MEMORY=X with X higher than the current value ' + HEAP8.length + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 '); + } + function _emscripten_resize_heap(requestedSize) { + abortOnCannotGrowMemory(requestedSize); + } + + function _exit(status) { + // void _exit(int status); + // http://pubs.opengroup.org/onlinepubs/000095399/functions/exit.html + exit(status); + } + + function flush_NO_FILESYSTEM() { + // flush anything remaining in the buffers during shutdown + if (typeof _fflush !== 'undefined') _fflush(0); + var buffers = SYSCALLS.buffers; + if (buffers[1].length) SYSCALLS.printChar(1, 10); + if (buffers[2].length) SYSCALLS.printChar(2, 10); + } + + var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream, curr) { + var buffer = SYSCALLS.buffers[stream]; + assert(buffer); + if (curr === 0 || curr === 10) { + (stream === 1 ? out : err)(UTF8ArrayToString(buffer, 0)); + buffer.length = 0; + } else { + buffer.push(curr); + } + },varargs:undefined,get:function() { + assert(SYSCALLS.varargs != undefined); + SYSCALLS.varargs += 4; + var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; + return ret; + },getStr:function(ptr) { + var ret = UTF8ToString(ptr); + return ret; + },get64:function(low, high) { + if (low >= 0) assert(high === 0); + else assert(high === -1); + return low; + }}; + function _fd_write(fd, iov, iovcnt, pnum) { + // hack to support printf in SYSCALLS_REQUIRE_FILESYSTEM=0 + var num = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAP32[(((iov)+(i*8))>>2)]; + var len = HEAP32[(((iov)+(i*8 + 4))>>2)]; + for (var j = 0; j < len; j++) { + SYSCALLS.printChar(fd, HEAPU8[ptr+j]); + } + num += len; + } + HEAP32[((pnum)>>2)] = num + return 0; + } + + function _setTempRet0($i) { + setTempRet0(($i) | 0); + } +var ASSERTIONS = true; + + + +/** @type {function(string, boolean=, number=)} */ +function intArrayFromString(stringy, dontAddNull, length) { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; +} + +function intArrayToString(array) { + var ret = []; + for (var i = 0; i < array.length; i++) { + var chr = array[i]; + if (chr > 0xFF) { + if (ASSERTIONS) { + assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); + } + chr &= 0xFF; + } + ret.push(String.fromCharCode(chr)); + } + return ret.join(''); +} + + +var asmLibraryArg = { + "emscripten_memcpy_big": _emscripten_memcpy_big, + "emscripten_resize_heap": _emscripten_resize_heap, + "exit": _exit, + "fd_write": _fd_write, + "setTempRet0": _setTempRet0 +}; +var asm = createWasm(); +/** @type {function(...*):?} */ +var ___wasm_call_ctors = Module["___wasm_call_ctors"] = createExportWrapper("__wasm_call_ctors"); + +/** @type {function(...*):?} */ +var _solver = Module["_solver"] = createExportWrapper("solver"); + +/** @type {function(...*):?} */ +var _main = Module["_main"] = createExportWrapper("main"); + +/** @type {function(...*):?} */ +var _malloc = Module["_malloc"] = createExportWrapper("malloc"); + +/** @type {function(...*):?} */ +var ___errno_location = Module["___errno_location"] = createExportWrapper("__errno_location"); + +/** @type {function(...*):?} */ +var _fflush = Module["_fflush"] = createExportWrapper("fflush"); + +/** @type {function(...*):?} */ +var stackSave = Module["stackSave"] = createExportWrapper("stackSave"); + +/** @type {function(...*):?} */ +var stackRestore = Module["stackRestore"] = createExportWrapper("stackRestore"); + +/** @type {function(...*):?} */ +var stackAlloc = Module["stackAlloc"] = createExportWrapper("stackAlloc"); + +/** @type {function(...*):?} */ +var _emscripten_stack_init = Module["_emscripten_stack_init"] = function() { + return (_emscripten_stack_init = Module["_emscripten_stack_init"] = Module["asm"]["emscripten_stack_init"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var _emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = function() { + return (_emscripten_stack_get_free = Module["_emscripten_stack_get_free"] = Module["asm"]["emscripten_stack_get_free"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var _emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = function() { + return (_emscripten_stack_get_end = Module["_emscripten_stack_get_end"] = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments); +}; + +/** @type {function(...*):?} */ +var dynCall_jiji = Module["dynCall_jiji"] = createExportWrapper("dynCall_jiji"); + + + + + +// === Auto-generated postamble setup entry stuff === + +if (!Object.getOwnPropertyDescriptor(Module, "intArrayFromString")) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "intArrayToString")) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ccall")) Module["ccall"] = function() { abort("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "cwrap")) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setValue")) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getValue")) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "allocate")) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF8ArrayToString")) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF8ToString")) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8Array")) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF8")) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF8")) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnPreRun")) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnInit")) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnPreMain")) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnExit")) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addOnPostRun")) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeStringToMemory")) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeArrayToMemory")) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeAsciiToMemory")) Module["writeAsciiToMemory"] = function() { abort("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addRunDependency")) Module["addRunDependency"] = function() { abort("'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "removeRunDependency")) Module["removeRunDependency"] = function() { abort("'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createFolder")) Module["FS_createFolder"] = function() { abort("'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createPath")) Module["FS_createPath"] = function() { abort("'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createDataFile")) Module["FS_createDataFile"] = function() { abort("'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createPreloadedFile")) Module["FS_createPreloadedFile"] = function() { abort("'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createLazyFile")) Module["FS_createLazyFile"] = function() { abort("'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createLink")) Module["FS_createLink"] = function() { abort("'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_createDevice")) Module["FS_createDevice"] = function() { abort("'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS_unlink")) Module["FS_unlink"] = function() { abort("'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; +if (!Object.getOwnPropertyDescriptor(Module, "getLEB")) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getFunctionTables")) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "alignFunctionTables")) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerFunctions")) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "addFunction")) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "removeFunction")) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "prettyPrint")) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "makeBigInt")) Module["makeBigInt"] = function() { abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getCompilerSetting")) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "print")) Module["print"] = function() { abort("'print' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "printErr")) Module["printErr"] = function() { abort("'printErr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getTempRet0")) Module["getTempRet0"] = function() { abort("'getTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setTempRet0")) Module["setTempRet0"] = function() { abort("'setTempRet0' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "callMain")) Module["callMain"] = function() { abort("'callMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "abort")) Module["abort"] = function() { abort("'abort' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToNewUTF8")) Module["stringToNewUTF8"] = function() { abort("'stringToNewUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setFileTime")) Module["setFileTime"] = function() { abort("'setFileTime' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "abortOnCannotGrowMemory")) Module["abortOnCannotGrowMemory"] = function() { abort("'abortOnCannotGrowMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscripten_realloc_buffer")) Module["emscripten_realloc_buffer"] = function() { abort("'emscripten_realloc_buffer' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ENV")) Module["ENV"] = function() { abort("'ENV' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_CODES")) Module["ERRNO_CODES"] = function() { abort("'ERRNO_CODES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ERRNO_MESSAGES")) Module["ERRNO_MESSAGES"] = function() { abort("'ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setErrNo")) Module["setErrNo"] = function() { abort("'setErrNo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetPton4")) Module["inetPton4"] = function() { abort("'inetPton4' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetNtop4")) Module["inetNtop4"] = function() { abort("'inetNtop4' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetPton6")) Module["inetPton6"] = function() { abort("'inetPton6' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "inetNtop6")) Module["inetNtop6"] = function() { abort("'inetNtop6' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readSockaddr")) Module["readSockaddr"] = function() { abort("'readSockaddr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeSockaddr")) Module["writeSockaddr"] = function() { abort("'writeSockaddr' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "DNS")) Module["DNS"] = function() { abort("'DNS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getHostByName")) Module["getHostByName"] = function() { abort("'getHostByName' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GAI_ERRNO_MESSAGES")) Module["GAI_ERRNO_MESSAGES"] = function() { abort("'GAI_ERRNO_MESSAGES' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "Protocols")) Module["Protocols"] = function() { abort("'Protocols' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "Sockets")) Module["Sockets"] = function() { abort("'Sockets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getRandomDevice")) Module["getRandomDevice"] = function() { abort("'getRandomDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "traverseStack")) Module["traverseStack"] = function() { abort("'traverseStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UNWIND_CACHE")) Module["UNWIND_CACHE"] = function() { abort("'UNWIND_CACHE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "withBuiltinMalloc")) Module["withBuiltinMalloc"] = function() { abort("'withBuiltinMalloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgsArray")) Module["readAsmConstArgsArray"] = function() { abort("'readAsmConstArgsArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readAsmConstArgs")) Module["readAsmConstArgs"] = function() { abort("'readAsmConstArgs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "mainThreadEM_ASM")) Module["mainThreadEM_ASM"] = function() { abort("'mainThreadEM_ASM' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "jstoi_q")) Module["jstoi_q"] = function() { abort("'jstoi_q' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "jstoi_s")) Module["jstoi_s"] = function() { abort("'jstoi_s' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getExecutableName")) Module["getExecutableName"] = function() { abort("'getExecutableName' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "listenOnce")) Module["listenOnce"] = function() { abort("'listenOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "autoResumeAudioContext")) Module["autoResumeAudioContext"] = function() { abort("'autoResumeAudioContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "dynCallLegacy")) Module["dynCallLegacy"] = function() { abort("'dynCallLegacy' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getDynCaller")) Module["getDynCaller"] = function() { abort("'getDynCaller' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "dynCall")) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "callRuntimeCallbacks")) Module["callRuntimeCallbacks"] = function() { abort("'callRuntimeCallbacks' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "reallyNegative")) Module["reallyNegative"] = function() { abort("'reallyNegative' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "unSign")) Module["unSign"] = function() { abort("'unSign' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "reSign")) Module["reSign"] = function() { abort("'reSign' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "formatString")) Module["formatString"] = function() { abort("'formatString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "PATH")) Module["PATH"] = function() { abort("'PATH' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "PATH_FS")) Module["PATH_FS"] = function() { abort("'PATH_FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SYSCALLS")) Module["SYSCALLS"] = function() { abort("'SYSCALLS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "syscallMmap2")) Module["syscallMmap2"] = function() { abort("'syscallMmap2' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "syscallMunmap")) Module["syscallMunmap"] = function() { abort("'syscallMunmap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getSocketFromFD")) Module["getSocketFromFD"] = function() { abort("'getSocketFromFD' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getSocketAddress")) Module["getSocketAddress"] = function() { abort("'getSocketAddress' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "JSEvents")) Module["JSEvents"] = function() { abort("'JSEvents' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerKeyEventCallback")) Module["registerKeyEventCallback"] = function() { abort("'registerKeyEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "specialHTMLTargets")) Module["specialHTMLTargets"] = function() { abort("'specialHTMLTargets' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "maybeCStringToJsString")) Module["maybeCStringToJsString"] = function() { abort("'maybeCStringToJsString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "findEventTarget")) Module["findEventTarget"] = function() { abort("'findEventTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "findCanvasEventTarget")) Module["findCanvasEventTarget"] = function() { abort("'findCanvasEventTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getBoundingClientRect")) Module["getBoundingClientRect"] = function() { abort("'getBoundingClientRect' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillMouseEventData")) Module["fillMouseEventData"] = function() { abort("'fillMouseEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerMouseEventCallback")) Module["registerMouseEventCallback"] = function() { abort("'registerMouseEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerWheelEventCallback")) Module["registerWheelEventCallback"] = function() { abort("'registerWheelEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerUiEventCallback")) Module["registerUiEventCallback"] = function() { abort("'registerUiEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerFocusEventCallback")) Module["registerFocusEventCallback"] = function() { abort("'registerFocusEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillDeviceOrientationEventData")) Module["fillDeviceOrientationEventData"] = function() { abort("'fillDeviceOrientationEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerDeviceOrientationEventCallback")) Module["registerDeviceOrientationEventCallback"] = function() { abort("'registerDeviceOrientationEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillDeviceMotionEventData")) Module["fillDeviceMotionEventData"] = function() { abort("'fillDeviceMotionEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerDeviceMotionEventCallback")) Module["registerDeviceMotionEventCallback"] = function() { abort("'registerDeviceMotionEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "screenOrientation")) Module["screenOrientation"] = function() { abort("'screenOrientation' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillOrientationChangeEventData")) Module["fillOrientationChangeEventData"] = function() { abort("'fillOrientationChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerOrientationChangeEventCallback")) Module["registerOrientationChangeEventCallback"] = function() { abort("'registerOrientationChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillFullscreenChangeEventData")) Module["fillFullscreenChangeEventData"] = function() { abort("'fillFullscreenChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerFullscreenChangeEventCallback")) Module["registerFullscreenChangeEventCallback"] = function() { abort("'registerFullscreenChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerRestoreOldStyle")) Module["registerRestoreOldStyle"] = function() { abort("'registerRestoreOldStyle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "hideEverythingExceptGivenElement")) Module["hideEverythingExceptGivenElement"] = function() { abort("'hideEverythingExceptGivenElement' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "restoreHiddenElements")) Module["restoreHiddenElements"] = function() { abort("'restoreHiddenElements' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setLetterbox")) Module["setLetterbox"] = function() { abort("'setLetterbox' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "currentFullscreenStrategy")) Module["currentFullscreenStrategy"] = function() { abort("'currentFullscreenStrategy' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "restoreOldWindowedStyle")) Module["restoreOldWindowedStyle"] = function() { abort("'restoreOldWindowedStyle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "softFullscreenResizeWebGLRenderTarget")) Module["softFullscreenResizeWebGLRenderTarget"] = function() { abort("'softFullscreenResizeWebGLRenderTarget' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "doRequestFullscreen")) Module["doRequestFullscreen"] = function() { abort("'doRequestFullscreen' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillPointerlockChangeEventData")) Module["fillPointerlockChangeEventData"] = function() { abort("'fillPointerlockChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerPointerlockChangeEventCallback")) Module["registerPointerlockChangeEventCallback"] = function() { abort("'registerPointerlockChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerPointerlockErrorEventCallback")) Module["registerPointerlockErrorEventCallback"] = function() { abort("'registerPointerlockErrorEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "requestPointerLock")) Module["requestPointerLock"] = function() { abort("'requestPointerLock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillVisibilityChangeEventData")) Module["fillVisibilityChangeEventData"] = function() { abort("'fillVisibilityChangeEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerVisibilityChangeEventCallback")) Module["registerVisibilityChangeEventCallback"] = function() { abort("'registerVisibilityChangeEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerTouchEventCallback")) Module["registerTouchEventCallback"] = function() { abort("'registerTouchEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillGamepadEventData")) Module["fillGamepadEventData"] = function() { abort("'fillGamepadEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerGamepadEventCallback")) Module["registerGamepadEventCallback"] = function() { abort("'registerGamepadEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerBeforeUnloadEventCallback")) Module["registerBeforeUnloadEventCallback"] = function() { abort("'registerBeforeUnloadEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "fillBatteryEventData")) Module["fillBatteryEventData"] = function() { abort("'fillBatteryEventData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "battery")) Module["battery"] = function() { abort("'battery' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "registerBatteryEventCallback")) Module["registerBatteryEventCallback"] = function() { abort("'registerBatteryEventCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setCanvasElementSize")) Module["setCanvasElementSize"] = function() { abort("'setCanvasElementSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getCanvasElementSize")) Module["getCanvasElementSize"] = function() { abort("'getCanvasElementSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "polyfillSetImmediate")) Module["polyfillSetImmediate"] = function() { abort("'polyfillSetImmediate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "demangle")) Module["demangle"] = function() { abort("'demangle' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "demangleAll")) Module["demangleAll"] = function() { abort("'demangleAll' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "jsStackTrace")) Module["jsStackTrace"] = function() { abort("'jsStackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackTrace")) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getEnvStrings")) Module["getEnvStrings"] = function() { abort("'getEnvStrings' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "checkWasiClock")) Module["checkWasiClock"] = function() { abort("'checkWasiClock' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "flush_NO_FILESYSTEM")) Module["flush_NO_FILESYSTEM"] = function() { abort("'flush_NO_FILESYSTEM' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64")) Module["writeI53ToI64"] = function() { abort("'writeI53ToI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Clamped")) Module["writeI53ToI64Clamped"] = function() { abort("'writeI53ToI64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToI64Signaling")) Module["writeI53ToI64Signaling"] = function() { abort("'writeI53ToI64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Clamped")) Module["writeI53ToU64Clamped"] = function() { abort("'writeI53ToU64Clamped' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeI53ToU64Signaling")) Module["writeI53ToU64Signaling"] = function() { abort("'writeI53ToU64Signaling' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readI53FromI64")) Module["readI53FromI64"] = function() { abort("'readI53FromI64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "readI53FromU64")) Module["readI53FromU64"] = function() { abort("'readI53FromU64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "convertI32PairToI53")) Module["convertI32PairToI53"] = function() { abort("'convertI32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "convertU32PairToI53")) Module["convertU32PairToI53"] = function() { abort("'convertU32PairToI53' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "uncaughtExceptionCount")) Module["uncaughtExceptionCount"] = function() { abort("'uncaughtExceptionCount' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exceptionLast")) Module["exceptionLast"] = function() { abort("'exceptionLast' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exceptionCaught")) Module["exceptionCaught"] = function() { abort("'exceptionCaught' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ExceptionInfoAttrs")) Module["ExceptionInfoAttrs"] = function() { abort("'ExceptionInfoAttrs' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "ExceptionInfo")) Module["ExceptionInfo"] = function() { abort("'ExceptionInfo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "CatchInfo")) Module["CatchInfo"] = function() { abort("'CatchInfo' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exception_addRef")) Module["exception_addRef"] = function() { abort("'exception_addRef' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "exception_decRef")) Module["exception_decRef"] = function() { abort("'exception_decRef' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "Browser")) Module["Browser"] = function() { abort("'Browser' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "funcWrappers")) Module["funcWrappers"] = function() { abort("'funcWrappers' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "getFuncWrapper")) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "setMainLoop")) Module["setMainLoop"] = function() { abort("'setMainLoop' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "FS")) Module["FS"] = function() { abort("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "mmapAlloc")) Module["mmapAlloc"] = function() { abort("'mmapAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "MEMFS")) Module["MEMFS"] = function() { abort("'MEMFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "TTY")) Module["TTY"] = function() { abort("'TTY' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "PIPEFS")) Module["PIPEFS"] = function() { abort("'PIPEFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SOCKFS")) Module["SOCKFS"] = function() { abort("'SOCKFS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "_setNetworkCallback")) Module["_setNetworkCallback"] = function() { abort("'_setNetworkCallback' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "tempFixedLengthArray")) Module["tempFixedLengthArray"] = function() { abort("'tempFixedLengthArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "miniTempWebGLFloatBuffers")) Module["miniTempWebGLFloatBuffers"] = function() { abort("'miniTempWebGLFloatBuffers' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "heapObjectForWebGLType")) Module["heapObjectForWebGLType"] = function() { abort("'heapObjectForWebGLType' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "heapAccessShiftForWebGLHeap")) Module["heapAccessShiftForWebGLHeap"] = function() { abort("'heapAccessShiftForWebGLHeap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GL")) Module["GL"] = function() { abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGet")) Module["emscriptenWebGLGet"] = function() { abort("'emscriptenWebGLGet' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "computeUnpackAlignedImageSize")) Module["computeUnpackAlignedImageSize"] = function() { abort("'computeUnpackAlignedImageSize' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetTexPixelData")) Module["emscriptenWebGLGetTexPixelData"] = function() { abort("'emscriptenWebGLGetTexPixelData' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetUniform")) Module["emscriptenWebGLGetUniform"] = function() { abort("'emscriptenWebGLGetUniform' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "emscriptenWebGLGetVertexAttrib")) Module["emscriptenWebGLGetVertexAttrib"] = function() { abort("'emscriptenWebGLGetVertexAttrib' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "writeGLArray")) Module["writeGLArray"] = function() { abort("'writeGLArray' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "AL")) Module["AL"] = function() { abort("'AL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_unicode")) Module["SDL_unicode"] = function() { abort("'SDL_unicode' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_ttfContext")) Module["SDL_ttfContext"] = function() { abort("'SDL_ttfContext' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_audio")) Module["SDL_audio"] = function() { abort("'SDL_audio' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL")) Module["SDL"] = function() { abort("'SDL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "SDL_gfx")) Module["SDL_gfx"] = function() { abort("'SDL_gfx' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLUT")) Module["GLUT"] = function() { abort("'GLUT' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "EGL")) Module["EGL"] = function() { abort("'EGL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLFW_Window")) Module["GLFW_Window"] = function() { abort("'GLFW_Window' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLFW")) Module["GLFW"] = function() { abort("'GLFW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "GLEW")) Module["GLEW"] = function() { abort("'GLEW' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "IDBStore")) Module["IDBStore"] = function() { abort("'IDBStore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "runAndAbortIfError")) Module["runAndAbortIfError"] = function() { abort("'runAndAbortIfError' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "warnOnce")) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackSave")) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackRestore")) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stackAlloc")) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "AsciiToString")) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToAscii")) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF16ToString")) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF16")) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF16")) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "UTF32ToString")) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "stringToUTF32")) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "lengthBytesUTF32")) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8")) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +if (!Object.getOwnPropertyDescriptor(Module, "allocateUTF8OnStack")) Module["allocateUTF8OnStack"] = function() { abort("'allocateUTF8OnStack' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; +Module["writeStackCookie"] = writeStackCookie; +Module["checkStackCookie"] = checkStackCookie; +if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_NORMAL")) Object.defineProperty(Module, "ALLOC_NORMAL", { configurable: true, get: function() { abort("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); +if (!Object.getOwnPropertyDescriptor(Module, "ALLOC_STACK")) Object.defineProperty(Module, "ALLOC_STACK", { configurable: true, get: function() { abort("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); + +var calledRun; + +/** + * @constructor + * @this {ExitStatus} + */ +function ExitStatus(status) { + this.name = "ExitStatus"; + this.message = "Program terminated with exit(" + status + ")"; + this.status = status; +} + +var calledMain = false; + +dependenciesFulfilled = function runCaller() { + // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) + if (!calledRun) run(); + if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled +}; + +function callMain(args) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(__ATPRERUN__.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = Module['_main']; + + args = args || []; + + var argc = args.length+1; + var argv = stackAlloc((argc + 1) * 4); + HEAP32[argv >> 2] = allocateUTF8OnStack(thisProgram); + for (var i = 1; i < argc; i++) { + HEAP32[(argv >> 2) + i] = allocateUTF8OnStack(args[i - 1]); + } + HEAP32[(argv >> 2) + argc] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // In PROXY_TO_PTHREAD builds, we should never exit the runtime below, as + // execution is asynchronously handed off to a pthread. + // if we're not running an evented main loop, it's time to exit + exit(ret, /* implicit = */ true); + } + catch(e) { + if (e instanceof ExitStatus) { + // exit() throws this once it's done to make sure execution + // has been stopped completely + return; + } else if (e == 'unwind') { + // running an evented main loop, don't immediately exit + noExitRuntime = true; + return; + } else { + var toLog = e; + if (e && typeof e === 'object' && e.stack) { + toLog = [e, e.stack]; + } + err('exception thrown: ' + toLog); + quit_(1, e); + } + } finally { + calledMain = true; + + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + // TODO(sbc): Move writeStackCookie to native to to avoid this. + _emscripten_stack_init(); + writeStackCookie(); +} + +/** @type {function(Array=)} */ +function run(args) { + args = args || arguments_; + + if (runDependencies > 0) { + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + if (calledRun) return; + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); + + if (shouldRunNow) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(function() { + setTimeout(function() { + Module['setStatus'](''); + }, 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} +Module['run'] = run; + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = function(x) { + has = true; + } + try { // it doesn't matter if it fails + var flush = flush_NO_FILESYSTEM; + if (flush) flush(); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -s FORCE_FILESYSTEM=1)'); + } +} + +/** @param {boolean|number=} implicit */ +function exit(status, implicit) { + checkUnflushedContent(); + + // if this is just main exit-ing implicitly, and the status is 0, then we + // don't need to do anything here and can just leave. if the status is + // non-zero, though, then we need to report it. + // (we may have warned about this earlier, if a situation justifies doing so) + if (implicit && noExitRuntime && status === 0) { + return; + } + + if (noExitRuntime) { + // if exit() was called, we may warn the user if the runtime isn't actually being shut down + if (!implicit) { + var msg = 'program exited (with status: ' + status + '), but EXIT_RUNTIME is not set, so halting execution but not exiting the runtime or preventing further async execution (build with EXIT_RUNTIME=1, if you want a true shutdown)'; + err(msg); + } + } else { + + EXITSTATUS = status; + + exitRuntime(); + + if (Module['onExit']) Module['onExit'](status); + + ABORT = true; + } + + quit_(status, new ExitStatus(status)); +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} + +// shouldRunNow refers to calling main(), not run(). +var shouldRunNow = true; + +if (Module['noInitialRun']) shouldRunNow = false; + +run(); + + + + + diff --git a/dist/solver.wasm b/dist/solver.wasm new file mode 100755 index 0000000000000000000000000000000000000000..90433a5d95b7aaf88fc46a8a09180f5fad56692f GIT binary patch literal 18343 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 2) + + Module["_solver"](buffer) + } } diff --git a/src/scratch.js b/src/scratch.js new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/scratch.js @@ -0,0 +1 @@ + diff --git a/wasm/libslvs.a b/wasm/libslvs.a new file mode 100644 index 0000000000000000000000000000000000000000..755d7e82d74e51b3998c4ffd8de6a44ba4aebed0 GIT binary patch literal 21289420 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

amW`n?<-whpujp=h5C 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 {J9?b}W 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 literal 0 HcmV?d00001 diff --git a/wasm/notes b/wasm/notes new file mode 100644 index 0000000..0684ce9 --- /dev/null +++ b/wasm/notes @@ -0,0 +1 @@ +emcc ./wasm/solver.c ./wasm/libslvs.a -L./wasm/ -lslvs -o ./dist/solver.js -s TOTAL_MEMORY=134217728 -s EXPORTED_FUNCTIONS='[_main, _solver]' \ No newline at end of file diff --git a/wasm/slvs.h b/wasm/slvs.h new file mode 100644 index 0000000..1c97fbf --- /dev/null +++ b/wasm/slvs.h @@ -0,0 +1,404 @@ +/*----------------------------------------------------------------------------- + * Data structures and prototypes for slvs.lib, a geometric constraint solver. + * + * See the comments in this file, the accompanying sample code that uses + * this library, and the accompanying documentation (DOC.txt). + * + * Copyright 2009-2013 Jonathan Westhues. + *---------------------------------------------------------------------------*/ + +#ifndef __SLVS_H +#define __SLVS_H + +#ifdef WIN32 +# ifdef EXPORT_DLL +# define DLL __declspec( dllexport ) +# else +# define DLL __declspec( dllimport ) +# endif +#else +# define DLL +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _MSC_VER +typedef unsigned __int32 uint32_t; +#else +#include +#endif + +typedef uint32_t Slvs_hParam; +typedef uint32_t Slvs_hEntity; +typedef uint32_t Slvs_hConstraint; +typedef uint32_t Slvs_hGroup; + +/* To obtain the 3d (not projected into a workplane) of a constraint or + * an entity, specify this instead of the workplane. */ +#define SLVS_FREE_IN_3D 0 + + +typedef struct { + Slvs_hParam h; + Slvs_hGroup group; + double val; +} Slvs_Param; + + +#define SLVS_E_POINT_IN_3D 50000 +#define SLVS_E_POINT_IN_2D 50001 + +#define SLVS_E_NORMAL_IN_3D 60000 +#define SLVS_E_NORMAL_IN_2D 60001 + +#define SLVS_E_DISTANCE 70000 + +/* The special point, normal, and distance types used for parametric step + * and repeat, extrude, and assembly are currently not exposed. Please + * contact us if you are interested in using these. */ + +#define SLVS_E_WORKPLANE 80000 +#define SLVS_E_LINE_SEGMENT 80001 +#define SLVS_E_CUBIC 80002 +#define SLVS_E_CIRCLE 80003 +#define SLVS_E_ARC_OF_CIRCLE 80004 + +typedef struct { + Slvs_hEntity h; + Slvs_hGroup group; + + int type; + + Slvs_hEntity wrkpl; + Slvs_hEntity point[4]; + Slvs_hEntity normal; + Slvs_hEntity distance; + + Slvs_hParam param[4]; +} Slvs_Entity; + +#define SLVS_C_POINTS_COINCIDENT 100000 +#define SLVS_C_PT_PT_DISTANCE 100001 +#define SLVS_C_PT_PLANE_DISTANCE 100002 +#define SLVS_C_PT_LINE_DISTANCE 100003 +#define SLVS_C_PT_FACE_DISTANCE 100004 +#define SLVS_C_PT_IN_PLANE 100005 +#define SLVS_C_PT_ON_LINE 100006 +#define SLVS_C_PT_ON_FACE 100007 +#define SLVS_C_EQUAL_LENGTH_LINES 100008 +#define SLVS_C_LENGTH_RATIO 100009 +#define SLVS_C_EQ_LEN_PT_LINE_D 100010 +#define SLVS_C_EQ_PT_LN_DISTANCES 100011 +#define SLVS_C_EQUAL_ANGLE 100012 +#define SLVS_C_EQUAL_LINE_ARC_LEN 100013 +#define SLVS_C_SYMMETRIC 100014 +#define SLVS_C_SYMMETRIC_HORIZ 100015 +#define SLVS_C_SYMMETRIC_VERT 100016 +#define SLVS_C_SYMMETRIC_LINE 100017 +#define SLVS_C_AT_MIDPOINT 100018 +#define SLVS_C_HORIZONTAL 100019 +#define SLVS_C_VERTICAL 100020 +#define SLVS_C_DIAMETER 100021 +#define SLVS_C_PT_ON_CIRCLE 100022 +#define SLVS_C_SAME_ORIENTATION 100023 +#define SLVS_C_ANGLE 100024 +#define SLVS_C_PARALLEL 100025 +#define SLVS_C_PERPENDICULAR 100026 +#define SLVS_C_ARC_LINE_TANGENT 100027 +#define SLVS_C_CUBIC_LINE_TANGENT 100028 +#define SLVS_C_EQUAL_RADIUS 100029 +#define SLVS_C_PROJ_PT_DISTANCE 100030 +#define SLVS_C_WHERE_DRAGGED 100031 +#define SLVS_C_CURVE_CURVE_TANGENT 100032 +#define SLVS_C_LENGTH_DIFFERENCE 100033 + +typedef struct { + Slvs_hConstraint h; + Slvs_hGroup group; + + int type; + + Slvs_hEntity wrkpl; + + double valA; + Slvs_hEntity ptA; + Slvs_hEntity ptB; + Slvs_hEntity entityA; + Slvs_hEntity entityB; + Slvs_hEntity entityC; + Slvs_hEntity entityD; + + int other; + int other2; +} Slvs_Constraint; + + +typedef struct { + /*** INPUT VARIABLES + * + * Here, we specify the parameters and their initial values, the entities, + * and the constraints. For example, param[] points to the array of + * parameters, which has length params, so that the last valid element + * is param[params-1]. + * + * param[] is actually an in/out variable; if the solver is successful, + * then the new values (that satisfy the constraints) are written to it. */ + Slvs_Param *param; + int params; + Slvs_Entity *entity; + int entities; + Slvs_Constraint *constraint; + int constraints; + + /* If a parameter corresponds to a point (distance, normal, etc.) being + * dragged, then specify it here. This will cause the solver to favor + * that parameter, and attempt to change it as little as possible even + * if that requires it to change other parameters more. + * + * Unused members of this array should be set to zero. */ + Slvs_hParam dragged[4]; + + /* If the solver fails, then it can determine which constraints are + * causing the problem. But this is a relatively slow process (for + * a system with n constraints, about n times as long as just solving). + * If calculateFaileds is true, then the solver will do so, otherwise + * not. */ + int calculateFaileds; + + /*** OUTPUT VARIABLES + * + * If the solver fails, then it can report which constraints are causing + * the problem. The caller should allocate the array failed[], and pass + * its size in faileds. + * + * The solver will set faileds equal to the number of problematic + * constraints, and write their Slvs_hConstraints into failed[]. To + * ensure that there is sufficient space for any possible set of + * failing constraints, faileds should be greater than or equal to + * constraints. */ + Slvs_hConstraint *failed; + int faileds; + + /* The solver indicates the number of unconstrained degrees of freedom. */ + int dof; + + /* The solver indicates whether the solution succeeded. */ +#define SLVS_RESULT_OKAY 0 +#define SLVS_RESULT_INCONSISTENT 1 +#define SLVS_RESULT_DIDNT_CONVERGE 2 +#define SLVS_RESULT_TOO_MANY_UNKNOWNS 3 + int result; +} Slvs_System; + +DLL void Slvs_Solve(Slvs_System *sys, Slvs_hGroup hg); + + +/* Our base coordinate system has basis vectors + * (1, 0, 0) (0, 1, 0) (0, 0, 1) + * A unit quaternion defines a rotation to a new coordinate system with + * basis vectors + * U V N + * which these functions compute from the quaternion. */ +DLL void Slvs_QuaternionU(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); +DLL void Slvs_QuaternionV(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); +DLL void Slvs_QuaternionN(double qw, double qx, double qy, double qz, + double *x, double *y, double *z); + +/* Similarly, compute a unit quaternion in terms of two basis vectors. */ +DLL void Slvs_MakeQuaternion(double ux, double uy, double uz, + double vx, double vy, double vz, + double *qw, double *qx, double *qy, double *qz); + + +/*------------------------------------- + * These are just convenience functions, to save you the trouble of filling + * out the structures by hand. The code is included in the header file to + * let the compiler inline them if possible. */ + +static inline Slvs_Param Slvs_MakeParam(Slvs_hParam h, Slvs_hGroup group, double val) +{ + Slvs_Param r; + r.h = h; + r.group = group; + r.val = val; + return r; +} +static inline Slvs_Entity Slvs_MakePoint2d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hParam u, Slvs_hParam v) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_POINT_IN_2D; + r.wrkpl = wrkpl; + r.param[0] = u; + r.param[1] = v; + return r; +} +static inline Slvs_Entity Slvs_MakePoint3d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hParam x, Slvs_hParam y, Slvs_hParam z) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_POINT_IN_3D; + r.wrkpl = SLVS_FREE_IN_3D; + r.param[0] = x; + r.param[1] = y; + r.param[2] = z; + return r; +} +static inline Slvs_Entity Slvs_MakeNormal3d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hParam qw, Slvs_hParam qx, + Slvs_hParam qy, Slvs_hParam qz) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_NORMAL_IN_3D; + r.wrkpl = SLVS_FREE_IN_3D; + r.param[0] = qw; + r.param[1] = qx; + r.param[2] = qy; + r.param[3] = qz; + return r; +} +static inline Slvs_Entity Slvs_MakeNormal2d(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_NORMAL_IN_2D; + r.wrkpl = wrkpl; + return r; +} +static inline Slvs_Entity Slvs_MakeDistance(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, Slvs_hParam d) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_DISTANCE; + r.wrkpl = wrkpl; + r.param[0] = d; + return r; +} +static inline Slvs_Entity Slvs_MakeLineSegment(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity ptA, Slvs_hEntity ptB) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_LINE_SEGMENT; + r.wrkpl = wrkpl; + r.point[0] = ptA; + r.point[1] = ptB; + return r; +} +static inline Slvs_Entity Slvs_MakeCubic(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity pt0, Slvs_hEntity pt1, + Slvs_hEntity pt2, Slvs_hEntity pt3) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_CUBIC; + r.wrkpl = wrkpl; + r.point[0] = pt0; + r.point[1] = pt1; + r.point[2] = pt2; + r.point[3] = pt3; + return r; +} +static inline Slvs_Entity Slvs_MakeArcOfCircle(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity normal, + Slvs_hEntity center, + Slvs_hEntity start, Slvs_hEntity end) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_ARC_OF_CIRCLE; + r.wrkpl = wrkpl; + r.normal = normal; + r.point[0] = center; + r.point[1] = start; + r.point[2] = end; + return r; +} +static inline Slvs_Entity Slvs_MakeCircle(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity wrkpl, + Slvs_hEntity center, + Slvs_hEntity normal, Slvs_hEntity radius) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_CIRCLE; + r.wrkpl = wrkpl; + r.point[0] = center; + r.normal = normal; + r.distance = radius; + return r; +} +static inline Slvs_Entity Slvs_MakeWorkplane(Slvs_hEntity h, Slvs_hGroup group, + Slvs_hEntity origin, Slvs_hEntity normal) +{ + Slvs_Entity r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = SLVS_E_WORKPLANE; + r.wrkpl = SLVS_FREE_IN_3D; + r.point[0] = origin; + r.normal = normal; + return r; +} + +static inline Slvs_Constraint Slvs_MakeConstraint(Slvs_hConstraint h, + Slvs_hGroup group, + int type, + Slvs_hEntity wrkpl, + double valA, + Slvs_hEntity ptA, + Slvs_hEntity ptB, + Slvs_hEntity entityA, + Slvs_hEntity entityB) +{ + Slvs_Constraint r; + memset(&r, 0, sizeof(r)); + r.h = h; + r.group = group; + r.type = type; + r.wrkpl = wrkpl; + r.valA = valA; + r.ptA = ptA; + r.ptB = ptB; + r.entityA = entityA; + r.entityB = entityB; + return r; +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wasm/solver.c b/wasm/solver.c new file mode 100644 index 0000000..7cafa87 --- /dev/null +++ b/wasm/solver.c @@ -0,0 +1,281 @@ +/*----------------------------------------------------------------------------- + * Some sample code for slvs.dll. We draw some geometric entities, provide + * initial guesses for their positions, and then constrain them. The solver + * calculates their new positions, in order to satisfy the constraints. + * + * Copyright 2008-2013 Jonathan Westhues. + *---------------------------------------------------------------------------*/ +#ifdef WIN32 +# include +#endif +#include +#include +#include +#include + +#include "slvs.h" + +static Slvs_System sys; + +static void *CheckMalloc(size_t n) +{ + void *r = malloc(n); + if(!r) { + printf("out of memory!\n"); + exit(-1); + } + return r; +} + +/*----------------------------------------------------------------------------- + * An example of a constraint in 3d. We create a single group, with some + * entities and constraints. + *---------------------------------------------------------------------------*/ +void Example3d() +{ + /* This will contain a single group, which will arbitrarily number 1. */ + Slvs_hGroup g = 1; + + /* A point, initially at (x y z) = (10 10 10) */ + sys.param[sys.params++] = Slvs_MakeParam(1, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(2, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(3, g, 10.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(101, g, 1, 2, 3); + /* and a second point at (20 20 20) */ + sys.param[sys.params++] = Slvs_MakeParam(4, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(5, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(6, g, 20.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(102, g, 4, 5, 6); + /* and a line segment connecting them. */ + sys.entity[sys.entities++] = Slvs_MakeLineSegment(200, g, + SLVS_FREE_IN_3D, 101, 102); + + /* The distance between the points should be 30.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 1, g, + SLVS_C_PT_PT_DISTANCE, + SLVS_FREE_IN_3D, + 30.0, + 101, 102, 0, 0); + + /* Let's tell the solver to keep the second point as close to constant + * as possible, instead moving the first point. */ + sys.dragged[0] = 4; + sys.dragged[1] = 5; + sys.dragged[2] = 6; + + /* Now that we have written our system, we solve. */ + Slvs_Solve(&sys, g); + + if(sys.result == SLVS_RESULT_OKAY) { + printf("okay; now at (%.3f %.3f %.3f)\n" + " (%.3f %.3f %.3f)\n", + sys.param[0].val, sys.param[1].val, sys.param[2].val, + sys.param[3].val, sys.param[4].val, sys.param[5].val); + printf("%d DOF\n", sys.dof); + } else { + printf("solve failed"); + } +} + +/*----------------------------------------------------------------------------- + * An example of a constraint in 2d. In our first group, we create a workplane + * along the reference frame's xy plane. In a second group, we create some + * entities in that group and dimension them. + *---------------------------------------------------------------------------*/ +void Example2d(float xx) +{ + Slvs_hGroup g; + double qw, qx, qy, qz; + + g = 1; + /* First, we create our workplane. Its origin corresponds to the origin + * of our base frame (x y z) = (0 0 0) */ + sys.param[sys.params++] = Slvs_MakeParam(1, g, 0.0); + sys.param[sys.params++] = Slvs_MakeParam(2, g, 0.0); + sys.param[sys.params++] = Slvs_MakeParam(3, g, 0.0); + sys.entity[sys.entities++] = Slvs_MakePoint3d(101, g, 1, 2, 3); + /* and it is parallel to the xy plane, so it has basis vectors (1 0 0) + * and (0 1 0). */ + Slvs_MakeQuaternion(1, 0, 0, + 0, 1, 0, &qw, &qx, &qy, &qz); + sys.param[sys.params++] = Slvs_MakeParam(4, g, qw); + sys.param[sys.params++] = Slvs_MakeParam(5, g, qx); + sys.param[sys.params++] = Slvs_MakeParam(6, g, qy); + sys.param[sys.params++] = Slvs_MakeParam(7, g, qz); + sys.entity[sys.entities++] = Slvs_MakeNormal3d(102, g, 4, 5, 6, 7); + + sys.entity[sys.entities++] = Slvs_MakeWorkplane(200, g, 101, 102); + + /* Now create a second group. We'll solve group 2, while leaving group 1 + * constant; so the workplane that we've created will be locked down, + * and the solver can't move it. */ + g = 2; + /* These points are represented by their coordinates (u v) within the + * workplane, so they need only two parameters each. */ + sys.param[sys.params++] = Slvs_MakeParam(11, g, 10.0); + sys.param[sys.params++] = Slvs_MakeParam(12, g, 20.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(301, g, 200, 11, 12); + + sys.param[sys.params++] = Slvs_MakeParam(13, g, 20.0); + sys.param[sys.params++] = Slvs_MakeParam(14, g, 10.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(302, g, 200, 13, 14); + + /* And we create a line segment with those endpoints. */ + sys.entity[sys.entities++] = Slvs_MakeLineSegment(400, g, + 200, 301, 302); + + /* Now three more points. */ + + sys.param[sys.params++] = Slvs_MakeParam(15, g, 110.0); + sys.param[sys.params++] = Slvs_MakeParam(16, g, 120.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(303, g, 200, 15, 16); + + sys.param[sys.params++] = Slvs_MakeParam(17, g, 120.0); + sys.param[sys.params++] = Slvs_MakeParam(18, g, 110.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(304, g, 200, 17, 18); + + sys.param[sys.params++] = Slvs_MakeParam(19, g, 115.0); + sys.param[sys.params++] = Slvs_MakeParam(20, g, xx); + sys.entity[sys.entities++] = Slvs_MakePoint2d(305, g, 200, 19, 20); + + /* And arc, centered at point 303, starting at point 304, ending at + * point 305. */ + sys.entity[sys.entities++] = Slvs_MakeArcOfCircle(401, g, 200, 102, + 303, 304, 305); + + /* Now one more point, and a distance */ + sys.param[sys.params++] = Slvs_MakeParam(21, g, 200.0); + sys.param[sys.params++] = Slvs_MakeParam(22, g, 200.0); + sys.entity[sys.entities++] = Slvs_MakePoint2d(306, g, 200, 21, 22); + + sys.param[sys.params++] = Slvs_MakeParam(23, g, 30.0); + sys.entity[sys.entities++] = Slvs_MakeDistance(307, g, 200, 23); + + /* And a complete circle, centered at point 306 with radius equal to + * distance 307. The normal is 102, the same as our workplane. */ + sys.entity[sys.entities++] = Slvs_MakeCircle(402, g, 200, + 306, 102, 307); + + + /* The length of our line segment is 30.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 1, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 30.0, + 301, 302, 0, 0); + + /* And the distance from our line segment to the origin is 10.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 2, g, + SLVS_C_PT_LINE_DISTANCE, + 200, + 10.0, + 101, 0, 400, 0); + /* And the line segment is vertical. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 3, g, + SLVS_C_VERTICAL, + 200, + 0.0, + 0, 0, 400, 0); + /* And the distance from one endpoint to the origin is 15.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 4, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 15.0, + 301, 101, 0, 0); +#if 0 + /* And same for the other endpoint; so if you add this constraint then + * the sketch is overconstrained and will signal an error. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 5, g, + SLVS_C_PT_PT_DISTANCE, + 200, + 18.0, + 302, 101, 0, 0); +#endif /* 0 */ + + /* The arc and the circle have equal radius. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 6, g, + SLVS_C_EQUAL_RADIUS, + 200, + 0.0, + 0, 0, 401, 402); + /* The arc has radius 17.0 units. */ + sys.constraint[sys.constraints++] = Slvs_MakeConstraint( + 7, g, + SLVS_C_DIAMETER, + 200, + 17.0*2, + 0, 0, 401, 0); + + /* If the solver fails, then ask it to report which constraints caused + * the problem. */ + sys.calculateFaileds = 1; + + /* And solve. */ + Slvs_Solve(&sys, g); + + if(sys.result == SLVS_RESULT_OKAY) { + printf("solved okay\n"); + printf("line from (%.3f %.3f) to (%.3f %.3f)\n", + sys.param[7].val, sys.param[8].val, + sys.param[9].val, sys.param[10].val); + + printf("arc center (%.3f %.3f) start (%.3f %.3f) finish (%.3f %.3f)\n", + sys.param[11].val, sys.param[12].val, + sys.param[13].val, sys.param[14].val, + sys.param[15].val, sys.param[16].val); + + printf("circle center (%.3f %.3f) radius %.3f\n", + sys.param[17].val, sys.param[18].val, + sys.param[19].val); + printf("%d DOF\n", sys.dof); + } else { + int i; + printf("solve failed: problematic constraints are:"); + for(i = 0; i < sys.faileds; i++) { + printf(" %d", sys.failed[i]); + } + printf("\n"); + if(sys.result == SLVS_RESULT_INCONSISTENT) { + printf("system inconsistent\n"); + } else { + printf("system nonconvergent\n"); + } + } +} + + +int solver(float *ptr) +{ + + // Example2d(150.0); + // sys.params = sys.constraints = sys.entities = 0; + for (int i=0; i<10 ;i++) { + printf("%f\n",*ptr++); + } + return 0; +} + + +int main(int argc, char *argv[]) +{ + sys.param = CheckMalloc(50*sizeof(sys.param[0])); + sys.entity = CheckMalloc(50*sizeof(sys.entity[0])); + sys.constraint = CheckMalloc(50*sizeof(sys.constraint[0])); + + sys.failed = CheckMalloc(50*sizeof(sys.failed[0])); + sys.faileds = 50; + + + // Example2d(150.0); + + printf("hello\n"); + return 0; +} +